From 76aeadc936be4d0e1f6e89eeb217bc6e8c92e680 Mon Sep 17 00:00:00 2001 From: tobias <tobias.ullerich@icloud.com> Date: Fri, 14 Oct 2016 19:29:13 +0200 Subject: [PATCH] Add NativeAudioMac as plugin --- .../src/de/tobias/playpad/PlayPadMain.java | 8 +- PlayWallNativeMac/.classpath | 3 + .../de/tobias/playpad}/libNativeAudio.dylib | Bin .../{ => namac}/NativeAudioMacHandler.java | 3 +- .../NativeAudioMacHandlerConnect.java | 3 +- .../playpad/namac/NativeAudioMacPlugin.java | 7 ++ .../namac/NativeAudioMacPluginImpl.java | 81 ++++++++++++++++++ .../playpad/namac/NativeAudioMacUpdater.java | 79 +++++++++++++++++ 8 files changed, 180 insertions(+), 4 deletions(-) rename PlayWallNativeMac/{ => src/de/tobias/playpad}/libNativeAudio.dylib (100%) rename PlayWallNativeMac/src/de/tobias/playpad/{ => namac}/NativeAudioMacHandler.java (97%) rename PlayWallNativeMac/src/de/tobias/playpad/{ => namac}/NativeAudioMacHandlerConnect.java (97%) create mode 100644 PlayWallNativeMac/src/de/tobias/playpad/namac/NativeAudioMacPlugin.java create mode 100644 PlayWallNativeMac/src/de/tobias/playpad/namac/NativeAudioMacPluginImpl.java create mode 100644 PlayWallNativeMac/src/de/tobias/playpad/namac/NativeAudioMacUpdater.java diff --git a/PlayWall/src/de/tobias/playpad/PlayPadMain.java b/PlayWall/src/de/tobias/playpad/PlayPadMain.java index ecb8676f..9a472114 100644 --- a/PlayWall/src/de/tobias/playpad/PlayPadMain.java +++ b/PlayWall/src/de/tobias/playpad/PlayPadMain.java @@ -124,11 +124,15 @@ public class PlayPadMain extends Application implements LocalizationDelegate { // Load Plugin Path Path pluginFolder; if (getParameters().getNamed().containsKey("plugin")) { - pluginFolder = Paths.get(getParameters().getNamed().get("plugin")); + String pluginParam = getParameters().getNamed().get("plugin"); + for (String part : pluginParam.split(":")) { + pluginFolder = Paths.get(part); + setupPlugins(pluginFolder); + } } else { pluginFolder = ApplicationUtils.getApplication().getPath(PathType.LIBRARY); + setupPlugins(pluginFolder); } - setupPlugins(pluginFolder); /* * Load Data diff --git a/PlayWallNativeMac/.classpath b/PlayWallNativeMac/.classpath index 7d032884..8c57eb32 100644 --- a/PlayWallNativeMac/.classpath +++ b/PlayWallNativeMac/.classpath @@ -3,7 +3,10 @@ <classpathentry kind="src" path="src"/> <classpathentry kind="src" path="test"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> + <classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/YML"/> <classpathentry combineaccessrules="false" kind="src" path="/PlayWallCore"/> <classpathentry combineaccessrules="false" kind="src" path="/libUtils"/> + <classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Plugins"/> + <classpathentry combineaccessrules="false" kind="src" path="/Updater"/> <classpathentry kind="output" path="bin"/> </classpath> diff --git a/PlayWallNativeMac/libNativeAudio.dylib b/PlayWallNativeMac/src/de/tobias/playpad/libNativeAudio.dylib similarity index 100% rename from PlayWallNativeMac/libNativeAudio.dylib rename to PlayWallNativeMac/src/de/tobias/playpad/libNativeAudio.dylib diff --git a/PlayWallNativeMac/src/de/tobias/playpad/NativeAudioMacHandler.java b/PlayWallNativeMac/src/de/tobias/playpad/namac/NativeAudioMacHandler.java similarity index 97% rename from PlayWallNativeMac/src/de/tobias/playpad/NativeAudioMacHandler.java rename to PlayWallNativeMac/src/de/tobias/playpad/namac/NativeAudioMacHandler.java index 066831de..85e2368f 100644 --- a/PlayWallNativeMac/src/de/tobias/playpad/NativeAudioMacHandler.java +++ b/PlayWallNativeMac/src/de/tobias/playpad/namac/NativeAudioMacHandler.java @@ -1,7 +1,8 @@ -package de.tobias.playpad; +package de.tobias.playpad.namac; import java.nio.file.Path; +import de.tobias.playpad.NativeAudio; import de.tobias.playpad.audio.AudioHandler; import de.tobias.playpad.audio.Peakable; import de.tobias.playpad.pad.PadStatus; diff --git a/PlayWallNativeMac/src/de/tobias/playpad/NativeAudioMacHandlerConnect.java b/PlayWallNativeMac/src/de/tobias/playpad/namac/NativeAudioMacHandlerConnect.java similarity index 97% rename from PlayWallNativeMac/src/de/tobias/playpad/NativeAudioMacHandlerConnect.java rename to PlayWallNativeMac/src/de/tobias/playpad/namac/NativeAudioMacHandlerConnect.java index 66245637..1f70f758 100644 --- a/PlayWallNativeMac/src/de/tobias/playpad/NativeAudioMacHandlerConnect.java +++ b/PlayWallNativeMac/src/de/tobias/playpad/namac/NativeAudioMacHandlerConnect.java @@ -1,7 +1,8 @@ -package de.tobias.playpad; +package de.tobias.playpad.namac; import java.util.HashMap; +import de.tobias.playpad.NativeAudio; import de.tobias.playpad.NativeAudio.NativeAudioDelegate; import de.tobias.playpad.audio.AudioCapability; import de.tobias.playpad.audio.AudioHandler; diff --git a/PlayWallNativeMac/src/de/tobias/playpad/namac/NativeAudioMacPlugin.java b/PlayWallNativeMac/src/de/tobias/playpad/namac/NativeAudioMacPlugin.java new file mode 100644 index 00000000..c17700df --- /dev/null +++ b/PlayWallNativeMac/src/de/tobias/playpad/namac/NativeAudioMacPlugin.java @@ -0,0 +1,7 @@ +package de.tobias.playpad.namac; + +import de.tobias.playpad.plugin.AdvancedPlugin; + +public interface NativeAudioMacPlugin extends AdvancedPlugin { + +} diff --git a/PlayWallNativeMac/src/de/tobias/playpad/namac/NativeAudioMacPluginImpl.java b/PlayWallNativeMac/src/de/tobias/playpad/namac/NativeAudioMacPluginImpl.java new file mode 100644 index 00000000..f7ad651a --- /dev/null +++ b/PlayWallNativeMac/src/de/tobias/playpad/namac/NativeAudioMacPluginImpl.java @@ -0,0 +1,81 @@ +package de.tobias.playpad.namac; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; + +import de.tobias.playpad.PlayPadPlugin; +import de.tobias.playpad.audio.AudioRegistry; +import de.tobias.playpad.plugin.Module; +import de.tobias.updater.client.Updatable; +import de.tobias.utils.application.App; +import de.tobias.utils.application.ApplicationUtils; +import de.tobias.utils.application.container.PathType; +import de.tobias.utils.util.IOUtils; +import de.tobias.utils.util.OS; +import net.xeoh.plugins.base.annotations.PluginImplementation; +import net.xeoh.plugins.base.annotations.events.PluginLoaded; +import net.xeoh.plugins.base.annotations.events.Shutdown; + +@PluginImplementation +public class NativeAudioMacPluginImpl implements NativeAudioMacPlugin { + + private static final String ASSETS = "de/tobias/playpad/"; + + private static final String NAME = "NativeAudioMac"; + private static final String IDENTIFIER = "de.tobias.playpad.namac.NativeAudioMacPluginImpl"; + + private Module module; + private Updatable updatable; + + @PluginLoaded + public void onLoaded(NativeAudioMacPlugin plugin) { + module = new Module(NAME, IDENTIFIER); + updatable = new NativeAudioMacUpdater(); + + try { + prepareBridging(); + + if (OS.isMacOS()) { + AudioRegistry registry = PlayPadPlugin.getRegistryCollection().getAudioHandlers(); + registry.registerComponent(new NativeAudioMacHandlerConnect(), "NativeMac", module); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + private void prepareBridging() throws IOException { + App app = ApplicationUtils.getApplication(); + Path resourceFolder = app.getPath(PathType.LIBRARY, "namac"); + if (Files.notExists(resourceFolder)) { + Files.createDirectories(resourceFolder); + } + + Path dest = copyResource(resourceFolder, ASSETS, "libNativeAudio.dylib"); + System.load(dest.toString()); + } + + private Path copyResource(Path resourceFolder, String packageName, String file) throws IOException { + Path dest = resourceFolder.resolve(file); + IOUtils.copy(getClass().getClassLoader().getResourceAsStream(packageName + file), dest); + System.out.println("Copied: " + file); + return dest; + } + + @Shutdown + public void onShutdown() { + + } + + @Override + public Module getModule() { + return module; + } + + @Override + public Updatable getUpdatable() { + return updatable; + } + +} diff --git a/PlayWallNativeMac/src/de/tobias/playpad/namac/NativeAudioMacUpdater.java b/PlayWallNativeMac/src/de/tobias/playpad/namac/NativeAudioMacUpdater.java new file mode 100644 index 00000000..487b700f --- /dev/null +++ b/PlayWallNativeMac/src/de/tobias/playpad/namac/NativeAudioMacUpdater.java @@ -0,0 +1,79 @@ +package de.tobias.playpad.namac; + +import java.io.IOException; +import java.net.URL; +import java.nio.file.Path; + +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; + +import de.tobias.updater.client.Updatable; +import de.tobias.updater.client.UpdateChannel; +import de.tobias.utils.application.App; +import de.tobias.utils.application.ApplicationUtils; +import de.tobias.utils.application.container.PathType; + +public class NativeAudioMacUpdater implements Updatable { + + private int newBuild; + private String newVersion; + private URL remotePath; + + private String localFileName; + private String name; + + @Override + public int getCurrentBuild() { + return 1; + } + + @Override + public String getCurrentVersion() { + return "1.0"; + } + + @Override + public int getNewBuild() { + return newBuild; + } + + @Override + public String getNewVersion() { + return newVersion; + } + + @Override + public void loadInformation(UpdateChannel channel) throws IOException { + App app = ApplicationUtils.getMainApplication(); + URL url = new URL(app.getInfo().getUpdateURL() + "/" + channel + "/plugins.yml"); + FileConfiguration config = YamlConfiguration.loadConfiguration(url.openStream()); + + newBuild = config.getInt("plugins.namac.build"); + newVersion = config.getString("plugins.namac.version"); + remotePath = new URL(config.getString("plugins.namac.url")); + localFileName = config.getString("plugins.namac.filename"); + name = config.getString("plugins.namac.name"); + + } + + @Override + public boolean isUpdateAvailable() { + return getCurrentBuild() < getNewBuild(); + } + + @Override + public URL getDownloadPath() { + return remotePath; + } + + @Override + public Path getLocalPath() { + return ApplicationUtils.getApplication().getPath(PathType.LIBRARY, localFileName); + } + + @Override + public String name() { + return name; + } + +} -- GitLab