From ae916f1f4e0426a07844ba75c0a8bb810cac16e7 Mon Sep 17 00:00:00 2001 From: Floens Date: Wed, 24 Jan 2018 21:54:45 +0100 Subject: [PATCH] post: pin thread on post the title is broken because we don't know it before we load the thread. fix thread finding after creation for vichan. Closes #336 --- .../floens/chan/core/manager/WatchManager.java | 13 ++++++++++--- .../chan/core/presenter/ReplyPresenter.java | 16 ++++++++++++---- .../site/sites/vichan/ViChanReplyHttpCall.java | 15 ++++++++++++--- .../org/floens/chan/ui/helper/PostHelper.java | 3 ++- 4 files changed, 36 insertions(+), 11 deletions(-) diff --git a/Clover/app/src/main/java/org/floens/chan/core/manager/WatchManager.java b/Clover/app/src/main/java/org/floens/chan/core/manager/WatchManager.java index 2e63a7df..50f81e72 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/manager/WatchManager.java +++ b/Clover/app/src/main/java/org/floens/chan/core/manager/WatchManager.java @@ -25,6 +25,7 @@ import android.os.Handler; import android.os.Looper; import android.os.Message; import android.os.PowerManager; +import android.support.annotation.Nullable; import org.floens.chan.Chan; import org.floens.chan.core.database.DatabaseManager; @@ -161,12 +162,18 @@ public class WatchManager { updateState(); } - public boolean createPin(Loadable loadable, Post opPost) { + public boolean createPin(Loadable loadable) { + return createPin(loadable, null); + } + + public boolean createPin(Loadable loadable, @Nullable Post opPost) { Pin pin = new Pin(); pin.loadable = loadable; pin.loadable.title = PostHelper.getTitle(opPost, loadable); - PostImage image = opPost.image; - pin.thumbnailUrl = image == null ? "" : image.getThumbnailUrl().toString(); + if (opPost != null) { + PostImage image = opPost.image; + pin.thumbnailUrl = image == null ? "" : image.getThumbnailUrl().toString(); + } return createPin(pin); } diff --git a/Clover/app/src/main/java/org/floens/chan/core/presenter/ReplyPresenter.java b/Clover/app/src/main/java/org/floens/chan/core/presenter/ReplyPresenter.java index c40881ac..103c66cb 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/presenter/ReplyPresenter.java +++ b/Clover/app/src/main/java/org/floens/chan/core/presenter/ReplyPresenter.java @@ -205,10 +205,18 @@ public class ReplyPresenter implements AuthenticationLayoutCallback, ImagePickDe @Override public void onPostComplete(HttpCall httpCall, ReplyResponse replyResponse) { if (replyResponse.posted) { - if (ChanSettings.postPinThread.get() && loadable.isThreadMode()) { - ChanThread thread = callback.getThread(); - if (thread != null) { - watchManager.createPin(loadable, thread.op); + if (ChanSettings.postPinThread.get()) { + if (loadable.isThreadMode()) { + ChanThread thread = callback.getThread(); + if (thread != null) { + watchManager.createPin(loadable, thread.op); + } + } else { + Loadable postedLoadable = databaseManager.getDatabaseLoadableManager() + .get(Loadable.forThread(loadable.site, loadable.board, + replyResponse.postNo)); + + watchManager.createPin(postedLoadable); } } diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/sites/vichan/ViChanReplyHttpCall.java b/Clover/app/src/main/java/org/floens/chan/core/site/sites/vichan/ViChanReplyHttpCall.java index 955dd990..8fbcaa81 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/site/sites/vichan/ViChanReplyHttpCall.java +++ b/Clover/app/src/main/java/org/floens/chan/core/site/sites/vichan/ViChanReplyHttpCall.java @@ -37,6 +37,8 @@ import okhttp3.RequestBody; import okhttp3.Response; public class ViChanReplyHttpCall extends CommonReplyHttpCall { + private static final String TAG = "ViChanReplyHttpCall"; + private static final Pattern REQUIRE_AUTHENTICATION = Pattern.compile(".*\"captcha\": ?true.*"); private static final Pattern ERROR_MESSAGE = Pattern.compile(".*

Error

.*]*>(.*?)<\\/h2>.*"); @@ -83,8 +85,6 @@ public class ViChanReplyHttpCall extends CommonReplyHttpCall { @Override public void process(Response response, String result) throws IOException { - Logger.test(result); - Matcher authenticationMatcher = REQUIRE_AUTHENTICATION.matcher(result); Matcher errorMessageMatcher = ERROR_MESSAGE.matcher(result); if (authenticationMatcher.find()) { @@ -93,6 +93,9 @@ public class ViChanReplyHttpCall extends CommonReplyHttpCall { } else if (errorMessageMatcher.find()) { replyResponse.errorMessage = Jsoup.parse(errorMessageMatcher.group(1)).body().text(); } else { + Logger.d(TAG, "url: " + response.request().url().toString()); + Logger.d(TAG, "body: " + response); + // TODO(multisite): 8ch redirects us, but the result is a 404, and we need that // redirect url to figure out what we posted. HttpUrl url = response.request().url(); @@ -110,10 +113,16 @@ public class ViChanReplyHttpCall extends CommonReplyHttpCall { } catch (NumberFormatException ignored) { } - if (board != null && threadId != 0 && postId != 0) { + if (postId == 0) { + postId = threadId; + } + + if (board != null && threadId != 0) { replyResponse.threadNo = threadId; replyResponse.postNo = postId; replyResponse.posted = true; + } else { + replyResponse.errorMessage = "Error posting: could not find posted thread."; } } } diff --git a/Clover/app/src/main/java/org/floens/chan/ui/helper/PostHelper.java b/Clover/app/src/main/java/org/floens/chan/ui/helper/PostHelper.java index 1531eca7..ea048fea 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/helper/PostHelper.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/helper/PostHelper.java @@ -20,6 +20,7 @@ package org.floens.chan.ui.helper; import android.content.res.Resources; import android.graphics.BitmapFactory; import android.graphics.drawable.BitmapDrawable; +import android.support.annotation.Nullable; import android.text.SpannableString; import android.text.TextUtils; import android.text.style.ImageSpan; @@ -66,7 +67,7 @@ public class PostHelper { } } - public static String getTitle(Post post, Loadable loadable) { + public static String getTitle(@Nullable Post post, @Nullable Loadable loadable) { if (post != null) { if (!TextUtils.isEmpty(post.subject)) { return post.subject;