Create all controlled components with an event bus.
authorDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Mon, 27 May 2013 07:39:51 +0000 (09:39 +0200)
committerDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Mon, 27 May 2013 20:54:39 +0000 (22:54 +0200)
18 files changed:
src/main/java/net/pterodactylus/sonitus/data/filter/AudioProcessingFilter.java
src/main/java/net/pterodactylus/sonitus/data/filter/DummyFilter.java
src/main/java/net/pterodactylus/sonitus/data/filter/ExternalFilter.java
src/main/java/net/pterodactylus/sonitus/data/filter/ExternalMp3Decoder.java
src/main/java/net/pterodactylus/sonitus/data/filter/ExternalMp3Encoder.java
src/main/java/net/pterodactylus/sonitus/data/filter/FlacDecoder.java
src/main/java/net/pterodactylus/sonitus/data/filter/LameMp3Decoder.java
src/main/java/net/pterodactylus/sonitus/data/filter/LameMp3Encoder.java
src/main/java/net/pterodactylus/sonitus/data/filter/OggVorbisDecoder.java
src/main/java/net/pterodactylus/sonitus/data/filter/PredicateFilter.java
src/main/java/net/pterodactylus/sonitus/data/filter/RateLimitingFilter.java
src/main/java/net/pterodactylus/sonitus/data/filter/SoxResampleFilter.java
src/main/java/net/pterodactylus/sonitus/data/filter/StereoSeparationFilter.java
src/main/java/net/pterodactylus/sonitus/data/filter/TimeCounterFilter.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 e87935b..b584395 100644 (file)
@@ -23,6 +23,8 @@ import java.io.OutputStream;
 import net.pterodactylus.sonitus.data.Filter;
 import net.pterodactylus.sonitus.io.ProcessingOutputStream;
 
+import com.google.common.eventbus.EventBus;
+
 /**
  * {@link Filter} implementation that can process audio samples internally.
  *
@@ -33,11 +35,13 @@ public abstract class AudioProcessingFilter extends DummyFilter {
        /**
         * Creates a new audio processing filter with the given name.
         *
+        * @param eventBus
+        *              The event bus
         * @param name
         *              The name of the filter
         */
-       protected AudioProcessingFilter(String name) {
-               super(name);
+       protected AudioProcessingFilter(EventBus eventBus, String name) {
+               super(eventBus, name);
        }
 
        //
index ce02254..4e19683 100644 (file)
@@ -31,6 +31,7 @@ import net.pterodactylus.sonitus.data.Controller;
 import net.pterodactylus.sonitus.data.Filter;
 import net.pterodactylus.sonitus.data.Metadata;
 
+import com.google.common.eventbus.EventBus;
 import com.google.common.io.Closeables;
 
 /**
@@ -43,6 +44,9 @@ public class DummyFilter implements Filter {
        /** The name of this filter. */
        private final String name;
 
+       /** The event bus. */
+       private final EventBus eventBus;
+
        /** The input stream from which to read. */
        private InputStream inputStream;
 
@@ -55,10 +59,13 @@ public class DummyFilter implements Filter {
        /**
         * Creates a new dummy filter with the given name.
         *
+        * @param eventBus
+        *              The event bus
         * @param name
         *              The name of the filter
         */
-       public DummyFilter(String name) {
+       public DummyFilter(EventBus eventBus, String name) {
+               this.eventBus = eventBus;
                this.name = name;
        }
 
index 990f976..a6e2966 100644 (file)
@@ -27,6 +27,7 @@ import net.pterodactylus.sonitus.io.InputStreamDrainer;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
+import com.google.common.eventbus.EventBus;
 
 /**
  * {@link net.pterodactylus.sonitus.data.Filter} implementation that runs its
@@ -45,11 +46,13 @@ public abstract class ExternalFilter extends DummyFilter {
        /**
         * Creates a new external filter with the given name.
         *
+        * @param eventBus
+        *              The event bus
         * @param name
         *              The name of the filter
         */
-       protected ExternalFilter(String name) {
-               super(name);
+       protected ExternalFilter(EventBus eventBus, String name) {
+               super(eventBus, name);
        }
 
        //
index f81d532..d97708d 100644 (file)
@@ -24,6 +24,8 @@ import java.io.IOException;
 
 import net.pterodactylus.sonitus.data.Metadata;
 
+import com.google.common.eventbus.EventBus;
+
 /**
  * Basic {@link net.pterodactylus.sonitus.data.filter.ExternalFilter}
  * implementation that verifies that the connected source is MP3-encoded and
@@ -36,11 +38,13 @@ public abstract class ExternalMp3Decoder extends ExternalFilter {
        /**
         * Creates a new external MP3 decoder.
         *
+        * @param eventBus
+        *              The event bus
         * @param name
         *              The name of the filter
         */
-       protected ExternalMp3Decoder(String name) {
-               super(name);
+       protected ExternalMp3Decoder(EventBus eventBus, String name) {
+               super(eventBus, name);
        }
 
        @Override
index 21654af..85810c9 100644 (file)
@@ -24,6 +24,8 @@ import java.io.IOException;
 
 import net.pterodactylus.sonitus.data.Metadata;
 
+import com.google.common.eventbus.EventBus;
+
 /**
  * Basic {@link net.pterodactylus.sonitus.data.filter.ExternalFilter}
  * implementation that verifies that the connected source is PCM-encoded and
@@ -36,11 +38,13 @@ public abstract class ExternalMp3Encoder extends ExternalFilter {
        /**
         * Creates a new external MP3 encoder.
         *
+        * @param eventBus
+        *              The event bus
         * @param name
         *              The name of the filter
         */
-       protected ExternalMp3Encoder(String name) {
-               super(name);
+       protected ExternalMp3Encoder(EventBus eventBus, String name) {
+               super(eventBus, name);
        }
 
        @Override
index e8447ef..fb644d3 100644 (file)
@@ -20,6 +20,7 @@ package net.pterodactylus.sonitus.data.filter;
 import net.pterodactylus.sonitus.data.Metadata;
 
 import com.google.common.collect.ImmutableList;
+import com.google.common.eventbus.EventBus;
 
 /**
  * Decoder {@link net.pterodactylus.sonitus.data.Filter} for FLAC files.
@@ -37,11 +38,13 @@ public class FlacDecoder extends ExternalFilter {
        /**
         * Creates a new FLAC decoder.
         *
+        * @param eventBus
+        *              The event bus
         * @param binary
         *              The location of the binary
         */
-       public FlacDecoder(String binary) {
-               super("FLAC Decoder");
+       public FlacDecoder(EventBus eventBus, String binary) {
+               super(eventBus, "FLAC Decoder");
                this.binary = binary;
        }
 
index 7493b3e..17e0973 100644 (file)
@@ -20,6 +20,7 @@ package net.pterodactylus.sonitus.data.filter;
 import net.pterodactylus.sonitus.data.Metadata;
 
 import com.google.common.collect.ImmutableList;
+import com.google.common.eventbus.EventBus;
 
 /**
  * {@link ExternalMp3Decoder} implementation that uses LAME to decode an MP3.
@@ -37,11 +38,13 @@ public class LameMp3Decoder extends ExternalMp3Decoder {
        /**
         * Creates a new LAME MP3 decoder.
         *
+        * @param eventBus
+        *              The event bus
         * @param binary
         *              The location of the binary
         */
-       public LameMp3Decoder(String binary) {
-               super("LAME Decoder");
+       public LameMp3Decoder(EventBus eventBus, String binary) {
+               super(eventBus, "LAME Decoder");
                this.binary = binary;
        }
 
index d425fe2..77df8aa 100644 (file)
@@ -23,6 +23,7 @@ import net.pterodactylus.sonitus.data.Metadata;
 
 import com.google.common.base.Optional;
 import com.google.common.collect.ImmutableList;
+import com.google.common.eventbus.EventBus;
 
 /**
  * {@link ExternalMp3Encoder} implementation that uses LAME to encode MP3s.
@@ -66,30 +67,36 @@ public class LameMp3Encoder extends ExternalMp3Encoder {
        /**
         * Creates a new LAME MP3 encoder.
         *
+        * @param eventBus
+        *              The event bus
         * @param binary
         *              The location of the binary
         * @param preset
         *              The preset to use
         */
-       public LameMp3Encoder(String binary, Preset preset) {
-               this(binary, preset, -1);
+       public LameMp3Encoder(EventBus eventBus, String binary, Preset preset) {
+               this(eventBus, binary, preset, -1);
        }
 
        /**
         * Creates a new LAME MP3 encoder.
         *
+        * @param eventBus
+        *              The event bus
         * @param binary
         *              The location of the binary
         * @param bitrate
         *              The bitrate to encode to (in kbps)
         */
-       public LameMp3Encoder(String binary, int bitrate) {
-               this(binary, null, bitrate);
+       public LameMp3Encoder(EventBus eventBus, String binary, int bitrate) {
+               this(eventBus, binary, null, bitrate);
        }
 
        /**
         * Creates a new LAME MP3 encoder.
         *
+        * @param eventBus
+        *              The event bus
         * @param binary
         *              The location of the binary
         * @param preset
@@ -97,8 +104,8 @@ public class LameMp3Encoder extends ExternalMp3Encoder {
         * @param bitrate
         *              The bitrate to encode to (in kbps)
         */
-       private LameMp3Encoder(String binary, Preset preset, int bitrate) {
-               super("LAME Encoder");
+       private LameMp3Encoder(EventBus eventBus, String binary, Preset preset, int bitrate) {
+               super(eventBus, "LAME Encoder");
                this.binary = binary;
                this.preset = Optional.fromNullable(preset);
                this.bitrate = (bitrate < 0) ? Optional.<Integer>absent() : Optional.<Integer>of(bitrate);
index b142fdd..d98abe1 100644 (file)
@@ -25,6 +25,7 @@ import java.io.IOException;
 import net.pterodactylus.sonitus.data.Metadata;
 
 import com.google.common.collect.ImmutableList;
+import com.google.common.eventbus.EventBus;
 
 /**
  * Ogg Vorbis decoder that uses {@code oggdec} (from the {@code vorbis-tools}
@@ -43,11 +44,13 @@ public class OggVorbisDecoder extends ExternalFilter {
        /**
         * Creates a new Ogg Vorbis decoder.
         *
+        * @param eventBus
+        *              The event bus
         * @param binary
         *              The location of the binary
         */
-       public OggVorbisDecoder(String binary) {
-               super("Ogg Vorbis Decoder");
+       public OggVorbisDecoder(EventBus eventBus, String binary) {
+               super(eventBus, "Ogg Vorbis Decoder");
                this.binary = binary;
        }
 
index 173073e..4edc661 100644 (file)
@@ -26,6 +26,7 @@ import net.pterodactylus.sonitus.data.Filter;
 import net.pterodactylus.sonitus.data.Metadata;
 
 import com.google.common.base.Predicate;
+import com.google.common.eventbus.EventBus;
 
 /**
  * {@link Filter} implementation that uses a {@link Predicate} to determine
@@ -47,13 +48,15 @@ public class PredicateFilter extends DummyFilter {
        /**
         * Creates a new predicate filter.
         *
+        * @param eventBus
+        *              The event bus
         * @param metadataPredicate
         *              The predicate to evaluate every time the metadata changes
         * @param filter
         *              The filter to use if the predicate matches the metadata
         */
-       public PredicateFilter(Predicate<Metadata> metadataPredicate, Filter filter) {
-               super(String.format("%s (maybe)", filter.name()));
+       public PredicateFilter(EventBus eventBus, Predicate<Metadata> metadataPredicate, Filter filter) {
+               super(eventBus, String.format("%s (maybe)", filter.name()));
                this.metadataPredicate = metadataPredicate;
                this.filter = filter;
        }
index fc89a50..d67604b 100644 (file)
@@ -22,6 +22,8 @@ import java.util.logging.Logger;
 
 import net.pterodactylus.sonitus.data.Metadata;
 
+import com.google.common.eventbus.EventBus;
+
 /**
  * Rate limiting filter that only passes a specified amount of data per second
  * from its {@link net.pterodactylus.sonitus.data.Source} to its {@link
@@ -46,18 +48,22 @@ public class RateLimitingFilter extends DummyFilter {
        /**
         * Creates a new rate limiting filter.
         *
+        * @param eventBus
+        *              The event bus
         * @param name
         *              The name of the filter
         * @param rate
         *              The limiting rate (in bytes/second)
         */
-       public RateLimitingFilter(String name, int rate) {
-               this(name, rate, 0);
+       public RateLimitingFilter(EventBus eventBus, String name, int rate) {
+               this(eventBus, name, rate, 0);
        }
 
        /**
         * Creates a new rate limiting filter.
         *
+        * @param eventBus
+        *              The event bus
         * @param name
         *              The name of the filter
         * @param rate
@@ -66,8 +72,8 @@ public class RateLimitingFilter extends DummyFilter {
         *              The amount of time at the start of the filtering during which no delay
         *              will occur (in milliseconds)
         */
-       public RateLimitingFilter(String name, int rate, long fastStartTime) {
-               super(name);
+       public RateLimitingFilter(EventBus eventBus, String name, int rate, long fastStartTime) {
+               super(eventBus, name);
                this.rate = rate;
                this.counter = (long) (-rate * (fastStartTime / 1000.0));
        }
index f562574..ecbe1cb 100644 (file)
@@ -25,6 +25,7 @@ import java.io.IOException;
 import net.pterodactylus.sonitus.data.Metadata;
 
 import com.google.common.collect.ImmutableList;
+import com.google.common.eventbus.EventBus;
 
 /**
  * {@link net.pterodactylus.sonitus.data.Filter} implementation that uses {@code
@@ -43,13 +44,15 @@ public class SoxResampleFilter extends ExternalFilter {
        /**
         * Creates a new resample filter.
         *
+        * @param eventBus
+        *              The event bus
         * @param binary
         *              The location of the binary
         * @param rate
         *              The new sampling rate
         */
-       public SoxResampleFilter(String binary, int rate) {
-               super(String.format("Resample to %s kHz", rate / 1000.0));
+       public SoxResampleFilter(EventBus eventBus, String binary, int rate) {
+               super(eventBus, String.format("Resample to %s kHz", rate / 1000.0));
                this.binary = binary;
                this.rate = rate;
        }
index 3993e11..def3f3d 100644 (file)
@@ -24,6 +24,8 @@ import net.pterodactylus.sonitus.data.Controller;
 import net.pterodactylus.sonitus.data.Filter;
 import net.pterodactylus.sonitus.data.controller.Knob;
 
+import com.google.common.eventbus.EventBus;
+
 /**
  * {@link Filter} implementation that can reduce the stereo width of a signal,
  * or even reverse the channels.
@@ -35,9 +37,14 @@ public class StereoSeparationFilter extends AudioProcessingFilter {
        /** The separation knob. */
        private final Knob separationKnob;
 
-       /** Creates a new stereo separation filter. */
-       public StereoSeparationFilter() {
-               super("Stereo Separation");
+       /**
+        * Creates a new stereo separation filter.
+        *
+        * @param eventBus
+        *              The event bus
+        */
+       public StereoSeparationFilter(EventBus eventBus) {
+               super(eventBus, "Stereo Separation");
                separationKnob = new Knob("Separation", 1.0);
        }
 
index a528200..1864b1c 100644 (file)
@@ -23,6 +23,8 @@ import java.util.concurrent.atomic.AtomicLong;
 import net.pterodactylus.sonitus.data.Filter;
 import net.pterodactylus.sonitus.data.Metadata;
 
+import com.google.common.eventbus.EventBus;
+
 /**
  * {@link Filter} implementation that uses the number of bytes that have been
  * {@link #process(byte[]) processed} together with the {@link Metadata} to
@@ -42,24 +44,28 @@ public class TimeCounterFilter extends DummyFilter {
         * Creates a new time counter filter that automatically resets the counter when
         * the metadata is {@link #metadataUpdated(Metadata) updated}.
         *
+        * @param eventBus
+        *              The event bus
         * @param name
         *              The name of the filter
         */
-       public TimeCounterFilter(String name) {
-               this(name, true);
+       public TimeCounterFilter(EventBus eventBus, String name) {
+               this(eventBus, name, true);
        }
 
        /**
         * Creates a new time counter filter.
         *
+        * @param eventBus
+        *              The event bus
         * @param name
         *              The name of the filter
         * @param resetOnMetadataUpdate
         *              {@code true} if the counter should automatically be reset if the metadata
         *              is updated, {@code false} otherwise
         */
-       public TimeCounterFilter(String name, boolean resetOnMetadataUpdate) {
-               super(name);
+       public TimeCounterFilter(EventBus eventBus, String name, boolean resetOnMetadataUpdate) {
+               super(eventBus, name);
                this.resetOnMetadataUpdate = resetOnMetadataUpdate;
        }
 
index 05253f3..a0a4c6a 100644 (file)
@@ -39,6 +39,7 @@ import net.pterodactylus.sonitus.data.controller.Switch;
 import net.pterodactylus.sonitus.io.IntegralWriteOutputStream;
 
 import com.google.common.base.Preconditions;
+import com.google.common.eventbus.EventBus;
 
 /**
  * {@link Sink} implementation that uses the JDK’s {@link AudioSystem} to play
@@ -51,6 +52,9 @@ public class AudioSink implements Sink {
        /** The logger. */
        private static final Logger logger = Logger.getLogger(AudioSink.class.getName());
 
+       /** The event bus. */
+       private final EventBus eventBus;
+
        /** The volume fader. */
        private final Fader volumeFader;
 
@@ -83,8 +87,14 @@ public class AudioSink implements Sink {
                }
        }, 1024);
 
-       /** Creates a new audio sink. */
-       public AudioSink() {
+       /**
+        * Creates a new audio sink.
+        *
+        * @param eventBus
+        *              The event bus
+        */
+       public AudioSink(EventBus eventBus) {
+               this.eventBus = eventBus;
                volumeFader = new Fader("Volume") {
 
                        @Override
index 92dd59a..769ac65 100644 (file)
@@ -27,6 +27,8 @@ import net.pterodactylus.sonitus.data.Controller;
 import net.pterodactylus.sonitus.data.Metadata;
 import net.pterodactylus.sonitus.data.Sink;
 
+import com.google.common.eventbus.EventBus;
+
 /**
  * {@link net.pterodactylus.sonitus.data.Sink} that writes all received data
  * into a file.
@@ -38,6 +40,9 @@ public class FileSink implements Sink {
        /** The logger. */
        private static final Logger logger = Logger.getLogger(FileSink.class.getName());
 
+       /** The event bus. */
+       private final EventBus eventBus;
+
        /** The path of the file to write to. */
        private final String path;
 
@@ -49,10 +54,13 @@ public class FileSink implements Sink {
        /**
         * Creates a new file sink that will write to the given path.
         *
+        * @param eventBus
+        *              The event bus
         * @param path
         *              The path of the file to write to
         */
-       public FileSink(String path) {
+       public FileSink(EventBus eventBus, String path) {
+               this.eventBus = eventBus;
                this.path = path;
        }
 
index 5487cc4..4d492fd 100644 (file)
@@ -38,6 +38,7 @@ import com.google.common.base.Function;
 import com.google.common.base.Joiner;
 import com.google.common.base.Optional;
 import com.google.common.collect.FluentIterable;
+import com.google.common.eventbus.EventBus;
 import com.google.common.io.BaseEncoding;
 import com.google.common.io.Closeables;
 
@@ -52,6 +53,9 @@ public class Icecast2Sink implements Sink {
        /** The logger. */
        private static final Logger logger = Logger.getLogger(Icecast2Sink.class.getName());
 
+       /** The event bus. */
+       private final EventBus eventBus;
+
        /** The server name. */
        private final String server;
 
@@ -84,6 +88,8 @@ public class Icecast2Sink implements Sink {
        /**
         * Creates a new Icecast2 sink.
         *
+        * @param eventBus
+        *              The event bus
         * @param server
         *              The hostname of the server
         * @param port
@@ -102,7 +108,8 @@ public class Icecast2Sink implements Sink {
         *              {@code true} to publish the server in a public directory, {@code false} to
         *              not publish it
         */
-       public Icecast2Sink(String server, int port, String password, String mountPoint, String serverName, String serverDescription, String genre, boolean publishServer) {
+       public Icecast2Sink(EventBus eventBus, String server, int port, String password, String mountPoint, String serverName, String serverDescription, String genre, boolean publishServer) {
+               this.eventBus = eventBus;
                this.server = server;
                this.port = port;
                this.password = password;
index 9a624e0..a116d80 100644 (file)
@@ -35,6 +35,7 @@ import net.pterodactylus.sonitus.io.MetadataStream;
 
 import com.google.common.base.Optional;
 import com.google.common.collect.Maps;
+import com.google.common.eventbus.EventBus;
 import com.google.common.primitives.Ints;
 
 /**
@@ -47,6 +48,9 @@ import com.google.common.primitives.Ints;
  */
 public class StreamSource implements Source {
 
+       /** The event bus. */
+       private final EventBus eventBus;
+
        /** The URL of the stream. */
        private final String streamUrl;
 
@@ -64,12 +68,15 @@ public class StreamSource implements Source {
         * the response header for vital information (sampling frequency, number of
         * channels, etc.).
         *
+        * @param eventBus
+        *              The event bus
         * @param streamUrl
         *              The URL of the stream
         * @throws IOException
         *              if an I/O error occurs
         */
-       public StreamSource(String streamUrl) throws IOException {
+       public StreamSource(EventBus eventBus, String streamUrl) throws IOException {
+               this.eventBus = eventBus;
                this.streamUrl = streamUrl;
                URL url = new URL(streamUrl);