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();
}
+86 -125
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,128 +95,111 @@ public class ItemRepo {
this.updateView(); this.updateView();
} }
private CompletableFuture<Void> searchTask = null;
public void updateView() { public void updateView() {
if (searchTask != null) { this.view.clear();
return;
this.view.ensureCapacity(this.list.size());
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);
} }
if (updated) { final boolean terminalSearchToolTips = AEConfig.instance().getConfigManager().getSetting(Settings.SEARCH_TOOLTIPS) != YesNo.NO;
this.view.clear();
this.view.addAll(asyncUpdatedView); boolean searchMod = false;
this.asyncUpdatedView.clear();
this.updated = false; this.innerSearch = searchString.toLowerCase();
if (this.innerSearch.startsWith("@")) {
searchMod = true;
this.innerSearch = this.innerSearch.substring(1);
} }
// Since sortSrc is final, so we can safely call it inside lambda Pattern m = null;
searchTask = CompletableFuture.supplyAsync(() -> { try {
IItemList<IAEItemStack> list = this.list.clone(); m = Pattern.compile(this.innerSearch, Pattern.CASE_INSENSITIVE);
List<IAEItemStack> view = new ArrayList<>(list.size()); } catch (final Throwable ignore) {
Enum viewMode = this.sortSrc.getSortDisplay();
boolean needsZeroCopy = viewMode == ViewItems.CRAFTABLE;
boolean terminalSearchToolTips = AEConfig.instance().getConfigManager().getSetting(Settings.SEARCH_TOOLTIPS) != YesNo.NO;
boolean searchMod = false;
String innerSearch = searchString.toLowerCase();
if (innerSearch.startsWith("@")) {
searchMod = true;
innerSearch = innerSearch.substring(1);
}
Pattern m = null;
try { try {
m = Pattern.compile(innerSearch, Pattern.CASE_INSENSITIVE); m = Pattern.compile(Pattern.quote(this.innerSearch), Pattern.CASE_INSENSITIVE);
} catch (final Throwable ignore) { } catch (final Throwable __) {
try { return;
m = Pattern.compile(Pattern.quote(innerSearch), Pattern.CASE_INSENSITIVE); }
} catch (final Throwable __) { }
return Collections.<IAEItemStack>emptyList();
boolean notDone = false;
for (IAEItemStack is : this.list) {
if (this.myPartitionList != null) {
if (!this.myPartitionList.isListed(is)) {
continue;
} }
} }
if (viewMode == ViewItems.CRAFTABLE && !is.isCraftable()) {
continue;
}
for (IAEItemStack is : list) { if (viewMode == ViewItems.STORED && is.getStackSize() == 0) {
if (this.myPartitionList != null) { continue;
if (!this.myPartitionList.isListed(is)) { }
continue;
}
}
if (viewMode == ViewItems.CRAFTABLE && !is.isCraftable()) { final String dspName = (searchMod ? Platform.getModId(is) : Platform.getItemDisplayName(is)).toLowerCase();
continue; boolean foundMatchingItemStack = true;
}
if (viewMode == ViewItems.STORED && is.getStackSize() == 0) { for (String term : innerSearch.split(" ")) {
continue; if (term.length() > 1 && (term.startsWith("-") || term.startsWith("!"))) {
} term = term.substring(1);
if (dspName.contains(term)) {
final String dspName = (searchMod ? Platform.getModId(is) : Platform.getItemDisplayName(is)).toLowerCase();
boolean foundMatchingItemStack = true;
for (String term : innerSearch.split(" ")) {
if (term.length() > 1 && (term.startsWith("-") || term.startsWith("!"))) {
term = term.substring(1);
if (dspName.contains(term)) {
foundMatchingItemStack = false;
break;
}
} else if (!dspName.contains(term)) {
foundMatchingItemStack = false; foundMatchingItemStack = false;
break; break;
} }
} } else if (!dspName.contains(term)) {
foundMatchingItemStack = false;
if (terminalSearchToolTips && !foundMatchingItemStack) { break;
final List<String> tooltip = Platform.getTooltip(is);
for (final String line : tooltip) {
if (m.matcher(line).find()) {
foundMatchingItemStack = true;
break;
}
}
}
if (foundMatchingItemStack) {
if (needsZeroCopy) {
is = is.copy();
is.setStackSize(0);
}
view.add(is);
} }
} }
final Enum SortBy = this.sortSrc.getSortBy(); if (terminalSearchToolTips && !foundMatchingItemStack) {
final Enum SortDir = this.sortSrc.getSortDir(); final List<String> tooltip = Platform.getTooltip(is);
for (final String line : tooltip) {
ItemSorters.setDirection((appeng.api.config.SortDir) SortDir); if (m.matcher(line).find()) {
ItemSorters.init(); foundMatchingItemStack = true;
break;
if (SortBy == SortOrder.MOD) { }
view.sort(ItemSorters.CONFIG_BASED_SORT_BY_MOD);
} else if (SortBy == SortOrder.AMOUNT) {
view.sort(ItemSorters.CONFIG_BASED_SORT_BY_SIZE);
} else if (SortBy == SortOrder.INVTWEAKS) {
if (InventoryBogoSortModule.isLoaded()) {
view.sort(InventoryBogoSortModule.COMPARATOR);
} else {
view.sort(ItemSorters.CONFIG_BASED_SORT_BY_INV_TWEAKS);
} }
}
if (foundMatchingItemStack) {
if (needsZeroCopy) {
is = is.copy();
is.setStackSize(0);
}
this.view.add(is);
}
}
final Enum SortBy = this.sortSrc.getSortBy();
final Enum SortDir = this.sortSrc.getSortDir();
ItemSorters.setDirection((appeng.api.config.SortDir) SortDir);
ItemSorters.init();
if (SortBy == SortOrder.MOD) {
Collections.sort(this.view, ItemSorters.CONFIG_BASED_SORT_BY_MOD);
} else if (SortBy == SortOrder.AMOUNT) {
Collections.sort(this.view, ItemSorters.CONFIG_BASED_SORT_BY_SIZE);
} else if (SortBy == SortOrder.INVTWEAKS) {
if (InventoryBogoSortModule.isLoaded()) {
Collections.sort(this.view, InventoryBogoSortModule.COMPARATOR);
} else { } else {
view.sort(ItemSorters.CONFIG_BASED_SORT_BY_NAME); Collections.sort(this.view, ItemSorters.CONFIG_BASED_SORT_BY_INV_TWEAKS);
} }
} else {
return view; Collections.sort(this.view, ItemSorters.CONFIG_BASED_SORT_BY_NAME);
}).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);
} }