Bug 414038 (preliminary patch) Remove GetFolderAttribute function, r/sr=bienvenu

git-svn-id: svn://10.0.0.236/trunk@252423 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
jminta%gmail.com 2008-06-18 01:17:01 +00:00
parent a4318d4c9e
commit 9108c47b4d
6 changed files with 76 additions and 62 deletions

View File

@ -85,9 +85,10 @@ var FolderPaneController =
var serverType = null;
try {
var folderResource = GetFolderResource(folderTree, startIndex.value);
specialFolder = GetFolderAttribute(folderTree, folderResource, "SpecialFolder");
isServer = GetFolderAttribute(folderTree, folderResource, "IsServer") == "true";
serverType = GetFolderAttribute(folderTree, folderResource, "ServerType");
var folder = folderResource.QueryInterface(Components.interfaces.nsIMsgFolder);
specialFolder = getSpecialFolderString(folder);
isServer = folder.isServer;
serverType = folder.server.type;
if (serverType == "nntp") {
if ( command == "cmd_delete" ) {
goSetMenuValue(command, 'valueNewsgroup');
@ -845,8 +846,8 @@ function IsRenameFolderEnabled()
var endIndex = {};
selection.getRangeAt(0, startIndex, endIndex);
var folderResource = GetFolderResource(folderTree, startIndex.value);
var canRename = GetFolderAttribute(folderTree, folderResource, "CanRename") == "true";
return canRename && isCommandEnabled("cmd_renameFolder");
var folder = folderResource.QueryInterface(Components.interfaces.nsIMsgFolder);
return folder.canRename && isCommandEnabled("cmd_renameFolder");
}
else
return false;
@ -871,10 +872,11 @@ function IsPropertiesEnabled(command)
{
var folderTree = GetFolderTree();
var folderResource = GetSelectedFolderResource();
var folder = folderResource.QueryInterface(Components.interfaces.nsIMsgFolder);
// when servers are selected
// it should be "Edit | Properties..."
if (GetFolderAttribute(folderTree, folderResource, "IsServer") == "true")
if (folder.isServer)
goSetMenuValue(command, "valueGeneric");
else
goSetMenuValue(command, isNewsURI(folderResource.Value) ? "valueNewsgroup" : "valueFolder");
@ -903,7 +905,8 @@ function IsFolderSelected()
var endIndex = {};
selection.getRangeAt(0, startIndex, endIndex);
var folderResource = GetFolderResource(folderTree, startIndex.value);
return GetFolderAttribute(folderTree, folderResource, "IsServer") != "true";
var folder = folderResource.QueryInterface(Components.interfaces.nsIMsgFolder);
return folder.isServer;
}
else
return false;
@ -922,7 +925,7 @@ function MsgDeleteFolder()
{
var selectedFolder = selectedFolders[i];
var folderResource = selectedFolder.QueryInterface(Components.interfaces.nsIRDFResource);
var specialFolder = GetFolderAttribute(folderTree, folderResource, "SpecialFolder");
var specialFolder = getSpecialFolderString(selectedFolder);
if (specialFolder != "Inbox" && specialFolder != "Trash")
{
var folder = selectedFolder.QueryInterface(Components.interfaces.nsIMsgFolder);

View File

@ -517,9 +517,9 @@ function fillFolderPaneContextMenu()
var folder = GetMsgFolderFromUri(folderResource.Value, false);
var isVirtualFolder = folder ? folder.flags & MSG_FOLDER_FLAG_VIRTUAL : false;
var isServer = GetFolderAttribute(folderTree, folderResource, "IsServer") == 'true';
var serverType = GetFolderAttribute(folderTree, folderResource, "ServerType");
var specialFolder = GetFolderAttribute(folderTree, folderResource, "SpecialFolder");
var isServer = folder.isServer;
var serverType = folder.server.type;
var specialFolder = getSpecialFolderString(folder);
var canSubscribeToFolder = (serverType == "nntp") || (serverType == "imap");
var isNewsgroup = !isServer && serverType == 'nntp';
var isMailFolder = !isServer && serverType != 'nntp';
@ -576,11 +576,10 @@ function fillFolderPaneContextMenu()
function SetupNewMenuItem(folderResource, numSelected, isServer, serverType,specialFolder)
{
var folderTree = GetFolderTree();
var canCreateNew = GetFolderAttribute(folderTree, folderResource, "CanCreateSubfolders") == "true";
var folder = folderResource.QueryInterface(Components.interfaces.nsIMsgFolder);
var canCreateNew = folder.canCreateSubfolders;
var isInbox = specialFolder == "Inbox";
var isIMAPFolder = GetFolderAttribute(folderTree, folderResource,
"ServerType") == "imap";
var isIMAPFolder = (folder.server.type == "imap");
var ioService = Components.classes["@mozilla.org/network/io-service;1"]
.getService(Components.interfaces.nsIIOService);
@ -602,11 +601,9 @@ function SetupNewMenuItem(folderResource, numSelected, isServer, serverType,spec
function SetupRenameMenuItem(folderResource, numSelected, isServer, serverType, specialFolder)
{
var msgFolder = folderResource.QueryInterface(Components.interfaces.nsIMsgFolder);
var folderTree = GetFolderTree();
var isSpecialFolder = !(specialFolder == "none" || (specialFolder == "Junk" && CanRenameDeleteJunkMail(msgFolder.URI))
|| (specialFolder == "Virtual") );
var canRename = GetFolderAttribute(folderTree, folderResource, "CanRename") == "true";
var canRename = msgFolder.canRename;
ShowMenuItem("folderPaneContext-rename", (numSelected <= 1) && !isServer && !isSpecialFolder && canRename);
var folder = GetMsgFolderFromResource(folderResource);
EnableMenuItem("folderPaneContext-rename", !isServer && folder.isCommandEnabled("cmd_renameFolder"));
@ -631,16 +628,14 @@ function SetupRemoveMenuItem(folderResource, numSelected, isServer, serverType,
function SetupCompactMenuItem(folderResource, numSelected)
{
var folderTree = GetFolderTree();
var canCompact = GetFolderAttribute(folderTree, folderResource, "CanCompact") == "true";
var folder = GetMsgFolderFromResource(folderResource);
ShowMenuItem("folderPaneContext-compact", (numSelected <=1) && canCompact && !(folder.flags & MSG_FOLDER_FLAG_VIRTUAL));
ShowMenuItem("folderPaneContext-compact", (numSelected <=1) && folder.canCompact && !(folder.flags & MSG_FOLDER_FLAG_VIRTUAL));
EnableMenuItem("folderPaneContext-compact", folder.isCommandEnabled("cmd_compactFolder") && !(folder.flags & MSG_FOLDER_FLAG_VIRTUAL));
}
function SetupFavoritesMenuItem(folderResource, numSelected, isServer, menuItemId)
{
var folderTree = GetFolderTree();
var folder = GetMsgFolderFromResource(folderResource);
var showItem = !isServer && (numSelected <=1);
ShowMenuItem(menuItemId, showItem);

View File

@ -147,8 +147,8 @@ function InitEditMessagesMenu()
{
var numSelected = endIndex.value - startIndex.value + 1;
var folderResource = GetFolderResource(folderTree, startIndex.value);
var isServer = GetFolderAttribute(folderTree, folderResource, "IsServer") == 'true';
SetupFavoritesMenuItem(folderResource, numSelected, isServer, 'menu_favoriteFolder');
var folder = folderResource.QueryInterface(Components.interfaces.nsIMsgFolder);
SetupFavoritesMenuItem(folderResource, numSelected, folder.isServer, 'menu_favoriteFolder');
}
}
}
@ -1492,8 +1492,8 @@ folderTabOwner.prototype =
{
// the user may have changed folders, triggering our onTitleChanged callback.
// update the appropriate attributes on the tab.
aTab.setAttribute('SpecialFolder', GetFolderAttribute(GetFolderTree(), gMsgFolderSelected, 'SpecialFolder'));
aTab.setAttribute('ServerType', GetFolderAttribute(GetFolderTree(), gMsgFolderSelected, 'ServerType'));
aTab.setAttribute('SpecialFolder', getSpecialFolderString(gMsgFolderSelected));
aTab.setAttribute('ServerType', gMsgFolderSelected.server.type);
return;
},

View File

@ -1239,8 +1239,19 @@ function UpdateFolderLocationPicker(resource)
var folders = document.getElementById('locationFolders');
var properties = ['BiffState', 'NewMessages', 'HasUnreadMessages',
'SpecialFolder', 'IsServer', 'IsSecure', 'ServerType', 'NoSelect'];
var label = GetFolderAttribute(tree, resource, 'FolderTreeName');
var folder = resource.QueryInterface(Components.interfaces.nsIMsgFolder);
var label = folder.prettyName;
folders.setAttribute("label", label);
var rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"]
.getService(Components.interfaces.nsIRDFService);
function GetFolderAttribute(tree, source, attribute) {
var property = rdfService.GetResource("http://home.netscape.com/NC-rdf#" + attribute);
var target = tree.database.GetTarget(source, property, true);
if (target)
target = target.QueryInterface(Components.interfaces.nsIRDFLiteral).Value;
return target;
}
for (var i in properties)
{
var property = properties[i];
@ -1658,15 +1669,6 @@ function GetFolderResource(tree, index)
return tree.builderView.getResourceAtIndex(index);
}
function GetFolderAttribute(tree, source, attribute)
{
var property = RDF.GetResource("http://home.netscape.com/NC-rdf#" + attribute);
var target = tree.database.GetTarget(source, property, true);
if (target)
target = target.QueryInterface(Components.interfaces.nsIRDFLiteral).Value;
return target;
}
function LoadNavigatedToMessage(msgHdr, folder, folderUri)
{
if (IsCurrentLoadedFolder(folder))
@ -1755,3 +1757,30 @@ function MigrateAttachmentDownloadStore()
gPrefBranch.setIntPref("mail.attachment.store.version", 1);
}
}
/**
* Returns a string representation of a folder's specialFolder attribute.
*
* @param aFolder the folder whose specialFolder attribute to return
*/
function getSpecialFolderString(aFolder) {
if (aFolder.flags & 0x1000) // MSG_FOLDER_FLAG_INBOX
return "Inbox";
else if (aFolder.flags & 0x0100) // MSG_FOLDER_FLAG_TRASH
return "Trash";
else if (aFolder.flags & 0x0800) // MSG_FOLDER_FLAG_QUEUE
return "Unsent Messages";
else if (aFolder.flags & 0x0200) // MSG_FOLDER_FLAG_SENTMAIL
return "Sent";
else if (aFolder.flags & 0x0400) // MSG_FOLDER_FLAG_DRAFTS
return "Drafts";
else if (aFolder.flags & 0x400000) // MSG_FOLDER_FLAG_TEMPLATES
return "Templates";
else if (aFolder.flags & 0x40000000) // MSG_FOLDER_FLAG_JUNK
return "Junk";
else if (aFolder.flags & 0x0020) // MSG_FOLDER_FLAG_VIRTUAL
return "Virtual";
else
return "none";
}

View File

@ -108,15 +108,14 @@ function CanDropOnFolderTree(index, orientation)
if (orientation != Components.interfaces.nsITreeView.DROP_ON)
return false;
var isServer = GetFolderAttribute(folderTree, targetResource, "IsServer");
if (isServer == "true")
var folder = targetResource.QueryInterface(Components.interfaces.nsIMsgFolder);
if (folder.isServer)
{
debugDump("***isServer == true\n");
return false;
}
// canFileMessages checks no select, and acl, for imap.
var canFileMessages = GetFolderAttribute(folderTree, targetResource, "CanFileMessages");
if (canFileMessages != "true")
if (!folder.canFileMessages)
{
debugDump("***canFileMessages == false\n");
return false;
@ -208,22 +207,22 @@ function CanDropOnFolderTree(index, orientation)
if (dragSession.dragAction == nsIDragService.DRAGDROP_ACTION_COPY && sourceServer == targetServer)
return false;
var canCreateSubfolders = GetFolderAttribute(folderTree, targetResource, "CanCreateSubfolders");
var targetFolder = targetResource.QueryInterface(Components.interfaces.nsIMsgFolder);
// if cannot create subfolders then a folder cannot be dropped here
if (canCreateSubfolders == "false")
if (targetFolder.canCreateSubfolders)
{
debugDump("***canCreateSubfolders == false \n");
return false;
}
var serverType = GetFolderAttribute(folderTree, targetResource, "ServerType");
var serverType = targetFolder.server.type;
// if we've got a folder that can't be renamed
// allow us to drop it if we plan on dropping it on "Local Folders"
// (but not within the same server, to prevent renaming folders on "Local Folders" that
// should not be renamed)
var srcCanRename = GetFolderAttribute(folderTree, sourceResource, "CanRename");
if (srcCanRename == "false") {
var srcFolder = sourceResource.QueryInterface(Components.interfaces.nsIMsgFolder);
if (!srcFolder.canRename) {
if (sourceServer == targetServer)
return false;
if (serverType != "none")
@ -425,15 +424,16 @@ function BeginDragFolderTree(event)
return false;
var folderResource = GetFolderResource(folderTree, row);
var folder = folderResource.QueryInterface(Components.interfaces.nsIMsgFolder);
if (GetFolderAttribute(folderTree, folderResource, "IsServer") == "true")
if (folder.isServer)
{
debugDump("***IsServer == true\n");
return false;
}
var flavor;
if (GetFolderAttribute(folderTree, folderResource, "ServerType") == "nntp")
if (folder.server.type == "nntp")
{ // news folder (newsgroup)
flavor = "text/x-moz-newsfolder";
}

View File

@ -47,9 +47,6 @@ var gMsgWindow;
var gInitialFolderStates = {};
// RDF needs to be defined for GetFolderAttribute in msgMail3PaneWindow.js
var RDF = Components.classes['@mozilla.org/rdf/rdf-service;1'].getService().QueryInterface(Components.interfaces.nsIRDFService);
const MSG_FOLDER_FLAG_OFFLINE = 0x8000000;
function OnLoad()
@ -184,11 +181,11 @@ function onSynchronizeClick(event)
var msgFolder = folderResource.QueryInterface(Components.interfaces.nsIMsgFolder);
if (!(gSynchronizeTree.treeBoxObject.view.isContainerOpen(row.value))) {
var serverType = GetFolderAttribute(gSynchronizeTree, folderResource, "ServerType");
var serverType = msgFolder.server.type;
// imap is the only server type that does folder discovery
if (serverType != "imap") return;
if (GetFolderAttribute(gSynchronizeTree, folderResource, "IsServer") == "true") {
if (folder.isServer) {
var server = msgFolder.server;
server.performExpand(gMsgWindow);
}
@ -239,13 +236,3 @@ function UpdateNode(resource, row)
function GetFolderResource(aTree, aIndex) {
return aTree.builderView.getResourceAtIndex(aIndex);
}
function GetFolderAttribute(aTree, aResource, aName) {
var rdfService = Components.classes['@mozilla.org/rdf/rdf-service;1']
.getService(Components.interfaces.nsIRDFService);
var property = rdfService.GetResource("http://home.netscape.com/NC-rdf#" + aName);
var target = aTree.database.GetTarget(aResource, property, true);
if (target)
target = target.QueryInterface(Components.interfaces.nsIRDFLiteral).Value;
return target;
}