Dirk Stöcker schrieb:
> a) Temporary filename is final name+".tmp".
> b) Do the move as is done now. When move fails, leave the tmp file.
> c) On start check if there is a temp file and move it when possible.
> If not, inform the user.
I've done it over.
I called the new plugins files *.new instead of *.tmp, because latter
sounds as if it were something you could delete after the programm has
quit, which it isn't.
I also cleaned up the use of hardcoded slashes in file paths in some
places using File.separator instead.
I wasn't sure what to write when informing the user that the moving
failed, so if you have any ideas, please change that.
Robin
Index: src/org/openstreetmap/josm/plugins/PluginInformation.java
===================================================================
--- src/org/openstreetmap/josm/plugins/PluginInformation.java (revision 868)
+++ src/org/openstreetmap/josm/plugins/PluginInformation.java (working copy)
@@ -195,7 +195,7 @@
Collection<String> locations = getPluginLocations();
for (String s : locations) {
- File pluginFile = new File(s+"/"+pluginName+".jar");
+ File pluginFile = new File(s, pluginName + ".jar");
if (pluginFile.exists()) {
PluginInformation info = new
PluginInformation(pluginFile);
return info;
Index: src/org/openstreetmap/josm/plugins/PluginDownloader.java
===================================================================
--- src/org/openstreetmap/josm/plugins/PluginDownloader.java (revision 868)
+++ src/org/openstreetmap/josm/plugins/PluginDownloader.java (working copy)
@@ -12,6 +12,7 @@
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
+import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
@@ -53,14 +54,17 @@
}
@Override protected void realRun() throws SAXException,
IOException {
+ File pluginDir = Main.pref.getPluginsDirFile();
+ if (!pluginDir.exists())
+ pluginDir.mkdirs();
for (PluginDescription d : toUpdate) {
- File tempFile = new
File(Main.pref.getPreferencesDir()+"temp.jar");
- if (download(d.resource, tempFile)) {
- tempFile.renameTo(new
File(Main.pref.getPreferencesDir()+"plugins/"+d.name+".jar"));
+ File pluginFile = new File(pluginDir, d.name +
".jar.new");
+ if (download(d.resource, pluginFile))
count++;
- } else
+ else
errors += d.name + "\n";
}
+ PluginDownloader.moveUpdatedPlugins();
}
}
@@ -78,7 +82,9 @@
txt = readWiki(r);
r.close();
new
File(Main.pref.getPreferencesDir()+"plugins").mkdir();
- FileWriter out = new
FileWriter(Main.pref.getPreferencesDir()+"plugins/"+count+"-site-"+site.replaceAll("[/:\\\\
<>|]", "_")+".xml");
+ FileWriter out = new FileWriter(new
File(Main.pref
+ .getPluginsDirFile(), count + "-site-"
+ + site.replaceAll("[/:\\\\ <>|]", "_")
+ ".xml"));
out.append(txt);
out.close();
count++;
@@ -122,7 +128,7 @@
}
public static boolean downloadPlugin(PluginDescription pd) {
- File file = new
File(Main.pref.getPreferencesDir()+"plugins/"+pd.name+".jar");
+ File file = new File(Main.pref.getPluginsDirFile(), pd.name +
".jar");
if (!download(pd.resource, file)) {
JOptionPane.showMessageDialog(Main.parent, tr("Could
not download plugin: {0} from {1}", pd.name, pd.resource));
} else {
@@ -162,4 +168,21 @@
public static void update(Collection<PluginDescription> update) {
Main.worker.execute(new UpdateTask(update));
}
+
+ public static boolean moveUpdatedPlugins() {
+ File pluginDir = Main.pref.getPluginsDirFile();
+ boolean ok = true;
+ if (pluginDir.exists() && pluginDir.isDirectory()) {
+ final File[] files = pluginDir.listFiles(new
FilenameFilter() {
+ public boolean accept(File dir, String name) {
+ return name.endsWith(".new");
+ }});
+ for (File updatedPlugin : files) {
+ final String filePath = updatedPlugin.getPath();
+ File plugin = new File(filePath.substring(0,
filePath.length() - 4));
+ ok = plugin.delete() &&
updatedPlugin.renameTo(plugin) && ok;
+ }
+ }
+ return ok;
+ }
}
Index: src/org/openstreetmap/josm/plugins/Plugin.java
===================================================================
--- src/org/openstreetmap/josm/plugins/Plugin.java (revision 868)
+++ src/org/openstreetmap/josm/plugins/Plugin.java (working copy)
@@ -52,7 +52,7 @@
* @return The directory for the plugin to store all kind of stuff.
*/
public final String getPluginDir() {
- return Main.pref.getPreferencesDir()+"plugins/"+info.name+"/";
+ return new File(Main.pref.getPluginsDirFile(),
info.name).getPath();
}
/**
Index: src/org/openstreetmap/josm/gui/MainApplication.java
===================================================================
--- src/org/openstreetmap/josm/gui/MainApplication.java (revision 868)
+++ src/org/openstreetmap/josm/gui/MainApplication.java (working copy)
@@ -21,6 +21,7 @@
import javax.swing.JOptionPane;
import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.plugins.PluginDownloader;
import org.openstreetmap.josm.tools.BugReportExceptionHandler;
/**
* Main window class application.
@@ -83,7 +84,7 @@
// get the preferences.
final File prefDir = new File(Main.pref.getPreferencesDir());
// check if preferences directory has moved (TODO: Update code.
Remove this after some time)
- File oldPrefDir = new
File(System.getProperty("user.home")+"/.josm");
+ File oldPrefDir = new File(System.getProperty("user.home"),
".josm");
if (!prefDir.isDirectory() && oldPrefDir.isDirectory()) {
if (oldPrefDir.renameTo(prefDir)) {
// do not translate this
@@ -118,6 +119,12 @@
Main.pref.save();
}
+ if (!PluginDownloader.moveUpdatedPlugins()) {
+ JOptionPane.showMessageDialog(null,
+ tr("Activating the updated plugins failed."),
+ tr("Plugins"), JOptionPane.ERROR_MESSAGE);
+ }
+
// load the early plugins
Main.loadPlugins(true);
Index: src/org/openstreetmap/josm/data/Preferences.java
===================================================================
--- src/org/openstreetmap/josm/data/Preferences.java (revision 868)
+++ src/org/openstreetmap/josm/data/Preferences.java (working copy)
@@ -71,10 +71,21 @@
* Return the location of the user defined preferences file
*/
public String getPreferencesDir() {
+ final String path = getPreferencesDirFile().getPath();
+ if (path.endsWith(File.separator))
+ return path;
+ return path + File.separator;
+ }
+
+ public File getPreferencesDirFile() {
if (System.getenv("APPDATA") != null)
- return System.getenv("APPDATA")+"/JOSM/";
- return System.getProperty("user.home")+"/.josm/";
+ return new File(System.getenv("APPDATA"), "JOSM");
+ return new File(System.getProperty("user.home"), ".josm");
}
+
+ public File getPluginsDirFile() {
+ return new File(getPreferencesDirFile(), "plugins");
+ }
/**
* @return A list of all existing directories where resources could be
stored.
@@ -84,19 +95,21 @@
locations.add(Main.pref.getPreferencesDir());
String s;
if ((s = System.getenv("JOSM_RESOURCES")) != null) {
- if (!s.endsWith("/") && !s.endsWith("\\"))
- s = s + "/";
+ if (!s.endsWith(File.separator))
+ s = s + File.separator;
locations.add(s);
}
if ((s = System.getProperty("josm.resources")) != null) {
- if (!s.endsWith("/") && !s.endsWith("\\"))
- s = s + "/";
+ if (!s.endsWith(File.separator))
+ s = s + File.separator;
locations.add(s);
}
String appdata = System.getenv("APPDATA");
- if (System.getenv("ALLUSERSPROFILE") != null && appdata != null
&& appdata.lastIndexOf("\\") != -1) {
- appdata = appdata.substring(appdata.lastIndexOf("\\"));
-
locations.add(System.getenv("ALLUSERSPROFILE")+appdata+"/JOSM/");
+ if (System.getenv("ALLUSERSPROFILE") != null && appdata != null
+ && appdata.lastIndexOf(File.separator) != -1) {
+ appdata =
appdata.substring(appdata.lastIndexOf(File.separator));
+ locations.add(new File(new
File(System.getenv("ALLUSERSPROFILE"),
+ appdata), "JOSM").getPath());
}
locations.add("/usr/local/share/josm/");
locations.add("/usr/local/lib/josm/");
_______________________________________________
josm-dev mailing list
[email protected]
http://lists.openstreetmap.org/listinfo/josm-dev