aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Kohls <mattkohls13@gmail.com>2018-11-12 22:25:56 -0500
committerMatt Kohls <mattkohls13@gmail.com>2018-11-12 22:25:56 -0500
commite3718974166f429524877aaefd3cf1f3b384f27e (patch)
tree05c8a82d986035b7c9911954348f40ee6a6e8cce
parent2265b16d8b3bcf74a1681838cefc8e81ea6e9eab (diff)
downloadSoundChan-e3718974166f429524877aaefd3cf1f3b384f27e.tar.gz
SoundChan-e3718974166f429524877aaefd3cf1f3b384f27e.tar.bz2
SoundChan-e3718974166f429524877aaefd3cf1f3b384f27e.zip
Hopefully setting things up to make scanning for media updates easier
But things don't actually work yet
-rw-r--r--src/main/java/soundchan/BotListener/BotListener.java28
-rw-r--r--src/main/java/soundchan/BotListener/MediaWatcher.java40
-rw-r--r--src/main/java/soundchan/BotListener/MediaWatcherListener.java8
3 files changed, 59 insertions, 17 deletions
diff --git a/src/main/java/soundchan/BotListener/BotListener.java b/src/main/java/soundchan/BotListener/BotListener.java
index c7740c0..6350d6d 100644
--- a/src/main/java/soundchan/BotListener/BotListener.java
+++ b/src/main/java/soundchan/BotListener/BotListener.java
@@ -19,11 +19,12 @@ import net.dv8tion.jda.core.hooks.ListenerAdapter;
import net.dv8tion.jda.core.managers.AudioManager;
import soundchan.*;
+import java.nio.file.WatchEvent;
+import java.sql.SQLOutput;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
-import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
@@ -69,14 +70,28 @@ public class BotListener extends ListenerAdapter{
localManager = new LocalAudioManager(localFilePath, userAudioPath);
if(settingEnableCheck(properties.getProperty("watchUserSoundFile"))) {
- addWatcherTask(userAudioPath, "watchUserSoundFile");
+ MediaWatcherListener listener = (event) -> System.out.println("thing");
+ addWatcherTask(listener, userAudioPath, "watchUserSoundFile");
+ /*addWatcherTask(new MediaWatcherListener() {
+ @Override
+ public void runTask(WatchEvent event) {
+ System.out.println("Aaaa");
+ //localManager.UpdateUserAudio();
+ }
+ }, userAudioPath, "watchUserSoundFile");*/
}
}
else
localManager = new LocalAudioManager(localFilePath);
if(settingEnableCheck(properties.getProperty("watchLocalFilePath"))) {
- addWatcherTask(localFilePath, "watchLocalFilePath");
+ addWatcherTask(new MediaWatcherListener() {
+ @Override
+ public void runTask(WatchEvent event) {
+ System.out.println("Oooo");
+ //localManager.UpdateFiles();
+ }
+ }, localFilePath, "watchLocalFilePath");
}
}
@@ -391,13 +406,14 @@ public class BotListener extends ListenerAdapter{
/**
* Adds a new MediaWatcher to the list of running tasks
+ * @param listener Listener that will get callback during watching of media
* @param filepath Path to either directory or file
* @param taskName Thing to name task as
*/
- private void addWatcherTask(String filepath, String taskName) {
+ private void addWatcherTask(@NotNull MediaWatcherListener listener, String filepath, String taskName) {
ExecutorService executorService = Executors.newSingleThreadExecutor();
- MediaWatcher directoryWatcher = new MediaWatcher(localManager, filepath);
- otherTasks.put(taskName, executorService.submit(directoryWatcher));
+ MediaWatcher watcher = new MediaWatcher(listener, filepath);
+ otherTasks.put(taskName, executorService.submit(watcher));
executorService.shutdown();
}
diff --git a/src/main/java/soundchan/BotListener/MediaWatcher.java b/src/main/java/soundchan/BotListener/MediaWatcher.java
index 20f6ee8..684be94 100644
--- a/src/main/java/soundchan/BotListener/MediaWatcher.java
+++ b/src/main/java/soundchan/BotListener/MediaWatcher.java
@@ -1,7 +1,5 @@
package soundchan.BotListener;
-import soundchan.LocalAudioManager;
-
import java.io.File;
import java.io.IOException;
import java.nio.file.*;
@@ -13,12 +11,13 @@ import static java.nio.file.StandardWatchEventKinds.ENTRY_MODIFY;
public class MediaWatcher implements Runnable {
- private LocalAudioManager localAudioManager;
+ private MediaWatcherListener listener;
private String mediaFilename;
private Path mediaDir;
private WatchService watchService;
private WatchKey watchKey;
private boolean isDirectory;
+ private int sleepTime = 5000;
@SuppressWarnings("unchecked")
static <T> WatchEvent<T> cast(WatchEvent<?> event) {
@@ -27,13 +26,32 @@ public class MediaWatcher implements Runnable {
/**
* Creates a MediaWatcher, which monitors changes to files either within a directory or for a specific file.
- * If the given filepath is name of a directory, it is assumed that we want to monitor changes to the sound files.
- * If the given filepath is a single file, it is assumed that we want to monitor changes to the userSoundFile.
- * @param audioManager AudioManager for this bot instance
+ * Defaults to scanning every 5 seconds.
+ * @param listener Object that will get a callback when there is a watch event
* @param filepath Path to either directory or specific file
*/
- public MediaWatcher(LocalAudioManager audioManager, String filepath) {
- this.localAudioManager = audioManager;
+ public MediaWatcher(MediaWatcherListener listener, String filepath) {
+ this.listener = listener;
+ startWatchService(filepath);
+ }
+
+ /**
+ * Creates a MediaWatcher, which monitors changes to files either within a directory or for a specific file.
+ * @param listener Object that will get a callback when there is a watch event
+ * @param filepath Path to either directory or specific file
+ * @param sleepTime How long to put the scanner thread to sleep between rescans (time in milliseconds)
+ */
+ public MediaWatcher(MediaWatcherListener listener, String filepath, int sleepTime) {
+ this.listener = listener;
+ this.sleepTime = sleepTime;
+ startWatchService(filepath);
+ }
+
+ /**
+ * Sets up watch service for the file/directory
+ * @param filepath Path to file or directory to be scanned
+ */
+ private void startWatchService(String filepath) {
File mediaFile = new File(filepath);
this.mediaFilename = mediaFile.getName();
if(mediaFile.isFile()) {
@@ -70,10 +88,10 @@ public class MediaWatcher implements Runnable {
for(WatchEvent<?> event : key.pollEvents()) {
WatchEvent<Path> pathEvent = cast(event);
if(isDirectory) {
- localAudioManager.UpdateFiles();
+ listener.runTask(event);
} else {
if(pathEvent.context().endsWith(mediaFilename)) {
- localAudioManager.UpdateUserAudio();
+ listener.runTask(event);
}
}
}
@@ -82,7 +100,7 @@ public class MediaWatcher implements Runnable {
break;
}
- sleep(5000);
+ sleep(sleepTime);
}
} catch(InterruptedException e) {
return;
diff --git a/src/main/java/soundchan/BotListener/MediaWatcherListener.java b/src/main/java/soundchan/BotListener/MediaWatcherListener.java
new file mode 100644
index 0000000..8997a49
--- /dev/null
+++ b/src/main/java/soundchan/BotListener/MediaWatcherListener.java
@@ -0,0 +1,8 @@
+package soundchan.BotListener;
+
+import java.nio.file.WatchEvent;
+
+public interface MediaWatcherListener {
+
+ void runTask(WatchEvent event);
+}