This is in reply to the Tracker issue. Attached in the diff against todays
SVN (revision 8922).

Corrected the evil tab problems and implemented the only new episodes
logic.

Duplicate Detection can be enabled in the local_conf with:
DUPLICATE_DETECTION = True

New Episode Detection can be enabled in the local_config with:
ONLY_NEW_DETECTION = True

Your locel epg needs to implement the original air date in your xmltv
file. You can tell if you scan through your TV.xml file and look for lines
like the following:
<title lang="en">Gymnastics</title>
<sub-title lang="en">World Championships</sub-title>
<date>20061126</date>

The bottom line is the one used in the logic. Make sure the date isn't
automatically filled in with the date the xmltv file was downloaded; some
epg's do that.
Index: local_conf.py.example
===================================================================
--- local_conf.py.example	(revision 8922)
+++ local_conf.py.example	(working copy)
@@ -1028,6 +1028,12 @@
 # XXX the path doesn't work from the www cgi scripts!
 # TV_RECORD_DIR = None
 
+# This will enable duplicate recording detection
+# DUPLICATE_DETECTION = True
+
+# This will enable only new episodes to be recorded
+# ONLY_NEW_DETECTION = True
+
 #
 # Watching TV
 #
Index: src/www/htdocs/edit_favorite.rpy
===================================================================
--- src/www/htdocs/edit_favorite.rpy	(revision 8922)
+++ src/www/htdocs/edit_favorite.rpy	(working copy)
@@ -33,6 +33,7 @@
 from tv.record_types import Favorite
 import tv.epg_xmltv
 import tv.record_client as ri
+import config
 
 from www.web_types import HTMLResource, FreevoResource
 
@@ -89,7 +90,7 @@
 
             priority = num_favorites + 1
 
-            fav = Favorite(prog.title, prog, TRUE, TRUE, TRUE, priority)
+            fav = Favorite(prog.title, prog, TRUE, TRUE, TRUE, priority, FALSE)
         elif action == 'edit' and name:
             (result, fav) = ri.getFavorite(name)
         else:
@@ -128,6 +129,10 @@
         fv.tableCell(_('Channel'), 'class="guidehead" colspan="1"')
         fv.tableCell(_('Day of week'), 'class="guidehead" colspan="1"')
         fv.tableCell(_('Time of day'), 'class="guidehead" colspan="1"')
+        if config.DUPLICATE_DETECTION:
+      	    fv.tableCell(_('Duplicates'), 'class="guidehead" colspan="1"')
+        if config.ONLY_NEW_DETECTION:
+           fv.tableCell(_('Episodes'), 'class="guidehead" colspan="1"')
         fv.tableCell(_('Action'), 'class="guidehead" colspan="1"')
         fv.tableRowClose()
 
@@ -223,6 +228,28 @@
         """
         fv.tableCell(cell, 'class="'+status+'" colspan="1"')
 
+        if config.DUPLICATE_DETECTION:
+           if hasattr(fav, 'allowDuplicates'):
+              cell = '\n<select name="allowDuplicates" selected="%s">\n' % \
+              fav.allowDuplicates
+           else:
+              cell = '\n<select name="allowDuplicates">\n'
+           cell += '          <option value="1">'+_('ALLOW')+'</option>\n'
+           cell += '          <option value="0">'+_('PREVENT')+'</option>\n'
+           cell += '</select>\n'
+	   fv.tableCell(cell, 'class="'+status+'" colspan="1"')
+
+        if config.ONLY_NEW_DETECTION:
+           if hasattr(fav, 'onlyNew'):
+              cell = '\n<select name="onlyNew" selected="%s">\n' % fav.onlyNew
+           else:
+              cell = '\n<select name="onlyNew">\n'
+           cell += '          <option value="0">'+_('ALL')+'</option>\n'
+           cell += '          <option value="1">'+_('ONLY NEW')+'</option>\n'
+           cell += '</select>\n'
+           fv.tableCell(cell, 'class="'+status+'" colspan="1"')
+
+
         # cell = '\n<select name="priority" selected="%s">\n' % fav.priority
         # for i in range(num_favorites+1):
         #     cell += '  <option value="%s">%s</option>\n' % (i+1, i+1)
Index: src/www/htdocs/favorites.rpy
===================================================================
--- src/www/htdocs/favorites.rpy	(revision 8922)
+++ src/www/htdocs/favorites.rpy	(working copy)
@@ -30,6 +30,7 @@
 
 import sys, time, string
 import urllib
+import config
 
 import tv.record_client as ri
 import util.tv_util as tv_util
@@ -64,15 +65,20 @@
         dow = fv.formValue(form, 'dow')
         mod = fv.formValue(form, 'mod')
         priority = fv.formValue(form, 'priority')
+        allowDuplicates = 1
+        onlyNew = 0
+        if config.DUPLICATE_DETECTION:
+           allowDuplicates = fv.formValue(form, 'allowDuplicates')
+        if config.ONLY_NEW_DETECTION:
+           onlyNew = fv.formValue(form, 'onlyNew')
 
-
         if action == 'remove':
             ri.removeFavorite(name)
         elif action == 'add':
-            ri.addEditedFavorite(name, title, chan, dow, mod, priority)
+            ri.addEditedFavorite(name, title, chan, dow, mod, priority, allowDuplicates, onlyNew)
         elif action == 'edit':
             ri.removeFavorite(oldname)
-            ri.addEditedFavorite(name, title, chan, dow, mod, priority)
+            ri.addEditedFavorite(name, title, chan, dow, mod, priority, allowDuplicates, onlyNew)
         elif action == 'bump':
             ri.adjustPriority(name, priority)
         else:
@@ -100,6 +106,10 @@
         fv.tableCell(_('Channel'), 'class="guidehead" colspan="1"')
         fv.tableCell(_('Day of week'), 'class="guidehead" colspan="1"')
         fv.tableCell(_('Time of day'), 'class="guidehead" colspan="1"')
+        if config.DUPLICATE_DETECTION:
+           fv.tableCell(_('Duplicates'), 'class="guidehead" colspan="1"')
+        if config.ONLY_NEW_DETECTION:
+           fv.tableCell(_('Episodes'), 'class="guidehead" colspan="1"')
         fv.tableCell(_('Actions'), 'class="guidehead" colspan="1"')
         fv.tableCell(_('Priority'), 'class="guidehead" colspan="1"')
         fv.tableRowClose()
@@ -131,6 +141,26 @@
                 cell = _('ANY')
             fv.tableCell(cell, 'class="'+status+'" colspan="1"')
 
+            if config.DUPLICATE_DETECTION:
+               (tempStatus, tempFav) = ri.getFavorite(fav.title)
+               if hasattr(tempFav,'allowDuplicates') and int(tempFav.allowDuplicates) == 1:
+                  cell = 'ALLOW'
+               elif hasattr(tempFav,'allowDuplicates') and int(tempFav.allowDuplicates) == 0:
+                  cell = 'PREVENT'
+               else:
+                  cell = 'NONE'
+               fv.tableCell(cell, 'class="'+status+'" colspan="1"')
+
+            if config.ONLY_NEW_DETECTION:
+               (tempStatus, tempFav) = ri.getFavorite(fav.title)
+               if hasattr(tempFav,'onlyNew') and int(tempFav.onlyNew) == 1:
+                  cell = 'ONLY NEW'
+               elif hasattr(tempFav,'onlyNew') and int(tempFav.onlyNew) == 0:
+                  cell = 'ALL'
+               else:
+                  cell = 'NONE'
+               fv.tableCell(cell, 'class="'+status+'" colspan="1"')
+
             fname_esc = urllib.quote(String(fav.name.replace('&','%26')))
             # cell = '<input type="hidden" name="action" value="%s">' % action
             cell = ('<a href="edit_favorite.rpy?action=edit&name=%s">'+_('Edit')+'</a>, ') % fname_esc
Index: src/helpers/recordserver.py
===================================================================
--- src/helpers/recordserver.py	(revision 8922)
+++ src/helpers/recordserver.py	(working copy)
@@ -27,7 +27,7 @@
 # -----------------------------------------------------------------------
 
 
-import sys, string, random, time, os, re, pwd, stat, threading
+import sys, string, random, time, os, re, pwd, stat, threading, pickle, md5, datetime
 import config
 from util import vfs
 
@@ -111,6 +111,7 @@
         # XXX: In the future we should have one lock per VideoGroup.
         self.tv_lock_file = None
         self.vg = None
+        self.previouslyRecordedShows = None
 
 
     def isRecording(self):
@@ -270,7 +271,141 @@
 
         return TRUE
 
- 
+    #
+    # Load the saved set of recorded shows
+    #
+    def loadPreviouslyRecordedShows(self):
+        if self.previouslyRecordedShows:
+            return
+
+        cacheFile = config.FREEVO_CACHEDIR + "/previouslyRecorded.pickle"
+        try:
+            self.previouslyRecordedShows = pickle.load(open(cacheFile, "r"))
+        except IOError:
+            self.previouslyRecordedShows = {}
+            pass
+
+    #
+    # Save the set of recorded shows
+    #
+    def savePreviouslyRecordedShows(self):
+        if not self.previouslyRecordedShows:
+            return
+
+        cacheFile=config.FREEVO_CACHEDIR+"/previouslyRecorded.pickle"
+        pickle.dump(self.previouslyRecordedShows, open(cacheFile,"w"))
+
+    #
+    # Return true if this is a new episode of 'prog'
+    #
+    def newEpisode(self, prog=None):
+        todayStr = datetime.date.today().strftime('%Y%m%d')
+        progStr = str(prog.date)
+        _debug_('Program Date: "%s"' % progStr)
+        _debug_('Todays Date : "%s"' % todayStr)
+        if (len(progStr)==8):
+           _debug_('Good date format')
+           #Year
+           todaysYear=(todayStr[0:4])
+           progYear=(progStr[0:4])
+           #Month
+           todaysMonth=(todayStr[4:2])
+           progMonth=(progStr[4:2])
+           #Day
+           todaysDay=(todayStr[6:2])
+           progDay=(progStr[6:2])
+           if todaysYear > progYear:
+              #program from a previous year
+              return FALSE
+           elif progYear > todaysYear:
+              #program in the future
+              return TRUE
+           else:
+              _debug_('Same year')
+              #program in the same year
+              if todaysMonth > progMonth:
+                 #program in a previous month
+                 return FALSE
+              elif progMonth > todaysMonth:
+                 #program in the future
+                 return TRUE
+              else:
+                 _debug_('Same month')
+                 #program in the same month
+                 if todaysDay > progDay:
+                    #program was previous aired this month
+                    return FALSE
+                 else:
+                    _debug_('Same day or in the upcoming month')
+                    #program is today or in the upcoming days
+                    return TRUE
+        else:
+           _debug_('No good date format, assuming new Episode to be on the safe side')
+           return TRUE
+
+    #
+    # Shrink a string by removing all spaces and making it
+    # lower case and then returning the MD5 digest of it.
+    #
+    def shrink(self, text):
+       if text:
+           text = md5.new(text.lower().replace(' ', '')).hexdigest()
+       else:
+           text = ''
+
+       return text
+
+    #
+    # Return the key to be used for a given prog in the
+    # previouslyRecordedShows hashtable.
+    #
+    def getPreviousRecordingKey(self, prog):
+        shrunkTitle = self.shrink(prog.title)
+        shrunkSub   = self.shrink(prog.sub_title)
+        shrunkDesc  = self.shrink(prog.desc);
+        return ('%s-%s-%s' % (shrunkTitle, shrunkSub, shrunkDesc), \
+                '%s-%s-'   % (shrunkTitle, shrunkSub),              \
+                '%s--%s'   % (shrunkTitle, shrunkDesc))
+
+    #
+    # Get a previous recording, or None if none.
+    #
+    def getPreviousRecording(self, prog):
+        try:
+            return self.previouslyRecordedShows[self.getPreviousRecordingKey(prog)]
+        except KeyError:
+            return None
+
+    #
+    # Remove a duplicate recording
+    #
+    def removeDuplicate(self, prog=None):
+        self.loadPreviouslyRecordedShows()
+        previous = self.getPreviousRecording(prog)
+        if previous:
+           _debug_('Found duplicate, removing')
+           del self.previouslyRecordedShows[self.getPreviousRecordingKey(previous)]
+           self.savePreviouslyRecordedShows()
+
+    #
+    # Identify if the given programme is a duplicate. If not,
+    # record it as previously recorded.
+    #
+    def duplicate(self, prog=None):
+        self.loadPreviouslyRecordedShows()
+        previous = self.getPreviousRecording(prog)
+        if previous:
+            _debug_('Found duplicate for "%s", "%s", "%s", not adding' % \
+            (prog.title, prog.sub_title, prog.desc))
+            return TRUE
+        _debug_('No previous recordings for "%s", "%s", "%s", adding to hash and saving' % \
+        (prog.title, prog.sub_title, prog.desc))
+        self.previouslyRecordedShows[self.getPreviousRecordingKey(prog)] = prog
+        for key in self.getPreviousRecordingKey(prog):
+            self.previouslyRecordedShows[key] = prog.start
+        self.savePreviouslyRecordedShows()
+        return FALSE
+
     def scheduleRecording(self, prog=None):
         global guide
 
@@ -288,9 +423,44 @@
                 _debug_('scheduleRecording: "%s"' % (prog))
                 prog.tunerid = chan.tunerid
     
-        scheduledRecordings = self.getScheduledRecordings()
-        scheduledRecordings.addProgram(prog, tv_util.getKey(prog))
-        self.saveScheduledRecordings(scheduledRecordings)
+        if config.DUPLICATE_DETECTION and not self.doesFavoriteAllowDuplicates(prog):
+           _debug_('Duplicate Detection enabled 1')
+           if not self.duplicate(prog):
+              if config.ONLY_NEW_DETECTION and self.doesFavoriteRecordOnlyNewEpisodes(prog):
+                 _debug_('OnlyNew Episode Detection enabled 1')
+                 if self.newEpisode(prog):
+                    _debug_('New Episode')	
+                    scheduledRecordings = self.getScheduledRecordings()
+                    scheduledRecordings.addProgram(prog, tv_util.getKey(prog))
+                    self.saveScheduledRecordings(scheduledRecordings)
+                 else:
+                    _debug_('Old Episode')
+              else:
+                 _debug_('OnlyNew Episode Detection disabled or Favorite allows all Episodes 1')
+                 scheduledRecordings = self.getScheduledRecordings()
+                 scheduledRecordings.addProgram(prog, tv_util.getKey(prog))
+                 self.saveScheduledRecordings(scheduledRecordings)
+                 _debug_('Added Episode')
+           else:
+              return (FALSE, 'duplicate recording')
+        else:
+           _debug_('Duplicate Detection is disabled or Favorite allows duplicates 2')
+           if config.ONLY_NEW_DETECTION and self.doesFavoriteRecordOnlyNewEpisodes(prog):
+              _debug_('OnlyNew Detection enabled 2')
+              if self.newEpisode(prog):
+                 _debug_('New Episode')	
+                 scheduledRecordings = self.getScheduledRecordings()
+                 scheduledRecordings.addProgram(prog, tv_util.getKey(prog))
+                 self.saveScheduledRecordings(scheduledRecordings)
+              else:
+                 _debug_('Old Episode')
+			
+           else:
+              _debug_('OnlyNew Episode Detection disabled 2')
+              scheduledRecordings = self.getScheduledRecordings()
+              scheduledRecordings.addProgram(prog, tv_util.getKey(prog))
+              self.saveScheduledRecordings(scheduledRecordings)
+              _debug_('Added Episode')
 
         # check, maybe we need to start right now
         self.checkToRecord()
@@ -318,6 +488,8 @@
             print 'prog.isRecording:', e
             recording = FALSE
 
+        if config.DUPLICATE_DETECTION:
+           self.removeDuplicate(prog)
         scheduledRecordings = self.getScheduledRecordings()
         scheduledRecordings.removeProgram(prog, tv_util.getKey(prog))
         self.saveScheduledRecordings(scheduledRecordings)
@@ -562,7 +734,7 @@
     
         (status, favs) = self.getFavorites()
         priority = len(favs) + 1
-        fav = tv.record_types.Favorite(name, prog, exactchan, exactdow, exacttod, priority)
+        fav = tv.record_types.Favorite(name, prog, exactchan, exactdow, exacttod, priority, allowDuplicates, onlyNew)
     
         scheduledRecordings = self.getScheduledRecordings()
         scheduledRecordings.addFavorite(fav)
@@ -572,7 +744,7 @@
         return (TRUE, 'favorite added')
     
     
-    def addEditedFavorite(self, name, title, chan, dow, mod, priority):
+    def addEditedFavorite(self, name, title, chan, dow, mod, priority, allowDuplicates, onlyNew):
         fav = tv.record_types.Favorite()
     
         fav.name = name
@@ -581,6 +753,8 @@
         fav.dow = dow
         fav.mod = mod
         fav.priority = priority
+        fav.allowDuplicates = allowDuplicates
+        fav.onlyNew = onlyNew
     
         scheduledRecordings = self.getScheduledRecordings()
         scheduledRecordings.addFavorite(fav)
@@ -687,7 +861,24 @@
     
         # if we get this far prog is not a favorite
         return (FALSE, 'not a favorite')
+
+    def doesFavoriteRecordOnlyNewEpisodes(self, prog, favs=None):
+        if not favs:
+           (status, favs) = self.getFavorites()
+        for fav in favs.values():
+            if Unicode(prog.title).lower().find(Unicode(fav.title).lower()) >= 0:
+               _debug_('NEW: %s'%fav.onlyNew)
+               if fav.onlyNew == '1':
+                  return TRUE 
     
+    def doesFavoriteAllowDuplicates(self, prog, favs=None):
+        if not favs:
+           (status, favs) = self.getFavorites()
+        for fav in favs.values():
+            if Unicode(prog.title).lower().find(Unicode(fav.title).lower()) >= 0:
+               _debug_('DUP: %s'%fav.allowDuplicates)
+               if fav.allowDuplicates == '1':
+                  return TRUE
     
     def removeFavoriteFromSchedule(self, fav):
         # TODO: make sure the program we remove is not
@@ -920,12 +1111,12 @@
         return (status, message)
 
 
-    def xmlrpc_addEditedFavorite(self, name, title, chan, dow, mod, priority):
+    def xmlrpc_addEditedFavorite(self, name, title, chan, dow, mod, priority, allowDuplicates, onlyNew):
         (status, message) = (FALSE, 'RecordServer::addEditedFavorite: cannot acquire lock')
         try:
             self.lock.acquire()
             (status, response) = self.addEditedFavorite(unjellyFromXML(name), \
-            unjellyFromXML(title), chan, dow, mod, priority)
+            unjellyFromXML(title), chan, dow, mod, priority, allowDuplicates, onlyNew)
             message = 'RecordServer::addEditedFavorite: %s' % response
         finally:
             self.lock.release()
Index: src/tv/program_display.py
===================================================================
--- src/tv/program_display.py	(revision 8922)
+++ src/tv/program_display.py	(working copy)
@@ -64,6 +64,10 @@
         else:
             self.scheduled = False
 
+        self.allowDuplicates = prog.allowDuplicates
+
+        self.onlyNew = prog.onlyNew
+
         self.overlap = prog.overlap
 
         self.favorite = False
@@ -137,7 +141,7 @@
 
 
     def add_favorite(self, arg=None, menuw=None):
-        fav = Favorite(self.prog.title, self.prog, True, True, True, -1)
+        fav = Favorite(self.prog.title, self.prog, True, True, True, -1, True, False)
         fav_item = FavoriteItem(self, fav, fav_action='add')
         fav_item.display_favorite(menuw=menuw)
 
@@ -216,6 +220,14 @@
         self.name  = self.origname = fav.name
         self.title = fav.title
         self.fav_action = fav_action
+        if hasattr(fav,'allowDuplicates'):
+           self.allowDuplicates = fav.allowDuplicates
+        else:
+           self.allowDuplicates = 1
+        if hasattr(fav,'onlyNew'):
+           self.onlyNew = fav.onlyNew
+        else:
+           self.onlyNew = 0
 
         self.week_days = (_('Mon'), _('Tue'), _('Wed'), _('Thu'), _('Fri'), _('Sat'), _('Sun'))
 
@@ -250,6 +262,10 @@
         items.append(menu.MenuItem(_('Modify channel'), action=self.mod_channel))
         items.append(menu.MenuItem(_('Modify day of week'), action=self.mod_day))
         items.append(menu.MenuItem(_('Modify time of day'), action=self.mod_time))
+        if config.DUPLICATE_DETECTION:
+           items.append(menu.MenuItem(_('Modify duplicate flag'), action=self.mod_dup))
+        if config.ONLY_NEW_DETECTION:
+           items.append(menu.MenuItem(_('Modify episodes flag'), action=self.mod_new))
 
         # XXX: priorities aren't quite supported yet
         if 0:
@@ -281,7 +297,24 @@
 
         self.menuw.refresh()
 
+    def mod_dup(self, arg=None, menuw=None):
+        items = []
+        items.append(menu.MenuItem('Allow Duplicates', action=self.alter_prop,arg=('dup', 'True')))
+        items.append(menu.MenuItem('Prevent Duplicates', action=self.alter_prop,arg=('dup', 'False')))
+        favorite_menu = menu.Menu(_('Modify Duplicate Flag'), items,item_types = 'tv favorite menu')
+        favorite_menu.infoitem = self
+        menuw.pushmenu(favorite_menu)
+        menuw.refresh()
 
+    def mod_new(self, arg=None, menuw=None):
+        items = []
+        items.append(menu.MenuItem('All Episodes', action=self.alter_prop,arg=('new', 'False')))
+        items.append(menu.MenuItem('Only New Episodes', action=self.alter_prop,arg=('new', 'True')))
+        favorite_menu = menu.Menu(_('Modify Only New Flag'), items,item_types = 'tv favorite menu')
+        favorite_menu.infoitem = self
+        menuw.pushmenu(favorite_menu)
+        menuw.refresh()
+
     def mod_channel(self, arg=None, menuw=None):
         items = []
 
@@ -328,6 +361,22 @@
                                     gmtime(float(val * 60)))
                 self.fav.mod = val
 
+        elif prop == 'dup':
+             if val == 'True':
+                self.allowDuplicates=TRUE
+                self.fav.allowDuplicates=TRUE
+             else:
+                self.allowDuplicates=FALSE
+                self.fav.allowDuplicates=FALSE
+
+        elif prop == 'new':
+             if val == 'True':
+                self.onlyNew=TRUE
+                self.fav.onlyNew=TRUE
+             else:
+                self.onlyNew=FALSE
+                self.fav.onlyNew=FALSE
+
         if menuw:  
             menuw.back_one_menu(arg='reload')
 
@@ -376,15 +425,21 @@
             result = True
 
         if result:
-            (result, msg) = record_client.addEditedFavorite(self.fav.name, 
+           if not config.DUPLICATE_DETECTION or not hasattr(self.fav,'allowDuplicates'):
+              self.fav.allowDuplicates = 1
+           if not config.ONLY_NEW_DETECTION or not hasattr(self.fav,'onlyNew'):
+              self.fav.onlyNew = 0
+           (result, msg) = record_client.addEditedFavorite(self.fav.name, 
                                                             self.fav.title, 
                                                             self.fav.channel, 
                                                             self.fav.dow, 
                                                             self.fav.mod, 
-                                                            self.fav.priority)
-            if not result:
+                                                            self.fav.priority,
+                                                            self.fav.allowDuplicates,
+                                                            self.fav.onlyNew)
+           if not result:
                 AlertBox(text=_('Save Failed, favorite was lost')+(': %s' % msg)).show()
-            else:
+           else:
                 self.fav_action = 'edit'
                 if menuw:  
                     menuw.back_one_menu(arg='reload')
Index: src/tv/epg_types.py
===================================================================
--- src/tv/epg_types.py	(revision 8922)
+++ src/tv/epg_types.py	(working copy)
@@ -64,6 +64,9 @@
     date       = None
     scheduled  = None
     overlap    = None
+    previouslyRecorded = None
+    allowDuplicates = None
+    onlyNew = None
 
 
     def __init__(self):
@@ -83,6 +86,9 @@
         # to a boolean type. 
         self.scheduled  = 0
         self.overlap    = 0
+        self.previouslyRecorded = 0
+        self.allowDuplicates = 1
+        self.onlyNew = 0
 
 
     def __str__(self):
Index: src/tv/record_types.py
===================================================================
--- src/tv/record_types.py	(revision 8922)
+++ src/tv/record_types.py	(working copy)
@@ -134,7 +134,7 @@
 class Favorite:
 
     def __init__(self, name=None, prog=None, exactchan=FALSE, exactdow=FALSE, 
-                 exacttod=FALSE, priority=0):
+                 exacttod=FALSE, priority=0, allowDuplicates=TRUE, onlyNew=FALSE):
         self.TYPES_VERSION = TYPES_VERSION
         translation_table = \
                             '                ' \
@@ -158,6 +158,8 @@
         if name:
             self.name = string.translate(name,translation_table)
         self.priority = priority
+        self.allowDuplicates = allowDuplicates
+        self.onlyNew = onlyNew
 
         if prog:
             self.title = prog.title
Index: src/tv/epg_xmltv.py
===================================================================
--- src/tv/epg_xmltv.py	(revision 8922)
+++ src/tv/epg_xmltv.py	(working copy)
@@ -252,7 +252,7 @@
             prog.channel_id = p['channel']
             prog.title = Unicode(p['title'][0][0])
             if p.has_key('date'):
-                prog.date = Unicode(p['date'][0])
+                prog.date = Unicode(p['date'])
             if p.has_key('category'):
                 prog.categories = [ cat[0] for cat in p['category'] ]
             if p.has_key('rating'):
Index: src/tv/record_client.py
===================================================================
--- src/tv/record_client.py	(revision 8922)
+++ src/tv/record_client.py	(working copy)
@@ -168,11 +168,11 @@
     return (status, message) 
 
 
-def addEditedFavorite(name, title, chan, dow, mod, priority):
+def addEditedFavorite(name, title, chan, dow, mod, priority, allowDuplicates, onlyNew):
     try:
         (status, message) = \
             server.addEditedFavorite(jellyToXML(name), \
-            jellyToXML(title), chan, dow, mod, priority)
+            jellyToXML(title), chan, dow, mod, priority, allowDuplicates, onlyNew)
     except Exception, e:
         print e
         traceback.print_exc()
Index: src/tv/edit_favorite.py
===================================================================
--- src/tv/edit_favorite.py	(revision 8922)
+++ src/tv/edit_favorite.py	(working copy)
@@ -80,7 +80,7 @@
             else:
                 self.priority = 1
 
-            self.fav = Favorite(subject.title, subject, TRUE, TRUE, TRUE, self.priority)
+            self.fav = Favorite(subject.title, subject, TRUE, TRUE, TRUE, self.priority, TRUE, FALSE)
         else:
             self.fav = subject
             self.oldname = self.fav.name
@@ -311,7 +311,9 @@
                              self.chan_box.list.get_selected_item().value,
                              self.dow_box.list.get_selected_item().value, 
                              self.tod_box.list.get_selected_item().value, 
-                             self.fav.priority)
+                             self.fav.priority,
+                             self.fav.allowDuplicates,
+                             self.fav.onlyNew)
                 if result:
                     #tv.view_favorites.ViewFavorites(parent=self.parent, text='Favorites').show()
                     self.destroy()
Index: freevo_config.py
===================================================================
--- freevo_config.py	(revision 8922)
+++ freevo_config.py	(working copy)
@@ -1459,6 +1459,12 @@
 # XXX the path doesn't work from the www cgi scripts!
 TV_RECORD_DIR = None
 
+# This will enable duplicate recording detection
+DUPLICATE_DETECTION = None
+
+# This will enable only new episodes to be recorded
+ONLY_NEW_DETECTION = None
+
 #
 # Watching TV
 #
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Freevo-devel mailing list
Freevo-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/freevo-devel

Reply via email to