diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/common/CommonSite.java b/Clover/app/src/main/java/org/floens/chan/core/site/common/CommonSite.java index 6a77386c..b2dfe889 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/site/common/CommonSite.java +++ b/Clover/app/src/main/java/org/floens/chan/core/site/common/CommonSite.java @@ -38,6 +38,7 @@ import org.floens.chan.core.site.SiteIcon; import org.floens.chan.core.site.SiteRequestModifier; import org.floens.chan.core.site.SiteUrlHandler; import org.floens.chan.core.site.http.DeleteRequest; +import org.floens.chan.core.site.http.DeleteResponse; import org.floens.chan.core.site.http.HttpCall; import org.floens.chan.core.site.http.LoginRequest; import org.floens.chan.core.site.http.Reply; @@ -414,19 +415,6 @@ public abstract class CommonSite extends SiteBase { this.site = site; } - public void setupPost(Reply reply, MultipartHttpCall call) { - } - - public void handlePost(ReplyResponse response, Response httpResponse, String responseBody) { - } - - @Override - public void boards(BoardsListener boardsListener) { - if (!site.staticBoards.isEmpty()) { - boardsListener.onBoardsReceived(new Boards(site.staticBoards)); - } - } - @Override public void post(Reply reply, PostListener postListener) { ReplyResponse replyResponse = new ReplyResponse(); @@ -458,6 +446,22 @@ public abstract class CommonSite extends SiteBase { } } + public void setupPost(Reply reply, MultipartHttpCall call) { + } + + public void handlePost(ReplyResponse response, Response httpResponse, String responseBody) { + } + + @Override + public boolean postRequiresAuthentication() { + return false; + } + + @Override + public SiteAuthentication postAuthenticate() { + return SiteAuthentication.fromNone(); + } + private void makePostCall(HttpCall call, ReplyResponse replyResponse, PostListener postListener) { site.httpCallManager.makeHttpCall(call, new HttpCall.HttpCallback() { @Override @@ -480,28 +484,50 @@ public abstract class CommonSite extends SiteBase { } @Override - public boolean postRequiresAuthentication() { - return false; + public void delete(DeleteRequest deleteRequest, DeleteListener deleteListener) { + DeleteResponse deleteResponse = new DeleteResponse(); + + MultipartHttpCall call = new MultipartHttpCall(site) { + @Override + public void process(Response response, String result) throws IOException { + handleDelete(deleteResponse, response, result); + } + }; + + call.url(site.endpoints().delete(deleteRequest.post)); + setupDelete(deleteRequest, call); + site.httpCallManager.makeHttpCall(call, new HttpCall.HttpCallback() { + @Override + public void onHttpSuccess(HttpCall httpCall) { + deleteListener.onDeleteComplete(httpCall, deleteResponse); + } + + @Override + public void onHttpFail(HttpCall httpCall, Exception e) { + deleteListener.onDeleteError(httpCall); + } + }); } - @Override - public SiteAuthentication postAuthenticate() { - return SiteAuthentication.fromNone(); + public void setupDelete(DeleteRequest deleteRequest, MultipartHttpCall call) { } - @Override - public void delete(DeleteRequest deleteRequest, DeleteListener deleteListener) { + public void handleDelete(DeleteResponse response, Response httpResponse, String responseBody) { + } + @Override + public void boards(BoardsListener boardsListener) { + if (!site.staticBoards.isEmpty()) { + boardsListener.onBoardsReceived(new Boards(site.staticBoards)); + } } @Override public void login(LoginRequest loginRequest, LoginListener loginListener) { - } @Override public void logout() { - } @Override diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/common/vichan/VichanActions.java b/Clover/app/src/main/java/org/floens/chan/core/site/common/vichan/VichanActions.java index 07224e38..d3c405b6 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/site/common/vichan/VichanActions.java +++ b/Clover/app/src/main/java/org/floens/chan/core/site/common/vichan/VichanActions.java @@ -20,6 +20,8 @@ package org.floens.chan.core.site.common.vichan; import org.floens.chan.core.site.SiteAuthentication; import org.floens.chan.core.site.common.CommonSite; import org.floens.chan.core.site.common.MultipartHttpCall; +import org.floens.chan.core.site.http.DeleteRequest; +import org.floens.chan.core.site.http.DeleteResponse; import org.floens.chan.core.site.http.Reply; import org.floens.chan.core.site.http.ReplyResponse; import org.jsoup.Jsoup; @@ -86,7 +88,7 @@ public class VichanActions extends CommonSite.CommonActions { @Override public void handlePost(ReplyResponse replyResponse, Response response, String result) { Matcher auth = Pattern.compile(".*\"captcha\": ?true.*").matcher(result); - Matcher err = Pattern.compile(".*]*>Error.*]*>(.*?).*").matcher(result); + Matcher err = errorPattern().matcher(result); if (auth.find()) { replyResponse.requireAuthentication = true; replyResponse.errorMessage = result; @@ -112,6 +114,32 @@ public class VichanActions extends CommonSite.CommonActions { } } + @Override + public void setupDelete(DeleteRequest deleteRequest, MultipartHttpCall call) { + call.parameter("board", deleteRequest.post.board.code); + call.parameter("delete", "Delete"); + call.parameter("delete_" + deleteRequest.post.no, "on"); + call.parameter("password", deleteRequest.savedReply.password); + + if (deleteRequest.imageOnly) { + call.parameter("file", "on"); + } + } + + @Override + public void handleDelete(DeleteResponse response, Response httpResponse, String responseBody) { + Matcher err = errorPattern().matcher(responseBody); + if (err.find()) { + response.errorMessage = Jsoup.parse(err.group(1)).body().text(); + } else { + response.deleted = true; + } + } + + public Pattern errorPattern() { + return Pattern.compile(".*]*>Error.*]*>(.*?).*"); + } + @Override public SiteAuthentication postAuthenticate() { return SiteAuthentication.fromNone(); diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/common/vichan/VichanEndpoints.java b/Clover/app/src/main/java/org/floens/chan/core/site/common/vichan/VichanEndpoints.java index d81ee0b7..07aeeb2f 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/site/common/vichan/VichanEndpoints.java +++ b/Clover/app/src/main/java/org/floens/chan/core/site/common/vichan/VichanEndpoints.java @@ -72,4 +72,9 @@ public class VichanEndpoints extends CommonSite.CommonEndpoints { public HttpUrl reply(Loadable loadable) { return sys.builder().s("post.php").url(); } + + @Override + public HttpUrl delete(Post post) { + return sys.builder().s("post.php").url(); + } } diff --git a/Clover/app/src/main/java/org/floens/chan/core/site/sites/chan8/Chan8.java b/Clover/app/src/main/java/org/floens/chan/core/site/sites/chan8/Chan8.java index 39a6afd5..cdf7d31a 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/site/sites/chan8/Chan8.java +++ b/Clover/app/src/main/java/org/floens/chan/core/site/sites/chan8/Chan8.java @@ -13,6 +13,7 @@ import org.floens.chan.core.site.common.vichan.VichanActions; import org.floens.chan.core.site.common.vichan.VichanApi; import org.floens.chan.core.site.common.vichan.VichanCommentParser; import org.floens.chan.core.site.common.vichan.VichanEndpoints; +import org.floens.chan.core.site.http.DeleteRequest; import org.floens.chan.core.site.http.Reply; import java.util.Map; @@ -62,7 +63,7 @@ public class Chan8 extends CommonSite { setConfig(new CommonConfig() { @Override public boolean feature(Feature feature) { - return feature == Feature.POSTING; + return feature == Feature.POSTING || feature == Feature.POST_DELETE; } }); @@ -119,6 +120,11 @@ public class Chan8 extends CommonSite { "You failed the CAPTCHA", "You may now go back and make your post"); } + + @Override + public void delete(DeleteRequest deleteRequest, DeleteListener deleteListener) { + super.delete(deleteRequest, deleteListener); + } }); setApi(new VichanApi(this));