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;
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;
// client.getHostConfiguration().setProxy("127.0.0.1", 3128);
Crawler crawler = createCrawler(aCrawlerConfig, os, client);
+ InputStream programConfigFile = new FileInputStream(new File(
+ aProgramConfig));
+ List<ProgramFilter> programFilters = new ProgramConfigurationParser()
+ .parse(programConfigFile);
Page page = getStartPage(aStartUrl, crawler);
TVGuide guide = createGuide(page);
PrintVisitor printer = new PrintVisitor(System.out);
guide.accept(printer);
- InputStream programConfigFile = new FileInputStream(new File(
- aProgramConfig));
- Condition<Program> programCondition = new ProgramConfigurationParser()
- .parse(programConfigFile);
- recordInterestingShows(programCondition, guide);
+
+ recordInterestingShows(programFilters, guide);
} finally {
os.flush();
os.close();
* @throws MessagingException
* In case of problems sending a summary mail.
*/
- private void recordInterestingShows(Condition<Program> aProgramCondition,
+ private void recordInterestingShows(List<ProgramFilter> aProgramCondition,
TVGuide aGuide) throws MessagingException {
- MatchVisitor matcher = new MatchVisitor(aProgramCondition);
- aGuide.accept(matcher);
- List<Program> programs = matcher.getMatches();
- EnumMap<RecordingResult, List<Program>> messages = new EnumMap<RecordingResult, List<Program>>(
- RecordingResult.class);
- for (RecordingResult result : RecordingResult.values()) {
- messages.put(result, new ArrayList<Program>());
- }
- for (Program program : programs) {
- Program.RecordingResult result = program.record();
- messages.get(result).add(program);
+
+ Set<Program> showsToRecord = new TreeSet<Program>(new Program.TimeSorter());
+ Set<Program> interestingShows = new TreeSet<Program>(new Program.TimeSorter());
+
+ for (ProgramFilter filter : aProgramCondition) {
+ List<Program> 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() + "'");
+ }
+ }
}
+
+ EnumMap<RecordingResult, List<Program>> messages = recordShows(showsToRecord);
+
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";
+ msg += program + "\n\n";
}
}
}
- if (programs.size() == 0) {
+
+ 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";
}
sendMail(msg);
}
+ /**
+ * Records shows.
+ * @param showsToRecord Shows to record.
+ * @return Recording results.
+ */
+ private EnumMap<RecordingResult, List<Program>> recordShows(Set<Program> showsToRecord) {
+ EnumMap<RecordingResult, List<Program>> messages = new EnumMap<RecordingResult, List<Program>>(
+ RecordingResult.class);
+ for (RecordingResult result : RecordingResult.values()) {
+ messages.put(result, new ArrayList<Program>());
+ }
+
+ for (Program program : showsToRecord) {
+ Program.RecordingResult result = program.record();
+ messages.get(result).add(program);
+ }
+ return messages;
+ }
+
/**
* Creates the crawler.
*