Ticket #6478: program-timestamp.patch

File program-timestamp.patch, 16.5 KB (added by chasedouglas@…, 17 years ago)
  • libs/libmythtv/dbcheck.cpp

     
    1818#define MINIMUM_DBMS_VERSION 5,0,15
    1919
    2020/// This is the DB schema version expected by the running MythTV instance.
    21 const QString currentDatabaseVersion = "1232";
     21const QString currentDatabaseVersion = "1233";
    2222
    2323static bool UpdateDBVersionNumber(const QString &newnumber);
    2424static bool performActualUpdate(
     
    44584458        if (!performActualUpdate(updates, "1232", dbver)) 
    44594459            return false; 
    44604460    }   
     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);",
     4468NULL
     4469};
     4470        if (!performActualUpdate(updates, "1233", dbver))
     4471            return false;
     4472    }
    44614473
    44624474    return true;
    44634475}
  • libs/libmythtv/datadirect.h

     
    327327        uint sourceid, bool insert_channels, bool filter_new_channels);
    328328    static bool UpdateChannelsUnsafe(
    329329        uint sourceid, bool filter_new_channels);
    330     static void DataDirectProgramUpdate(void);
     330    static void DataDirectProgramUpdate(int sourceid, const QDateTime &from, const QDateTime &to);
    331331
    332332    // static command, makes Labs and Schedules Direct ProgramIDs compatible.
    333333    static void FixProgramIDs(void);
  • libs/libmythtv/datadirect.cpp

     
    824824    return true;
    825825}
    826826
    827 void DataDirectProcessor::DataDirectProgramUpdate(void)
     827void DataDirectProcessor::DataDirectProgramUpdate(int sourceid, const QDateTime &from, const QDateTime &to)
    828828{
    829829    MSqlQuery query(MSqlQuery::DDCon());
    830830
     831    query.prepare("DELETE program FROM program"
     832                  " LEFT JOIN channel"
     833                  "  ON program.chanid = channel.chanid"
     834                  " LEFT JOIN dd_genre"
     835                  "  ON program.programid = dd_genre.programid"
     836                  "  AND program.category = dd_genre.class"
     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 NULL"
     866                  "   OR dd_v_program.chanid is NULL)"
     867                  "  AND program.starttime >= DATE_ADD(:FROM, INTERVAL channel.tmoffset MINUTE)"
     868                  "  AND program.starttime < DATE_ADD(:TO, INTERVAL channel.tmoffset MINUTE)"
     869                  "  AND channel.sourceid = :SOURCEID"
     870                  "  AND program.originalairdate = dd_v_program.originalairdate"
     871                  ";");
     872    query.bindValue(":FROM", from);
     873    query.bindValue(":TO", to);
     874    query.bindValue(":SOURCEID", sourceid);
     875    if (!query.exec())
     876        MythDB::DBError("Deleting changed entries from program table", query);
     877
     878    query.prepare("DELETE dd_v_program FROM dd_v_program"
     879                  " INNER JOIN channel"
     880                  "  ON dd_v_program.chanid = channel.chanid"
     881                  " INNER JOIN dd_genre"
     882                  "  ON dd_v_program.programid = dd_genre.programid"
     883                  "  AND dd_genre.relevance = '0'"
     884                  " INNER JOIN program"
     885                  "  ON program.chanid = dd_v_program.chanid"
     886                  "  AND program.starttime = DATE_ADD(dd_v_program.starttime, INTERVAL channel.tmoffset MINUTE)"
     887                  "  AND program.endtime = DATE_ADD(dd_v_program.endtime, INTERVAL channel.tmoffset MINUTE)"
     888                  "  AND program.title = dd_v_program.title"
     889                  "  AND program.subtitle = dd_v_program.subtitle"
     890                  "  AND program.description = dd_v_program.description"
     891                  "  AND program.showtype = dd_v_program.showtype"
     892                  "  AND program.category = dd_genre.class"
     893                  "  AND program.category_type = dd_v_program.category_type"
     894                  "  AND program.airdate = dd_v_program.airdate"
     895                  "  AND program.stars = dd_v_program.stars"
     896                  "  AND program.stereo = dd_v_program.stereo"
     897                  "  AND program.subtitled = dd_v_program.subtitled"
     898                  "  AND program.subtitletypes = (dd_v_program.subtitled << 1) | dd_v_program.closecaptioned"
     899                  "  AND program.videoprop = dd_v_program.hdtv"
     900                  "  AND program.audioprop = (dd_v_program.dolby >> 3) | dd_v_program.stereo"
     901                  "  AND program.hdtv = dd_v_program.hdtv"
     902                  "  AND program.closecaptioned = dd_v_program.closecaptioned"
     903                  "  AND program.partnumber = dd_v_program.partnumber"
     904                  "  AND program.parttotal = dd_v_program.parttotal"
     905                  "  AND program.seriesid = dd_v_program.seriesid"
     906                  "  AND program.originalairdate = dd_v_program.originalairdate"
     907                  "  AND program.colorcode = dd_v_program.colorcode"
     908                  "  AND program.syndicatedepisodenumber = dd_v_program.syndicatedepisodenumber"
     909                  "  AND program.programid = dd_v_program.programid"
     910                  ";");
     911    if (!query.exec())
     912        MythDB::DBError("Deleting up-to-date entries from listings source data", query);
     913
    831914    //cerr << "Adding rows to main program table from view table..\n";
    832915    if (!query.exec("INSERT IGNORE INTO program (chanid, starttime, endtime, "
    833916                    "title, subtitle, description, "
  • libs/libmythtv/programdata.cpp

     
    2727    return false;
    2828}
    2929
    30 void ProgramData::clearDataByChannel(int chanid, QDateTime from, QDateTime to)
     30void ProgramData::clearDataByChannel(int chanid, QDateTime from, QDateTime to, bool clearprogram)
    3131{
    3232    int secs;
    3333    QDateTime newFrom, newTo;
     
    4949    newFrom = from.addSecs(secs);
    5050    newTo = to.addSecs(secs);
    5151
    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();
     52    if (clearprogram) {
     53        query.prepare("DELETE FROM program "
     54                      "WHERE starttime >= :FROM AND starttime < :TO "
     55                      "AND chanid = :CHANID ;");
     56        query.bindValue(":FROM", newFrom);
     57        query.bindValue(":TO", newTo);
     58        query.bindValue(":CHANID", chanid);
     59        query.exec();
     60    }
    5961
    6062    query.prepare("DELETE FROM programrating "
    6163                  "WHERE starttime >= :FROM AND starttime < :TO "
     
    8284    query.exec();
    8385}
    8486
    85 void ProgramData::clearDataBySource(int sourceid, QDateTime from, QDateTime to)
     87void ProgramData::clearDataBySource(int sourceid, QDateTime from, QDateTime to, bool clearprogram)
    8688{
    8789    MSqlQuery query(MSqlQuery::InitCon());
    8890    query.prepare("SELECT chanid FROM channel WHERE "
     
    9799        while (query.next())
    98100        {
    99101            int chanid = query.value(0).toInt();
    100             clearDataByChannel(chanid, from, to);
     102            clearDataByChannel(chanid, from, to, clearprogram);
    101103        }
    102104    }
    103105}
  • libs/libmythtv/programdata.h

     
    104104                        QMap<QString, QList<ProgInfo> > *proglist);
    105105
    106106    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);
    109111
    110112  private:
    111113    void fixProgramList(QList<ProgInfo> *fixlist);
  • programs/mythfilldatabase/filldata.cpp

     
    308308    VERBOSE(VB_GENERAL, "Data for source cleared.");
    309309
    310310    VERBOSE(VB_GENERAL, "Updating programs.");
    311     DataDirectProcessor::DataDirectProgramUpdate();
     311    DataDirectProcessor::DataDirectProgramUpdate(source.id, fromlocaldt,
     312                                                 tolocaldt);
    312313    VERBOSE(VB_GENERAL, "Program table update complete.");
    313314
    314315    return true;
  • programs/mythfilldatabase/main.cpp

     
    713713        query.prepare("UPDATE program SET generic = 1 WHERE "
    714714            "((programid = '' AND subtitle = '' AND description = '') OR "
    715715            " (programid <> '' AND category_type = 'series' AND "
    716             "  program.programid LIKE '%0000'));");
     716            "  program.programid LIKE '%0000') AND generic <> 1);");
    717717
    718718        if (!query.exec())
    719719            MythDB::DBError("mark generic", query);
     
    814814    if (grab_data)
    815815    {
    816816        MSqlQuery updt(MSqlQuery::InitCon());
    817         updt.exec("UPDATE program SET first = 0, last = 0;");
    818817
    819818        VERBOSE(VB_GENERAL, "Marking episode first showings.");
    820819
     
    828827            {
    829828                updt.prepare("UPDATE program set first = 1 "
    830829                             "WHERE starttime = :STARTTIME "
    831                              "  AND programid = :PROGRAMID;");
     830                             "  AND programid = :PROGRAMID "
     831                             "  AND first <> 1;");
    832832                updt.bindValue(":STARTTIME", query.value(0).toDateTime());
    833833                updt.bindValue(":PROGRAMID", query.value(1).toString());
    834834                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();
    835843            }
    836844        }
    837845        int found = query.size();
     
    848856                             "WHERE starttime = :STARTTIME "
    849857                             "  AND title = :TITLE "
    850858                             "  AND subtitle = :SUBTITLE "
    851                              "  AND description = :DESCRIPTION");
     859                             "  AND description = :DESCRIPTION "
     860                             "  AND first <> 1;");
    852861                updt.bindValue(":STARTTIME", query.value(0).toDateTime());
    853862                updt.bindValue(":TITLE", query.value(1).toString());
    854863                updt.bindValue(":SUBTITLE", query.value(2).toString());
    855864                updt.bindValue(":DESCRIPTION", query.value(3).toString());
    856865                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();
    857878            }
    858879        }
    859880        found += query.size();
     
    870891            {
    871892                updt.prepare("UPDATE program set last = 1 "
    872893                             "WHERE starttime = :STARTTIME "
    873                              "  AND programid = :PROGRAMID;");
     894                             "  AND programid = :PROGRAMID "
     895                             "  AND last <> 1;");
    874896                updt.bindValue(":STARTTIME", query.value(0).toDateTime());
    875897                updt.bindValue(":PROGRAMID", query.value(1).toString());
    876898                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();
    877907            }
    878908        }
    879909        found = query.size();
     
    890920                             "WHERE starttime = :STARTTIME "
    891921                             "  AND title = :TITLE "
    892922                             "  AND subtitle = :SUBTITLE "
    893                              "  AND description = :DESCRIPTION");
     923                             "  AND description = :DESCRIPTION "
     924                             "  AND last <> 1;");
    894925                updt.bindValue(":STARTTIME", query.value(0).toDateTime());
    895926                updt.bindValue(":TITLE", query.value(1).toString());
    896927                updt.bindValue(":SUBTITLE", query.value(2).toString());
    897928                updt.bindValue(":DESCRIPTION", query.value(3).toString());
    898929                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();
    899942            }
    900943        }
    901944        found += query.size();