--- freevo-1.7.0-rc1/src/helpers/recordserver.py	2006-11-24 19:51:16.000000000 +0000
+++ freevo-1.7.0-rc1-ajf/src/helpers/recordserver.py	2007-01-01 10:36:46.000000000 +0000
@@ -27,10 +27,16 @@
 # -----------------------------------------------------------------------
 
 
-import sys, string, random, time, os, re, pwd, stat, threading
+import sys, string, random, time, os, re, pwd, stat, threading, pickle
 import config
 from util import vfs
 
+##sql database util
+try:
+	from util.dbutil import *
+except ImportError. e:
+	pass
+
 appname = os.path.splitext(os.path.basename(sys.argv[0]))[0]
 appconf = appname.upper()
 
@@ -252,6 +258,87 @@
 
         return TRUE
 
+    def sqlString(self, val):
+        if val:
+            return "'%s'" % (escape(val))
+        else:
+            return 'null'
+
+    def dupeMatches(self, str1, str2):
+        if not str1 or not str2:
+            return false
+
+        str1 = str1.lower().replace(' ', '')
+        str2 = str2.lower().replace(' ', '')
+
+        return str1 == str2
+
+    
+    def duplicate(self, prog=None):
+
+	# Geta sql object
+	db = MetaDatabase()
+	_debug_('Databse is available')
+
+	# Create initial table, if needed
+	dbschema = """CREATE TABLE tv (id INTEGER PRIMARY KEY, \
+	title VARCHAR(255), \
+	sub_title VARCHAR(255), \
+	desc VARCHAR(255), \
+	categories VARCHAR(255), \
+	ratings VARCHAR(255))"""
+	if not db.checkTable('tv'):
+		_debug_('Create TV table')
+		db.runQuery(dbschema)
+	_debug_('Databse is available and TV table exists')
+
+	# Iterate through the table and check for duplicates
+	query="SELECT * FROM tv WHERE title = %s" % (self.sqlString(prog.title))
+	results=db.runQuery(query)
+	if results:
+		duplicateProgram=False
+		_debug_('Program: "%s" "%s" "%s"' % \
+		(prog.title, prog.sub_title, prog.desc, ))
+		for row in results:
+			_debug_('Previous: "%s" "%s" "%s"' % \
+			(row['title'], row['sub_title'], row['desc']))
+
+			if prog.sub_title and self.dupeMatches(row['sub_title'], prog.sub_title):
+				duplicateProgram=True
+				_debug_('Found Duplicate w/ title and sub_title')
+                                break
+			if prog.desc and self.dupeMatches(row['desc'], prog.desc):
+				duplicateProgram=True
+				_debug_('Found Duplicate w/ title and desc')
+                                break
+		if duplicateProgram==False:
+			values = "(null,%s,%s,%s,%s,%s)" % \
+			(self.sqlString(prog.title), \
+			self.sqlString(prog.sub_title), \
+			self.sqlString(prog.desc), \
+			self.sqlString(pickle.dumps(prog.categories)), \
+			self.sqlString(pickle.dumps(prog.ratings)))
+			sql = 'INSERT OR IGNORE INTO tv VALUES '+values
+			_debug_(sql)
+			db.runQuery(sql)	
+			_debug_('Not Duplicate')
+			db.close()
+			return FALSE
+	else:
+		values = "(null,%s,%s,%s,%s,%s)" % \
+		(self.sqlString(prog.title), \
+		self.sqlString(prog.sub_title), \
+		self.sqlString(prog.desc), \
+	        self.sqlString(pickle.dumps(prog.categories)), \
+		self.sqlString(pickle.dumps(prog.ratings)))
+                sql = 'INSERT OR IGNORE INTO tv VALUES '+values
+                _debug_(sql)
+                db.runQuery(sql)
+		_debug_('No previous recordings, so not duplicate')
+		db.close()
+		return FALSE
+	db.close()
+	return TRUE
  
     def scheduleRecording(self, prog=None):
         global guide
@@ -270,9 +357,12 @@
                     (prog.channel_id, chan.id, chan.tunerid))
                 prog.tunerid = chan.tunerid
     
-        scheduledRecordings = self.getScheduledRecordings()
-        scheduledRecordings.addProgram(prog, tv_util.getKey(prog))
-        self.saveScheduledRecordings(scheduledRecordings)
+	if not self.duplicate(prog):
+		scheduledRecordings = self.getScheduledRecordings()
+		scheduledRecordings.addProgram(prog, tv_util.getKey(prog))
+		self.saveScheduledRecordings(scheduledRecordings)
+	else:
+		return (FALSE, 'duplicate recording')
 
         # check, maybe we need to start right now
         self.checkToRecord()
