aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java
diff options
context:
space:
mode:
authorAlex Ning <chineseperson5@gmail.com>2019-01-21 17:05:46 +0000
committerAlex Ning <chineseperson5@gmail.com>2019-01-21 17:05:46 +0000
commitf7a192dcbedb09a6d29e7879f6119edd47278f6f (patch)
treebd51dd7fd83d7c305b6fae37aae1fbbb063af629 /app/src/main/java
parent91e6174aa5b2fba9d2777e3ea33b20a833a487bf (diff)
downloadinfinity-for-reddit-f7a192dcbedb09a6d29e7879f6119edd47278f6f.tar
infinity-for-reddit-f7a192dcbedb09a6d29e7879f6119edd47278f6f.tar.gz
infinity-for-reddit-f7a192dcbedb09a6d29e7879f6119edd47278f6f.tar.bz2
infinity-for-reddit-f7a192dcbedb09a6d29e7879f6119edd47278f6f.tar.lz
infinity-for-reddit-f7a192dcbedb09a6d29e7879f6119edd47278f6f.tar.xz
infinity-for-reddit-f7a192dcbedb09a6d29e7879f6119edd47278f6f.tar.zst
infinity-for-reddit-f7a192dcbedb09a6d29e7879f6119edd47278f6f.zip
Fixed infinite loading duplicate posts when there is no more posts to load. Minor bugs fixed. Minor layout tweaks.
Diffstat (limited to 'app/src/main/java')
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/ParsePost.java229
-rw-r--r--app/src/main/java/ml/docilealligator/infinityforreddit/PostDataSource.java5
2 files changed, 122 insertions, 112 deletions
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/ParsePost.java b/app/src/main/java/ml/docilealligator/infinityforreddit/ParsePost.java
index 21dfcca0..5d865ebd 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/ParsePost.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/ParsePost.java
@@ -87,7 +87,6 @@ class ParsePost {
int previewWidth = -1;
int previewHeight = -1;
if(data.has(JSONUtils.PREVIEW_KEY)) {
- Log.i("haspreview", Integer.toString(i));
previewUrl = data.getJSONObject(JSONUtils.PREVIEW_KEY).getJSONArray(JSONUtils.IMAGES_KEY).getJSONObject(0)
.getJSONObject(JSONUtils.SOURCE_KEY).getString(JSONUtils.URL_KEY);
previewWidth = data.getJSONObject(JSONUtils.PREVIEW_KEY).getJSONArray(JSONUtils.IMAGES_KEY).getJSONObject(0)
@@ -95,7 +94,6 @@ class ParsePost {
previewHeight = data.getJSONObject(JSONUtils.PREVIEW_KEY).getJSONArray(JSONUtils.IMAGES_KEY).getJSONObject(0)
.getJSONObject(JSONUtils.SOURCE_KEY).getInt(JSONUtils.HEIGHT_KEY);
}
-
if(data.has(JSONUtils.CROSSPOST_PARENT_LIST)) {
//Cross post
data = data.getJSONArray(JSONUtils.CROSSPOST_PARENT_LIST).getJSONObject(0);
@@ -160,128 +158,135 @@ class ParsePost {
}
bestPostData.add(linkPost);
}
- } else if(isVideo) {
- //Video post
- Log.i("video", Integer.toString(i));
- JSONObject redditVideoObject = data.getJSONObject(JSONUtils.MEDIA_KEY).getJSONObject(JSONUtils.REDDIT_VIDEO_KEY);
- int postType = Post.VIDEO_TYPE;
- String videoUrl = redditVideoObject.getString(JSONUtils.DASH_URL_KEY);
-
- Post videoPost = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime,
- title, previewUrl, permalink, score, postType, voteType,
- gilded, nsfw, stickied, isCrosspost, true);
-
- videoPost.setPreviewWidth(previewWidth);
- videoPost.setPreviewHeight(previewHeight);
- videoPost.setVideoUrl(videoUrl);
- videoPost.setDownloadableGifOrVideo(false);
-
- bestPostData.add(videoPost);
- } else if(data.has(JSONUtils.PREVIEW_KEY)){
- JSONObject variations = data.getJSONObject(JSONUtils.PREVIEW_KEY).getJSONArray(JSONUtils.IMAGES_KEY).getJSONObject(0);
- if (variations.has(JSONUtils.VARIANTS_KEY) && variations.getJSONObject(JSONUtils.VARIANTS_KEY).has(JSONUtils.MP4_KEY)) {
- //Gif video post (MP4)
- Log.i("gif video mp4", Integer.toString(i));
- int postType = Post.GIF_VIDEO_TYPE;
- String videoUrl = variations.getJSONObject(JSONUtils.VARIANTS_KEY).getJSONObject(JSONUtils.MP4_KEY).getJSONObject(JSONUtils.SOURCE_KEY).getString(JSONUtils.URL_KEY);
- String gifDownloadUrl = variations.getJSONObject(JSONUtils.VARIANTS_KEY).getJSONObject(JSONUtils.GIF_KEY).getJSONObject(JSONUtils.SOURCE_KEY).getString(JSONUtils.URL_KEY);
- Post post = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime, title,
- previewUrl, permalink, score, postType, voteType,
- gilded, nsfw, stickied, isCrosspost, false);
-
- post.setPreviewWidth(previewWidth);
- post.setPreviewHeight(previewHeight);
- post.setVideoUrl(videoUrl);
- post.setDownloadableGifOrVideo(true);
- post.setGifOrVideoDownloadUrl(gifDownloadUrl);
+ } else {
+ if(previewUrl.equals("")) {
+ previewUrl = data.getJSONObject(JSONUtils.PREVIEW_KEY).getJSONArray(JSONUtils.IMAGES_KEY).getJSONObject(0)
+ .getJSONObject(JSONUtils.SOURCE_KEY).getString(JSONUtils.URL_KEY);
+ }
- bestPostData.add(post);
- } else if(data.getJSONObject(JSONUtils.PREVIEW_KEY).has(JSONUtils.REDDIT_VIDEO_PREVIEW_KEY)) {
- //Gif video post (Dash)
- Log.i("gif video dash", Integer.toString(i));
- int postType = Post.GIF_VIDEO_TYPE;
- String videoUrl = data.getJSONObject(JSONUtils.PREVIEW_KEY)
- .getJSONObject(JSONUtils.REDDIT_VIDEO_PREVIEW_KEY).getString(JSONUtils.DASH_URL_KEY);
-
- Post post = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime, title,
- previewUrl, permalink, score, postType, voteType,
- gilded, nsfw, stickied, isCrosspost, true);
+ if(isVideo) {
+ //Video post
+ Log.i("video", Integer.toString(i));
+ JSONObject redditVideoObject = data.getJSONObject(JSONUtils.MEDIA_KEY).getJSONObject(JSONUtils.REDDIT_VIDEO_KEY);
+ int postType = Post.VIDEO_TYPE;
+ String videoUrl = redditVideoObject.getString(JSONUtils.DASH_URL_KEY);
- post.setPreviewWidth(previewWidth);
- post.setPreviewHeight(previewHeight);
- post.setVideoUrl(videoUrl);
- post.setDownloadableGifOrVideo(false);
+ Post videoPost = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime,
+ title, previewUrl, permalink, score, postType, voteType,
+ gilded, nsfw, stickied, isCrosspost, true);
- bestPostData.add(post);
- } else {
- if (url.endsWith("jpg") || url.endsWith("png")) {
- //Image post
- Log.i("image", Integer.toString(i));
- int postType = Post.IMAGE_TYPE;
+ videoPost.setPreviewWidth(previewWidth);
+ videoPost.setPreviewHeight(previewHeight);
+ videoPost.setVideoUrl(videoUrl);
+ videoPost.setDownloadableGifOrVideo(false);
+
+ bestPostData.add(videoPost);
+ } else if(data.has(JSONUtils.PREVIEW_KEY)){
+ JSONObject variations = data.getJSONObject(JSONUtils.PREVIEW_KEY).getJSONArray(JSONUtils.IMAGES_KEY).getJSONObject(0);
+ if (variations.has(JSONUtils.VARIANTS_KEY) && variations.getJSONObject(JSONUtils.VARIANTS_KEY).has(JSONUtils.MP4_KEY)) {
+ //Gif video post (MP4)
+ Log.i("gif video mp4", Integer.toString(i));
+ int postType = Post.GIF_VIDEO_TYPE;
+ String videoUrl = variations.getJSONObject(JSONUtils.VARIANTS_KEY).getJSONObject(JSONUtils.MP4_KEY).getJSONObject(JSONUtils.SOURCE_KEY).getString(JSONUtils.URL_KEY);
+ String gifDownloadUrl = variations.getJSONObject(JSONUtils.VARIANTS_KEY).getJSONObject(JSONUtils.GIF_KEY).getJSONObject(JSONUtils.SOURCE_KEY).getString(JSONUtils.URL_KEY);
+ Post post = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime, title,
+ previewUrl, permalink, score, postType, voteType,
+ gilded, nsfw, stickied, isCrosspost, false);
+
+ post.setPreviewWidth(previewWidth);
+ post.setPreviewHeight(previewHeight);
+ post.setVideoUrl(videoUrl);
+ post.setDownloadableGifOrVideo(true);
+ post.setGifOrVideoDownloadUrl(gifDownloadUrl);
+
+ bestPostData.add(post);
+ } else if(data.getJSONObject(JSONUtils.PREVIEW_KEY).has(JSONUtils.REDDIT_VIDEO_PREVIEW_KEY)) {
+ //Gif video post (Dash)
+ Log.i("gif video dash", Integer.toString(i));
+ int postType = Post.GIF_VIDEO_TYPE;
+ String videoUrl = data.getJSONObject(JSONUtils.PREVIEW_KEY)
+ .getJSONObject(JSONUtils.REDDIT_VIDEO_PREVIEW_KEY).getString(JSONUtils.DASH_URL_KEY);
+
+ Post post = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime, title,
+ previewUrl, permalink, score, postType, voteType,
+ gilded, nsfw, stickied, isCrosspost, true);
+
+ post.setPreviewWidth(previewWidth);
+ post.setPreviewHeight(previewHeight);
+ post.setVideoUrl(videoUrl);
+ post.setDownloadableGifOrVideo(false);
+
+ bestPostData.add(post);
+ } else {
+ if (url.endsWith("jpg") || url.endsWith("png")) {
+ //Image post
+ Log.i("image", Integer.toString(i));
+ int postType = Post.IMAGE_TYPE;
- Post imagePost = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime,
- title, url, url, permalink, score, postType,
- voteType, gilded, nsfw, stickied, isCrosspost);
+ Post imagePost = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime,
+ title, url, url, permalink, score, postType,
+ voteType, gilded, nsfw, stickied, isCrosspost);
- imagePost.setPreviewWidth(previewWidth);
- imagePost.setPreviewHeight(previewHeight);
+ imagePost.setPreviewWidth(previewWidth);
+ imagePost.setPreviewHeight(previewHeight);
- bestPostData.add(imagePost);
- } else {
- if (url.contains(permalink)) {
- //Text post but with a preview
- Log.i("text with image", Integer.toString(i));
- int postType = Post.TEXT_TYPE;
- Post textWithImagePost = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime,
- title, permalink, score, postType, voteType, gilded, nsfw, stickied, isCrosspost);
-
- textWithImagePost.setPreviewWidth(previewWidth);
- textWithImagePost.setPreviewHeight(previewHeight);
-
- if(data.isNull(JSONUtils.SELFTEXT_HTML_KEY)) {
- textWithImagePost.setSelfText("");
- } else {
- textWithImagePost.setSelfText(data.getString(JSONUtils.SELFTEXT_HTML_KEY).trim());
- }
- bestPostData.add(textWithImagePost);
+ bestPostData.add(imagePost);
} else {
- //Link post
- Log.i("link", Integer.toString(i));
- int postType = Post.LINK_TYPE;
- Post linkPost = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime,
- title, previewUrl, url, permalink, score,
- postType, voteType, gilded, nsfw, stickied, isCrosspost);
- if(data.isNull(JSONUtils.SELFTEXT_HTML_KEY)) {
- linkPost.setSelfText("");
+ if (url.contains(permalink)) {
+ //Text post but with a preview
+ Log.i("text with image", Integer.toString(i));
+ int postType = Post.TEXT_TYPE;
+ Post textWithImagePost = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime,
+ title, permalink, score, postType, voteType, gilded, nsfw, stickied, isCrosspost);
+
+ textWithImagePost.setPreviewWidth(previewWidth);
+ textWithImagePost.setPreviewHeight(previewHeight);
+
+ if(data.isNull(JSONUtils.SELFTEXT_HTML_KEY)) {
+ textWithImagePost.setSelfText("");
+ } else {
+ textWithImagePost.setSelfText(data.getString(JSONUtils.SELFTEXT_HTML_KEY).trim());
+ }
+ bestPostData.add(textWithImagePost);
} else {
- linkPost.setSelfText(data.getString(JSONUtils.SELFTEXT_HTML_KEY).trim());
+ //Link post
+ Log.i("link", Integer.toString(i));
+ int postType = Post.LINK_TYPE;
+ Post linkPost = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime,
+ title, previewUrl, url, permalink, score,
+ postType, voteType, gilded, nsfw, stickied, isCrosspost);
+ if(data.isNull(JSONUtils.SELFTEXT_HTML_KEY)) {
+ linkPost.setSelfText("");
+ } else {
+ linkPost.setSelfText(data.getString(JSONUtils.SELFTEXT_HTML_KEY).trim());
+ }
+
+ linkPost.setPreviewWidth(previewWidth);
+ linkPost.setPreviewHeight(previewHeight);
+
+ bestPostData.add(linkPost);
}
-
- linkPost.setPreviewWidth(previewWidth);
- linkPost.setPreviewHeight(previewHeight);
-
- bestPostData.add(linkPost);
}
}
- }
- } else {
- if (url.endsWith("jpg") || url.endsWith("png")) {
- //Image post
- Log.i("CP image", Integer.toString(i));
- int postType = Post.IMAGE_TYPE;
- Post linkPost = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime,
- title, previewUrl, url, permalink, score, postType,
- voteType, gilded, nsfw, stickied, isCrosspost);
- linkPost.setPreviewWidth(previewWidth);
- linkPost.setPreviewHeight(previewHeight);
- bestPostData.add(linkPost);
} else {
- //CP No Preview Link post
- Log.i("CP no preview link", Integer.toString(i));
- int postType = Post.NO_PREVIEW_LINK_TYPE;
- bestPostData.add(new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime, title,
- url, url, permalink, score, postType, voteType,
- gilded, nsfw, stickied, isCrosspost));
+ if (url.endsWith("jpg") || url.endsWith("png")) {
+ //Image post
+ Log.i("CP image", Integer.toString(i));
+ int postType = Post.IMAGE_TYPE;
+ Post linkPost = new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime,
+ title, previewUrl, url, permalink, score, postType,
+ voteType, gilded, nsfw, stickied, isCrosspost);
+ linkPost.setPreviewWidth(previewWidth);
+ linkPost.setPreviewHeight(previewHeight);
+ bestPostData.add(linkPost);
+ } else {
+ //CP No Preview Link post
+ Log.i("CP no preview link", Integer.toString(i));
+ int postType = Post.NO_PREVIEW_LINK_TYPE;
+ bestPostData.add(new Post(id, fullName, subredditNamePrefixed, author, formattedPostTime, title,
+ url, url, permalink, score, postType, voteType,
+ gilded, nsfw, stickied, isCrosspost));
+ }
}
}
}
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/PostDataSource.java b/app/src/main/java/ml/docilealligator/infinityforreddit/PostDataSource.java
index b2c54c32..29e78b07 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/PostDataSource.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/PostDataSource.java
@@ -16,6 +16,7 @@ class PostDataSource extends PageKeyedDataSource<String, Post> {
static final int TYPE_FRONT_PAGE = 0;
static final int TYPE_SUBREDDIT = 1;
static final int TYPE_USER = 2;
+
private Retrofit retrofit;
private String accessToken;
private Locale locale;
@@ -86,6 +87,10 @@ class PostDataSource extends PageKeyedDataSource<String, Post> {
this.params = params;
this.callback = callback;
+ if(params.key.equals("null")) {
+ return;
+ }
+
paginationNetworkStateLiveData.postValue(NetworkState.LOADING);
switch (postType) {