diff -Naur libmythtv/eithelper.cpp libmythtvclone/eithelper.cpp
old
|
new
|
|
72 | 72 | uint insertCount = 0; |
73 | 73 | |
74 | 74 | if (db_events.empty()) |
| 75 | { |
| 76 | LOG(VB_EIT, LOG_INFO, |
| 77 | LOC + QString("db_events.empty() - return from ProcessEvents")); |
75 | 78 | return 0; |
| 79 | } |
76 | 80 | |
77 | 81 | MSqlQuery query(MSqlQuery::InitCon()); |
78 | 82 | for (uint i = 0; (i < kChunkSize) && (db_events.size() > 0); i++) |
79 | 83 | { |
80 | 84 | DBEventEIT *event = db_events.dequeue(); |
81 | | eitList_lock.unlock(); |
82 | 85 | |
83 | 86 | eitfixup->Fix(*event); |
84 | 87 | |
| 88 | LOG(VB_EIT, LOG_INFO, LOC + |
| 89 | QString("CHANID::%1<-\nSTARTTIME::%2<-\nTITLE::%3<-\nSUBTITLE::%4<-\nDESCRIPTION:: %5<-") |
| 90 | .arg(event->chanid).arg(event->starttime.toString()) |
| 91 | .arg(event->title).arg(event->subtitle) |
| 92 | .arg(event->description)); |
| 93 | |
85 | 94 | insertCount += event->UpdateDB(query, 1000); |
86 | 95 | maxStarttime = max (maxStarttime, event->starttime); |
87 | 96 | |
88 | 97 | delete event; |
89 | | eitList_lock.lock(); |
90 | 98 | } |
91 | 99 | |
92 | 100 | if (!insertCount) |
diff -Naur libmythtv/eitscanner.cpp libmythtvclone/eitscanner.cpp
old
|
new
|
|
45 | 45 | |
46 | 46 | void EITScanner::TeardownAll(void) |
47 | 47 | { |
| 48 | LOG(VB_EIT, LOG_INFO, |
| 49 | LOC_ID + QString("EITScanner::TeardownAll")); |
48 | 50 | StopActiveScan(); |
49 | 51 | if (!exitThread) |
50 | 52 | { |
… |
… |
|
99 | 101 | |
100 | 102 | if (list_size) |
101 | 103 | { |
| 104 | LOG(VB_EIT, LOG_INFO, |
| 105 | LOC_ID + QString("BEGIN eitHelper->ProcessEvents")); |
102 | 106 | eitCount += eitHelper->ProcessEvents(); |
103 | 107 | t.start(); |
| 108 | LOG(VB_EIT, LOG_INFO, |
| 109 | LOC_ID + QString("END eitHelper->ProcessEvents")); |
| 110 | t.start(); |
104 | 111 | } |
105 | 112 | |
106 | 113 | // Tell the scheduler to run if |
… |
… |
|
118 | 125 | // Is it time to move to the next transport in active scan? |
119 | 126 | if (activeScan && (MythDate::current() > activeScanNextTrig)) |
120 | 127 | { |
121 | | // if there have been any new events, tell scheduler to run. |
| 128 | LOG(VB_EIT, LOG_INFO, |
| 129 | LOC_ID + QString("activeScan and time to move to the next channel")); |
| 130 | // if there have been any new events, tell scheduler to run. |
122 | 131 | if (eitCount) |
123 | 132 | { |
124 | 133 | LOG(VB_EIT, LOG_INFO, |
… |
… |
|
128 | 137 | } |
129 | 138 | |
130 | 139 | if (activeScanNextChan == activeScanChannels.end()) |
| 140 | { |
131 | 141 | activeScanNextChan = activeScanChannels.begin(); |
| 142 | activeScanStopped = true; |
| 143 | activeScanCond.wakeAll(); |
| 144 | } |
132 | 145 | |
133 | 146 | if (!(*activeScanNextChan).isEmpty()) |
134 | 147 | { |
… |
… |
|
150 | 163 | |
151 | 164 | // 24 hours ago |
152 | 165 | eitHelper->PruneEITCache(activeScanNextTrig.toTime_t() - 86400); |
| 166 | LOG(VB_EIT, LOG_INFO, |
| 167 | LOC_ID + QString("PruneEITCache DONE ")); |
153 | 168 | } |
154 | 169 | |
155 | 170 | lock.lock(); |
… |
… |
|
158 | 173 | |
159 | 174 | if (!activeScan && !activeScanStopped) |
160 | 175 | { |
| 176 | LOG(VB_EIT, LOG_INFO, |
| 177 | LOC_ID + QString("Not activeScan and not activeScanStopped ")); |
161 | 178 | activeScanStopped = true; |
162 | 179 | activeScanCond.wakeAll(); |
163 | 180 | } |
164 | 181 | } |
| 182 | LOG(VB_EIT, LOG_INFO, LOC_ID + |
| 183 | QString("Exiting while not exitThread loop - channel %1" |
| 184 | " activeScanNextTrig 2").arg(*activeScanNextChan)); |
165 | 185 | |
166 | 186 | if (eitCount) /* some events have been handled since the last schedule request */ |
167 | 187 | { |
… |
… |
|
227 | 247 | void EITScanner::StartActiveScan(TVRec *_rec, uint max_seconds_per_source) |
228 | 248 | { |
229 | 249 | rec = _rec; |
| 250 | uint i, randomStart; |
230 | 251 | |
231 | 252 | if (activeScanChannels.isEmpty()) |
232 | 253 | { |
233 | 254 | // TODO get input name and use it in crawl. |
| 255 | // Place channels with earliest "latest starttime" first in list |
234 | 256 | MSqlQuery query(MSqlQuery::InitCon()); |
235 | 257 | query.prepare( |
236 | | "SELECT channum, MIN(chanid) " |
237 | | "FROM channel, cardinput, capturecard, videosource " |
| 258 | "SELECT channum, channel.chanid " |
| 259 | "FROM cardinput, capturecard, videosource, channel LEFT JOIN program " |
| 260 | "ON channel.chanid = program.chanid " |
238 | 261 | "WHERE cardinput.sourceid = channel.sourceid AND " |
239 | 262 | " videosource.sourceid = channel.sourceid AND " |
240 | 263 | " capturecard.cardid = cardinput.cardid AND " |
… |
… |
|
244 | 267 | " channum != '' AND " |
245 | 268 | " cardinput.cardid = :CARDID " |
246 | 269 | "GROUP BY mplexid " |
247 | | "ORDER BY cardinput.sourceid, mplexid, " |
248 | | " atsc_major_chan, atsc_minor_chan "); |
| 270 | "ORDER BY MAX(starttime) "); |
| 271 | |
249 | 272 | query.bindValue(":CARDID", rec->GetCaptureCardNum()); |
250 | 273 | |
251 | 274 | if (!query.exec() || !query.isActive()) |
… |
… |
|
261 | 284 | } |
262 | 285 | |
263 | 286 | LOG(VB_EIT, LOG_INFO, LOC_ID + |
264 | | QString("StartActiveScan called with %1 multiplexes") |
265 | | .arg(activeScanChannels.size())); |
| 287 | QString("StartActiveScan called with %1 multiplexes %2") |
| 288 | .arg(activeScanChannels.size()).arg(activeScanChannels.join(","))); |
266 | 289 | |
267 | 290 | // Start at a random channel. This is so that multiple cards with |
268 | 291 | // the same source don't all scan the same channels in the same |
269 | 292 | // order when the backend is first started up. |
270 | 293 | if (activeScanChannels.size()) |
271 | 294 | { |
272 | | uint randomStart = random() % activeScanChannels.size(); |
273 | | activeScanNextChan = activeScanChannels.begin()+randomStart; |
| 295 | srandom(time(0)); |
| 296 | // If more than 5 channels, only randomize the first five |
| 297 | if (activeScanChannels.size() > 4){ |
| 298 | // randomstart one more than number in "if" |
| 299 | randomStart = 5; |
| 300 | } |
| 301 | else{ |
| 302 | randomStart = activeScanChannels.size(); |
| 303 | } |
| 304 | for (i=0;i<randomStart;i++) |
| 305 | { |
| 306 | activeScanChannels.swap(i,random() % randomStart); |
| 307 | LOG(VB_EIT, LOG_DEBUG, LOC_ID + |
| 308 | QString("StartActiveScan swap with %1 multiplexes %2") |
| 309 | .arg(activeScanChannels.size()) |
| 310 | .arg(activeScanChannels.join(","))); |
| 311 | } |
| 312 | activeScanChannels.swap(activeScanChannels.size() -1 - random() % randomStart, activeScanChannels.size() - 1); |
| 313 | activeScanNextChan = activeScanChannels.begin(); |
274 | 314 | |
275 | 315 | activeScanNextTrig = MythDate::current(); |
276 | 316 | activeScanTrigTime = max_seconds_per_source; |
… |
… |
|
280 | 320 | activeScanStopped = false; |
281 | 321 | activeScan = true; |
282 | 322 | } |
| 323 | LOG(VB_EIT, LOG_INFO, LOC_ID + |
| 324 | QString("StartActiveScan random with %1 multiplexes %2") |
| 325 | .arg(activeScanChannels.size()).arg(activeScanChannels.join(","))); |
283 | 326 | } |
284 | 327 | |
285 | 328 | void EITScanner::StopActiveScan(void) |
286 | 329 | { |
| 330 | LOG(VB_EIT, LOG_INFO, LOC_ID + |
| 331 | QString("EITScanner::StopActiveScan")); |
287 | 332 | QMutexLocker locker(&lock); |
288 | 333 | |
289 | 334 | activeScanStopped = false; |
diff -Naur libmythtv/programdata.cpp libmythtvclone/programdata.cpp
old
|
new
|
|
215 | 215 | int i = -1; |
216 | 216 | |
217 | 217 | if (!count) |
| 218 | { |
| 219 | LOG(VB_EIT, LOG_DEBUG,QString("GetOverlappingPrograms returned zero.")); |
218 | 220 | return InsertDB(query, chanid); |
219 | | |
| 221 | } |
220 | 222 | // move overlapping programs out of the way and update existing if possible |
221 | 223 | match = GetMatch(programs, i); |
222 | 224 | |
… |
… |
|
483 | 485 | if (match.subtitle.length() >= lsubtitle.length()) |
484 | 486 | lsubtitle = match.subtitle; |
485 | 487 | |
486 | | if (match.description.length() >= ldesc.length()) |
487 | | ldesc = match.description; |
| 488 | // if (match.description.length() >= ldesc.length()) |
| 489 | // ldesc = match.description; |
488 | 490 | |
489 | 491 | if (lcategory.isEmpty() && !match.category.isEmpty()) |
490 | 492 | lcategory = match.category; |
… |
… |
|
528 | 530 | query.prepare( |
529 | 531 | "UPDATE program " |
530 | 532 | "SET title = :TITLE, subtitle = :SUBTITLE, " |
531 | | " description = :DESC, " |
| 533 | " description = :DESCR, " |
532 | 534 | " category = :CATEGORY, category_type = :CATTYPE, " |
533 | 535 | " starttime = :STARTTIME, endtime = :ENDTIME, " |
534 | 536 | " closecaptioned = :CC, subtitled = :HASSUBTITLES, " |
… |
… |
|
548 | 550 | query.bindValue(":OLDSTART", match.starttime); |
549 | 551 | query.bindValue(":TITLE", denullify(ltitle)); |
550 | 552 | query.bindValue(":SUBTITLE", denullify(lsubtitle)); |
551 | | query.bindValue(":DESC", denullify(ldesc)); |
| 553 | query.bindValue(":DESCR", denullify(ldesc)); |
552 | 554 | query.bindValue(":CATEGORY", denullify(lcategory)); |
553 | 555 | query.bindValue(":CATTYPE", lcattype); |
554 | 556 | query.bindValue(":STARTTIME", starttime); |
… |
… |
|
570 | 572 | query.bindValue(":PROGRAMID", denullify(lprogramId)); |
571 | 573 | query.bindValue(":PREVSHOWN", lpreviouslyshown); |
572 | 574 | |
| 575 | QString description = QString(""); |
| 576 | |
573 | 577 | if (!query.exec()) |
574 | 578 | { |
575 | 579 | MythDB::DBError("InsertDB", query); |
… |
… |
|
722 | 726 | " :AIRDATE, :ORIGAIRDATE, :LSOURCE, " |
723 | 727 | " :SERIESID, :PROGRAMID, :PREVSHOWN) "); |
724 | 728 | |
| 729 | // if(description == NULL) |
| 730 | // { |
| 731 | // LOG(VB_GENERAL, LOG_INFO, |
| 732 | // QString("program.description NULL - starttime %1 title: %2") |
| 733 | // .arg(starttime.toString()).arg(title)); |
| 734 | // |
| 735 | // } |
725 | 736 | QString cattype = myth_category_type_to_string(categoryType); |
726 | 737 | QString empty(""); |
727 | 738 | query.bindValue(":CHANID", chanid); |
… |
… |
|
750 | 761 | query.bindValue(":PROGRAMID", denullify(programId)); |
751 | 762 | query.bindValue(":PREVSHOWN", previouslyshown); |
752 | 763 | |
| 764 | QString description = QString(""); |
| 765 | |
753 | 766 | if (!query.exec()) |
754 | 767 | { |
755 | 768 | MythDB::DBError("InsertDB", query); |
… |
… |
|
823 | 836 | .arg(endtime.toString(Qt::ISODate)) |
824 | 837 | .arg(channel) |
825 | 838 | .arg(title)); |
| 839 | // if(description == NULL) |
| 840 | // { |
| 841 | // LOG(VB_GENERAL, LOG_INFO, |
| 842 | // QString("New program program.description NULL - starttime %1 title: %2") |
| 843 | // .arg(starttime.toString()).arg(title)); |
| 844 | // |
| 845 | // } |
826 | 846 | |
827 | 847 | query.prepare( |
828 | 848 | "REPLACE INTO program (" |
… |
… |
|
884 | 904 | query.bindValue(":TITLEPRON", title_pronounce); |
885 | 905 | query.bindValue(":COLORCODE", colorcode); |
886 | 906 | |
| 907 | QString description = QString(""); |
| 908 | |
887 | 909 | if (!query.exec()) |
888 | 910 | { |
889 | 911 | MythDB::DBError("program insert", query); |
… |
… |
|
1219 | 1241 | " endtime = :END AND " |
1220 | 1242 | " title = :TITLE AND " |
1221 | 1243 | " subtitle = :SUBTITLE AND " |
1222 | | " description = :DESC AND " |
| 1244 | " description = :DESCR AND " |
1223 | 1245 | " category = :CATEGORY AND " |
1224 | 1246 | " category_type = :CATEGORY_TYPE AND " |
1225 | 1247 | " airdate = :AIRDATE AND " |
… |
… |
|
1245 | 1267 | query.bindValue(":END", pi.endtime); |
1246 | 1268 | query.bindValue(":TITLE", denullify(pi.title)); |
1247 | 1269 | query.bindValue(":SUBTITLE", denullify(pi.subtitle)); |
1248 | | query.bindValue(":DESC", denullify(pi.description)); |
| 1270 | query.bindValue(":DESCR", denullify(pi.description)); |
1249 | 1271 | query.bindValue(":CATEGORY", denullify(pi.category)); |
1250 | 1272 | query.bindValue(":CATEGORY_TYPE", cattype); |
1251 | 1273 | query.bindValue(":AIRDATE", pi.airdate); |
… |
… |
|
1265 | 1287 | denullify(pi.syndicatedepisodenumber)); |
1266 | 1288 | query.bindValue(":PROGRAMID", denullify(pi.programId)); |
1267 | 1289 | |
| 1290 | // QString pi.description = QString(""); |
| 1291 | |
1268 | 1292 | if (query.exec() && query.next()) |
1269 | 1293 | return query.value(0).toUInt() > 0; |
1270 | 1294 | |
diff -Naur libmythtv/tv_rec.cpp libmythtvclone/tv_rec.cpp
old
|
new
|
|
1264 | 1264 | scanner = new EITScanner(cardid); |
1265 | 1265 | eitScanStartTime = eitScanStartTime.addSecs( |
1266 | 1266 | eitCrawlIdleStart + eit_start_rand(cardid, eitTransportTimeout)); |
| 1267 | LOG(VB_GENERAL, LOG_INFO, LOC + "Adjusted Scan start " + eitScanStartTime.toString()); |
1267 | 1268 | } |
1268 | 1269 | else |
| 1270 | { |
1269 | 1271 | eitScanStartTime = eitScanStartTime.addYears(1); |
| 1272 | LOG(VB_GENERAL, LOG_INFO, LOC + "EIT scan DISABLED " + eitScanStartTime.toString()); |
| 1273 | } |
1270 | 1274 | |
1271 | 1275 | while (HasFlags(kFlagRunMainLoop)) |
1272 | 1276 | { |
… |
… |
|
1413 | 1417 | } |
1414 | 1418 | else |
1415 | 1419 | { |
| 1420 | LOG(VB_GENERAL, LOG_INFO, LOC + QString("StartActiveScan eitTransportTimeout is %1 ") |
| 1421 | .arg(eitTransportTimeout)); |
1416 | 1422 | scanner->StartActiveScan(this, eitTransportTimeout); |
1417 | 1423 | SetFlags(kFlagEITScannerRunning); |
1418 | | eitScanStartTime = MythDate::current().addYears(1); |
| 1424 | eitScanStartTime = MythDate::current().addSecs(8192); |
| 1425 | //eitScanStartTime = MythDate::current().addYears(1); |
1419 | 1426 | } |
1420 | 1427 | } |
1421 | 1428 | |
… |
… |
|
3928 | 3935 | ClearFlags(kFlagNeedToStartRecorder); |
3929 | 3936 | newRecStatus = rsFailed; |
3930 | 3937 | |
3931 | | if (scanner && HasFlags(kFlagEITScannerRunning)) |
3932 | | { |
3933 | | scanner->StopActiveScan(); |
3934 | | ClearFlags(kFlagEITScannerRunning); |
3935 | | } |
| 3938 | return NULL; |
| 3939 | // if (scanner && HasFlags(kFlagEITScannerRunning)) |
| 3940 | // // { |
| 3941 | // // scanner->StopActiveScan(); |
| 3942 | // // ClearFlags(kFlagEITScannerRunning); |
| 3943 | // // } |
| 3944 | |
3936 | 3945 | } |
3937 | 3946 | else |
3938 | 3947 | { |