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