summaryrefslogtreecommitdiffstats
path: root/comm/chat/modules/imStatusUtils.sys.mjs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--comm/chat/modules/imStatusUtils.sys.mjs57
1 files changed, 57 insertions, 0 deletions
diff --git a/comm/chat/modules/imStatusUtils.sys.mjs b/comm/chat/modules/imStatusUtils.sys.mjs
new file mode 100644
index 0000000000..58c594b117
--- /dev/null
+++ b/comm/chat/modules/imStatusUtils.sys.mjs
@@ -0,0 +1,57 @@
+/* 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 { XPCOMUtils } from "resource://gre/modules/XPCOMUtils.sys.mjs";
+import { l10nHelper } from "resource:///modules/imXPCOMUtils.sys.mjs";
+
+const lazy = {};
+
+XPCOMUtils.defineLazyGetter(lazy, "_", () =>
+ l10nHelper("chrome://chat/locale/status.properties")
+);
+
+var imIStatusInfo = Ci.imIStatusInfo;
+var statusAttributes = {};
+statusAttributes[imIStatusInfo.STATUS_UNKNOWN] = "unknown";
+statusAttributes[imIStatusInfo.STATUS_OFFLINE] = "offline";
+statusAttributes[imIStatusInfo.STATUS_INVISIBLE] = "invisible";
+statusAttributes[imIStatusInfo.STATUS_MOBILE] = "mobile";
+statusAttributes[imIStatusInfo.STATUS_IDLE] = "idle";
+statusAttributes[imIStatusInfo.STATUS_AWAY] = "away";
+statusAttributes[imIStatusInfo.STATUS_UNAVAILABLE] = "unavailable";
+statusAttributes[imIStatusInfo.STATUS_AVAILABLE] = "available";
+
+export var Status = {
+ toAttribute: aStatusType =>
+ aStatusType in statusAttributes ? statusAttributes[aStatusType] : "unknown",
+
+ _labels: {},
+ toLabel(aStatusType, aStatusText) {
+ // aStatusType may be either one of the (integral) imIStatusInfo status
+ // constants, or one of the statusAttributes.
+ if (!(typeof aStatusType == "string")) {
+ aStatusType = this.toAttribute(aStatusType);
+ }
+
+ if (!(aStatusType in this._labels)) {
+ this._labels[aStatusType] = lazy._(aStatusType + "StatusType");
+ }
+
+ let label = this._labels[aStatusType];
+ if (aStatusText) {
+ label = lazy._("statusWithStatusMessage", label, aStatusText);
+ }
+
+ return label;
+ },
+
+ toFlag(aAttribute) {
+ for (let flag in statusAttributes) {
+ if (statusAttributes[flag] == aAttribute) {
+ return flag;
+ }
+ }
+ return imIStatusInfo.STATUS_UNKNOWN;
+ },
+};