From 45af7dd84819c735e9b604442b3f3c884cd0cab9 Mon Sep 17 00:00:00 2001
From: tobias <thinkdifferent055@gmail.com>
Date: Thu, 3 Dec 2020 20:24:35 +0100
Subject: [PATCH] Show playlist item error in playlist settings

---
 .../option/pad/PlaylistTabViewController.java             | 8 ++++++++
 .../java/de/tobias/playpad/pad/content/Playlistable.java  | 3 +++
 .../plugin/content/pad/ContentPlayerPadContent.scala      | 6 ++++++
 3 files changed, 17 insertions(+)

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 6abd741f..0a80e87d 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
@@ -10,6 +10,7 @@ import de.tobias.playpad.layout.desktop.listener.PadNewContentListener;
 import de.tobias.playpad.pad.Pad;
 import de.tobias.playpad.pad.content.PadContentFactory;
 import de.tobias.playpad.pad.content.PadContentRegistry;
+import de.tobias.playpad.pad.content.Playlistable;
 import de.tobias.playpad.pad.mediapath.MediaPath;
 import de.tobias.playpad.viewcontroller.PadSettingsTabViewController;
 import javafx.beans.binding.Bindings;
@@ -65,8 +66,15 @@ public class PlaylistTabViewController extends PadSettingsTabViewController {
 				super.updateItem(item, empty);
 				if (!empty) {
 					setText(item.getFileName());
+					final Playlistable playlist = (Playlistable) pad.getContent();
+					if (!playlist.isLoaded(item)) {
+						setGraphic(new FontIcon(FontAwesomeType.WARNING));
+					} else {
+						setGraphic(null);
+					}
 				} else {
 					setText("");
+					setGraphic(null);
 				}
 			}
 		});
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 ffb6d4ba..6373d324 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
@@ -1,5 +1,6 @@
 package de.tobias.playpad.pad.content;
 
+import de.tobias.playpad.pad.mediapath.MediaPath;
 import javafx.beans.property.IntegerProperty;
 
 public interface Playlistable {
@@ -8,4 +9,6 @@ public interface Playlistable {
 	IntegerProperty currentPlayingMediaIndexProperty();
 
 	void next();
+
+	boolean isLoaded(MediaPath mediaPath);
 }
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 23cc16ac..7261d359 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
@@ -172,6 +172,12 @@ class ContentPlayerPadContent(val pad: Pad, val `type`: String) extends PadConte
 		mediaPlayers.isNotEmpty && !mediaPlayers.stream().anyMatch(player => player.mediaPlayer.getStatus == MediaPlayer.Status.UNKNOWN)
 	}
 
+	override def isLoaded(mediaPath: MediaPath): Boolean = mediaPlayers.stream()
+		.filter(item => item.path == mediaPath)
+		.findFirst()
+		.map(container => container.mediaPlayer.getStatus != MediaPlayer.Status.UNKNOWN)
+		.get()
+
 	/**
 	 * Load media files.
 	 */
-- 
GitLab