aboutsummaryrefslogtreecommitdiff
path: root/WordPress/src/main/java/org/wordpress/android/util/RateLimitedTask.java
diff options
context:
space:
mode:
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.java37
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();
+}