Ticket #6478: program-timestamp.3.patch
File program-timestamp.3.patch, 25.8 KB (added by , 15 years ago) |
---|
-
libs/libmythtv/eit.cpp
5 5 using namespace std; 6 6 7 7 // MythTV includes 8 #include "listingsources.h" 8 9 #include "mythdb.h" 9 10 #include "mythverbose.h" 10 11 #include "eit.h" … … 388 389 query.bindValue(":SYNDICATENO", lsyndicatedepisodenumber); 389 390 query.bindValue(":AIRDATE", lairdate.isEmpty() ? "0000" : lairdate); 390 391 query.bindValue(":ORIGAIRDATE", loriginalairdate); 391 query.bindValue(":LSOURCE", 1);392 query.bindValue(":LSOURCE", kEIT); 392 393 query.bindValue(":SERIESID", lseriesId); 393 394 query.bindValue(":PROGRAMID", lprogramId); 394 395 query.bindValue(":PREVSHOWN", lpreviouslyshown); … … 553 554 query.bindValue(":SYNDICATENO", syndicatedepisodenumber); 554 555 query.bindValue(":AIRDATE", airdate.isEmpty() ? "0000" : airdate); 555 556 query.bindValue(":ORIGAIRDATE", originalairdate); 556 query.bindValue(":LSOURCE", 1);557 query.bindValue(":LSOURCE", kEIT); 557 558 query.bindValue(":SERIESID", lseriesId); 558 559 query.bindValue(":PROGRAMID", lprogramId); 559 560 query.bindValue(":PREVSHOWN", previouslyshown); -
libs/libmythtv/libmythtv.pro
161 161 HEADERS += viewschdiff.h livetvchain.h 162 162 HEADERS += playgroup.h progdetails.h 163 163 HEADERS += channelsettings.h previewgenerator.h 164 HEADERS += transporteditor.h 164 HEADERS += transporteditor.h listingsources.h 165 165 HEADERS += myth_imgconvert.h 166 166 167 167 # Remove when everything is switched to MythUI -
libs/libmythtv/dbox2epg.cpp
9 9 10 10 #include "dbox2channel.h" 11 11 #include "dbox2epg.h" 12 #include "listingsources.h" 12 13 #include "mythdb.h" 13 14 #include "mythverbose.h" 14 15 #include "tv_rec.h" … … 183 184 query.prepare("INSERT INTO program " 184 185 " (chanid, starttime, endtime, " 185 186 " title, subtitle, description, " 186 " category, airdate, stars) " 187 " category, airdate, stars, " 188 " listingsource)" 187 189 "VALUES " 188 190 " (:CHANID, :STARTTIME, :ENDTIME, " 189 191 " :TITLE, :SUBTITLE, :DESCRIPTION, " 190 " :CATEGORY,:AIRDATE, :STARS)"); 192 " :CATEGORY,:AIRDATE, :STARS, " 193 " :LSOURCE);"); 191 194 192 195 query.bindValue(":CHANID", chanid); 193 196 query.bindValue(":STARTTIME", startTime); … … 198 201 query.bindValue(":CATEGORY", category); 199 202 query.bindValue(":AIRDATE", "0"); 200 203 query.bindValue(":STARS", "0"); 204 query.bindValue(":LSOURCE", kDBox2EPG); 201 205 202 206 if (!query.exec()) 203 207 MythDB::DBError("Saving new program", query); -
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
13 13 #include "sourceutil.h" 14 14 #include "channelutil.h" 15 15 #include "frequencytables.h" 16 #include "listingsources.h" 16 17 #include "mythwidgets.h" 17 18 #include "mythcontext.h" 18 19 #include "mythdb.h" … … 824 825 return true; 825 826 } 826 827 827 void DataDirectProcessor::DataDirectProgramUpdate( void)828 void DataDirectProcessor::DataDirectProgramUpdate(int sourceid, const QDateTime &from, const QDateTime &to) 828 829 { 829 830 MSqlQuery query(MSqlQuery::DDCon()); 830 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 program.category = dd_genre.class" 838 " AND dd_genre.relevance = '0'" 839 " LEFT JOIN dd_v_program" 840 " ON program.chanid = dd_v_program.chanid" 841 " AND program.starttime = DATE_ADD(dd_v_program.starttime, INTERVAL channel.tmoffset MINUTE)" 842 " AND program.endtime = DATE_ADD(dd_v_program.endtime, INTERVAL channel.tmoffset MINUTE)" 843 " AND program.title = dd_v_program.title" 844 " AND program.subtitle = dd_v_program.subtitle" 845 " AND program.description = dd_v_program.description" 846 " AND program.showtype = dd_v_program.showtype" 847 " AND program.category_type = dd_v_program.category_type" 848 " AND program.airdate = dd_v_program.airdate" 849 " AND program.stars = dd_v_program.stars" 850 " AND program.stereo = dd_v_program.stereo" 851 " AND program.subtitled = dd_v_program.subtitled" 852 " AND program.subtitletypes = (dd_v_program.subtitled << 1) | dd_v_program.closecaptioned" 853 " AND program.videoprop = dd_v_program.hdtv" 854 " AND program.audioprop = (dd_v_program.dolby << 3) | dd_v_program.stereo" 855 " AND program.hdtv = dd_v_program.hdtv" 856 " AND program.closecaptioned = dd_v_program.closecaptioned" 857 " AND program.partnumber = dd_v_program.partnumber" 858 " AND program.parttotal = dd_v_program.parttotal" 859 " AND program.seriesid = dd_v_program.seriesid" 860 " AND program.originalairdate <=> dd_v_program.originalairdate" 861 " AND program.colorcode = dd_v_program.colorcode" 862 " AND program.syndicatedepisodenumber = dd_v_program.syndicatedepisodenumber" 863 " AND program.programid = dd_v_program.programid" 864 " WHERE" 865 " (channel.chanid is NULL" 866 " OR (dd_genre.programid is NULL" 867 " AND (SELECT COUNT(*) FROM dd_genre" 868 " WHERE programid = program.programid))" 869 " OR dd_v_program.chanid is NULL)" 870 " AND program.starttime >= DATE_ADD(:FROM, INTERVAL channel.tmoffset MINUTE)" 871 " AND program.starttime < DATE_ADD(:TO, INTERVAL channel.tmoffset MINUTE)" 872 " AND channel.sourceid = :SOURCEID"); 873 874 QString preferredSource(gContext->GetSetting("PreferredListingsSource")); 875 if (!preferredSource.isEmpty() && preferredSource != "datadirect") 876 queryString += " AND program.listingsource = " + QString::number(kDataDirect); 877 878 queryString += ';'; 879 880 query.prepare(queryString); 881 query.bindValue(":FROM", from); 882 query.bindValue(":TO", to); 883 query.bindValue(":SOURCEID", sourceid); 884 if (!query.exec()) 885 MythDB::DBError("Deleting changed entries from program table", query); 886 887 query.prepare("DELETE dd_v_program FROM dd_v_program" 888 " INNER JOIN channel" 889 " ON dd_v_program.chanid = channel.chanid" 890 " LEFT JOIN dd_genre" 891 " ON dd_v_program.programid = dd_genre.programid" 892 " AND dd_genre.relevance = '0'" 893 " INNER JOIN program" 894 " ON (program.chanid = dd_v_program.chanid" 895 " AND program.starttime = DATE_ADD(dd_v_program.starttime, INTERVAL channel.tmoffset MINUTE)" 896 " AND program.endtime = DATE_ADD(dd_v_program.endtime, INTERVAL channel.tmoffset MINUTE)" 897 " AND program.title = dd_v_program.title" 898 " AND program.subtitle = dd_v_program.subtitle" 899 " AND program.description = dd_v_program.description" 900 " AND program.showtype = dd_v_program.showtype" 901 " AND program.category = dd_genre.class" 902 " AND program.category_type = dd_v_program.category_type" 903 " AND program.airdate = dd_v_program.airdate" 904 " AND program.stars = dd_v_program.stars" 905 " AND program.stereo = dd_v_program.stereo" 906 " AND program.subtitled = dd_v_program.subtitled" 907 " AND program.subtitletypes = (dd_v_program.subtitled << 1) | dd_v_program.closecaptioned" 908 " AND program.videoprop = dd_v_program.hdtv" 909 " AND program.audioprop = (dd_v_program.dolby << 3) | dd_v_program.stereo" 910 " AND program.hdtv = dd_v_program.hdtv" 911 " AND program.closecaptioned = dd_v_program.closecaptioned" 912 " AND program.partnumber = dd_v_program.partnumber" 913 " AND program.parttotal = dd_v_program.parttotal" 914 " AND program.seriesid = dd_v_program.seriesid" 915 " AND program.originalairdate <=> dd_v_program.originalairdate" 916 " AND program.colorcode = dd_v_program.colorcode" 917 " AND program.syndicatedepisodenumber = dd_v_program.syndicatedepisodenumber" 918 " AND program.programid = dd_v_program.programid" 919 " WHERE dd_genre.programid IS NOT NULL" 920 " OR program.category = ''" 921 ";"); 922 923 if (!query.exec("DELETE dd_v_program FROM dd_v_program" 924 " INNER JOIN program" 925 " ON dd_v_program.chanid = program.chanid" 926 " AND ((dd_v_program.endtime > program.starttime" 927 " AND dd_v_program.endtime <= program.endtime)" 928 " OR (dd_v_program.starttime >= program.starttime" 929 " AND dd_v_program.starttime < program.endtime)" 930 " OR (dd_v_program.starttime < program.starttime" 931 " AND dd_v_program.endtime > program.endtime));")) 932 MythDB::DBError("Deleting up-to-date entries from listings source data", query); 933 831 934 //cerr << "Adding rows to main program table from view table..\n"; 832 if (!query.exec("INSERT IGNORE INTO program (chanid, starttime, endtime, " 833 "title, subtitle, description, " 834 "showtype, category, category_type, " 835 "airdate, stars, previouslyshown, stereo, subtitled, " 836 "subtitletypes, videoprop, audioprop, " 837 "hdtv, closecaptioned, partnumber, parttotal, seriesid, " 838 "originalairdate, colorcode, syndicatedepisodenumber, " 839 "programid) " 840 "SELECT dd_v_program.chanid, " 841 "DATE_ADD(starttime, INTERVAL channel.tmoffset MINUTE), " 842 "DATE_ADD(endtime, INTERVAL channel.tmoffset MINUTE), " 843 "title, subtitle, description, " 844 "showtype, dd_genre.class, category_type, " 845 "airdate, stars, previouslyshown, stereo, subtitled, " 846 "(subtitled << 1 ) | closecaptioned, hdtv, " 847 "(dolby << 3) | stereo, " 848 "hdtv, closecaptioned, partnumber, parttotal, seriesid, " 849 "originalairdate, colorcode, syndicatedepisodenumber, " 850 "dd_v_program.programid FROM (dd_v_program, channel) " 851 "LEFT JOIN dd_genre ON (" 852 "dd_v_program.programid = dd_genre.programid AND " 853 "dd_genre.relevance = '0') " 854 "WHERE dd_v_program.chanid = channel.chanid;")) 935 query.prepare("INSERT IGNORE INTO program (chanid, starttime, endtime, " 936 "title, subtitle, description, " 937 "showtype, category, category_type, " 938 "airdate, stars, previouslyshown, stereo, subtitled, " 939 "subtitletypes, videoprop, audioprop, " 940 "hdtv, closecaptioned, partnumber, parttotal, seriesid, " 941 "originalairdate, colorcode, syndicatedepisodenumber, " 942 "programid, listingsource) " 943 "SELECT dd_v_program.chanid, " 944 "DATE_ADD(starttime, INTERVAL channel.tmoffset MINUTE), " 945 "DATE_ADD(endtime, INTERVAL channel.tmoffset MINUTE), " 946 "title, subtitle, description, " 947 "showtype, dd_genre.class, category_type, " 948 "airdate, stars, previouslyshown, stereo, subtitled, " 949 "(subtitled << 1 ) | closecaptioned, hdtv, " 950 "(dolby << 3) | stereo, " 951 "hdtv, closecaptioned, partnumber, parttotal, seriesid, " 952 "originalairdate, colorcode, syndicatedepisodenumber, " 953 "dd_v_program.programid, :LSOURCE " 954 "FROM (dd_v_program, channel) " 955 "LEFT JOIN dd_genre ON (" 956 "dd_v_program.programid = dd_genre.programid AND " 957 "dd_genre.relevance = '0') " 958 "WHERE dd_v_program.chanid = channel.chanid;"); 959 query.bindValue(":LSOURCE", kDataDirect); 960 if (!query.exec()) 855 961 MythDB::DBError("Inserting into program table", query); 856 962 857 963 //cerr << "Finished adding rows to main program table...\n"; -
libs/libmythtv/programdata.cpp
1 1 // MythTV headers 2 #include "listingsources.h" 2 3 #include "mythdb.h" 3 4 #include "mythverbose.h" 4 5 #include "programinfo.h" … … 27 28 return false; 28 29 } 29 30 30 void ProgramData::clearDataByChannel(int chanid, QDateTime from, QDateTime to )31 void ProgramData::clearDataByChannel(int chanid, QDateTime from, QDateTime to, bool clearprogram) 31 32 { 32 33 int secs; 33 34 QDateTime newFrom, newTo; … … 49 50 newFrom = from.addSecs(secs); 50 51 newTo = to.addSecs(secs); 51 52 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(); 53 if (clearprogram) { 54 query.prepare("DELETE FROM program " 55 "WHERE starttime >= :FROM AND starttime < :TO " 56 "AND chanid = :CHANID ;"); 57 query.bindValue(":FROM", newFrom); 58 query.bindValue(":TO", newTo); 59 query.bindValue(":CHANID", chanid); 60 query.exec(); 61 } 59 62 60 63 query.prepare("DELETE FROM programrating " 61 64 "WHERE starttime >= :FROM AND starttime < :TO " … … 82 85 query.exec(); 83 86 } 84 87 85 void ProgramData::clearDataBySource(int sourceid, QDateTime from, QDateTime to )88 void ProgramData::clearDataBySource(int sourceid, QDateTime from, QDateTime to, bool clearprogram) 86 89 { 87 90 MSqlQuery query(MSqlQuery::InitCon()); 88 91 query.prepare("SELECT chanid FROM channel WHERE " … … 97 100 while (query.next()) 98 101 { 99 102 int chanid = query.value(0).toInt(); 100 clearDataByChannel(chanid, from, to );103 clearDataByChannel(chanid, from, to, clearprogram); 101 104 } 102 105 } 103 106 } … … 347 350 "audioprop,videoprop,subtitletypes,subtitled," 348 351 "closecaptioned,partnumber,parttotal," 349 352 "seriesid,originalairdate,showtype,colorcode," 350 "syndicatedepisodenumber,programid) " 353 "syndicatedepisodenumber,programid," 354 "listingsource) " 351 355 "VALUES(:CHANID,:STARTTIME,:ENDTIME,:TITLE," 352 356 ":SUBTITLE,:DESCRIPTION,:CATEGORY,:CATEGORY_TYPE," 353 357 ":AIRDATE,:STARS,:PREVIOUSLYSHOWN," … … 355 359 ":AUDIOPROP,:VIDEOPROP,:SUBTYPES,:SUBTITLED," 356 360 ":CLOSECAPTIONED,:PARTNUMBER,:PARTTOTAL," 357 361 ":SERIESID,:ORIGINALAIRDATE,:SHOWTYPE,:COLORCODE," 358 ":SYNDICATEDEPISODENUMBER,:PROGRAMID );");362 ":SYNDICATEDEPISODENUMBER,:PROGRAMID,:LSOURCE);"); 359 363 query.bindValue(":CHANID", chanid); 360 364 query.bindValue(":STARTTIME", (*i).start); 361 365 query.bindValue(":ENDTIME", (*i).end); … … 383 387 query.bindValue(":COLORCODE", (*i).colorcode); 384 388 query.bindValue(":SYNDICATEDEPISODENUMBER", (*i).syndicatedepisodenumber); 385 389 query.bindValue(":PROGRAMID", (*i).programid); 390 query.bindValue(":LSOURCE", kXMLTV); 386 391 if (!query.exec()) 387 392 MythDB::DBError("program insert", query); 388 393 -
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();