Ticket #6478: program-timestamp.5.patch
File program-timestamp.5.patch, 14.7 KB (added by , 15 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 5";21 const QString currentDatabaseVersion = "1236"; 22 22 23 23 static bool UpdateDBVersionNumber(const QString &newnumber); 24 24 static bool performActualUpdate( … … 4542 4542 if (!performActualUpdate(updates, "1235", dbver)) 4543 4543 return false; 4544 4544 } 4545 if (dbver == "1235") 4546 { 4547 const char *updates[] = { 4548 "ALTER TABLE program" 4549 " ADD COLUMN lastupdate TIMESTAMP DEFAULT CURRENT_TIMESTAMP " 4550 " ON UPDATE CURRENT_TIMESTAMP, " 4551 " ADD INDEX program_lastupdate (lastupdate);", 4552 NULL 4553 }; 4554 if (!performActualUpdate(updates, "1236", dbver)) 4555 return false; 4556 } 4545 4557 4546 4547 4558 return true; 4548 4559 } 4549 4560 -
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
825 825 return true; 826 826 } 827 827 828 void DataDirectProcessor::DataDirectProgramUpdate( void)828 void DataDirectProcessor::DataDirectProgramUpdate(int sourceid, const QDateTime &from, const QDateTime &to) 829 829 { 830 830 MSqlQuery query(MSqlQuery::DDCon()); 831 831 832 QString queryString("DELETE program FROM program" 833 " LEFT JOIN channel" 834 " ON program.chanid = channel.chanid" 835 " LEFT JOIN dd_genre" 836 " ON program.programid = dd_genre.programid" 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 NOT NULL" 866 " AND program.category <> dd_genre.class)" 867 " OR dd_v_program.chanid is NULL)" 868 " AND program.starttime >= DATE_ADD(:FROM, INTERVAL channel.tmoffset MINUTE)" 869 " AND program.starttime < DATE_ADD(:TO, INTERVAL channel.tmoffset MINUTE)" 870 " AND channel.sourceid = :SOURCEID"); 871 872 QString preferredSource(gContext->GetSetting("PreferredListingsSource")); 873 if (!preferredSource.isEmpty() && preferredSource != "datadirect") 874 queryString += " AND program.listingsource = " + QString::number(kListingSourceDDSchedulesDirect); 875 876 queryString += ';'; 877 878 query.prepare(queryString); 879 query.bindValue(":FROM", from); 880 query.bindValue(":TO", to); 881 query.bindValue(":SOURCEID", sourceid); 882 if (!query.exec()) 883 MythDB::DBError("Deleting changed entries from program table", query); 884 885 if (!query.exec("DELETE dd_v_program FROM dd_v_program" 886 " INNER JOIN program" 887 " ON dd_v_program.chanid = program.chanid" 888 " AND ((dd_v_program.endtime > program.starttime" 889 " AND dd_v_program.endtime <= program.endtime)" 890 " OR (dd_v_program.starttime >= program.starttime" 891 " AND dd_v_program.starttime < program.endtime)" 892 " OR (dd_v_program.starttime < program.starttime" 893 " AND dd_v_program.endtime > program.endtime));")) 894 MythDB::DBError("Deleting up-to-date entries from listings source data", query); 895 832 896 //cerr << "Adding rows to main program table from view table..\n"; 833 897 query.prepare( 834 898 "INSERT IGNORE INTO program " … … 860 924 " ( dd_v_program.programid = dd_genre.programid AND " 861 925 " dd_genre.relevance = '0' ) " 862 926 "WHERE dd_v_program.chanid = channel.chanid"); 863 864 927 query.bindValue(":LSOURCE", kListingSourceDDSchedulesDirect); 865 928 866 929 if (!query.exec()) -
libs/libmythtv/programdata.cpp
916 916 917 917 bool ProgramData::ClearDataByChannel( 918 918 uint chanid, const QDateTime &from, const QDateTime &to, 919 bool use_channel_time_offset )919 bool use_channel_time_offset, bool clear_program) 920 920 { 921 921 int secs = 0; 922 922 if (use_channel_time_offset) … … 926 926 QDateTime newTo = to.addSecs(secs); 927 927 928 928 MSqlQuery query(MSqlQuery::InitCon()); 929 query.prepare("DELETE FROM program " 930 "WHERE starttime >= :FROM AND starttime < :TO " 931 "AND chanid = :CHANID ;"); 932 query.bindValue(":FROM", newFrom); 933 query.bindValue(":TO", newTo); 934 query.bindValue(":CHANID", chanid); 935 bool ok = query.exec(); 929 bool ok; 936 930 931 if (clear_program) { 932 query.prepare("DELETE FROM program " 933 "WHERE starttime >= :FROM AND starttime < :TO " 934 "AND chanid = :CHANID ;"); 935 query.bindValue(":FROM", newFrom); 936 query.bindValue(":TO", newTo); 937 query.bindValue(":CHANID", chanid); 938 ok = query.exec(); 939 } 940 937 941 query.prepare("DELETE FROM programrating " 938 942 "WHERE starttime >= :FROM AND starttime < :TO " 939 943 "AND chanid = :CHANID ;"); -
libs/libmythtv/programdata.h
261 261 uint chanid, 262 262 const QDateTime &from, 263 263 const QDateTime &to, 264 bool use_channel_time_offset); 264 bool use_channel_time_offset, 265 bool clear_program = FALSE); 265 266 static bool ClearDataBySource( 266 267 uint sourceid, 267 268 const QDateTime &from, -
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();