diff --git a/locales/en-US/chrome/chatzilla.properties b/locales/en-US/chrome/chatzilla.properties --- a/locales/en-US/chrome/chatzilla.properties +++ b/locales/en-US/chrome/chatzilla.properties @@ -775,7 +775,7 @@ msg.err.away.save = Saving the list of away messages failed (%S). msg.err.inputhistory.not.writable = Unable to save input history to ``%S''. msg.err.urls.not.writable = Unable to save URL log to ``%S''. -msg.err.invalid.url = ``%S'' is not a valid url nor an alias for a url, and therefor could not be loaded. +msg.err.invalid.url = ``%S'' is not a valid url nor an alias for a url, and therefore could not be loaded. msg.err.no.channel = When running the ``%S'' command, you should either provide a channel name, or run the command in the context of a channel. msg.err.no.idleservice = ChatZilla can't determine when you're away in your version of &brandShortName;. The auto-away feature will now be disabled. @@ -1451,8 +1451,6 @@ pref.autoAwayCap.help = ChatZilla automatically checks which users are here and which are away in each channel you are a member of, however, this causes significant lag on larger channels. Any channel bigger than this limit won't be checked. pref.autoAwayPeriod.label = Auto away-check period length pref.autoAwayPeriod.help = ChatZilla automatically checks which users are here and which are away in each channel you are a member of. This specifies how many minutes should pass between checks. -pref.autoperform.label = Auto-perform -pref.autoperform.help = When connecting to a server, you might want to send some commands automatically. Simply enter each command in this list (without the leading "/"), with parameters, and ChatZilla will do it all for you. The commands are run in the order listed. pref.autoRejoin.label = Rejoin when kicked pref.autoRejoin.help = If this is turned on, ChatZilla will try (only once) to rejoin a channel you got kicked from. Note, some channels dislike auto-rejoin, and will ban you, so be careful. pref.away.label = Away status @@ -1679,6 +1677,17 @@ # These are the prefs that get grouped # +pref.autoperform.label = Auto-perform +pref.autoperform.help = Enter any commands to be run when connecting to this network/joining this channel/opening this user's private chat. The commands are run in the order listed. +pref.autoperform.channel.label = Channel +pref.autoperform.channel.help = Enter any commands to be run when joining any channel. +pref.autoperform.client.label = Client +pref.autoperform.client.help = Enter any commands to be run when starting ChatZilla. +pref.autoperform.network.label = Network +pref.autoperform.network.help = Enter any commands to be run when connecting to any network. +pref.autoperform.user.label = User +pref.autoperform.user.help = Enter any commands to be run when opening any user's private chat. + pref.networkHeader.label = Networks pref.networkHeader.help = pref.channelHeader.label = Channels diff --git a/xul/content/handlers.js b/xul/content/handlers.js --- a/xul/content/handlers.js +++ b/xul/content/handlers.js @@ -2374,7 +2374,7 @@ { if (("autoPerformSent" in this) && (this.autoPerformSent == false)) { - var cmdary = this.prefs["autoperform"]; + var cmdary = client.prefs["autoperform.network"].concat(this.prefs["autoperform"]); for (var i = 0; i < cmdary.length; ++i) { if (cmdary[i][0] == "/") @@ -2643,6 +2643,8 @@ */ if (e.channel.unicodeName[0] == "!") dispatch("set-current-view", { view: e.channel }); + + this.doAutoPerform(); } else { @@ -2874,6 +2876,19 @@ this.updateHeader(); } +CIRCChannel.prototype.doAutoPerform = +function my_cautoperform() +{ + var cmdary = client.prefs["autoperform.channel"].concat(this.prefs["autoperform"]); + for (var i = 0; i < cmdary.length; ++i) + { + if (cmdary[i][0] == "/") + this.dispatch(cmdary[i].substr(1)); + else + this.dispatch(cmdary[i]); + } +} + CIRCChannel.prototype._clearUserList = function _my_clearuserlist() { @@ -3130,6 +3145,19 @@ //e.destMethod = "onGotReject"; } +CIRCUser.prototype.doAutoPerform = +function my_autoperform() +{ + var cmdary = client.prefs["autoperform.user"].concat(this.prefs["autoperform"]); + for (var i = 0; i < cmdary.length; ++i) + { + if (cmdary[i][0] == "/") + this.dispatch(cmdary[i].substr(1)); + else + this.dispatch(cmdary[i]); + } +} + CIRCDCCChat.prototype.onInit = function my_dccinit(e) { diff --git a/xul/content/prefs.js b/xul/content/prefs.js --- a/xul/content/prefs.js +++ b/xul/content/prefs.js @@ -100,21 +100,26 @@ ["aliases", [], "lists.aliases"], ["autoAwayCap", 300, "global"], ["autoAwayPeriod", 2, "appearance.misc"], + ["autoperform.channel", [], "lists.autoperform"], + ["autoperform.client", [], "lists.autoperform"], + ["autoperform.network", [], "lists.autoperform"], + ["autoperform.user", ["whois"], "lists.autoperform"], ["autoRejoin", false, ".connect"], ["away", "", "hidden"], + ["awayIdleMsg", "", ".ident"], + ["awayIdleTime", 0, ".ident"], ["awayNick", "", ".ident"], - ["awayIdleTime", 0, ".ident"], - ["awayIdleMsg", "", ".ident"], ["bugURL", "https://bugzilla.mozilla.org/show_bug.cgi?id=%s", "appearance.misc"], ["bugURL.comment", "#c%s", "appearance.misc"], - ["ceip.userid", "", "hidden"], - ["ceip.uploadUrl", "http://silver.warwickcompsoc.co.uk/mozilla/chatzilla/ceip/1/upload", "hidden"], - ["ceip.uploadSize", 32 * 1024, "hidden"], ["ceip.log.client", false, "hidden"], ["ceip.log.command", false, "hidden"], + ["ceip.log.dialog", false, "hidden"], ["ceip.log.menu", false, "hidden"], - ["ceip.log.dialog", false, "hidden"], + ["ceip.uploadSize", 32 * 1024, "hidden"], + ["ceip.uploadUrl", "http://silver.warwickcompsoc.co.uk/mozilla/chatzilla/ceip/1/upload", + "hidden"], + ["ceip.userid", "", "hidden"], ["channelHeader", true, "global.header"], ["channelLog", false, "global.log"], ["channelMaxLines", 500, "global.maxLines"], @@ -125,51 +130,56 @@ ["conference.limit", 150, "appearance.misc"], ["connectTries", -1, ".connect"], ["copyMessages", true, "global"], + ["dcc.autoAccept.delay", 10000, "hidden"], + ["dcc.downloadsFolder", getURLSpecFromFile(downloadsPath.path), + "dcc"], + ["dcc.enabled", true, "dcc"], + ["dcc.listenPorts", [], "dcc.ports"], + ["dcc.useServerIP", true, "dcc"], ["dccUserHeader", true, "global.header"], ["dccUserLog", false, "global.log"], ["dccUserMaxLines", 500, "global.maxLines"], - ["dcc.enabled", true, "dcc"], - ["dcc.autoAccept.delay", 10000, "hidden"], - ["dcc.downloadsFolder", getURLSpecFromFile(downloadsPath.path), "dcc"], - ["dcc.listenPorts", [], "dcc.ports"], - ["dcc.useServerIP", true, "dcc"], ["debugMode", "", "hidden"], ["defaultQuitMsg", "", ".connect"], + ["deleteOnPart", true, "global"], ["desc", "New Now Know How", ".ident"], - ["deleteOnPart", true, "global"], ["displayHeader", true, "appearance.misc"], + ["font.family", "default", "appearance.misc"], + ["font.size", 0, "appearance.misc"], ["guessCommands", true, "hidden"], ["hasPrefs", false, "hidden"], - ["font.family", "default", "appearance.misc"], - ["font.size", 0, "appearance.misc"], ["identd.enabled", false, client.prefManager.identGroup], + ["initialScripts", ["scripts/"], "startup.initialScripts"], ["initialURLs", [], "startup.initialURLs"], - ["initialScripts", ["scripts/"], - "startup.initialScripts"], + ["inputSpellcheck", true, "global"], + ["instrumentation.ceip", false, "hidden"], ["instrumentation.key", 0, "hidden"], - ["instrumentation.ceip", false, "hidden"], ["link.focus", true, "global.links"], - ["log", false, ".log"], - ["logFileName", makeLogNameClient, "hidden"], - ["logFile.client", "client.$y-$m-$d.log", "hidden"], - ["logFile.network", "$(network)/$(network).$y-$m-$d.log", "hidden"], + ["log", false, + ".log"], ["logFile.channel", "$(network)/channels/$(channel).$y-$m-$d.log", - "hidden"], + "hidden"], + ["logFile.client", "client.$y-$m-$d.log", + "hidden"], + ["logFile.dccuser", "dcc/$(user)/$(user).$y-$m-$d.log", + "hidden"], + ["logFile.network", "$(network)/$(network).$y-$m-$d.log", + "hidden"], ["logFile.user", "$(network)/users/$(user).$y-$m-$d.log", - "hidden"], - ["logFile.dccuser", "dcc/$(user)/$(user).$y-$m-$d.log", "hidden"], + "hidden"], + ["logFileName", makeLogNameClient, + "hidden"], ["logFolder", getURLSpecFromFile(logPath.path), ".log"], ["messages.click", gotos[0], "global.links"], ["messages.ctrlClick", gotos[1], "global.links"], ["messages.metaClick", gotos[2], "global.links"], ["messages.middleClick", gotos[3], "global.links"], + ["motif.current", "chrome://chatzilla/skin/output-light.css", + "appearance.motif"], ["motif.dark", "chrome://chatzilla/skin/output-dark.css", "appearance.motif"], ["motif.light", "chrome://chatzilla/skin/output-light.css", "appearance.motif"], - ["motif.current", "chrome://chatzilla/skin/output-light.css", - "appearance.motif"], - //["msgBeep", "beep beep", "global.sounds"], ["multiline", false, "hidden"], ["munger.bold", true, "munger"], ["munger.bugzilla-link", true, "munger"], @@ -190,47 +200,43 @@ ["networkLog", false, "global.log"], ["networkMaxLines", 200, "global.maxLines"], ["newTabLimit", 30, "global"], - ["notify.aggressive", true, "global"], ["nickCompleteStr", ":", "global"], ["nickname", defaultNick, ".ident"], ["nicknameList", [], "lists.nicknameList"], + ["notify.aggressive", true, "global"], ["outgoing.colorCodes", true, "global"], ["outputWindowURL", "chrome://chatzilla/content/output-window.html", "hidden"], ["proxy.typeOverride", "", ".connect"], - ["sortUsersByMode", true, "appearance.userlist"], - //["queryBeep", "beep", "global.sounds"], ["reconnect", true, ".connect"], ["showModeSymbols", false, "appearance.userlist"], - //["stalkBeep", "beep", "global.sounds"], + ["sortUsersByMode", true, "appearance.userlist"], + // Chat == "Activity" activity. + // Event == "Superfluous" activity. + // Stalk == "Attention" activity. + // Start == When view it opened. + ["sound.channel.chat", "", "global.soundEvts"], + ["sound.channel.event", "", "global.soundEvts"], + ["sound.channel.stalk", "beep", "global.soundEvts"], + ["sound.channel.start", "", "global.soundEvts"], + ["sound.enabled", true, "global.sounds"], + ["sound.overlapDelay", 2000, "global.sounds"], + ["sound.user.stalk", "beep", "global.soundEvts"], + ["sound.user.start", "beep beep", "global.soundEvts"], ["stalkWholeWords", true, "lists.stalkWords"], ["stalkWords", [], "lists.stalkWords"], - // Start == When view it opened. - // Event == "Superfluous" activity. - // Chat == "Activity" activity. - // Stalk == "Attention" activity. - ["sound.enabled", true, "global.sounds"], - ["sound.overlapDelay", 2000, "global.sounds"], - //["sound.surpressActive",false, "global.sounds"], - ["sound.channel.start", "", "global.soundEvts"], - ["sound.channel.event", "", "global.soundEvts"], - ["sound.channel.chat", "", "global.soundEvts"], - ["sound.channel.stalk", "beep", "global.soundEvts"], - ["sound.user.start", "beep beep", "global.soundEvts"], - ["sound.user.stalk", "beep", "global.soundEvts"], - ["inputSpellcheck", true, "global"], - ["tabGotoKeyModifiers", 0, "hidden"], - ["timestamps", false, "appearance.timestamps"], - ["timestamps.display", "[%H:%M]", "appearance.timestamps"], + ["tabGotoKeyModifiers", 0, "hidden"], + ["timestamps", false, "appearance.timestamps"], + ["timestamps.display", "[%H:%M]", "appearance.timestamps"], ["timestamps.log", "[%Y-%m-%d %H:%M:%S]", "hidden"], + ["urls.display", 10, "hidden"], ["urls.store.max", 100, "global"], - ["urls.display", 10, "hidden"], - ["username", "chatzilla", ".ident"], - ["usermode", "+i", ".ident"], ["userHeader", true, "global.header"], ["userlistLeft", true, "appearance.userlist"], ["userLog", false, "global.log"], ["userMaxLines", 200, "global.maxLines"], + ["usermode", "+i", ".ident"], + ["username", "chatzilla", ".ident"], ["warnOnClose", true, "global"] ]; @@ -393,6 +399,7 @@ var prefs = [ ["autoAwayPeriod", defer, "appearance.misc"], + ["autoperform", [], "lists.autoperform"], ["autoRejoin", defer, ".connect"], ["away", defer, "hidden"], ["awayNick", defer, ".ident"], @@ -403,13 +410,12 @@ ["collapseMsgs", defer, "appearance.misc"], ["conference.limit", defer, "appearance.misc"], ["connectTries", defer, ".connect"], + ["dcc.autoAccept.list", [], "dcc.autoAccept"], + ["dcc.downloadsFolder", defer, "dcc"], ["dcc.useServerIP", defer, "dcc"], - ["dcc.downloadsFolder", defer, "dcc"], - ["dcc.autoAccept.list", [], "dcc.autoAccept"], ["defaultQuitMsg", defer, ".connect"], ["desc", defer, ".ident"], - ["displayHeader", client.prefs["networkHeader"], - "appearance.misc"], + ["displayHeader", client.prefs["networkHeader"], "appearance.misc"], ["font.family", defer, "appearance.misc"], ["font.size", defer, "appearance.misc"], ["hasPrefs", false, "hidden"], @@ -427,9 +433,8 @@ ["timestamps", defer, "appearance.timestamps"], ["timestamps.display", defer, "appearance.timestamps"], ["timestamps.log", defer, "hidden"], - ["username", defer, ".ident"], ["usermode", defer, ".ident"], - ["autoperform", [], "lists.autoperform"] + ["username", defer, ".ident"] ]; var branch = "extensions.irc.networks." + pref_mungeName(network.encodedName) + @@ -494,6 +499,7 @@ var prefs = [ + ["autoperform", [], "lists.autoperform"], ["autoRejoin", defer, ".connect"], ["bugURL", defer, "appearance.misc"], ["bugURL.comment", defer, "appearance.misc"], @@ -502,18 +508,17 @@ ["collapseMsgs", defer, "appearance.misc"], ["conference.enabled", false, "hidden"], ["conference.limit", defer, "appearance.misc"], - ["displayHeader", client.prefs["channelHeader"], - "appearance.misc"], + ["displayHeader", client.prefs["channelHeader"], "appearance.misc"], ["font.family", defer, "appearance.misc"], ["font.size", defer, "appearance.misc"], ["hasPrefs", false, "hidden"], ["log", client.prefs["channelLog"], ".log"], ["logFileName", makeLogNameChannel, "hidden"], ["motif.current", defer, "appearance.motif"], + ["outputWindowURL", defer, "hidden"], ["timestamps", defer, "appearance.timestamps"], ["timestamps.display", defer, "appearance.timestamps"], - ["timestamps.log", defer, "hidden"], - ["outputWindowURL", defer, "hidden"] + ["timestamps.log", defer, "hidden"] ]; var branch = "extensions.irc.networks." + pref_mungeName(network.encodedName) + @@ -554,6 +559,7 @@ var prefs = [ + ["autoperform", [], "lists.autoperform"], ["charset", defer, ".connect"], ["collapseActions", defer, "appearance.misc"], ["collapseMsgs", defer, "appearance.misc"], @@ -561,10 +567,10 @@ ["font.family", defer, "appearance.misc"], ["font.size", defer, "appearance.misc"], ["hasPrefs", false, "hidden"], + ["log", client.prefs["userLog"], ".log"], + ["logFileName", makeLogNameUser, "hidden"], ["motif.current", defer, "appearance.motif"], ["outputWindowURL", defer, "hidden"], - ["log", client.prefs["userLog"], ".log"], - ["logFileName", makeLogNameUser, "hidden"], ["timestamps", defer, "appearance.timestamps"], ["timestamps.display", defer, "appearance.timestamps"], ["timestamps.log", defer, "hidden"] @@ -607,10 +613,10 @@ ["font.family", defer, "appearance.misc"], ["font.size", defer, "appearance.misc"], ["hasPrefs", false, "hidden"], + ["log", client.prefs["dccUserLog"], ".log"], + ["logFileName", makeLogNameUser, "hidden"], ["motif.current", defer, "appearance.motif"], ["outputWindowURL", defer, "hidden"], - ["log", client.prefs["dccUserLog"], ".log"], - ["logFileName", makeLogNameUser, "hidden"], ["timestamps", defer, "appearance.timestamps"], ["timestamps.display", defer, "appearance.timestamps"], ["timestamps.log", defer, "hidden"] diff --git a/xul/content/static.js b/xul/content/static.js --- a/xul/content/static.js +++ b/xul/content/static.js @@ -179,6 +179,7 @@ client.ceip.logEvent({type: "client", event: "start"}); setTimeout("dispatch('focus-input')", 0); + setTimeout(processStartupAutoperform, 0); setTimeout(processStartupURLs, 0); } @@ -854,6 +855,18 @@ return -1; } +function processStartupAutoperform() +{ + var cmdary = client.prefs["autoperform.client"]; + for (var i = 0; i < cmdary.length; ++i) + { + if (cmdary[i][0] == "/") + client.dispatch(cmdary[i].substr(1)); + else + client.dispatch(cmdary[i]); + } +} + function processStartupURLs() { var wentSomewhere = false; @@ -1564,8 +1577,9 @@ } dispatch("create-tab-for-view", { view: user }); - } - user.whois(); + + user.doAutoPerform(); + } return user; } @@ -1636,7 +1650,7 @@ case "IRCUser": rv.viewType = MSG_USER; rv.user = obj; - rv.userName = obj.unicodeName; + rv.userName = rv.nickname = obj.unicodeName; rv.server = rv.user.parent; rv.network = rv.server.parent; break; @@ -1644,7 +1658,7 @@ case "IRCChanUser": rv.viewType = MSG_USER; rv.user = obj; - rv.userName = obj.unicodeName; + rv.userName = rv.nickname = obj.unicodeName; rv.channel = rv.user.parent; rv.server = rv.channel.parent; rv.network = rv.server.parent;