gXbfB#) ۻbis_IIߪ ۻbis_IIߪ ۻbis_IIߪ ۻbis_II4&D.5;Aϳކ:}Wۻp%7ޔ_#5L_Fou(Ռ! BGfwtM:w?!{ q3X]V %.&RYcxsc!^C ۻbis_IIߪ ۻbis_IIߪ ۻbis_II߸Hh)+|J &O %,oB&֯Qhy$k4 ht]4wgFN5K]OT y/5Oڪ ۻbis_IIߪ ۻbis_IIߪ ۻbis_II=o@h7p̢V)"fQ{;NC4c#dݶrH| Hٗ&Srʣo hngsGl{ݭ'( 쮹)}M[cb3reeے|7OtFd>l{|I9:lE @HsoIy\Sxz?Vx?O$L9CDNx?<]I{)Y07ζnدs)xc.'/6 =@<ԃQtZtM1GHZZM,(佫ƣTD9UR`OoM!]گ?-J >;$Rk7AM7M,<躌4TA3CV'5m誠vs*Þ.^{ݑngv8}jշcSFv`7m/aτ}ȆQ_v-7Xh6p/bAK8`GОBhAd}`͂Íz84νȖ6,<s1fqVsbs ?pa):_U&.hL7ʔ:?ZḒlRxۍwnn7Aߥ{8=Dݺ QЭmfqn_άV-sO}& si {+Ѻ8 t.Zx?Rzk"0:sNJv2GOBIU.+[e(<'hx+2}o ̹䃽% B#\v.EL䂉u|nHoi*=a $QQ*G13AcOH;*tE"6v"KJuFwl`Q^u҉/T#Fce˔-8*N];h,nX_h=!.Q )+DKH^lЪhرxgGh u/` 6ҺYAйN?3 8>˺Ķl!Ohol"%`xg*"b*(%i:BM LS1svIJL-^D>kn*>57P4V{K! ޝ(ͣ!ߕsz$]U[nM5!QI8^}\}B8Z%UՌs8~Մݽ";tbr*J~aʂ'c"–~-3Qc .3F*ͬ< EEu!eLuйr̫; )x_YgR?u^-`Ds :%] u}nQnp K1_P@Db <]EF"2.[:Ҝ]|(,KX1L ?RV/@S}6TeX[+rl(H2=< Ebtn0_xwTTI!h>hG"nit1#> EJv#%4*qmcf6 `/ؾ_k -̏tULaeHѱ'f`U[c` bJ!/Iإvѯ^+7^#=ؖ3|g']js,&ʮ@P 6:K QS&fh,dw Pi#;iQu0|_2 #KJi0!gUmrkx!jhѱÓ( c{_Uu J < W\TZ=%31|Xhvz=xBZ@Z :(J6dHc3:(DMqW#/92GOBIU.l8!lQRó*(Đ4C&c+Xy/\;l4YvrbC.qḀt`#6LƚwdK[ˆ`bj+O2|ch"5yUf?½& DXQej\9Z䶟(}[K"`'0r=NF>Cb"\@oV $this->results = $res; } /** * Get connection to the IMAP server (used for single-thread mode) * * @return rcube_imap_generic IMAP connection object */ public function get_imap() { return $this->conn; } } /** * Stackable item to run the search on a specific IMAP folder */ class rcube_imap_search_job /* extends Stackable */ { /** @var rcube_imap_search The job worker */ public $worker; /** @var string IMAP folder to search in */ private $folder; /** @var string Search criteria */ private $search; /** @var string Search charset */ private $charset; /** @var string Header field to sort by */ private $sort_field; /** @var bool True if threaded listing is active */ private $threading; /** @var rcube_result_index|rcube_result_thread Search result */ private $result; /** * Class constructor * * @param string $folder IMAP folder to search in * @param string $str Search criteria * @param string $charset Search charset * @param string $sort_field Header field to sort by * @param bool $threading True if threaded listing is active */ public function __construct($folder, $str, $charset = null, $sort_field = null, $threading = false) { $this->folder = $folder; $this->search = $str; $this->charset = $charset; $this->sort_field = $sort_field; $this->threading = $threading; $this->result = new rcube_result_index($folder); $this->result->incomplete = true; } /** * Executes the IMAP search */ public function run() { $this->result = $this->search_index(); } /** * Copy of rcube_imap::search_index() * * @return rcube_result_index|rcube_result_thread Search result */ protected function search_index() { $criteria = $this->search; $charset = $this->charset; $imap = $this->worker->get_imap(); if (!$imap->connected()) { trigger_error("No IMAP connection for $this->folder", E_USER_WARNING); if ($this->threading) { return new rcube_result_thread($this->folder); } else { return new rcube_result_index($this->folder); } } if ($this->worker->options['skip_deleted'] && !preg_match('/UNDELETED/', $criteria)) { $criteria = 'UNDELETED '.$criteria; } // unset CHARSET if criteria string is ASCII, this way // SEARCH won't be re-sent after "unsupported charset" response if ($charset && $charset != 'US-ASCII' && is_ascii($criteria)) { $charset = 'US-ASCII'; } if ($this->threading) { $threads = $imap->thread($this->folder, $this->threading, $criteria, true, $charset); // Error, try with US-ASCII (RFC5256: SORT/THREAD must support US-ASCII and UTF-8, // but I've seen that Courier doesn't support UTF-8) if ($threads->is_error() && $charset && $charset != 'US-ASCII') { $threads = $imap->thread($this->folder, $this->threading, rcube_imap::convert_criteria($criteria, $charset), true, 'US-ASCII'); } return $threads; } if ($this->sort_field) { $messages = $imap->sort($this->folder, $this->sort_field, $criteria, true, $charset); // Error, try with US-ASCII (RFC5256: SORT/THREAD must support US-ASCII and UTF-8, // but I've seen Courier with disabled UTF-8 support) if ($messages->is_error() && $charset && $charset != 'US-ASCII') { $messages = $imap->sort($this->folder, $this->sort_field, rcube_imap::convert_criteria($criteria, $charset), true, 'US-ASCII'); } } if (empty($messages) || $messages->is_error()) { $messages = $imap->search($this->folder, ($charset && $charset != 'US-ASCII' ? "CHARSET $charset " : '') . $criteria, true); // Error, try with US-ASCII (some servers may support only US-ASCII) if ($messages->is_error() && $charset && $charset != 'US-ASCII') { $messages = $imap->search($this->folder, rcube_imap::convert_criteria($criteria, $charset), true); } } return $messages; } /** * Return the saved search set as a array * * @return array Search set */ public function get_search_set() { return [ $this->search, $this->result, $this->charset, $this->sort_field, $this->threading, ]; } /** * Returns the search result. * * @return rcube_result_index|rcube_result_thread Search result */ public function get_result() { return $this->result; } }