package net.pterodactylus.rhynodge.filters;
-import static com.google.common.base.Preconditions.*;
+import static com.google.common.base.Preconditions.checkArgument;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.Collections;
import java.util.List;
import net.pterodactylus.rhynodge.Filter;
import net.pterodactylus.rhynodge.states.ComicState;
import net.pterodactylus.rhynodge.states.ComicState.Comic;
import net.pterodactylus.rhynodge.states.ComicState.Strip;
+import net.pterodactylus.rhynodge.states.FailedState;
import net.pterodactylus.rhynodge.states.HtmlState;
import com.google.common.base.Optional;
+import org.jetbrains.annotations.NotNull;
import org.jsoup.nodes.Document;
/**
*/
public abstract class ComicSiteFilter implements Filter {
+ @NotNull
@Override
- public State filter(State state) {
+ public State filter(@NotNull State state) {
checkArgument(state instanceof HtmlState, "state must be an HTML state");
/* initialize states: */
HtmlState htmlState = (HtmlState) state;
- ComicState comicState = new ComicState();
/* extract comics. */
Optional<String> title = extractTitle(htmlState.document());
List<String> imageComments = extractImageComments(htmlState.document());
/* store comic, if found, into state. */
- if (title.isPresent() && !imageUrls.isEmpty()) {
- Comic comic = new Comic(title.get());
- int imageCounter = 0;
- for (String imageUrl : imageUrls) {
- String imageComment = (imageCounter < imageComments.size()) ? imageComments.get(imageCounter) : "";
- Strip strip = new Strip(imageUrl, imageComment);
+ if (imageUrls.isEmpty()) {
+ return new FailedState();
+ }
+
+ Comic comic = new Comic(title.or(""));
+ int imageCounter = 0;
+ for (String imageUrl : imageUrls) {
+ String imageComment = (imageCounter < imageComments.size()) ? imageComments.get(imageCounter) : "";
+ try {
+ URI stripUri = new URI(htmlState.uri()).resolve(imageUrl.replaceAll(" ", "%20"));
+ Strip strip = new Strip(stripUri.toString(), imageComment);
imageCounter++;
comic.add(strip);
+ } catch (URISyntaxException use1) {
+ throw new IllegalStateException(String.format("Could not resolve image URL ā%sā against base URL ā%sā.", imageUrl, htmlState.uri()), use1);
}
- comicState.add(comic);
}
- return comicState;
+ return new ComicState(Collections.singletonList(comic));
}
//