home *** CD-ROM | disk | FTP | other *** search
/ PC & Mediji 2001 December / PCM_0112.iso / media / demo / netscape62 / aod.xpi / install.js
Text File  |  2001-10-22  |  8KB  |  294 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 updateWinReg4Ren8dot3() 
  97. {
  98.   var fProgram      = getFolder("Program");
  99.   var fTemp         = getFolder("Temporary");
  100.  
  101.   //Notes:
  102.   // can't use a double backslash before subkey - Windows already puts it in.            
  103.   // subkeys have to exist before values can be put in.
  104.   var subkey;  // the name of the subkey you are poking around in
  105.   var valname; // the name of the value you want to look at
  106.   var value;   // the data in the value you want to look at.
  107.   var winreg = getWinRegistry() ;
  108.  
  109.   if(winreg != null) 
  110.   {
  111.     // Here, we get the current version.
  112.     winreg.setRootKey(winreg.HKEY_CURRENT_USER) ;  // CURRENT_USER
  113.     subkey  = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce" ;
  114.  
  115.     winreg.createKey(subkey,"");
  116.     valname = "ren8dot3";
  117.     value   = fProgram + "ren8dot3.exe " + fTemp + "ren8dot3.ini";
  118.     err     = winreg.setValueString(subkey, valname, value);
  119.   }
  120. }
  121.  
  122. function prepareRen8dot3(listLongFilePaths)
  123. {
  124.   var fTemp                 = getFolder("Temporary");
  125.   var fProgram              = getFolder("Program");
  126.   var fRen8dot3Ini          = getWinProfile(fTemp, "ren8dot3.ini");
  127.   var bIniCreated           = false;
  128.   var fLongFilePath;
  129.   var sShortFilePath;
  130.  
  131.   if(fRen8dot3Ini != null)
  132.   {
  133.     for(i = 0; i < listLongFilePaths.length; i++)
  134.     {
  135.       fLongFilePath   = getFolder(fProgram, listLongFilePaths[i]);
  136.       sShortFilePath  = File.windowsGetShortName(fLongFilePath);
  137.       if(sShortFilePath)
  138.       {
  139.         fRen8dot3Ini.writeString("rename", sShortFilePath, fLongFilePath);
  140.         bIniCreated = true;
  141.       }
  142.     }
  143.  
  144.     if(bIniCreated)
  145.       updateWinReg4Ren8dot3() ;
  146.   }
  147.  
  148.   return(0);
  149. }
  150.  
  151. function logAODShortcut() 
  152. {
  153.   var subkey;
  154.   var valname;
  155.   var szStartMenuPrograms;
  156.   var winreg;
  157.   var fTemp;
  158.   var scAODDesc;
  159.   var scFolderName;
  160.   var szStartupFolder;
  161.   var fFolderPath;
  162.   var fFolderPathStr;
  163.   var is_winnt;
  164.   var szCurrentVersion;
  165.   var restrictedAccess;
  166.   var ikwDefined;
  167.  
  168.   winreg                    = getWinRegistry();
  169.   scAODDesc                 = "Free AOL & Unlimited Internet.url";
  170.   scFolderName              = "Netscape 6";
  171.   if(winreg != null) 
  172.   {
  173.     /* determine if the script is running under NT or not */
  174.     winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
  175.     subkey              = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion";
  176.     valname             = "CurrentVersion";
  177.     szCurrentVersion    = winreg.getValueString(subkey, valname);
  178.     logComment("szCurrentVersion: " + szCurrentVersion);
  179.     if((szCurrentVersion == "") || (szCurrentVersion == null))
  180.     {
  181.       is_winnt = false;
  182.     }
  183.     else
  184.     {
  185.       is_winnt = true;
  186.     }
  187.  
  188.     /* This will check to see if the user has restricted access or not.
  189.      * It checks to see if HKEY_LOCALMACHINE\SOFTWARE is writable.  If
  190.      * it is, then access is not restricted.  This is only used to
  191.      * determine which Desktop, Programs, and Start Menu folders
  192.      * are to used: common or per user
  193.      */
  194.     restrictedAccess = false;
  195.     ikwDefined = typeof(winreg.isKeyWritable);
  196.     logComment("winreg.isKeyWritable(): " + ikwDefined);
  197.     if(ikwDefined == "function")
  198.     {
  199.       winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
  200.       if(!winreg.isKeyWritable("SOFTWARE"))
  201.         restrictedAccess = true;
  202.     }
  203.  
  204.     logComment("is_winnt value: " + is_winnt);
  205.     if(!is_winnt || restrictedAccess)
  206.     {
  207.       winreg.setRootKey(winreg.HKEY_CURRENT_USER);
  208.       subkey              = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
  209.       valname             = "Programs";
  210.       szStartMenuPrograms = winreg.getValueString(subkey, valname);
  211.       valname             = "Start Menu";
  212.     }
  213.     else
  214.     {
  215.       winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
  216.       subkey              = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
  217.       valname             = "Common Programs";
  218.       szStartMenuPrograms = winreg.getValueString(subkey, valname);
  219.     }
  220.  
  221.     winreg.setRootKey(winreg.HKEY_CURRENT_USER);
  222.     fFolderPathStr      = winreg.getValueString(subkey, valname);
  223.     if((fFolderPathStr == "") || (fFolderPathStr == null))
  224.     {
  225.       fTemp       = szStartMenuPrograms + "\\" + scFolderName;
  226.       fFolderPath = getFolder("file:///", fTemp);
  227.     }
  228.     else
  229.     {
  230.       /* convert the path string to a path folder object */
  231.       fFolderPath = getFolder("file:///", fFolderPathStr);
  232.     }
  233.  
  234.     logComment("Installing: " + fFolderPath + scAODDesc);
  235.   }
  236. }
  237.  
  238. // main
  239. var srDest;
  240. var err;
  241. var fAoD;
  242. var fileAolOnDesktop;
  243. var fileAolOnDesktopShortcut;
  244. var rmErr;
  245.  
  246.  
  247. srDest = 449;
  248. err    = initInstall("Aol On Desktop", "/America Online/Aol On Desktop", "6.20.0.2001102218"); 
  249. logComment("initInstall: " + err);
  250.  
  251. fAoD = getFolder("Communicator", "AOL");
  252. logComment("fAoD: " + fAoD);
  253.  
  254. if(verifyDiskSpace(fAoD, srDest))
  255. {
  256.   setPackageFolder(fAoD);
  257.  
  258.  
  259.   err = addDirectory("",
  260.                      "6.20.0.2001102218",
  261.                      "aod",              // dir name in jar to extract 
  262.                      fAoD,               // Where to put this file (Returned from getFolder) 
  263.                      "",                 // subdir name to create relative to pluginsFolder
  264.                      DO_NOT_UNINSTALL);
  265.   logComment("addDirectory() returned: " + err);
  266.  
  267.   // check return value
  268.   if(err==SUCCESS)
  269.   {
  270.     fileAolOnDesktop = getFolder("file:///", fAoD + "AolOnDesktop.exe");
  271.     err2             = File.execute(fileAolOnDesktop, true);
  272.     logComment("File.execute() returned: " + err2);
  273.  
  274.     // remove AolOnDesktop.exe after it has finished running.
  275.     rmErr = File.remove(fileAolOnDesktop);
  276.     logComment("File.remove of " + fileAolOnDesktop + " returned: " + rmErr);
  277.  
  278.     // log AolOnDesktop.exe shortcut so it can be removed at uninstall.
  279.     logAODShortcut();
  280.  
  281.     // we need to ignore the previous errors because we don't want the
  282.     // installation to stop.
  283.     err = performInstall(); 
  284.     logComment("performInstall() returned: " + err);
  285.   }
  286.   else
  287.     cancelInstall(err);
  288. }
  289. else
  290.   cancelInstall(INSUFFICIENT_DISK_SPACE);
  291.  
  292. // end main
  293.  
  294.