home *** CD-ROM | disk | FTP | other *** search
/ Enter 2003: The Beautiful Scenery / enter-parhaat-2003.iso / files / Netscape / nim.xpi / install.js
Encoding:
JavaScript  |  2002-08-23  |  12.5 KB  |  403 lines

  1. // this function verifies disk space in kilobytes
  2. function verifyDiskSpace(dirPath, spaceRequired)
  3. {
  4.   var spaceAvailable;
  5.  
  6.   // Get the available disk space on the given path
  7.   spaceAvailable = fileGetDiskSpaceAvailable(dirPath);
  8.  
  9.   // Convert the available disk space into kilobytes
  10.   spaceAvailable = parseInt(spaceAvailable / 1024);
  11.  
  12.   // do the verification
  13.   if(spaceAvailable < spaceRequired)
  14.   {
  15.     logComment("Insufficient disk space: " + dirPath);
  16.     logComment("  required : " + spaceRequired + " K");
  17.     logComment("  available: " + spaceAvailable + " K");
  18.     return(false);
  19.   }
  20.  
  21.   return(true);
  22. }
  23.  
  24. // this function deletes a file if it exists
  25. function deleteThisFile(dirKey, file)
  26. {
  27.   var fFileToDelete;
  28.  
  29.   fFileToDelete = getFolder(dirKey, file);
  30.   logComment("File to delete: " + fFileToDelete);
  31.   if(File.isFile(fFileToDelete))
  32.   {
  33.     File.remove(fFileToDelete);
  34.     return(true);
  35.   }
  36.   else
  37.     return(false);
  38. }
  39.  
  40. // this function deletes a folder if it exists
  41. function deleteThisFolder(dirKey, folder, recursiveDelete)
  42. {
  43.   var fToDelete;
  44.  
  45.   if(typeof recursiveDelete == "undefined")
  46.     recursiveDelete = true;
  47.  
  48.   fToDelete = getFolder(dirKey, folder);
  49.   logComment("folder to delete: " + fToDelete);
  50.   if(File.isDirectory(fToDelete))
  51.   {
  52.     File.dirRemove(fToDelete, recursiveDelete);
  53.     return(true);
  54.   }
  55.   else
  56.     return(false);
  57. }
  58.  
  59. // OS type detection
  60. // which platform?
  61. function getPlatform()
  62. {
  63.   var platformStr;
  64.   var platformNode;
  65.  
  66.   if('platform' in Install)
  67.   {
  68.     platformStr = new String(Install.platform);
  69.  
  70.     if (!platformStr.search(/^Macintosh/))
  71.       platformNode = 'mac';
  72.     else if (!platformStr.search(/^Win/))
  73.       platformNode = 'win';
  74.     else
  75.       platformNode = 'unix';
  76.   }
  77.   else
  78.   {
  79.     var fOSMac  = getFolder("Mac System");
  80.     var fOSWin  = getFolder("Win System");
  81.  
  82.     logComment("fOSMac: "  + fOSMac);
  83.     logComment("fOSWin: "  + fOSWin);
  84.  
  85.     if(fOSMac != null)
  86.       platformNode = 'mac';
  87.     else if(fOSWin != null)
  88.       platformNode = 'win';
  89.     else
  90.       platformNode = 'unix';
  91.   }
  92.  
  93.   return platformNode;
  94. }
  95.  
  96. function IsRestrictedAccess()
  97. {
  98.   /* This will check to see if the user has restricted access or not.
  99.    * It checks to see if HKEY_LOCALMACHINE\SOFTWARE is writable.  If
  100.    * it is, then access is not restricted.  This is only used to
  101.    * determine which Desktop, Programs, and Start Menu folders
  102.    * are to used: common or per user
  103.    *
  104.    * Requirement: The global variable "gWinReg" is assumed to be set already and
  105.    *              and to be pointing to the Windows Registry
  106.    */
  107.  
  108.   var ikwDefined;
  109.  
  110.   ikwDefined = typeof(gWinReg.isKeyWritable);
  111.   logComment("gWinReg.isKeyWritable(): " + ikwDefined);
  112.   if(ikwDefined == "function")
  113.   {
  114.     gWinReg.setRootKey(gWinReg.HKEY_LOCAL_MACHINE);
  115.     if(!gWinReg.isKeyWritable("SOFTWARE"))
  116.       return true;
  117.   }
  118.  
  119.   return false;
  120. }
  121.  
  122. function IsWinnt()
  123. {
  124.   /* Determines if the script is running under NT or not.
  125.    *
  126.    * Requirement: The global variable "gWinReg" is assumed to be set already and
  127.    *              and to be pointing to the Windows Registry
  128.    */
  129.   var subkey;
  130.   var valname;
  131.   var szCurrentVersion;
  132.  
  133.   gWinReg.setRootKey(gWinReg.HKEY_LOCAL_MACHINE);
  134.   subkey              = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion";
  135.   valname             = "CurrentVersion";
  136.   szCurrentVersion    = gWinReg.getValueString(subkey, valname);
  137.   logComment("szCurrentVersion: " + szCurrentVersion);
  138.   if((szCurrentVersion == "") || (szCurrentVersion == null))
  139.   {
  140.     return false;
  141.   }
  142.   else
  143.   {
  144.     return true;
  145.   }
  146. }
  147.  
  148. function createShortcuts() 
  149. {
  150.   var subkey;
  151.   var valname;
  152.   var szStartMenuPrograms;
  153.   var szFolderDesktop;
  154.   var szFolderSendTo;
  155.   var szFolderAppData;
  156.   var fWindows;
  157.   var fTemp;
  158.   var fProgram;
  159.   var fDefShortcuts;
  160.   var fileExe;
  161.   var fileNimIcon;
  162.   var scNimDesc;
  163.   var scNimParam;
  164.   var scFolderName;
  165.   var fFolderDesktop;
  166.   var fFolderPath;
  167.   var fFolderPathStr;
  168.   var szCurrentVersion;
  169.   var bTurboSet;
  170.  
  171.   fWindows             = getFolder("Windows");
  172.   fProgram             = getFolder("Program");
  173.   fDefShortcuts        = getFolder("Program","defaults/shortcuts");
  174.   fTemp                = fProgram + "Netscp.exe";
  175.   fileExe              = getFolder("Program", "Netscp.exe");
  176.   fileNimIcon          = getFolder("Chrome", "icons/default/AimApplication.ico");
  177.   scNimDesc            = "Instant Messenger";
  178.   scNimParam              = "-aim";
  179.   scFolderName         = "Netscape 7.0";
  180.   if(gWinReg != null) 
  181.   {
  182.  
  183.     if(!gIsWinnt || gRestrictedAccess)
  184.     {
  185.       gWinReg.setRootKey(gWinReg.HKEY_CURRENT_USER);
  186.       subkey              = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
  187.       valname             = "Programs";
  188.       szStartMenuPrograms = gWinReg.getValueString(subkey, valname);
  189.       valname             = "Desktop";
  190.       szFolderDesktop     = gWinReg.getValueString(subkey, valname);
  191.     }
  192.     else
  193.     {
  194.       gWinReg.setRootKey(gWinReg.HKEY_LOCAL_MACHINE);
  195.       subkey              = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
  196.       valname             = "Common Programs";
  197.       szStartMenuPrograms = gWinReg.getValueString(subkey, valname);
  198.       valname             = "Common Desktop";
  199.       szFolderDesktop     = gWinReg.getValueString(subkey, valname);
  200.     }
  201.  
  202.     gWinReg.setRootKey(gWinReg.HKEY_CURRENT_USER);
  203.     subkey              = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
  204.     valname             = "SendTo";
  205.     szFolderSendTo      = gWinReg.getValueString(subkey, valname);
  206.  
  207.     subkey              = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
  208.     valname             = "AppData";
  209.     szFolderAppData     = gWinReg.getValueString(subkey, valname);
  210.  
  211.     subkey              = "SOFTWARE\\Netscape\\Netscape\\7.0 (en)\\Main";
  212.     valname             = "Program Folder Path";
  213.     fFolderPathStr      = gWinReg.getValueString(subkey, valname);
  214.     if((fFolderPathStr == "") || (fFolderPathStr == null))
  215.     {
  216.       fTemp       = szStartMenuPrograms + "\\" + scFolderName;
  217.       fFolderPath = getFolder("file:///", fTemp);
  218.     }
  219.     else
  220.     {
  221.       /* convert the path string to a path folder object */
  222.       fFolderPath = getFolder("file:///", fFolderPathStr);
  223.     }
  224.     /* convert the path string to a path folder object */
  225.     fFolderDesktop = getFolder("file:///", szFolderDesktop);
  226.  
  227.     logComment("Folder StartMenuPrograms: " + szStartMenuPrograms);
  228.     logComment("Folder FolderDesktop    : " + szFolderDesktop);
  229.     logComment("Folder FolderSendTo     : " + szFolderSendTo);
  230.     logComment("fileExe                 : " + fileExe);
  231.     logComment("fFolderPath             : " + fFolderPath);
  232.     logComment("fProgram                : " + fProgram);
  233.  
  234.     /* explicitly create the fFolderPath even though the windowsShortcut function creates the folder.
  235.      * This is so that the folder creation gets logged for uninstall to remove it. */
  236.     if(!File.exists(fFolderPath))
  237.       File.dirCreate(fFolderPath);
  238.  
  239.     if(!File.exists(fDefShortcuts))
  240.       File.dirCreate(fDefShortcuts);
  241.  
  242.     /* create the shortcuts */
  243.     File.windowsShortcut(fileExe, fFolderDesktop, scNimDesc, fProgram, scNimParam, fileNimIcon, 0);
  244.     File.windowsShortcut(fileExe, fDefShortcuts,  scNimDesc, fProgram, scNimParam, fileNimIcon, 0);
  245.     File.windowsShortcut(fileExe, fFolderPath,    scNimDesc, fProgram, scNimParam, fileNimIcon, 0);
  246.  
  247.     // Register Aim to quick launch
  248.     gWinReg.setRootKey(gWinReg.HKEY_CURRENT_USER);
  249.     subkey = "Software\\Microsoft\\Windows\\CurrentVersion\\Run";
  250.  
  251.     if( (!gWinReg.valueExists(subkey, "Mirabilis ICQ")) && (!gWinReg.valueExists(subkey, "AIM")) )
  252.     {
  253.        /* log this so the uninstaller will undo it */
  254.        logComment( "store registry value string: HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run [Mozilla Quick Launch]");
  255.  
  256.        valname = "Mozilla Quick Launch";
  257.  
  258.        //Is turbo set already?
  259.        var szSubKeyVal = gWinReg.getValueString(subkey, valname);
  260.        var value = new String(szSubKeyVal);
  261.        index = value.indexOf("-turbo");
  262.        if(index == -1)
  263.           bTurboSet = false;
  264.        else
  265.           bTurboSet = true;
  266.  
  267.  
  268.        fTemp = fileExe;
  269.        fileExe = getFolder("file:///", fTemp);
  270.        newKey = '"' + fileExe + '"';
  271.        if(bTurboSet)
  272.           newKey = newKey + ' -turbo';
  273.        newKey = newKey + ' -aim'
  274.        gWinReg.createKey(subkey,"");
  275.        gWinReg.setValueString(subkey, valname, newKey);
  276.     }
  277.     // Register as a windows XP messenger
  278.     if( gIsWinnt ) // find a way to see if it is only WINXP
  279.     {
  280.        gWinReg.setRootKey(gWinReg.HKEY_LOCAL_MACHINE);
  281.  
  282.        gWinReg.createKey("Software\\Clients\\IM\\Netscp.exe","");
  283.  
  284.        subkey = "Software\\Clients\\IM\\Netscp.exe";
  285.        valname = "";
  286.        data = "AOL Instant Messenger (Netscape 7.0)";
  287.        gWinReg.setValueString(subkey, valname, data);
  288.  
  289.        subkey = "Software\\Clients\\IM\\Netscp.exe\\DefaultIcon";
  290.        gWinReg.createKey(subkey,"");
  291.        valname = "";
  292.        data = fProgram + "chrome\\icons\\default\\AimApp.ico,0"
  293.        gWinReg.setValueString(subkey, valname, data);
  294.  
  295.        gWinReg.createKey("Software\\Clients\\IM\\Netscp.exe\\InstallInfo","");
  296.  
  297.        subkey = "Software\\Clients\\IM\\Netscp.exe\\InstallInfo";
  298.        valname = "HideIconsCommand";
  299.        data = "\"" + fProgram + "uninstall\\NSUninst.exe\" /ms /ua \"7.0 (en)\" /hs aim";
  300.        gWinReg.setValueString(subkey, valname, data);
  301.  
  302.        subkey = "Software\\Clients\\IM\\Netscp.exe\\InstallInfo";
  303.        valname = "IconsVisible";
  304.        gWinReg.setValueNumber(subkey, valname, 1);
  305.  
  306.        subkey = "Software\\Clients\\IM\\Netscp.exe\\InstallInfo";
  307.        valname = "ReinstallCommand";
  308.        data = "\"" + fProgram + "uninstall\\NSUninst.exe\" /ms /ua \"7.0 (en)\" /sd IM";
  309.        gWinReg.setValueString(subkey, valname, data);
  310.  
  311.        subkey = "Software\\Clients\\IM\\Netscp.exe\\InstallInfo";
  312.        valname = "ShowIconsCommand";
  313.        data = "\"" + fProgram + "uninstall\\NSUninst.exe\" /ms /ua \"7.0 (en)\" /ss aim";
  314.        gWinReg.setValueString(subkey, valname, data);
  315.     }
  316.   }
  317.   else
  318.   {
  319.     logComment("gWinReg is null");
  320.   }
  321. }
  322.  
  323. function upgradeCleanup()
  324. {
  325.   // Obsolete files from previous Netscape installations that
  326.   // need to be cleaned up.
  327.   deleteThisFile("Program",    "Cool/CoolUtils.dll");
  328. }
  329.  
  330. // main
  331. var srDest;
  332. var err;
  333. var communicatorFolder;
  334. var gWinReg;
  335. var gIsWinnt;
  336. var gRestrictedAccess;
  337.  
  338.  
  339. srDest = 1761;
  340. err    = initInstall("Netscape Instant Messenger", "Netscape/Instant Messenger", "7.0.0.2002082310"); 
  341. logComment("initInstall: " + err);
  342.  
  343. communicatorFolder = getFolder("Program");
  344. logComment("communicatorFolder: " + communicatorFolder);
  345.  
  346. if(verifyDiskSpace(communicatorFolder, srDest))
  347. {
  348.   setPackageFolder(communicatorFolder);
  349.  
  350.   target = getFolder("Program", "Xpcs Registry.dat");
  351.   if (File.exists(target) > 0)
  352.   {
  353.       var rmErr = File.remove(target);
  354.       logComment("File.remove of " + target + " returned: " + rmErr);
  355.   }
  356.  
  357.   upgradeCleanup();
  358.   err = addDirectory("",
  359.                      "7.0.0.2002082310",
  360.                      "bin",              // dir name in jar to extract 
  361.                      communicatorFolder, // Where to put this file (Returned from getFolder) 
  362.                      "",                 // subdir name to create relative to communicatorFolder
  363.                      true );             // Force Flag 
  364.   logComment("addDirectory() returned: " + err);
  365.  
  366.   gWinReg = getWinRegistry();
  367.   if(gWinReg && (err == SUCCESS)) 
  368.   {
  369.     // The functions within this if loop all depend upon the global variables
  370.     //    gWinReg, gRestrictedaccess and gIsWinnt being set correctly.
  371.  
  372.     gRestrictedAccess = IsRestrictedAccess();
  373.     logComment("gRestrictedAccess value: " + gRestrictedAccess);
  374.     gIsWinnt = IsWinnt();
  375.     logComment("gIsWinnt value: " + gIsWinnt);
  376.  
  377.     createShortcuts();
  378.  
  379.     resetError();
  380.   }
  381.   else
  382.   {
  383.     logComment("gWinReg is null");
  384.   }
  385.  
  386.   registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","aim.jar"),"content/aim/");
  387.   registerChrome(CONTENT | DELAYED_CHROME, getFolder("Chrome","aim.jar"),"content/aim-region/");
  388.  
  389.   // check return value
  390.   err = getLastError();
  391.   if(!err)
  392.   {
  393.     err = performInstall(); 
  394.     logComment("performInstall() returned: " + err);
  395.   }
  396.   else
  397.     cancelInstall(err);
  398. }
  399. else
  400.   cancelInstall(INSUFFICIENT_DISK_SPACE);
  401.  
  402. // end main
  403.