Expose metadata from every controlled component.
authorDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Mon, 27 May 2013 07:29:48 +0000 (09:29 +0200)
committerDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Mon, 27 May 2013 20:54:39 +0000 (22:54 +0200)
src/main/java/net/pterodactylus/sonitus/data/Controlled.java
src/main/java/net/pterodactylus/sonitus/data/sink/AudioSink.java
src/main/java/net/pterodactylus/sonitus/data/sink/FileSink.java
src/main/java/net/pterodactylus/sonitus/data/sink/Icecast2Sink.java
src/main/java/net/pterodactylus/sonitus/data/source/StreamSource.java

index e311681..6b4c617 100644 (file)
@@ -34,6 +34,13 @@ public interface Controlled {
        public String name();
 
        /**
+        * Returns the current metadata of this component.
+        *
+        * @return The current metadata of this component
+        */
+       public Metadata metadata();
+
+       /**
         * Returns the controllers offered by this component.
         *
         * @return The controllers of this component
index f7ab938..05253f3 100644 (file)
@@ -124,6 +124,11 @@ public class AudioSink implements Sink {
        }
 
        @Override
+       public Metadata metadata() {
+               return metadata;
+       }
+
+       @Override
        public List<Controller<?>> controllers() {
                return Arrays.<Controller<?>>asList(volumeFader, muteSwitch);
        }
@@ -155,6 +160,7 @@ public class AudioSink implements Sink {
        @Override
        public void metadataUpdated(Metadata metadata) {
                logger.info(String.format("Now playing %s.", metadata));
+               this.metadata = metadata;
        }
 
        @Override
index 9bebc6b..92dd59a 100644 (file)
@@ -43,6 +43,9 @@ public class FileSink implements Sink {
 
        private FileOutputStream fileOutputStream;
 
+       /** The current metadata. */
+       private Metadata metadata;
+
        /**
         * Creates a new file sink that will write to the given path.
         *
@@ -63,6 +66,11 @@ public class FileSink implements Sink {
        }
 
        @Override
+       public Metadata metadata() {
+               return metadata;
+       }
+
+       @Override
        public List<Controller<?>> controllers() {
                return Collections.emptyList();
        }
@@ -74,6 +82,7 @@ public class FileSink implements Sink {
        @Override
        public void open(Metadata metadata) throws IOException {
                fileOutputStream = new FileOutputStream(path);
+               metadataUpdated(metadata);
        }
 
        @Override
@@ -87,7 +96,7 @@ public class FileSink implements Sink {
 
        @Override
        public void metadataUpdated(Metadata metadata) {
-               /* ignore. */
+               this.metadata = metadata;
        }
 
        @Override
index 36413f9..5487cc4 100644 (file)
@@ -78,6 +78,9 @@ public class Icecast2Sink implements Sink {
 
        private OutputStream socketOutputStream;
 
+       /** The current metadata. */
+       private Metadata metadata;
+
        /**
         * Creates a new Icecast2 sink.
         *
@@ -120,6 +123,11 @@ public class Icecast2Sink implements Sink {
        }
 
        @Override
+       public Metadata metadata() {
+               return metadata;
+       }
+
+       @Override
        public List<Controller<?>> controllers() {
                return Collections.emptyList();
        }
@@ -162,6 +170,7 @@ public class Icecast2Sink implements Sink {
 
        @Override
        public void metadataUpdated(final Metadata metadata) {
+               this.metadata = metadata;
                new Thread(new Runnable() {
 
                        @Override
index 750642e..9a624e0 100644 (file)
@@ -144,7 +144,8 @@ public class StreamSource implements Source {
                if (!streamMetadata.isPresent()) {
                        return metadata;
                }
-               return metadata = metadata.title(streamMetadata.get().title());
+               metadata = metadata.title(streamMetadata.get().title());
+               return metadata;
        }
 
        @Override