Skip to content
Snippets Groups Projects
Commit 2d8fce59 authored by tobias's avatar tobias
Browse files

Merge branch 'dev-5-0-1' of ssh://git@raspberrypi2/home/git/Java/PlayWall into dev-5-0-1

parents cbb73887 1be3fb3d
No related branches found
No related tags found
No related merge requests found
......@@ -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
......
......@@ -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/
......@@ -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";
......
......@@ -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";
......
......@@ -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);
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(Plugin.getPlugins());
pluginListView.getItems().addAll(Plugin.getPlugins());
Collections.sort(plugins);
Platform.runLater(() ->
{
pluginListView.getItems().setAll(plugins);
});
} catch (IOException e) {
e.printStackTrace();
showErrorMessage(Localization.getString(Strings.Error_Standard_Gen), PlayPadMain.stageIcon);
......
......@@ -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 {
......
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 + ")";
}
}
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;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment