Added the ability to specify a patch notes URL. When Getdown needs to
patch, it will provide a button to access the URL if it's non-empty.
This commit is contained in:
@@ -146,6 +146,12 @@ public class Application
|
|||||||
/** Where to point the user for help with install errors. */
|
/** Where to point the user for help with install errors. */
|
||||||
public String installError;
|
public String installError;
|
||||||
|
|
||||||
|
/** The dimensions of the patch notes button. */
|
||||||
|
public Rectangle patchNotes = new Rectangle(5, 50, 112, 26);
|
||||||
|
|
||||||
|
/** The patch notes URL. */
|
||||||
|
public String patchNotesUrl;
|
||||||
|
|
||||||
/** Generates a string representation of this instance. */
|
/** Generates a string representation of this instance. */
|
||||||
@Override
|
@Override
|
||||||
public String toString ()
|
public String toString ()
|
||||||
@@ -153,7 +159,8 @@ public class Application
|
|||||||
return "[name=" + name + ", bg=" + backgroundImage + ", pi=" + progressImage +
|
return "[name=" + name + ", bg=" + backgroundImage + ", pi=" + progressImage +
|
||||||
", prect=" + progress + ", pt=" + progressText + ", pb=" + progressBar +
|
", prect=" + progress + ", pt=" + progressText + ", pb=" + progressBar +
|
||||||
", srect=" + status + ", st=" + statusText + ", shadow=" + textShadow +
|
", srect=" + status + ", st=" + statusText + ", shadow=" + textShadow +
|
||||||
", err=" + installError + "]";
|
", err=" + installError + ", nrect=" + patchNotes +
|
||||||
|
", notes=" + patchNotesUrl + "]";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -623,6 +630,10 @@ public class Application
|
|||||||
ui.installError = MessageUtil.taint(ui.installError);
|
ui.installError = MessageUtil.taint(ui.installError);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// the patch notes bits
|
||||||
|
ui.patchNotes = parseRect(cdata, "ui.patch_notes", ui.patchNotes);
|
||||||
|
ui.patchNotesUrl = (String)cdata.get("ui.patch_notes_url");
|
||||||
|
|
||||||
return ui;
|
return ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -27,13 +27,18 @@ package com.threerings.getdown.launcher;
|
|||||||
|
|
||||||
import java.awt.BorderLayout;
|
import java.awt.BorderLayout;
|
||||||
import java.awt.Container;
|
import java.awt.Container;
|
||||||
|
import java.awt.Dimension;
|
||||||
import java.awt.EventQueue;
|
import java.awt.EventQueue;
|
||||||
import java.awt.Image;
|
import java.awt.Image;
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
|
|
||||||
import javax.imageio.ImageIO;
|
import javax.imageio.ImageIO;
|
||||||
|
import javax.swing.AbstractAction;
|
||||||
import javax.swing.JApplet;
|
import javax.swing.JApplet;
|
||||||
|
import javax.swing.JButton;
|
||||||
import javax.swing.JFrame;
|
import javax.swing.JFrame;
|
||||||
|
import javax.swing.JLayeredPane;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
@@ -630,6 +635,16 @@ public abstract class Getdown extends Thread
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// show the patch notes button, if applicable
|
||||||
|
if (!StringUtil.isBlank(_ifc.patchNotesUrl)) {
|
||||||
|
createInterface(false);
|
||||||
|
EventQueue.invokeLater(new Runnable() {
|
||||||
|
public void run () {
|
||||||
|
_patchNotes.setVisible(true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// download the patch files...
|
// download the patch files...
|
||||||
download(list);
|
download(list);
|
||||||
|
|
||||||
@@ -796,8 +811,17 @@ public abstract class Getdown extends Thread
|
|||||||
public void run () {
|
public void run () {
|
||||||
if (_status == null) {
|
if (_status == null) {
|
||||||
_container = createContainer();
|
_container = createContainer();
|
||||||
|
_layers = new JLayeredPane();
|
||||||
|
_container.add(_layers, BorderLayout.CENTER);
|
||||||
|
_patchNotes = new JButton(new AbstractAction(
|
||||||
|
_msgs.getString("m.patch_notes")) {
|
||||||
|
@Override public void actionPerformed (ActionEvent event) {
|
||||||
|
showDocument(_ifc.patchNotesUrl);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
_layers.add(_patchNotes);
|
||||||
_status = new StatusPanel(_msgs);
|
_status = new StatusPanel(_msgs);
|
||||||
_container.add(_status, BorderLayout.CENTER);
|
_layers.add(_status);
|
||||||
initInterface();
|
initInterface();
|
||||||
} else if (reinit) {
|
} else if (reinit) {
|
||||||
initInterface();
|
initInterface();
|
||||||
@@ -819,6 +843,12 @@ public abstract class Getdown extends Thread
|
|||||||
_background = newBackgrounds;
|
_background = newBackgrounds;
|
||||||
}
|
}
|
||||||
_status.init(_ifc, _background, getProgressImage());
|
_status.init(_ifc, _background, getProgressImage());
|
||||||
|
Dimension size = _status.getPreferredSize();
|
||||||
|
_status.setSize(size);
|
||||||
|
_layers.setPreferredSize(size);
|
||||||
|
|
||||||
|
_patchNotes.setBounds(_ifc.patchNotes);
|
||||||
|
_patchNotes.setVisible(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected RotatingBackgrounds getBackground ()
|
protected RotatingBackgrounds getBackground ()
|
||||||
@@ -950,6 +980,11 @@ public abstract class Getdown extends Thread
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Requests to show the document at the specified URL in a new window.
|
||||||
|
*/
|
||||||
|
protected abstract void showDocument (String url);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Requests that Getdown exit. In applet mode this does nothing.
|
* Requests that Getdown exit. In applet mode this does nothing.
|
||||||
*/
|
*/
|
||||||
@@ -1026,7 +1061,9 @@ public abstract class Getdown extends Thread
|
|||||||
|
|
||||||
protected ResourceBundle _msgs;
|
protected ResourceBundle _msgs;
|
||||||
protected Container _container;
|
protected Container _container;
|
||||||
|
protected JLayeredPane _layers;
|
||||||
protected StatusPanel _status;
|
protected StatusPanel _status;
|
||||||
|
protected JButton _patchNotes;
|
||||||
protected AbortPanel _abort;
|
protected AbortPanel _abort;
|
||||||
protected RotatingBackgrounds _background;
|
protected RotatingBackgrounds _background;
|
||||||
|
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ import javax.swing.WindowConstants;
|
|||||||
|
|
||||||
import com.samskivert.swing.util.SwingUtil;
|
import com.samskivert.swing.util.SwingUtil;
|
||||||
import com.samskivert.util.ArrayUtil;
|
import com.samskivert.util.ArrayUtil;
|
||||||
|
import com.samskivert.util.RunAnywhere;
|
||||||
import com.samskivert.util.StringUtil;
|
import com.samskivert.util.StringUtil;
|
||||||
|
|
||||||
import static com.threerings.getdown.Log.log;
|
import static com.threerings.getdown.Log.log;
|
||||||
@@ -162,6 +163,29 @@ public class GetdownApp
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
|
protected void showDocument (String url) {
|
||||||
|
String[] cmdarray;
|
||||||
|
if (RunAnywhere.isWindows()) {
|
||||||
|
String osName = System.getProperty("os.name");
|
||||||
|
if (osName.indexOf("9") != -1 || osName.indexOf("Me") != -1) {
|
||||||
|
cmdarray = new String[] {
|
||||||
|
"command.com", "/c", "start", "\"" + url + "\"" };
|
||||||
|
} else {
|
||||||
|
cmdarray = new String[] {
|
||||||
|
"cmd.exe", "/c", "start", "\"\"", "\"" + url + "\"" };
|
||||||
|
}
|
||||||
|
} else if (RunAnywhere.isMacOS()) {
|
||||||
|
cmdarray = new String[] { "open", url };
|
||||||
|
} else { // Linux, Solaris, etc.
|
||||||
|
cmdarray = new String[] { "firefox", url };
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
Runtime.getRuntime().exec(cmdarray);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.warning("Failed to open browser.", "cmdarray", cmdarray, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@Override
|
||||||
protected void exit (int exitCode) {
|
protected void exit (int exitCode) {
|
||||||
System.exit(exitCode);
|
System.exit(exitCode);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -147,6 +147,14 @@ public class GetdownApplet extends JApplet
|
|||||||
return GetdownApplet.this;
|
return GetdownApplet.this;
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
|
protected void showDocument (String url) {
|
||||||
|
try {
|
||||||
|
getAppletContext().showDocument(new URL(url), "_blank");
|
||||||
|
} catch (MalformedURLException e) {
|
||||||
|
log.warning("Invalid document url.", "url", url, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@Override
|
||||||
protected void launch () {
|
protected void launch () {
|
||||||
// if so configured, create a server socket to listen
|
// if so configured, create a server socket to listen
|
||||||
// for a connection from the app
|
// for a connection from the app
|
||||||
|
|||||||
@@ -44,6 +44,8 @@ m.validating = Validating...
|
|||||||
m.patching = Patching...
|
m.patching = Patching...
|
||||||
m.launching = Launching...
|
m.launching = Launching...
|
||||||
|
|
||||||
|
m.patch_notes = Patch Notes...
|
||||||
|
|
||||||
m.complete = {0}% complete
|
m.complete = {0}% complete
|
||||||
m.complete_remain = {0}% complete {1} remaining
|
m.complete_remain = {0}% complete {1} remaining
|
||||||
|
|
||||||
@@ -75,7 +77,7 @@ m.init_error = The application has failed to launch due to the following \
|
|||||||
information on how to handle such problems.
|
information on how to handle such problems.
|
||||||
|
|
||||||
m.readonly_error = The directory in which this application is installed: \
|
m.readonly_error = The directory in which this application is installed: \
|
||||||
\n{0}\nis read-only. Please install the applicaton into a directory where \
|
\n{0}\nis read-only. Please install the application into a directory where \
|
||||||
you have write access.
|
you have write access.
|
||||||
|
|
||||||
m.missing_resource = The application has failed to launch due to a missing \
|
m.missing_resource = The application has failed to launch due to a missing \
|
||||||
|
|||||||
Reference in New Issue
Block a user