@@ -1280,6 +1280,8 @@ public function process() {
12801280 $ folders = array_map (function ($ ds ) { return $ ds ['folder ' ]; }, $ data_sources );
12811281 }
12821282
1283+ $ allow_all_folders = false ;
1284+
12831285 list ($ sort , $ reverse ) = process_sort_arg ($ this ->request ->get ['sort ' ], $ this ->user_config ->get ('default_sort_order_setting ' , 'arrival ' ));
12841286
12851287 switch ($ this ->get ('list_path ' )) {
@@ -1294,6 +1296,10 @@ public function process() {
12941296 $ date = process_since_argument ($ this ->user_config ->get ('all_since_setting ' , DEFAULT_SINCE ));
12951297 break ;
12961298 case 'flagged ' :
1299+ $ allow_all_folders = (bool )$ this ->user_config ->get ('allow_search_all_flagged_folder_setting ' , DEFAULT_FLAGGED_SEARCH_IN_ALL_FOLDERS );
1300+ $ filter = 'FLAGGED ' ;
1301+ $ date = process_since_argument ($ this ->user_config ->get ('flagged_since_setting ' , DEFAULT_FLAGGED_SINCE ));
1302+ $ limit = $ this ->user_config ->get ('flagged_per_source_setting ' , DEFAULT_FLAGGED_PER_SOURCE );
12971303 case 'unread ' :
12981304 $ filter = $ this ->get ('list_path ' ) == 'unread ' ? 'UNSEEN ' : mb_strtoupper ($ this ->get ('list_path ' ));
12991305 default :
@@ -1317,33 +1323,54 @@ public function process() {
13171323
13181324 $ messages = [];
13191325 $ status = [];
1326+ $ uids = [];
13201327 foreach ($ ids as $ key => $ id ) {
13211328 $ details = Hm_IMAP_List::dump ($ id );
13221329 $ mailbox = Hm_IMAP_List::get_connected_mailbox ($ id , $ this ->cache );
13231330 if ($ this ->get ('list_path ' ) == 'snoozed ' && !$ mailbox ->folder_exists ('Snoozed ' )) {
13241331 continue ;
13251332 }
1326- $ uids = $ mailbox ->search (hex2bin ($ folders [$ key ]), $ filter , $ terms , $ sort , $ reverse );
1327-
1328- $ total = count ($ uids );
1329- $ uids = array_slice ($ uids , 0 , $ limit );
1330-
1331- $ headers = $ mailbox ->get_message_list (hex2bin ($ folders [$ key ]), $ uids );
1332- foreach ($ uids as $ uid ) {
1333- if (isset ($ headers [$ uid ])) {
1334- $ msg = $ headers [$ uid ];
1335- } elseif (isset ($ headers [bin2hex ($ uid )])) {
1336- $ msg = $ headers [bin2hex ($ uid )];
1337- } else {
1338- continue ;
1333+ if ($ allow_all_folders ) {
1334+ $ all_folders = $ mailbox ->get_folders ();
1335+ foreach (array_keys ($ all_folders ) as $ folder ) {
1336+ $ uids = $ mailbox ->search ($ folder , $ filter , $ terms , $ sort , $ reverse );
1337+ $ headers = $ mailbox ->get_message_list ($ folder , $ uids );
1338+ $ uids = array_slice ($ uids , 0 , $ limit );
1339+ foreach ($ uids as $ uid ) {
1340+ if (isset ($ headers [$ uid ])) {
1341+ $ msg = $ headers [$ uid ];
1342+ } elseif (isset ($ headers [bin2hex ($ uid )])) {
1343+ $ msg = $ headers [bin2hex ($ uid )];
1344+ } else {
1345+ continue ;
1346+ }
1347+ $ msg ['server_id ' ] = $ id ;
1348+ $ msg ['server_name ' ] = $ details ['name ' ];
1349+ $ msg ['folder ' ] = $ folders [$ key ];
1350+ $ messages [] = $ msg ;
1351+ }
1352+ $ status ['imap_ ' .$ id .'_ ' .bin2hex ($ folder )] = $ mailbox ->get_folder_status ($ folder );
13391353 }
1340- $ msg ['server_id ' ] = $ id ;
1341- $ msg ['server_name ' ] = $ details ['name ' ];
1342- $ msg ['folder ' ] = $ folders [$ key ];
1343- $ messages [] = $ msg ;
1354+ }else {
1355+ $ uids = $ mailbox ->search (hex2bin ($ folders [$ key ]), $ filter , $ terms , $ sort , $ reverse );
1356+ $ headers = $ mailbox ->get_message_list (hex2bin ($ folders [$ key ]), $ uids );
1357+ $ uids = array_slice ($ uids , 0 , $ limit );
1358+ // $total = count($uids);
1359+ foreach ($ uids as $ uid ) {
1360+ if (isset ($ headers [$ uid ])) {
1361+ $ msg = $ headers [$ uid ];
1362+ } elseif (isset ($ headers [bin2hex ($ uid )])) {
1363+ $ msg = $ headers [bin2hex ($ uid )];
1364+ } else {
1365+ continue ;
1366+ }
1367+ $ msg ['server_id ' ] = $ id ;
1368+ $ msg ['server_name ' ] = $ details ['name ' ];
1369+ $ msg ['folder ' ] = $ folders [$ key ];
1370+ $ messages [] = $ msg ;
1371+ }
1372+ $ status ['imap_ ' .$ id .'_ ' .$ folders [$ key ]] = $ mailbox ->get_folder_status (hex2bin ($ folders [$ key ]));
13441373 }
1345-
1346- $ status ['imap_ ' .$ id .'_ ' .$ folders [$ key ]] = $ mailbox ->get_folder_status (hex2bin ($ folders [$ key ]));
13471374 }
13481375
13491376 $ this ->out ('folder_status ' , $ status );
0 commit comments