diff options
Diffstat (limited to 'WordPress/src/main/java/org/wordpress/android/util/RateLimitedTask.java')
-rw-r--r-- | WordPress/src/main/java/org/wordpress/android/util/RateLimitedTask.java | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/WordPress/src/main/java/org/wordpress/android/util/RateLimitedTask.java b/WordPress/src/main/java/org/wordpress/android/util/RateLimitedTask.java new file mode 100644 index 000000000..04c3d37b8 --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/util/RateLimitedTask.java @@ -0,0 +1,37 @@ +package org.wordpress.android.util; + +import java.util.Date; + +public abstract class RateLimitedTask { + private Date mLastUpdate; + private int mMinRateInSeconds; + + public RateLimitedTask(int minRateInSeconds) { + mMinRateInSeconds = minRateInSeconds; + } + + public void forceLastUpdate() { + mLastUpdate = new Date(); + } + + public synchronized boolean forceRun() { + if (run()) { + mLastUpdate = new Date(); + return true; + } + return false; + } + + public synchronized boolean runIfNotLimited() { + Date now = new Date(); + if (mLastUpdate == null || DateTimeUtils.secondsBetween(now, mLastUpdate) >= mMinRateInSeconds) { + if (run()) { + mLastUpdate = now; + return true; + } + } + return false; + } + + protected abstract boolean run(); +} |