mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-22 00:17:32 +09:00
Issue #1258 - Part 1: Import mailnews, ldap, and mork from comm-esr52.9.1
This commit is contained in:
parent
23e0d82436
commit
e400f4130a
1564 changed files with 510348 additions and 0 deletions
387
mailnews/base/content/folderProps.js
Normal file
387
mailnews/base/content/folderProps.js
Normal file
|
|
@ -0,0 +1,387 @@
|
|||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
Components.utils.import("resource://gre/modules/Services.jsm");
|
||||
Components.utils.import("resource:///modules/gloda/gloda.js");
|
||||
|
||||
var gMsgFolder;
|
||||
var gLockedPref = null;
|
||||
|
||||
// The folderPropsSink is the class that gets notified of an imap folder's properties
|
||||
|
||||
var gFolderPropsSink = {
|
||||
setFolderType: function(folderTypeString)
|
||||
{
|
||||
var typeLabel = document.getElementById("folderType.text");
|
||||
if (typeLabel)
|
||||
{
|
||||
typeLabel.setAttribute("value",folderTypeString);
|
||||
}
|
||||
// get the element for the folder type label and set value on it.
|
||||
},
|
||||
|
||||
setFolderTypeDescription: function(folderDescription)
|
||||
{
|
||||
var folderTypeLabel = document.getElementById("folderDescription.text");
|
||||
if (folderTypeLabel)
|
||||
folderTypeLabel.setAttribute("value", folderDescription);
|
||||
},
|
||||
|
||||
setFolderPermissions: function(folderPermissions)
|
||||
{
|
||||
var permissionsLabel = document.getElementById("folderPermissions.text");
|
||||
var descTextNode = document.createTextNode(folderPermissions);
|
||||
permissionsLabel.appendChild(descTextNode);
|
||||
},
|
||||
|
||||
serverDoesntSupportACL : function()
|
||||
{
|
||||
var typeLabel = document.getElementById("folderTypeLabel");
|
||||
if (typeLabel)
|
||||
typeLabel.setAttribute("hidden", "true");
|
||||
var permissionsLabel = document.getElementById("permissionsDescLabel");
|
||||
if (permissionsLabel)
|
||||
permissionsLabel.setAttribute("hidden", "true");
|
||||
|
||||
},
|
||||
|
||||
setQuotaStatus : function(folderQuotaStatus)
|
||||
{
|
||||
var quotaStatusLabel = document.getElementById("folderQuotaStatus");
|
||||
if(quotaStatusLabel)
|
||||
quotaStatusLabel.setAttribute("value", folderQuotaStatus);
|
||||
},
|
||||
|
||||
showQuotaData : function(showData)
|
||||
{
|
||||
var quotaStatusLabel = document.getElementById("folderQuotaStatus");
|
||||
var folderQuotaData = document.getElementById("folderQuotaData");
|
||||
|
||||
if(quotaStatusLabel && folderQuotaData)
|
||||
{
|
||||
quotaStatusLabel.hidden = showData;
|
||||
folderQuotaData.hidden = ! showData;
|
||||
}
|
||||
},
|
||||
|
||||
setQuotaData : function(root, usedKB, maxKB)
|
||||
{
|
||||
var quotaRoot = document.getElementById("quotaRoot");
|
||||
if (quotaRoot)
|
||||
quotaRoot.setAttribute("value", '"' + root + '"');
|
||||
|
||||
var percentage = (maxKB != 0) ? Math.round(usedKB / maxKB * 100) : 0;
|
||||
|
||||
var quotaPercentageBar = document.getElementById("quotaPercentageBar");
|
||||
if (quotaPercentageBar)
|
||||
quotaPercentageBar.setAttribute("value", percentage);
|
||||
|
||||
var bundle = document.getElementById("bundle_messenger");
|
||||
if(bundle)
|
||||
{
|
||||
var usedFreeCaption = bundle.getFormattedString("quotaUsedFree", [usedKB, maxKB], 2);
|
||||
var quotaCaption = document.getElementById("quotaUsedFree");
|
||||
if(quotaCaption)
|
||||
quotaCaption.setAttribute("value", usedFreeCaption);
|
||||
|
||||
var percentUsedCaption = bundle.getFormattedString("quotaPercentUsed", [percentage], 1);
|
||||
var percentUsed = document.getElementById("quotaPercentUsed");
|
||||
if(percentUsed)
|
||||
percentUsed.setAttribute("value", percentUsedCaption);
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
function doEnabling()
|
||||
{
|
||||
var nameTextbox = document.getElementById("name");
|
||||
document.documentElement.getButton("accept").disabled = !nameTextbox.value;
|
||||
}
|
||||
|
||||
function folderPropsOKButton()
|
||||
{
|
||||
if (gMsgFolder)
|
||||
{
|
||||
const nsMsgFolderFlags = Components.interfaces.nsMsgFolderFlags;
|
||||
// set charset attributes
|
||||
var folderCharsetList = document.getElementById("folderCharsetList");
|
||||
|
||||
// Log to the Error Console the charset value for the folder
|
||||
// if it is unknown to us. Value will be preserved by the menu-item.
|
||||
if (folderCharsetList.selectedIndex == -1)
|
||||
{
|
||||
Components.utils.reportError("Unknown folder encoding; folder=" +
|
||||
gMsgFolder.name + ", charset=" + gMsgFolder.charset);
|
||||
}
|
||||
|
||||
gMsgFolder.charset = folderCharsetList.getAttribute("value");
|
||||
gMsgFolder.charsetOverride = document.getElementById("folderCharsetOverride")
|
||||
.checked;
|
||||
|
||||
if(document.getElementById("offline.selectForOfflineFolder").checked ||
|
||||
document.getElementById("offline.selectForOfflineNewsgroup").checked)
|
||||
gMsgFolder.setFlag(nsMsgFolderFlags.Offline);
|
||||
else
|
||||
gMsgFolder.clearFlag(nsMsgFolderFlags.Offline);
|
||||
|
||||
if(document.getElementById("folderCheckForNewMessages").checked)
|
||||
gMsgFolder.setFlag(nsMsgFolderFlags.CheckNew);
|
||||
else
|
||||
gMsgFolder.clearFlag(nsMsgFolderFlags.CheckNew);
|
||||
|
||||
let glodaCheckbox = document.getElementById("folderIncludeInGlobalSearch");
|
||||
if (!glodaCheckbox.hidden) {
|
||||
if(glodaCheckbox.checked) {
|
||||
// We pass true here so that folders such as trash and junk can still
|
||||
// have a priority set.
|
||||
Gloda.resetFolderIndexingPriority(gMsgFolder, true);
|
||||
} else {
|
||||
Gloda.setFolderIndexingPriority(gMsgFolder,
|
||||
Gloda.getFolderForFolder(gMsgFolder).kIndexingNeverPriority);
|
||||
}
|
||||
}
|
||||
|
||||
var retentionSettings = saveCommonRetentionSettings(gMsgFolder.retentionSettings);
|
||||
retentionSettings.useServerDefaults = document.getElementById("retention.useDefault").checked;
|
||||
gMsgFolder.retentionSettings = retentionSettings;
|
||||
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// This throws an exception when an illegal folder name was entered.
|
||||
okCallback(document.getElementById("name").value, window.arguments[0].name,
|
||||
gMsgFolder.URI);
|
||||
|
||||
return true;
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function folderPropsOnLoad()
|
||||
{
|
||||
// look in arguments[0] for parameters
|
||||
if (window.arguments && window.arguments[0]) {
|
||||
if ( window.arguments[0].title ) {
|
||||
document.title = window.arguments[0].title;
|
||||
}
|
||||
if ( window.arguments[0].okCallback ) {
|
||||
top.okCallback = window.arguments[0].okCallback;
|
||||
}
|
||||
}
|
||||
|
||||
// fill in folder name, based on what they selected in the folder pane
|
||||
if (window.arguments[0].folder) {
|
||||
gMsgFolder = window.arguments[0].folder;
|
||||
} else {
|
||||
dump("passed null for folder, do nothing\n");
|
||||
}
|
||||
|
||||
if(window.arguments[0].name)
|
||||
{
|
||||
// Initialize name textbox with the given name and remember this
|
||||
// value so we can tell whether the folder needs to be renamed
|
||||
// when the dialog is accepted.
|
||||
var nameTextbox = document.getElementById("name");
|
||||
nameTextbox.value = window.arguments[0].name;
|
||||
|
||||
// name.setSelectionRange(0,-1);
|
||||
// name.focusTextField();
|
||||
}
|
||||
|
||||
const nsMsgFolderFlags = Components.interfaces.nsMsgFolderFlags;
|
||||
const serverType = window.arguments[0].serverType;
|
||||
|
||||
// Do this first, because of gloda we may want to override some of the hidden
|
||||
// statuses.
|
||||
hideShowControls(serverType);
|
||||
|
||||
if (gMsgFolder) {
|
||||
// We really need a functioning database, so we'll detect problems
|
||||
// and create one if we have to.
|
||||
try {
|
||||
var db = gMsgFolder.getDatabase(null);
|
||||
}
|
||||
catch (e) {
|
||||
gMsgFolder.updateFolder(window.arguments[0].msgWindow);
|
||||
}
|
||||
|
||||
var locationTextbox = document.getElementById("location");
|
||||
|
||||
// Decode the displayed mailbox:// URL as it's useful primarily for debugging,
|
||||
// whereas imap and news urls are sent around.
|
||||
locationTextbox.value = (serverType == "imap" || serverType == "nntp") ?
|
||||
gMsgFolder.folderURL : decodeURI(gMsgFolder.folderURL);
|
||||
|
||||
if (gMsgFolder.canRename)
|
||||
document.getElementById("name").removeAttribute("readonly");
|
||||
|
||||
if (gMsgFolder.flags & nsMsgFolderFlags.Offline) {
|
||||
|
||||
if(serverType == "imap" || serverType == "pop3")
|
||||
document.getElementById("offline.selectForOfflineFolder").checked = true;
|
||||
|
||||
if(serverType == "nntp")
|
||||
document.getElementById("offline.selectForOfflineNewsgroup").checked = true;
|
||||
}
|
||||
else {
|
||||
if(serverType == "imap" || serverType == "pop3")
|
||||
document.getElementById("offline.selectForOfflineFolder").checked = false;
|
||||
|
||||
if(serverType == "nntp")
|
||||
document.getElementById("offline.selectForOfflineNewsgroup").checked = false;
|
||||
}
|
||||
|
||||
// select the menu item
|
||||
var folderCharsetList = document.getElementById("folderCharsetList");
|
||||
folderCharsetList.value = gMsgFolder.charset;
|
||||
|
||||
// set override checkbox
|
||||
document.getElementById("folderCharsetOverride").checked = gMsgFolder.charsetOverride;
|
||||
|
||||
// set check for new mail checkbox
|
||||
document.getElementById("folderCheckForNewMessages").checked = gMsgFolder.flags & nsMsgFolderFlags.CheckNew;
|
||||
|
||||
// if gloda indexing is off, hide the related checkbox
|
||||
var glodaCheckbox = document.getElementById("folderIncludeInGlobalSearch");
|
||||
var glodaEnabled = Services.prefs
|
||||
.getBoolPref("mailnews.database.global.indexer.enabled");
|
||||
if (!glodaEnabled || (gMsgFolder.flags & (nsMsgFolderFlags.Queue |
|
||||
nsMsgFolderFlags.Newsgroup))) {
|
||||
glodaCheckbox.hidden = true;
|
||||
} else {
|
||||
// otherwise, the user can choose whether this file gets indexed
|
||||
let glodaFolder = Gloda.getFolderForFolder(gMsgFolder);
|
||||
glodaCheckbox.checked =
|
||||
glodaFolder.indexingPriority != glodaFolder.kIndexingNeverPriority;
|
||||
}
|
||||
}
|
||||
|
||||
if (serverType == "imap")
|
||||
{
|
||||
var imapFolder = gMsgFolder.QueryInterface(Components.interfaces.nsIMsgImapMailFolder);
|
||||
if (imapFolder)
|
||||
imapFolder.fillInFolderProps(gFolderPropsSink);
|
||||
}
|
||||
|
||||
var retentionSettings = gMsgFolder.retentionSettings;
|
||||
initCommonRetentionSettings(retentionSettings);
|
||||
document.getElementById("retention.useDefault").checked = retentionSettings.useServerDefaults;
|
||||
|
||||
// set folder sizes
|
||||
let numberOfMsgs = gMsgFolder.getTotalMessages(false);
|
||||
if (numberOfMsgs >= 0)
|
||||
document.getElementById("numberOfMessages").value = numberOfMsgs;
|
||||
|
||||
try {
|
||||
let sizeOnDisk = Components.classes["@mozilla.org/messenger;1"]
|
||||
.createInstance(Components.interfaces.nsIMessenger)
|
||||
.formatFileSize(gMsgFolder.sizeOnDisk, true);
|
||||
document.getElementById("sizeOnDisk").value = sizeOnDisk;
|
||||
} catch (e) { }
|
||||
|
||||
// select the initial tab
|
||||
if (window.arguments[0].tabID) {
|
||||
try {
|
||||
document.getElementById("folderPropTabBox").selectedTab =
|
||||
document.getElementById(window.arguments[0].tabID);
|
||||
}
|
||||
catch (ex) {}
|
||||
}
|
||||
onCheckKeepMsg();
|
||||
onUseDefaultRetentionSettings();
|
||||
}
|
||||
|
||||
function hideShowControls(serverType)
|
||||
{
|
||||
let controls = document.querySelectorAll("[hidefor]");
|
||||
var len = controls.length;
|
||||
for (var i=0; i<len; i++) {
|
||||
var control = controls[i];
|
||||
var hideFor = control.getAttribute("hidefor");
|
||||
if (!hideFor)
|
||||
throw "hidefor empty";
|
||||
|
||||
// hide unsupported server type
|
||||
// adding support for hiding multiple server types using hideFor="server1,server2"
|
||||
var hideForBool = false;
|
||||
var hideForTokens = hideFor.split(",");
|
||||
for (var j = 0; j < hideForTokens.length; j++) {
|
||||
if (hideForTokens[j] == serverType) {
|
||||
hideForBool = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
control.hidden = hideForBool;
|
||||
}
|
||||
|
||||
// hide the priviliges button if the imap folder doesn't have an admin url
|
||||
// mabye should leave this hidden by default and only show it in this case instead
|
||||
try {
|
||||
var imapFolder = gMsgFolder.QueryInterface(Components.interfaces.nsIMsgImapMailFolder);
|
||||
if (imapFolder)
|
||||
{
|
||||
var privilegesButton = document.getElementById("imap.FolderPrivileges");
|
||||
if (privilegesButton)
|
||||
{
|
||||
if (!imapFolder.hasAdminUrl)
|
||||
privilegesButton.setAttribute("hidden", "true");
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (ex) {}
|
||||
|
||||
if (gMsgFolder)
|
||||
{
|
||||
const nsMsgFolderFlags = Components.interfaces.nsMsgFolderFlags;
|
||||
// Hide "check for new mail" checkbox if this is an Inbox.
|
||||
if (gMsgFolder.flags & nsMsgFolderFlags.Inbox)
|
||||
document.getElementById("folderCheckForNewMessages").hidden = true;
|
||||
// Retention policy doesn't apply to Drafts/Templates/Outbox.
|
||||
if (gMsgFolder.isSpecialFolder(nsMsgFolderFlags.Drafts |
|
||||
nsMsgFolderFlags.Templates |
|
||||
nsMsgFolderFlags.Queue, true))
|
||||
document.getElementById("Retention").hidden = true;
|
||||
}
|
||||
}
|
||||
|
||||
function onOfflineFolderDownload()
|
||||
{
|
||||
// we need to create a progress window and pass that in as the second parameter here.
|
||||
gMsgFolder.downloadAllForOffline(null, window.arguments[0].msgWindow);
|
||||
}
|
||||
|
||||
function onFolderPrivileges()
|
||||
{
|
||||
var imapFolder = gMsgFolder.QueryInterface(Components.interfaces.nsIMsgImapMailFolder);
|
||||
if (imapFolder)
|
||||
imapFolder.folderPrivileges(window.arguments[0].msgWindow);
|
||||
// let's try closing the modal dialog to see if it fixes the various problems running this url
|
||||
window.close();
|
||||
}
|
||||
|
||||
|
||||
function onUseDefaultRetentionSettings()
|
||||
{
|
||||
var useDefault = document.getElementById("retention.useDefault").checked;
|
||||
document.getElementById('retention.keepMsg').disabled = useDefault;
|
||||
document.getElementById('retention.keepNewMsgMinLabel').disabled = useDefault;
|
||||
document.getElementById('retention.keepOldMsgMinLabel').disabled = useDefault;
|
||||
|
||||
var keepMsg = document.getElementById("retention.keepMsg").value;
|
||||
const nsIMsgRetentionSettings = Components.interfaces.nsIMsgRetentionSettings;
|
||||
document.getElementById('retention.keepOldMsgMin').disabled =
|
||||
useDefault || (keepMsg != nsIMsgRetentionSettings.nsMsgRetainByAge);
|
||||
document.getElementById('retention.keepNewMsgMin').disabled =
|
||||
useDefault || (keepMsg != nsIMsgRetentionSettings.nsMsgRetainByNumHeaders);
|
||||
}
|
||||
|
||||
function RebuildSummaryInformation()
|
||||
{
|
||||
window.arguments[0].rebuildSummaryCallback(gMsgFolder);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue