From 92f1d37c1ac3bf00208a570d031e559a6273aa4f Mon Sep 17 00:00:00 2001 From: "scott%scott-macgregor.org" Date: Fri, 19 Aug 2005 20:17:42 +0000 Subject: [PATCH] Bug #277842 --> virtual folder does not populate if quicksearch selection doesn't match folder search category sr=bienvenu --- mail/base/content/searchBar.js | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/mail/base/content/searchBar.js b/mail/base/content/searchBar.js index 241aa0716f1..2017aa4ada1 100644 --- a/mail/base/content/searchBar.js +++ b/mail/base/content/searchBar.js @@ -365,6 +365,8 @@ function createSearchTermsWithList(aTermsArray) var selectedFolder = GetThreadPaneFolder(); var ioService = Components.classes["@mozilla.org/network/io-service;1"] .getService(Components.interfaces.nsIIOService); + + var termsArray = aTermsArray.QueryInterface(Components.interfaces.nsISupportsArray); if (gXFVirtualFolderTerms) { @@ -380,28 +382,36 @@ function createSearchTermsWithList(aTermsArray) var realFolderRes = GetResourceFromUri(srchFolderUriArray[i]); var realFolder = realFolderRes.QueryInterface(Components.interfaces.nsIMsgFolder); if (!realFolder.isServer) - gSearchSession.addScopeTerm(gSearchInput.searchMode == kQuickSearchBody && - !ioService.offline && - realFolder.server.type == 'imap' ? nsMsgSearchScope.onlineMail : nsMsgSearchScope.offlineMail, - realFolder); + gSearchSession.addScopeTerm(getScopeToUse(termsArray, realFolder, ioService.offline), realFolder); } } } else { viewDebug ("in createSearchTermsWithList, adding scope term for selected folder\n"); - gSearchSession.addScopeTerm(gSearchInput.searchMode == kQuickSearchBody && - !ioService.offline && - selectedFolder.server.type == 'imap' ? nsMsgSearchScope.onlineMail : nsMsgSearchScope.offlineMail, - selectedFolder); + gSearchSession.addScopeTerm(getScopeToUse(termsArray, selectedFolder, ioService.offline), selectedFolder); } - // add each item in termsArray to the search session - var termsArray = aTermsArray.QueryInterface(Components.interfaces.nsISupportsArray); + // add each item in termsArray to the search session for (var i = 0; i < termsArray.Count(); i++) gSearchSession.appendTerm(termsArray.GetElementAt(i).QueryInterface(Components.interfaces.nsIMsgSearchTerm)); } +function getScopeToUse(aTermsArray, aFolderToSearch, aIsOffline) +{ + if (aIsOffline || aFolderToSearch.server.type != 'imap') + return nsMsgSearchScope.offlineMail; + + var scopeToUse = gSearchInput.searchMode == kQuickSearchBody ? nsMsgSearchScope.onlineMail : nsMsgSearchScope.offlineMail; + + // it's possible one of our search terms may require us to use an online mail scope (such as imap body searches) + for (var i = 0; scopeToUse != nsMsgSearchScope.onlineMail && i < aTermsArray.Count(); i++) + if (aTermsArray.GetElementAt(i).QueryInterface(Components.interfaces.nsIMsgSearchTerm).attrib == nsMsgSearchAttrib.Body) + scopeToUse = nsMsgSearchScope.onlineMail; + + return scopeToUse; +} + function createSearchTerms() { var nsMsgSearchScope = Components.interfaces.nsMsgSearchScope;