From bf8435161dd5fbc88869356aa543aeafe107e3f4 Mon Sep 17 00:00:00 2001
From: tobias <tobias.ullerich@icloud.com>
Date: Sat, 13 Aug 2016 22:38:20 +0200
Subject: [PATCH] Implement using media folder in pad content types

---
 .../DesktopMenuToolbarViewController.java     |  1 -
 .../desktop/DesktopPadViewController.java     |  6 ++-
 .../playpad/pad/content/AudioContent.java     |  5 ++-
 .../project/PathsTabViewController.java       |  1 +
 .../viewcontroller/pad/PadDragListener.java   |  3 +-
 .../playpad/pad/conntent/PadContent.java      | 40 +++++++++++++++++--
 .../mediaplugin/image/ImageContent.java       |  8 ++--
 .../mediaplugin/video/VideoContent.java       |  5 ++-
 8 files changed, 55 insertions(+), 14 deletions(-)

diff --git a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java
index e1f9e1b3..f7d817b5 100644
--- a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java
+++ b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopMenuToolbarViewController.java
@@ -483,7 +483,6 @@ public class DesktopMenuToolbarViewController extends BasicMenuToolbarViewContro
 
 				projectSettingsViewController = null;
 				mainStage.toFront();
-				System.out.println("Done");
 			};
 
 			projectSettingsViewController = new ProjectSettingsViewController(mainViewController.getScreen(), mainStage, currentProject,
diff --git a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopPadViewController.java b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopPadViewController.java
index 0ae505cf..0f6ebcf0 100644
--- a/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopPadViewController.java
+++ b/PlayWall/src/de/tobias/playpad/layout/desktop/DesktopPadViewController.java
@@ -1,6 +1,7 @@
 package de.tobias.playpad.layout.desktop;
 
 import java.io.File;
+import java.io.IOException;
 import java.nio.file.Path;
 import java.util.Set;
 
@@ -67,7 +68,8 @@ public class DesktopPadViewController implements IPadViewControllerV2, EventHand
 		padDurationListener = new PadDurationListener(this);
 		padPositionListener = new PadPositionListener(this);
 
-		// Listener muss nur einmal hier hinzugefügt werden, weil bei einem neuen Profile, werden neue PadViewController erzeugt
+		// Listener muss nur einmal hier hinzugefügt werden, weil bei einem neuen Profile, werden neue PadViewController
+		// erzeugt
 		ProfileSettings profileSettings = Profile.currentProfile().getProfileSettings();
 		profileSettings.lockedProperty().addListener(padLockedListener);
 	}
@@ -244,7 +246,7 @@ public class DesktopPadViewController implements IPadViewControllerV2, EventHand
 
 		try {
 			content.handlePath(file.toPath());
-		} catch (NoSuchComponentException e) {
+		} catch (NoSuchComponentException | IOException e) {
 			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
diff --git a/PlayWall/src/de/tobias/playpad/pad/content/AudioContent.java b/PlayWall/src/de/tobias/playpad/pad/content/AudioContent.java
index f9fc5e94..5983e6d5 100644
--- a/PlayWall/src/de/tobias/playpad/pad/content/AudioContent.java
+++ b/PlayWall/src/de/tobias/playpad/pad/content/AudioContent.java
@@ -1,6 +1,7 @@
 package de.tobias.playpad.pad.content;
 
 import java.io.FileNotFoundException;
+import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -69,11 +70,11 @@ public class AudioContent extends PadContent implements Pauseable, Durationable,
 	}
 
 	@Override
-	public void handlePath(Path path) throws NoSuchComponentException {
+	public void handlePath(Path path) throws NoSuchComponentException, IOException {
 		// handle old media
 		unloadMedia();
 
-		this.path = path;
+		this.path = getRealPath(path);
 
 		// handle new media
 		loadMedia();
diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/option/project/PathsTabViewController.java b/PlayWall/src/de/tobias/playpad/viewcontroller/option/project/PathsTabViewController.java
index 354e1157..e857d85a 100644
--- a/PlayWall/src/de/tobias/playpad/viewcontroller/option/project/PathsTabViewController.java
+++ b/PlayWall/src/de/tobias/playpad/viewcontroller/option/project/PathsTabViewController.java
@@ -32,6 +32,7 @@ public class PathsTabViewController extends ProjectSettingsTabViewController {
 		File folder = chooser.showDialog(getStage());
 		if (folder != null) {
 			Path path = folder.toPath();
+			mediaPathTextField.setText(path.toString());
 		}
 	}
 
diff --git a/PlayWall/src/de/tobias/playpad/viewcontroller/pad/PadDragListener.java b/PlayWall/src/de/tobias/playpad/viewcontroller/pad/PadDragListener.java
index 2c86eb3a..b2d5ff3a 100644
--- a/PlayWall/src/de/tobias/playpad/viewcontroller/pad/PadDragListener.java
+++ b/PlayWall/src/de/tobias/playpad/viewcontroller/pad/PadDragListener.java
@@ -1,6 +1,7 @@
 package de.tobias.playpad.viewcontroller.pad;
 
 import java.io.File;
+import java.io.IOException;
 import java.util.Collection;
 import java.util.Set;
 
@@ -133,7 +134,7 @@ public class PadDragListener {
 
 				try {
 					content.handlePath(file.toPath());
-				} catch (NoSuchComponentException e) {
+				} catch (NoSuchComponentException | IOException e) {
 					// TODO Auto-generated catch block
 					e.printStackTrace();
 				}
diff --git a/PlayWallCore/src/de/tobias/playpad/pad/conntent/PadContent.java b/PlayWallCore/src/de/tobias/playpad/pad/conntent/PadContent.java
index 5e8df0ee..f0c6f6e7 100644
--- a/PlayWallCore/src/de/tobias/playpad/pad/conntent/PadContent.java
+++ b/PlayWallCore/src/de/tobias/playpad/pad/conntent/PadContent.java
@@ -1,10 +1,14 @@
 package de.tobias.playpad.pad.conntent;
 
+import java.io.IOException;
+import java.nio.file.Files;
 import java.nio.file.Path;
+import java.nio.file.StandardCopyOption;
 
 import org.dom4j.Element;
 
 import de.tobias.playpad.pad.Pad;
+import de.tobias.playpad.project.ProjectSettings;
 import de.tobias.playpad.registry.NoSuchComponentException;
 import de.tobias.utils.util.ZipFile;
 
@@ -43,15 +47,19 @@ public abstract class PadContent {
 	 * @param path
 	 *            path
 	 * @throws NoSuchComponentException
-	 *             Wird geworfen, wenn ein Pad eine Componenten nicht laden kann. Beispiel bei Audio das richtige Soundsystem
+	 *             Wird geworfen, wenn ein Pad eine Componenten nicht laden kann. Beispiel bei Audio das richtige
+	 *             Soundsystem
+	 * @throws IOException
+	 *             IO Fehler
 	 */
-	public abstract void handlePath(Path path) throws NoSuchComponentException;
+	public abstract void handlePath(Path path) throws NoSuchComponentException, IOException;
 
 	/**
 	 * Lädt die Medien, sodass sie auf abruf verfügbar sind.
 	 * 
 	 * @throws NoSuchComponentException
-	 *             Wird geworfen, wenn ein Pad eine Componenten nicht laden kann. Beispiel bei Audio das richtige Soundsystem
+	 *             Wird geworfen, wenn ein Pad eine Componenten nicht laden kann. Beispiel bei Audio das richtige
+	 *             Soundsystem
 	 */
 	public abstract void loadMedia() throws NoSuchComponentException;
 
@@ -86,4 +94,30 @@ public abstract class PadContent {
 
 	public abstract void exportMedia(ZipFile zip, Element element);
 
+	/**
+	 * Gibt den richtigen Pfad einer Datei zurück, basierend auf den Einstellungen.
+	 * 
+	 * @param orrginal
+	 *            orginal path
+	 * @return new path
+	 * @throws IOException
+	 *             IO Fehler
+	 * @since 5.1.0
+	 */
+	public Path getRealPath(Path orginal) throws IOException {
+		ProjectSettings settings = getPad().getProject().getSettings();
+		if (settings.isUseMediaPath()) {
+			Path mediaFolder = settings.getMediaPath();
+			Path newPath = mediaFolder.resolve(orginal.getFileName());
+
+			if (Files.notExists(mediaFolder)) {
+				Files.createDirectories(mediaFolder);
+			}
+			
+			Files.copy(orginal, newPath, StandardCopyOption.REPLACE_EXISTING);
+			return newPath;
+		}
+		return orginal;
+	}
+
 }
\ No newline at end of file
diff --git a/PlayWallPlugins/mediaplugin/de/tobias/playpad/mediaplugin/image/ImageContent.java b/PlayWallPlugins/mediaplugin/de/tobias/playpad/mediaplugin/image/ImageContent.java
index 2aacbe89..9c310081 100644
--- a/PlayWallPlugins/mediaplugin/de/tobias/playpad/mediaplugin/image/ImageContent.java
+++ b/PlayWallPlugins/mediaplugin/de/tobias/playpad/mediaplugin/image/ImageContent.java
@@ -1,6 +1,7 @@
 package de.tobias.playpad.mediaplugin.image;
 
 import java.io.FileNotFoundException;
+import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -37,14 +38,15 @@ public class ImageContent extends PadContent {
 	}
 
 	@Override
-	public void handlePath(Path path) {
+	public void handlePath(Path path) throws IOException {
 		unloadMedia();
-		setPath(path);
+		setPath(getRealPath(path));
 		loadMedia();
 	}
 
 	@Override
-	public void setMasterVolume(double masterVolume) {}
+	public void setMasterVolume(double masterVolume) {
+	}
 
 	@Override
 	public String getType() {
diff --git a/PlayWallPlugins/mediaplugin/de/tobias/playpad/mediaplugin/video/VideoContent.java b/PlayWallPlugins/mediaplugin/de/tobias/playpad/mediaplugin/video/VideoContent.java
index 5e5a41d2..b4a36a3a 100644
--- a/PlayWallPlugins/mediaplugin/de/tobias/playpad/mediaplugin/video/VideoContent.java
+++ b/PlayWallPlugins/mediaplugin/de/tobias/playpad/mediaplugin/video/VideoContent.java
@@ -1,5 +1,6 @@
 package de.tobias.playpad.mediaplugin.video;
 
+import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -70,9 +71,9 @@ public class VideoContent extends PadContent implements Pauseable, Durationable
 	}
 
 	@Override
-	public void handlePath(Path path) {
+	public void handlePath(Path path) throws IOException {
 		unloadMedia();
-		setPath(path);
+		setPath(getRealPath(path));
 		loadMedia();
 	}
 
-- 
GitLab