Ticket #1656: canda.2.patch

File canda.2.patch, 10.6 KB (added by ajlill@…, 15 years ago)

The correct patch

  • programs/mythfilldatabase/filldata.cpp

     
    6767QString lastdduserid;
    6868DataDirectProcessor ddprocessor;
    6969QString graboptions = "";
     70int programs_per_channel = 4;
     71int check_window_start = 18;
     72float program_count_delta = 0.5;
    7073
    7174class ChanInfo
    7275{
     
    28992902                                  .arg((*it).name)
    29002903                                  .arg((*it).xmltvgrabber));
    29012904
     2905 
     2906       querystr.sprintf("SELECT COUNT(*) "
     2907                       "FROM channel "
     2908                       "WHERE sourceid = %d",
     2909                       (*it).id);
     2910       int chancnt = 11;
     2911       query.exec(querystr);
     2912       
     2913       if (query.isActive() && query.numRowsAffected() > 0)
     2914        {
     2915          query.next();
     2916          chancnt = query.value(0).toInt();
     2917          VERBOSE(VB_GENERAL, QString( "Found %1"
     2918               " channels for source %2").arg(chancnt).arg((*it).id));
     2919        }
     2920       else
     2921         {
     2922           VERBOSE(VB_GENERAL, QString(
     2923                   "Can't get a channel count for "
     2924                   "source %1").arg((*it).id));
     2925         }
     2926 
    29022927        QString xmltv_grabber = (*it).xmltvgrabber;
    29032928        if (xmltv_grabber == "tv_grab_uk" || xmltv_grabber == "tv_grab_uk_rt" ||
    29042929            xmltv_grabber == "tv_grab_fi" || xmltv_grabber == "tv_grab_es" ||
     
    30013026                }
    30023027                else
    30033028                {
     3029                  // Count the number of channels with programs starting
     3030                  // between 8pm and midnight
     3031                  querystr.sprintf("SELECT COUNT(*) as 'hits' "
     3032                                   "FROM channel LEFT JOIN program USING (chanid) "
     3033                                   "WHERE sourceid = %d AND starttime >= "
     3034                                   "DATE_ADD(CURRENT_DATE(), INTERVAL '%d 20' "
     3035                                   "DAY_HOUR) AND "
     3036                                   "starttime < DATE_ADD(CURRENT_DATE(), "
     3037                                   "INTERVAL 1+%d DAY) "
     3038                                   "GROUP BY channel.chanid "
     3039                                   "ORDER BY hits DESC",
     3040                                   (*it).id, i, i);
     3041                  query.exec(querystr);
     3042                 
     3043                  if (query.isActive())
     3044                    {
     3045                      int hits;
     3046                      // We also need to get this day's data if there's data missing
     3047                      // from some of the channels
     3048                      if ((hits = query.numRowsAffected()) < chancnt )
     3049                        {
     3050                            VERBOSE(VB_GENERAL, QString(
     3051                                    "Data refresh needed only %1 channels "
     3052                                    "have data for day @ offset %1 from 8PM - "
     3053                                    "midnight.").arg(hits).arg(i));
     3054                          download_needed = true;
     3055                        }
     3056                    }
     3057                  else
     3058                    {
     3059                      VERBOSE(VB_GENERAL, QString(
     3060                          "Data Refresh because we are unable to "
     3061                          "query the data for day %1 to "
     3062                          "determine if we have enough").arg(i));
     3063                      download_needed = true;
     3064                    }
     3065
    30043066                    // Check to see if we already downloaded data for this date.
    30053067                    int chanCount = 0;         // Channels with data only
    30063068                    int previousDayCount = 0;
     
    30113073                               "LEFT JOIN program p ON c.chanid = p.chanid "
    30123074                               "  AND starttime >= "
    30133075                                   "DATE_ADD(DATE_ADD(CURRENT_DATE(), "
    3014                                    "INTERVAL '%1' DAY), INTERVAL '18' HOUR) "
     3076                                   "INTERVAL '%1' DAY), INTERVAL '%4' HOUR) "
    30153077                               "  AND starttime < DATE_ADD(CURRENT_DATE(), "
    30163078                                   "INTERVAL '%2' DAY) "
    30173079                               "WHERE c.sourceid = %3 "
    30183080                               "GROUP BY c.chanid;";
    30193081 
    3020                     if (query.exec(querystr.arg(i-1).arg(i).arg((*it).id)) &&
     3082                    if (query.exec(querystr.arg(i-1).arg(i).arg((*it).id).arg(check_window_start)) &&
    30213083                        query.isActive())
    30223084                    {
    30233085                        VERBOSE(VB_CHANNEL, QString(
     
    30363098                                            .arg(query.value(1).toInt()));
    30373099                        }
    30383100
    3039                         if (query.exec(querystr.arg(i).arg(i+1).arg((*it).id))
     3101                        if (query.exec(querystr.arg(i).arg(i+1).arg((*it).id).arg(check_window_start))
    30403102                                && query.isActive())
    30413103                        {
    30423104                            VERBOSE(VB_CHANNEL, QString("Checking program "
     
    30633125                        {
    30643126                            VERBOSE(VB_GENERAL, QString(
    30653127                                    "Data refresh needed because no data "
    3066                                     "exists for day @ offset %1 from 6PM - "
    3067                                     "midnight.").arg(i));
     3128                                    "exists for day @ offset %1 from %2 - "
     3129                                    "midnight.").arg(i).arg(check_window_start));
    30683130                            download_needed = true;
    30693131                        }
    30703132                        else if (previousDayCount == 0)
    30713133                        {
    30723134                            VERBOSE(VB_GENERAL, QString(
    30733135                                    "Data refresh needed because no data "
    3074                                     "exists for day @ offset %1 from 6PM - "
     3136                                    "exists for day @ offset %1 from %2 - "
    30753137                                    "midnight.  Unable to calculate how much "
    30763138                                    "we should have for the current day so "
    3077                                     "a refresh is being forced.").arg(i-1));
     3139                                    "a refresh is being forced.").arg(i-1).arg(check_window_start));
    30783140                            download_needed = true;
    30793141                        }
    3080                         else if (currentDayCount < (chanCount * 4))
     3142                        else if (currentDayCount < (chanCount * programs_per_channel))
    30813143                        {
    30823144                            VERBOSE(VB_GENERAL, QString(
    30833145                                    "Data Refresh needed because offset day %1 "
    30843146                                    "has less than 4 programs "
    3085                                     "per channel for the 6PM - midnight "
     3147                                    "per channel for the %4 - midnight "
    30863148                                    "time window for channels that "
    30873149                                    "normally have data. "
    30883150                                    "We want at least %2 programs, but only "
    30893151                                    "found %3").arg(i)
    3090                                     .arg(chanCount * 4).arg(currentDayCount));
     3152                                    .arg(chanCount * programs_per_channel).arg(currentDayCount).arg(check_window_start));
    30913153                            download_needed = true;
    30923154                        }
    3093                         else if (currentDayCount < (previousDayCount / 2))
     3155                        else if (currentDayCount < (previousDayCount * program_count_delta))
    30943156                        {
    30953157                            VERBOSE(VB_GENERAL, QString(
    30963158                                    "Data Refresh needed because offset day %1 "
    3097                                     "has less than half the number of programs "
    3098                                     "as the previous day for the 6PM - "
     3159                                    "has less than %4%% the number of programs "
     3160                                    "as the previous day for the %4 - "
    30993161                                    "midnight time window. "
    31003162                                    "We want at least %2 programs, but only "
    31013163                                    "found %3").arg(i)
    31023164                                    .arg(previousDayCount / 2)
    3103                                     .arg(currentDayCount));
     3165                                    .arg(currentDayCount)
     3166                                    .arg(program_count_delta * 100).arg(check_window_start));
    31043167                            download_needed = true;
    31053168                        }
    31063169                    }
     
    35133576                return GENERIC_EXIT_INVALID_CMDLINE;
    35143577            }
    35153578        }
    3516 #if 0
    35173579        else if (!strcmp(a.argv()[argpos], "--dd-grab-all"))
    35183580        {
    35193581            dd_grab_all = true;
     
    35213583            refresh_tomorrow = false;
    35223584            refresh_second = false;
    35233585        }
    3524 #endif
    35253586        else if (!strcmp(a.argv()[argpos], "--quiet"))
    35263587        {
    35273588             quiet = true;
     
    35983659                }
    35993660            }
    36003661        }
     3662        else if (!strcmp(a.argv()[argpos], "--programs-per-channel"))
     3663        {
     3664            if ((argpos + 1) >= a.argc() ||
     3665                    !strncmp(a.argv()[argpos + 1], "--", 2))
     3666            {
     3667              // print error message
     3668            }
     3669            else
     3670            {
     3671                programs_per_channel = atoi(a.argv()[++argpos]);
     3672            }
     3673        }
     3674        else if (!strcmp(a.argv()[argpos], "--check-window-start"))
     3675        {
     3676            if ((argpos + 1) >= a.argc() ||
     3677                    !strncmp(a.argv()[argpos + 1], "--", 2))
     3678            {
     3679              // print error message
     3680            }
     3681            else
     3682            {
     3683                check_window_start = atoi(a.argv()[++argpos]);
     3684            }
     3685        }
     3686        else if (!strcmp(a.argv()[argpos], "--program-count-delta"))
     3687        {
     3688            if ((argpos + 1) >= a.argc() ||
     3689                    !strncmp(a.argv()[argpos + 1], "--", 2))
     3690            {
     3691              // print error message
     3692            }
     3693            else
     3694            {
     3695                program_count_delta = atof(a.argv()[++argpos]);
     3696            }
     3697        }
    36013698        else if (!strcmp(a.argv()[argpos], "-h") ||
    36023699                 !strcmp(a.argv()[argpos], "--help"))
    36033700        {
     
    36853782            cout << "   Use '-v help' for level info\n";
    36863783            cout << "\n";
    36873784
    3688 #if 0
    36893785            cout << "--dd-grab-all\n";
    36903786            cout << "   The DataDirect grabber will grab all available data\n";
    3691 #endif
    36923787            cout << "--help\n";
    36933788            cout << "   This text\n";
    36943789            cout << "\n";
    36953790            cout << "\n";
    36963791            cout << "  --manual and --update can not be used together.\n";
    36973792            cout << "\n";
     3793            cout << "--programs-per-channel n\n";
     3794            cout << "   Minimum number of programs per channel to trigger a refresh\n";
     3795            cout << "   default 4\n";
     3796            cout << "--check-window-start n\n";
     3797            cout << "   Hour to start looking for programs, default 18\n";
     3798            cout << "--program-count-delta n.n\n";
     3799            cout << "   daily deviation in program count to trigger a refresh\n";
     3800            cout << "   default 0.5\n";
     3801            cout << "\n";
    36983802            return FILLDB_EXIT_INVALID_CMDLINE;
    36993803        }
    37003804        else