mirror of
https://github.com/ManchildProductions/binoc-central-mirror.git
synced 2026-06-25 12:48:49 +00:00
378 lines
13 KiB
JavaScript
378 lines
13 KiB
JavaScript
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* 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/. */
|
|
|
|
this.EXPORTED_SYMBOLS = ['moveCopyModule'];
|
|
|
|
var Cc = Components.classes;
|
|
var Ci = Components.interfaces;
|
|
var Cr = Components.results;
|
|
|
|
var nsActProcess = Components.Constructor("@mozilla.org/activity-process;1",
|
|
"nsIActivityProcess", "init");
|
|
var nsActEvent = Components.Constructor("@mozilla.org/activity-event;1",
|
|
"nsIActivityEvent", "init");
|
|
var nsActWarning = Components.Constructor("@mozilla.org/activity-warning;1",
|
|
"nsIActivityWarning", "init");
|
|
var nsMsgFolderFlags = Ci.nsMsgFolderFlags;
|
|
|
|
Components.utils.import("resource://gre/modules/Services.jsm");
|
|
Components.utils.import("resource:///modules/mailServices.js");
|
|
Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
|
|
Components.utils.import("resource://gre/modules/PluralForm.jsm");
|
|
Components.utils.import("resource:///modules/gloda/log4moz.js");
|
|
|
|
// This module provides a link between the move/copy code and the activity
|
|
// manager.
|
|
var moveCopyModule =
|
|
{
|
|
lastMessage: {},
|
|
lastFolder: {},
|
|
|
|
get log() {
|
|
delete this.log;
|
|
return this.log = Log4Moz.getConfiguredLogger("moveCopyModule");
|
|
},
|
|
|
|
get activityMgr() {
|
|
delete this.activityMgr;
|
|
return this.activityMgr = Cc["@mozilla.org/activity-manager;1"]
|
|
.getService(Ci.nsIActivityManager);
|
|
},
|
|
|
|
get bundle() {
|
|
delete this.bundle;
|
|
return this.bundle = Services.strings
|
|
.createBundle("chrome://messenger/locale/activity.properties");
|
|
},
|
|
|
|
getString: function(stringName) {
|
|
try {
|
|
return this.bundle.GetStringFromName(stringName)
|
|
} catch (e) {
|
|
this.log.error("error trying to get a string called: " + stringName);
|
|
throw(e);
|
|
}
|
|
},
|
|
|
|
msgAdded : function(aMsg) {
|
|
},
|
|
|
|
msgsDeleted : function(aMsgList) {
|
|
this.log.info("in msgsDeleted");
|
|
|
|
let count = aMsgList.length;
|
|
if (count <= 0)
|
|
return;
|
|
|
|
let displayCount = count;
|
|
// get the folder of the deleted messages
|
|
let folder = aMsgList.queryElementAt(0, Components.interfaces.nsIMsgDBHdr).folder;
|
|
|
|
let activities = this.activityMgr.getActivities({})
|
|
if (activities.length > 0 &&
|
|
activities[activities.length-1].id == this.lastMessage.id &&
|
|
this.lastMessage.type == "deleteMail" &&
|
|
this.lastMessage.folder == folder.prettiestName)
|
|
{
|
|
displayCount += this.lastMessage.count;
|
|
this.activityMgr.removeActivity(this.lastMessage.id);
|
|
}
|
|
|
|
this.lastMessage = {};
|
|
let displayText = PluralForm.get(displayCount, this.getString("deletedMessages2"));
|
|
displayText = displayText.replace("#1", displayCount)
|
|
this.lastMessage.count = displayCount;
|
|
displayText = displayText.replace("#2", folder.prettiestName)
|
|
this.lastMessage.folder = folder.prettiestName;
|
|
|
|
let statusText = folder.server.prettyName;
|
|
|
|
// create an activity event
|
|
let event = new nsActEvent(displayText,
|
|
folder,
|
|
statusText,
|
|
Date.now(), // start time
|
|
Date.now()); // completion time
|
|
|
|
event.iconClass = "deleteMail";
|
|
this.lastMessage.type = event.iconClass;
|
|
|
|
for (let i = 0; i < count; i++)
|
|
{
|
|
let msgHdr = aMsgList.queryElementAt(i, Components.interfaces.nsIMsgDBHdr);
|
|
event.addSubject(msgHdr.messageId);
|
|
}
|
|
|
|
this.lastMessage.id = this.activityMgr.addActivity(event);
|
|
},
|
|
|
|
msgsMoveCopyCompleted : function(aMove, aSrcMsgList, aDestFolder) {
|
|
try {
|
|
this.log.info("in msgsMoveCopyCompleted");
|
|
|
|
let count = aSrcMsgList.length;
|
|
if (count <= 0)
|
|
return;
|
|
|
|
// get the folder of the moved/copied messages
|
|
let folder = aSrcMsgList.queryElementAt(0, Components.interfaces.nsIMsgDBHdr).folder;
|
|
this.log.info("got folder");
|
|
|
|
let displayCount = count;
|
|
|
|
let activities = this.activityMgr.getActivities({});
|
|
if (activities.length > 0 &&
|
|
activities[activities.length-1].id == this.lastMessage.id &&
|
|
this.lastMessage.type == (aMove ? "moveMail" : "copyMail") &&
|
|
this.lastMessage.sourceFolder == folder.prettiestName &&
|
|
this.lastMessage.destFolder == aDestFolder.prettiestName)
|
|
{
|
|
displayCount += this.lastMessage.count;
|
|
this.activityMgr.removeActivity(this.lastMessage.id);
|
|
}
|
|
|
|
let statusText = '';
|
|
if (folder.server != aDestFolder.server)
|
|
{
|
|
statusText = this.getString("fromServerToServer");
|
|
statusText = statusText.replace("#1", folder.server.prettyName);
|
|
statusText = statusText.replace("#2", aDestFolder.server.prettyName);
|
|
}
|
|
else
|
|
{
|
|
statusText = folder.server.prettyName;
|
|
}
|
|
|
|
this.lastMessage = {};
|
|
let displayText;
|
|
if (aMove)
|
|
displayText = PluralForm.get(displayCount,
|
|
this.getString("movedMessages"));
|
|
else
|
|
displayText = PluralForm.get(displayCount,
|
|
this.getString("copiedMessages"));
|
|
|
|
displayText = displayText.replace("#1", displayCount)
|
|
this.lastMessage.count = displayCount;
|
|
displayText = displayText.replace("#2", folder.prettiestName)
|
|
this.lastMessage.sourceFolder = folder.prettiestName;
|
|
displayText = displayText.replace("#3", aDestFolder.prettiestName)
|
|
this.lastMessage.destFolder = aDestFolder.prettiestName;
|
|
|
|
// create an activity event
|
|
let event = new nsActEvent(displayText,
|
|
folder,
|
|
statusText,
|
|
Date.now(), // start time
|
|
Date.now()); // completion time
|
|
event.iconClass = aMove ? "moveMail" : "copyMail";
|
|
this.lastMessage.type = event.iconClass;
|
|
|
|
for (let i = 0; i < count; i++)
|
|
{
|
|
let msgHdr = aSrcMsgList.queryElementAt(i, Components.interfaces.nsIMsgDBHdr);
|
|
event.addSubject(msgHdr.messageId);
|
|
}
|
|
this.lastMessage.id = this.activityMgr.addActivity(event);
|
|
} catch (e) {
|
|
this.log.error("Exception: " + e)
|
|
}
|
|
},
|
|
|
|
folderAdded: function(aFolder) {
|
|
},
|
|
|
|
folderDeleted : function(aFolder) {
|
|
let server;
|
|
try {
|
|
// When a new account is created we get this notification with an empty named
|
|
// folder that can't return its server. Ignore it.
|
|
// TODO: find out what it is.
|
|
server = aFolder.server;
|
|
// If the account has been removed, we're going to ignore this notification.
|
|
MailServices.accounts.FindServer(server.username, server.hostName, server.type);
|
|
}
|
|
catch(ex) {return;}
|
|
|
|
let displayText;
|
|
let statusText = server.prettyName;
|
|
|
|
// Display a different message depending on whether we emptied the trash
|
|
// or actually deleted a folder
|
|
if (aFolder.isSpecialFolder(nsMsgFolderFlags.Trash, false))
|
|
displayText = this.getString("emptiedTrash");
|
|
else
|
|
displayText = this.getString("deletedFolder").replace("#1", aFolder.prettiestName);
|
|
|
|
// create an activity event
|
|
let event = new nsActEvent(displayText,
|
|
server,
|
|
statusText,
|
|
Date.now(), // start time
|
|
Date.now()); // completion time
|
|
|
|
event.addSubject(aFolder);
|
|
event.iconClass = "deleteMail";
|
|
|
|
// When we rename, we get a delete event as well as a rename, so store
|
|
// the last folder we deleted
|
|
this.lastFolder = {};
|
|
this.lastFolder.URI = aFolder.URI;
|
|
this.lastFolder.event = this.activityMgr.addActivity(event);
|
|
},
|
|
|
|
folderMoveCopyCompleted: function(aMove, aSrcFolder, aDestFolder) {
|
|
this.log.info("in folderMoveCopyCompleted, aMove = " + aMove);
|
|
|
|
let displayText;
|
|
if (aMove)
|
|
displayText = this.getString("movedFolder");
|
|
else
|
|
displayText = this.getString("copiedFolder");
|
|
|
|
displayText = displayText.replace('#1', aSrcFolder.prettiestName);
|
|
displayText = displayText.replace('#2', aDestFolder.prettiestName);
|
|
|
|
let statusText = '';
|
|
if (aSrcFolder.server != aDestFolder.server)
|
|
{
|
|
statusText = this.getString("fromServerToServer");
|
|
statusText = statusText.replace("#1", aSrcFolder.server.prettyName);
|
|
statusText = statusText.replace("#2", aDestFolder.server.prettyName);
|
|
}
|
|
else
|
|
{
|
|
statusText = aSrcFolder.server.prettyName;
|
|
}
|
|
// create an activity event
|
|
let event = new nsActEvent(displayText,
|
|
aSrcFolder.server,
|
|
statusText,
|
|
Date.now(), // start time
|
|
Date.now()); // completion time
|
|
|
|
event.addSubject(aSrcFolder);
|
|
event.addSubject(aDestFolder);
|
|
event.iconClass = aMove ? "moveMail" : "copyMail";
|
|
|
|
this.activityMgr.addActivity(event);
|
|
},
|
|
|
|
folderRenamed: function(aOrigFolder, aNewFolder) {
|
|
this.log.info("in folderRenamed, aOrigFolder = "+ aOrigFolder.prettiestName+", aNewFolder = "+
|
|
aNewFolder.prettiestName);
|
|
|
|
let displayText;
|
|
let statusText = aNewFolder.server.prettyName;
|
|
|
|
// Display a different message depending on whether we moved the folder
|
|
// to the trash or actually renamed the folder.
|
|
if (aNewFolder.isSpecialFolder(nsMsgFolderFlags.Trash, true))
|
|
{
|
|
displayText = this.getString("movedFolderToTrash");
|
|
displayText = displayText.replace("#1", aOrigFolder.prettiestName);
|
|
}
|
|
else
|
|
{
|
|
displayText = this.getString("renamedFolder");
|
|
displayText = displayText.replace("#1", aOrigFolder.prettiestName);
|
|
displayText = displayText.replace("#2", aNewFolder.prettiestName);
|
|
}
|
|
|
|
// When renaming a folder, a delete event is always fired first
|
|
if (this.lastFolder.URI == aOrigFolder.URI)
|
|
this.activityMgr.removeActivity(this.lastFolder.event);
|
|
|
|
// create an activity event
|
|
let event = new nsActEvent(displayText,
|
|
aOrigFolder.server,
|
|
statusText,
|
|
Date.now(), // start time
|
|
Date.now()); // completion time
|
|
|
|
event.addSubject(aOrigFolder);
|
|
event.addSubject(aNewFolder);
|
|
|
|
this.activityMgr.addActivity(event);
|
|
},
|
|
|
|
itemEvent: function(aItem, aEvent, aData) {
|
|
if (aEvent == "UnincorporatedMessageMoved") {
|
|
let srcFolder = aItem.QueryInterface(Components.interfaces.nsIMsgFolder);
|
|
let msgHdr = aData.QueryInterface(Components.interfaces.nsIMsgDBHdr);
|
|
|
|
try {
|
|
this.log.info("in UnincorporatedMessageMoved");
|
|
|
|
// get the folder of the moved/copied messages
|
|
let destFolder = msgHdr.folder;
|
|
this.log.info("got folder");
|
|
|
|
let displayCount = 1;
|
|
|
|
let activities = this.activityMgr.getActivities({});
|
|
if (activities.length > 0 &&
|
|
activities[activities.length-1].id == this.lastMessage.id &&
|
|
this.lastMessage.type == "moveMail" &&
|
|
this.lastMessage.sourceFolder == srcFolder.prettiestName &&
|
|
this.lastMessage.destFolder == destFolder.prettiestName)
|
|
{
|
|
displayCount += this.lastMessage.count;
|
|
this.activityMgr.removeActivity(this.lastMessage.id);
|
|
}
|
|
|
|
let statusText = '';
|
|
if (srcFolder.server != destFolder.server)
|
|
{
|
|
statusText = this.getString("fromServerToServer");
|
|
statusText = statusText.replace("#1", srcFolder.server.prettyName);
|
|
statusText = statusText.replace("#2", destFolder.server.prettyName);
|
|
}
|
|
else
|
|
{
|
|
statusText = srcFolder.server.prettyName;
|
|
}
|
|
|
|
this.lastMessage = {};
|
|
let displayText;
|
|
displayText = PluralForm.get(displayCount,
|
|
this.getString("movedMessages"));
|
|
|
|
displayText = displayText.replace("#1", displayCount)
|
|
this.lastMessage.count = displayCount;
|
|
displayText = displayText.replace("#2", srcFolder.prettiestName)
|
|
this.lastMessage.sourceFolder = srcFolder.prettiestName;
|
|
displayText = displayText.replace("#3", destFolder.prettiestName)
|
|
this.lastMessage.destFolder = destFolder.prettiestName;
|
|
|
|
// create an activity event
|
|
let event = new nsActEvent(displayText,
|
|
srcFolder,
|
|
statusText,
|
|
Date.now(), // start time
|
|
Date.now()); // completion time
|
|
|
|
event.iconClass = "moveMail";
|
|
this.lastMessage.type = event.iconClass;
|
|
event.addSubject(msgHdr.messageId);
|
|
this.lastMessage.id = this.activityMgr.addActivity(event);
|
|
} catch (e) {
|
|
this.log.error("Exception: " + e)
|
|
}
|
|
}
|
|
},
|
|
|
|
init: function() {
|
|
// XXX when do we need to remove ourselves?
|
|
MailServices.mfn.addListener(this,
|
|
MailServices.mfn.msgsDeleted |
|
|
MailServices.mfn.msgsMoveCopyCompleted |
|
|
MailServices.mfn.folderDeleted |
|
|
MailServices.mfn.folderMoveCopyCompleted |
|
|
MailServices.mfn.folderRenamed |
|
|
MailServices.mfn.itemEvent);
|
|
}
|
|
}
|