diff --git a/PlayWall/assets/de/tobias/playpad/assets/lang/_de.properties b/PlayWall/assets/de/tobias/playpad/assets/lang/_de.properties index 9eb27f1ec8539aa03b41a1afd05c1c417de97d21..6e553fe7b55f64165bef092e56959af31f7551a3 100644 --- a/PlayWall/assets/de/tobias/playpad/assets/lang/_de.properties +++ b/PlayWall/assets/de/tobias/playpad/assets/lang/_de.properties @@ -163,6 +163,7 @@ Error.Midi.Send=Der Midi Befehl konnte nicht gesendet werden. ({}) # Error - Plugins Error.Plugins.Download=Das Plugin {} konnte nicht geladen werden. +Error.Plugins.Avaiable=Es sind keine Plugins f�r dieses Update Kanal verf�gbar. #Mapper Mapper.Keyboard.Name=Tastatur diff --git a/PlayWall/src/application.yml b/PlayWall/src/application.yml index d2917e24a1453c0ebef479cce262aed816aab3d3..cb691eaa1e962baae2cb38837cac4f52d1355cce 100644 --- a/PlayWall/src/application.yml +++ b/PlayWall/src/application.yml @@ -10,6 +10,8 @@ updateURL: http://tobisan.no-ip.org/files/PlayWall userInfo: Website: http://tobisan.no-ip.org/ ErrorURL: http://tobisan.no-ip.org/upload.php - PluginsURL: http://tobisan.no-ip.org/files/PlayWall/plugins.yml + PluginsURL: + Stable: http://tobisan.no-ip.org/files/PlayWall/stable/plugins.yml + Beta: http://tobisan.no-ip.org/files/PlayWall/beta/plugins.yml ChangelogURL: http://tobisan.no-ip.org/whatsnew-2.php?id=1 UpdaterProgram: http://tobisan.no-ip.org/files/Updater/ diff --git a/PlayWall/src/de/tobias/playpad/AppUserInfoStrings.java b/PlayWall/src/de/tobias/playpad/AppUserInfoStrings.java index df966939ee73d71abe043ee02b458093900bced8..892cf27637337f1ed49fcda4b1ebb86f93af78d1 100644 --- a/PlayWall/src/de/tobias/playpad/AppUserInfoStrings.java +++ b/PlayWall/src/de/tobias/playpad/AppUserInfoStrings.java @@ -3,7 +3,8 @@ package de.tobias.playpad; public class AppUserInfoStrings { public static final String WEBSITE = "Website"; - public static final String PLUGINS_URL = "PluginsURL"; + public static final String PLUGINS_URL_STABLE = "PluginsURL.Stable"; + public static final String PLUGINS_URL_BETA = "PluginsURL.Beta"; public static final String ERROR_URL = "ErrorURL"; public static final String CHANGELOG_URL = "ChangelogURL"; public static final String UPDATER_PROGRAM = "UpdaterProgram"; diff --git a/PlayWall/src/de/tobias/playpad/Strings.java b/PlayWall/src/de/tobias/playpad/Strings.java index 04c0cc3b3039adcf15798c37c2e9dde296f52f70..6a84f43dfdc50836ddcb863666ad3f87f4b4dff7 100644 --- a/PlayWall/src/de/tobias/playpad/Strings.java +++ b/PlayWall/src/de/tobias/playpad/Strings.java @@ -156,10 +156,7 @@ public class Strings { // Error - Plugins @Deprecated public static final String Error_Plugins_Download = "Error.Plugins.Download"; - - /* - * NEU - */ + public static final String Error_Plugins_Available = "Error.Plugins.Available"; // Mapper public static final String Mapper_Keyboard_Name = "Mapper.Keyboard.Name"; diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/PluginViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/PluginViewController.java index d519188a961d87ab1a645dda272b1229635001b7..7b016badcf931b9653914a68728e45a3b3a88dc8 100644 --- a/PlayWall/src/de/tobias/playpad/viewcontroller/PluginViewController.java +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/PluginViewController.java @@ -2,17 +2,23 @@ package de.tobias.playpad.viewcontroller; import java.io.IOException; import java.util.Collections; +import java.util.List; + +import org.bukkit.configuration.MemorySection; import de.tobias.playpad.AppUserInfoStrings; import de.tobias.playpad.PlayPadMain; import de.tobias.playpad.Strings; import de.tobias.playpad.plugin.Plugin; +import de.tobias.playpad.plugin.Plugins; import de.tobias.playpad.settings.Profile; +import de.tobias.playpad.update.UpdateChannel; import de.tobias.playpad.viewcontroller.cell.PluginCell; import de.tobias.utils.application.ApplicationUtils; import de.tobias.utils.ui.ViewController; import de.tobias.utils.util.Localization; import de.tobias.utils.util.Worker; +import javafx.application.Platform; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.control.Button; @@ -40,11 +46,28 @@ public class PluginViewController extends ViewController { Worker.runLater(() -> { try { - String pluginInfoURL = ApplicationUtils.getApplication().getInfo().getUserInfo().getString(AppUserInfoStrings.PLUGINS_URL); - Plugin.load(pluginInfoURL); - - Collections.sort(Plugin.getPlugins()); - pluginListView.getItems().addAll(Plugin.getPlugins()); + String pluginInfoURL = null; + + MemorySection userInfo = ApplicationUtils.getApplication().getInfo().getUserInfo(); + UpdateChannel updateChannel = Profile.currentProfile().getProfileSettings().getUpdateChannel(); + + if (updateChannel == UpdateChannel.STABLE) { + pluginInfoURL = userInfo.getString(AppUserInfoStrings.PLUGINS_URL_STABLE); + } else if (updateChannel == UpdateChannel.BETA) { + pluginInfoURL = userInfo.getString(AppUserInfoStrings.PLUGINS_URL_BETA); + } else { + // No Plugins for this UpdateChannel Available --> Return + showInfoMessage(Localization.getString(Strings.Error_Plugins_Available)); + return; + } + + List<Plugin> plugins = Plugins.load(pluginInfoURL, true); + + Collections.sort(plugins); + Platform.runLater(() -> + { + pluginListView.getItems().setAll(plugins); + }); } catch (IOException e) { e.printStackTrace(); showErrorMessage(Localization.getString(Strings.Error_Standard_Gen), PlayPadMain.stageIcon); diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/cell/PluginCell.java b/PlayWall/src/de/tobias/playpad/viewcontroller/cell/PluginCell.java index 8406d56263a26a169e89365c5a09141629a35a6d..fda52d6daca20e823028dc8d1e551d6be4312ba3 100644 --- a/PlayWall/src/de/tobias/playpad/viewcontroller/cell/PluginCell.java +++ b/PlayWall/src/de/tobias/playpad/viewcontroller/cell/PluginCell.java @@ -4,9 +4,13 @@ import java.io.IOException; import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; import de.tobias.playpad.PlayPadMain; import de.tobias.playpad.plugin.Plugin; +import de.tobias.playpad.plugin.Plugins; +import de.tobias.utils.application.App; import de.tobias.utils.application.ApplicationUtils; import de.tobias.utils.application.container.PathType; import javafx.beans.value.ChangeListener; @@ -47,7 +51,7 @@ public class PluginCell extends ListCell<Plugin> implements ChangeListener<Boole checkBox.setSelected(false); } setGraphic(buttons); - checkBox.setText(item.getName()); + checkBox.setText(item.toString()); } else { setGraphic(null); } @@ -55,26 +59,43 @@ public class PluginCell extends ListCell<Plugin> implements ChangeListener<Boole @Override public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) { - Path path = ApplicationUtils.getApplication().getPath(PathType.LIBRARY, plugin.getFileName()); + App app = ApplicationUtils.getApplication(); + + Path path = app.getPath(PathType.LIBRARY, plugin.getFileName()); if (newValue) { // Wurde Aktiviert downloadPlugin(plugin, path); // Dependencies - for (String dependencyName : plugin.getDependencies()) { - for (Plugin plugin : Plugin.getPlugins()) { - if (plugin.getName().equals(dependencyName)) { - Path decPath = ApplicationUtils.getApplication().getPath(PathType.LIBRARY, plugin.getFileName()); - downloadPlugin(plugin, decPath); - } - } - } + List<Plugin> dependencies = findDependencies(); + dependencies.forEach(p -> + { + Path decPath = app.getPath(PathType.LIBRARY, p.getFileName()); + downloadPlugin(p, decPath); + // Add Plugin to classpath + manager.addPluginsFrom(decPath.toUri()); + }); + + // Add Plugin to classpath manager.addPluginsFrom(path.toUri()); } else { + // Deaktivieren PlayPadMain.addDeletedPlugin(path); } } + private List<Plugin> findDependencies() { + List<Plugin> plugins = new ArrayList<>(); + for (String dependencyName : plugin.getDependencies()) { + for (Plugin plugin : Plugins.getPlugins()) { + if (plugin.getName().equals(dependencyName)) { + plugins.add(plugin); + } + } + } + return plugins; + } + private void downloadPlugin(Plugin plugin, Path path) { if (Files.notExists(path)) { try { diff --git a/PlayWallCore/src/de/tobias/playpad/plugin/Plugin.java b/PlayWallCore/src/de/tobias/playpad/plugin/Plugin.java index 4d7684d0f8d15f3497114df28761e1561795ca64..fcbe98abe97596e8ecc83b62c0eefa2ebb30d9a6 100644 --- a/PlayWallCore/src/de/tobias/playpad/plugin/Plugin.java +++ b/PlayWallCore/src/de/tobias/playpad/plugin/Plugin.java @@ -1,36 +1,26 @@ package de.tobias.playpad.plugin; -import java.io.IOException; -import java.net.URL; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.ArrayList; import java.util.List; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; - -import de.tobias.utils.application.ApplicationUtils; -import de.tobias.utils.application.container.PathType; - public class Plugin implements Comparable<Plugin> { private String name; private String fileName; private String url; - private boolean active; - private List<String> dependencies; - private static List<Plugin> plugins; + private String version; + private long build; - static { - plugins = new ArrayList<>(); - } + private boolean active; + private List<String> dependencies; - public Plugin(String name, String fileName, String url, boolean active, List<String> dependencies) { + public Plugin(String name, String fileName, String url, String version, long build, boolean active, + List<String> dependencies) { this.name = name; this.fileName = fileName; this.url = url; + this.version = version; + this.build = build; this.active = active; this.dependencies = dependencies; } @@ -78,32 +68,8 @@ public class Plugin implements Comparable<Plugin> { return getName().compareTo(o.getName()); } - public static void load(String pluginInfoURL) throws IOException { - plugins.clear(); - URL url = new URL(pluginInfoURL); - - FileConfiguration cfg = YamlConfiguration.loadConfiguration(url.openStream()); - - // Iterate over all plugins that are online avialable - for (String key : cfg.getConfigurationSection("plugins").getKeys(false)) { - String name = new String(cfg.getString("plugins." + key + ".name").getBytes(), "UTF-8"); - String pluginUrl = cfg.getString("plugins." + key + ".url"); - String fileName = cfg.getString("plugins." + key + ".filename"); - - List<String> dependencies = cfg.getStringList("plugins." + key + ".dependencies"); - - boolean active = false; - - Path path = ApplicationUtils.getApplication().getPath(PathType.LIBRARY, fileName); - if (Files.exists(path)) - active = true; - - Plugin plugin = new Plugin(name, fileName, pluginUrl, active, dependencies); - plugins.add(plugin); - } - } - - public static List<Plugin> getPlugins() { - return plugins; + @Override + public String toString() { + return name + " " + version + " (" + build + ")"; } } diff --git a/PlayWallCore/src/de/tobias/playpad/plugin/Plugins.java b/PlayWallCore/src/de/tobias/playpad/plugin/Plugins.java new file mode 100644 index 0000000000000000000000000000000000000000..7ee734fac9af1d34cb3c81c5619537c70600b21f --- /dev/null +++ b/PlayWallCore/src/de/tobias/playpad/plugin/Plugins.java @@ -0,0 +1,56 @@ +package de.tobias.playpad.plugin; + +import java.io.IOException; +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; + +import de.tobias.utils.application.ApplicationUtils; +import de.tobias.utils.application.container.PathType; + +public class Plugins { + + private static List<Plugin> plugins; + + static { + plugins = new ArrayList<>(); + } + + public static List<Plugin> load(String pluginInfoURL, boolean fetch) throws IOException { + if (plugins.isEmpty() || fetch) { + URL url = new URL(pluginInfoURL); + + FileConfiguration cfg = YamlConfiguration.loadConfiguration(url.openStream()); + + // Iterate over all plugins that are online avialable + for (String key : cfg.getConfigurationSection("plugins").getKeys(false)) { + String name = new String(cfg.getString("plugins." + key + ".name").getBytes(), "UTF-8"); + String pluginUrl = cfg.getString("plugins." + key + ".url"); + String fileName = cfg.getString("plugins." + key + ".filename"); + String version = cfg.getString("plugins." + key + ".version"); + long build = cfg.getLong("plugins." + key + ".build"); + + List<String> dependencies = cfg.getStringList("plugins." + key + ".dependencies"); + + boolean active = false; + + Path path = ApplicationUtils.getApplication().getPath(PathType.LIBRARY, fileName); + if (Files.exists(path)) + active = true; + + Plugin plugin = new Plugin(name, fileName, pluginUrl, version, build, active, dependencies); + plugins.add(plugin); + } + } + return plugins; + } + + public static List<Plugin> getPlugins() { + return plugins; + } +}