119 lines
3.5 KiB
JavaScript
119 lines
3.5 KiB
JavaScript
// install.js
|
|
// XpiInstaller
|
|
|
|
var XpiInstaller = {
|
|
// --- Editable items begin ---
|
|
|
|
extFullName: 'Novell CASA', // The name displayed to the user (don't include the version)
|
|
extShortName: 'casa', // The leafname of the JAR file (without the .jar part)
|
|
extVersion: '1.0',
|
|
extAuthor: 'CSL.Manojna',
|
|
extLocaleNames: null, // e.g. ['en-US', 'en-GB']
|
|
extSkinNames: null, // e.g. ['classic', 'modern']
|
|
extPostInstallMessage: 'Extension successfully installed.', // Set to null for no post-install message
|
|
|
|
// --- Editable items end ---
|
|
|
|
profileInstall: true,
|
|
silentInstall: false,
|
|
|
|
install: function()
|
|
{
|
|
var jarName = this.extShortName + '.jar';
|
|
var profileDir = Install.getFolder('Profile', 'chrome');
|
|
|
|
// Parse HTTP arguments
|
|
this.parseArguments();
|
|
|
|
// Check if extension is already installed in profile
|
|
if (File.exists(Install.getFolder(profileDir, jarName)))
|
|
{
|
|
if (!this.silentInstall)
|
|
{
|
|
Install.alert('Updating existing Profile install of ' + this.extFullName + ' to version ' + this.extVersion + '.');
|
|
}
|
|
this.profileInstall = true;
|
|
}
|
|
else if (!this.silentInstall)
|
|
{
|
|
// Ask user for install location, profile or browser dir?
|
|
this.profileInstall = Install.confirm('Install ' + this.extFullName + ' ' + this.extVersion + ' to your Profile directory (OK) or your Browser directory (Cancel)?');
|
|
}
|
|
|
|
// Init install
|
|
var dispName = this.extFullName + ' ' + this.extVersion;
|
|
var regName = '/' + this.extAuthor + '/' + this.extShortName;
|
|
Install.initInstall(dispName, regName, this.extVersion);
|
|
|
|
// Find directory to install into
|
|
var installPath;
|
|
if (this.profileInstall) installPath = profileDir;
|
|
else installPath = Install.getFolder('chrome');
|
|
|
|
// Add JAR file
|
|
Install.addFile(null, 'chrome/' + jarName, installPath, null);
|
|
|
|
// Register chrome
|
|
var jarPath = Install.getFolder(installPath, jarName);
|
|
var installType = this.profileInstall ? Install.PROFILE_CHROME : Install.DELAYED_CHROME;
|
|
|
|
// Register content
|
|
Install.registerChrome(Install.CONTENT | installType, jarPath, 'content/' + this.extShortName + '/');
|
|
|
|
// Register locales
|
|
for (var locale in this.extLocaleNames)
|
|
{
|
|
var regPath = 'locale/' + this.extLocaleNames[locale] + '/' + this.extShortName + '/';
|
|
Install.registerChrome(Install.LOCALE | installType, jarPath, regPath);
|
|
}
|
|
|
|
// Register skins
|
|
for (var skin in this.extSkinNames)
|
|
{
|
|
var regPath = 'skin/' + this.extSkinNames[skin] + '/' + this.extShortName + '/';
|
|
Install.registerChrome(Install.SKIN | installType, jarPath, regPath);
|
|
}
|
|
|
|
// Perform install
|
|
var err = Install.performInstall();
|
|
if (err == Install.SUCCESS || err == Install.REBOOT_NEEDED)
|
|
{
|
|
if (!this.silentInstall && this.extPostInstallMessage)
|
|
{
|
|
Install.alert(this.extPostInstallMessage);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
this.handleError(err);
|
|
return;
|
|
}
|
|
},
|
|
|
|
parseArguments: function()
|
|
{
|
|
// Can't use string handling in install, so use if statement instead
|
|
var args = Install.arguments;
|
|
if (args == 'p=0')
|
|
{
|
|
this.profileInstall = false;
|
|
this.silentInstall = true;
|
|
}
|
|
else if (args == 'p=1')
|
|
{
|
|
this.profileInstall = true;
|
|
this.silentInstall = true;
|
|
}
|
|
},
|
|
|
|
handleError: function(err)
|
|
{
|
|
if (!this.silentInstall)
|
|
{
|
|
Install.alert('Error: Could not install ' + this.extFullName + ' ' + this.extVersion + ' (Error code: ' + err + ')');
|
|
}
|
|
Install.cancelInstall(err);
|
|
}
|
|
};
|
|
|
|
XpiInstaller.install(); |