Ticket #6478: program-timestamp.patch
File program-timestamp.patch, 16.5 KB (added by , 17 years ago) |
---|
-
libs/libmythtv/dbcheck.cpp
18 18 #define MINIMUM_DBMS_VERSION 5,0,15 19 19 20 20 /// This is the DB schema version expected by the running MythTV instance. 21 const QString currentDatabaseVersion = "123 2";21 const QString currentDatabaseVersion = "1233"; 22 22 23 23 static bool UpdateDBVersionNumber(const QString &newnumber); 24 24 static bool performActualUpdate( … … 4458 4458 if (!performActualUpdate(updates, "1232", dbver)) 4459 4459 return false; 4460 4460 } 4461 if (dbver == "1232") 4462 { 4463 const char *updates[] = { 4464 "ALTER TABLE program" 4465 " ADD COLUMN lastupdate TIMESTAMP DEFAULT CURRENT_TIMESTAMP " 4466 " ON UPDATE CURRENT_TIMESTAMP, " 4467 " ADD INDEX program_lastupdate (lastupdate);", 4468 NULL 4469 }; 4470 if (!performActualUpdate(updates, "1233", dbver)) 4471 return false; 4472 } 4461 4473 4462 4474 return true; 4463 4475 } -
libs/libmythtv/datadirect.h
327 327 uint sourceid, bool insert_channels, bool filter_new_channels); 328 328 static bool UpdateChannelsUnsafe( 329 329 uint sourceid, bool filter_new_channels); 330 static void DataDirectProgramUpdate( void);330 static void DataDirectProgramUpdate(int sourceid, const QDateTime &from, const QDateTime &to); 331 331 332 332 // static command, makes Labs and Schedules Direct ProgramIDs compatible. 333 333 static void FixProgramIDs(void); -
libs/libmythtv/datadirect.cpp
824 824 return true; 825 825 } 826 826 827 void DataDirectProcessor::DataDirectProgramUpdate( void)827 void DataDirectProcessor::DataDirectProgramUpdate(int sourceid, const QDateTime &from, const QDateTime &to) 828 828 { 829 829 MSqlQuery query(MSqlQuery::DDCon()); 830 830 831 query.prepare("DELETE program FROM program" 832 " LEFT JOIN channel" 833 " ON program.chanid = channel.chanid" 834 " LEFT JOIN dd_genre" 835 " ON program.programid = dd_genre.programid" 836 " AND program.category = dd_genre.class" 837 " AND dd_genre.relevance = '0'" 838 " LEFT JOIN dd_v_program" 839 " ON program.chanid = dd_v_program.chanid" 840 " AND program.starttime = DATE_ADD(dd_v_program.starttime, INTERVAL channel.tmoffset MINUTE)" 841 " AND program.endtime = DATE_ADD(dd_v_program.endtime, INTERVAL channel.tmoffset MINUTE)" 842 " AND program.title = dd_v_program.title" 843 " AND program.subtitle = dd_v_program.subtitle" 844 " AND program.description = dd_v_program.description" 845 " AND program.showtype = dd_v_program.showtype" 846 " AND program.category_type = dd_v_program.category_type" 847 " AND program.airdate = dd_v_program.airdate" 848 " AND program.stars = dd_v_program.stars" 849 " AND program.stereo = dd_v_program.stereo" 850 " AND program.subtitled = dd_v_program.subtitled" 851 " AND program.subtitletypes = (dd_v_program.subtitled << 1) | dd_v_program.closecaptioned" 852 " AND program.videoprop = dd_v_program.hdtv" 853 " AND program.audioprop = (dd_v_program.dolby >> 3) | dd_v_program.stereo" 854 " AND program.hdtv = dd_v_program.hdtv" 855 " AND program.closecaptioned = dd_v_program.closecaptioned" 856 " AND program.partnumber = dd_v_program.partnumber" 857 " AND program.parttotal = dd_v_program.parttotal" 858 " AND program.seriesid = dd_v_program.seriesid" 859 " AND program.originalairdate = dd_v_program.originalairdate" 860 " AND program.colorcode = dd_v_program.colorcode" 861 " AND program.syndicatedepisodenumber = dd_v_program.syndicatedepisodenumber" 862 " AND program.programid = dd_v_program.programid" 863 " WHERE" 864 " (channel.chanid is NULL" 865 " OR dd_genre.programid is NULL" 866 " OR dd_v_program.chanid is NULL)" 867 " AND program.starttime >= DATE_ADD(:FROM, INTERVAL channel.tmoffset MINUTE)" 868 " AND program.starttime < DATE_ADD(:TO, INTERVAL channel.tmoffset MINUTE)" 869 " AND channel.sourceid = :SOURCEID" 870 " AND program.originalairdate = dd_v_program.originalairdate" 871 ";"); 872 query.bindValue(":FROM", from); 873 query.bindValue(":TO", to); 874 query.bindValue(":SOURCEID", sourceid); 875 if (!query.exec()) 876 MythDB::DBError("Deleting changed entries from program table", query); 877 878 query.prepare("DELETE dd_v_program FROM dd_v_program" 879 " INNER JOIN channel" 880 " ON dd_v_program.chanid = channel.chanid" 881 " INNER JOIN dd_genre" 882 " ON dd_v_program.programid = dd_genre.programid" 883 " AND dd_genre.relevance = '0'" 884 " INNER JOIN program" 885 " ON program.chanid = dd_v_program.chanid" 886 " AND program.starttime = DATE_ADD(dd_v_program.starttime, INTERVAL channel.tmoffset MINUTE)" 887 " AND program.endtime = DATE_ADD(dd_v_program.endtime, INTERVAL channel.tmoffset MINUTE)" 888 " AND program.title = dd_v_program.title" 889 " AND program.subtitle = dd_v_program.subtitle" 890 " AND program.description = dd_v_program.description" 891 " AND program.showtype = dd_v_program.showtype" 892 " AND program.category = dd_genre.class" 893 " AND program.category_type = dd_v_program.category_type" 894 " AND program.airdate = dd_v_program.airdate" 895 " AND program.stars = dd_v_program.stars" 896 " AND program.stereo = dd_v_program.stereo" 897 " AND program.subtitled = dd_v_program.subtitled" 898 " AND program.subtitletypes = (dd_v_program.subtitled << 1) | dd_v_program.closecaptioned" 899 " AND program.videoprop = dd_v_program.hdtv" 900 " AND program.audioprop = (dd_v_program.dolby >> 3) | dd_v_program.stereo" 901 " AND program.hdtv = dd_v_program.hdtv" 902 " AND program.closecaptioned = dd_v_program.closecaptioned" 903 " AND program.partnumber = dd_v_program.partnumber" 904 " AND program.parttotal = dd_v_program.parttotal" 905 " AND program.seriesid = dd_v_program.seriesid" 906 " AND program.originalairdate = dd_v_program.originalairdate" 907 " AND program.colorcode = dd_v_program.colorcode" 908 " AND program.syndicatedepisodenumber = dd_v_program.syndicatedepisodenumber" 909 " AND program.programid = dd_v_program.programid" 910 ";"); 911 if (!query.exec()) 912 MythDB::DBError("Deleting up-to-date entries from listings source data", query); 913 831 914 //cerr << "Adding rows to main program table from view table..\n"; 832 915 if (!query.exec("INSERT IGNORE INTO program (chanid, starttime, endtime, " 833 916 "title, subtitle, description, " -
libs/libmythtv/programdata.cpp
27 27 return false; 28 28 } 29 29 30 void ProgramData::clearDataByChannel(int chanid, QDateTime from, QDateTime to )30 void ProgramData::clearDataByChannel(int chanid, QDateTime from, QDateTime to, bool clearprogram) 31 31 { 32 32 int secs; 33 33 QDateTime newFrom, newTo; … … 49 49 newFrom = from.addSecs(secs); 50 50 newTo = to.addSecs(secs); 51 51 52 query.prepare("DELETE FROM program " 53 "WHERE starttime >= :FROM AND starttime < :TO " 54 "AND chanid = :CHANID ;"); 55 query.bindValue(":FROM", newFrom); 56 query.bindValue(":TO", newTo); 57 query.bindValue(":CHANID", chanid); 58 query.exec(); 52 if (clearprogram) { 53 query.prepare("DELETE FROM program " 54 "WHERE starttime >= :FROM AND starttime < :TO " 55 "AND chanid = :CHANID ;"); 56 query.bindValue(":FROM", newFrom); 57 query.bindValue(":TO", newTo); 58 query.bindValue(":CHANID", chanid); 59 query.exec(); 60 } 59 61 60 62 query.prepare("DELETE FROM programrating " 61 63 "WHERE starttime >= :FROM AND starttime < :TO " … … 82 84 query.exec(); 83 85 } 84 86 85 void ProgramData::clearDataBySource(int sourceid, QDateTime from, QDateTime to )87 void ProgramData::clearDataBySource(int sourceid, QDateTime from, QDateTime to, bool clearprogram) 86 88 { 87 89 MSqlQuery query(MSqlQuery::InitCon()); 88 90 query.prepare("SELECT chanid FROM channel WHERE " … … 97 99 while (query.next()) 98 100 { 99 101 int chanid = query.value(0).toInt(); 100 clearDataByChannel(chanid, from, to );102 clearDataByChannel(chanid, from, to, clearprogram); 101 103 } 102 104 } 103 105 } -
libs/libmythtv/programdata.h
104 104 QMap<QString, QList<ProgInfo> > *proglist); 105 105 106 106 static int fix_end_times(void); 107 static void clearDataByChannel(int chanid, QDateTime from, QDateTime to); 108 static void clearDataBySource(int sourceid, QDateTime from, QDateTime to); 107 static void clearDataByChannel(int chanid, QDateTime from, QDateTime to, 108 bool clearprogram = FALSE); 109 static void clearDataBySource(int sourceid, QDateTime from, QDateTime to, 110 bool clearprogram = FALSE); 109 111 110 112 private: 111 113 void fixProgramList(QList<ProgInfo> *fixlist); -
programs/mythfilldatabase/filldata.cpp
308 308 VERBOSE(VB_GENERAL, "Data for source cleared."); 309 309 310 310 VERBOSE(VB_GENERAL, "Updating programs."); 311 DataDirectProcessor::DataDirectProgramUpdate(); 311 DataDirectProcessor::DataDirectProgramUpdate(source.id, fromlocaldt, 312 tolocaldt); 312 313 VERBOSE(VB_GENERAL, "Program table update complete."); 313 314 314 315 return true; -
programs/mythfilldatabase/main.cpp
713 713 query.prepare("UPDATE program SET generic = 1 WHERE " 714 714 "((programid = '' AND subtitle = '' AND description = '') OR " 715 715 " (programid <> '' AND category_type = 'series' AND " 716 " program.programid LIKE '%0000') );");716 " program.programid LIKE '%0000') AND generic <> 1);"); 717 717 718 718 if (!query.exec()) 719 719 MythDB::DBError("mark generic", query); … … 814 814 if (grab_data) 815 815 { 816 816 MSqlQuery updt(MSqlQuery::InitCon()); 817 updt.exec("UPDATE program SET first = 0, last = 0;");818 817 819 818 VERBOSE(VB_GENERAL, "Marking episode first showings."); 820 819 … … 828 827 { 829 828 updt.prepare("UPDATE program set first = 1 " 830 829 "WHERE starttime = :STARTTIME " 831 " AND programid = :PROGRAMID;"); 830 " AND programid = :PROGRAMID " 831 " AND first <> 1;"); 832 832 updt.bindValue(":STARTTIME", query.value(0).toDateTime()); 833 833 updt.bindValue(":PROGRAMID", query.value(1).toString()); 834 834 updt.exec(); 835 836 updt.prepare("UPDATE program set first = 0 " 837 "WHERE starttime <> :STARTTIME " 838 " AND programid = :PROGRAMID " 839 " AND first <> 0;"); 840 updt.bindValue(":STARTTIME", query.value(0).toDateTime()); 841 updt.bindValue(":PROGRAMID", query.value(1).toString()); 842 updt.exec(); 835 843 } 836 844 } 837 845 int found = query.size(); … … 848 856 "WHERE starttime = :STARTTIME " 849 857 " AND title = :TITLE " 850 858 " AND subtitle = :SUBTITLE " 851 " AND description = :DESCRIPTION"); 859 " AND description = :DESCRIPTION " 860 " AND first <> 1;"); 852 861 updt.bindValue(":STARTTIME", query.value(0).toDateTime()); 853 862 updt.bindValue(":TITLE", query.value(1).toString()); 854 863 updt.bindValue(":SUBTITLE", query.value(2).toString()); 855 864 updt.bindValue(":DESCRIPTION", query.value(3).toString()); 856 865 updt.exec(); 866 867 updt.prepare("UPDATE program set first = 0 " 868 "WHERE starttime <> :STARTTIME " 869 " AND title = :TITLE " 870 " AND subtitle = :SUBTITLE " 871 " AND description = :DESCRIPTION " 872 " AND first <> 0;"); 873 updt.bindValue(":STARTTIME", query.value(0).toDateTime()); 874 updt.bindValue(":TITLE", query.value(1).toString()); 875 updt.bindValue(":SUBTITLE", query.value(2).toString()); 876 updt.bindValue(":DESCRIPTION", query.value(3).toString()); 877 updt.exec(); 857 878 } 858 879 } 859 880 found += query.size(); … … 870 891 { 871 892 updt.prepare("UPDATE program set last = 1 " 872 893 "WHERE starttime = :STARTTIME " 873 " AND programid = :PROGRAMID;"); 894 " AND programid = :PROGRAMID " 895 " AND last <> 1;"); 874 896 updt.bindValue(":STARTTIME", query.value(0).toDateTime()); 875 897 updt.bindValue(":PROGRAMID", query.value(1).toString()); 876 898 updt.exec(); 899 900 updt.prepare("UPDATE program set last = 0 " 901 "WHERE starttime <> :STARTTIME " 902 " AND programid = :PROGRAMID " 903 " AND last <> 0;"); 904 updt.bindValue(":STARTTIME", query.value(0).toDateTime()); 905 updt.bindValue(":PROGRAMID", query.value(1).toString()); 906 updt.exec(); 877 907 } 878 908 } 879 909 found = query.size(); … … 890 920 "WHERE starttime = :STARTTIME " 891 921 " AND title = :TITLE " 892 922 " AND subtitle = :SUBTITLE " 893 " AND description = :DESCRIPTION"); 923 " AND description = :DESCRIPTION " 924 " AND last <> 1;"); 894 925 updt.bindValue(":STARTTIME", query.value(0).toDateTime()); 895 926 updt.bindValue(":TITLE", query.value(1).toString()); 896 927 updt.bindValue(":SUBTITLE", query.value(2).toString()); 897 928 updt.bindValue(":DESCRIPTION", query.value(3).toString()); 898 929 updt.exec(); 930 931 updt.prepare("UPDATE program set last = 0 " 932 "WHERE starttime <> :STARTTIME " 933 " AND title = :TITLE " 934 " AND subtitle = :SUBTITLE " 935 " AND description = :DESCRIPTION " 936 " AND last <> 0;"); 937 updt.bindValue(":STARTTIME", query.value(0).toDateTime()); 938 updt.bindValue(":TITLE", query.value(1).toString()); 939 updt.bindValue(":SUBTITLE", query.value(2).toString()); 940 updt.bindValue(":DESCRIPTION", query.value(3).toString()); 941 updt.exec(); 899 942 } 900 943 } 901 944 found += query.size();