updated libraries, adapted code to library changes
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
@@ -3,9 +3,10 @@ description = "OpenCloudCal : Base"
|
||||
dependencies {
|
||||
implementation(project(":de.srsoftware.cal.api"))
|
||||
|
||||
implementation("de.srsoftware:tools.mime:1.1.0")
|
||||
implementation("de.srsoftware:tools.container:1.0.6")
|
||||
implementation("de.srsoftware:tools.mime:1.1.4")
|
||||
implementation("de.srsoftware:tools.optionals:1.0.0")
|
||||
implementation("de.srsoftware:tools.util:1.3.0")
|
||||
implementation("de.srsoftware:tools.web:1.3.14")
|
||||
implementation("de.srsoftware:tools.util:2.1.1")
|
||||
implementation("de.srsoftware:tools.web:1.3.16")
|
||||
implementation("org.json:json:20240303")
|
||||
}
|
||||
|
||||
@@ -2,18 +2,23 @@
|
||||
package de.srsoftware.cal;
|
||||
|
||||
import static de.srsoftware.cal.Util.*;
|
||||
import static de.srsoftware.tools.Error.error;
|
||||
import static de.srsoftware.tools.Result.transform;
|
||||
import static de.srsoftware.tools.container.Error.error;
|
||||
import static de.srsoftware.tools.container.Container.transform;
|
||||
import static de.srsoftware.tools.Tag.HREF;
|
||||
import static de.srsoftware.tools.TagFilter.*;
|
||||
import static java.lang.System.Logger.Level.DEBUG;
|
||||
|
||||
import de.srsoftware.cal.api.*;
|
||||
import de.srsoftware.tools.*;
|
||||
import de.srsoftware.tools.container.Container;
|
||||
import de.srsoftware.tools.container.Payload;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.net.*;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
@@ -40,22 +45,22 @@ public abstract class BaseImporter implements Importer {
|
||||
.map(Payload::of)
|
||||
.map(Util::url)
|
||||
.map(Util::toAttachment)
|
||||
.map(Result::optional)
|
||||
.map(Container::optional)
|
||||
.flatMap(Optional::stream)
|
||||
.toList();
|
||||
}
|
||||
|
||||
protected abstract Predicate<Tag> extractAttachmentsFilter();
|
||||
|
||||
protected Result<Tag> extractAttachmentsTag(Tag eventTag) {
|
||||
protected Container<Tag> extractAttachmentsTag(Tag eventTag) {
|
||||
var list = eventTag.find(extractAttachmentsFilter());
|
||||
if (list.isEmpty()) return error("Failed to find attachments tag");
|
||||
return Payload.of(list.getFirst());
|
||||
}
|
||||
|
||||
|
||||
protected Result<String> extractDescription(Tag eventTag) {
|
||||
Result<Tag> descriptionTag = extractDescriptionTag(eventTag);
|
||||
protected Container<String> extractDescription(Tag eventTag) {
|
||||
Container<Tag> descriptionTag = extractDescriptionTag(eventTag);
|
||||
if (descriptionTag.optional().isEmpty()) return transform(descriptionTag);
|
||||
Tag tag = descriptionTag.optional().get();
|
||||
tag.find(ofType("iframe")).forEach(Tag::remove);
|
||||
@@ -65,29 +70,29 @@ public abstract class BaseImporter implements Importer {
|
||||
|
||||
protected abstract Predicate<Tag> extractDescriptionFilter();
|
||||
|
||||
protected Result<Tag> extractDescriptionTag(Tag eventTag){
|
||||
protected Container<Tag> extractDescriptionTag(Tag eventTag){
|
||||
var list = eventTag.find(extractDescriptionFilter());
|
||||
if (list.isEmpty()) return error("Failed to find description tag");
|
||||
return Payload.of(list.getFirst());
|
||||
}
|
||||
|
||||
|
||||
protected abstract Result<Coords> extractCoords(Tag eventTag);
|
||||
protected abstract Container<Coords> extractCoords(Tag eventTag);
|
||||
|
||||
protected Result<LocalDateTime> extractEnd(Tag eventTag) {
|
||||
Result<LocalDate> date = extractEndDate(eventTag);
|
||||
Result<LocalTime> time = extractEndTime(eventTag);
|
||||
protected Container<LocalDateTime> extractEnd(Tag eventTag) {
|
||||
Container<LocalDate> date = extractEndDate(eventTag);
|
||||
Container<LocalTime> time = extractEndTime(eventTag);
|
||||
return combine(date,time);
|
||||
}
|
||||
|
||||
protected Result<LocalDate> extractEndDate(Tag eventTag) {
|
||||
Result<Tag> endDateTag = extractEndDateTag(eventTag);
|
||||
protected Container<LocalDate> extractEndDate(Tag eventTag) {
|
||||
Container<Tag> endDateTag = extractEndDateTag(eventTag);
|
||||
var opt = endDateTag.optional();
|
||||
if (opt.isEmpty()) return transform(endDateTag);
|
||||
return parseEndDate(opt.get().strip());
|
||||
}
|
||||
|
||||
protected Result<Tag> extractEndDateTag(Tag eventTag) {
|
||||
protected Container<Tag> extractEndDateTag(Tag eventTag) {
|
||||
var list = eventTag.find(extractEndDateFilter());
|
||||
if (list.isEmpty()) return error("Failed to find end date tag");
|
||||
return Payload.of(list.getFirst());
|
||||
@@ -95,14 +100,14 @@ public abstract class BaseImporter implements Importer {
|
||||
|
||||
protected abstract Predicate<Tag> extractEndDateFilter();
|
||||
|
||||
protected Result<LocalTime> extractEndTime(Tag eventTag) {
|
||||
Result<Tag> endTimeTag = extractEndTimeTag(eventTag);
|
||||
protected Container<LocalTime> extractEndTime(Tag eventTag) {
|
||||
Container<Tag> endTimeTag = extractEndTimeTag(eventTag);
|
||||
var opt = endTimeTag.optional();
|
||||
if (opt.isEmpty()) return transform(endTimeTag);
|
||||
return parseEndTime(opt.get().strip());
|
||||
}
|
||||
|
||||
protected Result<Tag> extractEndTimeTag(Tag eventTag) {
|
||||
protected Container<Tag> extractEndTimeTag(Tag eventTag) {
|
||||
var list = eventTag.find(extractEndTimeFilter());
|
||||
if (list.isEmpty()) return error("Failed to find end time tag");
|
||||
return Payload.of(list.getFirst());
|
||||
@@ -111,7 +116,7 @@ public abstract class BaseImporter implements Importer {
|
||||
protected abstract Predicate<Tag> extractEndTimeFilter();
|
||||
|
||||
|
||||
protected Result<Appointment> extractEvent(Result<Tag> domResult, Link eventPage) {
|
||||
protected Container<Appointment> extractEvent(Container<Tag> domResult, Link eventPage) {
|
||||
var opt = domResult.optional();
|
||||
if (opt.isEmpty()) return transform(domResult);
|
||||
var eventTag = opt.get();
|
||||
@@ -159,7 +164,7 @@ public abstract class BaseImporter implements Importer {
|
||||
* @param pageResult
|
||||
* @return
|
||||
*/
|
||||
protected Result<Tag> extractEventTag(Result<Tag> pageResult){
|
||||
protected Container<Tag> extractEventTag(Container<Tag> pageResult){
|
||||
var opt = pageResult.optional();
|
||||
if (opt.isEmpty()) return transform(pageResult);
|
||||
var list = opt.get().find(extractEventTagFilter());
|
||||
@@ -170,7 +175,7 @@ public abstract class BaseImporter implements Importer {
|
||||
protected abstract Predicate<Tag> extractEventTagFilter();
|
||||
|
||||
|
||||
protected abstract Result<List<String>> extractEventUrls(Result<Tag> programPage);
|
||||
protected abstract Container<List<String>> extractEventUrls(Container<Tag> programPage);
|
||||
|
||||
protected List<Link> extractLinks(Tag appointmentTag) {
|
||||
var tag = extractLinksTag(appointmentTag);
|
||||
@@ -190,7 +195,7 @@ public abstract class BaseImporter implements Importer {
|
||||
.toList();
|
||||
}
|
||||
|
||||
protected Result<Tag> extractLinksTag(Tag eventTag) {
|
||||
protected Container<Tag> extractLinksTag(Tag eventTag) {
|
||||
var list = eventTag.find(extractLinksFilter());
|
||||
if (list.isEmpty()) return error("Failed to find links tag");
|
||||
return Payload.of(list.getFirst());
|
||||
@@ -198,13 +203,13 @@ public abstract class BaseImporter implements Importer {
|
||||
|
||||
protected abstract Predicate<Tag> extractLinksFilter();
|
||||
|
||||
protected Result<String> extractLocation(Tag eventTag) {
|
||||
Result<Tag> locationTag = extractLocationTag(eventTag);
|
||||
protected Container<String> extractLocation(Tag eventTag) {
|
||||
Container<Tag> locationTag = extractLocationTag(eventTag);
|
||||
if (locationTag.optional().isEmpty()) return transform(locationTag);
|
||||
return Payload.of(locationTag.optional().get().strip());
|
||||
}
|
||||
|
||||
protected Result<Tag> extractLocationTag(Tag eventTag){
|
||||
protected Container<Tag> extractLocationTag(Tag eventTag){
|
||||
var list = eventTag.find(extractLocationFilter());
|
||||
if (list.isEmpty()) return error("Failed to find location tag");
|
||||
return Payload.of(list.getFirst());
|
||||
@@ -213,20 +218,20 @@ public abstract class BaseImporter implements Importer {
|
||||
protected abstract Predicate<Tag> extractLocationFilter();
|
||||
|
||||
|
||||
protected Result<LocalDateTime> extractStart(Tag eventTag) {
|
||||
Result<LocalDate> date = extractStartDate(eventTag);
|
||||
Result<LocalTime> time = extractStartTime(eventTag);
|
||||
protected Container<LocalDateTime> extractStart(Tag eventTag) {
|
||||
Container<LocalDate> date = extractStartDate(eventTag);
|
||||
Container<LocalTime> time = extractStartTime(eventTag);
|
||||
return combine(date,time);
|
||||
}
|
||||
|
||||
protected Result<LocalDate> extractStartDate(Tag eventTag) {
|
||||
Result<Tag> startDateTag = extractStartDateTag(eventTag);
|
||||
protected Container<LocalDate> extractStartDate(Tag eventTag) {
|
||||
Container<Tag> startDateTag = extractStartDateTag(eventTag);
|
||||
var opt = startDateTag.optional();
|
||||
if (opt.isEmpty()) return transform(startDateTag);
|
||||
return parseStartDate(opt.get().strip());
|
||||
}
|
||||
|
||||
protected Result<Tag> extractStartDateTag(Tag eventTag) {
|
||||
protected Container<Tag> extractStartDateTag(Tag eventTag) {
|
||||
var list = eventTag.find(extractStartDateFilter());
|
||||
if (list.isEmpty()) return error("Failed to find start date tag");
|
||||
return Payload.of(list.getFirst());
|
||||
@@ -234,14 +239,14 @@ public abstract class BaseImporter implements Importer {
|
||||
|
||||
protected abstract Predicate<Tag> extractStartDateFilter();
|
||||
|
||||
protected Result<LocalTime> extractStartTime(Tag eventTag) {
|
||||
Result<Tag> startTimeTag = extractStartTimeTag(eventTag);
|
||||
protected Container<LocalTime> extractStartTime(Tag eventTag) {
|
||||
Container<Tag> startTimeTag = extractStartTimeTag(eventTag);
|
||||
var opt = startTimeTag.optional();
|
||||
if (opt.isEmpty()) return transform(startTimeTag);
|
||||
return parseStartTime(opt.get().strip());
|
||||
}
|
||||
|
||||
protected Result<Tag> extractStartTimeTag(Tag eventTag) {
|
||||
protected Container<Tag> extractStartTimeTag(Tag eventTag) {
|
||||
var list = eventTag.find(extractStartTimeFilter());
|
||||
if (list.isEmpty()) return error("Failed to find start time tag");
|
||||
return Payload.of(list.getFirst());
|
||||
@@ -252,14 +257,14 @@ public abstract class BaseImporter implements Importer {
|
||||
|
||||
protected abstract List<String> extractTags(Tag eventTag);
|
||||
|
||||
protected Result<String> extractTitle(Tag eventTag) {
|
||||
Result<Tag> titleTag = extractTitleTag(eventTag);
|
||||
protected Container<String> extractTitle(Tag eventTag) {
|
||||
Container<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().trim()) : error("No title found");
|
||||
}
|
||||
|
||||
protected Result<Tag> extractTitleTag(Tag eventTag){
|
||||
protected Container<Tag> extractTitleTag(Tag eventTag){
|
||||
var list = eventTag.find(extractTitleFilter());
|
||||
if (list.isEmpty()) return error("Failed to find title tag");
|
||||
return Payload.of(list.getFirst());
|
||||
@@ -269,8 +274,31 @@ public abstract class BaseImporter implements Importer {
|
||||
|
||||
@Override
|
||||
public Stream<Appointment> fetch() {
|
||||
var url = Payload.of(programURL());
|
||||
Stream<Result<String>> urls = url(url)
|
||||
String url = programURL();
|
||||
LOG.log(DEBUG,"Fetching {0}",url);
|
||||
var _url_str_ = Payload.of(url);
|
||||
var _url_ = url(_url_str_);
|
||||
var _input_stream_ = open(_url_);
|
||||
var _preloaded_stream_ = preload(_input_stream_);
|
||||
var _tag_ = Util.parseXML(_preloaded_stream_);
|
||||
var _url_strings_ = extractEventUrls(_tag_);
|
||||
|
||||
if (!(_url_strings_ instanceof Payload<List<String>> _list_)) return Stream.of();
|
||||
List<String> list = _list_.get();
|
||||
List<Appointment> result = new ArrayList<>();
|
||||
for (var url_string : list){
|
||||
_url_ = url(Payload.of(url_string));
|
||||
var _appointment_ = loadEvent(_url_);
|
||||
if (_appointment_ instanceof Payload<Appointment> _payload_) {
|
||||
result.add(_payload_.get());
|
||||
} else LOG.log(System.Logger.Level.WARNING,_appointment_);
|
||||
}
|
||||
return result.stream();
|
||||
|
||||
/*
|
||||
var url = Payload.of(programURL());
|
||||
|
||||
Stream<Container<String>> urls = url(url)
|
||||
.map(Util::open) //
|
||||
.map(this::preload)
|
||||
.map(Util::parseXML)
|
||||
@@ -280,19 +308,19 @@ public abstract class BaseImporter implements Importer {
|
||||
.map(Util::url)
|
||||
.map(this::loadEvent)
|
||||
.peek(res -> { if (res.optional().isEmpty()) LOG.log(System.Logger.Level.WARNING,res); })
|
||||
.flatMap(result -> result.optional().stream());
|
||||
.flatMap(result -> result.optional().stream());*/
|
||||
}
|
||||
|
||||
protected static <T> Result<T> invalidParameter(Result<?> result) {
|
||||
protected static <T> Container<T> invalidParameter(Container<?> result) {
|
||||
return error("Invalid parameter: %s", result.getClass().getSimpleName());
|
||||
}
|
||||
|
||||
protected static Result<Link> link(Result<URL> url, String text) {
|
||||
protected static Container<Link> link(Container<URL> url, String text) {
|
||||
var opt = url.optional();
|
||||
return opt.isEmpty() ? transform(url) : Payload.of(new Link(opt.get(), text));
|
||||
}
|
||||
|
||||
protected Result<Appointment> loadEvent(Result<URL> urlResult) {
|
||||
protected Container<Appointment> loadEvent(Container<URL> urlResult) {
|
||||
var link = urlResult //
|
||||
.optional()
|
||||
.map(url -> new Link(url, "Event-Seite"))
|
||||
@@ -307,15 +335,15 @@ public abstract class BaseImporter implements Importer {
|
||||
|
||||
|
||||
|
||||
protected abstract Result<LocalDate> parseEndDate(String string);
|
||||
protected abstract Result<LocalTime> parseEndTime(String string);
|
||||
protected abstract Container<LocalDate> parseEndDate(String string);
|
||||
protected abstract Container<LocalTime> parseEndTime(String string);
|
||||
|
||||
protected abstract Result<LocalDate> parseStartDate(String string);
|
||||
protected abstract Result<LocalTime> parseStartTime(String string);
|
||||
protected abstract Container<LocalDate> parseStartDate(String string);
|
||||
protected abstract Container<LocalTime> parseStartTime(String string);
|
||||
|
||||
|
||||
|
||||
protected Result<InputStream> preload(Result<InputStream> inputStream) {
|
||||
protected Container<InputStream> preload(Container<InputStream> inputStream) {
|
||||
return Util.preload(inputStream);
|
||||
}
|
||||
|
||||
|
||||
@@ -5,10 +5,11 @@ import static de.srsoftware.cal.Util.url;
|
||||
|
||||
import de.srsoftware.cal.api.Appointment;
|
||||
import de.srsoftware.cal.api.Link;
|
||||
import de.srsoftware.tools.Payload;
|
||||
import de.srsoftware.tools.Result;
|
||||
import de.srsoftware.tools.container.Payload;
|
||||
import de.srsoftware.tools.container.Container;
|
||||
import de.srsoftware.tools.Tag;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
@@ -20,28 +21,36 @@ public abstract class SinglePageImporter extends BaseImporter{
|
||||
|
||||
@Override
|
||||
public Stream<Appointment> fetch() {
|
||||
var programPage = Payload.of(programURL());
|
||||
var eventLink = programPage //
|
||||
var programPage = Payload.of(programURL());
|
||||
var eventLink = programPage
|
||||
.map(Util::url).optional()
|
||||
.map(url -> new Link(url, "Event-Seite"))
|
||||
.orElse(null);
|
||||
|
||||
Stream<Result<Tag>> eventTags = url(programPage).map(Util::open).map(Util::preload)
|
||||
Container<List<Tag>> eventTags = url(programPage)
|
||||
.map(Util::open)
|
||||
.map(Util::preload)
|
||||
.map(Util::parseXML)
|
||||
.map(this::extractEventTags)
|
||||
.stream();
|
||||
.map(this::extractEventTags);
|
||||
|
||||
return eventTags.map(tagResult -> extractEvent(tagResult, eventLink))
|
||||
.peek(res -> {
|
||||
if (res.optional().isEmpty()) LOG.log(System.Logger.Level.WARNING, res);
|
||||
})
|
||||
.flatMap(res -> res.optional().stream());
|
||||
if (!(eventTags instanceof Payload<List<Tag>> _list_)) return Stream.of();
|
||||
|
||||
var result = new ArrayList<Appointment>();
|
||||
for (var tag : _list_.get()){
|
||||
Container<Appointment> evt = extractEvent(Payload.of(tag), eventLink);
|
||||
if (evt instanceof Payload<Appointment> p) {
|
||||
result.add(p.get());
|
||||
} else LOG.log(System.Logger.Level.WARNING, evt);
|
||||
|
||||
}
|
||||
|
||||
return result.stream();
|
||||
}
|
||||
|
||||
protected abstract Result<List<Tag>> extractEventTags(Result<Tag> tagResult);
|
||||
protected abstract Container<List<Tag>> extractEventTags(Container<Tag> tagResult);
|
||||
|
||||
@Override
|
||||
protected Result<List<String>> extractEventUrls(Result<Tag> programPage) {
|
||||
protected Container<List<String>> extractEventUrls(Container<Tag> programPage) {
|
||||
return null; // not needed by this fetch implementation
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,14 +1,19 @@
|
||||
/* © SRSoftware 2026 */
|
||||
package de.srsoftware.cal;
|
||||
|
||||
import static de.srsoftware.tools.Error.error;
|
||||
import static de.srsoftware.tools.Result.transform;
|
||||
import static de.srsoftware.tools.Tag.STYLE;
|
||||
import static de.srsoftware.tools.container.Container.transform;
|
||||
import static de.srsoftware.tools.container.Error.error;
|
||||
|
||||
import static java.lang.System.Logger.Level.DEBUG;
|
||||
import static java.lang.System.Logger.Level.WARNING;
|
||||
|
||||
import de.srsoftware.cal.api.Attachment;
|
||||
import de.srsoftware.cal.api.Coords;
|
||||
import de.srsoftware.tools.*;
|
||||
import de.srsoftware.tools.container.Container;
|
||||
import de.srsoftware.tools.container.Payload;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.HttpURLConnection;
|
||||
@@ -51,7 +56,7 @@ public class Util {
|
||||
private Util(){}
|
||||
|
||||
|
||||
public static Result<LocalDateTime> combine(Result<LocalDate> date, Result<LocalTime> time) {
|
||||
public static Container<LocalDateTime> combine(Container<LocalDate> date, Container<LocalTime> time) {
|
||||
if (date.optional().isEmpty())return transform(date);
|
||||
if (time.optional().isEmpty())return transform(time);
|
||||
return Payload.of(LocalDateTime.of(date.optional().get(),time.optional().get()));
|
||||
@@ -88,7 +93,7 @@ public class Util {
|
||||
}
|
||||
}
|
||||
|
||||
public static Result<Coords> extractCoords(String coords) {
|
||||
public static Container<Coords> extractCoords(String coords) {
|
||||
if (coords == null) return error("Argument is null");
|
||||
if (coords.isBlank()) return error("Argument is blank");
|
||||
var parts = coords.split(",");
|
||||
@@ -102,7 +107,7 @@ public class Util {
|
||||
}
|
||||
}
|
||||
|
||||
public static Result<InputStream> open(Result<URL> url) {
|
||||
public static Container<InputStream> open(Container<URL> url) {
|
||||
var opt = url.optional();
|
||||
if (opt.isEmpty()) return transform(url);
|
||||
try {
|
||||
@@ -125,7 +130,7 @@ public class Util {
|
||||
.replace(":","/");
|
||||
}
|
||||
|
||||
public static Result<LocalDate> parseGermanDate(String s){
|
||||
public static Container<LocalDate> parseGermanDate(String s){
|
||||
var match = GERMAN_DATE_PATTERN.matcher(" "+s.trim()+" ");
|
||||
if (match.find()){
|
||||
var day = Integer.parseInt(match.group(1));
|
||||
@@ -136,7 +141,7 @@ public class Util {
|
||||
return error("Failed to find date");
|
||||
}
|
||||
|
||||
public static Result<LocalDate> parseLongGermanDate(String s){
|
||||
public static Container<LocalDate> parseLongGermanDate(String s){
|
||||
var match = GERMAN_DATE_PATTERN_LONG.matcher(" "+s+" ");
|
||||
if (match.find()){
|
||||
var day = Integer.parseInt(match.group(1));
|
||||
@@ -149,7 +154,7 @@ public class Util {
|
||||
return error("Failed to find date");
|
||||
}
|
||||
|
||||
public static Result<LocalTime> parseGermanTime(String s){
|
||||
public static Container<LocalTime> parseGermanTime(String s){
|
||||
var match = GERMAN_TIME_PATTERN.matcher(" "+s.trim()+" ");
|
||||
if (match.find()){
|
||||
var hour = Integer.parseInt(match.group(1));
|
||||
@@ -161,12 +166,12 @@ public class Util {
|
||||
return error("Failed to find time");
|
||||
}
|
||||
|
||||
public static Result<Tag> parseXML(Result<InputStream> inputStream) {
|
||||
public static Container<Tag> parseXML(Container<InputStream> inputStream) {
|
||||
var opt = inputStream.optional();
|
||||
return opt.isEmpty() ? transform((inputStream)) : XMLParser.parse(opt.get());
|
||||
}
|
||||
|
||||
public static Result<InputStream> preload(Result<InputStream> inputStream) {
|
||||
public static Container<InputStream> preload(Container<InputStream> inputStream) {
|
||||
var opt = inputStream.optional();
|
||||
if (opt.isEmpty()) return transform(inputStream);
|
||||
try {
|
||||
@@ -176,7 +181,7 @@ public class Util {
|
||||
}
|
||||
}
|
||||
|
||||
public static Result<Integer> toNumericMonth(String month) {
|
||||
public static Container<Integer> toNumericMonth(String month) {
|
||||
month = month.toLowerCase();
|
||||
if (month.startsWith("ja")) return Payload.of(1);
|
||||
if (month.startsWith("f")) return Payload.of(2);
|
||||
@@ -199,7 +204,7 @@ public class Util {
|
||||
* @param prodId the producer id of this icalendar
|
||||
* @return the completed ical string
|
||||
*/
|
||||
public static Result<String> wrapIcal(Result<String> ical, String prodId) {
|
||||
public static Container<String> wrapIcal(Container<String> ical, String prodId) {
|
||||
if (ical instanceof Payload<String> payload){
|
||||
var calendar = new StringBuilder();
|
||||
calendar.append(contentLine(BEGIN,VCALENDAR));
|
||||
@@ -212,7 +217,7 @@ public class Util {
|
||||
return ical;
|
||||
}
|
||||
|
||||
public static Result<String> extractBackgroundImage(Tag tag, String baseUrl) {
|
||||
public static Container<String> extractBackgroundImage(Tag tag, String baseUrl) {
|
||||
var style = tag.get(STYLE);
|
||||
if (style != null){
|
||||
var matcher = BG_IMAGE_URL.matcher(style);
|
||||
@@ -224,7 +229,7 @@ public class Util {
|
||||
return error("Failed to findbackground image url in %s",tag);
|
||||
}
|
||||
|
||||
public static Result<Attachment> toAttachment(Result<URL> urlResult) {
|
||||
public static Container<Attachment> toAttachment(Container<URL> urlResult) {
|
||||
var opt = urlResult.optional();
|
||||
if (opt.isEmpty()) return transform(urlResult);
|
||||
try {
|
||||
@@ -236,7 +241,7 @@ public class Util {
|
||||
}
|
||||
}
|
||||
|
||||
public static Result<Integer> parseInt(String s){
|
||||
public static Container<Integer> parseInt(String s){
|
||||
try {
|
||||
return Payload.of(Integer.parseInt(s));
|
||||
} catch (NumberFormatException e){
|
||||
@@ -244,7 +249,7 @@ public class Util {
|
||||
}
|
||||
}
|
||||
|
||||
public static Result<URL> url(Result<String> urlResult) {
|
||||
public static Container<URL> url(Container<String> urlResult) {
|
||||
if (urlResult.optional().isEmpty()) return transform(urlResult);
|
||||
var url = urlResult.optional().get();
|
||||
try {
|
||||
@@ -254,7 +259,7 @@ public class Util {
|
||||
}
|
||||
}
|
||||
|
||||
public static Result<LocalDate> parseGermanDateWithoutYear(String string) {
|
||||
public static Container<LocalDate> parseGermanDateWithoutYear(String string) {
|
||||
var matcher = GERMAN_DATE_WITHOUT_YEAR.matcher(string);
|
||||
if (matcher.find()){
|
||||
int day = Integer.parseInt(matcher.group(1));
|
||||
|
||||
Reference in New Issue
Block a user