From a093b9dfbd6a0a7a7ffbf98362538fb12beba9ae Mon Sep 17 00:00:00 2001 From: Floens Date: Wed, 4 Jul 2018 15:58:57 +0200 Subject: [PATCH] browse: add last modified filter. Closes #251 --- .../java/org/floens/chan/core/model/Post.java | 38 +++++++++++------ .../core/site/common/FutabaChanReader.java | 4 ++ .../core/site/common/vichan/VichanApi.java | 4 ++ .../core/site/loader/ChanThreadLoader.java | 1 + .../floens/chan/ui/adapter/PostsFilter.java | 41 ++++++++----------- .../chan/ui/controller/BrowseController.java | 3 ++ Clover/app/src/main/res/values/strings.xml | 1 + 7 files changed, 54 insertions(+), 38 deletions(-) diff --git a/Clover/app/src/main/java/org/floens/chan/core/model/Post.java b/Clover/app/src/main/java/org/floens/chan/core/model/Post.java index d9558c15..66384b5e 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/model/Post.java +++ b/Clover/app/src/main/java/org/floens/chan/core/model/Post.java @@ -28,8 +28,6 @@ import java.util.List; import java.util.Set; import java.util.concurrent.atomic.AtomicBoolean; -import okhttp3.HttpUrl; - /** * Contains all data needed to represent a single post.
* All {@code final} fields are thread-safe. @@ -99,12 +97,13 @@ public class Post { public final List repliesFrom = new ArrayList<>(); // These members may only mutate on the main thread. - private boolean sticky = false; - private boolean closed = false; - private boolean archived = false; - private int replies = -1; - private int imagesCount = -1; - private int uniqueIps = -1; + private boolean sticky; + private boolean closed; + private boolean archived; + private int replies; + private int imagesCount; + private int uniqueIps; + private long lastModified; private String title = ""; private Post(Builder builder) { @@ -116,6 +115,7 @@ public class Post { replies = builder.replies; imagesCount = builder.imagesCount; uniqueIps = builder.uniqueIps; + lastModified = builder.lastModified; sticky = builder.sticky; closed = builder.closed; archived = builder.archived; @@ -214,6 +214,16 @@ public class Post { this.uniqueIps = uniqueIps; } + @MainThread + public long getLastModified() { + return lastModified; + } + + @MainThread + public void setLastModified(long lastModified) { + this.lastModified = lastModified; + } + @MainThread public String getTitle() { return title; @@ -246,19 +256,16 @@ public class Post { public boolean sticky; public boolean closed; public boolean archived; + public long lastModified = -1L; public String subject = ""; public String name = ""; public CharSequence comment = ""; public String tripcode = ""; - public long unixTimestampSeconds = -1; + public long unixTimestampSeconds = -1L; public List images; - public String countryCode; - public String countryName; - public HttpUrl countryUrl; - public List httpIcons; public String posterId = ""; @@ -324,6 +331,11 @@ public class Post { return this; } + public Builder lastModified(long lastModified) { + this.lastModified = lastModified; + return this; + } + public Builder closed(boolean closed) { this.closed = closed; return this; diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/common/FutabaChanReader.java b/Clover/app/src/main/java/org/floens/chan/core/site/common/FutabaChanReader.java index 82563f27..29851612 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/site/common/FutabaChanReader.java +++ b/Clover/app/src/main/java/org/floens/chan/core/site/common/FutabaChanReader.java @@ -193,6 +193,9 @@ public class FutabaChanReader implements ChanReader { case "unique_ips": builder.uniqueIps(reader.nextInt()); break; + case "last_modified": + builder.lastModified(reader.nextLong()); + break; case "id": builder.posterId(reader.nextString()); break; @@ -253,6 +256,7 @@ public class FutabaChanReader implements ChanReader { op.replies(builder.replies); op.images(builder.imagesCount); op.uniqueIps(builder.uniqueIps); + op.lastModified(builder.lastModified); queue.setOp(op); } diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/common/vichan/VichanApi.java b/Clover/app/src/main/java/org/floens/chan/core/site/common/vichan/VichanApi.java index 29261fb2..382147ba 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/site/common/vichan/VichanApi.java +++ b/Clover/app/src/main/java/org/floens/chan/core/site/common/vichan/VichanApi.java @@ -171,6 +171,9 @@ public class VichanApi extends CommonSite.CommonApi { case "unique_ips": builder.uniqueIps(reader.nextInt()); break; + case "last_modified": + builder.lastModified(reader.nextLong()); + break; case "id": builder.posterId(reader.nextString()); break; @@ -228,6 +231,7 @@ public class VichanApi extends CommonSite.CommonApi { op.replies(builder.replies); op.images(builder.imagesCount); op.uniqueIps(builder.uniqueIps); + op.lastModified(builder.lastModified); queue.setOp(op); } diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/loader/ChanThreadLoader.java b/Clover/app/src/main/java/org/floens/chan/core/site/loader/ChanThreadLoader.java index 90910abd..a197639d 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/site/loader/ChanThreadLoader.java +++ b/Clover/app/src/main/java/org/floens/chan/core/site/loader/ChanThreadLoader.java @@ -310,6 +310,7 @@ public class ChanThreadLoader implements Response.ErrorListener, Response.Listen realOp.setReplies(fakeOp.replies); realOp.setImagesCount(fakeOp.imagesCount); realOp.setUniqueIps(fakeOp.uniqueIps); + realOp.setLastModified(fakeOp.lastModified); } else { Logger.e(TAG, "Thread has no op!"); } diff --git a/Clover/app/src/main/java/org/floens/chan/ui/adapter/PostsFilter.java b/Clover/app/src/main/java/org/floens/chan/ui/adapter/PostsFilter.java index 3c5bb1cf..be0fafc3 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/adapter/PostsFilter.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/adapter/PostsFilter.java @@ -35,33 +35,20 @@ import javax.inject.Inject; import static org.floens.chan.Chan.inject; public class PostsFilter { - public static final Comparator IMAGE_COMPARATOR = new Comparator() { - @Override - public int compare(Post lhs, Post rhs) { - return rhs.getImagesCount() - lhs.getImagesCount(); - } - }; + private static final Comparator IMAGE_COMPARATOR = + (lhs, rhs) -> rhs.getImagesCount() - lhs.getImagesCount(); - public static final Comparator REPLY_COMPARATOR = new Comparator() { - @Override - public int compare(Post lhs, Post rhs) { - return rhs.getReplies() - lhs.getReplies(); - } - }; + private static final Comparator REPLY_COMPARATOR = + (lhs, rhs) -> rhs.getReplies() - lhs.getReplies(); - public static final Comparator NEWEST_COMPARATOR = new Comparator() { - @Override - public int compare(Post lhs, Post rhs) { - return (int) (rhs.time - lhs.time); - } - }; + private static final Comparator NEWEST_COMPARATOR = + (lhs, rhs) -> (int) (rhs.time - lhs.time); - public static final Comparator OLDEST_COMPARATOR = new Comparator() { - @Override - public int compare(Post lhs, Post rhs) { - return (int) (lhs.time - rhs.time); - } - }; + private static final Comparator OLDEST_COMPARATOR = + (lhs, rhs) -> (int) (lhs.time - rhs.time); + + private static final Comparator MODIFIED_COMPARATOR = + (lhs, rhs) -> (int) (rhs.getLastModified() - lhs.getLastModified()); @Inject DatabaseManager databaseManager; @@ -99,6 +86,9 @@ public class PostsFilter { case OLDEST: Collections.sort(posts, OLDEST_COMPARATOR); break; + case MODIFIED: + Collections.sort(posts, MODIFIED_COMPARATOR); + break; } } @@ -149,7 +139,8 @@ public class PostsFilter { REPLY("reply"), IMAGE("image"), NEWEST("newest"), - OLDEST("oldest"); + OLDEST("oldest"), + MODIFIED("modified"); public String name; diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/BrowseController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/BrowseController.java index 7e9e6799..a929ac51 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/BrowseController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/BrowseController.java @@ -290,6 +290,9 @@ public class BrowseController extends ThreadController implements case OLDEST: nameId = R.string.order_oldest; break; + case MODIFIED: + nameId = R.string.order_modified; + break; } String name = getString(nameId); diff --git a/Clover/app/src/main/res/values/strings.xml b/Clover/app/src/main/res/values/strings.xml index 5e7eaf0c..4b4cf5d5 100644 --- a/Clover/app/src/main/res/values/strings.xml +++ b/Clover/app/src/main/res/values/strings.xml @@ -116,6 +116,7 @@ Re-enable this permission in the app settings if you permanently disabled it."Image count Newest Oldest + Latest reply Search Found %1$d %2$s for "%3$s"