From 70c70fd812964aced8f4febd057e31e73999fff7 Mon Sep 17 00:00:00 2001 From: Jeffrey Han Date: Sun, 1 Feb 2015 02:10:17 -0500 Subject: [PATCH] Implemented an internal beatmap downloader (using Bloodcat). The downloads menu can be accessed through the button on the right side of the main menu. The downloader supports searching and concurrent downloads (NOTE: this is limited by the download server!). Double-click any search result to begin downloading it to the SongPacks directory; cancel the download by hitting the red 'x' in the upper-right corner. A confirmation will appear if trying to quit opsu! while downloads are running. New classes: - Download: represents an individual download from a remote address to a local path, and provides status and progress information; downloads files using Java NIO. - DownloadNode: holds a Download object as well as additional beatmap fields, and handles drawing. - DownloadList: manages the current list of downloads. - DownloadsMenu: game state controller. - DownloadServer: interface for a beatmap download server. - BloodcatServer: implements DownloadServer using Bloodcat. - ReadableByteChannelWrapper: wrapper for ReadableByteChannel that tracks progress. Added images: - "downloads" image by @kouyang. - "search-background" image from "Minimalist Miku" skin (listed in credits). - "delete" icon by Visual Pharm (https://www.iconfinder.com/icons/27842/) under CC BY-ND 3.0. Other changes: - Added up/down/left/right Expand directions to MenuButton class. - Removed width/height parameters from OsuParser (leftovers). Signed-off-by: Jeffrey Han --- README.md | 3 +- pom.xml | 5 + res/delete.png | Bin 0 -> 2812 bytes res/downloads.png | Bin 0 -> 8352 bytes res/search-background.jpg | Bin 0 -> 233142 bytes src/itdelatrisu/opsu/Container.java | 10 + src/itdelatrisu/opsu/GameImage.java | 30 +- src/itdelatrisu/opsu/MenuButton.java | 12 +- src/itdelatrisu/opsu/Opsu.java | 13 +- src/itdelatrisu/opsu/OsuParser.java | 4 +- src/itdelatrisu/opsu/Utils.java | 21 +- .../opsu/downloads/BloodcatServer.java | 134 +++++ src/itdelatrisu/opsu/downloads/Download.java | 256 ++++++++ .../opsu/downloads/DownloadList.java | 144 +++++ .../opsu/downloads/DownloadNode.java | 396 +++++++++++++ .../opsu/downloads/DownloadServer.java | 52 ++ .../downloads/ReadableByteChannelWrapper.java | 62 ++ .../opsu/states/DownloadsMenu.java | 552 ++++++++++++++++++ src/itdelatrisu/opsu/states/MainMenu.java | 23 + src/itdelatrisu/opsu/states/SongMenu.java | 2 +- src/itdelatrisu/opsu/states/Splash.java | 4 +- 21 files changed, 1701 insertions(+), 22 deletions(-) create mode 100644 res/delete.png create mode 100644 res/downloads.png create mode 100644 res/search-background.jpg create mode 100644 src/itdelatrisu/opsu/downloads/BloodcatServer.java create mode 100644 src/itdelatrisu/opsu/downloads/Download.java create mode 100644 src/itdelatrisu/opsu/downloads/DownloadList.java create mode 100644 src/itdelatrisu/opsu/downloads/DownloadNode.java create mode 100644 src/itdelatrisu/opsu/downloads/DownloadServer.java create mode 100644 src/itdelatrisu/opsu/downloads/ReadableByteChannelWrapper.java create mode 100644 src/itdelatrisu/opsu/states/DownloadsMenu.java diff --git a/README.md b/README.md index 25c83756..2827413d 100644 --- a/README.md +++ b/README.md @@ -16,9 +16,10 @@ The Java Runtime Environment (JRE) must be installed in order to run opsu!. The download page is located [here](https://www.java.com/en/download/). ### Beatmaps -opsu! also requires beatmaps to run, which are available for download on the +opsu! requires beatmaps to run, which are available for download on the [osu! website](https://osu.ppy.sh/p/beatmaplist) and mirror sites such as [osu!Mirror](https://osu.yas-online.net/) or [Bloodcat](http://bloodcat.com/osu/). +Beatmaps can also be downloaded directly through opsu! in the downloads menu. If osu! is already installed, this application will attempt to load songs directly from the osu! program folder. Otherwise, place songs in the generated diff --git a/pom.xml b/pom.xml index 8641dcd4..f0c22637 100644 --- a/pom.xml +++ b/pom.xml @@ -138,5 +138,10 @@ sqlite-jdbc 3.8.7 + + org.json + json + 20140107 + \ No newline at end of file diff --git a/res/delete.png b/res/delete.png new file mode 100644 index 0000000000000000000000000000000000000000..6c10e115087899c4a32a99ab210f831340f46e94 GIT binary patch literal 2812 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 YqIuFW;@8uED*di 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%0AuBIF`n; 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 MFYd;>@_Xk00#|)KV*mgE literal 0 HcmV?d00001 diff --git a/src/itdelatrisu/opsu/Container.java b/src/itdelatrisu/opsu/Container.java index 68a1709e..0ba30ca9 100644 --- a/src/itdelatrisu/opsu/Container.java +++ b/src/itdelatrisu/opsu/Container.java @@ -19,6 +19,7 @@ package itdelatrisu.opsu; import itdelatrisu.opsu.audio.MusicController; +import itdelatrisu.opsu.downloads.DownloadList; import org.newdawn.slick.AppGameContainer; import org.newdawn.slick.Game; @@ -110,4 +111,13 @@ public class Container extends AppGameContainer { throw e; // re-throw exception } } + + @Override + public void exit() { + // show confirmation dialog if any downloads are active + if (DownloadList.get().hasActiveDownloads() && DownloadList.showExitConfirmation()) + return; + + super.exit(); + } } diff --git a/src/itdelatrisu/opsu/GameImage.java b/src/itdelatrisu/opsu/GameImage.java index 2ffc139e..2e90a4c1 100644 --- a/src/itdelatrisu/opsu/GameImage.java +++ b/src/itdelatrisu/opsu/GameImage.java @@ -465,6 +465,26 @@ public enum GameImage { return img.getScaledCopy((h * 0.15f) / img.getHeight()); } }, + DOWNLOADS ("downloads", "png", false, false) { + @Override + protected Image process_sub(Image img, int w, int h) { + return img.getScaledCopy((h * 0.45f) / img.getHeight()); + } + }, + SEARCH_BG ("search-background", "png|jpg", false, true) { + @Override + protected Image process_sub(Image img, int w, int h) { + img.setAlpha(0.8f); + return img.getScaledCopy(w, h); + } + }, + DELETE ("delete", "png", false, false) { + @Override + protected Image process_sub(Image img, int w, int h) { + int lineHeight = Utils.FONT_DEFAULT.getLineHeight(); + return img.getScaledCopy(lineHeight, lineHeight); + } + }, HISTORY ("history", "png", false, false) { @Override protected Image process_sub(Image img, int w, int h) { @@ -573,10 +593,7 @@ public enum GameImage { * @param type the file types (separated by '|') */ GameImage(String filename, String type) { - this.filename = filename; - this.type = getType(type); - this.skinnable = true; - this.preload = true; + this(filename, type, true, true); } /** @@ -586,11 +603,8 @@ public enum GameImage { * @param type the file types (separated by '|') */ GameImage(String filename, String filenameFormat, String type) { - this.filename = filename; + this(filename, type, true, true); this.filenameFormat = filenameFormat; - this.type = getType(type); - this.skinnable = true; - this.preload = true; } /** diff --git a/src/itdelatrisu/opsu/MenuButton.java b/src/itdelatrisu/opsu/MenuButton.java index fecf0338..50778c90 100644 --- a/src/itdelatrisu/opsu/MenuButton.java +++ b/src/itdelatrisu/opsu/MenuButton.java @@ -50,7 +50,7 @@ public class MenuButton { private Expand dir = Expand.CENTER; /** Scaled expansion directions (for hovering). */ - public enum Expand { CENTER, UP_RIGHT, UP_LEFT, DOWN_RIGHT, DOWN_LEFT; } + public enum Expand { CENTER, UP, RIGHT, LEFT, DOWN, UP_RIGHT, UP_LEFT, DOWN_RIGHT, DOWN_LEFT; } /** * Creates a new button from an Image. @@ -137,7 +137,7 @@ public class MenuButton { public void draw() { if (img != null) { if (imgL == null) { - Image imgScaled = img.getScaledCopy(scale); + Image imgScaled = (scale == 1f) ? img : img.getScaledCopy(scale); imgScaled.setAlpha(img.getAlpha()); imgScaled.draw(x - xRadius, y - yRadius); } else { @@ -229,9 +229,13 @@ public class MenuButton { // offset by difference between normal/scaled image dimensions xOffset = (int) ((scale - 1f) * img.getWidth()); yOffset = (int) ((scale - 1f) * img.getHeight()); - if (dir == Expand.DOWN_RIGHT || dir == Expand.UP_RIGHT) + if (dir == Expand.UP || dir == Expand.DOWN) + xOffset = 0; // no horizontal offset + if (dir == Expand.RIGHT || dir == Expand.LEFT) + yOffset = 0; // no vertical offset + if (dir == Expand.RIGHT || dir == Expand.DOWN_RIGHT || dir == Expand.UP_RIGHT) xOffset *= -1; // flip x for right - if (dir == Expand.DOWN_LEFT || dir == Expand.DOWN_RIGHT) + if (dir == Expand.DOWN || dir == Expand.DOWN_LEFT || dir == Expand.DOWN_RIGHT) yOffset *= -1; // flip y for down } this.xRadius = ((img.getWidth() * scale) + xOffset) / 2f; diff --git a/src/itdelatrisu/opsu/Opsu.java b/src/itdelatrisu/opsu/Opsu.java index 0220f9aa..5cb28073 100644 --- a/src/itdelatrisu/opsu/Opsu.java +++ b/src/itdelatrisu/opsu/Opsu.java @@ -19,6 +19,8 @@ package itdelatrisu.opsu; import itdelatrisu.opsu.audio.MusicController; +import itdelatrisu.opsu.downloads.DownloadList; +import itdelatrisu.opsu.states.DownloadsMenu; import itdelatrisu.opsu.states.Game; import itdelatrisu.opsu.states.GamePauseMenu; import itdelatrisu.opsu.states.GameRanking; @@ -62,7 +64,8 @@ public class Opsu extends StateBasedGame { STATE_GAME = 4, STATE_GAMEPAUSEMENU = 5, STATE_GAMERANKING = 6, - STATE_OPTIONSMENU = 7; + STATE_OPTIONSMENU = 7, + STATE_DOWNLOADSMENU = 8; /** Server socket for restricting the program to a single instance. */ private static ServerSocket SERVER_SOCKET; @@ -85,6 +88,7 @@ public class Opsu extends StateBasedGame { addState(new GamePauseMenu(STATE_GAMEPAUSEMENU)); addState(new GameRanking(STATE_GAMERANKING)); addState(new OptionsMenu(STATE_OPTIONSMENU)); + addState(new DownloadsMenu(STATE_DOWNLOADSMENU)); } /** @@ -194,6 +198,10 @@ public class Opsu extends StateBasedGame { return false; } + // show confirmation dialog if any downloads are active + if (DownloadList.get().hasActiveDownloads() && DownloadList.showExitConfirmation()) + return false; + return true; } @@ -204,6 +212,9 @@ public class Opsu extends StateBasedGame { // close scores database ScoreDB.closeConnection(); + // cancel all downloads + DownloadList.get().cancelAllDownloads(); + // close server socket if (SERVER_SOCKET != null) { try { diff --git a/src/itdelatrisu/opsu/OsuParser.java b/src/itdelatrisu/opsu/OsuParser.java index d83da0f7..7e95e0fa 100644 --- a/src/itdelatrisu/opsu/OsuParser.java +++ b/src/itdelatrisu/opsu/OsuParser.java @@ -55,10 +55,8 @@ public class OsuParser { /** * Invokes parser for each OSU file in a root directory. * @param root the root directory (search has depth 1) - * @param width the container width - * @param height the container height */ - public static void parseAllFiles(File root, int width, int height) { + public static void parseAllFiles(File root) { // create a new OsuGroupList OsuGroupList.create(); diff --git a/src/itdelatrisu/opsu/Utils.java b/src/itdelatrisu/opsu/Utils.java index 7de530bd..5d32e8bb 100644 --- a/src/itdelatrisu/opsu/Utils.java +++ b/src/itdelatrisu/opsu/Utils.java @@ -20,6 +20,7 @@ package itdelatrisu.opsu; import itdelatrisu.opsu.audio.SoundController; import itdelatrisu.opsu.audio.SoundEffect; +import itdelatrisu.opsu.downloads.DownloadNode; import java.awt.Font; import java.awt.image.BufferedImage; @@ -71,7 +72,8 @@ public class Utils { COLOR_ORANGE_OBJECT = new Color(255, 200, 32), COLOR_YELLOW_ALPHA = new Color(255, 255, 0, 0.4f), COLOR_WHITE_FADE = new Color(255, 255, 255, 1f), - COLOR_RED_HOVER = new Color(255, 112, 112); + COLOR_RED_HOVER = new Color(255, 112, 112), + COLOR_GREEN = new Color(137, 201, 79); /** The default map colors, used when a map does not provide custom colors. */ public static final Color[] DEFAULT_COMBO = { @@ -201,6 +203,9 @@ public class Utils { // initialize score data buttons ScoreData.init(width, height); + // initialize download nodes + DownloadNode.init(width, height); + // back button Image back = GameImage.MENU_BACK.getImage(); backButton = new MenuButton(back, @@ -685,4 +690,18 @@ public class Utils { } } } + + /** + * Returns a human-readable representation of a given number of bytes. + * @param bytes the number of bytes + * @return the string representation + * @author aioobe (http://stackoverflow.com/a/3758880) + */ + public static String bytesToString(long bytes) { + if (bytes < 1024) + return bytes + " B"; + int exp = (int) (Math.log(bytes) / Math.log(1024)); + char pre = "KMGTPE".charAt(exp - 1); + return String.format("%.1f %cB", bytes / Math.pow(1024, exp), pre); + } } \ No newline at end of file diff --git a/src/itdelatrisu/opsu/downloads/BloodcatServer.java b/src/itdelatrisu/opsu/downloads/BloodcatServer.java new file mode 100644 index 00000000..cdc167de --- /dev/null +++ b/src/itdelatrisu/opsu/downloads/BloodcatServer.java @@ -0,0 +1,134 @@ +/* + * opsu! - an open-source osu! client + * Copyright (C) 2014, 2015 Jeffrey Han + * + * opsu! is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * opsu! is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with opsu!. If not, see . + */ + +package itdelatrisu.opsu.downloads; + +import itdelatrisu.opsu.ErrorHandler; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.SocketTimeoutException; +import java.net.URL; +import java.net.URLEncoder; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +/** + * Download server: http://bloodcat.com/osu/ + */ +public class BloodcatServer implements DownloadServer { + /** Formatted download URL: {@code beatmapSetID} */ + private static final String DOWNLOAD_URL = "http://bloodcat.com/osu/s/%d"; + + /** Formatted search URL: {@code query,rankedOnly,page} */ + private static final String SEARCH_URL = "http://bloodcat.com/osu/?q=%s&m=b&c=%s&g=&d=0&s=date&o=0&p=%d&mod=json"; + + /** Total result count from the last query. */ + private int totalResults = -1; + + /** Constructor. */ + public BloodcatServer() {} + + @Override + public String getURL(int beatmapSetID) { + return String.format(DOWNLOAD_URL, beatmapSetID); + } + + @Override + public DownloadNode[] resultList(String query, int page, boolean rankedOnly) throws IOException { + DownloadNode[] nodes = null; + try { + // read JSON + String search = String.format(SEARCH_URL, URLEncoder.encode(query, "UTF-8"), rankedOnly ? "0" : "", page); + JSONObject json = readJsonFromUrl(new URL(search)); + if (json == null) { + this.totalResults = -1; + return null; + } + + // parse result list + JSONArray arr = json.getJSONArray("results"); + nodes = new DownloadNode[arr.length()]; + for (int i = 0; i < nodes.length; i++) { + JSONObject item = arr.getJSONObject(i); + nodes[i] = new DownloadNode( + item.getInt("id"), item.getString("date"), + item.getString("title"), item.isNull("titleUnicode") ? null : item.getString("titleUnicode"), + item.getString("artist"), item.isNull("artistUnicode") ? null : item.getString("artistUnicode"), + item.getString("creator") + ); + } + + // store total result count + this.totalResults = json.getInt("resultCount"); + } catch (MalformedURLException | UnsupportedEncodingException e) { + ErrorHandler.error(String.format("Problem loading result list for query '%s'.", query), e, true); + } + return nodes; + } + + @Override + public int totalResults() { return totalResults; } + + /** + * Returns a JSON object from a URL. + * @param url the remote URL + * @return the JSON object + * @author Roland Illig (http://stackoverflow.com/a/4308662) + */ + public static JSONObject readJsonFromUrl(URL url) throws IOException { + // open connection + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setConnectTimeout(Download.CONNECTION_TIMEOUT); + conn.setReadTimeout(Download.READ_TIMEOUT); + conn.setUseCaches(false); + try { + conn.connect(); + } catch (SocketTimeoutException e) { + ErrorHandler.error("Connection to server timed out.", e, false); + throw e; + } + + if (Thread.interrupted()) + return null; + + // read JSON + JSONObject json = null; + try (InputStream in = conn.getInputStream()) { + BufferedReader rd = new BufferedReader(new InputStreamReader(in)); + StringBuilder sb = new StringBuilder(); + int c; + while ((c = rd.read()) != -1) + sb.append((char) c); + json = new JSONObject(sb.toString()); + } catch (SocketTimeoutException e) { + ErrorHandler.error("Connection to server timed out.", e, false); + throw e; + } catch (JSONException e1) { + ErrorHandler.error("Failed to create JSON object.", e1, true); + } + return json; + } +} diff --git a/src/itdelatrisu/opsu/downloads/Download.java b/src/itdelatrisu/opsu/downloads/Download.java new file mode 100644 index 00000000..8c9df683 --- /dev/null +++ b/src/itdelatrisu/opsu/downloads/Download.java @@ -0,0 +1,256 @@ +/* + * opsu! - an open-source osu! client + * Copyright (C) 2014, 2015 Jeffrey Han + * + * opsu! is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * opsu! is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with opsu!. If not, see . + */ + +package itdelatrisu.opsu.downloads; + +import itdelatrisu.opsu.ErrorHandler; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import java.nio.channels.Channels; +import java.nio.channels.ReadableByteChannel; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; + +/** + * File download. + */ +public class Download { + /** Connection timeout, in ms. */ + public static final int CONNECTION_TIMEOUT = 5000; + + /** Read timeout, in ms. */ + public static final int READ_TIMEOUT = 10000; + + /** Download statuses. */ + public enum Status { + WAITING ("Waiting"), + DOWNLOADING ("Downloading"), + COMPLETE ("Complete"), + CANCELLED ("Cancelled"), + ERROR ("Error"); + + /** The status name. */ + private String name; + + /** + * Constructor. + * @param name the status name. + */ + Status(String name) { + this.name = name; + } + + /** + * Returns the status name. + */ + public String getName() { return name; } + } + + /** The local path. */ + private String localPath; + + /** The local path to rename the file to when finished. */ + private String rename; + + /** The download URL. */ + private URL url; + + /** The readable byte channel. */ + private ReadableByteChannelWrapper rbc; + + /** The file output stream. */ + private FileOutputStream fos; + + /** The size of the download. */ + private int contentLength = -1; + + /** The download status. */ + private Status status = Status.WAITING; + + /** + * Constructor. + * @param remoteURL the download URL + * @param localPath the path to save the download + */ + public Download(String remoteURL, String localPath) { + this(remoteURL, localPath, null); + } + + /** + * Constructor. + * @param remoteURL the download URL + * @param localPath the path to save the download + * @param rename the file name to rename the download to when complete + */ + public Download(String remoteURL, String localPath, String rename) { + try { + this.url = new URL(remoteURL); + } catch (MalformedURLException e) { + this.status = Status.ERROR; + ErrorHandler.error(String.format("Bad download URL: '%s'", remoteURL), e, true); + return; + } + this.localPath = localPath; + this.rename = rename; + } + + /** + * Starts the download from the "waiting" status. + */ + public void start() { + if (status != Status.WAITING) + return; + + new Thread() { + @Override + public void run() { + // open connection, get content length + HttpURLConnection conn = null; + try { + conn = (HttpURLConnection) url.openConnection(); + conn.setConnectTimeout(CONNECTION_TIMEOUT); + conn.setReadTimeout(READ_TIMEOUT); + conn.setUseCaches(false); + contentLength = conn.getContentLength(); + } catch (IOException e) { + status = Status.ERROR; + ErrorHandler.error("Failed to open connection.", e, false); + return; + } + + // download file + try ( + InputStream in = conn.getInputStream(); + ReadableByteChannel readableByteChannel = Channels.newChannel(in); + FileOutputStream fileOutputStream = new FileOutputStream(localPath); + ) { + rbc = new ReadableByteChannelWrapper(readableByteChannel); + fos = fileOutputStream; + status = Status.DOWNLOADING; + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + if (status == Status.DOWNLOADING) { // not interrupted + status = Status.COMPLETE; + rbc.close(); + fos.close(); + if (rename != null) { + Path source = new File(localPath).toPath(); + Files.move(source, source.resolveSibling(rename), StandardCopyOption.REPLACE_EXISTING); + } + } + } catch (Exception e) { + status = Status.ERROR; + ErrorHandler.error("Failed to start download.", e, false); + } + } + }.start(); + } + + /** + * Returns the download status. + */ + public Status getStatus() { return status; } + + /** + * Returns true if transfers are currently taking place. + */ + public boolean isTransferring() { + return (rbc != null && rbc.isOpen() && fos != null && fos.getChannel().isOpen()); + } + + /** + * Returns true if the download is active. + */ + public boolean isActive() { + return (status == Status.WAITING || status == Status.DOWNLOADING); + } + + /** + * Returns the size of the download content in bytes, or -1 if not calculated + * (or if an error has occurred). + */ + public int contentLength() { return contentLength; } + + /** + * Returns the download completion percentage, or -1f if an error has occurred. + */ + public float getProgress() { + switch (status) { + case WAITING: + return 0f; + case COMPLETE: + return 100f; + case DOWNLOADING: + if (rbc != null && fos != null && contentLength > 0) + return (float) rbc.getReadSoFar() / (float) contentLength * 100f; + else + return 0f; + case CANCELLED: + case ERROR: + default: + return -1f; + } + } + + /** + * Returns the number of bytes read so far. + */ + public long readSoFar() { + switch (status) { + case COMPLETE: + return contentLength; + case DOWNLOADING: + if (rbc != null) + return rbc.getReadSoFar(); + // else fall through + case WAITING: + case CANCELLED: + case ERROR: + default: + return 0; + } + } + + /** + * Cancels the download, if running. + */ + public void cancel() { + try { + this.status = Status.CANCELLED; + boolean transferring = isTransferring(); + if (rbc != null && rbc.isOpen()) + rbc.close(); + if (fos != null && fos.getChannel().isOpen()) + fos.close(); + if (transferring) { + File f = new File(localPath); + if (f.isFile()) + f.delete(); + } + } catch (IOException e) { + this.status = Status.ERROR; + ErrorHandler.error("Failed to cancel download.", e, true); + } + } +} diff --git a/src/itdelatrisu/opsu/downloads/DownloadList.java b/src/itdelatrisu/opsu/downloads/DownloadList.java new file mode 100644 index 00000000..8c5c943e --- /dev/null +++ b/src/itdelatrisu/opsu/downloads/DownloadList.java @@ -0,0 +1,144 @@ +/* + * opsu! - an open-source osu! client + * Copyright (C) 2014, 2015 Jeffrey Han + * + * opsu! is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * opsu! is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with opsu!. If not, see . + */ + +package itdelatrisu.opsu.downloads; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.swing.JOptionPane; +import javax.swing.UIManager; + +import org.newdawn.slick.util.Log; + +/** + * Maintains the current downloads list. + */ +public class DownloadList { + /** The single instance of this class. */ + private static DownloadList list = new DownloadList(); + + /** Current list of downloads. */ + private List nodes; + + /** The map of beatmap set IDs to DownloadNodes for the current downloads. */ + private Map map; + + /** + * Returns the single instance of this class. + */ + public static DownloadList get() { return list; } + + /** + * Constructor. + */ + private DownloadList() { + nodes = new ArrayList(); + map = new HashMap(); + } + + /** + * Returns the DownloadNode at an index. + */ + public DownloadNode getNode(int index) { return nodes.get(index); } + + /** + * Gets the Download for a beatmap set ID, or null if not in the list. + */ + public Download getDownload(int beatmapSetID) { + DownloadNode node = map.get(beatmapSetID); + return (node == null) ? null : node.getDownload(); + } + + /** + * Returns the size of the doownloads list. + */ + public int size() { return nodes.size(); } + + /** + * Returns {@code true} if this list contains no elements. + */ + public boolean isEmpty() { return nodes.isEmpty(); } + + /** + * Returns {@code true} if this list contains the beatmap set ID. + */ + public boolean contains(int beatmapSetID) { return map.containsKey(beatmapSetID); } + + /** + * Adds a DownloadNode to the list. + */ + public void addNode(DownloadNode node) { + nodes.add(node); + map.put(node.getID(), node); + } + + /** + * Removes a DownloadNode from the list. + */ + public void remove(DownloadNode node) { remove(nodes.indexOf(node)); } + + /** + * Removes a DownloadNode from the list at the given index. + */ + public void remove(int index) { + DownloadNode node = nodes.remove(index); + map.remove(node.getID()); + } + + /** + * Returns {@code true} if the list contains any downloads that are active. + */ + public boolean hasActiveDownloads() { + for (DownloadNode node: nodes) { + Download dl = node.getDownload(); + if (dl != null && dl.isActive()) + return true; + } + return false; + } + + /** + * Cancels all downloads. + */ + public void cancelAllDownloads() { + for (DownloadNode node : nodes) { + Download dl = node.getDownload(); + if (dl != null && dl.isActive()) + dl.cancel(); + } + } + + /** + * Shows a confirmation dialog (used before exiting the game). + * @return true if user selects "yes", false otherwise + */ + public static boolean showExitConfirmation() { + try { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + } catch (Exception e) { + Log.error("Could not set system look and feel for Container.", e); + } + int n = JOptionPane.showConfirmDialog(null, + "Beatmap downloads are in progress.\nAre you sure you want to quit opsu!?", + "Warning", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); + return (n != JOptionPane.YES_OPTION); + } +} diff --git a/src/itdelatrisu/opsu/downloads/DownloadNode.java b/src/itdelatrisu/opsu/downloads/DownloadNode.java new file mode 100644 index 00000000..615262c7 --- /dev/null +++ b/src/itdelatrisu/opsu/downloads/DownloadNode.java @@ -0,0 +1,396 @@ +/* + * opsu! - an open-source osu! client + * Copyright (C) 2014, 2015 Jeffrey Han + * + * opsu! is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * opsu! is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with opsu!. If not, see . + */ + +package itdelatrisu.opsu.downloads; + +import itdelatrisu.opsu.ErrorHandler; +import itdelatrisu.opsu.GameImage; +import itdelatrisu.opsu.Options; +import itdelatrisu.opsu.Utils; +import itdelatrisu.opsu.downloads.Download.Status; +import itdelatrisu.opsu.states.DownloadsMenu; + +import java.io.File; + +import org.newdawn.slick.Color; +import org.newdawn.slick.Graphics; +import org.newdawn.slick.Image; + +/** + * Node containing song data and a Download object. + */ +public class DownloadNode { + /** The associated Download object. */ + private Download download; + + /** Beatmap set ID. */ + private int beatmapSetID; + + /** Last updated date string. */ + private String date; + + /** Song title. */ + private String title, titleUnicode; + + /** Song artist. */ + private String artist, artistUnicode; + + /** Beatmap creator. */ + private String creator; + + /** Button drawing values. */ + private static float buttonBaseX, buttonBaseY, buttonWidth, buttonHeight, buttonOffset; + + /** Information drawing values. */ + private static float infoBaseX, infoBaseY, infoWidth, infoHeight; + + /** Container dimensions. */ + private static int containerWidth, containerHeight; + + /** Button background colors. */ + public static final Color + BG_NORMAL = new Color(0, 0, 0, 0.25f), + BG_HOVER = new Color(0, 0, 0, 0.5f), + BG_FOCUS = new Color(0, 0, 0, 0.75f); + + /** + * Initializes the base coordinates for drawing. + * @param width the container width + * @param height the container height + */ + public static void init(int width, int height) { + containerWidth = width; + containerHeight = height; + + // download result buttons + buttonBaseX = width * 0.024f; + buttonBaseY = height * 0.2f; + buttonWidth = width * 0.7f; + buttonHeight = Utils.FONT_MEDIUM.getLineHeight() * 2f; + buttonOffset = buttonHeight * 1.1f; + + // download info + infoBaseX = width * 0.75f; + infoBaseY = height * 0.07f + Utils.FONT_LARGE.getLineHeight() * 2f; + infoWidth = width * 0.25f; + infoHeight = Utils.FONT_DEFAULT.getLineHeight() * 2.4f; + } + + /** + * Returns true if the coordinates are within the bounds of the + * download result button at the given index. + * @param cx the x coordinate + * @param cy the y coordinate + * @param index the index (to offset the button from the topmost button) + */ + public static boolean resultContains(float cx, float cy, int index) { + float y = buttonBaseY + (index * buttonOffset); + return ((cx > buttonBaseX && cx < buttonBaseX + buttonWidth) && + (cy > y && cy < y + buttonHeight)); + } + + /** + * Returns true if the coordinates are within the bounds of the + * download result button area. + * @param cx the x coordinate + * @param cy the y coordinate + */ + public static boolean resultAreaContains(float cx, float cy) { + return ((cx > buttonBaseX && cx < buttonBaseX + buttonWidth) && + (cy > buttonBaseY && cy < buttonBaseY + buttonOffset * DownloadsMenu.MAX_RESULT_BUTTONS)); + } + + /** + * Returns true if the coordinates are within the bounds of the + * download information button at the given index. + * @param cx the x coordinate + * @param cy the y coordinate + * @param index the index (to offset the button from the topmost button) + */ + public static boolean downloadContains(float cx, float cy, int index) { + float y = infoBaseY + (index * infoHeight); + return ((cx > infoBaseX && cx <= containerWidth) && + (cy > y && cy < y + infoHeight)); + } + + /** + * Returns true if the coordinates are within the bounds of the + * download action icon at the given index. + * @param cx the x coordinate + * @param cy the y coordinate + * @param index the index (to offset the button from the topmost button) + */ + public static boolean downloadIconContains(float cx, float cy, int index) { + int iconWidth = GameImage.DELETE.getImage().getWidth(); + float edgeX = infoBaseX + infoWidth * 0.985f; + float y = infoBaseY + (index * infoHeight); + float marginY = infoHeight * 0.04f; + return ((cx > edgeX - iconWidth && cx < edgeX) && + (cy > y + marginY && cy < y + marginY + iconWidth)); + } + + /** + * Returns true if the coordinates are within the bounds of the + * download information button area. + * @param cx the x coordinate + * @param cy the y coordinate + */ + public static boolean downloadAreaContains(float cx, float cy) { + return ((cx > infoBaseX && cx <= containerWidth) && + (cy > infoBaseY && cy < infoBaseY + infoHeight * DownloadsMenu.MAX_DOWNLOADS_SHOWN)); + } + + /** + * Returns true if the coordinates are within the bounds of the + * previous page icon. + * @param cx the x coordinate + * @param cy the y coordinate + */ + public static boolean prevPageContains(float cx, float cy) { + Image img = GameImage.MUSIC_PREVIOUS.getImage(); + return ((cx > buttonBaseX && cx < buttonBaseX + img.getWidth()) && + (cy > buttonBaseY - img.getHeight() && cy < buttonBaseY)); + } + + /** + * Returns true if the coordinates are within the bounds of the + * next page icon. + * @param cx the x coordinate + * @param cy the y coordinate + */ + public static boolean nextPageContains(float cx, float cy) { + Image img = GameImage.MUSIC_NEXT.getImage(); + return ((cx > buttonBaseX + buttonWidth - img.getWidth() && cx < buttonBaseX + buttonWidth) && + (cy > buttonBaseY - img.getHeight() && cy < buttonBaseY)); + } + + /** + * Draws the scroll bar for the download result buttons. + * @param g the graphics context + * @param index the start button index + * @param total the total number of buttons + */ + public static void drawResultScrollbar(Graphics g, int index, int total) { + float scrollbarWidth = containerWidth * 0.00347f; + float heightRatio = 0.0016f * (total * total) - 0.0705f * total + 0.9965f; + float scrollbarHeight = containerHeight * heightRatio; + float heightDiff = buttonHeight + buttonOffset * (DownloadsMenu.MAX_RESULT_BUTTONS - 1) - scrollbarHeight; + float offsetY = heightDiff * ((float) index / (total - DownloadsMenu.MAX_RESULT_BUTTONS)); + g.setColor(BG_NORMAL); + g.fillRect(buttonBaseX + buttonWidth * 1.005f, buttonBaseY, scrollbarWidth, buttonOffset * DownloadsMenu.MAX_RESULT_BUTTONS); + g.setColor(Color.white); + g.fillRect(buttonBaseX + buttonWidth * 1.005f, buttonBaseY + offsetY, scrollbarWidth, scrollbarHeight); + } + + /** + * Draws the scroll bar for the download information area. + * @param g the graphics context + * @param index the start index + * @param total the total number of downloads + */ + public static void drawDownloadScrollbar(Graphics g, int index, int total) { + float scrollbarWidth = containerWidth * 0.00347f; + float heightRatio = 0.0016f * (total * total) - 0.0705f * total + 0.9965f; + float scrollbarHeight = containerHeight * heightRatio; + float heightDiff = infoHeight + infoHeight * (DownloadsMenu.MAX_DOWNLOADS_SHOWN - 1) - scrollbarHeight; + float offsetY = heightDiff * ((float) index / (total - DownloadsMenu.MAX_DOWNLOADS_SHOWN)); + g.setColor(BG_NORMAL); + g.fillRect(infoBaseX + infoWidth - scrollbarWidth, infoBaseY, scrollbarWidth, infoHeight * DownloadsMenu.MAX_DOWNLOADS_SHOWN); + g.setColor(Color.white); + g.fillRect(infoBaseX + infoWidth - scrollbarWidth, infoBaseY + offsetY, scrollbarWidth, scrollbarHeight); + } + + /** + * Draws the page number text and previous/next page icons. + * @param page the current page number + * @param prev whether to draw the previous page icon + * @param next whether to draw the next page icon + */ + public static void drawPageIcons(int page, boolean prev, boolean next) { + String pageText = String.format("Page %d", page); + Utils.FONT_BOLD.drawString( + buttonBaseX + (buttonWidth - Utils.FONT_BOLD.getWidth("Page 1")) / 2f, + buttonBaseY - Utils.FONT_BOLD.getLineHeight() * 1.3f, pageText, Color.white); + if (prev) { + Image prevImg = GameImage.MUSIC_PREVIOUS.getImage(); + prevImg.draw(buttonBaseX, buttonBaseY - prevImg.getHeight()); + } + if (next) { + Image nextImg = GameImage.MUSIC_NEXT.getImage(); + nextImg.draw(buttonBaseX + buttonWidth - nextImg.getWidth(), buttonBaseY - nextImg.getHeight()); + } + } + + /** + * Constructor. + */ + public DownloadNode(int beatmapSetID, String date, String title, + String titleUnicode, String artist, String artistUnicode, String creator) { + this.beatmapSetID = beatmapSetID; + this.date = date; + this.title = title; + this.titleUnicode = titleUnicode; + this.artist = artist; + this.artistUnicode = artistUnicode; + this.creator = creator; + } + + /** + * Creates a download object for this node. + * @param server the server to download from + * @see #getDownload() + */ + public void createDownload(DownloadServer server) { + if (download == null) { + String path = String.format("%s%c%d", Options.getOSZDir(), File.separatorChar, beatmapSetID); + String rename = String.format("%d %s - %s.osz", beatmapSetID, artist, title); + this.download = new Download(server.getURL(beatmapSetID), path, rename); + } + } + + /** + * Returns the associated download object, or null if none. + * @see #createDownload(DownloadServer) + */ + public Download getDownload() { return download; } + + /** + * Clears the associated download object, if any. + * @see #createDownload(DownloadServer) + */ + public void clearDownload() { download = null; } + + /** + * Returns the beatmap set ID. + */ + public int getID() { return beatmapSetID; } + + /** + * Returns the last updated date. + */ + public String getDate() { return date; } + + /** + * Returns the song title. + * If configured, the Unicode string will be returned instead. + */ + public String getTitle() { + return (Options.useUnicodeMetadata() && titleUnicode != null && !titleUnicode.isEmpty()) ? titleUnicode : title; + } + + /** + * Returns the song artist. + * If configured, the Unicode string will be returned instead. + */ + public String getArtist() { + return (Options.useUnicodeMetadata() && artistUnicode != null && !artistUnicode.isEmpty()) ? artistUnicode : artist; + } + + /** + * Returns the song creator. + */ + public String getCreator() { return creator; } + + /** + * Draws the download result as a rectangular button. + * @param g the graphics context + * @param index the index (to offset the button from the topmost button) + * @param hover true if the mouse is hovering over this button + * @param focus true if the button is focused + */ + public void drawResult(Graphics g, int index, boolean hover, boolean focus) { + float textX = buttonBaseX + buttonWidth * 0.02f; + float edgeX = buttonBaseX + buttonWidth * 0.985f; + float y = buttonBaseY + index * buttonOffset; + float marginY = buttonHeight * 0.04f; + Download dl = DownloadList.get().getDownload(beatmapSetID); + + // rectangle outline + g.setColor((focus) ? BG_FOCUS : (hover) ? BG_HOVER : BG_NORMAL); + g.fillRect(buttonBaseX, y, buttonWidth, buttonHeight); + + // download progress + if (dl != null) { + float progress = dl.getProgress(); + if (progress > 0f) { + g.setColor(Utils.COLOR_GREEN); + g.fillRect(buttonBaseX, y, buttonWidth * progress / 100f, buttonHeight); + } + } + + // text + Utils.FONT_BOLD.drawString( + textX, y + marginY, + String.format("%s - %s%s", getArtist(), getTitle(), + (dl != null) ? String.format(" [%s]", dl.getStatus().getName()) : ""), Color.white); + Utils.FONT_DEFAULT.drawString( + textX, y + marginY + Utils.FONT_BOLD.getLineHeight(), + String.format("Last updated: %s", date), Color.white); + Utils.FONT_DEFAULT.drawString( + edgeX - Utils.FONT_DEFAULT.getWidth(creator), y + marginY, + creator, Color.white); + } + + /** + * Draws the download information. + * @param g the graphics context + * @param index the index (to offset from the topmost position) + * @param id the list index + * @param hover true if the mouse is hovering over this button + */ + public void drawDownload(Graphics g, int index, int id, boolean hover) { + if (download == null) { + ErrorHandler.error("Trying to draw download information for button without Download object.", null, false); + return; + } + + float textX = infoBaseX + infoWidth * 0.02f; + float edgeX = infoBaseX + infoWidth * 0.985f; + float y = infoBaseY + index * infoHeight; + float marginY = infoHeight * 0.04f; + + // rectangle outline + g.setColor((id % 2 == 0) ? BG_FOCUS : BG_NORMAL); + g.fillRect(infoBaseX, y, infoWidth, infoHeight); + + // text + String info; + Status status = download.getStatus(); + float progress = download.getProgress(); + if (progress < 0f) + info = status.getName(); + else if (status == Download.Status.WAITING) + info = String.format("%s...", status.getName()); + else + info = String.format("%s: %.1f%% (%s/%s)", status.getName(), progress, + Utils.bytesToString(download.readSoFar()), Utils.bytesToString(download.contentLength())); + Utils.FONT_BOLD.drawString(textX, y + marginY, getTitle(), Color.white); + Utils.FONT_DEFAULT.drawString(textX, y + marginY + Utils.FONT_BOLD.getLineHeight(), info, Color.white); + + // 'x' button + if (hover) { + Image img = GameImage.DELETE.getImage(); + img.draw(edgeX - img.getWidth(), y + marginY); + } + } + + @Override + public String toString() { + return String.format("[%d] %s - %s (by %s)", beatmapSetID, getArtist(), getTitle(), creator); + } +} diff --git a/src/itdelatrisu/opsu/downloads/DownloadServer.java b/src/itdelatrisu/opsu/downloads/DownloadServer.java new file mode 100644 index 00000000..995185da --- /dev/null +++ b/src/itdelatrisu/opsu/downloads/DownloadServer.java @@ -0,0 +1,52 @@ +/* + * opsu! - an open-source osu! client + * Copyright (C) 2014, 2015 Jeffrey Han + * + * opsu! is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * opsu! is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with opsu!. If not, see . + */ + +package itdelatrisu.opsu.downloads; + +import java.io.IOException; + +/** + * Interface for beatmap download servers. + */ +public interface DownloadServer { + /** + * Returns a web address to download the given beatmap. + * @param beatmapSetID the beatmap set ID + * @return the URL string + */ + public String getURL(int beatmapSetID); + + /** + * Returns a list of results for a given search query, or null if the + * list could not be created. + * @param query the search query + * @param page the result page (starting at 1) + * @param rankedOnly whether to only show ranked maps + * @return the result array + * @throws IOException if any connection problem occurs + */ + public DownloadNode[] resultList(String query, int page, boolean rankedOnly) throws IOException; + + /** + * Returns the total number of results for the last search query. + * This will differ from the the size of the array returned by + * {@link #resultList(String, int, boolean)} if multiple pages exist. + * @return the result count, or -1 if no query + */ + public int totalResults(); +} diff --git a/src/itdelatrisu/opsu/downloads/ReadableByteChannelWrapper.java b/src/itdelatrisu/opsu/downloads/ReadableByteChannelWrapper.java new file mode 100644 index 00000000..786b2c5d --- /dev/null +++ b/src/itdelatrisu/opsu/downloads/ReadableByteChannelWrapper.java @@ -0,0 +1,62 @@ +/* + * opsu! - an open-source osu! client + * Copyright (C) 2014, 2015 Jeffrey Han + * + * opsu! is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * opsu! is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with opsu!. If not, see . + */ + +package itdelatrisu.opsu.downloads; + +import java.io.IOException; +import java.nio.ByteBuffer; +import java.nio.channels.ReadableByteChannel; + +/** + * Wrapper for a ReadableByteChannel that stores the number of bytes read. + * @author par (http://stackoverflow.com/a/11068356) + */ +public class ReadableByteChannelWrapper implements ReadableByteChannel { + /** The wrapped ReadableByteChannel. */ + private ReadableByteChannel rbc; + + /** The number of bytes read. */ + private long bytesRead; + + /** + * Constructor. + * @param rbc the ReadableByteChannel to wrap + */ + public ReadableByteChannelWrapper(ReadableByteChannel rbc) { + this.rbc = rbc; + } + + @Override + public void close() throws IOException { rbc.close(); } + + @Override + public boolean isOpen() { return rbc.isOpen(); } + + @Override + public int read(ByteBuffer bb) throws IOException { + int bytes; + if ((bytes = rbc.read(bb)) > 0) + bytesRead += bytes; + return bytes; + } + + /** + * Returns the number of bytes read so far. + */ + public long getReadSoFar() { return bytesRead; } +} diff --git a/src/itdelatrisu/opsu/states/DownloadsMenu.java b/src/itdelatrisu/opsu/states/DownloadsMenu.java new file mode 100644 index 00000000..a6f4de34 --- /dev/null +++ b/src/itdelatrisu/opsu/states/DownloadsMenu.java @@ -0,0 +1,552 @@ +/* + * opsu! - an open-source osu! client + * Copyright (C) 2014, 2015 Jeffrey Han + * + * opsu! is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * opsu! is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with opsu!. If not, see . + */ + +package itdelatrisu.opsu.states; + +import itdelatrisu.opsu.GameImage; +import itdelatrisu.opsu.Opsu; +import itdelatrisu.opsu.Utils; +import itdelatrisu.opsu.audio.SoundController; +import itdelatrisu.opsu.audio.SoundEffect; +import itdelatrisu.opsu.downloads.BloodcatServer; +import itdelatrisu.opsu.downloads.Download; +import itdelatrisu.opsu.downloads.DownloadList; +import itdelatrisu.opsu.downloads.DownloadNode; +import itdelatrisu.opsu.downloads.DownloadServer; + +import java.io.IOException; + +import org.newdawn.slick.Color; +import org.newdawn.slick.GameContainer; +import org.newdawn.slick.Graphics; +import org.newdawn.slick.Input; +import org.newdawn.slick.SlickException; +import org.newdawn.slick.gui.TextField; +import org.newdawn.slick.state.BasicGameState; +import org.newdawn.slick.state.StateBasedGame; +import org.newdawn.slick.state.transition.FadeInTransition; +import org.newdawn.slick.state.transition.FadeOutTransition; + +/** + * Downloads menu. + */ +public class DownloadsMenu extends BasicGameState { + /** The max number of search result buttons to be shown at a time. */ + public static final int MAX_RESULT_BUTTONS = 10; + + /** The max number of downloads to be shown at a time. */ + public static final int MAX_DOWNLOADS_SHOWN = 11; + + /** Delay time, in milliseconds, between each search. */ + private static final int SEARCH_DELAY = 700; + + /** Delay time, in milliseconds, for double-clicking focused result. */ + private static final int FOCUS_DELAY = 250; + + /** Minimum time, in milliseconds, that must elapse between queries. */ + private static final int MIN_REQUEST_INTERVAL = 300; + + /** The beatmap download server. */ + private DownloadServer server = new BloodcatServer(); + + /** The current list of search results. */ + private DownloadNode[] resultList; + + /** Current focused (selected) result. */ + private int focusResult = -1; + + /** Delay time, in milliseconds, for double-clicking focused result. */ + private int focusTimer = 0; + + /** Current start result button (topmost entry). */ + private int startResult = 0; + + /** Total number of results for current query. */ + private int totalResults = 0; + + /** Page of current query results. */ + private int page = 1; + + /** Total number of results across pages seen so far. */ + private int pageResultTotal = 0; + + /** Page navigation. */ + private enum Page { RESET, CURRENT, PREVIOUS, NEXT }; + + /** Page direction for next query. */ + private Page pageDir = Page.RESET; + + /** Whether to only show ranked maps. */ + private boolean rankedOnly = true; + + /** Current start download index. */ + private int startDownloadIndex = 0; + + /** Query thread. */ + private Thread queryThread; + + /** The search textfield. */ + private TextField search; + + /** + * Delay timer, in milliseconds, before running another search. + * This is overridden by character entry (reset) and 'esc'/'enter' (immediate search). + */ + private int searchTimer; + + /** Information text to display based on the search query. */ + private String searchResultString; + + /** Whether or not the search timer has been manually reset; reset after search delay passes. */ + private boolean searchTimerReset = false; + + /** The last search query. */ + private String lastQuery; + + /** Page direction for last query. */ + private Page lastQueryDir = Page.RESET; + + /** Number of active requests. */ + private int activeRequests = 0; + + /** "Ranked only?" checkbox coordinates. */ + private float rankedBoxX, rankedBoxY, rankedBoxLength; + + // game-related variables + private StateBasedGame game; + private Input input; + private int state; + + public DownloadsMenu(int state) { + this.state = state; + } + + @Override + public void init(GameContainer container, StateBasedGame game) + throws SlickException { + this.game = game; + this.input = container.getInput(); + + int width = container.getWidth(); + int height = container.getHeight(); + + // search + searchTimer = SEARCH_DELAY; + searchResultString = "Type to search!"; + search = new TextField( + container, Utils.FONT_DEFAULT, + (int) (width * 0.024f), (int) (height * 0.05f) + Utils.FONT_LARGE.getLineHeight(), + (int) (width * 0.35f), Utils.FONT_MEDIUM.getLineHeight() + ); + search.setBackgroundColor(DownloadNode.BG_NORMAL); + search.setBorderColor(Color.white); + search.setTextColor(Color.white); + search.setConsumeEvents(false); + search.setMaxLength(255); + + // ranked only? + rankedBoxX = search.getX() + search.getWidth() * 1.2f; + rankedBoxY = search.getY(); + rankedBoxLength = search.getHeight(); + } + + @Override + public void render(GameContainer container, StateBasedGame game, Graphics g) + throws SlickException { + int width = container.getWidth(); + int height = container.getHeight(); + int mouseX = input.getMouseX(), mouseY = input.getMouseY(); + + // background + GameImage.SEARCH_BG.getImage().draw(); + + // title + Utils.FONT_LARGE.drawString(width * 0.024f, height * 0.04f, "Download Beatmaps!", Color.white); + + // search + g.setColor(Color.white); + search.render(container, g); + Utils.FONT_BOLD.drawString( + search.getX() + search.getWidth() * 0.01f, search.getY() + search.getHeight() * 1.3f, + searchResultString, Color.white + ); + + // ranked only? + if (rankedOnly) + g.fillRect(rankedBoxX, rankedBoxY, rankedBoxLength, rankedBoxLength); + else + g.drawRect(rankedBoxX, rankedBoxY, rankedBoxLength, rankedBoxLength); + Utils.FONT_MEDIUM.drawString(rankedBoxX + rankedBoxLength * 1.5f, rankedBoxY, "Show ranked maps only?", Color.white); + + // search results + DownloadNode[] nodes = resultList; + if (nodes != null) { + for (int i = 0; i < MAX_RESULT_BUTTONS; i++) { + int index = startResult + i; + if (index >= nodes.length) + break; + nodes[index].drawResult(g, i, DownloadNode.resultContains(mouseX, mouseY, i), (index == focusResult)); + } + + // scroll bar + if (nodes.length > MAX_RESULT_BUTTONS) + DownloadNode.drawResultScrollbar(g, startResult, nodes.length); + + // pages + if (nodes.length > 0) + DownloadNode.drawPageIcons(page, (page > 1), (pageResultTotal < totalResults)); + } + + // downloads + float downloadsX = width * 0.75f, downloadsY = search.getY(); + g.setColor(DownloadNode.BG_NORMAL); + g.fillRect(downloadsX, downloadsY, + width * 0.25f, height - downloadsY * 2f); + Utils.FONT_LARGE.drawString(downloadsX + width * 0.015f, downloadsY + height * 0.015f, "Downloads", Color.white); + int downloadsSize = DownloadList.get().size(); + if (downloadsSize > 0) { + for (int i = 0; i < MAX_DOWNLOADS_SHOWN; i++) { + int index = startDownloadIndex + i; + if (index >= downloadsSize) + break; + DownloadList.get().getNode(index).drawDownload(g, i, index, DownloadNode.downloadContains(mouseX, mouseY, i)); + } + + // scroll bar + if (downloadsSize > MAX_DOWNLOADS_SHOWN) + DownloadNode.drawDownloadScrollbar(g, startDownloadIndex, downloadsSize); + } + + Utils.getBackButton().draw(); + Utils.drawVolume(g); + Utils.drawFPS(); + Utils.drawCursor(); + } + + @Override + public void update(GameContainer container, StateBasedGame game, int delta) + throws SlickException { + Utils.updateCursor(delta); + Utils.updateVolumeDisplay(delta); + int mouseX = input.getMouseX(), mouseY = input.getMouseY(); + Utils.getBackButton().hoverUpdate(delta, mouseX, mouseY); + + // focus timer + if (focusResult != -1 && focusTimer < FOCUS_DELAY) + focusTimer += delta; + + // search + search.setFocus(true); + searchTimer += delta; + if (searchTimer >= SEARCH_DELAY) { + searchTimer = 0; + searchTimerReset = false; + + final String query = search.getText().trim().toLowerCase(); + if (lastQuery == null || !query.equals(lastQuery)) { + lastQuery = query; + lastQueryDir = pageDir; + + if (queryThread != null && queryThread.isAlive()) + queryThread.interrupt(); + + // execute query + queryThread = new Thread() { + @Override + public void run() { + activeRequests++; + + // check page direction + Page lastPageDir = pageDir; + pageDir = Page.RESET; + int lastPageSize = (resultList != null) ? resultList.length : 0; + int newPage = page; + if (lastPageDir == Page.RESET) + newPage = 1; + else if (lastPageDir == Page.NEXT) + newPage++; + else if (lastPageDir == Page.PREVIOUS) + newPage--; + try { + DownloadNode[] nodes = server.resultList(query, newPage, rankedOnly); + if (activeRequests - 1 == 0) { + // update page total + page = newPage; + if (nodes != null) { + if (lastPageDir == Page.NEXT) + pageResultTotal += nodes.length; + else if (lastPageDir == Page.PREVIOUS) + pageResultTotal -= lastPageSize; + else if (lastPageDir == Page.RESET) + pageResultTotal = nodes.length; + } else + pageResultTotal = 0; + + resultList = nodes; + totalResults = server.totalResults(); + focusResult = -1; + startResult = 0; + if (nodes == null) + searchResultString = "An error has occurred."; + else { + if (query.isEmpty()) + searchResultString = "Type to search!"; + else if (totalResults == 0) + searchResultString = "No results found."; + else + searchResultString = String.format("%d result%s found!", + totalResults, (totalResults == 1) ? "" : "s"); + } + } + } catch (IOException e) { + searchResultString = "Could not establish connection to server."; + } finally { + activeRequests--; + queryThread = null; + } + } + }; + queryThread.start(); + } + } + } + + @Override + public int getID() { return state; } + + @Override + public void mousePressed(int button, int x, int y) { + // check mouse button + if (button != Input.MOUSE_LEFT_BUTTON) + return; + + // back + if (Utils.getBackButton().contains(x, y)) { + SoundController.playSound(SoundEffect.MENUBACK); + ((MainMenu) game.getState(Opsu.STATE_MAINMENU)).reset(); + game.enterState(Opsu.STATE_MAINMENU, new FadeOutTransition(Color.black), new FadeInTransition(Color.black)); + return; + } + + // ranked only? + if ((x > rankedBoxX && x < rankedBoxX + rankedBoxLength) && + (y > rankedBoxY && y < rankedBoxY + rankedBoxLength)) { + rankedOnly = !rankedOnly; + lastQuery = null; + pageDir = Page.CURRENT; + resetSearchTimer(); + return; + } + + // search results + DownloadNode[] nodes = resultList; + if (nodes != null) { + if (DownloadNode.resultAreaContains(x, y)) { + for (int i = 0; i < MAX_RESULT_BUTTONS; i++) { + int index = startResult + i; + if (index >= nodes.length) + break; + if (DownloadNode.resultContains(x, y, i)) { + if (index == focusResult) { + if (focusTimer >= FOCUS_DELAY) { + // too slow for double-click + focusTimer = 0; + } else { + // start download + DownloadNode node = nodes[index]; + if (!DownloadList.get().contains(node.getID())) { + DownloadList.get().addNode(node); + node.createDownload(server); + node.getDownload().start(); + } + } + } else { + // set focus + focusResult = index; + focusTimer = 0; + } + break; + } + } + return; + } + + // pages + if (nodes.length > 0) { + if (page > 1 && DownloadNode.prevPageContains(x, y)) { + if (lastQueryDir == Page.PREVIOUS && queryThread != null && queryThread.isAlive()) + ; // don't send consecutive requests + else { + pageDir = Page.PREVIOUS; + lastQuery = null; + resetSearchTimer(); + } + return; + } + if (pageResultTotal < totalResults && DownloadNode.nextPageContains(x, y)) { + if (lastQueryDir == Page.NEXT && queryThread != null && queryThread.isAlive()) + ; // don't send consecutive requests + else { + pageDir = Page.NEXT; + lastQuery = null; + resetSearchTimer(); + return; + } + } + } + } + + // downloads + if (!DownloadList.get().isEmpty() && DownloadNode.downloadAreaContains(x, y)) { + for (int i = 0, n = DownloadList.get().size(); i < MAX_DOWNLOADS_SHOWN; i++) { + int index = startDownloadIndex + i; + if (index >= n) + break; + if (DownloadNode.downloadIconContains(x, y, i)) { + DownloadNode node = DownloadList.get().getNode(index); + Download dl = node.getDownload(); + switch (dl.getStatus()) { + case CANCELLED: + case COMPLETE: + case ERROR: + node.clearDownload(); + DownloadList.get().remove(index); + break; + case DOWNLOADING: + case WAITING: + dl.cancel(); + break; + } + return; + } + } + } + } + + @Override + public void mouseWheelMoved(int newValue) { + int shift = (newValue < 0) ? 1 : -1; + int mouseX = input.getMouseX(), mouseY = input.getMouseY(); + scrollLists(mouseX, mouseY, shift); + } + + @Override + public void mouseDragged(int oldx, int oldy, int newx, int newy) { + // check mouse button + if (!input.isMouseButtonDown(Input.MOUSE_RIGHT_BUTTON) && + !input.isMouseButtonDown(Input.MOUSE_LEFT_BUTTON)) + return; + + int diff = newy - oldy; + if (diff == 0) + return; + int shift = (diff < 0) ? 1 : -1; + scrollLists(oldx, oldy, shift); + } + + @Override + public void keyPressed(int key, char c) { + switch (key) { + case Input.KEY_ESCAPE: + if (!search.getText().isEmpty()) { + // clear search text + search.setText(""); + pageDir = Page.RESET; + resetSearchTimer(); + } else { + // return to main menu + SoundController.playSound(SoundEffect.MENUBACK); + ((MainMenu) game.getState(Opsu.STATE_MAINMENU)).reset(); + game.enterState(Opsu.STATE_MAINMENU, new FadeOutTransition(Color.black), new FadeInTransition(Color.black)); + } + break; + case Input.KEY_ENTER: + if (!search.getText().isEmpty()) { + pageDir = Page.RESET; + resetSearchTimer(); + } + break; + case Input.KEY_F5: + lastQuery = null; + pageDir = Page.CURRENT; + resetSearchTimer(); + break; + case Input.KEY_F12: + Utils.takeScreenShot(); + break; + default: + // wait for user to finish typing + if (Character.isLetterOrDigit(c) || key == Input.KEY_BACK) { + searchTimer = 0; + pageDir = Page.RESET; + } + break; + } + } + + @Override + public void enter(GameContainer container, StateBasedGame game) + throws SlickException { + Utils.getBackButton().setScale(1f); + focusResult = -1; + startResult = 0; + startDownloadIndex = 0; + pageDir = Page.RESET; + } + + /** + * Resets the search timer, but respects the minimum request interval. + */ + private void resetSearchTimer() { + if (!searchTimerReset) { + if (searchTimer < MIN_REQUEST_INTERVAL) + searchTimer = SEARCH_DELAY - MIN_REQUEST_INTERVAL; + else + searchTimer = SEARCH_DELAY; + searchTimerReset = true; + } + } + + /** + * Processes a shift in the search result and downloads list start indices, + * if the mouse coordinates are within the area bounds. + * @param cx the x coordinate + * @param cy the y coordinate + * @param shift the number of indices to shift + */ + private void scrollLists(int cx, int cy, int shift) { + // search results + if (DownloadNode.resultAreaContains(cx, cy)) { + DownloadNode[] nodes = resultList; + if (nodes != null && nodes.length >= MAX_RESULT_BUTTONS) { + int newStartResult = startResult + shift; + if (newStartResult >= 0 && newStartResult + MAX_RESULT_BUTTONS <= nodes.length) + startResult = newStartResult; + } + } + + // downloads + else if (DownloadNode.downloadAreaContains(cx, cy)) { + if (DownloadList.get().size() >= MAX_DOWNLOADS_SHOWN) { + int newStartDownloadIndex = startDownloadIndex + shift; + if (newStartDownloadIndex >= 0 && newStartDownloadIndex + MAX_DOWNLOADS_SHOWN <= DownloadList.get().size()) + startDownloadIndex = newStartDownloadIndex; + } + } + } +} diff --git a/src/itdelatrisu/opsu/states/MainMenu.java b/src/itdelatrisu/opsu/states/MainMenu.java index 9a630c3a..f8ac128d 100644 --- a/src/itdelatrisu/opsu/states/MainMenu.java +++ b/src/itdelatrisu/opsu/states/MainMenu.java @@ -21,6 +21,7 @@ package itdelatrisu.opsu.states; import itdelatrisu.opsu.ErrorHandler; import itdelatrisu.opsu.GameImage; import itdelatrisu.opsu.MenuButton; +import itdelatrisu.opsu.MenuButton.Expand; import itdelatrisu.opsu.Opsu; import itdelatrisu.opsu.Options; import itdelatrisu.opsu.OsuFile; @@ -75,6 +76,9 @@ public class MainMenu extends BasicGameState { /** Music control buttons. */ private MenuButton musicPlay, musicPause, musicNext, musicPrevious; + /** Button linking to Downloads menu. */ + private MenuButton downloadsButton; + /** Button linking to repository. */ private MenuButton repoButton; @@ -138,6 +142,12 @@ public class MainMenu extends BasicGameState { musicNext.setHoverScale(1.5f); musicPrevious.setHoverScale(1.5f); + // initialize downloads button + Image dlImg = GameImage.DOWNLOADS.getImage(); + downloadsButton = new MenuButton(dlImg, width - dlImg.getWidth() / 2f, height / 2f); + downloadsButton.setHoverDir(Expand.LEFT); + downloadsButton.setHoverScale(1.05f); + // initialize repository button if (Desktop.isDesktopSupported()) { // only if a webpage can be opened Image repoImg = GameImage.REPOSITORY.getImage(); @@ -173,6 +183,9 @@ public class MainMenu extends BasicGameState { g.fillRect(0, height * 8 / 9f, width, height / 9f); Utils.COLOR_BLACK_ALPHA.a = oldAlpha; + // draw downloads button + downloadsButton.draw(); + // draw buttons if (logoTimer > 0) { playButton.draw(); @@ -239,6 +252,7 @@ public class MainMenu extends BasicGameState { exitButton.hoverUpdate(delta, mouseX, mouseY); if (repoButton != null) repoButton.hoverUpdate(delta, mouseX, mouseY); + downloadsButton.hoverUpdate(delta, mouseX, mouseY); musicPlay.hoverUpdate(delta, mouseX, mouseY); musicPause.hoverUpdate(delta, mouseX, mouseY); if (musicPlay.contains(mouseX, mouseY)) @@ -319,6 +333,8 @@ public class MainMenu extends BasicGameState { musicPrevious.setScale(1f); if (repoButton != null && !repoButton.contains(mouseX, mouseY)) repoButton.setScale(1f); + if (!downloadsButton.contains(mouseX, mouseY)) + downloadsButton.setScale(1f); } @Override @@ -355,6 +371,12 @@ public class MainMenu extends BasicGameState { MusicController.setPosition(0); } + // downloads button actions + else if (downloadsButton.contains(x, y)) { + SoundController.playSound(SoundEffect.MENUHIT); + game.enterState(Opsu.STATE_DOWNLOADSMENU, new FadeOutTransition(Color.black), new FadeInTransition(Color.black)); + } + // repository button actions else if (repoButton != null && repoButton.contains(x, y)) { try { @@ -437,5 +459,6 @@ public class MainMenu extends BasicGameState { musicPause.setScale(1f); musicNext.setScale(1f); musicPrevious.setScale(1f); + downloadsButton.setScale(1f); } } diff --git a/src/itdelatrisu/opsu/states/SongMenu.java b/src/itdelatrisu/opsu/states/SongMenu.java index c4cb37ba..db8988eb 100644 --- a/src/itdelatrisu/opsu/states/SongMenu.java +++ b/src/itdelatrisu/opsu/states/SongMenu.java @@ -620,7 +620,7 @@ public class SongMenu extends BasicGameState { // invoke unpacker and parser File beatmapDir = Options.getBeatmapDir(); OszUnpacker.unpackAllFiles(Options.getOSZDir(), beatmapDir); - OsuParser.parseAllFiles(beatmapDir, container.getWidth(), container.getHeight()); + OsuParser.parseAllFiles(beatmapDir); // initialize song list if (OsuGroupList.get().size() > 0) { diff --git a/src/itdelatrisu/opsu/states/Splash.java b/src/itdelatrisu/opsu/states/Splash.java index 53c038d4..93bdebef 100644 --- a/src/itdelatrisu/opsu/states/Splash.java +++ b/src/itdelatrisu/opsu/states/Splash.java @@ -93,8 +93,6 @@ public class Splash extends BasicGameState { finished = true; } else { // load resources in a new thread - final int width = container.getWidth(); - final int height = container.getHeight(); thread = new Thread() { @Override public void run() { @@ -104,7 +102,7 @@ public class Splash extends BasicGameState { OszUnpacker.unpackAllFiles(Options.getOSZDir(), beatmapDir); // parse song directory - OsuParser.parseAllFiles(beatmapDir, width, height); + OsuParser.parseAllFiles(beatmapDir); // load sounds SoundController.init();