Update InstallerItem.java
This commit is contained in:
parent
6ce47d8330
commit
d6aec5b3c4
|
@ -21,6 +21,7 @@ import androidx.appcompat.widget.LinearLayoutCompat;
|
||||||
import com.tungsten.fcl.R;
|
import com.tungsten.fcl.R;
|
||||||
import com.tungsten.fcl.util.AndroidUtils;
|
import com.tungsten.fcl.util.AndroidUtils;
|
||||||
import com.tungsten.fclcore.download.LibraryAnalyzer;
|
import com.tungsten.fclcore.download.LibraryAnalyzer;
|
||||||
|
import com.tungsten.fclcore.fakefx.beans.InvalidationListener;
|
||||||
import com.tungsten.fclcore.fakefx.beans.binding.Bindings;
|
import com.tungsten.fclcore.fakefx.beans.binding.Bindings;
|
||||||
import com.tungsten.fclcore.fakefx.beans.property.BooleanProperty;
|
import com.tungsten.fclcore.fakefx.beans.property.BooleanProperty;
|
||||||
import com.tungsten.fclcore.fakefx.beans.property.ObjectProperty;
|
import com.tungsten.fclcore.fakefx.beans.property.ObjectProperty;
|
||||||
|
@ -36,6 +37,11 @@ import com.tungsten.fcllibrary.component.view.FCLLinearLayout;
|
||||||
import com.tungsten.fcllibrary.component.view.FCLTextView;
|
import com.tungsten.fcllibrary.component.view.FCLTextView;
|
||||||
import com.tungsten.fcllibrary.util.ConvertUtils;
|
import com.tungsten.fcllibrary.util.ConvertUtils;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
public class InstallerItem {
|
public class InstallerItem {
|
||||||
|
|
||||||
private final Context context;
|
private final Context context;
|
||||||
|
@ -118,6 +124,32 @@ public class InstallerItem {
|
||||||
|
|
||||||
private final InstallerItem[] libraries;
|
private final InstallerItem[] libraries;
|
||||||
|
|
||||||
|
private final HashMap<InstallerItem, Set<InstallerItem>> incompatibleMap = new HashMap<>();
|
||||||
|
|
||||||
|
private Set<InstallerItem> getIncompatibles(InstallerItem item) {
|
||||||
|
return incompatibleMap.computeIfAbsent(item, it -> new HashSet<>());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addIncompatibles(InstallerItem item, InstallerItem... others) {
|
||||||
|
Set<InstallerItem> set = getIncompatibles(item);
|
||||||
|
for (InstallerItem other : others) {
|
||||||
|
set.add(other);
|
||||||
|
getIncompatibles(other).add(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void mutualIncompatible(InstallerItem... items) {
|
||||||
|
for (InstallerItem item : items) {
|
||||||
|
Set<InstallerItem> set = getIncompatibles(item);
|
||||||
|
|
||||||
|
for (InstallerItem item2 : items) {
|
||||||
|
if (item2 != item) {
|
||||||
|
set.add(item2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public InstallerItemGroup(Context context, String gameVersion) {
|
public InstallerItemGroup(Context context, String gameVersion) {
|
||||||
this.context = context;
|
this.context = context;
|
||||||
|
|
||||||
|
@ -130,44 +162,28 @@ public class InstallerItem {
|
||||||
quilt = new InstallerItem(context, QUILT);
|
quilt = new InstallerItem(context, QUILT);
|
||||||
quiltApi = new InstallerItem(context, QUILT_API);
|
quiltApi = new InstallerItem(context, QUILT_API);
|
||||||
|
|
||||||
forge.incompatibleLibraryName.bind(Bindings.createStringBinding(() -> {
|
mutualIncompatible(forge, fabric, quilt, neoForge, liteLoader);
|
||||||
if (fabric.libraryVersion.get() != null) return FABRIC.getPatchId();
|
addIncompatibles(optiFine, fabric, quilt, neoForge);
|
||||||
if (quilt.libraryVersion.get() != null) return QUILT.getPatchId();
|
addIncompatibles(fabricApi, forge, quilt, quiltApi, neoForge, liteLoader, optiFine);
|
||||||
if (neoForge.libraryVersion.get() != null) return NEO_FORGE.getPatchId();
|
addIncompatibles(quiltApi, forge, fabric, fabricApi, neoForge, liteLoader, optiFine);
|
||||||
return null;
|
|
||||||
}, fabric.libraryVersion, quilt.libraryVersion, neoForge.libraryVersion));
|
|
||||||
|
|
||||||
neoForge.incompatibleLibraryName.bind(Bindings.createStringBinding(() -> {
|
InvalidationListener listener = o -> {
|
||||||
if (fabric.libraryVersion.get() != null) return FABRIC.getPatchId();
|
for (Map.Entry<InstallerItem, Set<InstallerItem>> entry : incompatibleMap.entrySet()) {
|
||||||
if (quilt.libraryVersion.get() != null) return QUILT.getPatchId();
|
InstallerItem item = entry.getKey();
|
||||||
if (forge.libraryVersion.get() != null) return FORGE.getPatchId();
|
|
||||||
return null;
|
|
||||||
}, fabric.libraryVersion, quilt.libraryVersion, forge.libraryVersion));
|
|
||||||
|
|
||||||
liteLoader.incompatibleLibraryName.bind(Bindings.createStringBinding(() -> {
|
String incompatibleId = null;
|
||||||
if (fabric.libraryVersion.get() != null) return FABRIC.getPatchId();
|
for (InstallerItem other : entry.getValue()) {
|
||||||
if (quilt.libraryVersion.get() != null) return QUILT.getPatchId();
|
if (other.libraryVersion.get() != null) {
|
||||||
if (neoForge.libraryVersion.get() != null) return NEO_FORGE.getPatchId();
|
incompatibleId = other.id;
|
||||||
return null;
|
break;
|
||||||
}, fabric.libraryVersion, quilt.libraryVersion, neoForge.libraryVersion));
|
}
|
||||||
|
}
|
||||||
|
|
||||||
optiFine.incompatibleLibraryName.bind(Bindings.createStringBinding(() -> {
|
item.incompatibleLibraryName.set(incompatibleId);
|
||||||
if (fabric.libraryVersion.get() != null) return FABRIC.getPatchId();
|
}
|
||||||
if (quilt.libraryVersion.get() != null) return QUILT.getPatchId();
|
};
|
||||||
if (neoForge.libraryVersion.get() != null) return NEO_FORGE.getPatchId();
|
for (InstallerItem item : incompatibleMap.keySet()) {
|
||||||
return null;
|
item.libraryVersion.addListener(listener);
|
||||||
}, fabric.libraryVersion, quilt.libraryVersion, neoForge.libraryVersion));
|
|
||||||
|
|
||||||
for (InstallerItem fabric : new InstallerItem[] { fabric, fabricApi }) {
|
|
||||||
fabric.incompatibleLibraryName.bind(Bindings.createStringBinding(() -> {
|
|
||||||
if (forge.libraryVersion.get() != null) return FORGE.getPatchId();
|
|
||||||
if (neoForge.libraryVersion.get() != null) return NEO_FORGE.getPatchId();
|
|
||||||
if (liteLoader.libraryVersion.get() != null) return LITELOADER.getPatchId();
|
|
||||||
if (optiFine.libraryVersion.get() != null) return OPTIFINE.getPatchId();
|
|
||||||
if (quilt.libraryVersion.get() != null) return QUILT.getPatchId();
|
|
||||||
if (quiltApi.libraryVersion.get() != null) return QUILT_API.getPatchId();
|
|
||||||
return null;
|
|
||||||
}, forge.libraryVersion, neoForge.libraryVersion, liteLoader.libraryVersion, optiFine.libraryVersion, quilt.libraryVersion, quiltApi.libraryVersion));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fabricApi.dependencyName.bind(Bindings.createStringBinding(() -> {
|
fabricApi.dependencyName.bind(Bindings.createStringBinding(() -> {
|
||||||
|
@ -175,18 +191,6 @@ public class InstallerItem {
|
||||||
else return null;
|
else return null;
|
||||||
}, fabric.libraryVersion));
|
}, fabric.libraryVersion));
|
||||||
|
|
||||||
for (InstallerItem quilt : new InstallerItem[] { quilt, quiltApi }) {
|
|
||||||
quilt.incompatibleLibraryName.bind(Bindings.createStringBinding(() -> {
|
|
||||||
if (fabric.libraryVersion.get() != null) return FABRIC.getPatchId();
|
|
||||||
if (fabricApi.libraryVersion.get() != null) return FABRIC_API.getPatchId();
|
|
||||||
if (forge.libraryVersion.get() != null) return FORGE.getPatchId();
|
|
||||||
if (neoForge.libraryVersion.get() != null) return NEO_FORGE.getPatchId();
|
|
||||||
if (liteLoader.libraryVersion.get() != null) return LITELOADER.getPatchId();
|
|
||||||
if (optiFine.libraryVersion.get() != null) return OPTIFINE.getPatchId();
|
|
||||||
return null;
|
|
||||||
}, fabric.libraryVersion, fabricApi.libraryVersion, forge.libraryVersion, neoForge.libraryVersion, liteLoader.libraryVersion, optiFine.libraryVersion));
|
|
||||||
}
|
|
||||||
|
|
||||||
quiltApi.dependencyName.bind(Bindings.createStringBinding(() -> {
|
quiltApi.dependencyName.bind(Bindings.createStringBinding(() -> {
|
||||||
if (quilt.libraryVersion.get() == null) return QUILT.getPatchId();
|
if (quilt.libraryVersion.get() == null) return QUILT.getPatchId();
|
||||||
else return null;
|
else return null;
|
||||||
|
|
Loading…
Reference in New Issue