Use FIFO queue for loaded replays in replay center/viewer

This commit is contained in:
johni0702
2015-08-14 15:16:56 +02:00
parent 0b1e4b8e3e
commit 28f4356d34
2 changed files with 21 additions and 8 deletions

View File

@@ -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<GuiReplayListEntry> loadedReplaysQueue = new ConcurrentLinkedQueue<GuiReplayListEntry>();
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();
}

View File

@@ -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<Runnable> loadedReplaysQueue = new ConcurrentLinkedQueue<Runnable>();
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) {