96 строки
3.1 KiB
JavaScript
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]);
|