From 2cd178e7455f5423d0e84fe4b0b1e7cf7cb0b6be Mon Sep 17 00:00:00 2001
From: tobias <thinkdifferent055@gmail.com>
Date: Wed, 8 Dec 2021 21:15:19 +0100
Subject: [PATCH] #181 - Add option to go to the next playlist item only by
 manual interaction

---
 .../option/pad/PlaylistTabViewController.java    |  8 ++++++--
 .../src/main/resources/lang/ui_de.properties     |  1 +
 .../resources/view/option/pad/PlaylistTab.fxml   |  1 +
 .../tobias/playpad/pad/content/Playlistable.java |  1 +
 .../content/pad/ContentPlayerPadContent.scala    | 16 +++++++++-------
 5 files changed, 18 insertions(+), 9 deletions(-)

diff --git a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/PlaylistTabViewController.java b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/PlaylistTabViewController.java
index 6eb0738f..74de2555 100644
--- a/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/PlaylistTabViewController.java
+++ b/PlayWall/src/main/java/de/tobias/playpad/viewcontroller/option/pad/PlaylistTabViewController.java
@@ -29,12 +29,14 @@ public class PlaylistTabViewController extends PadSettingsTabViewController {
 
 	@FXML
 	private CheckBox shuffleCheckbox;
-
 	@FXML
-	private ListView<MediaPath> mediaPathListView;
+	private CheckBox autoNextCheckbox;
 
 	@FXML
 	private Button addButton;
+
+	@FXML
+	private ListView<MediaPath> mediaPathListView;
 	@FXML
 	private Button upButton;
 	@FXML
@@ -123,11 +125,13 @@ public class PlaylistTabViewController extends PadSettingsTabViewController {
 	@Override
 	public void loadSettings(Pad pad) {
 		shuffleCheckbox.setSelected((Boolean) pad.getPadSettings().getCustomSettings().getOrDefault(Playlistable.SHUFFLE_SETTINGS_KEY, false));
+		autoNextCheckbox.setSelected((Boolean) pad.getPadSettings().getCustomSettings().getOrDefault(Playlistable.AUTO_NEXT_SETTINGS_KEY, true));
 	}
 
 	@Override
 	public void saveSettings(Pad pad) {
 		pad.getPadSettings().getCustomSettings().put(Playlistable.SHUFFLE_SETTINGS_KEY, shuffleCheckbox.isSelected());
+		pad.getPadSettings().getCustomSettings().put(Playlistable.AUTO_NEXT_SETTINGS_KEY, autoNextCheckbox.isSelected());
 	}
 
 	@FXML
diff --git a/PlayWall/src/main/resources/lang/ui_de.properties b/PlayWall/src/main/resources/lang/ui_de.properties
index 39e63dfd..f7eb45e0 100755
--- a/PlayWall/src/main/resources/lang/ui_de.properties
+++ b/PlayWall/src/main/resources/lang/ui_de.properties
@@ -139,6 +139,7 @@ padSettings.layout.label.custom=Eigenes Layout:
 padSettings.layout.checkbox.custom=Aktiviert
 padSettings.playlist.settings.title=Allgemeine Einstellungen
 padSettings.playlist.settings.shuffle=Zuf\u00E4llige Wiedergabe
+padSettings.playlist.settings.autoNext=N\u00E4chsten Eintrag automatisch starten (Standard)
 project.label.details=Projektinformationen:
 project.label.name=Name:
 project.label.profile=Profil:
diff --git a/PlayWall/src/main/resources/view/option/pad/PlaylistTab.fxml b/PlayWall/src/main/resources/view/option/pad/PlaylistTab.fxml
index f0a37ec7..ba6090c1 100644
--- a/PlayWall/src/main/resources/view/option/pad/PlaylistTab.fxml
+++ b/PlayWall/src/main/resources/view/option/pad/PlaylistTab.fxml
@@ -14,6 +14,7 @@
          <children>
             <Label styleClass="headline" text="%padSettings.playlist.settings.title" />
             <CheckBox fx:id="shuffleCheckbox" mnemonicParsing="false" text="%padSettings.playlist.settings.shuffle" />
+            <CheckBox fx:id="autoNextCheckbox" mnemonicParsing="false" text="%padSettings.playlist.settings.autoNext" />
          </children>
          <VBox.margin>
             <Insets />
diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/pad/content/Playlistable.java b/PlayWallCore/src/main/java/de/tobias/playpad/pad/content/Playlistable.java
index c787b93c..aab735bc 100644
--- a/PlayWallCore/src/main/java/de/tobias/playpad/pad/content/Playlistable.java
+++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/content/Playlistable.java
@@ -6,6 +6,7 @@ import javafx.beans.property.IntegerProperty;
 public interface Playlistable {
 
 	String SHUFFLE_SETTINGS_KEY = "shuffle";
+	String AUTO_NEXT_SETTINGS_KEY = "autoNext";
 
 	int getCurrentPlayingMediaIndex();
 
diff --git a/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerPadContent.scala b/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerPadContent.scala
index 48bf1188..f18c5b62 100644
--- a/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerPadContent.scala
+++ b/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerPadContent.scala
@@ -120,7 +120,11 @@ class ContentPlayerPadContent(val pad: Pad, val `type`: String) extends PadConte
 		}
 
 		showingLastFrame = false
-		mediaPlayers(getCurrentPlayingMediaIndex).next()
+		// Only automatically go to the next playlist item, if auto next is active or
+		// the item is the last one (next() go into stop state if no item is left)
+		if (isAutoNext || noFurtherItemsInPlaylist) {
+			mediaPlayers(getCurrentPlayingMediaIndex).next()
+		}
 	}
 
 	private def hasPadTriggerInterferingZones(item: LocalPadTrigger): Boolean = {
@@ -295,13 +299,11 @@ class ContentPlayerPadContent(val pad: Pad, val `type`: String) extends PadConte
 	Custom Settings
 	 */
 
-	def shouldShowLastFrame(): Boolean = {
-		pad.getPadSettings.getCustomSettings.getOrDefault(ContentPlayerPadContentFactory.lastFrame, false).asInstanceOf[Boolean]
-	}
+	def shouldShowLastFrame(): Boolean = pad.getPadSettings.getCustomSettings.getOrDefault(ContentPlayerPadContentFactory.lastFrame, false).asInstanceOf[Boolean]
 
-	def isShuffle: Boolean = {
-		pad.getPadSettings.getCustomSettings.getOrDefault(Playlistable.SHUFFLE_SETTINGS_KEY, false).asInstanceOf[Boolean]
-	}
+	def isShuffle: Boolean = pad.getPadSettings.getCustomSettings.getOrDefault(Playlistable.SHUFFLE_SETTINGS_KEY, false).asInstanceOf[Boolean]
+
+	def isAutoNext: Boolean = pad.getPadSettings.getCustomSettings.getOrDefault(Playlistable.AUTO_NEXT_SETTINGS_KEY, false).asInstanceOf[Boolean]
 
 	def getSelectedZones: Seq[Zone] = {
 		val zoneConfiguration = Profile.currentProfile().getCustomSettings(ContentPluginMain.zoneConfigurationKey).asInstanceOf[ContentPlayerPluginConfiguration]
-- 
GitLab