Fix for 17556. Reviewed by alecf. Newsgroups show abbreviated name in folder pane.

This commit is contained in:
putterman%netscape.com 1999-10-29 20:46:15 +00:00
Родитель bed851411e
Коммит 7d2a82beee
11 изменённых файлов: 102 добавлений и 32 удалений

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

@ -25,6 +25,7 @@ interface nsIFolder : nsICollection {
readonly attribute string URI;
attribute wstring name;
attribute wstring prettyName;
readonly attribute wstring abbreviatedName;
nsISupports GetChildNamed(in string name);
attribute nsIFolder parent;

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

@ -41,7 +41,7 @@
IsServer="rdf:http://home.netscape.com/NC-rdf#IsServer"
ServerType="rdf:http://home.netscape.com/NC-rdf#ServerType">
<treerow >
<treecell indent="true" value="rdf:http://home.netscape.com/NC-rdf#Name"/>
<treecell indent="true" value="rdf:http://home.netscape.com/NC-rdf#FolderTreeName"/>
<treecell value="rdf:http://home.netscape.com/NC-rdf#TotalUnreadMessages"/>
<treecell value="rdf:http://home.netscape.com/NC-rdf#TotalMessages"/>
</treerow>
@ -50,7 +50,7 @@
</rule>
</template>
<treecol persist="width" width="3*" id="FolderColumn" rdf:resource="http://home.netscape.com/NC-rdf#Name"/>
<treecol persist="width" width="3*" id="FolderColumn" rdf:resource="http://home.netscape.com/NC-rdf#FolderTreeName"/>
<treecol persist="width" width="1*" id="TotalUnreadCol" rdf:resource="http://home.netscape.com/NC-rdf#TotalUnreadMessages"/>
<treecol persist="width" width="1*" id="TotalMsgCol" rdf:resource="http://home.netscape.com/NC-rdf#TotalMessages"/>

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

@ -288,7 +288,7 @@ function OnLoadFolderPane(folderTree)
{
dump('In onLoadfolderPane\n');
gFolderTree = folderTree;
SortFolderPane('FolderColumn', 'http://home.netscape.com/NC-rdf#Name');
SortFolderPane('FolderColumn', 'http://home.netscape.com/NC-rdf#FolderTreeName');
//Add folderDataSource and accountManagerDataSource to folderPane
accountManagerDataSource = accountManagerDataSource.QueryInterface(Components.interfaces.nsIRDFDataSource);
folderDataSource = folderDataSource.QueryInterface(Components.interfaces.nsIRDFDataSource);

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

@ -59,7 +59,9 @@ typedef struct _serverCreationParams {
// static members
nsIRDFResource* nsMsgAccountManagerDataSource::kNC_Child=nsnull;
nsIRDFResource* nsMsgAccountManagerDataSource::kNC_Name=nsnull;
nsIRDFResource* nsMsgAccountManagerDataSource::kNC_FolderTreeName=nsnull;
nsIRDFResource* nsMsgAccountManagerDataSource::kNC_NameSort=nsnull;
nsIRDFResource* nsMsgAccountManagerDataSource::kNC_FolderTreeNameSort=nsnull;
nsIRDFResource* nsMsgAccountManagerDataSource::kNC_PageTag=nsnull;
nsIRDFResource* nsMsgAccountManagerDataSource::kNC_Settings=nsnull;
nsIRDFResource* nsMsgAccountManagerDataSource::kNC_AccountRoot=nsnull;
@ -110,7 +112,9 @@ nsMsgAccountManagerDataSource::~nsMsgAccountManagerDataSource()
{
NS_IF_RELEASE(kNC_Child);
NS_IF_RELEASE(kNC_Name);
NS_IF_RELEASE(kNC_FolderTreeName);
NS_IF_RELEASE(kNC_NameSort);
NS_IF_RELEASE(kNC_FolderTreeNameSort);
NS_IF_RELEASE(kNC_PageTag);
NS_IF_RELEASE(kNC_Account);
NS_IF_RELEASE(kNC_Server);
@ -148,7 +152,9 @@ nsMsgAccountManagerDataSource::Init()
if (gAccountManagerResourceRefCnt++ == 0) {
getRDFService()->GetResource(NC_RDF_CHILD, &kNC_Child);
getRDFService()->GetResource(NC_RDF_NAME, &kNC_Name);
getRDFService()->GetResource(NC_RDF_FOLDERTREENAME, &kNC_FolderTreeName);
getRDFService()->GetResource(NC_RDF_NAME_SORT, &kNC_NameSort);
getRDFService()->GetResource(NC_RDF_FOLDERTREENAME_SORT, &kNC_FolderTreeNameSort);
getRDFService()->GetResource(NC_RDF_PAGETAG, &kNC_PageTag);
getRDFService()->GetResource(NC_RDF_ACCOUNT, &kNC_Account);
getRDFService()->GetResource(NC_RDF_SERVER, &kNC_Server);
@ -187,7 +193,7 @@ nsMsgAccountManagerDataSource::GetTarget(nsIRDFResource *source,
rv = NS_RDF_NO_VALUE;
nsString str="";
if (property == kNC_Name) {
if (property == kNC_Name || property == kNC_FolderTreeName) {
// XXX these should be localized
if (source == kNC_PageTitleMain)
@ -220,7 +226,6 @@ nsMsgAccountManagerDataSource::GetTarget(nsIRDFResource *source,
}
}
}
else if (property == kNC_PageTag) {
// do NOT localize these strings. these are the urls of the XUL files
if (source == kNC_PageTitleServer)
@ -236,7 +241,7 @@ nsMsgAccountManagerDataSource::GetTarget(nsIRDFResource *source,
}
// handle sorting of servers
else if (property == kNC_NameSort) {
else if ((property == kNC_NameSort) || (property == kNC_FolderTreeNameSort)) {
// make sure we're handling a root folder that is a server
nsCOMPtr<nsIMsgFolder> folder = do_QueryInterface(source,&rv);
if (NS_FAILED(rv))
@ -436,7 +441,9 @@ nsMsgAccountManagerDataSource::ArcLabelsOut(nsIRDFResource *source,
arcs->AppendElement(kNC_Settings);
arcs->AppendElement(kNC_Name);
arcs->AppendElement(kNC_FolderTreeName);
arcs->AppendElement(kNC_NameSort);
arcs->AppendElement(kNC_FolderTreeNameSort);
arcs->AppendElement(kNC_PageTag);
#ifdef DEBUG_amds_

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

@ -62,7 +62,9 @@ public:
protected:
static nsIRDFResource* kNC_Name;
static nsIRDFResource* kNC_FolderTreeName;
static nsIRDFResource* kNC_NameSort;
static nsIRDFResource* kNC_FolderTreeNameSort;
static nsIRDFResource* kNC_PageTag;
static nsIRDFResource* kNC_Child;
static nsIRDFResource* kNC_AccountRoot;

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

@ -52,7 +52,9 @@ nsIRDFResource* nsMsgFolderDataSource::kNC_Child = nsnull;
nsIRDFResource* nsMsgFolderDataSource::kNC_MessageChild = nsnull;
nsIRDFResource* nsMsgFolderDataSource::kNC_Folder= nsnull;
nsIRDFResource* nsMsgFolderDataSource::kNC_Name= nsnull;
nsIRDFResource* nsMsgFolderDataSource::kNC_FolderTreeName= nsnull;
nsIRDFResource* nsMsgFolderDataSource::kNC_NameSort= nsnull;
nsIRDFResource* nsMsgFolderDataSource::kNC_FolderTreeNameSort= nsnull;
nsIRDFResource* nsMsgFolderDataSource::kNC_SpecialFolder= nsnull;
nsIRDFResource* nsMsgFolderDataSource::kNC_ServerType = nsnull;
nsIRDFResource* nsMsgFolderDataSource::kNC_IsServer = nsnull;
@ -97,7 +99,9 @@ nsMsgFolderDataSource::~nsMsgFolderDataSource (void)
NS_RELEASE2(kNC_MessageChild, refcnt);
NS_RELEASE2(kNC_Folder, refcnt);
NS_RELEASE2(kNC_Name, refcnt);
NS_RELEASE2(kNC_FolderTreeName, refcnt);
NS_RELEASE2(kNC_NameSort, refcnt);
NS_RELEASE2(kNC_FolderTreeNameSort, refcnt);
NS_RELEASE2(kNC_SpecialFolder, refcnt);
NS_RELEASE2(kNC_ServerType, refcnt);
NS_RELEASE2(kNC_IsServer, refcnt);
@ -138,7 +142,9 @@ nsresult nsMsgFolderDataSource::Init()
rdf->GetResource(NC_RDF_MESSAGECHILD, &kNC_MessageChild);
rdf->GetResource(NC_RDF_FOLDER, &kNC_Folder);
rdf->GetResource(NC_RDF_NAME, &kNC_Name);
rdf->GetResource(NC_RDF_FOLDERTREENAME, &kNC_FolderTreeName);
rdf->GetResource(NC_RDF_NAME_SORT, &kNC_NameSort);
rdf->GetResource(NC_RDF_FOLDERTREENAME_SORT, &kNC_FolderTreeNameSort);
rdf->GetResource(NC_RDF_SPECIALFOLDER, &kNC_SpecialFolder);
rdf->GetResource(NC_RDF_SERVERTYPE, &kNC_ServerType);
rdf->GetResource(NC_RDF_ISSERVER, &kNC_IsServer);
@ -356,6 +362,7 @@ NS_IMETHODIMP nsMsgFolderDataSource::GetTargets(nsIRDFResource* source,
}
}
else if ((kNC_Name == property) ||
(kNC_FolderTreeName == property) ||
(kNC_SpecialFolder == property) ||
(kNC_IsServer == property) ||
(kNC_ServerType == property))
@ -469,6 +476,7 @@ nsMsgFolderDataSource::getFolderArcLabelsOut(nsISupportsArray **arcs)
return rv;
(*arcs)->AppendElement(kNC_Name);
(*arcs)->AppendElement(kNC_FolderTreeName);
(*arcs)->AppendElement(kNC_SpecialFolder);
(*arcs)->AppendElement(kNC_ServerType);
(*arcs)->AppendElement(kNC_IsServer);
@ -789,8 +797,12 @@ nsresult nsMsgFolderDataSource::createFolderNode(nsIMsgFolder* folder,
if (kNC_NameSort == property)
rv = createFolderNameNode(folder, target, PR_TRUE);
else if(kNC_FolderTreeNameSort == property)
rv = createFolderTreeNameNode(folder, target, PR_TRUE);
else if (kNC_Name == property)
rv = createFolderNameNode(folder, target, PR_FALSE);
else if (kNC_FolderTreeName == property)
rv = createFolderTreeNameNode(folder, target, PR_FALSE);
else if ((kNC_SpecialFolder == property))
rv = createFolderSpecialNode(folder,target);
else if ((kNC_ServerType == property))
@ -825,21 +837,45 @@ nsresult nsMsgFolderDataSource::createFolderNameNode(nsIMsgFolder *folder,
nsString nameString(name);
if(sort)
{
PRInt32 order;
rv = GetFolderSortOrder(folder, &order);
if(NS_FAILED(rv))
return rv;
char * orderString = PR_smprintf("%d", order);
if(!orderString)
return NS_ERROR_OUT_OF_MEMORY;
nameString.Insert(orderString, 0);
PR_smprintf_free(orderString);
CreateNameSortString(folder, nameString);
}
createNode(nameString, target, getRDFService());
return NS_OK;
}
nsresult nsMsgFolderDataSource::createFolderTreeNameNode(nsIMsgFolder *folder,
nsIRDFNode **target, PRBool sort)
{
nsXPIDLString name;
nsresult rv = folder->GetAbbreviatedName(getter_Copies(name));
if (NS_FAILED(rv)) return rv;
nsString nameString(name);
if(sort)
{
CreateNameSortString(folder, nameString);
}
createNode(nameString, target, getRDFService());
return NS_OK;
}
nsresult nsMsgFolderDataSource::CreateNameSortString(nsIMsgFolder *folder, nsString &name)
{
PRInt32 order;
nsresult rv = GetFolderSortOrder(folder, &order);
if(NS_FAILED(rv))
return rv;
char * orderString = PR_smprintf("%d", order);
if(!orderString)
return NS_ERROR_OUT_OF_MEMORY;
name.Insert(orderString, 0);
PR_smprintf_free(orderString);
return NS_OK;
}
nsresult
nsMsgFolderDataSource::createFolderSpecialNode(nsIMsgFolder *folder,
nsIRDFNode **target)
@ -1226,6 +1262,7 @@ nsresult nsMsgFolderDataSource::DoFolderHasAssertion(nsIMsgFolder *folder,
rv = folder->HasMessage(message, hasAssertion);
}
else if ((kNC_Name == property) ||
(kNC_FolderTreeName == property) ||
(kNC_SpecialFolder == property) ||
(kNC_ServerType == property) ||
(kNC_IsServer == property) ||

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

@ -113,6 +113,7 @@ protected:
nsresult createFolderNode(nsIMsgFolder *folder, nsIRDFResource* property,
nsIRDFNode **target);
nsresult createFolderNameNode(nsIMsgFolder *folder, nsIRDFNode **target, PRBool sort);
nsresult createFolderTreeNameNode(nsIMsgFolder *folder, nsIRDFNode **target, PRBool sort);
nsresult createFolderSpecialNode(nsIMsgFolder *folder, nsIRDFNode **target);
nsresult createFolderServerTypeNode(nsIMsgFolder *folder,
nsIRDFNode **target);
@ -147,6 +148,7 @@ protected:
nsresult GetBiffStateString(PRUint32 biffState, nsCAutoString & biffStateStr);
nsresult CreateNameSortString(nsIMsgFolder *folder, nsString &name);
nsresult GetFolderSortOrder(nsIMsgFolder *folder, PRInt32* order);
nsresult CreateArcsOutEnumerator();
@ -155,7 +157,9 @@ protected:
static nsIRDFResource* kNC_MessageChild;
static nsIRDFResource* kNC_Folder;
static nsIRDFResource* kNC_Name;
static nsIRDFResource* kNC_FolderTreeName;
static nsIRDFResource* kNC_NameSort;
static nsIRDFResource* kNC_FolderTreeNameSort;
static nsIRDFResource* kNC_Columns;
static nsIRDFResource* kNC_MSGFolderRoot;
static nsIRDFResource* kNC_SpecialFolder;

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

@ -45,6 +45,7 @@ typedef struct _nsMsgRDFNotification {
#define NC_RDF_CHILD NC_NAMESPACE_URI "child"
#define NC_RDF_MESSAGECHILD NC_NAMESPACE_URI "MessageChild"
#define NC_RDF_NAME NC_NAMESPACE_URI "Name"
#define NC_RDF_FOLDERTREENAME NC_NAMESPACE_URI "FolderTreeName"
#define NC_RDF_FOLDER NC_NAMESPACE_URI "Folder"
#define NC_RDF_SPECIALFOLDER NC_NAMESPACE_URI "SpecialFolder"
#define NC_RDF_SERVERTYPE NC_NAMESPACE_URI "ServerType"
@ -59,6 +60,7 @@ typedef struct _nsMsgRDFNotification {
#define NC_RDF_SENDER_COLLATION_SORT NC_NAMESPACE_URI "Sender?collation=true"
#define NC_RDF_NAME_SORT NC_NAMESPACE_URI "Name?sort=true"
#define NC_RDF_FOLDERTREENAME_SORT NC_NAMESPACE_URI "FolderTreeName?sort=true"
//Folder Commands
#define NC_RDF_DELETE NC_NAMESPACE_URI "Delete"

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

@ -481,6 +481,12 @@ NS_IMETHODIMP nsMsgFolder::SetName(const PRUnichar * name)
return NS_OK;
}
//For default, just return name
NS_IMETHODIMP nsMsgFolder::GetAbbreviatedName(PRUnichar * *aAbbreviatedName)
{
return GetName(aAbbreviatedName);
}
NS_IMETHODIMP nsMsgFolder::GetChildNamed(const char *name, nsISupports ** aChild)
{
NS_ASSERTION(aChild, "NULL child");

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

@ -544,38 +544,39 @@ nsMsgNewsFolder::GetChildNamed(const char *name, nsISupports ** aChild)
return NS_OK;
}
NS_IMETHODIMP nsMsgNewsFolder::GetPrettyName(PRUnichar ** prettyName)
NS_IMETHODIMP nsMsgNewsFolder::GetAbbreviatedName(PRUnichar * *aAbbreviatedName)
{
nsresult rv = NS_OK;
if (!prettyName)
if (!aAbbreviatedName)
return NS_ERROR_NULL_POINTER;
rv = nsMsgFolder::GetPrettyName(prettyName);
rv = nsMsgFolder::GetPrettyName(aAbbreviatedName);
if(NS_FAILED(rv)) return rv;
//not ready for prime time yet, as I don't know how to test this yet.
#ifdef NOT_READY_FOR_PRIME_TIME
// only do this for newsgroup names, not for newsgroup hosts.
PRBool isNewsServer = PR_FALSE;
rv = GetIsServer(&isNewsServer);
if (NS_FAILED(rv)) return rv;
if (!isNewsServer) {
NS_WITH_SERVICE(nsIPref, prefs, kPrefServiceCID, &rv);
NS_WITH_SERVICE(nsIPref, prefs, kPrefServiceCID, &rv);
if (NS_FAILED(rv)) return rv;
PRInt32 numFullWords;
rv = prefs->GetIntPref(PREF_NEWS_ABBREVIATE_PRETTY_NAMES, &numFullWords);
if (NS_FAILED(rv)) return rv;
if (NS_FAILED(rv))
numFullWords = 1;
if (numFullWords != 0) {
rv = AbbreviatePrettyName(prettyName, numFullWords);
}
rv = AbbreviatePrettyName(aAbbreviatedName, numFullWords);
}
}
#endif /* NOT_READY_FOR_PRIME_TIME */
return rv;
}
// original code from Oleg Rekutin
// rekusha@asan.com
// Public domain, created by Oleg Rekutin
@ -597,10 +598,21 @@ nsresult nsMsgNewsFolder::AbbreviatePrettyName(PRUnichar ** prettyName, PRInt32
PRInt32 totalwords = 0; // total no. of words
// get the total no. of words
for (PRInt32 pos = 0;
(pos++) != name.Length();
pos = name.FindChar('.', PR_FALSE,pos))
totalwords ++;
PRInt32 pos = 0;
while(1)
{
pos = name.FindChar('.', PR_FALSE, pos);
if(pos == -1)
{
totalwords++;
break;
}
else
{
totalwords++;
pos++;
}
}
// get the no. of words to abbreviate
PRInt32 abbrevnum = totalwords - fullwords;

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

@ -64,8 +64,7 @@ public:
NS_IMETHOD Adopt(nsIMsgFolder *srcFolder, PRUint32 *outPos);
NS_IMETHOD GetChildNamed(const char* name, nsISupports ** aChild);
NS_IMETHOD GetPrettyName(PRUnichar ** prettyName); // Override of the base, for top-level news folder
NS_IMETHODIMP GetAbbreviatedName(PRUnichar * *aAbbreviatedName);
NS_IMETHOD GetFolderURL(char **url);