This patch adds support for saving the guide data for recordings, including the credits. It modifies the following files:
dbcheck.cpp:
Changes dbver to 1073, adds recordedprogram, recordedcredits, and recordedrating tables with the same columns as the program, credits, and programrating tables.
programinfo.cpp:
ProgramInfo::StartedRecording copies data into the recorded* tables
ProgramInfo::showDetails gets data from the program tables if filesize=0, or from the recorded* tables if filesize>0
mainserver.cpp:
Delete thread removes data from recorded* tables


This patch assumes that the recordedprogram table has the exact same column format as the program table, and the same for credits and recordedcredits and programrating and recordedrating. This restriction can be lifted by putting a list of all the columns in the data copying code in ProgramInfo::StartedRecording, but then any time a new column is created it would have to be added to the list. Also, I used the INSERT INTO ... SELECT command for the data copying, which could be sped up by the use of separate INSERT and SELECT commands for the single row queries.
Some data is duplicated between the recorded and recordedprogram table.
? libs/libmythtv/RingBuffer.cpp.cc
Index: libs/libmythtv/dbcheck.cpp
===================================================================
RCS file: /var/lib/mythcvs/mythtv/libs/libmythtv/dbcheck.cpp,v
retrieving revision 1.86
diff -u -r1.86 dbcheck.cpp
--- libs/libmythtv/dbcheck.cpp	19 Feb 2005 20:22:03 -0000	1.86
+++ libs/libmythtv/dbcheck.cpp	21 Feb 2005 02:36:07 -0000
@@ -9,7 +9,7 @@
 #include "mythcontext.h"
 #include "mythdbcon.h"
 
-const QString currentDatabaseVersion = "1072";
+const QString currentDatabaseVersion = "1073";
 
 static bool UpdateDBVersionNumber(const QString &newnumber);
 static bool performActualUpdate(const QString updates[], QString version,
@@ -1412,6 +1412,65 @@
             return false;
     }
 
+    if (dbver = "1072")
+    {
+        const QString updates[] = {
+"CREATE TABLE IF NOT EXISTS recordedprogram ("
+"  chanid int(10) unsigned NOT NULL default '0',"
+"  starttime datetime NOT NULL default '0000-00-00 00:00:00',"
+"  endtime datetime NOT NULL default '0000-00-00 00:00:00',"
+"  title varchar(128) NOT NULL default '',"
+"  subtitle varchar(128) NOT NULL default '',"
+"  description text NOT NULL,"
+"  category varchar(64) NOT NULL default '',"
+"  category_type varchar(64) NOT NULL default '',"
+"  airdate year(4) NOT NULL default '0000',"
+"  stars float unsigned NOT NULL default '0',"
+"  previouslyshown tinyint(4) NOT NULL default '0',"
+"  title_pronounce varchar(128) NOT NULL default '',"
+"  stereo tinyint(1) NOT NULL default '0',"
+"  subtitled tinyint(1) NOT NULL default '0',"
+"  hdtv tinyint(1) NOT NULL default '0',"
+"  closecaptioned tinyint(1) NOT NULL default '0',"
+"  partnumber int(11) NOT NULL default '0',"
+"  parttotal int(11) NOT NULL default '0',"
+"  seriesid varchar(12) NOT NULL default '',"
+"  originalairdate date default NULL,"
+"  showtype varchar(30) NOT NULL default '',"
+"  colorcode varchar(20) NOT NULL default '',"
+"  syndicatedepisodenumber varchar(20) NOT NULL default '',"
+"  programid varchar(20) NOT NULL default '',"
+"  manualid int(10) unsigned NOT NULL default '0',"
+"  PRIMARY KEY  (chanid,starttime,manualid),"
+"  KEY endtime (endtime),"
+"  KEY title (title),"
+"  KEY title_pronounce (title_pronounce),"
+"  KEY seriesid (seriesid),"
+"  KEY programid (programid),"
+"  KEY id_start_end (chanid,starttime,endtime)"
+");",
+"CREATE TABLE IF NOT EXISTS recordedcredits ("
+"  person mediumint(8) unsigned NOT NULL default '0',"
+"  chanid int(10) unsigned NOT NULL default '0',"
+"  starttime datetime NOT NULL default '0000-00-00 00:00:00',"
+"  role set('actor','director','producer','executive_producer','writer','guest_star','host','adapter','presenter','commentator','guest') NOT NULL default '',"
+"  UNIQUE KEY chanid (chanid,starttime,person,role),"
+"  KEY person (person,role)"
+");",
+"CREATE TABLE IF NOT EXISTS recordedrating ("
+"  chanid int(10) unsigned NOT NULL default '0',"
+"  starttime datetime NOT NULL default '0000-00-00 00:00:00',"
+"  system char(8) NOT NULL default '',"
+"  rating char(8) NOT NULL default '',"
+"  UNIQUE KEY chanid (chanid,starttime,system,rating),"
+"  KEY starttime (starttime,system)"
+");",
+""
+	};
+	
+        if (!performActualUpdate(updates, "1073", dbver))
+            return false;
+    }
     return true;
 }
 
Index: libs/libmythtv/programinfo.cpp
===================================================================
RCS file: /var/lib/mythcvs/mythtv/libs/libmythtv/programinfo.cpp,v
retrieving revision 1.197
diff -u -r1.197 programinfo.cpp
--- libs/libmythtv/programinfo.cpp	20 Feb 2005 17:45:32 -0000	1.197
+++ libs/libmythtv/programinfo.cpp	21 Feb 2005 02:36:08 -0000
@@ -1029,6 +1029,30 @@
 
     if (!query.exec() || !query.isActive())
         MythContext::DBError("Clear markup on record", query);
+
+    query.prepare("INSERT INTO recordedcredits"
+		  " SELECT * FROM credits"
+		  " WHERE chanid = :CHANID AND starttime = :START;");
+    query.bindValue(":CHANID", chanid);
+    query.bindValue(":START", starts);
+    if (!query.exec() || !query.isActive())
+        MythContext::DBError("Copy program credits on record", query);
+
+    query.prepare("INSERT INTO recordedprogram"
+		  " SELECT * from program"
+		  " WHERE chanid = :CHANID AND starttime = :START;");
+    query.bindValue(":CHANID", chanid);
+    query.bindValue(":START", starts);
+    if (!query.exec() || !query.isActive())
+        MythContext::DBError("Copy program data on record", query);
+
+    query.prepare("INSERT INTO recordedrating"
+		  " SELECT * from programrating"
+		  " WHERE chanid = :CHANID AND starttime = :START;");
+    query.bindValue(":CHANID", chanid);
+    query.bindValue(":START", starts);
+    if (!query.exec() || !query.isActive())
+        MythContext::DBError("Copy program ratings on record", query);    
 }
 
 void ProgramInfo::FinishedRecording(QSqlDatabase* db, bool prematurestop) 
@@ -2268,11 +2292,18 @@
 
     if (endts != startts)
     {
-        query.prepare("SELECT category_type, partnumber,"
-                      " parttotal, stereo, subtitled, hdtv,"
-                      " closecaptioned, syndicatedepisodenumber"
-                      " FROM program WHERE chanid = :CHANID"
-                      " AND starttime = :STARTTIME ;");
+        if (filesize>0)
+	    query.prepare("SELECT category_type, partnumber,"
+			  " parttotal, stereo, subtitled, hdtv,"
+			  " closecaptioned, syndicatedepisodenumber"
+			  " FROM recordedprogram WHERE chanid = :CHANID"
+			  " AND starttime = :STARTTIME ;");
+	else
+	    query.prepare("SELECT category_type, partnumber,"
+			  " parttotal, stereo, subtitled, hdtv,"
+			  " closecaptioned, syndicatedepisodenumber"
+			  " FROM program WHERE chanid = :CHANID"
+			  " AND starttime = :STARTTIME ;");
         query.bindValue(":CHANID", chanid);
         query.bindValue(":STARTTIME", startts.toString(Qt::ISODate));
 
@@ -2289,9 +2320,14 @@
             epinum = query.value(7).toString();
         }
 
-        query.prepare("SELECT rating FROM programrating"
-                      " WHERE chanid = :CHANID"
-                      " AND starttime = :STARTTIME ;");
+        if (filesize>0)
+            query.prepare("SELECT rating FROM recordedrating"
+                          " WHERE chanid = :CHANID"
+                          " AND starttime = :STARTTIME ;");
+        else
+            query.prepare("SELECT rating FROM programrating"
+                          " WHERE chanid = :CHANID"
+                          " AND starttime = :STARTTIME ;");
         query.bindValue(":CHANID", chanid);
         query.bindValue(":STARTTIME", startts.toString(Qt::ISODate));
         
@@ -2400,10 +2436,19 @@
 
     if (endts != startts)
     {
-        query.prepare("SELECT role,people.name from credits"
-                      " LEFT JOIN people ON credits.person = people.person"
-                      " WHERE credits.chanid = :CHANID"
-                      " AND credits.starttime = :STARTTIME ORDER BY role;");
+        if (filesize>0)
+            query.prepare("SELECT role,people.name FROM recordedcredits"
+                          " AS credits"
+                          " LEFT JOIN people ON credits.person = people.person"
+                          " WHERE credits.chanid = :CHANID"
+                          " AND credits.starttime = :STARTTIME"
+                          " ORDER BY role;");
+        else
+            query.prepare("SELECT role,people.name FROM credits"
+                          " LEFT JOIN people ON credits.person = people.person"
+                          " WHERE credits.chanid = :CHANID"
+                          " AND credits.starttime = :STARTTIME"
+                          " ORDER BY role;");
         query.bindValue(":CHANID", chanid);
         query.bindValue(":STARTTIME", startts.toString(Qt::ISODate));
 
Index: programs/mythbackend/mainserver.cpp
===================================================================
RCS file: /var/lib/mythcvs/mythtv/programs/mythbackend/mainserver.cpp,v
retrieving revision 1.178
diff -u -r1.178 mainserver.cpp
--- programs/mythbackend/mainserver.cpp	17 Feb 2005 05:56:19 -0000	1.178
+++ programs/mythbackend/mainserver.cpp	21 Feb 2005 02:36:08 -0000
@@ -1146,6 +1146,33 @@
                                    .arg(logInfo));
     }
 
+    query.prepare("DELETE FROM recordedrating "
+                  "WHERE chanid = :CHANID AND starttime = :STARTTIME;");
+    query.bindValue(":CHANID", ds->chanid);
+    query.bindValue(":STARTTIME", ds->recstartts.toString("yyyyMMddhhmm00"));
+    query.exec();
+    if (!query.exec() || !query.isActive())
+        MythContext::DBError("Recorded program delete recordedrating",
+                             query);
+
+    query.prepare("DELETE FROM recordedprogram "
+                  "WHERE chanid = :CHANID AND starttime = :STARTTIME;");
+    query.bindValue(":CHANID", ds->chanid);
+    query.bindValue(":STARTTIME", ds->recstartts.toString("yyyyMMddhhmm00"));
+    query.exec();
+    if (!query.exec() || !query.isActive())
+        MythContext::DBError("Recorded program delete recordedprogram",
+                             query);
+
+    query.prepare("DELETE FROM recordedcredits "
+                  "WHERE chanid = :CHANID AND starttime = :STARTTIME;");
+    query.bindValue(":CHANID", ds->chanid);
+    query.bindValue(":STARTTIME", ds->recstartts.toString("yyyyMMddhhmm00"));
+    query.exec();
+    if (!query.exec() || !query.isActive())
+        MythContext::DBError("Recorded program delete recordedcredits",
+                             query);
+
     ScheduledRecording::signalChange(0);
 
     delete pginfo;
_______________________________________________
mythtv-dev mailing list
[email protected]
http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-dev

Reply via email to