minor improvements
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
@@ -124,7 +124,7 @@ public class BaseAppointment implements Appointment {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String ical() {
|
||||
public String ical() { // TODO: implement
|
||||
return "converting event (%s) to ical not implemented".formatted(title);
|
||||
}
|
||||
|
||||
@@ -199,4 +199,4 @@ public class BaseAppointment implements Appointment {
|
||||
public Set<Link> links() {
|
||||
return links;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,7 +58,6 @@ public abstract class BaseImporter implements Importer {
|
||||
return extractDescriptionTag(eventTag);
|
||||
}
|
||||
|
||||
|
||||
protected Result<String> extractDescription(Tag eventTag) {
|
||||
Result<Tag> titleTag = extractDescriptionTag(eventTag);
|
||||
if (titleTag.optional().isEmpty()) return transform(titleTag);
|
||||
@@ -73,7 +72,6 @@ public abstract class BaseImporter implements Importer {
|
||||
return error("not implemented");
|
||||
}
|
||||
|
||||
|
||||
protected Result<LocalDateTime> extractEnd(Tag eventTag) {
|
||||
Result<Tag> endTag = extractEndTag(eventTag);
|
||||
if (endTag.optional().isEmpty()) return transform(endTag);
|
||||
@@ -114,79 +112,75 @@ public abstract class BaseImporter implements Importer {
|
||||
return Payload.of(event);
|
||||
}
|
||||
|
||||
|
||||
private Result<Appointment> extractEvent(Result<Tag> domResult, Link eventPage) {
|
||||
return switch (domResult) {
|
||||
case Payload<Tag> payload -> extractEvent(payload.get(), eventPage);
|
||||
case Error<Tag> err -> err.transform();
|
||||
default -> invalidParameter(domResult);
|
||||
};
|
||||
}
|
||||
case Payload<Tag> payload -> extractEvent(payload.get(), eventPage);
|
||||
case Error<Tag> err -> err.transform();
|
||||
default -> invalidParameter(domResult);
|
||||
};
|
||||
}
|
||||
|
||||
protected abstract Result<Tag> extractEventTag(Result<Tag> pageResult);
|
||||
protected abstract Result<Tag> extractEventTag(Result<Tag> pageResult);
|
||||
|
||||
protected abstract Result<List<String>> extractEventUrls(Result<Tag> programPage);
|
||||
protected abstract Result<List<String>> extractEventUrls(Result<Tag> programPage);
|
||||
|
||||
protected List<Link> extractLinks(Tag appointmentTag) {
|
||||
var links = new ArrayList<Link>();
|
||||
|
||||
protected List<Link> extractLinks(Tag appointmentTag) {
|
||||
var links = new ArrayList<Link>();
|
||||
extractLinksTag(appointmentTag) //
|
||||
.map(this::extractLinkAnchors)
|
||||
.optional()
|
||||
.stream()
|
||||
.flatMap(List::stream)
|
||||
.forEach(anchor -> {
|
||||
var href = anchor.get("href");
|
||||
if (href == null) return;
|
||||
if (!href.contains("://")) href = baseUrl() + href;
|
||||
var text = anchor.inner(0).orElse(href);
|
||||
Payload //
|
||||
.of(href)
|
||||
.map(BaseImporter::url)
|
||||
.map(url -> link(url, text))
|
||||
.optional()
|
||||
.ifPresent(links::add);
|
||||
});
|
||||
return links;
|
||||
}
|
||||
|
||||
extractLinksTag(appointmentTag) //
|
||||
.map(this::extractLinkAnchors)
|
||||
.optional()
|
||||
.stream()
|
||||
.flatMap(List::stream).forEach(anchor -> {
|
||||
var href = anchor.get("href");
|
||||
if (href == null) return;
|
||||
if (!href.contains("://")) href = baseUrl() + href;
|
||||
var text = anchor.inner(0).orElse(href);
|
||||
Payload //
|
||||
.of(href)
|
||||
.map(BaseImporter::url)
|
||||
.map(url -> link(url,text))
|
||||
.optional()
|
||||
.ifPresent(links::add);
|
||||
});
|
||||
return links;
|
||||
}
|
||||
public abstract Result<List<Tag>> extractLinkAnchors(Result<Tag> tagResult);
|
||||
|
||||
public abstract Result<List<Tag>> extractLinkAnchors(Result<Tag> tagResult);
|
||||
protected Result<Tag> extractLinksTag(Tag eventTag) {
|
||||
return extractDescriptionTag(eventTag);
|
||||
}
|
||||
|
||||
protected Result<Tag> extractLinksTag(Tag eventTag) {
|
||||
return extractDescriptionTag(eventTag);
|
||||
}
|
||||
protected Result<String> extractLocation(Tag eventTag) {
|
||||
Result<Tag> locationTag = extractLocationTag(eventTag);
|
||||
if (locationTag.optional().isEmpty()) return transform(locationTag);
|
||||
return Payload.of(locationTag.optional().get().toString(2));
|
||||
}
|
||||
|
||||
protected Result<String> extractLocation(Tag eventTag) {
|
||||
Result<Tag> locationTag = extractLocationTag(eventTag);
|
||||
if (locationTag.optional().isEmpty()) return transform(locationTag);
|
||||
return Payload.of(locationTag.optional().get().toString(2));
|
||||
}
|
||||
protected abstract Result<Tag> extractLocationTag(Tag eventTag);
|
||||
|
||||
protected abstract Result<Tag> extractLocationTag(Tag eventTag);
|
||||
protected Result<LocalDateTime> extractStart(Tag eventTag) {
|
||||
Result<Tag> startTag = extractStartTag(eventTag);
|
||||
if (startTag.optional().isEmpty()) return transform(startTag);
|
||||
return parseStartDate(startTag.optional().get().strip());
|
||||
}
|
||||
|
||||
protected abstract Result<Tag> extractStartTag(Tag eventTag);
|
||||
|
||||
protected Result<LocalDateTime> extractStart(Tag eventTag) {
|
||||
Result<Tag> startTag = extractStartTag(eventTag);
|
||||
if (startTag.optional().isEmpty()) return transform(startTag);
|
||||
return parseStartDate(startTag.optional().get().strip());
|
||||
}
|
||||
protected abstract List<String> extractTags(Tag eventTag);
|
||||
|
||||
protected abstract Result<Tag> extractStartTag(Tag eventTag);
|
||||
|
||||
|
||||
protected abstract List<String> extractTags(Tag eventTag);
|
||||
|
||||
protected Result<String> extractTitle(Tag eventTag) {
|
||||
Result<Tag> titleTag = extractTitleTag(eventTag);
|
||||
if (titleTag.optional().isEmpty()) return transform(titleTag);
|
||||
var inner = titleTag.optional().flatMap(tag -> tag.inner(2));
|
||||
return inner.isPresent() ? Payload.of(inner.get()) :
|
||||
error("No title found");
|
||||
protected Result<String> extractTitle(Tag eventTag) {
|
||||
Result<Tag> titleTag = extractTitleTag(eventTag);
|
||||
if (titleTag.optional().isEmpty()) return transform(titleTag);
|
||||
var inner = titleTag.optional().flatMap(tag -> tag.inner(2));
|
||||
return inner.isPresent() ? Payload.of(inner.get()) :
|
||||
error("No title found");
|
||||
}
|
||||
|
||||
protected abstract Result<Tag> extractTitleTag(Tag eventTag);
|
||||
|
||||
|
||||
@Override
|
||||
public Stream<Appointment> fetch() {
|
||||
var url = Payload.of(programURL());
|
||||
@@ -249,24 +243,24 @@ public abstract class BaseImporter implements Importer {
|
||||
|
||||
protected Result<Tag> parseXML(Result<InputStream> inputStream) {
|
||||
return switch (inputStream) {
|
||||
case Payload<InputStream> payload -> XMLParser.parse(payload.get());
|
||||
case Error<InputStream> error -> error.transform();
|
||||
default -> invalidParameter(inputStream);
|
||||
};
|
||||
}
|
||||
case Payload<InputStream> payload -> XMLParser.parse(payload.get());
|
||||
case Error<InputStream> error -> error.transform();
|
||||
default -> invalidParameter(inputStream);
|
||||
};
|
||||
}
|
||||
|
||||
protected Result<InputStream> preload(Result<InputStream> inputStream) {
|
||||
switch (inputStream) {
|
||||
case Payload<InputStream> payload:
|
||||
try {
|
||||
return Payload.of(XMLParser.preload(payload.get()));
|
||||
} catch (IOException e) {
|
||||
return error(e, "Failed to buffer data from %s", payload);
|
||||
}
|
||||
case Error<InputStream> error:
|
||||
return error.transform();
|
||||
default:
|
||||
return invalidParameter(inputStream);
|
||||
protected Result<InputStream> preload(Result<InputStream> inputStream) {
|
||||
switch (inputStream) {
|
||||
case Payload<InputStream> payload:
|
||||
try {
|
||||
return Payload.of(XMLParser.preload(payload.get()));
|
||||
} catch (IOException e) {
|
||||
return error(e, "Failed to buffer data from %s", payload);
|
||||
}
|
||||
case Error<InputStream> error:
|
||||
return error.transform();
|
||||
default:
|
||||
return invalidParameter(inputStream);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -284,7 +278,6 @@ public abstract class BaseImporter implements Importer {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected static Result<Integer> toNumericMonth(String month) {
|
||||
month = month.toLowerCase();
|
||||
if (month.startsWith("ja")) return Payload.of(1);
|
||||
@@ -302,7 +295,6 @@ public abstract class BaseImporter implements Importer {
|
||||
return error("Failed to recognize \"%s\" as a month!", month);
|
||||
}
|
||||
|
||||
|
||||
protected static Result<URL> url(Result<String> urlResult) {
|
||||
if (urlResult.optional().isEmpty()) return transform(urlResult);
|
||||
var url = urlResult.optional().get();
|
||||
|
||||
Reference in New Issue
Block a user