Changeset 857


Ignore:
Timestamp:
May 3, 2013, 11:52:50 PM (12 years ago)
Author:
alloc
Message:

AEI2.10:

  • Switched caching from Raw Depot cache to AEI packages cache (more compact, faster startup)
Location:
java/installer2/src/net/oni2/aeinstaller
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • java/installer2/src/net/oni2/aeinstaller/AEInstaller.properties

    r849 r857  
    11appname=AE Installer 2
    2 appversion=.08
     2appversion=.10
  • java/installer2/src/net/oni2/aeinstaller/AEInstaller2.java

    r852 r857  
    146146                        ProxySettings.deserializeFromFile(Paths.getProxySettingsFilename());
    147147                }
    148 
     148               
    149149                initBundles();
    150150
  • java/installer2/src/net/oni2/aeinstaller/backend/Paths.java

    r852 r857  
    1515        public static File getDepotCacheFilename() {
    1616                return new File(getPrefsPath(), "ModDepotCache.xml");
     17        }
     18
     19        /**
     20         * @return Package manager cache filename
     21         */
     22        public static File getPacManCacheFilename() {
     23                return new File(getPrefsPath(), "PacManCache.xml");
    1724        }
    1825
  • java/installer2/src/net/oni2/aeinstaller/backend/packages/Package.java

    r804 r857  
    3737        private String submitter = "";
    3838        private String creator = "";
    39         private EBSLInstallType bslInstallType = EBSLInstallType.NORMAL;
     39        private transient EBSLInstallType bslInstallType = EBSLInstallType.NORMAL;
    4040        private String description = "";
    41         private double aeVersion = 0;
     41        private transient double aeVersion = 0;
    4242        private int zipSize = 0;
    43         private NodeMod node = null;
    44         private net.oni2.moddepot.model.File file = null;
    45 
    46         private File exeFile = null;
    47         private EExeType exeType = EExeType.OSBINARY;
    48         private File iconFile = null;
    49         private String workingDir = "Base";
    50 
    51         private HashSet<Integer> incompatibilities = new HashSet<Integer>();
    52         private HashSet<Integer> dependencies = new HashSet<Integer>();
    53         private HashSet<Integer> unlockLevel = new HashSet<Integer>();
    54 
    55         private long localTimestamp = 0;
     43
     44        private URI nodeUrl = null;
     45        private String fileUrl = null;
     46
     47        private long createdMillis = -1;
     48        private long updatedMillis = -1;
     49
     50        private transient File exeFile = null;
     51        private transient EExeType exeType = EExeType.OSBINARY;
     52        private transient File iconFile = null;
     53        private transient String workingDir = "Base";
     54
     55        private transient HashSet<Integer> incompatibilities = new HashSet<Integer>();
     56        private transient HashSet<Integer> dependencies = new HashSet<Integer>();
     57        private transient HashSet<Integer> unlockLevel = new HashSet<Integer>();
     58
     59        private transient long localTimestamp = 0;
    5660
    5761        /**
     
    6266         */
    6367        public Package(NodeMod nm) {
    64                 node = nm;
    6568                name = nm.getTitle();
    6669                packageNumber = nm.getPackageNumber();
     
    7376                                t.addEntry(this);
    7477                }
     78
     79                createdMillis = nm.getCreated();
     80                updatedMillis = nm.getUploads().firstElement().getTimestamp();
     81
     82                try {
     83                        nodeUrl = new URI(nm.getPath());
     84                } catch (URISyntaxException e) {
     85                        e.printStackTrace();
     86                }
     87
     88                fileUrl = nm.getUploads().firstElement().getUri_full();
     89                zipSize = nm.getUploads().firstElement().getFilesize();
     90
    7591                version = nm.getVersion();
    7692                submitter = nm.getName();
     
    8197                                description = "<p>" + description + "</p>";
    8298                }
    83                 file = nm.getUploads().firstElement();
    84                 zipSize = file.getFilesize();
    8599
    86100                if (isLocalAvailable())
     
    115129                        aeVersion = mi.getAeVersion();
    116130                        bslInstallType = mi.getBslInstallType();
    117                         if (node == null) {
     131                        if (isLocalOnly()) {
    118132                                name = mi.getName();
    119133                                creator = mi.getCreator();
     
    132146                } else {
    133147                        clearLocalOnlyInfo();
    134                         System.err.println("No config found for mod folder: "
    135                                         + getLocalPath().getPath());
     148//                      System.err.println("No config found for mod folder: "
     149//                                      + getLocalPath().getPath());
    136150                }
    137151                if (aeicfg.exists()) {
     
    159173                        }
    160174                }
    161                 if (node == null)
     175                if (isLocalOnly())
    162176                        tool = plain.exists();
    163177        }
     
    212226         */
    213227        public boolean isNewerAvailable() {
    214                 if (file != null)
    215                         return file.getTimestamp() > localTimestamp;
     228                if (!isLocalOnly())
     229                        return updatedMillis > localTimestamp;
    216230                else
    217231                        return false;
     
    226240
    227241        /**
     242         * @return If this mod is only locally available (not on Depot)
     243         */
     244        public boolean isLocalOnly() {
     245                return nodeUrl == null;
     246        }
     247
     248        /**
    228249         * @return Is mod installed?
    229250         */
    230251        public boolean isInstalled() {
    231252                if (tool)
    232                         return ToolInstallationList.getInstance().isInstalled(packageNumber);
     253                        return ToolInstallationList.getInstance()
     254                                        .isInstalled(packageNumber);
    233255                else
    234256                        return PackageManager.getInstance().isModInstalled(this);
     
    320342
    321343        /**
     344         * @return the createdMillis
     345         */
     346        public long getCreatedMillis() {
     347                return createdMillis;
     348        }
     349
     350        /**
     351         * @return the updatedMillis
     352         */
     353        public long getUpdatedMillis() {
     354                return updatedMillis;
     355        }
     356
     357        /**
     358         * @return the fileUrl
     359         */
     360        public String getFileUrl() {
     361                return fileUrl;
     362        }
     363
     364        /**
    322365         * @return Is a package that is always installed?
    323366         */
     
    327370
    328371        /**
    329          * @return Get the depot file entry
    330          */
    331         public net.oni2.moddepot.model.File getFile() {
    332                 return file;
    333         }
    334 
    335         /**
    336          * @return Get the depot Node
    337          */
    338         public NodeMod getNode() {
    339                 return node;
    340         }
    341 
    342         /**
    343372         * @return Depot page URI
    344373         */
    345374        public URI getUrl() {
    346                 if (node == null)
    347                         return null;
    348                 if (node.getPath() == null)
    349                         return null;
    350                 URI res = null;
    351                 try {
    352                         res = new URI(node.getPath());
    353                 } catch (URISyntaxException e) {
    354                         e.printStackTrace();
    355                 }
    356                 return res;
     375                return nodeUrl;
    357376        }
    358377
  • java/installer2/src/net/oni2/aeinstaller/backend/packages/PackageManager.java

    r809 r857  
    2121
    2222import com.thoughtworks.xstream.XStream;
     23import com.thoughtworks.xstream.XStreamException;
    2324import com.thoughtworks.xstream.io.xml.StaxDriver;
    2425
     
    3233        private HashMap<Integer, Package> mods = new HashMap<Integer, Package>();
    3334        private HashMap<Integer, Package> tools = new HashMap<Integer, Package>();
     35        private Type localType = null;
    3436
    3537        /**
     
    8890                mods = new HashMap<Integer, Package>();
    8991
    90                 Type localType = new Type("-Local-");
     92                localType = new Type("-Local-");
    9193                types.put("-Local-", localType);
    9294
    9395                for (TaxonomyTerm tt : DepotManager.getInstance().getTypes()) {
    9496                        types.put(tt.getName(), new Type(tt.getName()));
    95                 }
    96 
    97                 HashMap<Integer, Package> modFolders = new HashMap<Integer, Package>();
    98                 if (Paths.getModsPath().exists()) {
    99                         for (File f : Paths.getModsPath().listFiles(new FileFilter() {
    100                                 @Override
    101                                 public boolean accept(File pathname) {
    102                                         return pathname.isDirectory();
    103                                 }
    104                         })) {
    105                                 Package m = new Package(f);
    106                                 modFolders.put(m.getPackageNumber(), m);
    107                         }
    10897                }
    10998
     
    115104                                else
    116105                                        mods.put(m.getPackageNumber(), m);
    117                                 modFolders.remove(m.getPackageNumber());
    118                         }
    119                 }
    120 
    121                 for (Package m : modFolders.values()) {
    122                         if (!m.isCorePackage()) {
    123                                 localType.addEntry(m);
    124                                 m.getTypes().add(localType);
    125                         }
    126                         if (m.isTool())
    127                                 tools.put(m.getPackageNumber(), m);
    128                         else
    129                                 mods.put(m.getPackageNumber(), m);
    130                 }
     106                        }
     107                }
     108
     109                updateLocalData();
    131110        }
    132111
     
    345324         */
    346325        boolean isModInstalled(Package m) {
    347                 return ModInstallationList.getInstance().isInstalled(m.getPackageNumber());
     326                return ModInstallationList.getInstance().isInstalled(
     327                                m.getPackageNumber());
     328        }
     329
     330        private void updateLocalData() {
     331                if (Paths.getModsPath().exists()) {
     332                        for (File f : Paths.getModsPath().listFiles(new FileFilter() {
     333                                @Override
     334                                public boolean accept(File pathname) {
     335                                        return pathname.isDirectory();
     336                                }
     337                        })) {
     338                                Package m = new Package(f);
     339                                HashMap<Integer, Package> map = null;
     340                                if (m.isTool())
     341                                        map = tools;
     342                                else
     343                                        map = mods;
     344
     345                                if (!map.containsKey(m.getPackageNumber())) {
     346                                        map.put(m.getPackageNumber(), m);
     347                                        if (!m.isCorePackage()) {
     348                                                localType.addEntry(m);
     349                                                m.getTypes().add(localType);
     350                                        }
     351                                }
     352                        }
     353                }
     354
     355                for (Package p : mods.values()) {
     356                        p.updateLocalData();
     357                }
     358                for (Package p : tools.values()) {
     359                        p.updateLocalData();
     360                }
     361        }
     362
     363        private static XStream getXStream() {
     364                XStream xs = new XStream(new StaxDriver());
     365                xs.alias("Packages", PackageManager.class);
     366                xs.alias("Type", Type.class);
     367                xs.alias("Package", Package.class);
     368                return xs;
     369        }
     370
     371        /**
     372         * Save Depot cache instance to file
     373         *
     374         * @param cacheFile
     375         *            File to save to
     376         */
     377        public void saveToCacheFile(java.io.File cacheFile) {
     378                try {
     379                        FileOutputStream fos = new FileOutputStream(cacheFile);
     380                        XStream xs = getXStream();
     381                        xs.toXML(this, fos);
     382                        fos.close();
     383                } catch (FileNotFoundException e) {
     384                        e.printStackTrace();
     385                } catch (IOException e) {
     386                        e.printStackTrace();
     387                }
     388        }
     389
     390        /**
     391         * Load cache from file
     392         *
     393         * @param cacheFile
     394         *            File to load
     395         */
     396        public static void loadFromCacheFile(java.io.File cacheFile) {
     397                try {
     398                        FileInputStream fis = new FileInputStream(cacheFile);
     399                        XStream xs = getXStream();
     400                        Object obj = xs.fromXML(fis);
     401                        fis.close();
     402                        if (obj instanceof PackageManager) {
     403                                instance = (PackageManager) obj;
     404                                instance.updateLocalData();
     405                        }
     406                } catch (XStreamException e) {
     407                } catch (FileNotFoundException e) {
     408                } catch (IOException e) {
     409                }
    348410        }
    349411}
  • java/installer2/src/net/oni2/aeinstaller/backend/packages/download/ModDownload.java

    r741 r857  
    7474                targetFolder = mod.getLocalPath();
    7575                try {
    76                         downloader = new FileDownloader(mod.getFile().getUri_full(),
    77                                         zipFile);
     76                        downloader = new FileDownloader(mod.getFileUrl(), zipFile);
    7877                        downloader.addListener(this);
    7978                        unpacker = new Unpacker(zipFile, targetFolder, this);
     
    130129                try {
    131130                        log = new PrintWriter(logFile);
    132                         log.println("Timestamp -> " + mod.getFile().getTimestamp());
     131                        log.println("Timestamp -> " + mod.getUpdatedMillis());
    133132                } catch (FileNotFoundException e) {
    134133                        e.printStackTrace();
  • java/installer2/src/net/oni2/aeinstaller/gui/MainWin.java

    r852 r857  
    216216        @DoInBackground(progressMessage = "updateDepot.title", cancelable = false, indeterminateProgress = false)
    217217        private void execDepotUpdate(final BackgroundEvent evt) {
    218                 DepotManager.loadFromCacheFile(Paths.getDepotCacheFilename());
    219 
     218                boolean hasUpdated = false;
    220219                if (!RuntimeOptions.isOfflineMode()
    221220                                && !RuntimeOptions.isNoCacheUpdateMode()) {
    222221                        long start = new Date().getTime();
    223222
    224                         if (DepotManager.getInstance().updateInformation())
     223                        if ((hasUpdated = DepotManager.getInstance().updateInformation())) {
    225224                                DepotManager.getInstance().saveToCacheFile(
    226225                                                Paths.getDepotCacheFilename());
     226                        }
    227227
    228228                        System.out.println("Took: " + (new Date().getTime() - start)
     
    230230                }
    231231
    232                 PackageManager.getInstance().init();
     232                if (hasUpdated || !Paths.getPacManCacheFilename().exists()) {
     233                        PackageManager.getInstance().init();
     234                        PackageManager.getInstance().saveToCacheFile(
     235                                        Paths.getPacManCacheFilename());
     236                } else
     237                        PackageManager.loadFromCacheFile(Paths.getPacManCacheFilename());
    233238                tblMods.reloadData();
    234239                initModTypeBox();
  • java/installer2/src/net/oni2/aeinstaller/gui/modtable/ModTable.java

    r840 r857  
    338338                                        }
    339339
    340                                         if (mod.getFile() != null) {
     340                                        if (!mod.isLocalOnly()) {
    341341                                                // Download package
    342342                                                JMenuItem downloadPackage = new JMenuItem(
     
    370370                                                        @Override
    371371                                                        public void actionPerformed(ActionEvent arg0) {
    372                                                                 if (mod.getNode() == null) {
     372                                                                if (mod.isLocalOnly()) {
    373373                                                                        JOptionPane.showMessageDialog(
    374374                                                                                        null,
  • java/installer2/src/net/oni2/aeinstaller/gui/modtable/ModTableModel.java

    r840 r857  
    6868                                return res;
    6969                        case 5:
    70                                 if (mod.getNode() != null)
    71                                         return sdf.format(new Date(
    72                                                         mod.getNode().getCreated() * 1000));
     70                                if (mod.getCreatedMillis() > 0)
     71                                        return sdf.format(new Date(mod.getCreatedMillis() * 1000));
    7372                                else
    7473                                        return null;
    7574                        case 6:
    76                                 if (mod.getFile() != null)
    77                                         return sdf.format(new Date(
    78                                                         mod.getFile().getTimestamp() * 1000));
     75                                if (mod.getUpdatedMillis() > 0)
     76                                        return sdf.format(new Date(mod.getUpdatedMillis() * 1000));
    7977                                else
    8078                                        return null;
Note: See TracChangeset for help on using the changeset viewer.