1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
/* 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/. */
import { IMServices } from "resource:///modules/IMServices.sys.mjs";
const { MailServices } = ChromeUtils.import(
"resource:///modules/MailServices.jsm"
);
export var allContacts = {};
export var onlineContacts = {};
export var ChatCore = {
initialized: false,
_initializing: false,
init() {
if (this._initializing) {
return;
}
this._initializing = true;
Services.obs.addObserver(this, "browser-request");
Services.obs.addObserver(this, "contact-signed-on");
Services.obs.addObserver(this, "contact-signed-off");
Services.obs.addObserver(this, "contact-added");
Services.obs.addObserver(this, "contact-removed");
},
idleStart() {
IMServices.core.init();
// Find the accounts that exist in the im account service but
// not in nsMsgAccountManager. They have probably been lost if
// the user has used an older version of Thunderbird on a
// profile with IM accounts. See bug 736035.
let accountsById = {};
for (let account of IMServices.accounts.getAccounts()) {
accountsById[account.numericId] = account;
}
for (let account of MailServices.accounts.accounts) {
let incomingServer = account.incomingServer;
if (!incomingServer || incomingServer.type != "im") {
continue;
}
delete accountsById[incomingServer.wrappedJSObject.imAccount.numericId];
}
// Let's recreate each of them...
for (let id in accountsById) {
let account = accountsById[id];
let inServer = MailServices.accounts.createIncomingServer(
account.name,
account.protocol.id, // hostname
"im"
);
inServer.wrappedJSObject.imAccount = account;
let acc = MailServices.accounts.createAccount();
// Avoid new folder notifications.
inServer.valid = false;
acc.incomingServer = inServer;
inServer.valid = true;
MailServices.accounts.notifyServerLoaded(inServer);
}
IMServices.tags.getTags().forEach(function (aTag) {
aTag.getContacts().forEach(function (aContact) {
let name = aContact.preferredBuddy.normalizedName;
allContacts[name] = aContact;
});
});
ChatCore.initialized = true;
Services.obs.notifyObservers(null, "chat-core-initialized");
ChatCore._initializing = false;
},
observe(aSubject, aTopic, aData) {
if (aTopic == "browser-request") {
Services.ww.openWindow(
null,
"chrome://messenger/content/browserRequest.xhtml",
null,
"chrome,private,centerscreen,width=980,height=750",
aSubject
);
return;
}
if (aTopic == "contact-signed-on") {
onlineContacts[aSubject.preferredBuddy.normalizedName] = aSubject;
return;
}
if (aTopic == "contact-signed-off") {
delete onlineContacts[aSubject.preferredBuddy.normalizedName];
return;
}
if (aTopic == "contact-added") {
allContacts[aSubject.preferredBuddy.normalizedName] = aSubject;
return;
}
if (aTopic == "contact-removed") {
delete allContacts[aSubject.preferredBuddy.normalizedName];
}
},
};
|