📄 install.js
字号:
/** * See license.txt */ /****************************************************************************** * Package Constants *****************************************************************************/ const NAME = "forecastfox"; const PKG_NAME = "Forecastfox";const PKG_KEY = "/weather/" + NAME;const PKG_VERSION = "0.9.6";/****************************************************************************** * Chrome Constants *****************************************************************************/const CHROME_SPACE = 400;const CHROME_LOCALES = ['en-US', 'bg-BG', 'ca-AD', 'cs-CZ', 'da-DK', 'de-DE', 'es-ES', 'fi-FI', 'fr-FR', 'hu-HU', 'it-IT', 'ko-KR', 'nb-NO', 'nl-NL', 'pl-PL', 'pt-BR', 'ro-RO', 'ru-RU', 'sk-SK', 'sv-SE', 'tr-TR', 'uk-UA', 'zh-CN'];const CHROME_FOLDER = "chrome";const CHROME_JAR = NAME + ".jar";const CHROME_JARFOLDER = "chrome/" + CHROME_JAR;const CHROME_CONTENT = "content/" + NAME + "/";const CHROME_SKIN = "skin/classic/" + NAME + "/";const CHROME_FLAGS = PROFILE_CHROME | DELAYED_CHROME;/****************************************************************************** * Defaults Constants *****************************************************************************/ const DEFAULTS_SPACE = 50;const DEFAULTS_FOLDER = "defaults";const DEFAULTS_PREFS = "defaults/preferences/" + NAME + ".js"; /****************************************************************************** * XPCOM Constants *****************************************************************************/ const XPCOM_SPACE = 150;const XPCOM_FOLDER = "components/";const XPCOM_FILES = ["nsForecastfox.js", "nsForecastfox.xpt"]; const XPCOM_REG = "defaults/.autoreg"; /****************************************************************************** * Main installation process *****************************************************************************/ var success = performAll();if (success) { Install.performInstall(); alert(PKG_NAME + " " + PKG_VERSION + " has been installed successfully!\nPlease restart to enable the extension."); } else Install.cancelInstall(); /****************************************************************************** * Function to do the install processing. * * @return SUCCESS if install is successful. *****************************************************************************/ function performAll(){ //initialize the install var code = Install.initInstall(PKG_NAME, PKG_KEY, PKG_VERSION); if (!verifyCode(code)) return false; //get the main install folder var folder = Install.getFolder("Profile", "extensions/" + "{0538E3E3-7E9B-4d49-8831-A227C80A7AD3}"); //install the chrome code = performChrome(folder); if (!verifyCode(code)) return false; //install the defaults code = performDefaults(folder); if (!verifyCode(code)) return false; //install the components code = performXPCOM(folder); if (!verifyCode(code)) return false; //install successful return true;} /****************************************************************************** * Function installs the chrome files and registers them. * * @param The main profile folder. * @return SUCCESS if chrome installed. *****************************************************************************/ function performChrome(aFolder){ logComment("Perform Chrome Install: " + aFolder); //get the chrome folder var folder = Install.getFolder(aFolder, CHROME_FOLDER); //verify the disk space var code = verifySpace(folder, DEFAULTS_SPACE); if (!verifyCode(code)) return(code); //add the jar file code = Install.addFile(PKG_KEY, PKG_VERSION, CHROME_JARFOLDER, folder, null); if (!verifyCode(code)) return(code); //register the content url folder = Install.getFolder(folder, CHROME_JAR); code = Install.registerChrome(CONTENT | CHROME_FLAGS, folder, CHROME_CONTENT); if (!verifyCode(code)) return(code); //register the skin url code = Install.registerChrome(SKIN | CHROME_FLAGS, folder, CHROME_SKIN); if (!verifyCode(code)) return(code); //register the locale urls for (var i=0; i<CHROME_LOCALES.length; i++) { var url = "locale/" + CHROME_LOCALES[i] + "/" + NAME + "/"; code = Install.registerChrome(LOCALE | CHROME_FLAGS, folder, url); if (!verifyCode(code)) return(code); } return(SUCCESS);} /****************************************************************************** * Function installs the defaults. * * @param The main profile folder. * @return SUCCESS if defaults installed. *****************************************************************************/ function performDefaults(aFolder){ logComment("Perform Defaults Install: " + aFolder); //get the defaults folder var folder = Install.getFolder(aFolder, DEFAULTS_FOLDER); //verify the disk space var code = verifySpace(folder, DEFAULTS_SPACE); if (!verifyCode(code)) return(code); //install the directory code = Install.addDirectory(PKG_KEY, PKG_VERSION, DEFAULTS_FOLDER, folder, null); if (!verifyCode(code)) return(code); //get the prefs folder folder = Install.getFolder("Program", DEFAULTS_FOLDER); folder = Install.getFolder(folder, "pref"); //verify the disk space code = verifySpace(folder, DEFAULTS_SPACE); if (!verifyCode(code)) return(code); //install the prefs code = Install.addFile(PKG_KEY, PKG_VERSION, DEFAULTS_PREFS, folder, null); if (!verifyCode(code)) return(code); return(SUCCESS);} /****************************************************************************** * Function installs the xpcom components. * * @param The main profile folder. * @return SUCCESS if components installed. *****************************************************************************/ function performXPCOM(aFolder){ logComment("Perform XPCOM Install: " + aFolder); //get the xpcom folder var folder = Install.getFolder("Components"); //verify the disk space var code = verifySpace(folder, XPCOM_SPACE); if (!verifyCode(code)) return(code); //loop through the components for (var i=0; i<XPCOM_FILES.length; i++) { //install the component code = Install.addFile(PKG_KEY, PKG_VERSION, XPCOM_FOLDER + XPCOM_FILES[i], folder, null); if (!verifyCode(code)) return(code); } //hack to make sure we register the component folder = Install.getFolder("Program"); code = Install.addFile(PKG_KEY, PKG_VERSION, XPCOM_REG, folder, null); if (!verifyCode(code)) return(code); return(SUCCESS);}/****************************************************************************** * Function verifies the operation return code * * @param The return code. * @return True if return code is SUCCESS or REBOOT_NEEDED. *****************************************************************************/ function verifyCode(aCode){ //success code if (aCode == SUCCESS) return true; //reboot code if (aCode == REBOOT_NEEDED) return true; //error code return false; }/****************************************************************************** * Function verifies disk space in kilobytes. * * @param The directory to verify. * @param The space required in kilobytes. * @return INSUFFICIENT_DISK_SPACE if space is not available else * SUCCESS is returned *****************************************************************************/ function verifySpace(aFolder, aRequired){ //get the available disk space on the given path var available = File.diskSpaceAvailable(aFolder); //convert the available disk space into kilobytes available = parseInt(available / 1024); // do the verification if(available < aRequired) { logComment("Insufficient disk space: " + aFolder); logComment(" required : " + aRequired + " K"); logComment(" available: " + available + " K"); return(INSUFFICIENT_DISK_SPACE); } return(SUCCESS);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -