Ticket #1056: myth_eit-bev-dn2_r8925.diff

File myth_eit-bev-dn2_r8925.diff, 19.6 KB (added by Mark.Buechler@…, 14 years ago)

Patch which enabled standard/extended guide.

  • setup/backendsettings.cpp

    diff -rup mythtv.8922.orig/mythtv/libs/libmythtv/dbcheck.cpp mythtv.8922/mythtv/libs/libmythtv/dbcheck.cpp
    old new  
    223224    return gc;
    224225};
    225226
     227static GlobalSpinBox *EITCrawIdleStart()
     228{
     229    GlobalSpinBox *gc = new GlobalSpinBox("EITCrawIdleStart", 1, 120, 1);
     230    gc->setLabel(QObject::tr("Backend Idle Before EIT Craw (mins)"));
     231    gc->setValue(1);
     232    QString helpText = QObject::tr(
     233        "The amount of time to wait after the backend becomes idle for a given "
     234        "capture card before the EIT craw starts.");
     235    gc->setHelpText(helpText);
     236    return gc;
     237}
     238
     239static GlobalCheckBox *EITCrawLimitTransports()
     240{
     241    GlobalCheckBox *gc = new GlobalCheckBox("EITCrawLimitTransports");
     242    gc->setLabel(QObject::tr("EIT Craw Limits Transports"));
     243    gc->setValue(false);
     244    gc->setHelpText(QObject::tr("If set, EIT craw will scan only "
     245                                "those transports which have either "
     246                                "standard_guide_tid or extended_guide_tid "
     247                                "entries defined in dtv_privatetypes."));
     248    return gc;
     249};
     250
    226251static GlobalSpinBox *EITTransportTimeout()
    227252{
    228253    GlobalSpinBox *gc = new GlobalSpinBox("EITTransportTimeout", 1, 15, 1);
     
    637662    group2->addChild(VbiFormat());
    638663    group2->addChild(FreqTable());
    639664    group2->addChild(TimeOffset());
    640     group2->addChild(EITTransportTimeout());
    641665    group2->addChild(MasterBackendOverride());
    642666    group2->addChild(DeletesFollowLinks());
    643667    addChild(group2);
    644668
     669    VerticalConfigurationGroup* group2a1 = new VerticalConfigurationGroup(false);
     670    group2a1->setLabel(QObject::tr("EIT Scanner Options"));
     671    group2a1->addChild(EITTransportTimeout());
     672    group2a1->addChild(EITCrawIdleStart());
     673    group2a1->addChild(EITCrawLimitTransports());
     674    addChild(group2a1);
     675
    645676    VerticalConfigurationGroup* group3 = new VerticalConfigurationGroup(false);
    646677    group3->setLabel(QObject::tr("Shutdown/Wakeup Options"));
    647678    group3->addChild(startupCommand());
  • libs/libmythtv/eitscanner.cpp

    old new  
    192192    parser  = NULL;
    193193}
    194194
    195 void EITScanner::StartActiveScan(TVRec *_rec, uint max_seconds_per_source)
     195void EITScanner::StartActiveScan(TVRec *_rec, uint max_seconds_per_source,
     196                                 bool limit_transports)
    196197{
    197198    rec = _rec;
    198199
    199200    if (!activeScanChannels.size())
    200201    {
    201202        MSqlQuery query(MSqlQuery::InitCon());
    202         query.prepare(
    203             "SELECT channum, mplexid "
    204             "FROM channel, cardinput, capturecard, videosource "
    205             "WHERE cardinput.sourceid   = channel.sourceid AND "
    206             "      videosource.sourceid = channel.sourceid AND "
    207             "      capturecard.cardid   = cardinput.cardid AND "
    208             "      channel.mplexid        IS NOT NULL      AND "
    209             "      useonairguide        = 1                AND "
    210             "      useeit               = 1                AND "
    211             "      cardinput.cardid     = :CARDID "
    212             "ORDER BY cardinput.sourceid, atscsrcid");
     203
     204        if (limit_transports)
     205            query.prepare(
     206                "SELECT MIN(channum), channel.mplexid                        "
     207                "FROM channel, dtv_multiplex, dtv_privatetypes, videosource, "
     208                "cardinput, capturecard                                      "
     209                "WHERE dtv_multiplex.networkid = dtv_privatetypes.networkid  "
     210                "AND videosource.sourceid      = channel.sourceid            "
     211                "AND cardinput.sourceid        = channel.sourceid            "
     212                "AND capturecard.cardid        = cardinput.cardid            "
     213                "AND (private_type             = 'extended_guide_tid'        "
     214                "OR   private_type             = 'standard_guide_tid')       "
     215                "AND private_value             = transportid                 "
     216                "AND channel.mplexid           = dtv_multiplex.mplexid       "
     217                "AND useonairguide             = 1                           "
     218                "AND useeit                    = 1                           "
     219                "AND cardinput.cardid          = :CARDID                     "
     220                "GROUP BY transportid");
     221        else
     222            query.prepare(
     223                "SELECT MIN(channum), channel.mplexid                         "
     224                "FROM channel,videosource,cardinput,capturecard,dtv_multiplex "
     225                "LEFT JOIN dtv_privatetypes                                   "
     226                "ON dtv_multiplex.networkid = dtv_privatetypes.networkid      "
     227                "AND (private_type             = 'extended_guide_tid'         "
     228                "OR   private_type             = 'standard_guide_tid')        "
     229                "AND private_value             = transportid                  "
     230                "WHERE videosource.sourceid      = channel.sourceid           "
     231                "AND cardinput.sourceid        = channel.sourceid             "
     232                "AND capturecard.cardid        = cardinput.cardid             "
     233                "AND channel.mplexid           = dtv_multiplex.mplexid        "
     234                "AND useonairguide             = 1                            "
     235                "AND useeit                    = 1                            "
     236                "AND cardinput.cardid          = :CARDID                      "
     237                "GROUP BY transportid");
     238
    213239        query.bindValue(":CARDID", rec->GetCaptureCardNum());
    214240
    215241        if (!query.exec() || !query.isActive())
  • libs/libmythtv/tv_rec.cpp

    old new  
    7474#define LOC QString("TVRec(%1): ").arg(cardid)
    7575#define LOC_ERR QString("TVRec(%1) Error: ").arg(cardid)
    7676
    77 /// How many seconds after entering kState_None should we start EIT Scanner
    78 const uint TVRec::kEITScanStartTimeout = 60; /* 1 minute */
    79 
    8077/// How many milliseconds the signal monitor should wait between checks
    8178const uint TVRec::kSignalMonitoringRate = 50; /* msec */
    8279
     
    750747    {
    751748        // Add some randomness to avoid all cards starting
    752749        // EIT scanning at nearly the same time.
    753         uint timeout = kEITScanStartTimeout + random() % 59;
     750        uint idle_start = gContext->GetNumSetting("EITCrawIdleStart", 1);
     751        uint timeout = (idle_start * 60) + random() % 59;
    754752        eitScanStartTime = eitScanStartTime.addSecs(timeout);
    755753    }
    756754    else
     
    11601158
    11611159    // Add some randomness to avoid all cards starting
    11621160    // EIT scanning at nearly the same time.
    1163     uint timeout = kEITScanStartTimeout + random() % 59;
     1161    uint idle_start = gContext->GetNumSetting("EITCrawIdleStart", 1);
     1162    uint timeout = (idle_start * 60) + random() % 59;
    11641163    eitScanStartTime = QDateTime::currentDateTime().addSecs(timeout);
    11651164
    11661165    while (HasFlags(kFlagRunMainLoop))
     
    12951294            else
    12961295            {
    12971296                uint ttMin = gContext->GetNumSetting("EITTransportTimeout", 5);
    1298                 scanner->StartActiveScan(this, ttMin * 60);
     1297                uint tid_limit = gContext->GetNumSetting("EITCrawLimitTransports", 0);
     1298                scanner->StartActiveScan(this, ttMin * 60, (tid_limit ? true : false));
    12991299                SetFlags(kFlagEITScannerRunning);
    13001300                eitScanStartTime = QDateTime::currentDateTime().addYears(1);
    13011301            }
  • libs/libmythtv/tv_rec.h

    old new  
    363363    QString      rbFileExt;
    364364
    365365  public:
    366     static const uint kEITScanStartTimeout;
    367366    static const uint kSignalMonitoringRate;
    368367
    369368    // General State flags
  • libs/libmythtv/siparser.cpp

    old new  
    346346                    VERBOSE(VB_SIPARSER, LOC + "Forcing Guide Present");
    347347                }
    348348            }
     349            if (QString(query.value(0).toString()) == "guide_on_single_tid")
     350            {
     351                if (query.value(1).toString() == "yes")
     352                {
     353                    PrivateTypes.GuideOnSingleTransport = true;
     354                    VERBOSE(VB_SIPARSER, LOC + "Guide is on single transport");
     355                }
     356            }
     357            if (QString(query.value(0).toString()) == "extended_guide_tid")
     358            {
     359                PrivateTypes.ExtendedGuideOnTransport = query.value(1).toInt();
     360                VERBOSE(VB_SIPARSER, LOC +
     361                        QString("Dish Network Extended Guide Present on Transport %1")
     362                        .arg(PrivateTypes.ExtendedGuideOnTransport));
     363            }
    349364            if (QString(query.value(0).toString()) == "guide_fixup")
    350365            {
    351366                PrivateTypes.EITFixUp = query.value(1).toInt();
     
    12671282    emit TableLoaded();
    12681283
    12691284    int CurrentTransport = 0;
     1285    PrivateTypes.ForceExtendedGuidePresent = false;
    12701286
    12711287    uint16_t network_id = buffer[0] << 8 | buffer[1];
    12721288    // TODO: Handle Network Specifics here if they aren't set
     
    12741290    //TODO : Make this configurable.
    12751291    PrivateTypes.ForceGuidePresent = true;
    12761292
     1293    if (PrivateTypes.GuideOnSingleTransport)
     1294        PrivateTypes.GuideTransportID = PrivateTypes.CurrentTransportID;
     1295
     1296    if (PrivateTypes.CurrentTransportID == PrivateTypes.ExtendedGuideOnTransport)
     1297    {
     1298        PrivateTypes.ForceExtendedGuidePresent = true;
     1299
     1300        VERBOSE(VB_SIPARSER, LOC +
     1301            QString("SDT: Extended guide present on this TID: %1")
     1302            .arg(head->table_id_ext));
     1303    }
     1304
     1305
    12771306    if (PrivateTypesLoaded == false)
    12781307        LoadPrivateTypes(network_id);
    12791308
     
    13911420
    13921421    // TODO: This is temp
    13931422    Table[EVENTS]->DependencyMet(SERVICES);
    1394     //Table[EVENTS]->AddPid(0x12,0x00,0x00,true); // see ticket #755
    1395     Table[EVENTS]->AddPid(0x12,0x7F,0x80,0x12); // see ticket #755
    13961423
    1397     // This should only be added based on the user enabling 7-9day dishnet
    1398     // EIT events
    1399     Table[EVENTS]->AddPid(0x300,0x00,0x00,true);
     1424    // TODO: Handle BEV extended guide
     1425    if (PrivateTypes.ForceExtendedGuidePresent)
     1426    {
     1427        Table[EVENTS]->AddPid(0x300,0x00,0x00,true); // Dish 9-day
     1428    }
     1429    else
     1430    {
     1431        // Handle everything else..
     1432        Table[EVENTS]->AddPid(0x12,0x00,0x00,true); // see ticket #755
     1433        Table[EVENTS]->AddPid(0x12,0x7F,0x80,0x12); // see ticket #755
     1434    }
    14001435}
    14011436
    14021437/** \fn SIParser::GetLanguagePriority(const QString&)
  • libs/libmythtv/sitypes.h

    old new  
    125125    bool          CustomGuidePID;
    126126    uint16_t      GuidePID;
    127127    bool          GuideOnSingleTransport;
     128    bool          ForceExtendedGuidePresent;
     129    uint16_t      ExtendedGuideOnTransport;
    128130    uint16_t      GuideTransportID;
    129131    /* List of ServiceID:s for which to parse out subtitle from the description.
    130132       Used in EITFixUpStyle4() */
  • libs/libmythtv/dbcheck.cpp

    old new  
    1212/// This is the DB schema version expected by the running MythTV instance.
    1313const QString currentDatabaseVersion = "1123";
    1414
     15/// This is the DB schema minor version used by supplementary patches
     16const QString currentDatabaseVersionMinor = "2";
     17
    1518static bool UpdateDBVersionNumber(const QString &newnumber);
     19static bool UpdateDBVersionMinor( const QString &newminor);
    1620static bool performActualUpdate(const QString updates[], QString version,
    1721                                QString &dbver);
     22static bool performMinorUpdate(const QString updates[], QString minor,
     23                                QString &dbminor);
    1824static bool InitializeDatabase(void);
    1925static bool doUpgradeTVDatabaseSchema(void);
     26static bool dbMinorUpdate(void);
    2027
    2128/** \defgroup db_schema MythTV Database Schema
    2229
     
    353360    return true;
    354361}
    355362
     363static bool UpdateDBVersionMinor(const QString &newminor)
     364{
     365    // delete old schema version
     366    MSqlQuery query(MSqlQuery::InitCon());
     367
     368    QString thequery = "DELETE FROM settings WHERE value='DBSchemaVerMinor';";
     369    query.prepare(thequery);
     370    query.exec();
     371
     372    if (query.lastError().type() != QSqlError::None)
     373    {
     374        QString msg =
     375            QString("DB Error (Deleting old DB minor version number): \n"
     376                    "Query was: %1 \nError was: %2 \nnew version: %3")
     377            .arg(thequery)
     378            .arg(MythContext::DBErrorMessage(query.lastError()))
     379            .arg(newminor);
     380        VERBOSE(VB_IMPORTANT, msg);
     381        return false;
     382    }
     383
     384    // set new schema minor
     385    thequery = QString("INSERT INTO settings (value, data, hostname) "
     386                       "VALUES ('DBSchemaVerMinor', %1, NULL);").arg(newminor);
     387    query.prepare(thequery);
     388    query.exec();
     389
     390    if (query.lastError().type() != QSqlError::None)
     391    {
     392        QString msg =
     393            QString("DB Error (Setting new DB minor version number): \n"
     394                    "Query was: %1 \nError was: %2 \nnew minor version: %3")
     395            .arg(thequery)
     396            .arg(MythContext::DBErrorMessage(query.lastError()))
     397            .arg(newminor);
     398        VERBOSE(VB_IMPORTANT, msg);
     399        return false;
     400    }
     401
     402    return true;
     403}
     404
    356405/** \fn performActualUpdate(const QString updates[], QString, QString&)
    357406 *  \brief Runs a number of SQL commands, and updates the schema version.
    358407 *
     
    400449    return true;
    401450}
    402451
     452static bool performMinorUpdate(const QString updates[], QString minor,
     453                                QString &dbminor)
     454{
     455    MSqlQuery query(MSqlQuery::InitCon());
     456
     457    VERBOSE(VB_IMPORTANT, QString("Upgrading to schema minor ") + minor);
     458
     459    int counter = 0;
     460    QString thequery = updates[counter];
     461
     462    while (thequery != "")
     463    {
     464        query.prepare(thequery);
     465        query.exec();
     466
     467        if (query.lastError().type() != QSqlError::None)
     468        {
     469            QString msg =
     470                QString("DB Error (Performing database upgrade): \n"
     471                        "Query was: %1 \nError was: %2 \nnew minor: %3")
     472                .arg(thequery)
     473                .arg(MythContext::DBErrorMessage(query.lastError()))
     474                .arg(minor);
     475            VERBOSE(VB_IMPORTANT, msg);
     476            return false;
     477        }
     478
     479        counter++;
     480        thequery = updates[counter];
     481    }
     482
     483    if (!UpdateDBVersionMinor(minor))
     484        return false;
     485
     486    dbminor = minor;
     487    return true;
     488}
     489
    403490/** \fn UpgradeTVDatabaseSchema(void)
    404491 *  \brief This is the function called from outside dbcheck.cpp to update the schema.
    405492 *
     
    417504{
    418505    QString dbver = gContext->GetSetting("DBSchemaVer");
    419506
    420     VERBOSE(VB_IMPORTANT, QString("Current Schema Version: %1").arg(dbver));
     507    QString dbminor = gContext->GetSetting("DBSchemaVerMinor");
    421508
    422     if (dbver == currentDatabaseVersion)
     509    VERBOSE(VB_IMPORTANT, QString("Current Schema Version: %1.%2").arg(dbver)
     510                                                                  .arg(dbminor));
     511
     512    if ((dbver == currentDatabaseVersion) &&
     513        (dbminor == currentDatabaseVersionMinor))
    423514        return true;
    424515
    425516    MSqlQuery chartype(MSqlQuery::InitCon());
    426517    chartype.prepare("ALTER DATABASE mythconverg DEFAULT CHARACTER SET latin1;");
    427518    chartype.exec();
    428519
    429     VERBOSE(VB_IMPORTANT, QString("Newest Schema Version : %1")
    430                                   .arg(currentDatabaseVersion));
     520    VERBOSE(VB_IMPORTANT, QString("Newest Schema Version : %1.%2")
     521                                  .arg(currentDatabaseVersion)
     522                                  .arg(currentDatabaseVersionMinor));
    431523
    432524    MSqlQuery lockquery(MSqlQuery::InitCon());
    433525
     
    459551
    460552    bool ret = doUpgradeTVDatabaseSchema();
    461553
     554    // Database version minor updates
     555    if (ret)
     556        ret = dbMinorUpdate();
     557
    462558    if (ret)
    463559        VERBOSE(VB_IMPORTANT, "Database Schema upgrade complete, unlocking.");
    464560    else
     
    20122108    return true;
    20132109}
    20142110
     2111static bool dbMinorUpdate(void)
     2112{
     2113    QString dbminor = gContext->GetSetting("DBSchemaVerMinor");
     2114    if (dbminor == currentDatabaseVersionMinor)
     2115        return true;
     2116    if ((dbminor == "") || (dbminor == "0"))
     2117    {
     2118        const QString updates[] = {
     2119// Dish Network
     2120"INSERT INTO dtv_privatetypes (sitype, networkid, private_type, private_value)"
     2121" VALUES('dvb', 4102, 'force_guide_present', 'yes');",
     2122"INSERT INTO dtv_privatetypes (sitype, networkid, private_type, private_value)"
     2123" VALUES('dvb', 4102, 'extended_guide_tid', '229');",
     2124// Bell ExpressVu
     2125"INSERT INTO dtv_privatetypes (sitype, networkid, private_type, private_value)"
     2126" VALUES('dvb', 256, 'force_guide_present', 'yes');",
     2127"INSERT INTO dtv_privatetypes (sitype, networkid, private_type, private_value)"
     2128" VALUES('dvb', 256, 'guide_on_single_tid', 'yes');",
     2129"INSERT INTO dtv_privatetypes (sitype, networkid, private_type, private_value)"
     2130" VALUES('dvb', 257, 'force_guide_present', 'yes');",
     2131"INSERT INTO dtv_privatetypes (sitype, networkid, private_type, private_value)"
     2132" VALUES('dvb', 257, 'guide_on_single_tid', 'yes');",
     2133""
     2134        };
     2135        if (!performMinorUpdate(updates, "1", dbminor))
     2136            return false;
     2137    }
     2138
     2139    if ((dbminor == "1"))
     2140    {
     2141        const QString updates[] = {
     2142// Bell ExpressVu
     2143"INSERT INTO dtv_privatetypes (sitype, networkid, private_type, private_value)"
     2144" VALUES('dvb', 256, 'standard_guide_tid', '4');",
     2145"INSERT INTO dtv_privatetypes (sitype, networkid, private_type, private_value)"
     2146" VALUES('dvb', 257, 'standard_guide_tid', '102');",
     2147""
     2148        };
     2149        if (!performMinorUpdate(updates, "2", dbminor))
     2150            return false;
     2151    }
     2152
     2153    return true;
     2154}
    20152155
    20162156
    20172157bool InitializeDatabase(void)
  • libs/libmythtv/eitscanner.h

    old new  
    2828    void StartPassiveScan(DVBChannel*, DVBSIParser*);
    2929    void StopPassiveScan(void);
    3030
    31     void StartActiveScan(TVRec*, uint max_seconds_per_source);
     31    void StartActiveScan(TVRec*, uint max_seconds_per_source,
     32                         bool limit_transport=false);
    3233    void StopActiveScan(void);       
    3334
    3435  public slots: