Author: duncan
Date: Thu Mar  6 16:11:31 2008
New Revision: 10473

Log:
Added locking to the ScheduledRecordings, to allow grouping of writes to be 
written when unlocked


Modified:
   branches/rel-1/freevo/freevo_config.py
   branches/rel-1/freevo/src/helpers/recordserver.py
   branches/rel-1/freevo/src/tv/record_types.py

Modified: branches/rel-1/freevo/freevo_config.py
==============================================================================
--- branches/rel-1/freevo/freevo_config.py      (original)
+++ branches/rel-1/freevo/freevo_config.py      Thu Mar  6 16:11:31 2008
@@ -349,6 +349,8 @@
     (5.23,
      ''' Added XMLTV_TIMEZONE to allow the time zone to be specified
      Added OSD_X11_CURSORS to allow custom cursor to be set, stops xine 
showing a cursor
+     Changes TV_RECORD_SCHEDULE to be a pickle file, this will delete existing 
favorites
+     Added TV_RECORD_FAVORITES and TV_RECORD_FAVORITES_LIST to keep favorites 
separate
      '''),
 ]
 

Modified: branches/rel-1/freevo/src/helpers/recordserver.py
==============================================================================
--- branches/rel-1/freevo/src/helpers/recordserver.py   (original)
+++ branches/rel-1/freevo/src/helpers/recordserver.py   Thu Mar  6 16:11:31 2008
@@ -286,7 +286,6 @@
             schedule = ScheduledRecordings()
 
         self.findOverlaps(schedule)
-        _debug_('saving cached file %r with %s items' % 
(config.TV_RECORD_SCHEDULE, len(schedule.program_list)), 1)
 
         schedule.saveRecordSchedule()
 
@@ -438,7 +437,7 @@
 
 
     def addRecordingToSchedule(self, prog=None, inputSchedule=None):
-        _debug_('addRecordingToSchedule(%s, inputSchedule=%r)' % (prog, 
inputSchedule), 1)
+        _debug_('addRecordingToSchedule(%r, inputSchedule=%r)' % (prog, 
inputSchedule), 1)
         if inputSchedule:
             schedule = inputSchedule
         else:
@@ -451,7 +450,7 @@
 
 
     def removeRecordingFromSchedule(self, prog=None, inputSchedule=None):
-        _debug_('removeRecordingFromSchedule(%s, inputSchedule=%r)' % (prog, 
inputSchedule), 1)
+        _debug_('removeRecordingFromSchedule(%r, inputSchedule=%r)' % (prog, 
inputSchedule), 1)
         if inputSchedule:
             schedule = inputSchedule
         else:
@@ -676,7 +675,7 @@
 
     @kaa.rpc.expose('scheduleRecording')
     def scheduleRecording(self, prog=None):
-        _debug_('scheduleRecording(%s)' % (prog,), 1)
+        _debug_('scheduleRecording(%r)' % (prog,), 1)
         global guide
 
         if prog is None:
@@ -1197,12 +1196,14 @@
         tmp[fav.name] = fav
 
         schedule = self.getScheduledRecordings()
+        schedule.lock()
         progs = schedule.getProgramList()
         for prog in progs.values():
             (isFav, favorite) = self.isProgAFavorite(prog, tmp)
             if isFav:
                 self.removeScheduledRecording(prog)
 
+        schedule.unlock()
         return (True, 'favorite unscheduled')
 
 
@@ -1244,10 +1245,10 @@
         schedule = self.getScheduledRecordings()
 
         favs = self.getFavorites()
-
         if not len(favs):
             return False
 
+        schedule.lock()
 
         # Then remove all scheduled favorites in that timeframe to
         # make up for schedule changes.
@@ -1275,6 +1276,7 @@
                     prog.isFavorite = favorite
                     self.scheduleRecording(prog)
 
+        schedule.unlock()
         return True
 
 

Modified: branches/rel-1/freevo/src/tv/record_types.py
==============================================================================
--- branches/rel-1/freevo/src/tv/record_types.py        (original)
+++ branches/rel-1/freevo/src/tv/record_types.py        Thu Mar  6 16:11:31 2008
@@ -43,6 +43,7 @@
 TYPES_VERSION = 3
 
 critical_section = threading.Lock()
+schedule_locked = False
 
 
 class ScheduledRecordings:
@@ -55,6 +56,25 @@
         self.program_list = {}
         self.manual_recordings = self.loadManualRecordings()
         self.favorites = self.loadFavorites()
+        global schedule_locked
+        schedule_locked = False
+
+
+    def lock(self):
+        global schedule_locked
+        schedule_locked = True
+
+
+    def unlock(self):
+        global schedule_locked
+        if schedule_locked:
+            schedule_locked = False
+            self.saveRecordSchedule()
+
+
+    def get_locked(self):
+        global schedule_locked
+        return schedule_locked
 
 
     def loadRecordSchedule(self):
@@ -78,6 +98,9 @@
 
     def saveRecordSchedule(self):
         """ Save the tv recording schedule to a pickle file """
+        global schedule_locked
+        if schedule_locked:
+            return
         _debug_('saveRecordSchedule()', 1)
         try:
             schedule_fh = open(config.TV_RECORD_SCHEDULE, 'wb')
@@ -94,11 +117,7 @@
 
     def addProgram(self, prog, key=None):
         """ """
-        _debug_('addProgram(%s, key=%r)' % (prog, key), 1)
-        if not key:
-            # key = rec_interface.getKey(prog)
-            pass
-
+        _debug_('addProgram(%r, key=%r)' % (prog, key), 1)
         if not self.program_list.has_key(key):
             self.program_list[key] = prog
             _debug_('%s "%s" added' % (key, prog), 1)
@@ -109,11 +128,7 @@
 
     def removeProgram(self, prog, key=None):
         """ """
-        _debug_('removeProgram(%s, key=%r)' % (prog, key), 1)
-        if not key:
-            # key = rec_interface.getKey(prog)
-            pass
-
+        _debug_('removeProgram(%r, key=%r)' % (prog, key), 1)
         if self.program_list.has_key(key):
             del self.program_list[key]
             _debug_('%s "%s" removed' % (key, prog), 1)

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Freevo-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog

Reply via email to