vichan: implement deleting

refactor-toolbar
Floens 8 years ago
parent 6431312e39
commit 607ef2c488
  1. 70
      Clover/app/src/main/java/org/floens/chan/core/site/common/CommonSite.java
  2. 30
      Clover/app/src/main/java/org/floens/chan/core/site/common/vichan/VichanActions.java
  3. 5
      Clover/app/src/main/java/org/floens/chan/core/site/common/vichan/VichanEndpoints.java
  4. 8
      Clover/app/src/main/java/org/floens/chan/core/site/sites/chan8/Chan8.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<HttpCall>() {
@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<HttpCall>() {
@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

@ -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(".*<h1[^>]*>Error</h1>.*<h2[^>]*>(.*?)</h2>.*").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(".*<h1[^>]*>Error</h1>.*<h2[^>]*>(.*?)</h2>.*");
}
@Override
public SiteAuthentication postAuthenticate() {
return SiteAuthentication.fromNone();

@ -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();
}
}

@ -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));

Loading…
Cancel
Save