landing bienvenu's fix for adding "has attachment" support to

local mail search and the mail views.  bug #183581.  r/sr=sspitzer
This commit is contained in:
sspitzer%netscape.com 2002-12-18 05:03:56 +00:00
parent 69fe7dd610
commit b5640204f2
8 changed files with 48 additions and 13 deletions

View File

@ -655,7 +655,7 @@
<!-- searchvalue - a widget which dynamically changes it's user interface
depending on what type of data it's supposed to be showing
currently handles arbitrary text entry, and menulists for
priority, status, junk status and addressbook
priority, status, junk status, hasAttachment status, and addressbook
-->
<binding id="searchvalue" name="searchValue">
<content>
@ -706,6 +706,11 @@
<xul:menuitem value="2" stringTag="junk" class="search-value-menuitem"/>
</xul:menupopup>
</xul:menulist>
<xul:menulist flex="1" class="search-value-menulist">
<xul:menupopup class="search-value-popup">
<xul:menuitem value="0" stringTag="hasAttachments" class="search-value-menuitem"/>
</xul:menupopup>
</xul:menulist>
</content>
<implementation>
<field name="internalOperator">null</field>
@ -797,6 +802,9 @@
else if (val == Components.interfaces.nsMsgSearchAttrib.JunkStatus) {
this.setAttribute("selectedIndex", "6");
}
else if (val == Components.interfaces.nsMsgSearchAttrib.HasAttachmentStatus) {
this.setAttribute("selectedIndex", "7");
}
else {
// a normal text field
this.setAttribute("selectedIndex", "0");
@ -853,6 +861,12 @@
if (junkStatus.length > 0)
children[6].selectedItem = junkStatus[0];
}
else if (attrib == nsMsgSearchAttrib.HasAttachmentStatus) {
var hasAttachmentStatus =
children[7].getElementsByAttribute("value", val.hasAttachmentStatus);
if (hasAttachmentStatus.length > 0)
children[7].selectedItem = hasAttachmentStatus[0];
}
else
children[0].value = val.str;
return val;
@ -872,7 +886,7 @@
searchValue.priority = children[1].selectedItem.value;
}
else if (searchAttribute == nsMsgSearchAttrib.MsgStatus)
searchValue.status = children[2].selectedItem.value;
searchValue.status = children[2].value;
else if (searchAttribute == nsMsgSearchAttrib.AgeInDays)
searchValue.age = children[0].value;
else if (searchAttribute == nsMsgSearchAttrib.Date)
@ -890,6 +904,8 @@
searchValue.junkStatus = children[6].value;
else if (searchAttribute == nsMsgSearchAttrib.Size)
searchValue.size = children[0].value;
else if (searchAttribute == nsMsgSearchAttrib.HasAttachmentStatus)
searchValue.status = 0x10000000; // 0x10000000 is MSG_FLAG_ATTACHMENT;
else
searchValue.str = children[0].value;
]]>
@ -976,6 +992,8 @@
// initialize the junk status picker
this.initialize(document.getAnonymousNodes(this)[6], bundle);
// initialize the has attachment status picker
this.initialize(document.getAnonymousNodes(this)[7], bundle);
]]>
</constructor>
</implementation>

View File

@ -183,6 +183,8 @@ unknown=Unknown
junk=Junk
notjunk=Not Junk
hasAttachments=Has Attachments
# mailnews.js
mailnews.send_default_charset=ISO-8859-1
mailnews.view_default_charset=ISO-8859-1

View File

@ -102,8 +102,8 @@ interface nsMsgSearchAttrib {
const nsMsgSearchAttribValue Department = 30;
const nsMsgSearchAttribValue AdditionalEmail = 31;
// 32 - 46, reserved for ab / LDAP;
// 32 - 45, reserved for ab / LDAP;
const nsMsgSearchAttribValue HasAttachmentStatus = 46;
const nsMsgSearchAttribValue JunkStatus = 47;
const nsMsgSearchAttribValue Label = 48; /* mail only...can search by label */
//49 is for showing customize... in ui headers start from 50 onwards up until 99.
@ -211,7 +211,8 @@ typedef struct nsMsgSearchValue
_a == nsMsgSearchAttrib::MsgStatus || _a == nsMsgSearchAttrib::MessageKey || \
_a == nsMsgSearchAttrib::Size || _a == nsMsgSearchAttrib::AgeInDays || \
_a == nsMsgSearchAttrib::FolderInfo || _a == nsMsgSearchAttrib::Location || \
_a == nsMsgSearchAttrib::Label || _a == nsMsgSearchAttrib::JunkStatus))
_a == nsMsgSearchAttrib::Label || _a == nsMsgSearchAttrib::JunkStatus || \
_a == nsMsgSearchAttrib::HasAttachmentStatus))
%}
[ptr] native nsSearchMenuItem(nsSearchMenuItem);

View File

@ -47,7 +47,7 @@
43=reserved for AB
44=reserved for AB
45=reserved for AB
46=reserved for AB
46=Attachment Status
47=Junk Status
48=Label
# don't use above 49

View File

@ -171,7 +171,6 @@ nsresult nsMsgSearchOnlineMail::Encode (nsCString& pEncoding,
return err;
}
#define READY_TO_FORK_AND_SPAM_IS_ENABLED 1
nsresult nsMsgSearchValidityManager::InitOfflineMailTable ()
{
@ -290,14 +289,15 @@ nsresult nsMsgSearchValidityManager::InitOfflineMailTable ()
m_offlineMailTable->SetAvailable (nsMsgSearchAttrib::AgeInDays, nsMsgSearchOp::Is, 1);
m_offlineMailTable->SetEnabled (nsMsgSearchAttrib::AgeInDays, nsMsgSearchOp::Is, 1);
// don't enable this until we are ready to fork rules.dat
// and the bayesian junk filter has landed
#ifdef READY_TO_FORK_AND_SPAM_IS_ENABLED
m_offlineMailTable->SetAvailable (nsMsgSearchAttrib::JunkStatus, nsMsgSearchOp::Is, 1);
m_offlineMailTable->SetEnabled (nsMsgSearchAttrib::JunkStatus, nsMsgSearchOp::Is, 1);
m_offlineMailTable->SetAvailable (nsMsgSearchAttrib::JunkStatus, nsMsgSearchOp::Isnt, 1);
m_offlineMailTable->SetEnabled (nsMsgSearchAttrib::JunkStatus, nsMsgSearchOp::Isnt, 1);
#endif
m_offlineMailTable->SetAvailable (nsMsgSearchAttrib::HasAttachmentStatus, nsMsgSearchOp::Is, 1);
m_offlineMailTable->SetEnabled (nsMsgSearchAttrib::HasAttachmentStatus, nsMsgSearchOp::Is, 1);
m_offlineMailTable->SetAvailable (nsMsgSearchAttrib::HasAttachmentStatus, nsMsgSearchOp::Isnt, 1);
m_offlineMailTable->SetEnabled (nsMsgSearchAttrib::HasAttachmentStatus, nsMsgSearchOp::Isnt, 1);
m_offlineMailTable->SetAvailable (nsMsgSearchAttrib::OtherHeader, nsMsgSearchOp::Contains, 1);
m_offlineMailTable->SetEnabled (nsMsgSearchAttrib::OtherHeader, nsMsgSearchOp::Contains, 1);

View File

@ -541,6 +541,7 @@ nsresult nsMsgSearchOfflineMail::ProcessSearchTerm(nsIMsgDBHdr *msgToMatch,
break;
}
case nsMsgSearchAttrib::HasAttachmentStatus:
case nsMsgSearchAttrib::MsgStatus:
err = aTerm->MatchStatus (msgFlags, &result);
break;

View File

@ -99,6 +99,7 @@ nsMsgSearchAttribEntry SearchAttribEntryTable[] =
// the old style. see bug #179803
{nsMsgSearchAttrib::Sender, "from in ab"},
{nsMsgSearchAttrib::JunkStatus, "junk status"},
{nsMsgSearchAttrib::HasAttachmentStatus, "has attachment status"},
};
// Take a string which starts off with an attribute
@ -184,7 +185,6 @@ nsresult NS_MsgGetStringForAttribute(PRInt16 attrib, const char **string)
}
// we no longer return invalid attribute. If we cannot find the string in the table,
// then it is an arbitrary header. Return success regardless if found or not
// return (found) ? SearchError_Success : SearchError_InvalidAttribute;
return NS_OK;
}
@ -458,6 +458,11 @@ nsresult nsMsgSearchTerm::OutputValue(nsCString &outputStr)
outputStr.AppendWithConversion(priority);
break;
}
case nsMsgSearchAttrib::HasAttachmentStatus:
{
outputStr.Append("true"); // don't need anything here, really
break;
}
default:
NS_ASSERTION(PR_FALSE, "trying to output invalid attribute");
break;
@ -543,6 +548,9 @@ nsresult nsMsgSearchTerm::ParseValue(char *inStream)
case nsMsgSearchAttrib::JunkStatus:
m_value.u.junkStatus = atoi(inStream); // only if we read from disk, right?
break;
case nsMsgSearchAttrib::HasAttachmentStatus:
m_value.u.msgStatus = MSG_FLAG_ATTACHMENT;
break; // this should always be true.
default:
NS_ASSERTION(PR_FALSE, "invalid attribute parsing search term value");
break;
@ -1301,7 +1309,7 @@ nsresult nsMsgSearchTerm::MatchStatus(PRUint32 statusToMatch, PRBool *pResult)
break;
default:
rv = NS_ERROR_FAILURE;
NS_ASSERTION(PR_FALSE, "invalid compare op for msg status");
NS_ERROR("invalid compare op for msg status");
}
*pResult = matches;
@ -1572,6 +1580,7 @@ nsresult nsMsgResultElement::AssignValues (nsIMsgSearchValue *src, nsMsgSearchVa
case nsMsgSearchAttrib::Date:
err = src->GetDate(&dst->u.date);
break;
case nsMsgSearchAttrib::HasAttachmentStatus:
case nsMsgSearchAttrib::MsgStatus:
err = src->GetStatus(&dst->u.msgStatus);
break;

View File

@ -16,3 +16,7 @@ name="Not Junk"
enabled="yes"
type="1"
condition="AND (junk status,isn't,2)"
name="Has Attachments"
enabled="yes"
type="1"
condition="AND (has attachment status,is,true)"