Skip to content

Commit a6e02fe

Browse files
committed
Improve dlc duplicate handling
1 parent d600c6c commit a6e02fe

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

pdxu-app/src/main/java/com/crschnick/pdxu/app/installation/GameInstallType.java

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,10 @@ public static enum DlcInfoStorageType {
4444

4545
@Override
4646
public List<GameDlc> loadDlcs(Path directory) throws IOException {
47-
var dlcs = loadDlcsFromDirectory(getDlcPath(directory));
48-
dlcs.addAll(loadDlcsFromDirectory(directory.resolve("builtin_dlc")));
47+
// Prefer builtin_dlcs in case of duplicates
48+
var dlcs = new ArrayList<GameDlc>();
49+
loadDlcsFromDirectory(directory.resolve("builtin_dlc"), dlcs);
50+
loadDlcsFromDirectory(getDlcPath(directory), dlcs);
4951
return dlcs;
5052
}
5153

@@ -759,25 +761,29 @@ default Path getDlcPath(Path p) {
759761
}
760762

761763
default List<GameDlc> loadDlcs(Path p) throws IOException {
762-
return loadDlcsFromDirectory(getDlcPath(p));
764+
var dlcs = new ArrayList<GameDlc>();
765+
loadDlcsFromDirectory(getDlcPath(p), dlcs);
766+
return dlcs;
763767
}
764768

765-
default List<GameDlc> loadDlcsFromDirectory(Path directory) throws IOException {
766-
var dlcs = new ArrayList<GameDlc>();
769+
default void loadDlcsFromDirectory(Path directory, List<GameDlc> existing) throws IOException {
767770
if (!Files.isDirectory(directory)) {
768-
return dlcs;
771+
return;
769772
}
770773

771774
try (var s = Files.list(directory)) {
772775
s.forEach(f -> {
773776
try {
774-
GameDlc.fromDirectory(f).ifPresent(dlcs::add);
777+
GameDlc.fromDirectory(f)
778+
// Add duplicate check, in case DLC updates were messed up by Steam
779+
.filter(gameDlc -> existing.stream()
780+
.noneMatch(other -> other.getName().equals(gameDlc.getName())))
781+
.ifPresent(existing::add);
775782
} catch (Exception e) {
776783
ErrorHandler.handleException(e);
777784
}
778785
});
779786
}
780-
return dlcs;
781787
}
782788

783789
default String getModLauncherId(GameInstallation installation, GameMod mod) {

0 commit comments

Comments
 (0)