Ticket #8777: DishEIT.combined.fixed.diff

File DishEIT.combined.fixed.diff, 43.9 KB (added by robertm, 16 years ago)

Updated for trunk, and to compile.

  • libs/libmythtv/eitfixup.cpp

     
    77#include "channelutil.h" // for GetDefaultAuthority()
    88
    99#include "programinfo.h" // for subtitle types and audio and video properties
     10#include "dishdescriptors.h" // for dish_theme_type_to_string
    1011
    1112/*------------------------------------------------------------------------
    1213 * Event Fix Up Scripts - Turned on by entry in dtv_privatetype table
     
    1516EITFixUp::EITFixUp()
    1617    : m_bellYear("[\\(]{1}[0-9]{4}[\\)]{1}"),
    1718      m_bellActors("\\set\\s|,"),
     19      m_bellPPVTitleAllDayHD("\\s*\\(All Day\\, HD\\)\\s*$"),
    1820      m_bellPPVTitleAllDay("\\s*\\(All Day.*\\)\\s*$"),
    1921      m_bellPPVTitleHD("^HD\\s?-\\s?"),
    20       m_bellPPVSubtitleAllDay("^All Day \\(.*\\sEastern\\)$"),
     22      m_bellPPVSubtitleAllDay("^All Day \\(.*\\sEastern\\)\\s*$"),
    2123      m_bellPPVDescriptionAllDay("^\\(.*\\sEastern\\)"),
    2224      m_bellPPVDescriptionAllDay2("^\\([0-9].*am-[0-9].*am\\sET\\)"),
    2325      m_bellPPVDescriptionEventId("\\([0-9]{5}\\)"),
     26      m_dishPPVTitleHD("\\sHD\\s*$"),
     27      m_dishPPVTitleColon("\\:\\s*$"),
     28      m_dishPPVSpacePerenEnd("\\s\\)\\s*$"),
     29      m_dishDescriptionNew("\\s*New\\.\\s*"),
     30      m_dishDescriptionFinale("\\s*(Series|Season)\\sFinale\\.\\s*"),
     31      m_dishDescriptionFinale2("\\s*Finale\\.\\s*"),
     32      m_dishDescriptionPremiere("\\s*(Series|Season)\\s(Premier|Premiere)\\.\\s*"),
     33      m_dishDescriptionPremiere2("\\s*(Premier|Premiere)\\.\\s*"),
     34      m_dishPPVCode("\\s*\\(([A-Z]|[0-9]){5}\\)\\s*$"),
    2435      m_ukThen("\\s*(Then|Followed by) 60 Seconds\\.", Qt::CaseInsensitive),
    2536      m_ukNew("(New\\.|\\s*(Brand New|New)\\s*(Series|Episode)\\s*[:\\.\\-])",Qt::CaseInsensitive),
    2637      m_ukCEPQ("[:\\!\\.\\?]"),
     
    133144    if (kFixBell & event.fixup)
    134145        FixBellExpressVu(event);
    135146
     147    if (kFixDish & event.fixup)
     148        FixBellExpressVu(event);
     149
     150    if (kFixDish & event.fixup)
     151        FixBellExpressVu(event);
     152
    136153    if (kFixUK & event.fixup)
    137154        FixUK(event);
    138155
     
    251268    position = event.description.indexOf(".");
    252269    // Make sure they didn't leave it out and
    253270    // you come up with an odd category
    254     if (position < 10)
     271    if (position >= 10)
     272        event.category = "Unknown";
     273
     274    // If the content descriptor didn't come up with anything, try parsing the category
     275    // out of the description.
     276    if (event.category == "")
    255277    {
    256         const QString stmp       = event.description;
    257         event.description        = stmp.right(stmp.length() - position - 2);
    258         event.category = stmp.left(position);
     278        // Take out the content description which is
     279        // always next with a period after it
     280        position = event.description.indexOf(".");
     281        if ((position + 1) < event.description.length())
     282            position = event.description.indexOf(". ");
     283        // Make sure they didn't leave it out and
     284        // you come up with an odd category
     285        if ((position > -1) && position < 20)
     286        {
     287            const QString stmp       = event.description;
     288            event.description        = stmp.right(stmp.length() - position - 2);
     289            event.category = stmp.left(position);
     290
     291            int position_p = event.category.indexOf("(");
     292            if (position_p == -1)
     293                event.description = stmp.right(stmp.length() - position - 2);
     294            else
     295                event.category    = "Unknown";
     296        }
     297        else
     298        {
     299            event.category = "Unknown";
     300        }
     301
     302        // When a channel is off air the category is "-"
     303        // so leave the category as blank
     304        if (event.category == "-")
     305            event.category = "OffAir";
     306
     307        if (event.category.length() > 20)
     308            event.category = "Unknown";
    259309    }
    260     else
     310    else if (event.categoryType)
    261311    {
    262         event.category = "Unknown";
     312        QString theme = dish_theme_type_to_string(event.categoryType);
     313        event.description = event.description.replace(theme, "");
     314        if (event.description.startsWith("."))
     315            event.description = event.description.right(event.description.length() - 1);
     316        if (event.description.startsWith(" "))
     317            event.description = event.description.right(event.description.length() - 1);
    263318    }
    264319
    265     // When a channel is off air the category is "-"
    266     // so leave the category as blank
    267     if (event.category == "-")
    268         event.category = "OffAir";
    269 
    270     if (event.category.length() > 10)
    271         event.category = "Unknown";
    272 
    273 
    274320    // See if a year is present as (xxxx)
    275321    position = event.description.indexOf(m_bellYear);
    276322    if (position != -1 && event.category != "")
     
    280326        bool ok;
    281327        uint y = event.description.mid(position + 1, 4).toUInt(&ok);
    282328        if (ok)
     329        {
    283330            event.originalairdate = QDate(y, 1, 1);
     331            event.airdate = y;
     332            event.previouslyshown = true;
     333        }
    284334
    285335        // Get the actors if they exist
    286336        if (position > 3)
     
    314364        event.description = event.description.replace(m_Stereo, "");
    315365    }
    316366
     367    // Check for "title (All Day, HD)" in the title
     368    position = event.title.indexOf(m_bellPPVTitleAllDayHD);
     369    if (position != -1)
     370    {
     371        event.title = event.title.replace(m_bellPPVTitleAllDayHD, "");
     372        event.videoProps |= VID_HDTV;
     373     }
     374
    317375    // Check for "title (All Day)" in the title
    318376    position = event.title.indexOf(m_bellPPVTitleAllDay);
    319377    if (position != -1)
     
    329387        event.videoProps |= VID_HDTV;
    330388    }
    331389
     390    // Check for (HD) in the decription
     391    position = event.description.indexOf("(HD)");
     392    if (position != -1)
     393    {
     394        event.description = event.description.replace("(HD)", "");
     395        event.videoProps |= VID_HDTV;
     396    }
     397
     398    // Check for (HD) in the title
     399    position = event.title.indexOf("(HD)");
     400    if (position != -1)
     401    {
     402        event.description = event.title.replace("(HD)", "");
     403        event.videoProps |= VID_HDTV;
     404    }
     405
     406    // Check for HD at the end of the title
     407    position = event.title.indexOf(m_dishPPVTitleHD);
     408    if (position != -1)
     409    {
     410        event.title = event.title.replace(m_dishPPVTitleHD, "");
     411        event.videoProps |= VID_HDTV;
     412    }
     413
     414    // Check for (DD) at the end of the description
     415    position = event.description.indexOf("(DD)");
     416    if (position != -1)
     417    {
     418        event.description = event.description.replace("(DD)", "");
     419        event.audioProps |= AUD_DOLBY;
     420        event.audioProps |= AUD_STEREO;
     421    }
     422
     423    // Remove SAP from Dish descriptions
     424    position = event.description.indexOf("(SAP)");
     425    if (position != -1)
     426    {
     427        event.description = event.description.replace("(SAP", "");
     428        event.subtitleType |= SUB_HARDHEAR;
     429    }
     430
     431    // Remove any trailing colon in title
     432    position = event.title.indexOf(m_dishPPVTitleColon);
     433    if (position != -1)
     434    {
     435        event.title = event.title.replace(m_dishPPVTitleColon, "");
     436    }
     437
     438    // Remove New at the end of the description
     439    position = event.description.indexOf(m_dishDescriptionNew);
     440    if (position != -1)
     441    {
     442        event.previouslyshown = false;
     443        event.description = event.description.replace(m_dishDescriptionNew, "");
     444    }
     445
     446    // Remove Series Finale at the end of the desciption
     447    position = event.description.indexOf(m_dishDescriptionFinale);
     448    if (position != -1)
     449    {
     450        event.previouslyshown = false;
     451        event.description = event.description.replace(m_dishDescriptionFinale, "");
     452    }
     453
     454    // Remove Series Finale at the end of the desciption
     455    position = event.description.indexOf(m_dishDescriptionFinale2);
     456    if (position != -1)
     457    {
     458        event.previouslyshown = false;
     459        event.description = event.description.replace(m_dishDescriptionFinale2, "");
     460    }
     461
     462    // Remove Series Premiere at the end of the description
     463    position = event.description.indexOf(m_dishDescriptionPremiere);
     464    if (position != -1)
     465    {
     466        event.previouslyshown = false;
     467        event.description = event.description.replace(m_dishDescriptionPremiere, "");
     468    }
     469
     470    // Remove Series Premiere at the end of the description
     471    position = event.description.indexOf(m_dishDescriptionPremiere2);
     472    if (position != -1)
     473    {
     474        event.previouslyshown = false;
     475        event.description = event.description.replace(m_dishDescriptionPremiere2, "");
     476    }
     477
     478    // Remove Dish's PPV code at the end of the description
     479    QRegExp ppvcode = m_dishPPVCode;
     480    ppvcode.setCaseSensitivity(Qt::CaseInsensitive);
     481    position = event.description.indexOf(ppvcode);
     482    if (position != -1)
     483    {
     484        event.description = event.description.replace(ppvcode, "");
     485    }
     486
     487    // Remove trailing garbage
     488    position = event.description.indexOf(m_dishPPVSpacePerenEnd);
     489    if (position != -1)
     490    {
     491        event.description = event.description.replace(m_dishPPVSpacePerenEnd, "");
     492    }
     493
    332494    // Check for subtitle "All Day (... Eastern)" in the subtitle
    333495    position = event.subtitle.indexOf(m_bellPPVSubtitleAllDay);
    334496    if (position != -1)
  • libs/libmythtv/eithelper.cpp

     
    333333        QString subtitle      = QString("");
    334334        QString description   = QString("");
    335335        QString category      = QString("");
    336         MythCategoryType category_type = kCategoryNone;
     336        uint category_type = kCategoryNone;
    337337        unsigned char subtitle_type=0, audio_props=0, video_props=0;
    338338
    339339        // Parse descriptors
     
    368368        parse_dvb_component_descriptors(list, subtitle_type, audio_props,
    369369                                        video_props);
    370370
     371        QString programId;
     372        QString seriesId;
     373        QString rating;
     374        QString rating_system;
     375        QString advisory;
     376        float stars = 0.0;
     377
     378        if (EITFixUp::kFixDish & fix)
     379        {
     380            const unsigned char *mpaa_data =
     381                MPEGDescriptor::Find(list, DescriptorID::dish_event_mpaa);
     382            if (mpaa_data)
     383            {
     384                DishEventMPAADescriptor mpaa(mpaa_data);
     385                stars = mpaa.stars();
     386
     387                if (stars) // Only movies for now
     388                {
     389                    rating = mpaa.rating();
     390                    rating_system = "MPAA";
     391                    advisory = mpaa.advisory();
     392                }
     393            }
     394
     395            if (!stars) // Not MPAA rated, check VCHIP
     396            {
     397                const unsigned char *vchip_data =
     398                    MPEGDescriptor::Find(list, DescriptorID::dish_event_vchip);
     399                if (vchip_data)
     400                {
     401                    DishEventVCHIPDescriptor vchip(vchip_data);
     402                    rating = vchip.rating();
     403                    rating_system = "VCHIP";
     404                    advisory = vchip.advisory();
     405                }
     406            }
     407
     408            if (!advisory.isEmpty() && !rating.isEmpty())
     409                rating += ", " + advisory;
     410            else if (!advisory.isEmpty())
     411            {
     412                rating = advisory;
     413                rating_system = "advisory";
     414            }
     415
     416            const unsigned char *tags_data =
     417                MPEGDescriptor::Find(list, DescriptorID::dish_event_tags);
     418            if (tags_data)
     419            {
     420                DishEventTagsDescriptor tags(tags_data);
     421                seriesId  = tags.seriesid();
     422                programId = tags.programid();
     423            }
     424
     425            const unsigned char *properties_data =
     426                MPEGDescriptor::Find(list, DescriptorID::dish_event_properties);
     427            if (properties_data)
     428            {
     429                DishEventPropertiesDescriptor properties(properties_data);
     430                subtitle_type |= properties.SubtitleProperties(descCompression);
     431                audio_props   |= properties.AudioProperties(descCompression);
     432            }
     433        }
     434
    371435        const unsigned char *content_data =
    372436            MPEGDescriptor::Find(list, DescriptorID::content);
    373437        if (content_data)
    374438        {
    375             ContentDescriptor content(content_data);
    376             category      = content.GetDescription(0);
    377             category_type = content.GetMythCategory(0);
     439            if ((EITFixUp::kFixDish & fix) || (EITFixUp::kFixBell & fix))
     440            {
     441                DishContentDescriptor content(content_data);
     442                category_type = content.GetTheme();
     443                if (EITFixUp::kFixDish & fix)
     444                    category  = content.GetCategory();
     445            }
     446            else
     447            {
     448                ContentDescriptor content(content_data);
     449                category      = content.GetDescription(0);
     450                category_type = content.GetMythCategory(0);
     451            }
    378452        }
    379453
    380454        desc_list_t contentIds =
    381455            MPEGDescriptor::FindAll(list, DescriptorID::dvb_content_identifier);
    382         QString programId = QString("");
    383         QString seriesId  = QString("");
    384456        for (uint j = 0; j < contentIds.size(); j++)
    385457        {
    386458            DVBContentIdentifierDescriptor desc(contentIds[j]);
     
    410482            subtitle_type,
    411483            audio_props,
    412484            video_props,
     485            stars,
    413486            seriesId,  programId);
    414487
    415488        db_events.enqueue(event);
     
    516589                starttime, endtime,       fix,
    517590                subtitle_type,
    518591                audio_props,
    519                 video_props,
     592                video_props, 0.0,
    520593                "",  "");
    521594
    522595            db_events.enqueue(event);
  • libs/libmythtv/mpeg/dishdescriptors.cpp

     
    22
    33#include "dishdescriptors.h"
    44#include "atsc_huffman.h"
     5#include "programinfo.h" // for subtitle types and audio and video properties
    56
    67QString DishEventNameDescriptor::Name(uint compression_type) const
    78{
     
    4142
    4243    return QString::null;
    4344}
     45
     46bool DishEventPropertiesDescriptor::decompressed = false;
     47uint DishEventPropertiesDescriptor::subtitle_props = SUB_UNKNOWN;
     48uint DishEventPropertiesDescriptor::audio_props = AUD_UNKNOWN;
     49
     50uint DishEventPropertiesDescriptor::SubtitleProperties(uint compression_type) const
     51{
     52    decompress_properties(compression_type);
     53
     54    return subtitle_props;
     55}
     56
     57uint DishEventPropertiesDescriptor::AudioProperties(uint compression_type) const
     58{
     59    decompress_properties(compression_type);
     60
     61    return audio_props;
     62}
     63
     64void DishEventPropertiesDescriptor::decompress_properties(uint compression_type) const
     65{
     66    subtitle_props = SUB_UNKNOWN;
     67    audio_props = AUD_UNKNOWN;
     68
     69    if (HasProperties())
     70    {
     71        QString properties_raw = atsc_huffman2_to_string(
     72            _data + 4, DescriptorLength() - 2, compression_type);
     73
     74        if (properties_raw.contains("6|CC"))
     75            subtitle_props |= SUB_HARDHEAR;
     76
     77        if (properties_raw.contains("7|Stereo"))
     78            audio_props    |= AUD_STEREO;
     79    }
     80}
     81
     82QString DishEventTagsDescriptor::programid(void) const
     83{
     84    QString id;
     85
     86    if (DescriptorLength() != 8)
     87        return QString::null;
     88
     89    id.sprintf("%02x%02x%02x%02x%02x%02x%02x", _data[3], _data[4], _data[5],
     90                                               _data[6], _data[7], _data[8],
     91                                               _data[9]);
     92
     93    return id;
     94}
     95
     96QString DishEventTagsDescriptor::seriesid(void) const           
     97{
     98    QString id;
     99
     100    if (DescriptorLength() != 8)
     101        return QString::null;
     102
     103    id.sprintf("%02x%02x%02x%01x", _data[3], _data[4], _data[5],
     104                                   ((_data[6] & 0xf0) >> 0x04));
     105
     106    return id;
     107}
     108
     109QMutex            DishEventMPAADescriptor::mpaaRatingsLock;
     110map<uint,QString> DishEventMPAADescriptor::mpaaRatingsDesc;
     111bool              DishEventMPAADescriptor::mpaaRatingsExists = false;
     112
     113float DishEventMPAADescriptor::stars(void) const
     114{
     115    switch(stars_raw())
     116    {
     117        case 0x01: return 1.0 / 4;
     118        case 0x02: return 1.5 / 4;
     119        case 0x03: return 2.0 / 4;
     120        case 0x04: return 2.5 / 4;
     121        case 0x05: return 3.0 / 4;
     122        case 0x06: return 3.5 / 4;
     123        case 0x07: return 4.0 / 4;
     124    }
     125
     126    return 0.0;
     127}
     128
     129QString DishEventMPAADescriptor::rating(void) const
     130{
     131    if (!mpaaRatingsExists)
     132        Init();
     133
     134    QMutexLocker locker(&mpaaRatingsLock);
     135
     136    map<uint,QString>::const_iterator it = mpaaRatingsDesc.find(rating_raw());
     137    if (it != mpaaRatingsDesc.end())
     138    {
     139        QString ret = (*it).second;
     140        ret.detach();
     141        return ret;
     142    }
     143
     144    // Found nothing? Just return empty string.
     145    return "";
     146}
     147
     148QString DishEventMPAADescriptor::advisory(void) const
     149{
     150    int advisory = advisory_raw();
     151    QStringList advisories;
     152
     153    if (advisory & 0x01)
     154        advisories.append("S");
     155    if (advisory & 0x02)
     156        advisories.append("L");
     157    if (advisory & 0x04)
     158        advisories.append("mQ");
     159    if (advisory & 0x08)
     160        advisories.append("FV");
     161    if (advisory & 0x10)
     162        advisories.append("V");
     163    if (advisory & 0x20)
     164        advisories.append("mK");
     165    if (advisory & 0x40)
     166        advisories.append("N");
     167
     168    return advisories.join(",");
     169}
     170
     171void DishEventMPAADescriptor::Init(void)
     172{
     173    QMutexLocker locker(&mpaaRatingsLock);
     174
     175    if (mpaaRatingsExists)
     176        return;
     177
     178    mpaaRatingsDesc[0x01] = QObject::tr("G");
     179    mpaaRatingsDesc[0x02] = QObject::tr("PG");
     180    mpaaRatingsDesc[0x03] = QObject::tr("PG-13");
     181    mpaaRatingsDesc[0x04] = QObject::tr("R");
     182    mpaaRatingsDesc[0x05] = QObject::tr("NC-17");
     183    mpaaRatingsDesc[0x06] = QObject::tr("NR");
     184
     185    mpaaRatingsExists = true;
     186}
     187
     188QMutex            DishEventVCHIPDescriptor::vchipRatingsLock;
     189map<uint,QString> DishEventVCHIPDescriptor::vchipRatingsDesc;
     190bool              DishEventVCHIPDescriptor::vchipRatingsExists = false;
     191
     192QString DishEventVCHIPDescriptor::rating(void) const
     193{
     194    if (!vchipRatingsExists)
     195        Init();
     196
     197    QMutexLocker locker(&vchipRatingsLock);
     198
     199    map<uint,QString>::const_iterator it = vchipRatingsDesc.find(rating_raw());
     200    if (it != vchipRatingsDesc.end())
     201    {
     202        QString ret = (*it).second;
     203        ret.detach();
     204        return ret;
     205    }
     206
     207    // Found nothing? Just return empty string.
     208    return "";
     209}
     210
     211QString DishEventVCHIPDescriptor::advisory(void) const
     212{
     213    int advisory = advisory_raw();
     214    QStringList advisories;
     215
     216    if (advisory & 0x01)
     217        advisories.append("FV");
     218    if (advisory & 0x02)
     219        advisories.append("V");
     220    if (advisory & 0x04)
     221        advisories.append("S");
     222    if (advisory & 0x08)
     223        advisories.append("L");
     224    if (advisory & 0x10)
     225        advisories.append("D");
     226
     227    return advisories.join(",");
     228}
     229
     230void DishEventVCHIPDescriptor::Init(void)
     231{
     232    QMutexLocker locker(&vchipRatingsLock);
     233
     234    if (vchipRatingsExists)
     235        return;
     236
     237    vchipRatingsDesc[0x01] = QObject::tr("TV-Y");
     238    vchipRatingsDesc[0x02] = QObject::tr("TV-Y7");
     239    vchipRatingsDesc[0x03] = QObject::tr("TV-G");
     240    vchipRatingsDesc[0x04] = QObject::tr("TV-PG");
     241    vchipRatingsDesc[0x05] = QObject::tr("TV-14");
     242    vchipRatingsDesc[0x06] = QObject::tr("TV-MA");
     243
     244    vchipRatingsExists = true;
     245}
     246
     247QMutex            DishContentDescriptor::categoryLock;
     248map<uint,QString> DishContentDescriptor::themeDesc;
     249map<uint,QString> DishContentDescriptor::categoryDesc;
     250bool              DishContentDescriptor::categoriesExists = false;
     251
     252QString dish_theme_type_to_string(uint theme_type)
     253{
     254    static const char *themes[] =
     255        { "", "Movie", "Sports", "News/Business", "Family/Children", "Education",
     256          "Series/Special", "Music/Art", "Religious", "Off-Air" };
     257
     258    if ((theme_type > kThemeNone) && (theme_type < kThemeLast))
     259        return QString(themes[theme_type]);
     260
     261    return "";
     262}
     263
     264DishThemeType string_to_dish_theme_type(const QString &theme_type)
     265{
     266    static const char *themes[] =
     267        { "", "Movie", "Sports", "News/Business", "Family/Children", "Education",
     268          "Series/Special", "Music/Art", "Religious", "Off-Air" };
     269
     270    for (uint i = 1; i < 10; i++)
     271        if (theme_type == themes[i])
     272            return (DishThemeType) i;
     273
     274    return kThemeNone;
     275}
     276
     277DishThemeType DishContentDescriptor::GetTheme(void) const
     278{
     279    if (!categoriesExists)
     280        Init();
     281
     282    if (Nibble1() == 0x00)
     283        return kThemeOffAir;
     284
     285    map<uint,QString>::const_iterator it = themeDesc.find(Nibble2());
     286    if (it != themeDesc.end())
     287        return string_to_dish_theme_type((*it).second);
     288
     289    // Found nothing? Just return empty string.
     290    return kThemeNone;
     291}
     292
     293QString DishContentDescriptor::GetCategory(void) const
     294{
     295    if (!categoriesExists)
     296        Init();
     297
     298    QMutexLocker locker(&categoryLock);
     299
     300    // Try to get detailed description
     301    map<uint,QString>::const_iterator it = categoryDesc.find(UserNibble());
     302    if (it != categoryDesc.end())
     303    {
     304        QString ret = (*it).second;
     305        ret.detach();
     306        return ret;
     307    }
     308
     309    // Fallback to just the theme
     310    QString theme = dish_theme_type_to_string(GetTheme());
     311
     312    if (theme != "")
     313        return theme;
     314
     315    // Found nothing? Just return empty string.
     316    return "";
     317}
     318
     319QString DishContentDescriptor::toString() const
     320{
     321    QString tmp("");
     322    tmp += GetTheme() + " : " + GetCategory();
     323    return tmp;
     324}
     325
     326void DishContentDescriptor::Init(void)
     327{
     328    QMutexLocker locker(&categoryLock);
     329
     330    if (categoriesExists)
     331        return;
     332
     333    // Dish/BEV "Themes"
     334    themeDesc[kThemeMovie]     = QObject::tr("Movie");
     335    themeDesc[kThemeSports]    = QObject::tr("Sports");
     336    themeDesc[kThemeNews]      = QObject::tr("News/Business");
     337    themeDesc[kThemeFamily]    = QObject::tr("Family/Children");
     338    themeDesc[kThemeEducation] = QObject::tr("Education");
     339    themeDesc[kThemeSeries]    = QObject::tr("Series/Special");
     340    themeDesc[kThemeMusic]     = QObject::tr("Music/Art");
     341    themeDesc[kThemeReligious] = QObject::tr("Religious");
     342
     343    // Dish/BEV categories
     344    categoryDesc[0x01] = QObject::tr("Action");
     345    categoryDesc[0x02] = QObject::tr("Adults only");
     346    categoryDesc[0x03] = QObject::tr("Adventure");
     347    categoryDesc[0x04] = QObject::tr("Animals");
     348    categoryDesc[0x05] = QObject::tr("Animated");
     349    categoryDesc[0x07] = QObject::tr("Anthology");
     350    categoryDesc[0x08] = QObject::tr("Art");
     351    categoryDesc[0x09] = QObject::tr("Auto");
     352    categoryDesc[0x0a] = QObject::tr("Awards");
     353    categoryDesc[0x0b] = QObject::tr("Ballet");
     354    categoryDesc[0x0c] = QObject::tr("Baseball");
     355    categoryDesc[0x0d] = QObject::tr("Basketball");
     356    categoryDesc[0x11] = QObject::tr("Biography");
     357    categoryDesc[0x12] = QObject::tr("Boat");
     358    categoryDesc[0x14] = QObject::tr("Bowling");
     359    categoryDesc[0x15] = QObject::tr("Boxing");
     360    categoryDesc[0x16] = QObject::tr("Bus./financial");
     361    categoryDesc[0x1a] = QObject::tr("Children");
     362    categoryDesc[0x1b] = QObject::tr("Children-special");
     363    categoryDesc[0x1c] = QObject::tr("Children-news");
     364    categoryDesc[0x1d] = QObject::tr("Children-music");
     365    categoryDesc[0x1f] = QObject::tr("Collectibles");
     366    categoryDesc[0x20] = QObject::tr("Comedy");
     367    categoryDesc[0x21] = QObject::tr("Comedy-drama");
     368    categoryDesc[0x22] = QObject::tr("Computers");
     369    categoryDesc[0x23] = QObject::tr("Cooking");
     370    categoryDesc[0x24] = QObject::tr("Crime");
     371    categoryDesc[0x25] = QObject::tr("Crime drama");
     372    categoryDesc[0x27] = QObject::tr("Dance");
     373    categoryDesc[0x29] = QObject::tr("Docudrama");
     374    categoryDesc[0x2a] = QObject::tr("Documentary");
     375    categoryDesc[0x2b] = QObject::tr("Drama");
     376    categoryDesc[0x2c] = QObject::tr("Educational");
     377    categoryDesc[0x2f] = QObject::tr("Excercise");
     378    categoryDesc[0x31] = QObject::tr("Fantasy");
     379    categoryDesc[0x32] = QObject::tr("Fasion");
     380    categoryDesc[0x34] = QObject::tr("Fishing");
     381    categoryDesc[0x35] = QObject::tr("Football");
     382    categoryDesc[0x36] = QObject::tr("French");
     383    categoryDesc[0x37] = QObject::tr("Fundraiser");
     384    categoryDesc[0x38] = QObject::tr("Game show");
     385    categoryDesc[0x39] = QObject::tr("Golf");
     386    categoryDesc[0x3a] = QObject::tr("Gymnastics");
     387    categoryDesc[0x3b] = QObject::tr("Health");
     388    categoryDesc[0x3c] = QObject::tr("History");
     389    categoryDesc[0x3d] = QObject::tr("Historical drama");
     390    categoryDesc[0x3e] = QObject::tr("Hockey");
     391    categoryDesc[0x3f] = QObject::tr("Holiday");
     392    categoryDesc[0x40] = QObject::tr("Holiday-children");
     393    categoryDesc[0x41] = QObject::tr("Holiday-children special");
     394    categoryDesc[0x44] = QObject::tr("Holiday special");
     395    categoryDesc[0x45] = QObject::tr("Horror");
     396    categoryDesc[0x46] = QObject::tr("Horse racing");
     397    categoryDesc[0x47] = QObject::tr("House/garden");
     398    categoryDesc[0x49] = QObject::tr("How-to");
     399    categoryDesc[0x4b] = QObject::tr("Interview");
     400    categoryDesc[0x4d] = QObject::tr("Lacrosse");
     401    categoryDesc[0x4f] = QObject::tr("Martial Arts");
     402    categoryDesc[0x50] = QObject::tr("Medical");
     403    categoryDesc[0x51] = QObject::tr("Miniseries");
     404    categoryDesc[0x52] = QObject::tr("Motorsports");
     405    categoryDesc[0x53] = QObject::tr("Motorcycle");
     406    categoryDesc[0x54] = QObject::tr("Music");
     407    categoryDesc[0x55] = QObject::tr("Music special");
     408    categoryDesc[0x56] = QObject::tr("Music talk");
     409    categoryDesc[0x57] = QObject::tr("Musical");
     410    categoryDesc[0x58] = QObject::tr("Musical comedy");
     411    categoryDesc[0x5a] = QObject::tr("Mystery");
     412    categoryDesc[0x5b] = QObject::tr("Nature");
     413    categoryDesc[0x5c] = QObject::tr("News");
     414    categoryDesc[0x5f] = QObject::tr("Opera");
     415    categoryDesc[0x60] = QObject::tr("Outdoors");
     416    categoryDesc[0x63] = QObject::tr("Public affairs");
     417    categoryDesc[0x66] = QObject::tr("Reality");
     418    categoryDesc[0x67] = QObject::tr("Religious");
     419    categoryDesc[0x68] = QObject::tr("Rodeo");
     420    categoryDesc[0x69] = QObject::tr("Romance");
     421    categoryDesc[0x6a] = QObject::tr("Romance-comedy");
     422    categoryDesc[0x6b] = QObject::tr("Rugby");
     423    categoryDesc[0x6c] = QObject::tr("Running");
     424    categoryDesc[0x6e] = QObject::tr("Science");
     425    categoryDesc[0x6f] = QObject::tr("Science fiction");
     426    categoryDesc[0x70] = QObject::tr("Self improvement");
     427    categoryDesc[0x71] = QObject::tr("Shopping");
     428    categoryDesc[0x74] = QObject::tr("Skiing");
     429    categoryDesc[0x77] = QObject::tr("Soap");
     430    categoryDesc[0x7b] = QObject::tr("Soccor");
     431    categoryDesc[0x7c] = QObject::tr("Softball");
     432    categoryDesc[0x7d] = QObject::tr("Spanish");
     433    categoryDesc[0x7e] = QObject::tr("Special");
     434    categoryDesc[0x81] = QObject::tr("Sports non-event");
     435    categoryDesc[0x82] = QObject::tr("Sports talk");
     436    categoryDesc[0x83] = QObject::tr("Suspense");
     437    categoryDesc[0x85] = QObject::tr("Swimming");
     438    categoryDesc[0x86] = QObject::tr("Talk");
     439    categoryDesc[0x87] = QObject::tr("Tennis");
     440    categoryDesc[0x89] = QObject::tr("Track/field");
     441    categoryDesc[0x8a] = QObject::tr("Travel");
     442    categoryDesc[0x8b] = QObject::tr("Variety");
     443    categoryDesc[0x8c] = QObject::tr("Volleyball");
     444    categoryDesc[0x8d] = QObject::tr("War");
     445    categoryDesc[0x8e] = QObject::tr("Watersports");
     446    categoryDesc[0x8f] = QObject::tr("Weather");
     447    categoryDesc[0x90] = QObject::tr("Western");
     448    categoryDesc[0x92] = QObject::tr("Wrestling");
     449    categoryDesc[0x93] = QObject::tr("Yoga");
     450    categoryDesc[0x94] = QObject::tr("Agriculture");
     451    categoryDesc[0x95] = QObject::tr("Anime");
     452    categoryDesc[0x97] = QObject::tr("Arm Wrestling");
     453    categoryDesc[0x98] = QObject::tr("Arts/crafts");
     454    categoryDesc[0x99] = QObject::tr("Auction");
     455    categoryDesc[0x9a] = QObject::tr("Auto racing");
     456    categoryDesc[0x9b] = QObject::tr("Air racing");
     457    categoryDesc[0x9c] = QObject::tr("Badminton");
     458    categoryDesc[0xa0] = QObject::tr("Bicycle racing");
     459    categoryDesc[0xa1] = QObject::tr("Boat Racing");
     460    categoryDesc[0xa6] = QObject::tr("Community");
     461    categoryDesc[0xa7] = QObject::tr("Consumer");
     462    categoryDesc[0xaa] = QObject::tr("Debate");
     463    categoryDesc[0xac] = QObject::tr("Dog show");
     464    categoryDesc[0xad] = QObject::tr("Drag racing");
     465    categoryDesc[0xae] = QObject::tr("Entertainment");
     466    categoryDesc[0xaf] = QObject::tr("Environment");
     467    categoryDesc[0xb0] = QObject::tr("Equestrian");
     468    categoryDesc[0xb3] = QObject::tr("Field hockey");
     469    categoryDesc[0xb5] = QObject::tr("Football");
     470    categoryDesc[0xb6] = QObject::tr("Gay/lesbian");
     471    categoryDesc[0xb7] = QObject::tr("Handball");
     472    categoryDesc[0xb8] = QObject::tr("Home improvement");
     473    categoryDesc[0xb9] = QObject::tr("Hunting");
     474    categoryDesc[0xbb] = QObject::tr("Hydroplane racing");
     475    categoryDesc[0xc1] = QObject::tr("Law");
     476    categoryDesc[0xc3] = QObject::tr("Motorcycle racing");
     477    categoryDesc[0xc5] = QObject::tr("Newsmagazine");
     478    categoryDesc[0xc7] = QObject::tr("Paranormal");
     479    categoryDesc[0xc8] = QObject::tr("Parenting");
     480    categoryDesc[0xca] = QObject::tr("Performing arts");
     481    categoryDesc[0xcc] = QObject::tr("Politics");
     482    categoryDesc[0xcf] = QObject::tr("Pro wrestling");
     483    categoryDesc[0xd3] = QObject::tr("Sailing");
     484    categoryDesc[0xd4] = QObject::tr("Shooting");
     485    categoryDesc[0xd5] = QObject::tr("Sitcom");
     486    categoryDesc[0xd6] = QObject::tr("Skateboarding");
     487    categoryDesc[0xd9] = QObject::tr("Snowboarding");
     488    categoryDesc[0xdd] = QObject::tr("Standup");
     489    categoryDesc[0xdf] = QObject::tr("Surfing");
     490    categoryDesc[0xe0] = QObject::tr("Tennis");
     491    categoryDesc[0xe1] = QObject::tr("Triathlon");
     492    categoryDesc[0xe6] = QObject::tr("Card games");
     493    categoryDesc[0xe7] = QObject::tr("Poker");
     494    categoryDesc[0xea] = QObject::tr("Military");
     495    categoryDesc[0xeb] = QObject::tr("Technology");
     496    categoryDesc[0xec] = QObject::tr("Mixed martial arts");
     497    categoryDesc[0xed] = QObject::tr("Action sports");
     498    categoryDesc[0xff] = QObject::tr("Dish Network");
     499
     500    categoriesExists = true;
     501}
     502
     503
  • libs/libmythtv/mpeg/dishdescriptors.h

     
    44#define _DISH_DESCRIPTORS_H_
    55
    66#include <cassert>
     7#include <map>
    78
     9#include <QMutex>
    810#include <QString>
    911
    1012#include "atscdescriptors.h"
    1113
     14class DishEventMPAADescriptor : public MPEGDescriptor
     15{
     16  public:
     17    DishEventMPAADescriptor(const unsigned char* data)
     18        : MPEGDescriptor(data)
     19    {
     20    //       Name             bits  loc  expected value
     21    // descriptor_tag           8   0.0       0x89
     22        assert(DescriptorID::dish_event_mpaa == DescriptorTag());
     23    // descriptor_length        8   1.0
     24    }
     25    // stars                    3   2.0
     26    uint stars_raw(void) const { return (_data[2] & 0xe0) >> 0x05; }
     27    float stars(void) const;
     28
     29    // rating                   3   2.3
     30    uint rating_raw(void) const { return (_data[2] & 0x1c) >> 0x02; }
     31    QString rating(void) const;
     32
     33    // advisories               8   3.0
     34    uint advisory_raw(void) const { return _data[3]; }
     35    QString advisory(void) const;
     36
     37  private:
     38    static void Init(void);
     39
     40  private:
     41    static QMutex            mpaaRatingsLock;
     42    static map<uint,QString> mpaaRatingsDesc;
     43    static bool              mpaaRatingsExists;
     44};
     45
     46class DishEventVCHIPDescriptor : public MPEGDescriptor
     47{
     48  public:
     49    DishEventVCHIPDescriptor(const unsigned char* data)
     50        : MPEGDescriptor(data)               
     51    {
     52    //       Name             bits  loc  expected value
     53    // descriptor_tag           8   0.0       0x95
     54        assert(DescriptorID::dish_event_vchip == DescriptorTag());
     55    // descriptor_length        8   1.0
     56    }
     57    // rating                   8   2.0
     58    uint rating_raw(void) const { return _data[2]; }
     59    QString rating(void) const;
     60
     61    // advisory                 8   3.0
     62    uint advisory_raw(void) const { return _data[3]; }
     63    QString advisory(void) const;
     64
     65  private:
     66    static void Init(void);
     67
     68  private:
     69    static QMutex            vchipRatingsLock;
     70    static map<uint,QString> vchipRatingsDesc;
     71    static bool              vchipRatingsExists;
     72};
     73
    1274class DishEventNameDescriptor : public MPEGDescriptor
    1375{
    1476  public:
     
    45107    QString Description(uint) const;
    46108};
    47109
     110class DishEventPropertiesDescriptor : public MPEGDescriptor
     111{
     112  public:
     113    DishEventPropertiesDescriptor(const unsigned char* data)
     114        : MPEGDescriptor(data)
     115    {
     116    //       Name             bits  loc  expected value
     117    // descriptor_tag           8   0.0       0x94
     118        assert(DescriptorID::dish_event_properties == DescriptorTag());
     119    // descriptor_length        8   1.0
     120    }
     121    // unknown                  8   2.0
     122    // event_name            dlen-1 3.0
     123    bool HasProperties(void) const { return DescriptorLength() > 1; }
     124    uint SubtitleProperties(uint compression_type) const;
     125    uint AudioProperties(uint compression_type) const;
     126
     127  private:
     128    void decompress_properties(uint compression_type) const;
     129
     130  private:
     131    static uint subtitle_props;
     132    static uint audio_props;
     133    static bool decompressed;
     134};
     135
     136class DishEventTagsDescriptor : public MPEGDescriptor
     137{
     138  public:
     139    DishEventTagsDescriptor(const unsigned char* data)
     140        : MPEGDescriptor(data)
     141    {
     142    //       Name             bits  loc  expected value
     143    // descriptor_tag           8   0.0       0x96
     144        assert(DescriptorID::dish_event_tags == DescriptorTag());
     145    // descriptor_length        8   1.0
     146    }
     147    // unknown                  8   2.0
     148    // seriesid                 28  3.0
     149    QString seriesid(void) const;
     150
     151    // programid                42  3.0
     152    QString programid(void) const;
     153};
     154
     155typedef enum
     156{
     157    kThemeNone = 0,
     158    kThemeMovie,
     159    kThemeSports,
     160    kThemeNews,
     161    kThemeFamily,
     162    kThemeEducation,
     163    kThemeSeries,
     164    kThemeMusic,
     165    kThemeReligious,
     166    kThemeOffAir,
     167    kThemeLast,
     168} DishThemeType;
     169
     170QString dish_theme_type_to_string(uint category_type);
     171DishThemeType string_to_dish_theme_type(const QString &type);
     172
     173class DishContentDescriptor : public MPEGDescriptor
     174{
     175  public:
     176    DishContentDescriptor(const unsigned char* data) : MPEGDescriptor(data)
     177    {
     178    //       Name             bits  loc  expected value
     179    // descriptor_tag           8   0.0       0x54
     180        assert(DescriptorID::content == DescriptorTag());
     181    // descriptor_length        8   1.0
     182    }
     183
     184    //   content_nibble_level_1 4   0.0
     185    uint Nibble1(void)       const { return _data[2] >> 4; }
     186    //   content_nibble_level_2 4   0.4
     187    uint Nibble2(void)       const { return _data[2] & 0xf; }
     188
     189    uint Nibble(void)        const { return _data[2]; }
     190
     191    //   user_nibble            4   1.0
     192    uint UserNibble1(void)   const { return _data[3] >> 4; }
     193    //   user_nibble            4   1.4
     194    uint UserNibble2(void)   const { return _data[3] & 0xf; }
     195    uint UserNibble(void)    const { return _data[3]; }
     196    // }                            2.0
     197
     198    DishThemeType GetTheme(void) const;
     199    QString GetCategory(void) const;
     200    QString toString() const;
     201
     202  private:
     203    static void Init(void);
     204
     205  private:
     206    static QMutex            categoryLock;
     207    static map<uint,QString> themeDesc;
     208    static map<uint,QString> categoryDesc;
     209    static bool              categoriesExists;
     210};
     211
    48212#endif // _DISH_DESCRIPTORS_H_
  • libs/libmythtv/mpeg/mpegdescriptors.h

     
    128128        content_advisory            = 0x87,
    129129
    130130        // Dish Network
     131        dish_event_rights           = 0x87,
     132        dish_event_mpaa             = 0x89,
    131133        dish_event_name             = 0x91,
    132134        dish_event_description      = 0x92,
     135        dish_event_properties       = 0x94,
     136        dish_event_vchip            = 0x95,
     137        dish_event_tags             = 0x96,
    133138
    134139        // ATSC
    135140        extended_channel_name       = 0xA0,
  • libs/libmythtv/programdata.cpp

     
    162162    seriesId        = other.seriesId;
    163163    programId       = other.programId;
    164164    previouslyshown = other.previouslyshown;
     165    ratings         = other.ratings;
    165166
    166167    Squeeze();
    167168
     
    257258        "       partnumber,     parttotal, "
    258259        "       syndicatedepisodenumber, "
    259260        "       airdate,        originalairdate, "
    260         "       previouslyshown,listingsource "
     261        "       previouslyshown,listingsource, "
     262        "       stars+0 "
    261263        "FROM program "
    262264        "WHERE chanid   = :CHANID AND "
    263265        "      manualid = 0       AND "
     
    290292            query.value(7).toUInt(),
    291293            query.value(8).toUInt(),
    292294            query.value(9).toUInt(),
     295            query.value(19).toDouble(),
    293296            query.value(10).toString(),
    294297            query.value(11).toString(),
    295298            query.value(18).toUInt());
     
    690693        "  starttime,      endtime, "
    691694        "  closecaptioned, stereo,         hdtv,            subtitled, "
    692695        "  subtitletypes,  audioprop,      videoprop, "
    693         "  partnumber,     parttotal, "
     696        "  stars,          partnumber,     parttotal, "
    694697        "  syndicatedepisodenumber, "
    695698        "  airdate,        originalairdate,listingsource, "
    696699        "  seriesid,       programid,      previouslyshown ) "
     
    700703        " :STARTTIME,     :ENDTIME, "
    701704        " :CC,            :STEREO,        :HDTV,           :HASSUBTITLES, "
    702705        " :SUBTYPES,      :AUDIOPROP,     :VIDEOPROP, "
    703         " :PARTNUMBER,    :PARTTOTAL, "
     706        " :STARS,         :PARTNUMBER,    :PARTTOTAL, "
    704707        " :SYNDICATENO, "
    705708        " :AIRDATE,       :ORIGAIRDATE,   :LSOURCE, "
    706709        " :SERIESID,      :PROGRAMID,     :PREVSHOWN) ");
     
    722725    query.bindValue(":SUBTYPES",    subtitleType);
    723726    query.bindValue(":AUDIOPROP",   audioProps);
    724727    query.bindValue(":VIDEOPROP",   videoProps);
     728    query.bindValue(":STARS",       stars);
    725729    query.bindValue(":PARTNUMBER",  partnumber);
    726730    query.bindValue(":PARTTOTAL",   parttotal);
    727731    query.bindValue(":SYNDICATENO", syndicatedepisodenumber);
     
    769773    colorcode       = other.colorcode;
    770774    clumpidx        = other.clumpidx;
    771775    clumpmax        = other.clumpmax;
    772     ratings         = other.ratings;
    773776
    774777    squeeze_str(channel);
    775778    squeeze_str(startts);
     
    873876        return 0;
    874877    }
    875878
    876     QList<ProgRating>::const_iterator j = ratings.begin();
     879    QList<EventRating>::const_iterator j = ratings.begin();
    877880    for (; j != ratings.end(); ++j)
    878881    {
    879882        query.prepare(
  • libs/libmythtv/programdata.h

     
    6060};
    6161typedef vector<DBPerson> DBCredits;
    6262
     63class MPUBLIC EventRating
     64{
     65  public:
     66    QString system;
     67    QString rating;
     68};
     69
    6370class MPUBLIC DBEvent
    6471{
    6572  public:
     
    7784        subtitleType(0),
    7885        audioProps(0),
    7986        videoProps(0),
     87        stars(0.0),
    8088        categoryType(0/*kCategoryNone*/),
    8189        seriesId(QString::null),
    8290        programId(QString::null),
     
    9098            unsigned char    _subtitleType,
    9199            unsigned char    _audioProps,
    92100            unsigned char    _videoProps,
     101            float            _stars,
    93102            const QString   &_seriesId,  const QString   &_programId,
    94103            uint32_t         _listingsource) :
    95104        title(_title),           subtitle(_subtitle),
     
    102111        syndicatedepisodenumber(QString("")),
    103112        subtitleType(_subtitleType),
    104113        audioProps(_audioProps), videoProps(_videoProps),
     114        stars(_stars),
    105115        categoryType(_category_type),
    106116        seriesId(_seriesId),
    107117        programId(_programId),
     
    152162    unsigned char subtitleType;
    153163    unsigned char audioProps;
    154164    unsigned char videoProps;
     165    float         stars;
    155166    unsigned char categoryType;
    156167    QString       seriesId;
    157168    QString       programId;
    158169    bool          previouslyshown;
    159170    uint32_t      listingsource;
     171    QList<EventRating> ratings;
    160172};
    161173
    162174class MPUBLIC DBEventEIT : public DBEvent
     
    171183               unsigned char    _subtitleType,
    172184               unsigned char    _audioProps,
    173185               unsigned char    _videoProps,
     186               float            _stars,
    174187               const QString   &_seriesId,  const QString   &_programId) :
    175188        DBEvent(_title, _subtitle, _desc, _category, _category_type,
    176189                _start, _end, _subtitleType, _audioProps, _videoProps,
    177                 _seriesId, _programId, kListingSourceEIT),
     190                _stars, _seriesId, _programId, kListingSourceEIT),
    178191        chanid(_chanid), fixup(_fixup)
    179192    {
    180193    }
     
    188201               unsigned char    _videoProps) :
    189202        DBEvent(_title, QString(""), _desc, QString(""), 0/*kCategoryNone*/,
    190203                _start, _end, _subtitleType, _audioProps, _videoProps,
    191                 QString(""), QString(""), kListingSourceEIT),
     204                0.0, QString(""), QString(""), kListingSourceEIT),
    192205        chanid(_chanid), fixup(_fixup)
    193206    {
    194207    }
     
    203216    uint32_t      fixup;
    204217};
    205218
    206 class MPUBLIC ProgRating
    207 {
    208   public:
    209     QString system;
    210     QString rating;
    211 };
    212 
    213219class MPUBLIC ProgInfo : public DBEvent
    214220{
    215221  public:
     
    245251    QString       colorcode;
    246252    QString       clumpidx;
    247253    QString       clumpmax;
    248     QList<ProgRating> ratings;
    249254};
    250255
    251256class MPUBLIC ProgramData
  • libs/libmythtv/eitfixup.h

     
    5050        kFixCategory   = 0x8000,
    5151        kFixNO         = 0x10000,
    5252        kFixNRK_DVBT   = 0x20000,
     53        kFixDish       = 0x40000,
    5354
    5455        // Early fixups
    5556        kEFixForceISO8859_1  = 0x2000,
     
    9495
    9596    const QRegExp m_bellYear;
    9697    const QRegExp m_bellActors;
     98    const QRegExp m_bellPPVTitleAllDayHD;
    9799    const QRegExp m_bellPPVTitleAllDay;
    98100    const QRegExp m_bellPPVTitleHD;
    99101    const QRegExp m_bellPPVSubtitleAllDay;
    100102    const QRegExp m_bellPPVDescriptionAllDay;
    101103    const QRegExp m_bellPPVDescriptionAllDay2;
    102104    const QRegExp m_bellPPVDescriptionEventId;
     105    const QRegExp m_dishPPVTitleHD;
     106    const QRegExp m_dishPPVTitleColon;
     107    const QRegExp m_dishPPVSpacePerenEnd;
     108    const QRegExp m_dishDescriptionNew;
     109    const QRegExp m_dishDescriptionFinale;
     110    const QRegExp m_dishDescriptionFinale2;
     111    const QRegExp m_dishDescriptionPremiere;
     112    const QRegExp m_dishDescriptionPremiere2;
     113    const QRegExp m_dishPPVCode;
    103114    const QRegExp m_ukThen;
    104115    const QRegExp m_ukNew;
    105116    const QRegExp m_ukCEPQ;
  • programs/mythfilldatabase/xmltvparser.cpp

     
    403403                QDomElement item = values.item(0).toElement();
    404404                if (item.isNull())
    405405                    continue;
    406                 ProgRating rating;
     406                EventRating rating;
    407407                rating.system = info.attribute("system", "");
    408408                rating.rating = getFirstText(item);
    409409                pginfo->ratings.append(rating);