--- /dev/null
+/*
+ * Sonitus - MetadataUpdated.java - Copyright © 2013 David Roden
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package net.pterodactylus.sonitus.data.event;
+
+import net.pterodactylus.sonitus.data.Controlled;
+import net.pterodactylus.sonitus.data.Metadata;
+
+/**
+ * Event that notifies all listeners that the {@link Metadata} of a {@link
+ * Controlled} component was changed.
+ *
+ * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
+ */
+public class MetadataUpdated {
+
+ /** The controlled component. */
+ private final Controlled controlled;
+
+ /** The new metadata. */
+ private final Metadata metadata;
+
+ /**
+ * Creates a new metadata updated event.
+ *
+ * @param controlled
+ * The controlled component
+ * @param metadata
+ * The new metadata
+ */
+ public MetadataUpdated(Controlled controlled, Metadata metadata) {
+ this.controlled = controlled;
+ this.metadata = metadata;
+ }
+
+ //
+ // ACCESSORS
+ //
+
+ /**
+ * Returns the controlled component.
+ *
+ * @return The controlled component
+ */
+ public Controlled controlled() {
+ return controlled;
+ }
+
+ /**
+ * Returns the new metadata.
+ *
+ * @return The new metadata
+ */
+ public Metadata metadata() {
+ return metadata;
+ }
+
+}
import net.pterodactylus.sonitus.data.Controller;
import net.pterodactylus.sonitus.data.Filter;
import net.pterodactylus.sonitus.data.Metadata;
+import net.pterodactylus.sonitus.data.event.MetadataUpdated;
import com.google.common.eventbus.EventBus;
import com.google.common.io.Closeables;
@Override
public void open(Metadata metadata) throws IOException {
- this.metadata = metadata;
+ metadataUpdated(metadata);
inputStream = createInputStream();
outputStream = createOutputStream();
}
@Override
public void metadataUpdated(Metadata metadata) {
this.metadata = metadata;
+ eventBus.post(new MetadataUpdated(this, metadata));
}
@Override
import net.pterodactylus.sonitus.data.Source;
import net.pterodactylus.sonitus.data.controller.Fader;
import net.pterodactylus.sonitus.data.controller.Switch;
+import net.pterodactylus.sonitus.data.event.MetadataUpdated;
import net.pterodactylus.sonitus.io.IntegralWriteOutputStream;
import com.google.common.base.Preconditions;
sourceDataLine = AudioSystem.getSourceDataLine(audioFormat);
sourceDataLine.open(audioFormat);
sourceDataLine.start();
+ metadataUpdated(metadata);
} catch (LineUnavailableException e) {
/* TODO */
throw new IOException(e);
public void metadataUpdated(Metadata metadata) {
logger.info(String.format("Now playing %s.", metadata));
this.metadata = metadata;
+ eventBus.post(new MetadataUpdated(this, metadata));
}
@Override
import net.pterodactylus.sonitus.data.Controller;
import net.pterodactylus.sonitus.data.Metadata;
import net.pterodactylus.sonitus.data.Sink;
+import net.pterodactylus.sonitus.data.event.MetadataUpdated;
import com.google.common.eventbus.EventBus;
@Override
public void metadataUpdated(Metadata metadata) {
this.metadata = metadata;
+ eventBus.post(new MetadataUpdated(this, metadata));
}
@Override
import net.pterodactylus.sonitus.data.Controller;
import net.pterodactylus.sonitus.data.Metadata;
import net.pterodactylus.sonitus.data.Sink;
+import net.pterodactylus.sonitus.data.event.MetadataUpdated;
import net.pterodactylus.sonitus.io.InputStreamDrainer;
import com.google.common.base.Function;
}
}
}).start();
+ eventBus.post(new MetadataUpdated(this, metadata));
}
@Override
import net.pterodactylus.sonitus.data.Controller;
import net.pterodactylus.sonitus.data.Metadata;
import net.pterodactylus.sonitus.data.Source;
+import net.pterodactylus.sonitus.data.event.MetadataUpdated;
import net.pterodactylus.sonitus.data.event.SourceFinishedEvent;
import com.google.common.eventbus.EventBus;
sourceChanged = true;
this.source.notifyAll();
}
+ eventBus.post(new MetadataUpdated(this, source.metadata()));
logger.info(String.format("Next Source set: %s", source));
}
}
import net.pterodactylus.sonitus.data.FormatMetadata;
import net.pterodactylus.sonitus.data.Metadata;
import net.pterodactylus.sonitus.data.Source;
+import net.pterodactylus.sonitus.data.event.MetadataUpdated;
import net.pterodactylus.sonitus.io.MetadataStream;
import com.google.common.base.Optional;
return metadata;
}
metadata = metadata.title(streamMetadata.get().title());
+ eventBus.post(new MetadataUpdated(this, metadata));
return metadata;
}