summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/addrbook/src/AbAutoCompleteMyDomain.jsm
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mailnews/addrbook/src/AbAutoCompleteMyDomain.jsm')
-rw-r--r--comm/mailnews/addrbook/src/AbAutoCompleteMyDomain.jsm69
1 files changed, 69 insertions, 0 deletions
diff --git a/comm/mailnews/addrbook/src/AbAutoCompleteMyDomain.jsm b/comm/mailnews/addrbook/src/AbAutoCompleteMyDomain.jsm
new file mode 100644
index 0000000000..08a2654d03
--- /dev/null
+++ b/comm/mailnews/addrbook/src/AbAutoCompleteMyDomain.jsm
@@ -0,0 +1,69 @@
+/* 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/. */
+
+var EXPORTED_SYMBOLS = ["AbAutoCompleteMyDomain"];
+
+var { MailServices } = ChromeUtils.import(
+ "resource:///modules/MailServices.jsm"
+);
+
+function AbAutoCompleteMyDomain() {}
+
+AbAutoCompleteMyDomain.prototype = {
+ QueryInterface: ChromeUtils.generateQI(["nsIAutoCompleteSearch"]),
+
+ cachedIdKey: "",
+ cachedIdentity: null,
+
+ applicableHeaders: new Set(["addr_to", "addr_cc", "addr_bcc", "addr_reply"]),
+
+ startSearch(aString, aSearchParam, aResult, aListener) {
+ let params = aSearchParam ? JSON.parse(aSearchParam) : {};
+ let applicable =
+ "type" in params && this.applicableHeaders.has(params.type);
+ const ACR = Ci.nsIAutoCompleteResult;
+ var address = null;
+ if (applicable && aString && !aString.includes(",")) {
+ if ("idKey" in params && params.idKey != this.cachedIdKey) {
+ this.cachedIdentity = MailServices.accounts.getIdentity(params.idKey);
+ this.cachedIdKey = params.idKey;
+ }
+ if (this.cachedIdentity.autocompleteToMyDomain) {
+ address = aString.includes("@")
+ ? aString
+ : this.cachedIdentity.email.replace(/[^@]*/, aString);
+ }
+ }
+
+ var result = {
+ searchString: aString,
+ searchResult: address ? ACR.RESULT_SUCCESS : ACR.RESULT_FAILURE,
+ defaultIndex: -1,
+ errorDescription: null,
+ matchCount: address ? 1 : 0,
+ getValueAt() {
+ return address;
+ },
+ getLabelAt() {
+ return this.getValueAt();
+ },
+ getCommentAt() {
+ return null;
+ },
+ getStyleAt() {
+ return "default-match";
+ },
+ getImageAt() {
+ return null;
+ },
+ getFinalCompleteValueAt(aIndex) {
+ return this.getValueAt(aIndex);
+ },
+ removeValueAt() {},
+ };
+ aListener.onSearchResult(this, result);
+ },
+
+ stopSearch() {},
+};