aboutsummaryrefslogtreecommitdiff
path: root/WordPress/src/main/java/org/wordpress/android/models/ReaderBlogList.java
diff options
context:
space:
mode:
Diffstat (limited to 'WordPress/src/main/java/org/wordpress/android/models/ReaderBlogList.java')
-rw-r--r--WordPress/src/main/java/org/wordpress/android/models/ReaderBlogList.java87
1 files changed, 87 insertions, 0 deletions
diff --git a/WordPress/src/main/java/org/wordpress/android/models/ReaderBlogList.java b/WordPress/src/main/java/org/wordpress/android/models/ReaderBlogList.java
new file mode 100644
index 000000000..4351940a7
--- /dev/null
+++ b/WordPress/src/main/java/org/wordpress/android/models/ReaderBlogList.java
@@ -0,0 +1,87 @@
+package org.wordpress.android.models;
+
+import android.support.annotation.NonNull;
+
+import org.json.JSONArray;
+import org.json.JSONObject;
+
+import java.util.ArrayList;
+
+public class ReaderBlogList extends ArrayList<ReaderBlog> {
+
+ @Override
+ public Object clone() {
+ return super.clone();
+ }
+
+ public static ReaderBlogList fromJson(JSONObject json) {
+ ReaderBlogList blogs = new ReaderBlogList();
+ if (json == null) {
+ return blogs;
+ }
+
+ // read/following/mine response
+ JSONArray jsonBlogs = json.optJSONArray("subscriptions");
+ if (jsonBlogs != null) {
+ for (int i = 0; i < jsonBlogs.length(); i++) {
+ ReaderBlog blog = ReaderBlog.fromJson(jsonBlogs.optJSONObject(i));
+ // make sure blog is valid before adding to the list - this can happen if user
+ // added a URL that isn't a feed or a blog since as of 29-May-2014 the API
+ // will let you follow any URL regardless if it's valid
+ if (blog.hasName() || blog.hasDescription() || blog.hasUrl()) {
+ blogs.add(blog);
+ }
+ }
+ }
+
+ return blogs;
+ }
+
+ private int indexOfBlogId(long blogId) {
+ for (int i = 0; i < size(); i++) {
+ if (this.get(i).blogId == blogId) {
+ return i;
+ }
+ }
+ return -1;
+ }
+
+ public boolean isSameList(ReaderBlogList blogs) {
+ if (blogs == null || blogs.size() != this.size()) {
+ return false;
+ }
+
+ for (ReaderBlog blogInfo: blogs) {
+ int index = indexOfBlogId(blogInfo.blogId);
+ if (index == -1) {
+ return false;
+ }
+ ReaderBlog thisInfo = this.get(index);
+ if (!thisInfo.isSameAs(blogInfo)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /*
+ * returns true if the passed blog list has the same blogs that are in this list - differs
+ * from isSameList() in that isSameList() checks for *any* changes (subscription count, etc.)
+ * whereas this only checks if the passed list has any blogs that are not in this list, or
+ * this list has any blogs that are not in the passed list
+ */
+ public boolean hasSameBlogs(@NonNull ReaderBlogList blogs) {
+ if (blogs.size() != this.size()) {
+ return false;
+ }
+
+ for (ReaderBlog blogInfo: blogs) {
+ if (indexOfBlogId(blogInfo.blogId) == -1) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+}