X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=crawler%2Fkiss%2Fsrc%2Forg%2Fwamblee%2Fcrawler%2Fkiss%2FKissCrawler.java;h=8fbd232dcba2c685a4c981e75416b87d8512a3bf;hb=45954ad938187b0c16d18c763ccfd43a349cb862;hp=e8687d9d09a5d01f15090592bce528bae1091c65;hpb=029dffde0657e9ac9e28d5306e5ebba12a8e0a7c;p=utils diff --git a/crawler/kiss/src/org/wamblee/crawler/kiss/KissCrawler.java b/crawler/kiss/src/org/wamblee/crawler/kiss/KissCrawler.java index e8687d9d..8fbd232d 100644 --- a/crawler/kiss/src/org/wamblee/crawler/kiss/KissCrawler.java +++ b/crawler/kiss/src/org/wamblee/crawler/kiss/KissCrawler.java @@ -28,6 +28,8 @@ import java.util.Date; import java.util.EnumMap; import java.util.List; import java.util.Properties; +import java.util.Set; +import java.util.TreeSet; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -41,7 +43,6 @@ import javax.mail.internet.MimeMessage; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.wamblee.conditions.Condition; import org.wamblee.crawler.Action; import org.wamblee.crawler.Configuration; import org.wamblee.crawler.Crawler; @@ -139,9 +140,9 @@ public class KissCrawler { InputStream programConfigFile = new FileInputStream(new File( aProgramConfig)); - Condition programCondition = new ProgramConfigurationParser() + List programFilters = new ProgramConfigurationParser() .parse(programConfigFile); - recordInterestingShows(programCondition, guide); + recordInterestingShows(programFilters, guide); } finally { os.flush(); os.close(); @@ -159,44 +160,81 @@ public class KissCrawler { * @throws MessagingException * In case of problems sending a summary mail. */ - private void recordInterestingShows(Condition aProgramCondition, + private void recordInterestingShows(List aProgramCondition, TVGuide aGuide) throws MessagingException { - MatchVisitor matcher = new MatchVisitor(aProgramCondition); - aGuide.accept(matcher); - List programs = matcher.getMatches(); - EnumMap> messages = new EnumMap>( - RecordingResult.class); - for (RecordingResult result: RecordingResult.values()) { - messages.put(result, new ArrayList()); - } - for (Program program : programs) { - try { - Program.RecordingResult result = program.record(); - messages.get(result).add(program); - } catch (PageException e) { - LOG.info("Attempt to record " + program + " failed."); - messages.get(RecordingResult.ERROR).add(program); + + Set showsToRecord = new TreeSet(new Program.TimeSorter()); + Set interestingShows = new TreeSet(new Program.TimeSorter()); + + for (ProgramFilter filter : aProgramCondition) { + List programs = filter.apply(aGuide); + switch (filter.getAction()) { + case RECORD: { + for (Program program: programs) { + showsToRecord.add(program); + } + break; + } + case NOTIFY: { + for (Program program: programs) { + if ( program.isRecordingPossible()) { + interestingShows.add(program); + } + } + break; + } + default: { + throw new RuntimeException("Unknown action '" + filter.getAction() + "'"); + } } } - String msg = "Summary of KiSS crawler: \n\n\n"; + + EnumMap> messages = recordShows(showsToRecord); - - for (RecordingResult result: RecordingResult.values()) { - if ( messages.get(result).size() > 0 ) { - msg += result.getDescription() + "\n\n"; - for (Program program: messages.get(result)) { - msg += program + "\n"; + String msg = "Summary of KiSS crawler: \n\n\n"; + + for (RecordingResult result : RecordingResult.values()) { + if (messages.get(result).size() > 0) { + msg += result.getDescription() + "\n\n"; + for (Program program : messages.get(result)) { + msg += program + "\n\n"; } } } - if ( programs.size() == 0 ) { - msg += "No suitable programs found"; - } + if ( interestingShows.size() > 0 ) { + msg += "Possibly interesting shows:\n\n"; + for (Program program: interestingShows) { + msg += program + "\n\n"; + } + } + if (showsToRecord.size() + interestingShows.size() == 0) { + msg += "No suitable programs found"; + } + System.out.println(msg); sendMail(msg); } + /** + * Records shows. + * @param showsToRecord Shows to record. + * @return Recording results. + */ + private EnumMap> recordShows(Set showsToRecord) { + EnumMap> messages = new EnumMap>( + RecordingResult.class); + for (RecordingResult result : RecordingResult.values()) { + messages.put(result, new ArrayList()); + } + + for (Program program : showsToRecord) { + Program.RecordingResult result = program.record(); + messages.get(result).add(program); + } + return messages; + } + /** * Creates the crawler. * @@ -257,8 +295,8 @@ public class KissCrawler { Channel channel = createChannel(action.getName(), action .execute().getAction("right-now").execute()); channels.add(channel); - if ( SystemProperties.isDebugMode() ) { - break; // Only one channel is crawled. + if (SystemProperties.isDebugMode()) { + break; // Only one channel is crawled. } } catch (PageException e) { LOG.error("Could not create channel information for '"