Ignore:
Timestamp:
Jan 14, 2013, 6:49:25 PM (12 years ago)
Author:
alloc
Message:

AEI2:

  • Added BSL handling to installation
  • Updated config-terms for dependencies/incompatibilities
  • Fixed mod counts for types
  • Open Edition folder through menu
  • Open folder of already downloaded mod through context menu
  • (Semi?)Fixed launching Oni on MacOS
  • Settings: Added checkbox for update notification
Location:
AE/installer2/src/net/oni2/aeinstaller/backend
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • AE/installer2/src/net/oni2/aeinstaller/backend/mods/EBSLInstallType.java

    r600 r608  
    55 */
    66public enum EBSLInstallType {
    7         /**
    8          * No BSL files
    9          */
    10         NONE,
    117        /**
    128         * Normal BSL install mode
  • AE/installer2/src/net/oni2/aeinstaller/backend/mods/Mod.java

    r604 r608  
    2929        private String version = "";
    3030        private String creator = "";
    31         private EBSLInstallType bslInstallType = null;
     31        private EBSLInstallType bslInstallType = EBSLInstallType.NORMAL;
    3232        private String description = "";
    3333        private double aeVersion = 0;
     
    3636        private net.oni2.aeinstaller.backend.depot.model.File file = null;
    3737
    38         private HashSet<Integer> conflicts = new HashSet<Integer>();
     38        private HashSet<Integer> incompatibilities = new HashSet<Integer>();
    3939        private HashSet<Integer> dependencies = new HashSet<Integer>();
    4040
     
    5151                name = nm.getTitle();
    5252                packageNumber = nm.getPackageNumber();
     53                platform = nm.getPlatform();
    5354                for (TaxonomyTerm tt : nm.getTypes()) {
    5455                        Type t = ModManager.getInstance().getTypeByName(tt.getName());
    5556                        types.add(t);
    56                         if (!nm.isTool())
     57                        if (!nm.isTool() && isValidOnPlatform())
    5758                                t.addEntry(this);
    5859                }
    59                 platform = nm.getPlatform();
    6060                version = nm.getVersion();
    6161                creator = nm.getCreator();
     
    101101                                                if (sVal.equalsIgnoreCase("addon"))
    102102                                                        bslInstallType = EBSLInstallType.ADDON;
    103                                                 else if (sVal.equalsIgnoreCase("yes"))
    104                                                         bslInstallType = EBSLInstallType.NORMAL;
    105                                                 else
    106                                                         bslInstallType = EBSLInstallType.NONE;
    107103                                        } else if (sName.equalsIgnoreCase("ModVersion")) {
    108104                                                if (node == null)
     
    111107                                                if (node == null)
    112108                                                        description = sVal.replaceAll("\\\\n", "<br>");
    113                                         } else if (sName.equalsIgnoreCase("Depends")) {
     109                                        } else if (sName.equalsIgnoreCase("DependsOn")) {
    114110                                                String[] depsS = sVal.split(",");
    115111                                                for (String s : depsS) {
     
    123119                                                        }
    124120                                                }
    125                                         } else if (sName.equalsIgnoreCase("Conflicts")) {
     121                                        } else if (sName.equalsIgnoreCase("IncompatibleWith")) {
    126122                                                String[] confS = sVal.split(",");
    127123                                                for (String s : confS) {
    128124                                                        try {
    129125                                                                int conf = Integer.parseInt(s);
    130                                                                 conflicts.add(conf);
     126                                                                incompatibilities.add(conf);
    131127                                                        } catch (NumberFormatException e) {
    132128                                                                System.err
    133                                                                                 .format("Mod %05d does contain a non-number dependency: '%s'\n",
     129                                                                                .format("Mod %05d does contain a non-number incompatibility: '%s'\n",
    134130                                                                                                packageNumber, s);
    135131                                                        }
     
    182178                updateLocalData();
    183179
    184                 Type t = ModManager.getInstance().getTypeByName("-Local-");
    185                 types.add(t);
    186                 t.addEntry(this);
    187 
    188180                platform = ECompatiblePlatform.BOTH;
    189181        }
     
    323315
    324316        /**
    325          * @return the conflicts
    326          */
    327         public HashSet<Integer> getConflicts() {
    328                 return conflicts;
     317         * @return the incompabitilities
     318         */
     319        public HashSet<Integer> getIncompabitilities() {
     320                return incompatibilities;
    329321        }
    330322
     
    339331         * @return Is this mod valid on the running platform?
    340332         */
    341         public boolean validOnPlatform() {
    342                 ECompatiblePlatform plat = platform;
    343                 switch (plat) {
     333        public boolean isValidOnPlatform() {
     334                switch (platform) {
    344335                        case BOTH:
    345336                                return true;
  • AE/installer2/src/net/oni2/aeinstaller/backend/mods/ModManager.java

    r604 r608  
    4343                Vector<Integer> res = new Vector<Integer>();
    4444                try {
    45                         FileInputStream fis = new FileInputStream(f);
    46                         XStream xs = new XStream(new StaxDriver());
    47                         Object obj = xs.fromXML(fis);
    48                         if (obj instanceof Vector<?>)
    49                                 res = (Vector<Integer>) obj;
    50                         fis.close();
     45                        if (f.exists()) {
     46                                FileInputStream fis = new FileInputStream(f);
     47                                XStream xs = new XStream(new StaxDriver());
     48                                Object obj = xs.fromXML(fis);
     49                                if (obj instanceof Vector<?>)
     50                                        res = (Vector<Integer>) obj;
     51                                fis.close();
     52                        }
    5153                } catch (FileNotFoundException e) {
    5254                        e.printStackTrace();
     
    8789                mods = new HashMap<Integer, Mod>();
    8890
    89                 types.put("-Local-", new Type("-Local-", null));
     91                Type localType = new Type("-Local-", null);
     92                types.put("-Local-", localType);
    9093
    9194                for (TaxonomyTerm tt : DepotManager.getInstance()
     
    120123
    121124                for (Mod m : modFolders.values()) {
     125                        if (!m.isMandatoryMod()) {
     126                                localType.addEntry(m);
     127                                m.getTypes().add(localType);
     128                        }
    122129                        mods.put(m.getPackageNumber(), m);
    123130                }
     
    152159
    153160        /**
    154          * @return Collection of mods
    155          */
    156         public Collection<Mod> getMods() {
    157                 return mods.values();
    158         }
    159 
    160         /**
    161          * @return Mods which are always installed
     161         * @return Collection of mods valid on this platform and not mandatory
     162         */
     163        public Collection<Mod> getModsValidAndNotMandatory() {
     164                Vector<Mod> res = new Vector<Mod>();
     165                for (Mod m : mods.values())
     166                        if (m.isValidOnPlatform() && !m.isMandatoryMod())
     167                                res.add(m);
     168                return res;
     169        }
     170
     171        /**
     172         * @return Mods which are always installed and valid on this platform
    162173         */
    163174        public TreeSet<Mod> getMandatoryMods() {
    164175                TreeSet<Mod> res = new TreeSet<Mod>();
    165176                for (Mod m : mods.values()) {
    166                         if (m.isMandatoryMod())
    167                                 res.add(m);
    168                 }
    169                 return res;
    170         }
    171 
    172         /**
    173          * @return Collection of tools
     177                        if (m.isValidOnPlatform() && m.isMandatoryMod())
     178                                res.add(m);
     179                }
     180                return res;
     181        }
     182
     183        /**
     184         * @return Collection of tools valid on this platform and not mandatory
    174185         */
    175186        public Collection<Mod> getTools() {
    176                 return tools.values();
    177         }
    178 
    179         /**
    180          * @return Tools which are always installed
     187                Vector<Mod> res = new Vector<Mod>();
     188                for (Mod m : tools.values())
     189                        if (m.isValidOnPlatform() && !m.isMandatoryMod())
     190                                res.add(m);
     191                return res;
     192        }
     193
     194        /**
     195         * @return Tools which are always installed and valid on this platform
    181196         */
    182197        public TreeSet<Mod> getMandatoryTools() {
    183198                TreeSet<Mod> res = new TreeSet<Mod>();
    184199                for (Mod m : tools.values()) {
    185                         if (m.isMandatoryMod())
     200                        if (m.isValidOnPlatform() && m.isMandatoryMod())
    186201                                res.add(m);
    187202                }
     
    230245
    231246        /**
    232          * Check for conflicts between given mods
     247         * Check for incompabitilites between given mods
    233248         *
    234249         * @param mods
    235250         *            Mods to check
    236          * @return Conflicting mods
    237          */
    238         public HashMap<Mod, HashSet<Mod>> checkConflicts(TreeSet<Mod> mods) {
     251         * @return Incompatible mods
     252         */
     253        public HashMap<Mod, HashSet<Mod>> checkIncompabitilites(TreeSet<Mod> mods) {
    239254                // TODO: Verify functionality
    240255                HashMap<Mod, HashSet<Mod>> res = new HashMap<Mod, HashSet<Mod>>();
    241256
    242257                for (Mod m : mods) {
    243                         for (int confNum : m.getConflicts()) {
     258                        for (int confNum : m.getIncompabitilities()) {
    244259                                Mod other = getModByNumber(confNum);
    245260                                if (mods.contains(other)) {
  • AE/installer2/src/net/oni2/aeinstaller/backend/oni/Installer.java

    r606 r608  
    99import java.text.SimpleDateFormat;
    1010import java.util.Date;
     11import java.util.HashMap;
    1112import java.util.List;
    1213import java.util.Scanner;
     
    1819import net.oni2.aeinstaller.backend.Settings;
    1920import net.oni2.aeinstaller.backend.Settings.Platform;
     21import net.oni2.aeinstaller.backend.mods.EBSLInstallType;
    2022import net.oni2.aeinstaller.backend.mods.Mod;
    2123import net.oni2.aeinstaller.backend.mods.ModManager;
     
    2729 */
    2830public class Installer {
     31        private static FileFilter dirFileFilter = new FileFilter() {
     32                @Override
     33                public boolean accept(File pathname) {
     34                        return pathname.isDirectory();
     35                }
     36        };
     37
    2938        /**
    3039         * @return Is Edition Core initialized
     
    97106                }
    98107        }
     108
    99109        /**
    100110         * Install the given set of mods
     
    116126                ModManager.getInstance().saveModSelection(installCfg, mods);
    117127
    118                 Vector<File> folders = new Vector<File>();
    119                 folders.add(Paths.getVanillaOnisPath());
     128                Vector<File> foldersOni = new Vector<File>();
     129                foldersOni.add(Paths.getVanillaOnisPath());
    120130
    121131                for (Mod m : mods) {
     
    127137                                        File oniWin = new File(oni, "win_only");
    128138                                        if (oniCommon.exists())
    129                                                 folders.add(oniCommon);
     139                                                foldersOni.add(oniCommon);
    130140                                        if (Settings.getPlatform() == Platform.MACOS
    131141                                                        && oniMac.exists())
    132                                                 folders.add(oniMac);
     142                                                foldersOni.add(oniMac);
    133143                                        else if (oniWin.exists())
    134                                                 folders.add(oniWin);
     144                                                foldersOni.add(oniWin);
    135145                                } else {
    136                                         folders.add(oni);
    137                                 }
    138                         }
    139                 }
    140 
    141                 combineBinaryFiles(folders, listener);
    142 
    143                 // TODO: bsl()
     146                                        foldersOni.add(oni);
     147                                }
     148                        }
     149                }
     150                combineBinaryFiles(foldersOni, listener);
     151                combineBSLFolders(mods, listener);
     152        }
     153
     154        private static void combineBSLFolders(TreeSet<Mod> mods,
     155                        InstallProgressListener listener) {
     156                listener.installProgressUpdate(95, 100, "Installing BSL files");
     157
     158                HashMap<EBSLInstallType, Vector<Mod>> modsToInclude = new HashMap<EBSLInstallType, Vector<Mod>>();
     159                modsToInclude.put(EBSLInstallType.NORMAL, new Vector<Mod>());
     160                modsToInclude.put(EBSLInstallType.ADDON, new Vector<Mod>());
     161
     162                for (Mod m : mods.descendingSet()) {
     163                        File bsl = new File(m.getLocalPath(), "bsl");
     164                        if (bsl.exists()) {
     165                                if (m.hasSeparatePlatformDirs()) {
     166                                        File bslCommon = new File(bsl, "common");
     167                                        File bslMac = new File(bsl, "mac_only");
     168                                        File bslWin = new File(bsl, "win_only");
     169                                        if ((Settings.getPlatform() == Platform.MACOS && bslMac
     170                                                        .exists())
     171                                                        || ((Settings.getPlatform() == Platform.WIN || Settings
     172                                                                        .getPlatform() == Platform.LINUX) && bslWin
     173                                                                        .exists()) || bslCommon.exists()) {
     174                                                modsToInclude.get(m.getBSLInstallType()).add(m);
     175                                        }
     176                                } else {
     177                                        modsToInclude.get(m.getBSLInstallType()).add(m);
     178                                }
     179                        }
     180                }
     181
     182                for (Mod m : modsToInclude.get(EBSLInstallType.NORMAL)) {
     183                        copyBSL(m, false);
     184                }
     185                for (Mod m : modsToInclude.get(EBSLInstallType.ADDON)) {
     186                        copyBSL(m, true);
     187                }
     188        }
     189
     190        private static void copyBSL(Mod sourceMod, boolean addon) {
     191                File targetBaseFolder = new File(Paths.getEditionGDF(), "IGMD");
     192                if (!targetBaseFolder.exists())
     193                        targetBaseFolder.mkdir();
     194
     195                Vector<File> sources = new Vector<File>();
     196                File bsl = new File(sourceMod.getLocalPath(), "bsl");
     197                if (sourceMod.hasSeparatePlatformDirs()) {
     198                        File bslCommon = new File(bsl, "common");
     199                        File bslMac = new File(bsl, "mac_only");
     200                        File bslWin = new File(bsl, "win_only");
     201                        if (Settings.getPlatform() == Platform.MACOS && bslMac.exists()) {
     202                                for (File f : bslMac.listFiles(dirFileFilter)) {
     203                                        File targetBSL = new File(targetBaseFolder, f.getName());
     204                                        if (addon || !targetBSL.exists())
     205                                                sources.add(f);
     206                                }
     207                        }
     208                        if ((Settings.getPlatform() == Platform.WIN || Settings
     209                                        .getPlatform() == Platform.LINUX) && bslWin.exists()) {
     210                                for (File f : bslWin.listFiles(dirFileFilter)) {
     211                                        File targetBSL = new File(targetBaseFolder, f.getName());
     212                                        if (addon || !targetBSL.exists())
     213                                                sources.add(f);
     214                                }
     215                        }
     216                        if (bslCommon.exists()) {
     217                                for (File f : bslCommon.listFiles(dirFileFilter)) {
     218                                        File targetBSL = new File(targetBaseFolder, f.getName());
     219                                        if (addon || !targetBSL.exists())
     220                                                sources.add(f);
     221                                }
     222                        }
     223                } else {
     224                        for (File f : bsl.listFiles(dirFileFilter)) {
     225                                File targetBSL = new File(targetBaseFolder, f.getName());
     226                                if (addon || !targetBSL.exists())
     227                                        sources.add(f);
     228                        }
     229                }
     230
     231                System.out.println("For mod: " + sourceMod.getName()
     232                                + " install BSL folders: " + sources.toString());
     233                for (File f : sources) {
     234                        File targetPath = new File(targetBaseFolder, f.getName());
     235                        if (!targetPath.exists())
     236                                targetPath.mkdir();
     237                        for (File fbsl : f.listFiles()) {
     238                                File targetFile = new File(targetPath, fbsl.getName());
     239                                if (!targetFile.exists()) {
     240                                        try {
     241                                                FileUtils.copyFile(fbsl, targetFile);
     242                                        } catch (IOException e) {
     243                                                // TODO Auto-generated catch block
     244                                                e.printStackTrace();
     245                                        }
     246                                }
     247                        }
     248                }
    144249        }
    145250
     
    171276                String s : levels.keySet())
    172277                        totalSteps++;
     278                totalSteps++;
    173279
    174280                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
     
    202308
    203309                        log.println();
     310                        stepsDone++;
    204311                }
    205312
Note: See TracChangeset for help on using the changeset viewer.