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.SiteRequestModifier;
import org.floens.chan.core.site.SiteUrlHandler; import org.floens.chan.core.site.SiteUrlHandler;
import org.floens.chan.core.site.http.DeleteRequest; 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.HttpCall;
import org.floens.chan.core.site.http.LoginRequest; import org.floens.chan.core.site.http.LoginRequest;
import org.floens.chan.core.site.http.Reply; import org.floens.chan.core.site.http.Reply;
@ -414,19 +415,6 @@ public abstract class CommonSite extends SiteBase {
this.site = site; 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 @Override
public void post(Reply reply, PostListener postListener) { public void post(Reply reply, PostListener postListener) {
ReplyResponse replyResponse = new ReplyResponse(); 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) { private void makePostCall(HttpCall call, ReplyResponse replyResponse, PostListener postListener) {
site.httpCallManager.makeHttpCall(call, new HttpCall.HttpCallback<HttpCall>() { site.httpCallManager.makeHttpCall(call, new HttpCall.HttpCallback<HttpCall>() {
@Override @Override
@ -480,28 +484,50 @@ public abstract class CommonSite extends SiteBase {
} }
@Override @Override
public boolean postRequiresAuthentication() { public void delete(DeleteRequest deleteRequest, DeleteListener deleteListener) {
return false; 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 void setupDelete(DeleteRequest deleteRequest, MultipartHttpCall call) {
public SiteAuthentication postAuthenticate() {
return SiteAuthentication.fromNone();
} }
@Override public void handleDelete(DeleteResponse response, Response httpResponse, String responseBody) {
public void delete(DeleteRequest deleteRequest, DeleteListener deleteListener) { }
@Override
public void boards(BoardsListener boardsListener) {
if (!site.staticBoards.isEmpty()) {
boardsListener.onBoardsReceived(new Boards(site.staticBoards));
}
} }
@Override @Override
public void login(LoginRequest loginRequest, LoginListener loginListener) { public void login(LoginRequest loginRequest, LoginListener loginListener) {
} }
@Override @Override
public void logout() { public void logout() {
} }
@Override @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.SiteAuthentication;
import org.floens.chan.core.site.common.CommonSite; import org.floens.chan.core.site.common.CommonSite;
import org.floens.chan.core.site.common.MultipartHttpCall; 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.Reply;
import org.floens.chan.core.site.http.ReplyResponse; import org.floens.chan.core.site.http.ReplyResponse;
import org.jsoup.Jsoup; import org.jsoup.Jsoup;
@ -86,7 +88,7 @@ public class VichanActions extends CommonSite.CommonActions {
@Override @Override
public void handlePost(ReplyResponse replyResponse, Response response, String result) { public void handlePost(ReplyResponse replyResponse, Response response, String result) {
Matcher auth = Pattern.compile(".*\"captcha\": ?true.*").matcher(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()) { if (auth.find()) {
replyResponse.requireAuthentication = true; replyResponse.requireAuthentication = true;
replyResponse.errorMessage = result; 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 @Override
public SiteAuthentication postAuthenticate() { public SiteAuthentication postAuthenticate() {
return SiteAuthentication.fromNone(); return SiteAuthentication.fromNone();

@ -72,4 +72,9 @@ public class VichanEndpoints extends CommonSite.CommonEndpoints {
public HttpUrl reply(Loadable loadable) { public HttpUrl reply(Loadable loadable) {
return sys.builder().s("post.php").url(); 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.VichanApi;
import org.floens.chan.core.site.common.vichan.VichanCommentParser; import org.floens.chan.core.site.common.vichan.VichanCommentParser;
import org.floens.chan.core.site.common.vichan.VichanEndpoints; 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 org.floens.chan.core.site.http.Reply;
import java.util.Map; import java.util.Map;
@ -62,7 +63,7 @@ public class Chan8 extends CommonSite {
setConfig(new CommonConfig() { setConfig(new CommonConfig() {
@Override @Override
public boolean feature(Feature feature) { 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 failed the CAPTCHA",
"You may now go back and make your post"); "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)); setApi(new VichanApi(this));

Loading…
Cancel
Save