зеркало из https://github.com/mozilla/gecko-dev.git
fix for bug #202945
allow servers to not support filter after the fact. r/sr=bienvenu
This commit is contained in:
Родитель
753ad32053
Коммит
0ca1dc063f
|
@ -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
|
||||
|
|
Загрузка…
Ссылка в новой задаче