diff --git a/src/main/java/de/mas/wiiu/jnus/fuse_wiiu/implementation/WUMADFuseContainer.java b/src/main/java/de/mas/wiiu/jnus/fuse_wiiu/implementation/WUMADFuseContainer.java index dc00c40..362727b 100644 --- a/src/main/java/de/mas/wiiu/jnus/fuse_wiiu/implementation/WUMADFuseContainer.java +++ b/src/main/java/de/mas/wiiu/jnus/fuse_wiiu/implementation/WUMADFuseContainer.java @@ -3,97 +3,48 @@ package de.mas.wiiu.jnus.fuse_wiiu.implementation; import java.io.File; import java.io.IOException; import java.text.ParseException; +import java.util.ArrayList; +import java.util.List; import java.util.Optional; -import de.mas.wiiu.jnus.NUSTitle; -import de.mas.wiiu.jnus.NUSTitleLoaderFST; -import de.mas.wiiu.jnus.NUSTitleLoaderWumad; -import de.mas.wiiu.jnus.entities.fst.FSTEntry; +import de.mas.wiiu.jnus.WumadLoader; import de.mas.wiiu.jnus.fuse_wiiu.Settings; import de.mas.wiiu.jnus.fuse_wiiu.interfaces.FuseDirectory; -import de.mas.wiiu.jnus.implementations.FSTDataProviderNUSTitle; +import de.mas.wiiu.jnus.implementations.wud.wumad.WumadInfo; +import de.mas.wiiu.jnus.implementations.wud.wumad.WumadParser; import de.mas.wiiu.jnus.interfaces.FSTDataProvider; -import de.mas.wiiu.jnus.utils.FSTUtils; -public class WUMADFuseContainer extends GroupFuseContainer { - private final File file; +public class WUMADFuseContainer extends PartitionFuseContainer { public WUMADFuseContainer(Optional parent, File c) { - super(parent); - this.file = c; + super(parent, c); } @Override - protected void doInit() { - - FSTDataProvider dp; - try { - dp = new FSTDataProviderNUSTitle(getNUSTitle()); - - this.addFuseContainer("[EMULATED] [P01]", new FSTDataProviderContainer(Optional.of(this), () -> { - try { - return dp; - } catch (Exception e1) { - e1.printStackTrace(); - return null; - } - })); - - GroupFuseContainer children = new GroupFuseContainerDefault(Optional.of(this)); - this.addFuseContainer("[EMULATED] [P01] [EXTRA] ", children); - - for (FSTEntry tmd : FSTUtils.getFSTEntriesByRegEx(dp.getRoot(), ".*tmd")) { - Optional parentOpt = tmd.getParent(); - if (parentOpt.isPresent()) { - FSTEntry parent = parentOpt.get(); - if (parent.getFileChildren().stream().filter(f -> f.getFilename().endsWith(".app")).findAny().isPresent()) { - FSTDataProvider fdp = null; - try { - fdp = new FSTDataProviderNUSTitle(NUSTitleLoaderFST.loadNUSTitle(dp, parent, Settings.retailCommonKey)); - } catch (IOException | ParseException e) { - try { - fdp = new FSTDataProviderNUSTitle(NUSTitleLoaderFST.loadNUSTitle(dp, parent, Settings.devCommonKey)); - } catch (Exception e1) { - System.out.println("Ignoring " + parent.getFilename() + " :" + e1.getClass().getName() + " " + e1.getMessage()); - continue; - } - } catch (Exception e) { - System.out.println("Ignoring " + parent.getFilename() + " :" + e.getClass().getName() + " " + e.getMessage()); - continue; - } - - FSTDataProvider fdpCpy = fdp; - - children.addFuseContainer("[P01] [DECRYPTED] [" + dp.getName() + "] " + parent.getFilename(), - new FSTDataProviderContainer(getParent(), fdpCpy)); - } - } + protected Optional loadInfo(File input) { + if (input != null && input.exists()) { + try { + return Optional.of(WumadParser.createWumadInfo(input)); + } catch (Exception e) { + e.printStackTrace(); } - - } catch (IOException e2) { - // TODO Auto-generated catch block - e2.printStackTrace(); - } catch (ParseException e2) { - // TODO Auto-generated catch block - e2.printStackTrace(); } - + return Optional.empty(); } - private NUSTitle getNUSTitle() throws IOException, ParseException { - NUSTitle t = null; + @Override + protected List getDataProvider(WumadInfo info) { + List dps = new ArrayList<>(); try { - try { - t = NUSTitleLoaderWumad.loadNUSTitle(file, Settings.retailCommonKey); - } catch (ParseException e) { - t = NUSTitleLoaderWumad.loadNUSTitle(file, Settings.devCommonKey); - } + dps = WumadLoader.getPartitonsAsFSTDataProvider(info, Settings.retailCommonKey); } catch (Exception e) { - e.printStackTrace(); - System.out.println("Ignoring " + file.getAbsolutePath() + " :" + e.getClass().getName() + " " + e.getMessage()); + try { + dps = WumadLoader.getPartitonsAsFSTDataProvider(info, Settings.devCommonKey); + } catch (IOException | ParseException e1) { + return dps; + } } - - return t; + return dps; } } diff --git a/src/main/java/de/mas/wiiu/jnus/fuse_wiiu/implementation/WUMADMountedFuseContainer.java b/src/main/java/de/mas/wiiu/jnus/fuse_wiiu/implementation/WUMADMountedFuseContainer.java new file mode 100644 index 0000000..7298545 --- /dev/null +++ b/src/main/java/de/mas/wiiu/jnus/fuse_wiiu/implementation/WUMADMountedFuseContainer.java @@ -0,0 +1,50 @@ +package de.mas.wiiu.jnus.fuse_wiiu.implementation; + +import java.io.File; +import java.io.IOException; +import java.text.ParseException; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +import de.mas.wiiu.jnus.WumadLoader; +import de.mas.wiiu.jnus.fuse_wiiu.Settings; +import de.mas.wiiu.jnus.fuse_wiiu.interfaces.FuseDirectory; +import de.mas.wiiu.jnus.implementations.wud.wumad.WumadInfo; +import de.mas.wiiu.jnus.implementations.wud.wumad.WumadParser; +import de.mas.wiiu.jnus.interfaces.FSTDataProvider; + +public class WUMADMountedFuseContainer extends RecursivePartitionFuseContainer { + + public WUMADMountedFuseContainer(Optional parent, File c) { + super(parent, c); + } + + @Override + protected Optional loadInfo(File input) { + if (input != null && input.exists()) { + try { + return Optional.of(WumadParser.createWumadInfo(input)); + } catch (Exception e) { + e.printStackTrace(); + } + } + return Optional.empty(); + } + + @Override + protected List getDataProvider(WumadInfo info) { + List dps = new ArrayList<>(); + try { + dps = WumadLoader.getPartitonsAsFSTDataProvider(info, Settings.retailCommonKey); + } catch (Exception e) { + try { + dps = WumadLoader.getPartitonsAsFSTDataProvider(info, Settings.devCommonKey); + } catch (IOException | ParseException e1) { + return dps; + } + } + return dps; + } + +} diff --git a/src/main/java/de/mas/wiiu/jnus/fuse_wiiu/utils/FuseContainerWrapper.java b/src/main/java/de/mas/wiiu/jnus/fuse_wiiu/utils/FuseContainerWrapper.java index 762130f..52d9172 100644 --- a/src/main/java/de/mas/wiiu/jnus/fuse_wiiu/utils/FuseContainerWrapper.java +++ b/src/main/java/de/mas/wiiu/jnus/fuse_wiiu/utils/FuseContainerWrapper.java @@ -12,6 +12,7 @@ import de.mas.wiiu.jnus.fuse_wiiu.implementation.WUDFuseContainer; import de.mas.wiiu.jnus.fuse_wiiu.implementation.WUDMountedFuseContainer; import de.mas.wiiu.jnus.fuse_wiiu.implementation.WUDToWUDContainer; import de.mas.wiiu.jnus.fuse_wiiu.implementation.WUMADFuseContainer; +import de.mas.wiiu.jnus.fuse_wiiu.implementation.WUMADMountedFuseContainer; import de.mas.wiiu.jnus.fuse_wiiu.implementation.WoomyNUSTitleContainer; import de.mas.wiiu.jnus.fuse_wiiu.interfaces.FuseContainer; import de.mas.wiiu.jnus.fuse_wiiu.interfaces.FuseDirectory; @@ -48,8 +49,10 @@ public class FuseContainerWrapper { return result; } - if (c.exists() && c.getName().endsWith(".wumad")) { + if (c.exists() && c.getName().endsWith(".wumad")) { result.put(prefix + c.getName(), new WUMADFuseContainer(parent, c)); + result.put(prefix + "[EXTRA] " + c.getName(), new WUMADMountedFuseContainer(parent, c)); + return result; }