Ticket #2352: mca_2.diff

File mca_2.diff, 5.9 KB (added by Stuart Auchterlonie, 15 years ago)

2nd patch

  • libs/libmythtv/eitfixup.cpp

     
    3838      m_comHemSeries1("\\s?(?:[dD]el|[eE]pisode)\\s([0-9]+)"
    3939                      "(?:\\s?(?:/|:|av)\\s?([0-9]+))?\\."),
    4040      m_comHemSeries2("\\s?-?\\s?([Dd]el\\s+([0-9]+))"),
    41       m_comHemTSub("\\s+-\\s+([^\\-]+)")
     41      m_comHemTSub("\\s+-\\s+([^\\-]+)"),
     42      m_mcaSubtitle("^'([^\\.]+)'\\.\\s+(.+)"),
     43      m_mcaSeries("(^\\d+)\\/(\\d+) - (.*)$"),
     44      m_mcaCredits("(.*) \\((\\d{4})\\)\\s*([^\\.]+)\\.?\\s*$"),
     45      m_mcaActors("(.*\\.)\\s+([^\\.]+ [A-Z][^\\.]+)\\.\\s*"),
     46      m_mcaActorsSeparator("(,\\s+)"),
     47      m_mcaYear("(.*) \\((\\d{4})\\)\\s*$"),
     48      m_mcaCC("(.*)\\. HI Subtitles$")
    4249{
    4350}
    4451
     
    7178    if (kFixAUStar & event.fixup)
    7279        FixAUStar(event);
    7380
     81    if (kFixMCA & event.fixup)
     82        FixMCA(event);
     83
    7484    if (event.fixup)
    7585    {
    7686        if (!event.title.isEmpty())
     
    629639        event.description    = stmp.right(stmp.length() - position - 2);
    630640    }
    631641}
     642
     643/** \fn EITFixUp::FixMCA(DBEvent&) const
     644 *  \brief Use this to standardise the MultiChoice Africa DVB-S guide.
     645 */
     646void EITFixUp::FixMCA(DBEvent &event) const
     647{
     648    const uint SUBTITLE_PCT = 35; //% of description to allow subtitle up to
     649    const uint SUBTITLE_MAX_LEN = 128; // max length of subtitle field in db.
     650    int        position;
     651    QRegExp    tmpExp1;
     652
     653    // Remove subtitle, it contains category information too specific to use
     654    event.subtitle = QString::null;
     655
     656    // No need to continue without a description.
     657    if (event.description.length() <= 0)
     658        return;
     659
     660    // Try to find subtitle in description
     661    tmpExp1 = m_mcaSubtitle;
     662    if ((position = tmpExp1.search(event.description)) != -1)
     663    {
     664        if ((tmpExp1.cap(1).length() < SUBTITLE_MAX_LEN) &&
     665            ((tmpExp1.cap(1).length()*100)/event.description.length() <
     666             SUBTITLE_PCT))
     667        {
     668            event.subtitle    = tmpExp1.cap(1);
     669            event.description = tmpExp1.cap(2);
     670        }
     671    }
     672
     673    // Try to find episode numbers in subtitle
     674    tmpExp1 = m_mcaSeries;
     675    if ((position = tmpExp1.search(event.subtitle)) != -1)
     676    {
     677        uint season    = tmpExp1.cap(1).toUInt();       
     678        uint episode   = tmpExp1.cap(2).toUInt();
     679        event.subtitle = tmpExp1.cap(3).stripWhiteSpace();
     680        event.syndicatedepisodenumber =
     681                QString("E%1S%2").arg(episode).arg(season);
     682        event.category_type = kCategorySeries;
     683    }
     684
     685    // Close captioned?
     686    position = event.description.find(m_mcaCC);
     687    if (position != -1)
     688    {
     689        event.flags |= DBEvent::kCaptioned;
     690        event.description.replace(m_mcaCC, "");
     691    }
     692
     693
     694    bool isMovie = false;
     695    // Try to find year and director from the end of the description
     696    tmpExp1  = m_mcaCredits;
     697    position = tmpExp1.search(event.description);
     698    if (position != -1)
     699    {
     700        isMovie = true;
     701        event.airdate = tmpExp1.cap(2).stripWhiteSpace();
     702        event.AddPerson(DBPerson::kDirector, tmpExp1.cap(3).stripWhiteSpace());
     703        event.description = tmpExp1.cap(1).stripWhiteSpace();
     704    }
     705    else
     706    {
     707        // Try to find year only from the end of the description
     708        tmpExp1  = m_mcaYear;
     709        position = tmpExp1.search(event.description);
     710        if (position != -1)
     711        {
     712            isMovie = true;
     713            event.airdate = tmpExp1.cap(2).stripWhiteSpace();
     714            event.description = tmpExp1.cap(1).stripWhiteSpace();
     715        }
     716    }
     717
     718    if (isMovie)
     719    {
     720        tmpExp1  = m_mcaActors;
     721        position = tmpExp1.search(event.description);
     722        if (position != -1)
     723        {
     724            QStringList actors;
     725            actors = QStringList::split(m_mcaActorsSeparator,tmpExp1.cap(2));
     726            for(QStringList::size_type i = 0; i < actors.count(); ++i)
     727                event.AddPerson(DBPerson::kActor, actors[i].stripWhiteSpace());
     728            event.description = tmpExp1.cap(1).stripWhiteSpace();
     729        }
     730        event.category_type = kCategoryMovie;
     731    }
     732}
  • libs/libmythtv/eithelper.cpp

     
    518518    fix[ 769LL << 32 | 8468 << 16] = EITFixUp::kEFixPro7Sat; // DVB-T Berlin
    519519    fix[3075LL << 32 | 8468 << 16] = EITFixUp::kEFixPro7Sat; // DVB-T Bremen
    520520    fix[                133 << 16] = EITFixUp::kEFixPro7Sat; // Premiere and pro7/Sat.1
     521
     522    fix[ 6144 << 16] = EITFixUp::kFixMCA;
    521523}
    522524
    523525static int calc_eit_utc_offset(void)
  • libs/libmythtv/eitfixup.h

     
    2727        kFixComHem     = 0x0010,
    2828        kFixSubtitle   = 0x0020,
    2929        kFixAUStar     = 0x0040,
     30        kFixMCA        = 0x0080,
    3031
    3132        // Early fixups
    3233        kEFixPro7Sat   = 0x0100,
     
    5152    void FixPBS(DBEvent &event) const;           // USA ATSC
    5253    void FixComHem(DBEvent &event, bool parse_subtitle) const; // Sweden DVB-C
    5354    void FixAUStar(DBEvent &event) const;        // Australia DVB-S
     55    void FixMCA(DBEvent &event) const;        // MultiChoice Africa DVB-S
    5456
    5557    const QRegExp m_bellYear;
    5658    const QRegExp m_bellActors;
     
    8082    const QRegExp m_comHemSeries1;
    8183    const QRegExp m_comHemSeries2;
    8284    const QRegExp m_comHemTSub;
     85    const QRegExp m_mcaSubtitle;
     86    const QRegExp m_mcaSeries;
     87    const QRegExp m_mcaCredits;
     88    const QRegExp m_mcaActors;
     89    const QRegExp m_mcaActorsSeparator;
     90    const QRegExp m_mcaYear;
     91    const QRegExp m_mcaCC;
    8392};
    8493
    8594#endif // EITFIXUP_H