diff --git a/pom.xml b/pom.xml
index 1e46e6d1..9ab36367 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,16 +4,28 @@
itdelatrisu
opsu
0.6.0
-
+
+ ${maven.build.timestamp}
+ yyyy-MM-dd HH:mm
+
src
+ false
res
**/Thumbs.db
+ **/version
+
+ true
+ res
+
+ **/version
+
+
diff --git a/res/version b/res/version
index 5dd3872b..11f63e48 100644
--- a/res/version
+++ b/res/version
@@ -1,3 +1,6 @@
-#Mon, 03 Jun 2013 22:20:24 +0100
-#Sun May 11 20:17:03 BST 2008
+# opsu! build info
+version=${pom.version}
+build.date=${timestamp}
+
+# slick build
build=237
diff --git a/src/itdelatrisu/opsu/ErrorHandler.java b/src/itdelatrisu/opsu/ErrorHandler.java
index 25aab5d4..ef0936a3 100644
--- a/src/itdelatrisu/opsu/ErrorHandler.java
+++ b/src/itdelatrisu/opsu/ErrorHandler.java
@@ -22,6 +22,9 @@ import java.awt.Cursor;
import java.awt.Desktop;
import java.io.PrintWriter;
import java.io.StringWriter;
+import java.net.URI;
+import java.net.URLEncoder;
+import java.util.Properties;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
@@ -29,6 +32,7 @@ import javax.swing.JTextArea;
import javax.swing.UIManager;
import org.newdawn.slick.util.Log;
+import org.newdawn.slick.util.ResourceLoader;
/**
* Error handler to log and display errors.
@@ -92,10 +96,12 @@ public class ErrorHandler {
textArea.append(error);
textArea.append("\n");
}
+ String trace = null;
if (e != null) {
StringWriter sw = new StringWriter();
e.printStackTrace(new PrintWriter(sw));
- textArea.append(sw.toString());
+ trace = sw.toString();
+ textArea.append(trace);
}
// display popup
@@ -109,8 +115,39 @@ public class ErrorHandler {
JOptionPane.DEFAULT_OPTION, JOptionPane.ERROR_MESSAGE,
null, optionsR, optionsR[2]);
if (n == 0) {
- Desktop.getDesktop().browse(Options.ISSUES_URI);
- Desktop.getDesktop().open(Options.LOG_FILE);
+ // auto-fill debug information
+ String issueTitle = (error != null) ? error : e.getMessage();
+ StringBuilder sb = new StringBuilder();
+ Properties props = new Properties();
+ props.load(ResourceLoader.getResourceAsStream("version"));
+ String version = props.getProperty("version");
+ if (version != null && !version.equals("${pom.version}")) {
+ sb.append("**Version:** ");
+ sb.append(version);
+ sb.append('\n');
+ }
+ String timestamp = props.getProperty("build.date");
+ if (timestamp != null &&
+ !timestamp.equals("${maven.build.timestamp}") && !timestamp.equals("${timestamp}")) {
+ sb.append("**Build date:** ");
+ sb.append(timestamp);
+ sb.append('\n');
+ }
+ if (error != null) {
+ sb.append("**Error:** `");
+ sb.append(error);
+ sb.append("`\n");
+ }
+ if (trace != null) {
+ sb.append("**Stack trace:**");
+ sb.append("\n```\n");
+ sb.append(trace);
+ sb.append("```");
+ }
+ URI uri = URI.create(String.format(Options.ISSUES_URL,
+ URLEncoder.encode(issueTitle, "UTF-8"),
+ URLEncoder.encode(sb.toString(), "UTF-8")));
+ Desktop.getDesktop().browse(uri);
} else if (n == 1)
Desktop.getDesktop().open(Options.LOG_FILE);
} else {
diff --git a/src/itdelatrisu/opsu/Options.java b/src/itdelatrisu/opsu/Options.java
index 5095b32f..ddd4ecda 100644
--- a/src/itdelatrisu/opsu/Options.java
+++ b/src/itdelatrisu/opsu/Options.java
@@ -26,7 +26,6 @@ import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.URI;
-import java.net.URISyntaxException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
@@ -71,19 +70,10 @@ public class Options {
public static final String FONT_NAME = "kochi-gothic.ttf";
/** Repository address. */
- public static URI REPOSITORY_URI;
+ public static URI REPOSITORY_URI = URI.create("https://github.com/itdelatrisu/opsu");
/** Issue reporting address. */
- public static URI ISSUES_URI;
-
- static {
- try {
- REPOSITORY_URI = new URI("https://github.com/itdelatrisu/opsu");
- ISSUES_URI = new URI("https://github.com/itdelatrisu/opsu/issues/new");
- } catch (URISyntaxException e) {
- Log.error("Problem loading URIs.", e);
- }
- }
+ public static String ISSUES_URL = "https://github.com/itdelatrisu/opsu/issues/new?title=%s&body=%s";
/** The beatmap directory. */
private static File beatmapDir;