diff -Naur mythtv_unpatched/libs/libmythtv/channelsettings.cpp mythtv/libs/libmythtv/channelsettings.cpp
old
|
new
|
|
82 | 82 | }; |
83 | 83 | }; |
84 | 84 | |
| 85 | class TimeOffset: public SpinBoxSetting, public CSetting { |
| 86 | public: |
| 87 | TimeOffset(const ChannelID& id): |
| 88 | SpinBoxSetting(-1440, 1440, 1), CSetting(id, "tmoffset") { |
| 89 | setLabel(QObject::tr("DataDirect") + " " + QObject::tr("Time Offset")); |
| 90 | setHelpText(QObject::tr("Offset (in minutes) to apply to the program " |
| 91 | "guide data during import. This can be used when the " |
| 92 | "listings for a particular channel are in a different " |
| 93 | "time zone.") + " " + |
| 94 | QObject::tr("(Works for DataDirect listings only.)")); |
| 95 | }; |
| 96 | }; |
| 97 | |
85 | 98 | class Rank: public SpinBoxSetting, public CSetting { |
86 | 99 | public: |
87 | 100 | Rank(const ChannelID& id): |
… |
… |
|
284 | 297 | connect(source,SIGNAL(valueChanged(const QString&)),this,SLOT(sourceChanged(const QString&))); |
285 | 298 | #else |
286 | 299 | addChild(new XmltvID(id)); |
| 300 | addChild(new TimeOffset(id)); |
287 | 301 | #endif |
288 | 302 | }; |
289 | 303 | |
… |
… |
|
347 | 361 | addChild(new Colour(id)); |
348 | 362 | addChild(new Hue(id)); |
349 | 363 | }; |
| 364 | |
| 365 | /* vim: set expandtab tabstop=4 shiftwidth=4: */ |
diff -Naur mythtv_unpatched/libs/libmythtv/dbcheck.cpp mythtv/libs/libmythtv/dbcheck.cpp
old
|
new
|
|
10 | 10 | #include "mythdbcon.h" |
11 | 11 | |
12 | 12 | /// This is the DB schema version expected by the running MythTV instance. |
13 | | const QString currentDatabaseVersion = "1129"; |
| 13 | const QString currentDatabaseVersion = "1130"; |
14 | 14 | |
15 | 15 | static bool UpdateDBVersionNumber(const QString &newnumber); |
16 | 16 | static bool performActualUpdate(const QString updates[], QString version, |
… |
… |
|
240 | 240 | The 'xmltvid' field is used to identify this channel to the listings |
241 | 241 | provider. |
242 | 242 | |
| 243 | The 'tmoffset' field is used to apply an offset (in minutes) from the listings |
| 244 | provided by the provider to a new time in the MythTV program guide database. |
| 245 | This is very handy when the listings provider has listings which are offset |
| 246 | by a few hours on individual channels with the rest of them being correct. |
| 247 | |
243 | 248 | The 'recpriority' field is used tell the scheduler from which of two |
244 | 249 | otherwise equivalent programs on two different channels should be |
245 | 250 | prefered, a higher number means this channel is more preferred. |
… |
… |
|
2112 | 2117 | return false; |
2113 | 2118 | } |
2114 | 2119 | |
| 2120 | if (dbver == "1129") |
| 2121 | { |
| 2122 | const QString updates[] = { |
| 2123 | "ALTER TABLE channel ADD COLUMN tmoffset INT NOT NULL default '0';", |
| 2124 | "" |
| 2125 | }; |
| 2126 | |
| 2127 | if (!performActualUpdate(updates, "1130", dbver)) |
| 2128 | return false; |
| 2129 | } |
| 2130 | |
2115 | 2131 | //"ALTER TABLE capturecard DROP COLUMN dvb_recordts;" in 0.21 |
2116 | 2132 | //"ALTER TABLE capturecard DROP COLUMN dvb_hw_decoder;" in 0.21 |
2117 | 2133 | |
diff -Naur mythtv_unpatched/programs/mythfilldatabase/filldata.cpp mythtv/programs/mythfilldatabase/filldata.cpp
old
|
new
|
|
225 | 225 | |
226 | 226 | void clearDataByChannel(int chanid, QDateTime from, QDateTime to) |
227 | 227 | { |
| 228 | int secs; |
| 229 | QDateTime newFrom, newTo; |
| 230 | |
228 | 231 | MSqlQuery query(MSqlQuery::InitCon()); |
229 | 232 | |
| 233 | query.prepare("SELECT tmoffset FROM channel where chanid = :CHANID ;"); |
| 234 | query.bindValue(":CHANID", chanid); |
| 235 | query.exec(); |
| 236 | if (!query.isActive() || query.size() != 1) |
| 237 | { |
| 238 | MythContext::DBError("clearDataByChannel", query); |
| 239 | return; |
| 240 | } |
| 241 | query.next(); |
| 242 | secs = query.value(0).toInt(); |
| 243 | |
| 244 | secs *= 60; |
| 245 | newFrom = from.addSecs(secs); |
| 246 | newTo = to.addSecs(secs); |
| 247 | |
230 | 248 | query.prepare("DELETE FROM program " |
231 | 249 | "WHERE starttime >= :FROM AND starttime < :TO " |
232 | 250 | "AND chanid = :CHANID ;"); |
233 | | query.bindValue(":FROM", from); |
234 | | query.bindValue(":TO", to); |
| 251 | query.bindValue(":FROM", newFrom); |
| 252 | query.bindValue(":TO", newTo); |
235 | 253 | query.bindValue(":CHANID", chanid); |
236 | 254 | query.exec(); |
237 | 255 | |
238 | 256 | query.prepare("DELETE FROM programrating " |
239 | 257 | "WHERE starttime >= :FROM AND starttime < :TO " |
240 | 258 | "AND chanid = :CHANID ;"); |
241 | | query.bindValue(":FROM", from); |
242 | | query.bindValue(":TO", to); |
| 259 | query.bindValue(":FROM", newFrom); |
| 260 | query.bindValue(":TO", newTo); |
243 | 261 | query.bindValue(":CHANID", chanid); |
244 | 262 | query.exec(); |
245 | 263 | |
246 | 264 | query.prepare("DELETE FROM credits " |
247 | 265 | "WHERE starttime >= :FROM AND starttime < :TO " |
248 | 266 | "AND chanid = :CHANID ;"); |
249 | | query.bindValue(":FROM", from); |
250 | | query.bindValue(":TO", to); |
| 267 | query.bindValue(":FROM", newFrom); |
| 268 | query.bindValue(":TO", newTo); |
251 | 269 | query.bindValue(":CHANID", chanid); |
252 | 270 | query.exec(); |
253 | 271 | |
254 | 272 | query.prepare("DELETE FROM programgenres " |
255 | 273 | "WHERE starttime >= :FROM AND starttime < :TO " |
256 | 274 | "AND chanid = :CHANID ;"); |
257 | | query.bindValue(":FROM", from); |
258 | | query.bindValue(":TO", to); |
| 275 | query.bindValue(":FROM", newFrom); |
| 276 | query.bindValue(":TO", newTo); |
259 | 277 | query.bindValue(":CHANID", chanid); |
260 | 278 | query.exec(); |
261 | 279 | } |
… |
… |
|
988 | 1006 | "hdtv, closecaptioned, partnumber, parttotal, seriesid, " |
989 | 1007 | "originalairdate, colorcode, syndicatedepisodenumber, " |
990 | 1008 | "programid) " |
991 | | "SELECT chanid, starttime, endtime, " |
| 1009 | "SELECT dd_v_program.chanid, " |
| 1010 | "DATE_ADD(starttime, INTERVAL channel.tmoffset MINUTE), " |
| 1011 | "DATE_ADD(endtime, INTERVAL channel.tmoffset MINUTE), " |
992 | 1012 | "title, subtitle, description, " |
993 | 1013 | "showtype, dd_genre.class, category_type, " |
994 | 1014 | "airdate, stars, previouslyshown, stereo, subtitled, " |
995 | 1015 | "hdtv, closecaptioned, partnumber, parttotal, seriesid, " |
996 | 1016 | "originalairdate, colorcode, syndicatedepisodenumber, " |
997 | | "dd_v_program.programid FROM dd_v_program " |
| 1017 | "dd_v_program.programid FROM dd_v_program, channel " |
998 | 1018 | "LEFT JOIN dd_genre ON (" |
999 | 1019 | "dd_v_program.programid = dd_genre.programid AND " |
1000 | | "dd_genre.relevance = '0');")) |
| 1020 | "dd_genre.relevance = '0') " |
| 1021 | "WHERE dd_v_program.chanid = channel.chanid;")) |
1001 | 1022 | MythContext::DBError("Inserting into program table", query); |
1002 | 1023 | |
1003 | 1024 | //cerr << "Finished adding rows to main program table...\n"; |
1004 | 1025 | //cerr << "Adding program ratings...\n"; |
1005 | 1026 | |
1006 | 1027 | if (!query.exec("INSERT IGNORE INTO programrating (chanid, starttime, " |
1007 | | "system, rating) SELECT chanid, starttime, 'MPAA', " |
1008 | | "mpaarating FROM dd_v_program WHERE mpaarating != '';")) |
| 1028 | "system, rating) SELECT dd_v_program.chanid, " |
| 1029 | "DATE_ADD(starttime, INTERVAL channel.tmoffset MINUTE), " |
| 1030 | " 'MPAA', " |
| 1031 | "mpaarating FROM dd_v_program, channel WHERE " |
| 1032 | "mpaarating != '' AND dd_v_program.chanid = " |
| 1033 | "channel.chanid")) |
1009 | 1034 | MythContext::DBError("Inserting into programrating table", query); |
1010 | 1035 | |
1011 | 1036 | if (!query.exec("INSERT IGNORE INTO programrating (chanid, starttime, " |
1012 | | "system, rating) SELECT chanid, starttime, 'VCHIP', " |
1013 | | "tvrating FROM dd_v_program WHERE tvrating != '';")) |
| 1037 | "system, rating) SELECT dd_v_program.chanid, " |
| 1038 | "DATE_ADD(starttime, INTERVAL channel.tmoffset MINUTE), " |
| 1039 | "'VCHIP', " |
| 1040 | "tvrating FROM dd_v_program, channel WHERE tvrating != ''" |
| 1041 | " AND dd_v_program.chanid = channel.chanid")) |
1014 | 1042 | MythContext::DBError("Inserting into programrating table", query); |
1015 | 1043 | |
1016 | 1044 | //cerr << "Finished adding program ratings...\n"; |
… |
… |
|
1024 | 1052 | //cerr << "Adding credits entries from production crew list...\n"; |
1025 | 1053 | |
1026 | 1054 | if (!query.exec("INSERT IGNORE INTO credits (chanid, starttime, person, " |
1027 | | "role) SELECT chanid, starttime, person, role " |
1028 | | "FROM dd_productioncrew, dd_v_program, people " |
| 1055 | "role) SELECT dd_v_program.chanid, " |
| 1056 | "DATE_ADD(starttime, INTERVAL channel.tmoffset MINUTE), " |
| 1057 | "person, role " |
| 1058 | "FROM dd_productioncrew, dd_v_program, channel, people " |
1029 | 1059 | "WHERE " |
1030 | 1060 | "((dd_productioncrew.programid = dd_v_program.programid) " |
1031 | | "AND (dd_productioncrew.fullname = people.name));")) |
| 1061 | "AND (dd_productioncrew.fullname = people.name)) " |
| 1062 | "AND dd_v_program.chanid = channel.chanid;")) |
1032 | 1063 | MythContext::DBError("Inserting into credits table", query); |
1033 | 1064 | |
1034 | 1065 | //cerr << "Finished inserting credits...\n"; |
1035 | 1066 | //cerr << "Adding genres...\n"; |
1036 | 1067 | |
1037 | 1068 | if (!query.exec("INSERT IGNORE INTO programgenres (chanid, starttime, " |
1038 | | "relevance, genre) SELECT chanid, starttime, " |
1039 | | "relevance, class FROM dd_v_program, dd_genre " |
1040 | | "WHERE (dd_v_program.programid = dd_genre.programid);")) |
| 1069 | "relevance, genre) SELECT dd_v_program.chanid, " |
| 1070 | "DATE_ADD(starttime, INTERVAL channel.tmoffset MINUTE), " |
| 1071 | "relevance, class FROM dd_v_program, dd_genre, channel " |
| 1072 | "WHERE (dd_v_program.programid = dd_genre.programid) " |
| 1073 | "AND dd_v_program.chanid = channel.chanid")) |
1041 | 1074 | MythContext::DBError("Inserting into programgenres table",query); |
1042 | 1075 | |
1043 | 1076 | //cerr << "Done...\n"; |