| 357 | void HouseKeeper::CleanupOrphanedLivetvChains(void) |
| 358 | { |
| 359 | QDateTime fourHoursAgo = QDateTime::currentDateTime().addSecs(-4 * 60 * 60); |
| 360 | MSqlQuery query(MSqlQuery::InitCon()); |
| 361 | MSqlQuery deleteQuery(MSqlQuery::InitCon()); |
| 362 | |
| 363 | // Keep these tvchains, they may be in use. |
| 364 | query.prepare("SELECT DISTINCT chainid FROM tvchain " |
| 365 | "WHERE endtime > :FOURHOURSAGO ;"); |
| 366 | query.bindValue(":FOURHOURSAGO", fourHoursAgo); |
| 367 | |
| 368 | if (!query.exec() || !query.isActive()) |
| 369 | { |
| 370 | MythContext::DBError("HouseKeeper Cleaning TVChain Table", query); |
| 371 | return; |
| 372 | } |
| 373 | |
| 374 | QString msg, keepChains = ""; |
| 375 | while (query.next()) |
| 376 | keepChains += "'" + query.value(0).toString() + "',"; |
| 377 | |
| 378 | if (keepChains.isEmpty()) |
| 379 | msg = "DELETE FROM tvchain WHERE endtime < now();"; |
| 380 | else |
| 381 | { |
| 382 | keepChains = keepChains.left(keepChains.length() - 1); |
| 383 | msg = QString("DELETE FROM tvchain " |
| 384 | "WHERE chainid NOT IN ( %1 ) " |
| 385 | "AND endtime < now();") |
| 386 | .arg(keepChains.ascii()); |
| 387 | } |
| 388 | deleteQuery.prepare(msg); |
| 389 | deleteQuery.exec(); |
| 390 | } |
| 391 | |