+ /**
+ * Records interesting shows.
+ *
+ * @param aProgramCondition
+ * Condition determining which shows are interesting.
+ * @param aGuide
+ * Television guide.
+ * @throws MessagingException
+ * In case of problems sending a summary mail.
+ */
+ private void recordInterestingShows(List<ProgramFilter> aProgramCondition,
+ TVGuide aGuide) throws MessagingException {
+
+ 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\n";
+ }
+ }
+ }
+
+ 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);