releases-comm-central/chat/protocols/jsTest/jsTestProtocol.js

96 строки
3.1 KiB
JavaScript

/* 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/. */
ChromeUtils.import("resource:///modules/imXPCOMUtils.jsm");
ChromeUtils.import("resource:///modules/jsProtoHelper.jsm");
function Conversation(aAccount)
{
this._init(aAccount);
}
Conversation.prototype = {
__proto__: GenericConvIMPrototype,
_disconnected: false,
_setDisconnected: function() {
this._disconnected = true;
},
close: function() {
if (!this._disconnected)
this.account.disconnect(true);
},
sendMsg: function (aMsg) {
if (this._disconnected) {
this.writeMessage("jstest", "This message could not be sent because the conversation is no longer active: " + aMsg, {system: true, error: true});
return;
}
this.writeMessage("You", aMsg, {outgoing: true});
this.writeMessage("/dev/null", "Thanks! I appreciate your attention.",
{incoming: true, autoResponse: true});
},
get name() { return "/dev/null"; },
};
function Account(aProtoInstance, aImAccount)
{
this._init(aProtoInstance, aImAccount);
}
Account.prototype = {
__proto__: GenericAccountPrototype,
connect: function() {
this.reportConnecting();
// do something here
this.reportConnected();
setTimeout((function() {
this._conv = new Conversation(this);
this._conv.writeMessage("jstest", "You are now talking to /dev/null", {system: true});
}).bind(this), 0);
},
_conv: null,
disconnect: function(aSilent) {
this.reportDisconnecting(Ci.prplIAccount.NO_ERROR, "");
if (!aSilent)
this._conv.writeMessage("jstest", "You have disconnected.", {system: true});
if (this._conv) {
this._conv._setDisconnected();
delete this._conv;
}
this.reportDisconnected();
},
get canJoinChat() { return true; },
chatRoomFields: {
channel: {label: "_Channel Field", required: true},
channelDefault: {label: "_Field with default", default: "Default Value"},
password: {label: "_Password Field", default: "", isPassword: true,
required: false},
sampleIntField: {label: "_Int Field", default: 4, min: 0, max: 10,
required: true}
}
};
function jsTestProtocol() { }
jsTestProtocol.prototype = {
__proto__: GenericProtocolPrototype,
get name() { return "JS Test"; },
options: {
"text": {label: "Text option", default: "foo"},
"bool": {label: "Boolean option", default: true},
"int" : {label: "Integer option", default: 42},
"list": {label: "Select option", default: "option2",
listValues: {"option1": "First option",
"option2": "Default option",
"option3": "Other option"}}
},
usernameSplits: [
{label: "Server", separator: "@", defaultValue: "default.server",
reverse: true}
],
getAccount: function(aImAccount) { return new Account(this, aImAccount); },
classID: Components.ID("{a0774c5a-4aea-458b-9fbc-8d3cbf1a4630}"),
};
var NSGetFactory = XPCOMUtils.generateNSGetFactory([jsTestProtocol]);