allow servers to not support filter after the fact.
r/sr=bienvenu
This commit is contained in:
sspitzer%netscape.com 2003-04-22 20:59:17 +00:00
Родитель 753ad32053
Коммит 0ca1dc063f
3 изменённых файлов: 48 добавлений и 9 удалений

Просмотреть файл

@ -158,6 +158,17 @@ function onServerClick(event)
selectServer(item.id);
}
function CanRunFiltersAfterTheFact(aServer)
{
// can't manually run news filters yet
if (aServer.type == "nntp")
return false;
// filter after the fact is implement using search
// so if you can't search, you can't filter after the fact
return aServer.canSearchMessages;
}
// roots the tree at the specified server
function setServer(uri)
{
@ -180,12 +191,7 @@ function setServer(uri)
gRunFiltersFolderPicker.setAttribute("ref", uri);
// run filters after the fact not supported by news
if (msgFolder.server.type == "nntp" && !msgFolder.isServer) {
gRunFiltersFolderPicker.setAttribute("hidden", "true");
gRunFiltersButton.setAttribute("hidden", "true");
gRunFiltersFolderPickerLabel.setAttribute("hidden", "true");
}
else {
if (CanRunFiltersAfterTheFact(msgFolder.server)) {
gRunFiltersFolderPicker.removeAttribute("hidden");
gRunFiltersButton.removeAttribute("hidden");
gRunFiltersFolderPickerLabel.removeAttribute("hidden");
@ -193,6 +199,11 @@ function setServer(uri)
// for POP3 and IMAP, select the first folder, which is the INBOX
gRunFiltersFolderPicker.selectedIndex = 0;
}
else {
gRunFiltersFolderPicker.setAttribute("hidden", "true");
gRunFiltersButton.setAttribute("hidden", "true");
gRunFiltersFolderPickerLabel.setAttribute("hidden", "true");
}
// Get the first folder uri for this server. INBOX for
// imap and pop accts and 1st news group for news.

Просмотреть файл

@ -1999,6 +1999,31 @@ NS_IMETHODIMP nsMsgDBView::DoCommand(nsMsgViewCommandTypeValue command)
return rv;
}
PRBool nsMsgDBView::ServerSupportsFilterAfterTheFact()
{
NS_ASSERTION(m_folder, "no folder!");
if (!m_folder)
return PR_FALSE; // unexpected
// can't manually run news filters yet
if (mIsNews)
return PR_FALSE;
nsCOMPtr <nsIMsgIncomingServer> server;
nsresult rv = m_folder->GetServer(getter_AddRefs(server));
if (NS_FAILED(rv))
return PR_FALSE; // unexpected
// filter after the fact is implement using search
// so if you can't search, you can't filter after the fact
PRBool canSearch;
rv = server->GetCanSearchMessages(&canSearch);
if (NS_FAILED(rv))
return PR_FALSE; // unexpected
return canSearch;
}
NS_IMETHODIMP nsMsgDBView::GetCommandStatus(nsMsgViewCommandTypeValue command, PRBool *selectable_p, nsMsgViewCommandCheckStateValue *selected_p)
{
nsresult rv = NS_OK;
@ -2026,10 +2051,11 @@ NS_IMETHODIMP nsMsgDBView::GetCommandStatus(nsMsgViewCommandTypeValue command, P
}
break;
case nsMsgViewCommandType::applyFilters:
// can't manually run news filters yet
// disable if no messages
// XXX todo, check that we have filters, and at least one is enabled
*selectable_p = GetSize() && !mIsNews;
*selectable_p = GetSize();
if (*selectable_p)
*selectable_p = ServerSupportsFilterAfterTheFact();
break;
case nsMsgViewCommandType::runJunkControls:
// disable if no messages
@ -5391,7 +5417,8 @@ nsMsgDBView::GetKeyForFirstSelectedMessage(nsMsgKey *key)
PRInt32 startRange;
PRInt32 endRange;
nsresult rv = mTreeSelection->GetRangeAt(0, &startRange, &endRange);
NS_ENSURE_SUCCESS(rv, rv);
// don't assert, it is legal for nothing to be selected
if (NS_FAILED(rv)) return rv;
// check that the first index is valid, it may not be if nothing is selected
if (startRange >= 0 && startRange < GetSize()) {

Просмотреть файл

@ -376,6 +376,7 @@ private:
static nsDateFormatSelector m_dateFormatDefault;
static nsDateFormatSelector m_dateFormatThisWeek;
static nsDateFormatSelector m_dateFormatToday;
PRBool ServerSupportsFilterAfterTheFact();
};
#endif