Revert "Merge remote-tracking branch 'LasmGratel/async-itemrepo' into AE2-Omnifactory"

This reverts commit 86a42e970f.
This commit is contained in:
PrototypeTrousers
2022-11-09 18:49:44 -03:00
parent 82a906886f
commit 3ae251f098
5 changed files with 88 additions and 152 deletions
@@ -39,7 +39,7 @@ import appeng.api.storage.IStorageChannel;
* - For fluids: AEApi.instance().storage().getStorageChannel( IFluidStorageChannel.class).createList() * - For fluids: AEApi.instance().storage().getStorageChannel( IFluidStorageChannel.class).createList()
* - Replace with the corresponding {@link IStorageChannel} type for non native channels * - Replace with the corresponding {@link IStorageChannel} type for non native channels
*/ */
public interface IItemList<T extends IAEStack<T>> extends IItemContainer<T>, Iterable<T>, Cloneable public interface IItemList<T extends IAEStack<T>> extends IItemContainer<T>, Iterable<T>
{ {
/** /**
@@ -85,9 +85,4 @@ public interface IItemList<T extends IAEStack<T>> extends IItemContainer<T>, Ite
* resets stack sizes to 0. * resets stack sizes to 0.
*/ */
void resetStatus(); void resetStatus();
/**
* create a copy of this list.
*/
IItemList<T> clone();
} }
+26 -65
View File
@@ -39,22 +39,19 @@ import javax.annotation.Nonnull;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.regex.Pattern; import java.util.regex.Pattern;
public class ItemRepo { public class ItemRepo {
private final IItemList<IAEItemStack> list = AEApi.instance().storage().getStorageChannel(IItemStorageChannel.class).createList(); private final IItemList<IAEItemStack> list = AEApi.instance().storage().getStorageChannel(IItemStorageChannel.class).createList();
private final List<IAEItemStack> view; private final ArrayList<IAEItemStack> view = new ArrayList<>();
private List<IAEItemStack> asyncUpdatedView;
private boolean updated;
private final IScrollSource src; private final IScrollSource src;
private final ISortSource sortSrc; private final ISortSource sortSrc;
private int rowSize = 9; private int rowSize = 9;
private volatile String searchString = ""; private String searchString = "";
private IPartitionList<IAEItemStack> myPartitionList; private IPartitionList<IAEItemStack> myPartitionList;
private String innerSearch = ""; private String innerSearch = "";
private boolean hasPower; private boolean hasPower;
@@ -62,10 +59,6 @@ public class ItemRepo {
public ItemRepo(final IScrollSource src, final ISortSource sortSrc) { public ItemRepo(final IScrollSource src, final ISortSource sortSrc) {
this.src = src; this.src = src;
this.sortSrc = sortSrc; this.sortSrc = sortSrc;
this.view = Collections.synchronizedList(new ArrayList<>());
this.asyncUpdatedView = Collections.synchronizedList(new ArrayList<>());
list.forEach(this.view::add);
} }
public IAEItemStack getReferenceItem(int idx) { public IAEItemStack getReferenceItem(int idx) {
@@ -102,51 +95,42 @@ public class ItemRepo {
this.updateView(); this.updateView();
} }
private CompletableFuture<Void> searchTask = null;
public void updateView() { public void updateView() {
if (searchTask != null) {
return;
}
if (updated) {
this.view.clear(); this.view.clear();
this.view.addAll(asyncUpdatedView);
this.asyncUpdatedView.clear(); this.view.ensureCapacity(this.list.size());
this.updated = false;
final Enum viewMode = this.sortSrc.getSortDisplay();
final Enum searchMode = AEConfig.instance().getConfigManager().getSetting(Settings.SEARCH_MODE);
final boolean needsZeroCopy = viewMode == ViewItems.CRAFTABLE;
if (searchMode == SearchBoxMode.JEI_AUTOSEARCH || searchMode == SearchBoxMode.JEI_MANUAL_SEARCH || searchMode == SearchBoxMode.JEI_AUTOSEARCH_KEEP || searchMode == SearchBoxMode.JEI_MANUAL_SEARCH_KEEP) {
this.updateJEI(this.searchString);
} }
// Since sortSrc is final, so we can safely call it inside lambda final boolean terminalSearchToolTips = AEConfig.instance().getConfigManager().getSetting(Settings.SEARCH_TOOLTIPS) != YesNo.NO;
searchTask = CompletableFuture.supplyAsync(() -> {
IItemList<IAEItemStack> list = this.list.clone();
List<IAEItemStack> view = new ArrayList<>(list.size());
Enum viewMode = this.sortSrc.getSortDisplay();
boolean needsZeroCopy = viewMode == ViewItems.CRAFTABLE;
boolean terminalSearchToolTips = AEConfig.instance().getConfigManager().getSetting(Settings.SEARCH_TOOLTIPS) != YesNo.NO;
boolean searchMod = false; boolean searchMod = false;
String innerSearch = searchString.toLowerCase(); this.innerSearch = searchString.toLowerCase();
if (innerSearch.startsWith("@")) { if (this.innerSearch.startsWith("@")) {
searchMod = true; searchMod = true;
innerSearch = innerSearch.substring(1); this.innerSearch = this.innerSearch.substring(1);
} }
Pattern m = null; Pattern m = null;
try { try {
m = Pattern.compile(innerSearch, Pattern.CASE_INSENSITIVE); m = Pattern.compile(this.innerSearch, Pattern.CASE_INSENSITIVE);
} catch (final Throwable ignore) { } catch (final Throwable ignore) {
try { try {
m = Pattern.compile(Pattern.quote(innerSearch), Pattern.CASE_INSENSITIVE); m = Pattern.compile(Pattern.quote(this.innerSearch), Pattern.CASE_INSENSITIVE);
} catch (final Throwable __) { } catch (final Throwable __) {
return Collections.<IAEItemStack>emptyList(); return;
} }
} }
boolean notDone = false;
for (IAEItemStack is : list) { for (IAEItemStack is : this.list) {
if (this.myPartitionList != null) { if (this.myPartitionList != null) {
if (!this.myPartitionList.isListed(is)) { if (!this.myPartitionList.isListed(is)) {
continue; continue;
@@ -193,7 +177,7 @@ public class ItemRepo {
is.setStackSize(0); is.setStackSize(0);
} }
view.add(is); this.view.add(is);
} }
} }
@@ -204,26 +188,18 @@ public class ItemRepo {
ItemSorters.init(); ItemSorters.init();
if (SortBy == SortOrder.MOD) { if (SortBy == SortOrder.MOD) {
view.sort(ItemSorters.CONFIG_BASED_SORT_BY_MOD); Collections.sort(this.view, ItemSorters.CONFIG_BASED_SORT_BY_MOD);
} else if (SortBy == SortOrder.AMOUNT) { } else if (SortBy == SortOrder.AMOUNT) {
view.sort(ItemSorters.CONFIG_BASED_SORT_BY_SIZE); Collections.sort(this.view, ItemSorters.CONFIG_BASED_SORT_BY_SIZE);
} else if (SortBy == SortOrder.INVTWEAKS) { } else if (SortBy == SortOrder.INVTWEAKS) {
if (InventoryBogoSortModule.isLoaded()) { if (InventoryBogoSortModule.isLoaded()) {
view.sort(InventoryBogoSortModule.COMPARATOR); Collections.sort(this.view, InventoryBogoSortModule.COMPARATOR);
} else { } else {
view.sort(ItemSorters.CONFIG_BASED_SORT_BY_INV_TWEAKS); Collections.sort(this.view, ItemSorters.CONFIG_BASED_SORT_BY_INV_TWEAKS);
} }
} else { } else {
view.sort(ItemSorters.CONFIG_BASED_SORT_BY_NAME); Collections.sort(this.view, ItemSorters.CONFIG_BASED_SORT_BY_NAME);
} }
return view;
}).thenAcceptAsync(view -> {
this.view.clear();
this.view.addAll(view);
}).thenRunAsync(() -> {
this.searchTask = null; // Prevent redundant cancellation
});
} }
private void updateJEI(String filter) { private void updateJEI(String filter) {
@@ -235,10 +211,6 @@ public class ItemRepo {
} }
public void clear() { public void clear() {
if (searchTask != null) {
searchTask.cancel(true);
searchTask = null;
}
this.list.resetStatus(); this.list.resetStatus();
} }
@@ -264,17 +236,6 @@ public class ItemRepo {
public void setSearchString(@Nonnull final String searchString) { public void setSearchString(@Nonnull final String searchString) {
this.searchString = searchString; this.searchString = searchString;
if (searchTask != null) {
searchTask.cancel(true);
searchTask = null;
}
// Passive JEI auto search
final Enum<?> searchMode = AEConfig.instance().getConfigManager().getSetting(Settings.SEARCH_MODE);
if (searchMode == SearchBoxMode.JEI_AUTOSEARCH || searchMode == SearchBoxMode.JEI_MANUAL_SEARCH || searchMode == SearchBoxMode.JEI_AUTOSEARCH_KEEP || searchMode == SearchBoxMode.JEI_MANUAL_SEARCH_KEEP) {
this.updateJEI(this.searchString);
}
} }
public IItemList<IAEItemStack> getList() { public IItemList<IAEItemStack> getList() {
@@ -161,13 +161,6 @@ public final class FluidList implements IItemList<IAEFluidStack> {
} }
} }
@Override
public FluidList clone() {
FluidList list = new FluidList();
list.records.putAll(records);
return list;
}
private IAEFluidStack getFluidRecord(final IAEFluidStack fluid) { private IAEFluidStack getFluidRecord(final IAEFluidStack fluid) {
return this.records.get(fluid); return this.records.get(fluid);
} }
@@ -94,9 +94,4 @@ public class ItemListIgnoreCrafting<T extends IAEStack<T>> implements IItemList<
public void resetStatus() { public void resetStatus() {
this.target.resetStatus(); this.target.resetStatus();
} }
@Override
public ItemListIgnoreCrafting<T> clone() {
return new ItemListIgnoreCrafting<>(target);
}
} }
@@ -140,14 +140,6 @@ public final class ItemList implements IItemList<IAEItemStack> {
} }
} }
@Override
public ItemList clone() {
ItemList list = new ItemList();
list.records.putAll(records);
list.version.set(version.get());
return list;
}
private ItemVariantList getOrCreateRecord(Item item) { private ItemVariantList getOrCreateRecord(Item item) {
return this.records.computeIfAbsent(item, this::makeRecordMap); return this.records.computeIfAbsent(item, this::makeRecordMap);
} }