X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsonitus%2Fdata%2Ffilter%2FTimeCounterFilter.java;h=4c58acc6bd893294c6bcea2a0d95e82aa56c4161;hb=3a12209e82233cd79677a0d847321f41b41aa9a5;hp=faff0bdfa867c26eb29e792b0509484c17ba6d9e;hpb=010432222a92f2232d07da80dee37ae3ae604111;p=sonitus.git diff --git a/src/main/java/net/pterodactylus/sonitus/data/filter/TimeCounterFilter.java b/src/main/java/net/pterodactylus/sonitus/data/filter/TimeCounterFilter.java index faff0bd..4c58acc 100644 --- a/src/main/java/net/pterodactylus/sonitus/data/filter/TimeCounterFilter.java +++ b/src/main/java/net/pterodactylus/sonitus/data/filter/TimeCounterFilter.java @@ -21,17 +21,19 @@ import java.io.IOException; import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicReference; +import net.pterodactylus.sonitus.data.AbstractFilter; +import net.pterodactylus.sonitus.data.DataPacket; import net.pterodactylus.sonitus.data.Filter; import net.pterodactylus.sonitus.data.Metadata; /** * {@link Filter} implementation that uses the number of bytes that have been - * {@link #process(byte[]) processed} together with the {@link Metadata} to + * {@link #process(DataPacket) processed} together with the {@link Metadata} to * calculate how long a source is already playing. * * @author David ‘Bombe’ Roden */ -public class TimeCounterFilter extends DummyFilter { +public class TimeCounterFilter extends AbstractFilter implements Filter { /** The byte counter. */ private final AtomicLong counter = new AtomicLong(); @@ -43,7 +45,7 @@ public class TimeCounterFilter extends DummyFilter { private final boolean resetOnMetadataUpdate; /** The last displayed timestamp. */ - private final AtomicLong lastTimestamp = new AtomicLong(0); + private final AtomicLong lastTimestamp = new AtomicLong(-1); /** * Creates a new time counter filter that automatically resets the counter when @@ -76,7 +78,7 @@ public class TimeCounterFilter extends DummyFilter { /** * Returns the number of milliseconds worth of data that has been passed into - * {@link #process(byte[])}. If no metadata has yet been set, {@code 0} is + * {@link #process(DataPacket)}. If no metadata has yet been set, {@code 0} is * returned. * * @return The number of milliseconds the current source is already playing @@ -95,25 +97,35 @@ public class TimeCounterFilter extends DummyFilter { } // - // DUMMYFILTER METHODS + // FILTER METHODS // @Override public void metadataUpdated(Metadata metadata) { - super.metadataUpdated(metadata); parentMetadata.set(metadata); if (resetOnMetadataUpdate) { reset(); } + updateTimestamp(true); } @Override - public void process(byte[] buffer) throws IOException { - super.process(buffer); - counter.getAndAdd(buffer.length); + public void process(DataPacket dataPacket) throws IOException { + super.process(dataPacket); + counter.getAndAdd(dataPacket.buffer().length); + updateTimestamp(false); + } + + // + // PRIVATE METHODS + // + + /** Updates the timestamp in the metadata. */ + private void updateTimestamp(boolean now) { long timestamp = getMillis() / 1000; - if (lastTimestamp.get() != timestamp) { - super.metadataUpdated(parentMetadata.get().title(String.format("%s (%02d:%02d)", parentMetadata.get().title(), timestamp / 60, timestamp % 60))); + if (now || (lastTimestamp.get() != timestamp)) { + super.metadataUpdated(parentMetadata.get().comment(String.format("%s%02d:%02d", (timestamp >= 3600) ? String.format("%d:", timestamp / 3600) : "" , (timestamp % 3600) / 60, timestamp % 60))); + lastTimestamp.set(timestamp); } }