make local msg body search not lock up ui, remove unused code, r=naving, sr=sspitzer 127398

git-svn-id: svn://10.0.0.236/trunk@134369 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
bienvenu%netscape.com
2002-11-23 18:50:00 +00:00
parent 3743887e26
commit cbf9b89773
2 changed files with 73 additions and 235 deletions

View File

@@ -261,59 +261,6 @@ void nsMsgSearchBoolExpression::GenerateEncodeStr(nsCString * buffer)
}
//---------------- Adapter class for searching offline IMAP folders -----------
//-----------------------------------------------------------------------------
nsMsgSearchIMAPOfflineMail::nsMsgSearchIMAPOfflineMail (nsIMsgSearchScopeTerm *scope, nsISupportsArray *termList) : nsMsgSearchOfflineMail(scope, termList)
{
}
nsMsgSearchIMAPOfflineMail::~nsMsgSearchIMAPOfflineMail()
{
}
nsresult nsMsgSearchIMAPOfflineMail::ValidateTerms ()
{
// most of this was copied from MSG_SearchOffline::ValidateTerms()....Difference: When using IMAP offline, we do not
// have a mail folder to validate.
nsresult err = NS_OK;
#ifdef HAVE_SEARCH_PORT
err = nsMsgSearchOfflineMail::ValidateTerms ();
if (NS_OK == err)
{
// Mail folder must exist. Don't worry about the summary file now since we may
// have to regenerate the index later
// XP_StatStruct fileStatus;
// if (!XP_Stat (m_scope->GetMailPath(), &fileStatus, xpMailFolder))
// {
// Make sure the terms themselves are valid
nsCOMPtr<nsIMsgValidityManager> validityManager =
do_GetService(NS_MSGSEARCHVALIDITYMANAGER_CONTRACTID, &err);
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsIMsgSearchValidityTable> table;
err = validityManager->GetTable (nsMsgSearchValidityManager::offlineMail,
getter_AddRefs(table));
if (NS_OK == err)
{
NS_ASSERTION (table, "found validity table");
err = table->ValidateTerms (m_searchTerms);
}
// }
// else
// NS_ASSERTION(0);
}
#endif
return err;
}
//-----------------------------------------------------------------------------
//---------------- Adapter class for searching offline folders ----------------
//-----------------------------------------------------------------------------
@@ -339,33 +286,6 @@ nsresult nsMsgSearchOfflineMail::ValidateTerms ()
{
nsresult err = NS_OK;
err = nsMsgSearchAdapter::ValidateTerms ();
#ifdef HAVE_SEARCH_PORT
if (NS_OK == err)
{
// Mail folder must exist. Don't worry about the summary file now since we may
// have to regenerate the index later
XP_StatStruct fileStatus;
if (!XP_Stat (m_scope->GetMailPath(), &fileStatus, xpMailFolder))
{
// Make sure the terms themselves are valid
nsCOMPtr<nsIMsgValidityManager> validityManager =
do_GetService(NS_MSGSEARCHVALIDITYMANAGER_CONTRACTID, &err);
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsIMsgSearchValidityTable> table;
err = validityManager->GetTable(nsMsgSearchValidityManager::offlineMail,
getter_AddRefs(table));
if (NS_OK == err)
{
NS_ASSERTION (table, "didn't get validity table");
err = table->ValidateTerms (m_searchTerms);
}
}
else
NS_ASSERTION(PR_FALSE, "local folder doesn't exist");
}
#endif // HAVE_SEARCH_PORT
return err;
}
@@ -426,80 +346,6 @@ nsresult nsMsgSearchOfflineMail::OpenSummaryFile ()
}
nsresult nsMsgSearchOfflineMail::BuildSummaryFile ()
{
// State machine for rebuilding the summary file asynchronously in the
// middle of the already-asynchronous search.
// ### This would be much better done with a url queue or at least chained urls.
// I'm not sure if that's possible, however.
nsresult err = NS_OK;
#ifdef HAVE_SEARCH_PORT
int mkErr = 0;
switch (m_parserState)
{
case kOpenFolderState:
mkErr = m_mailboxParser->BeginOpenFolderSock (m_scope->GetMailPath(), nsnull, 0, nsnull);
if (mkErr == MK_WAITING_FOR_CONNECTION)
m_parserState++;
else
err = SummaryFileError();
break;
case kParseMoreState:
mkErr = m_mailboxParser->ParseMoreFolderSock (m_scope->GetMailPath(), nsnull, 0, nsnull);
if (mkErr == MK_CONNECTED)
m_parserState++;
else
if (mkErr != MK_WAITING_FOR_CONNECTION)
err = SummaryFileError();
break;
case kCloseFolderState:
m_mailboxParser->CloseFolderSock (nsnull, nsnull, 0, nsnull);
if (!m_mailboxParser->GetIsRealMailFolder())
{
// mailbox parser has already closed the db (right?)
NS_ASSERTION(m_mailboxParser->GetDB() == 0, "parser hasn't closed DB");
m_db = nsnull;
err = SearchError_ScopeDone;
}
delete m_mailboxParser;
m_mailboxParser = nsnull;
// Put our regular "searching Inbox..." status text back up
m_scope->m_frame->UpdateStatusBar(MK_nsMsgSearch_STATUS);
break;
}
#endif // HAVE_SEARCH_PORT
return err;
}
nsresult nsMsgSearchOfflineMail::SummaryFileError ()
{
#ifdef HAVE_SEARCH_PORT
char *errTemplate = XP_GetString(MK_MSG_CANT_SEARCH_IF_NO_SUMMARY);
if (errTemplate)
{
char *prompt = PR_smprintf (errTemplate, m_scope->m_folder->GetName());
if (prompt)
{
FE_Alert (m_scope->m_frame->GetContext(), prompt);
XP_FREE(prompt);
}
}
// If we got a summary file error while parsing, clean up all the parser state
if (m_mailboxParser)
{
m_mailboxParser->CloseFolderSock (nsnull, nsnull, 0, nsnull);
delete m_mailboxParser;
m_mailboxParser = nsnull;
m_db = nsnull;
}
#endif // HAVE_SEARCH_PORT
return NS_OK;// SearchError_ScopeDone;
}
nsresult
nsMsgSearchOfflineMail::MatchTermsForFilter(nsIMsgDBHdr *msgToMatch,
nsISupportsArray *termList,
@@ -801,8 +647,7 @@ nsresult nsMsgSearchOfflineMail::Search (PRBool *aDone)
nsresult dbErr = NS_OK;
nsCOMPtr<nsIMsgDBHdr> msgDBHdr;
const PRInt32 kNumHdrsInSlice = 500;
const PRUint32 kTimeSliceInMS = 200;
*aDone = PR_FALSE;
// Try to open the DB lazily. This will set up a parser if one is required
@@ -818,7 +663,8 @@ nsresult nsMsgSearchOfflineMail::Search (PRBool *aDone)
dbErr = m_db->EnumerateMessages (getter_AddRefs(m_listContext));
if (NS_SUCCEEDED(dbErr) && m_listContext)
{
for (PRInt32 hdrIndex = 0; !*aDone && hdrIndex < kNumHdrsInSlice; hdrIndex++)
PRIntervalTime startTime = PR_IntervalNow();
while (!*aDone) // we'll break out of the loop after kTimeSliceInMS milliseconds
{
nsCOMPtr<nsISupports> currentItem;
@@ -842,7 +688,11 @@ nsresult nsMsgSearchOfflineMail::Search (PRBool *aDone)
{
AddResultElement (msgDBHdr);
}
// m_scope->m_frame->IncrementOfflineProgress();
PRIntervalTime elapsedTime;
LL_SUB(elapsedTime, PR_IntervalNow(), startTime);
// check if more than kTimeSliceInMS milliseconds have elapsed in this time slice started
if (PR_IntervalToMilliseconds(elapsedTime) > kTimeSliceInMS)
break;
}
}
}
@@ -953,72 +803,72 @@ nsresult nsMsgSearchOfflineNews::ValidateTerms ()
//-----------------------------------------------------------------------------
nsresult nsMsgSearchValidityManager::InitLocalNewsTable()
{
NS_ASSERTION (nsnull == m_localNewsTable, "already have local news validty table");
nsresult err = NewTable (getter_AddRefs(m_localNewsTable));
if (NS_SUCCEEDED(err))
{
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::Sender, nsMsgSearchOp::Contains, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::Sender, nsMsgSearchOp::Contains, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::Sender, nsMsgSearchOp::Is, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::Sender, nsMsgSearchOp::Is, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::Sender, nsMsgSearchOp::BeginsWith, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::Sender, nsMsgSearchOp::BeginsWith, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::Sender, nsMsgSearchOp::EndsWith, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::Sender, nsMsgSearchOp::EndsWith, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::Subject, nsMsgSearchOp::Contains, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::Subject, nsMsgSearchOp::Contains, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::Subject, nsMsgSearchOp::Is, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::Subject, nsMsgSearchOp::Is, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::Subject, nsMsgSearchOp::BeginsWith, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::Subject, nsMsgSearchOp::BeginsWith, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::Subject, nsMsgSearchOp::EndsWith, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::Subject, nsMsgSearchOp::EndsWith, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::Body, nsMsgSearchOp::Contains, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::Body, nsMsgSearchOp::Contains, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::Body, nsMsgSearchOp::DoesntContain, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::Body, nsMsgSearchOp::DoesntContain, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::Body, nsMsgSearchOp::Is, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::Body, nsMsgSearchOp::Is, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::Body, nsMsgSearchOp::Isnt, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::Body, nsMsgSearchOp::Isnt, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::Date, nsMsgSearchOp::IsBefore, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::Date, nsMsgSearchOp::IsAfter, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::Date, nsMsgSearchOp::IsAfter, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::Date, nsMsgSearchOp::Is, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::Date, nsMsgSearchOp::Is, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::Date, nsMsgSearchOp::Isnt, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::Date, nsMsgSearchOp::Isnt, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::AgeInDays, nsMsgSearchOp::IsGreaterThan, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::AgeInDays, nsMsgSearchOp::IsGreaterThan, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::AgeInDays, nsMsgSearchOp::IsLessThan, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::AgeInDays, nsMsgSearchOp::IsLessThan, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::AgeInDays, nsMsgSearchOp::Is, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::AgeInDays, nsMsgSearchOp::Is, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::MsgStatus, nsMsgSearchOp::Is, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::MsgStatus, nsMsgSearchOp::Is, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::MsgStatus, nsMsgSearchOp::Isnt, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::MsgStatus, nsMsgSearchOp::Isnt, 1);
NS_ASSERTION (nsnull == m_localNewsTable, "already have local news validty table");
nsresult err = NewTable (getter_AddRefs(m_localNewsTable));
if (NS_SUCCEEDED(err))
{
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::Sender, nsMsgSearchOp::Contains, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::Sender, nsMsgSearchOp::Contains, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::Sender, nsMsgSearchOp::Is, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::Sender, nsMsgSearchOp::Is, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::Sender, nsMsgSearchOp::BeginsWith, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::Sender, nsMsgSearchOp::BeginsWith, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::Sender, nsMsgSearchOp::EndsWith, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::Sender, nsMsgSearchOp::EndsWith, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::Subject, nsMsgSearchOp::Contains, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::Subject, nsMsgSearchOp::Contains, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::Subject, nsMsgSearchOp::Is, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::Subject, nsMsgSearchOp::Is, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::Subject, nsMsgSearchOp::BeginsWith, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::Subject, nsMsgSearchOp::BeginsWith, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::Subject, nsMsgSearchOp::EndsWith, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::Subject, nsMsgSearchOp::EndsWith, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::Body, nsMsgSearchOp::Contains, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::Body, nsMsgSearchOp::Contains, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::Body, nsMsgSearchOp::DoesntContain, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::Body, nsMsgSearchOp::DoesntContain, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::Body, nsMsgSearchOp::Is, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::Body, nsMsgSearchOp::Is, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::Body, nsMsgSearchOp::Isnt, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::Body, nsMsgSearchOp::Isnt, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::Date, nsMsgSearchOp::IsBefore, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::Date, nsMsgSearchOp::IsAfter, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::Date, nsMsgSearchOp::IsAfter, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::Date, nsMsgSearchOp::Is, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::Date, nsMsgSearchOp::Is, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::Date, nsMsgSearchOp::Isnt, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::Date, nsMsgSearchOp::Isnt, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::AgeInDays, nsMsgSearchOp::IsGreaterThan, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::AgeInDays, nsMsgSearchOp::IsGreaterThan, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::AgeInDays, nsMsgSearchOp::IsLessThan, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::AgeInDays, nsMsgSearchOp::IsLessThan, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::AgeInDays, nsMsgSearchOp::Is, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::AgeInDays, nsMsgSearchOp::Is, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::MsgStatus, nsMsgSearchOp::Is, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::MsgStatus, nsMsgSearchOp::Is, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::MsgStatus, nsMsgSearchOp::Isnt, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::MsgStatus, nsMsgSearchOp::Isnt, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::OtherHeader, nsMsgSearchOp::Contains, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::OtherHeader, nsMsgSearchOp::Contains, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::OtherHeader, nsMsgSearchOp::Is, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::OtherHeader, nsMsgSearchOp::Is, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::OtherHeader, nsMsgSearchOp::BeginsWith, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::OtherHeader, nsMsgSearchOp::BeginsWith, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::OtherHeader, nsMsgSearchOp::EndsWith, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::OtherHeader, nsMsgSearchOp::EndsWith, 1);
}
return err;
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::OtherHeader, nsMsgSearchOp::Contains, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::OtherHeader, nsMsgSearchOp::Is, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::OtherHeader, nsMsgSearchOp::Is, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::OtherHeader, nsMsgSearchOp::BeginsWith, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::OtherHeader, nsMsgSearchOp::BeginsWith, 1);
m_localNewsTable->SetAvailable (nsMsgSearchAttrib::OtherHeader, nsMsgSearchOp::EndsWith, 1);
m_localNewsTable->SetEnabled (nsMsgSearchAttrib::OtherHeader, nsMsgSearchOp::EndsWith, 1);
}
return err;
}

View File

@@ -81,9 +81,7 @@ public:
nsIMsgSearchScopeTerm *scope,
nsIMsgDatabase *db, PRBool *pResult);
virtual nsresult BuildSummaryFile ();
virtual nsresult OpenSummaryFile ();
nsresult SummaryFileError();
protected:
static nsresult MatchTerms(nsIMsgDBHdr *msgToMatch,
@@ -122,16 +120,6 @@ protected:
void CleanUpScope();
};
class nsMsgSearchIMAPOfflineMail : public nsMsgSearchOfflineMail
{
public:
nsMsgSearchIMAPOfflineMail (nsIMsgSearchScopeTerm*, nsISupportsArray *);
virtual ~nsMsgSearchIMAPOfflineMail ();
NS_IMETHOD ValidateTerms ();
};
class nsMsgSearchOfflineNews : public nsMsgSearchOfflineMail
{