summaryrefslogtreecommitdiffstats
path: root/comm/chat/protocols/odnoklassniki/odnoklassniki.sys.mjs
diff options
context:
space:
mode:
Diffstat (limited to 'comm/chat/protocols/odnoklassniki/odnoklassniki.sys.mjs')
-rw-r--r--comm/chat/protocols/odnoklassniki/odnoklassniki.sys.mjs83
1 files changed, 83 insertions, 0 deletions
diff --git a/comm/chat/protocols/odnoklassniki/odnoklassniki.sys.mjs b/comm/chat/protocols/odnoklassniki/odnoklassniki.sys.mjs
new file mode 100644
index 0000000000..de8fe2f42e
--- /dev/null
+++ b/comm/chat/protocols/odnoklassniki/odnoklassniki.sys.mjs
@@ -0,0 +1,83 @@
+/* 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";
+import { GenericProtocolPrototype } from "resource:///modules/jsProtoHelper.sys.mjs";
+
+const lazy = {};
+
+XPCOMUtils.defineLazyGetter(lazy, "_", () =>
+ l10nHelper("chrome://chat/locale/xmpp.properties")
+);
+ChromeUtils.defineESModuleGetters(lazy, {
+ XMPPAccountPrototype: "resource:///modules/xmpp-base.sys.mjs",
+ XMPPSession: "resource:///modules/xmpp-session.sys.mjs",
+});
+
+XPCOMUtils.defineLazyGetter(lazy, "OdnoklassnikiAccount", () => {
+ function OdnoklassnikiAccount(aProtoInstance, aImAccount) {
+ this._init(aProtoInstance, aImAccount);
+ }
+ OdnoklassnikiAccount.prototype = {
+ __proto__: lazy.XMPPAccountPrototype,
+ get canJoinChat() {
+ return false;
+ },
+ connect() {
+ if (!this.name.includes("@")) {
+ // TODO: Do not use the default resource value if the user has not
+ // specified it and let the service generate it.
+ let jid =
+ this.name +
+ "@odnoklassniki.ru/" +
+ Services.strings
+ .createBundle("chrome://branding/locale/brand.properties")
+ .GetStringFromName("brandShortName");
+ this._jid = this._parseJID(jid);
+ } else {
+ this._jid = this._parseJID(this.name);
+ if (this._jid.domain != "odnoklassniki.ru") {
+ // We can't use this.onError because this._connection doesn't exist.
+ this.reportDisconnecting(
+ Ci.prplIAccount.ERROR_INVALID_USERNAME,
+ lazy._("connection.error.invalidUsername")
+ );
+ this.reportDisconnected();
+ return;
+ }
+ }
+
+ this._connection = new lazy.XMPPSession(
+ "xmpp.odnoklassniki.ru",
+ 5222,
+ "require_tls",
+ this._jid,
+ this.imAccount.password,
+ this
+ );
+ },
+ };
+ return OdnoklassnikiAccount;
+});
+
+export function OdnoklassnikiProtocol() {}
+OdnoklassnikiProtocol.prototype = {
+ __proto__: GenericProtocolPrototype,
+ get normalizedName() {
+ return "odnoklassniki";
+ },
+ get name() {
+ return lazy._("odnoklassniki.protocolName");
+ },
+ get iconBaseURI() {
+ return "chrome://prpl-odnoklassniki/skin/";
+ },
+ get usernameEmptyText() {
+ return lazy._("odnoklassniki.usernameHint");
+ },
+ getAccount(aImAccount) {
+ return new lazy.OdnoklassnikiAccount(this, aImAccount);
+ },
+};