diff options
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.java | 87 |
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; + } +} |