diff options
author | Alex Ning <chineseperson5@gmail.com> | 2019-01-21 17:05:46 +0000 |
---|---|---|
committer | Alex Ning <chineseperson5@gmail.com> | 2019-01-21 17:05:46 +0000 |
commit | f7a192dcbedb09a6d29e7879f6119edd47278f6f (patch) | |
tree | bd51dd7fd83d7c305b6fae37aae1fbbb063af629 /app/src/main/java/ml | |
parent | 91e6174aa5b2fba9d2777e3ea33b20a833a487bf (diff) | |
download | infinity-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/ml')
-rw-r--r-- | app/src/main/java/ml/docilealligator/infinityforreddit/ParsePost.java | 229 | ||||
-rw-r--r-- | app/src/main/java/ml/docilealligator/infinityforreddit/PostDataSource.java | 5 |
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) { |