@ -3,18 +3,14 @@ package de.srsoftware.cal;
@@ -3,18 +3,14 @@ package de.srsoftware.cal;
import static de.srsoftware.cal.Util.* ;
import static de.srsoftware.tools.Error.error ;
import static de.srsoftware.tools.Optionals.nullIfEmpty ;
import static de.srsoftware.tools.Result.transform ;
import static de.srsoftware.tools.Tag.HREF ;
import static de.srsoftware.tools.TagFilter.* ;
import de.srsoftware.cal.api.* ;
import de.srsoftware.tools.* ;
import java.io.IOException ;
import java.io.InputStream ;
import java.net.* ;
import java.nio.file.Files ;
import java.nio.file.Path ;
import java.security.MessageDigest ;
import java.security.NoSuchAlgorithmException ;
import java.time.LocalDate ;
@ -281,9 +277,9 @@ public abstract class BaseImporter implements Importer {
@@ -281,9 +277,9 @@ public abstract class BaseImporter implements Importer {
public Stream < Appointment > fetch ( ) {
var url = Payload . of ( programURL ( ) ) ;
Stream < Result < String > > urls = url ( url )
. map ( this : : open ) //
. map ( this : : preload )
. map ( this : : parseXML )
. map ( Util : : open ) //
. map ( Util : : preload )
. map ( Util : : parseXML )
. map ( this : : extractEventUrls )
. stream ( ) ;
return urls //
@ -308,27 +304,14 @@ public abstract class BaseImporter implements Importer {
@@ -308,27 +304,14 @@ public abstract class BaseImporter implements Importer {
. map ( url - > new Link ( url , "Event-Seite" ) )
. orElse ( null ) ;
return urlResult //
. map ( this : : open )
. map ( this : : preload )
. map ( this : : parseXML )
. map ( Util : : open )
. map ( Util : : preload )
. map ( Util : : parseXML )
. map ( this : : extractEventTag )
. map ( tagResult - > extractEvent ( tagResult , link ) ) ;
}
protected Result < InputStream > open ( Result < URL > url ) {
var opt = url . optional ( ) ;
if ( opt . isEmpty ( ) ) return transform ( url ) ;
try {
var conn = ( HttpURLConnection ) opt . get ( ) . openConnection ( ) ;
conn . setRequestProperty ( "Accept" , "*/*" ) ;
conn . setRequestProperty ( "Host" , opt . get ( ) . getHost ( ) ) ;
conn . setRequestProperty ( "User-Agent" , "OpenCloudCal/0.1" ) ;
return Payload . of ( conn . getInputStream ( ) ) ;
} catch ( IOException e ) {
return error ( e , "Failed to open %s" , url , e ) ;
}
}
protected abstract Result < LocalDate > parseEndDate ( String string ) ;
protected abstract Result < LocalTime > parseEndTime ( String string ) ;
@ -336,19 +319,10 @@ public abstract class BaseImporter implements Importer {
@@ -336,19 +319,10 @@ public abstract class BaseImporter implements Importer {
protected abstract Result < LocalDate > parseStartDate ( String string ) ;
protected abstract Result < LocalTime > parseStartTime ( String string ) ;
protected Result < Tag > parseXML ( Result < InputStream > inputStream ) {
var opt = inputStream . optional ( ) ;
return opt . isEmpty ( ) ? transform ( ( inputStream ) ) : XMLParser . parse ( opt . get ( ) ) ;
}
protected Result < InputStream > preload ( Result < InputStream > inputStream ) {
var opt = inputStream . optional ( ) ;
if ( opt . isEmpty ( ) ) return transform ( inputStream ) ;
try {
return Payload . of ( XMLParser . preload ( opt . get ( ) ) ) ;
} catch ( IOException e ) {
return error ( e , "Failed to buffer data from %s" , inputStream ) ;
}
return Util . preload ( inputStream ) ;
}
protected abstract String programURL ( ) ;