X-Git-Url: https://git.pterodactylus.net/?p=sonitus.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsonitus%2Fdata%2Ffilter%2FTimeCounterFilter.java;h=ce08a612125a634f9224986a2224d034d833c7cc;hp=a5282003a862b8cbe428c89d19b3c828deb71c3e;hb=633a841142f978235ed9f745b6ba16c278963e62;hpb=09f8bd2297dc864e24baa67c65be97104e00c320 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 a528200..ce08a61 100644 --- a/src/main/java/net/pterodactylus/sonitus/data/filter/TimeCounterFilter.java +++ b/src/main/java/net/pterodactylus/sonitus/data/filter/TimeCounterFilter.java @@ -19,7 +19,9 @@ package net.pterodactylus.sonitus.data.filter; 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.Filter; import net.pterodactylus.sonitus.data.Metadata; @@ -30,14 +32,20 @@ import net.pterodactylus.sonitus.data.Metadata; * * @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(); + /** The parent’s metdata. */ + private final AtomicReference parentMetadata = new AtomicReference(); + /** Whether to reset the counter on a metadata update. */ private final boolean resetOnMetadataUpdate; + /** The last displayed timestamp. */ + private final AtomicLong lastTimestamp = new AtomicLong(-1); + /** * Creates a new time counter filter that automatically resets the counter when * the metadata is {@link #metadataUpdated(Metadata) updated}. @@ -88,21 +96,36 @@ 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); + updateTimestamp(false); + } + + // + // PRIVATE METHODS + // + + /** Updates the timestamp in the metadata. */ + private void updateTimestamp(boolean now) { + long timestamp = getMillis() / 1000; + if (now || (lastTimestamp.get() != timestamp)) { + super.metadataUpdated(parentMetadata.get().comment(String.format("%02d:%02d", timestamp / 60, timestamp % 60))); + lastTimestamp.set(timestamp); + } } }