From 28f4356d343d2cdc7c89f72a241a1c5b7876d598 Mon Sep 17 00:00:00 2001 From: johni0702 Date: Fri, 14 Aug 2015 15:16:56 +0200 Subject: [PATCH] Use FIFO queue for loaded replays in replay center/viewer --- .../replaymod/gui/online/GuiReplayCenter.java | 16 +++++++++------- .../gui/replayviewer/GuiReplayViewer.java | 13 ++++++++++++- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/main/java/eu/crushedpixel/replaymod/gui/online/GuiReplayCenter.java b/src/main/java/eu/crushedpixel/replaymod/gui/online/GuiReplayCenter.java index 62619421..d3674af1 100755 --- a/src/main/java/eu/crushedpixel/replaymod/gui/online/GuiReplayCenter.java +++ b/src/main/java/eu/crushedpixel/replaymod/gui/online/GuiReplayCenter.java @@ -22,8 +22,9 @@ import org.lwjgl.input.Keyboard; import java.awt.*; import java.io.File; import java.io.IOException; -import java.util.ArrayList; +import java.util.*; import java.util.List; +import java.util.concurrent.ConcurrentLinkedQueue; public class GuiReplayCenter extends GuiScreen implements GuiYesNoCallback { @@ -41,6 +42,8 @@ public class GuiReplayCenter extends GuiScreen implements GuiYesNoCallback { private GuiAdvancedTextField searchNameInput, searchServerInput; private GuiButton searchActionButton; + private Queue loadedReplaysQueue = new ConcurrentLinkedQueue(); + private boolean showSearchFields = false; public static GuiYesNo getYesNoGui(GuiYesNoCallback p_152129_0_, int p_152129_2_) { @@ -449,6 +452,9 @@ public class GuiReplayCenter extends GuiScreen implements GuiYesNoCallback { searchNameInput.updateCursorCounter(); searchServerInput.updateCursorCounter(); } + while (!loadedReplaysQueue.isEmpty()) { + currentList.addEntry(currentList.getEntries().size() - 1, loadedReplaysQueue.poll()); + } } @Override @@ -485,6 +491,7 @@ public class GuiReplayCenter extends GuiScreen implements GuiYesNoCallback { Thread.currentThread().interrupt(); } } + loadedReplaysQueue.clear(); } public void show(final Pagination pagination) { @@ -512,12 +519,7 @@ public class GuiReplayCenter extends GuiScreen implements GuiYesNoCallback { ReplayMod.apiClient.downloadThumbnail(i.getId(), tmp); } final GuiReplayListEntry entry = new GuiReplayListEntry(currentList, i, tmp); - mc.addScheduledTask(new Runnable() { - @Override - public void run() { - currentList.addEntry(currentList.getEntries().size() - 1, entry); - } - }); + loadedReplaysQueue.offer(entry); } catch(Exception e) { e.printStackTrace(); } diff --git a/src/main/java/eu/crushedpixel/replaymod/gui/replayviewer/GuiReplayViewer.java b/src/main/java/eu/crushedpixel/replaymod/gui/replayviewer/GuiReplayViewer.java index e115a330..cea3abbb 100755 --- a/src/main/java/eu/crushedpixel/replaymod/gui/replayviewer/GuiReplayViewer.java +++ b/src/main/java/eu/crushedpixel/replaymod/gui/replayviewer/GuiReplayViewer.java @@ -33,6 +33,7 @@ import java.io.File; import java.io.IOException; import java.util.*; import java.util.List; +import java.util.concurrent.ConcurrentLinkedQueue; public class GuiReplayViewer extends GuiScreen implements GuiYesNoCallback { @@ -52,6 +53,8 @@ public class GuiReplayViewer extends GuiScreen implements GuiYesNoCallback { private GuiButton deleteButton; private boolean delete_file = false; + private Queue loadedReplaysQueue = new ConcurrentLinkedQueue(); + private Thread fileReloader; private class FileReloaderThread extends Thread { @@ -86,7 +89,7 @@ public class GuiReplayViewer extends GuiScreen implements GuiYesNoCallback { } final File thumb = tmp; - mc.addScheduledTask(new Runnable() { + loadedReplaysQueue.offer(new Runnable() { @Override public void run() { addEntry(file, metaData, thumb); @@ -273,6 +276,14 @@ public class GuiReplayViewer extends GuiScreen implements GuiYesNoCallback { } } + @Override + public void updateScreen() { + super.updateScreen(); + while (!loadedReplaysQueue.isEmpty()) { + loadedReplaysQueue.poll().run(); + } + } + private boolean currentFileUploaded = false; public void setButtonsEnabled(boolean b) {