Ignore:
Timestamp:
Apr 12, 2013, 7:37:24 PM (12 years ago)
Author:
alloc
Message:

AEI2.03:

Location:
java/installer2/src/net/oni2/aeinstaller/backend
Files:
1 added
2 edited

Legend:

Unmodified
Added
Removed
  • java/installer2/src/net/oni2/aeinstaller/backend/oni/management/Installer.java

    r804 r809  
    7070
    7171        /**
    72          * @return list of currently installed mods
    73          */
    74         public static Vector<Integer> getInstalledMods() {
    75                 File installCfg = new File(Paths.getEditionGDF(), "installed_mods.xml");
    76                 return PackageManager.getInstance().loadModSelection(installCfg);
    77         }
    78 
    79         /**
    8072         * Install the given set of mods
    8173         *
     
    115107                log.println();
    116108
    117                 Paths.getEditionGDF().mkdirs();
    118                 for (File f : Paths.getEditionGDF().listFiles(new FilenameFilter() {
    119                         public boolean accept(File arg0, String arg1) {
    120                                 String s = arg1.toLowerCase();
    121                                 return s.endsWith(".dat")
    122                                                 || s.endsWith(".raw")
    123                                                 || s.endsWith(".sep")
    124                                                 || (s.equals("intro.bik") && !SettingsManager
    125                                                                 .getInstance().get("copyintro", false))
    126                                                 || (s.equals("outro.bik") && !SettingsManager
    127                                                                 .getInstance().get("copyoutro", false));
    128                         }
    129                 })) {
    130                         f.delete();
    131                 }
     109                HashSet<String> levelsAffectedBefore = null;
     110                if (ModInstallationList.getInstance().isLoadedFromFile()) {
     111                        levelsAffectedBefore = ModInstallationList.getInstance()
     112                                        .getAffectedLevels();
     113                }
     114                HashSet<String> levelsAffectedNow = new HashSet<String>();
     115                // TODO: fill set
     116
    132117                File IGMD = new File(Paths.getEditionGDF(), "IGMD");
    133118                if (IGMD.exists()) {
     
    149134                        }
    150135                }
    151 
    152                 File installCfg = new File(Paths.getEditionGDF(), "installed_mods.xml");
    153                 PackageManager.getInstance().saveModSelection(installCfg, mods);
    154136
    155137                TreeSet<Integer> unlockLevels = new TreeSet<Integer>();
     
    217199                                if (levelF.isDirectory()) {
    218200                                        levelN = fn;
     201                                        levelsAffectedNow.add(fn.toLowerCase());
    219202                                } else if (fn.endsWith(".dat")) {
    220203                                        levelN = fn.substring(0, fn.lastIndexOf('.')).toLowerCase();
     
    228211                }
    229212
     213                Paths.getEditionGDF().mkdirs();
     214                for (File f : Paths.getEditionGDF().listFiles(new FilenameFilter() {
     215                        public boolean accept(File arg0, String arg1) {
     216                                String s = arg1.toLowerCase();
     217                                return s.endsWith(".dat")
     218                                                || s.endsWith(".raw")
     219                                                || s.endsWith(".sep")
     220                                                || (s.equals("intro.bik") && !SettingsManager
     221                                                                .getInstance().get("copyintro", false))
     222                                                || (s.equals("outro.bik") && !SettingsManager
     223                                                                .getInstance().get("copyoutro", false));
     224                        }
     225                })) {
     226                        String l = f.getName().toLowerCase();
     227                        l = l.substring(0, l.length() - 4);
     228                        if ((levelsAffectedBefore == null)
     229                                        || levelsAffectedBefore.contains(l)
     230                                        || levelsAffectedNow.contains(l))
     231                                f.delete();
     232                }
     233
    230234                applyPatches(levels, foldersPatches, listener, log);
    231235
    232                 combineBinaryFiles(levels, listener, log);
     236                TreeSet<String> levelsAffectedBoth = new TreeSet<String>();
     237                levelsAffectedBoth.addAll(levelsAffectedBefore);
     238                levelsAffectedBoth.addAll(levelsAffectedNow);
     239                combineBinaryFiles(levels, levelsAffectedBoth, listener, log);
    233240                combineBSLFolders(mods, listener, log);
    234241
     
    238245                        unlockLevels(unlockLevels, log);
    239246                }
     247
     248                ModInstallationList mil = ModInstallationList.getInstance();
     249                mil.setAffectedLevels(levelsAffectedNow);
     250                TreeSet<Integer> modsInstalled = new TreeSet<Integer>();
     251                for (Package p : mods) {
     252                        modsInstalled.add(p.getPackageNumber());
     253                }
     254                mil.setInstalledMods(modsInstalled);
     255                mil.saveList();
    240256
    241257                log.println();
     
    509525        private static void combineBinaryFiles(
    510526                        TreeMap<String, Vector<File>> oniLevelFolders,
    511                         InstallProgressListener listener, Logger log) {
     527                        TreeSet<String> levelsUpdated, InstallProgressListener listener,
     528                        Logger log) {
    512529                long startMS = new Date().getTime();
    513530
     
    522539                                        "Installing level " + l);
    523540
    524                         ApplicationInvocationResult res = OniSplit.packLevel(
    525                                         oniLevelFolders.get(l), new File(Paths.getEditionGDF(),
    526                                                         sanitizeLevelName(l) + ".dat"));
    527                         log.logAppOutput(res, true);
     541                        if (levelsUpdated.contains(l.toLowerCase())) {
     542                                ApplicationInvocationResult res = OniSplit.packLevel(
     543                                                oniLevelFolders.get(l), new File(Paths.getEditionGDF(),
     544                                                                sanitizeLevelName(l) + ".dat"));
     545                                log.logAppOutput(res, true);
     546                        } else {
     547                                log.println("\t\tLevel not affected by new mod selection");
     548                                log.println();
     549                        }
    528550
    529551                        stepsDone++;
     
    539561                if (SettingsManager.getInstance().get("copyintro", false)) {
    540562                        File src = new File(Paths.getVanillaGDF(), "intro.bik");
     563                        File target = new File(Paths.getEditionGDF(), "intro.bik");
    541564                        log.println("Copying intro");
    542                         if (src.exists()) {
     565                        if (src.exists() && !target.exists()) {
    543566                                try {
    544567                                        FileUtils.copyFileToDirectory(src, Paths.getEditionGDF());
     
    552575                if (SettingsManager.getInstance().get("copyoutro", true)) {
    553576                        File src = new File(Paths.getVanillaGDF(), "outro.bik");
     577                        File target = new File(Paths.getEditionGDF(), "outro.bik");
    554578                        log.println("Copying outro");
    555                         if (src.exists()) {
     579                        if (src.exists() && !target.exists()) {
    556580                                try {
    557581                                        FileUtils.copyFileToDirectory(src, Paths.getEditionGDF());
  • java/installer2/src/net/oni2/aeinstaller/backend/packages/PackageManager.java

    r807 r809  
    1414
    1515import net.oni2.aeinstaller.backend.Paths;
    16 import net.oni2.aeinstaller.backend.oni.management.Installer;
     16import net.oni2.aeinstaller.backend.oni.management.ModInstallationList;
    1717import net.oni2.aeinstaller.backend.oni.management.tools.ToolInstallationList;
    1818import net.oni2.moddepot.DepotManager;
     
    3232        private HashMap<Integer, Package> mods = new HashMap<Integer, Package>();
    3333        private HashMap<Integer, Package> tools = new HashMap<Integer, Package>();
    34 
    35         private Vector<Integer> currentlyInstalled = new Vector<Integer>();
    3634
    3735        /**
     
    131129                                mods.put(m.getPackageNumber(), m);
    132130                }
    133 
    134                 updateInstalledMods();
    135         }
    136 
    137         /**
    138          * Update the list of currently installed mods
    139          */
    140         public void updateInstalledMods() {
    141                 currentlyInstalled = Installer.getInstalledMods();
    142                 if (currentlyInstalled == null)
    143                         currentlyInstalled = new Vector<Integer>();
    144131        }
    145132
     
    219206        public TreeSet<Package> getInstalledMods() {
    220207                TreeSet<Package> res = new TreeSet<Package>();
    221                 for (int n : Installer.getInstalledMods()) {
     208                for (int n : ModInstallationList.getInstance().getInstalledMods()) {
    222209                        res.add(getPackageByNumber(n));
    223210                }
     
    358345         */
    359346        boolean isModInstalled(Package m) {
    360                 return currentlyInstalled.contains(m.getPackageNumber());
     347                return ModInstallationList.getInstance().isInstalled(m.getPackageNumber());
    361348        }
    362349}
Note: See TracChangeset for help on using the changeset viewer.