mirror of
https://github.com/rn10950/RetroZilla.git
synced 2024-11-15 04:00:12 +01:00
325 lines
11 KiB
JavaScript
325 lines
11 KiB
JavaScript
/* ***** BEGIN LICENSE BLOCK *****
|
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
|
*
|
|
* The contents of this file are subject to the Mozilla Public License Version
|
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
|
* the License. You may obtain a copy of the License at
|
|
* http://www.mozilla.org/MPL/
|
|
*
|
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
* for the specific language governing rights and limitations under the
|
|
* License.
|
|
*
|
|
* The Original Code is ChatZilla.
|
|
*
|
|
* The Initial Developer of the Original Code is James Ross.
|
|
* Portions created by the Initial Developer are Copyright (C) 2006
|
|
* the Initial Developer. All Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
* James Ross <silver@warwickcompsoc.co.uk>
|
|
*
|
|
* Alternatively, the contents of this file may be used under the terms of
|
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
|
* of those above. If you wish to allow use of your version of this file only
|
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
|
* use your version of this file under the terms of the MPL, indicate your
|
|
* decision by deleting the provisions above and replace them with the notice
|
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
|
* the provisions above, a recipient may use your version of this file under
|
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
|
*
|
|
* ***** END LICENSE BLOCK ***** */
|
|
|
|
function initNetworks()
|
|
{
|
|
var networks = new Object();
|
|
|
|
// Set up default network list.
|
|
networks["moznet"] = {
|
|
displayName: "moznet",
|
|
isupportsKey: "Mozilla",
|
|
servers: [{hostname: "irc.mozilla.org", port:6667},
|
|
{hostname: "irc.mozilla.org", port:6697, isSecure: true}]};
|
|
networks["hybridnet"] = {
|
|
displayName: "hybridnet",
|
|
isupportsKey: "",
|
|
servers: [{hostname: "irc.ssc.net", port: 6667}]};
|
|
networks["slashnet"] = {
|
|
displayName: "slashnet",
|
|
isupportsKey: "",
|
|
servers: [{hostname: "irc.slashnet.org", port:6667}]};
|
|
networks["dalnet"] = {
|
|
displayName: "dalnet",
|
|
isupportsKey: "",
|
|
servers: [{hostname: "irc.dal.net", port:6667}]};
|
|
networks["undernet"] = {
|
|
displayName: "undernet",
|
|
isupportsKey: "",
|
|
servers: [{hostname: "irc.undernet.org", port:6667}]};
|
|
networks["webbnet"] = {
|
|
displayName: "webbnet",
|
|
isupportsKey: "",
|
|
servers: [{hostname: "irc.webbnet.info", port:6667}]};
|
|
networks["quakenet"] = {
|
|
displayName: "quakenet",
|
|
isupportsKey: "",
|
|
servers: [{hostname: "irc.quakenet.org", port:6667}]};
|
|
networks["freenode"] = {
|
|
displayName: "freenode",
|
|
isupportsKey: "",
|
|
servers: [{hostname: "irc.freenode.net", port:6667}]};
|
|
networks["serenia"] = {
|
|
displayName: "serenia",
|
|
isupportsKey: "",
|
|
servers: [{hostname: "chat.serenia.net", port:9999, isSecure: true}]};
|
|
networks["efnet"] = {
|
|
displayName: "efnet",
|
|
isupportsKey: "",
|
|
servers: [{hostname: "irc.prison.net", port: 6667},
|
|
{hostname: "irc.magic.ca", port: 6667}]};
|
|
|
|
for (var name in networks)
|
|
networks[name].name = name;
|
|
|
|
var builtInNames = keys(networks);
|
|
|
|
var userNetworkList = new Array();
|
|
|
|
// Load the user's network list.
|
|
var networksFile = new nsLocalFile(client.prefs["profilePath"]);
|
|
networksFile.append("networks.txt");
|
|
if (networksFile.exists())
|
|
{
|
|
var networksLoader = new TextSerializer(networksFile);
|
|
if (networksLoader.open("<"))
|
|
{
|
|
var item = networksLoader.deserialize();
|
|
if (item instanceof Array)
|
|
userNetworkList = item;
|
|
else
|
|
dd("Malformed networks file!");
|
|
networksLoader.close();
|
|
}
|
|
}
|
|
|
|
// Merge the user's network list with the default ones.
|
|
for (var i = 0; i < userNetworkList.length; i++)
|
|
networks[userNetworkList[i].name] = userNetworkList[i];
|
|
|
|
/* Flag up all networks that are built-in, so they can be handled properly.
|
|
* We need to do this last so that it ensures networks overridden by the
|
|
* user's networks.txt are still flagged properly.
|
|
*/
|
|
for (var i = 0; i < builtInNames.length; i++)
|
|
networks[builtInNames[i]].isBuiltIn = true;
|
|
|
|
// Push network list over to client.networkList.
|
|
client.networkList = new Array();
|
|
for (var name in networks)
|
|
client.networkList.push(networks[name]);
|
|
|
|
// Sync to client.networks.
|
|
networksSyncFromList();
|
|
}
|
|
|
|
function networksSyncToList()
|
|
{
|
|
// Stores indexes of networks that should be kept.
|
|
var networkMap = new Object();
|
|
|
|
// Copy to and update client.networkList from client.networks.
|
|
for (var name in client.networks)
|
|
{
|
|
var net = client.networks[name];
|
|
/* Skip temporary networks, as they're created to wrap standalone
|
|
* servers only.
|
|
*/
|
|
if (net.temporary)
|
|
continue;
|
|
|
|
// Find the network in the networkList, if it exists.
|
|
var listNet = null;
|
|
for (var i = 0; i < client.networkList.length; i++)
|
|
{
|
|
if (client.networkList[i].name == name)
|
|
{
|
|
listNet = client.networkList[i];
|
|
networkMap[i] = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
// Network not in list, so construct a shiny new one.
|
|
if (listNet == null)
|
|
{
|
|
var listNet = { name: name, displayName: name, isupportsKey: "" };
|
|
|
|
// Collect the RPL_ISUPPORTS "network name" if available.
|
|
if (("primServ" in net) && net.primServ &&
|
|
("supports" in net.primServ) && net.primServ.supports &&
|
|
("network" in net.primServ.supports))
|
|
{
|
|
listNet.isupportsKey = net.primServ.supports["network"];
|
|
}
|
|
|
|
client.networkList.push(listNet);
|
|
networkMap[client.networkList.length - 1] = true;
|
|
}
|
|
|
|
// Populate server list (no merging here).
|
|
listNet.servers = new Array();
|
|
for (i = 0; i < net.serverList.length; i++)
|
|
{
|
|
var serv = net.serverList[i];
|
|
|
|
// Find this server in the list...
|
|
var listServ = null;
|
|
for (var j = 0; j < listNet.servers.length; j++)
|
|
{
|
|
if ((serv.hostname == listNet.servers[j].hostname) &&
|
|
(serv.port == listNet.servers[j].port))
|
|
{
|
|
listServ = listNet.servers[j];
|
|
break;
|
|
}
|
|
}
|
|
|
|
// ...and add a new one if it isn't found.
|
|
if (listServ == null)
|
|
{
|
|
listServ = { name: serv.hostname, port: serv.port,
|
|
isSecure: serv.isSecure, password: null };
|
|
listNet.servers.push(listServ);
|
|
}
|
|
|
|
listServ.isSecure = serv.isSecure;
|
|
// Update the saved password (!! FIXME: plaintext password !!).
|
|
listServ.password = serv.password;
|
|
}
|
|
}
|
|
|
|
// Remove any no-longer existing networks.
|
|
var index = 0; // (current pointer into client.networkList)
|
|
var mapIndex = 0; // (original position pointer)
|
|
while (index < client.networkList.length)
|
|
{
|
|
if (mapIndex in networkMap)
|
|
{
|
|
index++;
|
|
mapIndex++;
|
|
continue;
|
|
}
|
|
|
|
var listNet = client.networkList[index];
|
|
// Not seen this network in the client.networks collection.
|
|
if (("isBuiltIn" in listNet) && listNet.isBuiltIn)
|
|
{
|
|
// Network is a built-in. Replace with dummy.
|
|
client.networkList[index] = { name: listNet.name, isDeleted: true };
|
|
index++;
|
|
}
|
|
else
|
|
{
|
|
// Network is not a built-in, just nuke.
|
|
// Note: don't do index++ here because we've removed the item.
|
|
client.networkList.splice(index, 1);
|
|
}
|
|
mapIndex++;
|
|
}
|
|
}
|
|
|
|
function networksSyncFromList()
|
|
{
|
|
var networkMap = new Object();
|
|
|
|
// Copy to and update client.networks from client.networkList.
|
|
for (var i = 0; i < client.networkList.length; i++)
|
|
{
|
|
var listNet = client.networkList[i];
|
|
networkMap[listNet.name] = true;
|
|
|
|
if ("isDeleted" in listNet)
|
|
{
|
|
/* This is a dummy entry that indicates a removed built-in network.
|
|
* Remove the network from client.networks if it exists, and then
|
|
* skip onto the next...
|
|
*/
|
|
if (listNet.name in client.networks)
|
|
client.removeNetwork(listNet.name);
|
|
continue;
|
|
}
|
|
|
|
// Create new network object if necessary.
|
|
var net = null;
|
|
if (!(listNet.name in client.networks))
|
|
client.addNetwork(listNet.name, []);
|
|
|
|
// Get network object and make sure server list is empty.
|
|
net = client.networks[listNet.name];
|
|
net.clearServerList();
|
|
|
|
// Make sure real network knows if it is a built-in one.
|
|
if ("isBuiltIn" in listNet)
|
|
net.isBuiltIn = listNet.isBuiltIn;
|
|
|
|
// Update server list.
|
|
for (var j = 0; j < listNet.servers.length; j++)
|
|
{
|
|
var listServ = listNet.servers[j];
|
|
|
|
// Make sure these exist.
|
|
if (!("isSecure" in listServ))
|
|
listServ.isSecure = false;
|
|
if (!("password" in listServ))
|
|
listServ.password = null;
|
|
|
|
// NOTE: this must match the name given by CIRCServer.
|
|
var servName = listServ.hostname + ":" + listServ.port;
|
|
|
|
var serv = null;
|
|
if (!(servName in net.servers))
|
|
{
|
|
net.addServer(listServ.hostname, listServ.port,
|
|
listServ.isSecure, listServ.password);
|
|
}
|
|
serv = net.servers[servName];
|
|
|
|
serv.isSecure = listServ.isSecure;
|
|
serv.password = listServ.password;
|
|
}
|
|
}
|
|
|
|
// Remove network objects that aren't in networkList.
|
|
for (var name in client.networks)
|
|
{
|
|
// Skip temporary networks, as they don't matter.
|
|
if (client.networks[name].temporary)
|
|
continue;
|
|
if (!(name in networkMap))
|
|
client.removeNetwork(name);
|
|
}
|
|
}
|
|
|
|
function networksSaveList()
|
|
{
|
|
try
|
|
{
|
|
var networksFile = new nsLocalFile(client.prefs["profilePath"]);
|
|
networksFile.append("networks.txt");
|
|
var networksLoader = new TextSerializer(networksFile);
|
|
if (networksLoader.open(">"))
|
|
{
|
|
networksLoader.serialize(client.networkList);
|
|
networksLoader.close();
|
|
}
|
|
}
|
|
catch(ex)
|
|
{
|
|
display("ERROR: " + formatException(ex), MT_ERROR);
|
|
}
|
|
}
|