Revision control

Copy as Markdown

Other Tools

/* 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/. */
// local static variables
var _lastIndex = 0; // the first index will be one
var _traits = {};
var traitsBranch = Services.prefs.getBranch("mailnews.traits.");
function _registerTrait(aId, aIndex) {
var trait = {};
trait.enabled = false;
trait.name = "";
trait.antiId = "";
trait.index = aIndex;
_traits[aId] = trait;
}
export function MsgTraitService() {}
MsgTraitService.prototype = {
// Component setup
QueryInterface: ChromeUtils.generateQI(["nsIMsgTraitService"]),
// nsIMsgTraitService implementation
get lastIndex() {
return _lastIndex;
},
registerTrait(aId) {
if (_traits[aId]) {
// Meaning already registered.
return 0;
}
_registerTrait(aId, ++_lastIndex);
traitsBranch.setBoolPref("enabled." + _lastIndex, false);
traitsBranch.setCharPref("id." + _lastIndex, aId);
return _lastIndex;
},
unRegisterTrait(aId) {
if (_traits[aId]) {
var index = _traits[aId].index;
_traits[aId] = null;
traitsBranch.clearUserPref("id." + index);
traitsBranch.clearUserPref("enabled." + index);
traitsBranch.clearUserPref("antiId." + index);
traitsBranch.clearUserPref("name." + index);
}
},
isRegistered(aId) {
return !!_traits[aId];
},
setName(aId, aName) {
traitsBranch.setCharPref("name." + _traits[aId].index, aName);
_traits[aId].name = aName;
},
getName(aId) {
return _traits[aId].name;
},
getIndex(aId) {
return _traits[aId].index;
},
getId(aIndex) {
for (const id in _traits) {
if (_traits[id].index == aIndex) {
return id;
}
}
return null;
},
setEnabled(aId, aEnabled) {
traitsBranch.setBoolPref("enabled." + _traits[aId].index, aEnabled);
_traits[aId].enabled = aEnabled;
},
getEnabled(aId) {
return _traits[aId].enabled;
},
setAntiId(aId, aAntiId) {
traitsBranch.setCharPref("antiId." + _traits[aId].index, aAntiId);
_traits[aId].antiId = aAntiId;
},
getAntiId(aId) {
return _traits[aId].antiId;
},
getEnabledProIndices() {
const proIndices = [];
for (const id in _traits) {
if (_traits[id].enabled) {
proIndices.push(_traits[id].index);
}
}
return proIndices;
},
getEnabledAntiIndices() {
const antiIndices = [];
for (const id in _traits) {
if (_traits[id].enabled) {
antiIndices.push(_traits[_traits[id].antiId].index);
}
}
return antiIndices;
},
addAlias(aTraitIndex, aTraitAliasIndex) {
const aliasesString = traitsBranch.getCharPref(
"aliases." + aTraitIndex,
""
);
let aliases;
if (aliasesString.length) {
aliases = aliasesString.split(",");
} else {
aliases = [];
}
if (!aliases.includes(aTraitAliasIndex.toString())) {
aliases.push(aTraitAliasIndex);
traitsBranch.setCharPref("aliases." + aTraitIndex, aliases.join());
}
},
removeAlias(aTraitIndex, aTraitAliasIndex) {
const aliasesString = traitsBranch.getCharPref(
"aliases." + aTraitIndex,
""
);
let aliases;
if (aliasesString.length) {
aliases = aliasesString.split(",");
} else {
aliases = [];
}
const location = aliases.indexOf(aTraitAliasIndex.toString());
if (location != -1) {
aliases.splice(location, 1);
traitsBranch.setCharPref("aliases." + aTraitIndex, aliases.join());
}
},
getAliases(aTraitIndex) {
const aliasesString = traitsBranch.getCharPref(
"aliases." + aTraitIndex,
""
);
let aliases;
if (aliasesString.length) {
aliases = aliasesString.split(",");
} else {
aliases = [];
}
return aliases;
},
};
// initialization
_init();
function _init() {
// get existing traits
var idBranch = Services.prefs.getBranch("mailnews.traits.id.");
var nameBranch = Services.prefs.getBranch("mailnews.traits.name.");
var enabledBranch = Services.prefs.getBranch("mailnews.traits.enabled.");
var antiIdBranch = Services.prefs.getBranch("mailnews.traits.antiId.");
_lastIndex = Services.prefs
.getBranch("mailnews.traits.")
.getIntPref("lastIndex");
var ids = idBranch.getChildList("");
for (let i = 0; i < ids.length; i++) {
var id = idBranch.getCharPref(ids[i]);
var index = parseInt(ids[i]);
_registerTrait(id, index, false);
if (nameBranch.getPrefType(ids[i]) == Services.prefs.PREF_STRING) {
_traits[id].name = nameBranch.getCharPref(ids[i]);
}
if (enabledBranch.getPrefType(ids[i]) == Services.prefs.PREF_BOOL) {
_traits[id].enabled = enabledBranch.getBoolPref(ids[i]);
}
if (antiIdBranch.getPrefType(ids[i]) == Services.prefs.PREF_STRING) {
_traits[id].antiId = antiIdBranch.getCharPref(ids[i]);
}
if (_lastIndex < index) {
_lastIndex = index;
}
}
// for (traitId in _traits)
// dump("\nindex of " + traitId + " is " + _traits[traitId].index);
// dump("\n");
}