Fixed issue with async modification of DownloadList. (fixes #62)

Signed-off-by: Jeffrey Han <itdelatrisu@gmail.com>
This commit is contained in:
Jeffrey Han 2015-03-28 12:41:17 -04:00
parent c15cd5cb4c
commit 77d42d7fd8
2 changed files with 18 additions and 5 deletions

View File

@ -56,9 +56,15 @@ public class DownloadList {
} }
/** /**
* Returns the DownloadNode at an index. * Returns the DownloadNode at an index, or null if the index is out of bounds.
*/ */
public DownloadNode getNode(int index) { return nodes.get(index); } public DownloadNode getNode(int index) {
try {
return nodes.get(index);
} catch (IndexOutOfBoundsException e) {
return null;
}
}
/** /**
* Gets the Download for a beatmap set ID, or null if not in the list. * Gets the Download for a beatmap set ID, or null if not in the list.
@ -100,8 +106,10 @@ public class DownloadList {
* Removes a DownloadNode from the list at the given index. * Removes a DownloadNode from the list at the given index.
*/ */
public void remove(int index) { public void remove(int index) {
DownloadNode node = nodes.remove(index); try {
map.remove(node.getID()); DownloadNode node = nodes.remove(index);
map.remove(node.getID());
} catch (IndexOutOfBoundsException e) {}
} }
/** /**

View File

@ -300,7 +300,10 @@ public class DownloadsMenu extends BasicGameState {
int index = startDownloadIndex + i; int index = startDownloadIndex + i;
if (index >= downloadsSize) if (index >= downloadsSize)
break; break;
DownloadList.get().getNode(index).drawDownload(g, i, index, DownloadNode.downloadContains(mouseX, mouseY, i)); DownloadNode node = DownloadList.get().getNode(index);
if (node == null)
break;
node.drawDownload(g, i, index, DownloadNode.downloadContains(mouseX, mouseY, i));
} }
// scroll bar // scroll bar
@ -632,6 +635,8 @@ public class DownloadsMenu extends BasicGameState {
if (DownloadNode.downloadIconContains(x, y, i)) { if (DownloadNode.downloadIconContains(x, y, i)) {
SoundController.playSound(SoundEffect.MENUCLICK); SoundController.playSound(SoundEffect.MENUCLICK);
DownloadNode node = DownloadList.get().getNode(index); DownloadNode node = DownloadList.get().getNode(index);
if (node == null)
return;
Download dl = node.getDownload(); Download dl = node.getDownload();
switch (dl.getStatus()) { switch (dl.getStatus()) {
case CANCELLED: case CANCELLED: