/*
* SK's Minecraft Launcher
* Copyright (C) 2010-2014 Albert Pham <http://www.sk89q.com> and contributors
* Please see LICENSE.txt for license information.
*/
package com.skcraft.launcher.creator.controller.task;
import com.skcraft.launcher.creator.model.creator.ManifestEntry;
import com.skcraft.launcher.model.modpack.Manifest;
import com.skcraft.launcher.model.modpack.ManifestInfo;
import com.skcraft.launcher.persistence.Persistence;
import java.io.File;
import java.util.List;
import java.util.function.Function;
public class ManifestInfoEnumerator implements Function<List<ManifestEntry>, List<ManifestEntry>> {
private final File searchDir;
public ManifestInfoEnumerator(File searchDir) {
this.searchDir = searchDir;
}
@Override
public List<ManifestEntry> apply(List<ManifestEntry> entries) {
File[] files = searchDir.listFiles(f -> f.isFile() && f.getName().toLowerCase().endsWith(".json") && !f.getName().startsWith("packages."));
if (files != null) {
for (File file : files) {
String location = file.getName();
Manifest manifest = Persistence.read(file, Manifest.class, true);
if (manifest != null) {
ManifestInfo info = new ManifestInfo();
info.setName(manifest.getName());
info.setTitle(manifest.getTitle());
info.setVersion(manifest.getVersion());
info.setPriority(0);
info.setLocation(location);
boolean found = false;
for (ManifestEntry entry : entries) {
if (entry.getManifestInfo().getLocation().equals(location)) {
info.setPriority(entry.getManifestInfo().getPriority());
entry.setManifestInfo(info);
found = true;
break;
}
}
if (!found) {
ManifestEntry entry = new ManifestEntry();
entry.setManifestInfo(info);
entries.add(entry);
}
}
}
}
return entries;
}
}