2019-06-04 12:13:25 +02:00
|
|
|
package de.mas.wiiu.jnus;
|
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
import java.io.IOException;
|
|
|
|
import java.text.ParseException;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.zip.ZipFile;
|
|
|
|
|
|
|
|
import javax.xml.parsers.ParserConfigurationException;
|
|
|
|
|
|
|
|
import org.xml.sax.SAXException;
|
|
|
|
|
|
|
|
import de.mas.wiiu.jnus.implementations.FSTDataProviderNUSTitle;
|
2019-06-04 13:16:13 +02:00
|
|
|
import de.mas.wiiu.jnus.implementations.FSTDataProviderWumadDataPartition;
|
|
|
|
import de.mas.wiiu.jnus.implementations.NUSDataProviderWumad;
|
2019-06-04 12:13:25 +02:00
|
|
|
import de.mas.wiiu.jnus.implementations.wud.wumad.WumadGamePartition;
|
|
|
|
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 lombok.NonNull;
|
|
|
|
import lombok.val;
|
|
|
|
|
|
|
|
public class WumadLoader {
|
|
|
|
|
2019-06-04 12:53:19 +02:00
|
|
|
public static WumadInfo load(File wumadFile) throws IOException, ParserConfigurationException, SAXException, ParseException {
|
2019-06-04 12:13:25 +02:00
|
|
|
return WumadParser.createWumadInfo(wumadFile);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static List<NUSTitle> getGamePartionsAsNUSTitles(@NonNull WumadInfo wumadInfo, byte[] commonKey) throws IOException, ParseException {
|
|
|
|
List<NUSTitle> result = new ArrayList<>();
|
|
|
|
for (val gamePartition : wumadInfo.getGamePartitions()) {
|
|
|
|
result.add(convertGamePartitionToNUSTitle(gamePartition, wumadInfo.getZipFile(), commonKey));
|
|
|
|
}
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
private static NUSTitle convertGamePartitionToNUSTitle(WumadGamePartition gamePartition, ZipFile wudmadFile, byte[] commonKey)
|
|
|
|
throws IOException, ParseException {
|
|
|
|
final NUSTitleConfig config = new NUSTitleConfig();
|
|
|
|
config.setCommonKey(commonKey);
|
|
|
|
gamePartition.getTmd();
|
|
|
|
return NUSTitleLoader.loadNusTitle(config, () -> new NUSDataProviderWumad(gamePartition, wudmadFile));
|
|
|
|
}
|
|
|
|
|
|
|
|
public static List<FSTDataProvider> getPartitonsAsFSTDataProvider(@NonNull WumadInfo wumadInfo, byte[] commonKey) throws IOException, ParseException {
|
|
|
|
List<FSTDataProvider> result = new ArrayList<>();
|
|
|
|
for (val gamePartition : wumadInfo.getGamePartitions()) {
|
|
|
|
NUSTitle t = convertGamePartitionToNUSTitle(gamePartition, wumadInfo.getZipFile(), commonKey);
|
|
|
|
FSTDataProviderNUSTitle res = new FSTDataProviderNUSTitle(t);
|
|
|
|
res.setName(gamePartition.getPartitionName());
|
|
|
|
result.add(res);
|
|
|
|
}
|
|
|
|
|
2019-06-04 13:16:13 +02:00
|
|
|
for (val dataPartition : wumadInfo.getDataPartitions()) {
|
|
|
|
result.add(new FSTDataProviderWumadDataPartition(dataPartition, wumadInfo.getZipFile()));
|
|
|
|
}
|
|
|
|
|
2019-06-04 12:13:25 +02:00
|
|
|
return result;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|