Ticket #3719: mca.diff

File mca.diff, 6.3 KB (added by Neil Garratt <ngarratt@…>, 13 years ago)
  • libs/libmythtv/eitfixup.cpp

     
    4646                      "(?:\\s?(?:/|:|av)\\s?([0-9]+))?\\."),
    4747      m_comHemSeries2("\\s?-?\\s?([Dd]el\\s+([0-9]+))"),
    4848      m_comHemTSub("\\s+-\\s+([^\\-]+)"),
    49       m_mcaIncompleteTitle("(.*)\\.\\.\\.$"),
     49      m_mcaIncompleteTitle("(.*).\\.\\.\\.$"),
     50      m_mcaCompleteTitlea("^'?("),
     51      m_mcaCompleteTitleb("[^\\.\\?]+[^\\'])'?[\\.\\?]\\s+(.+)"),
    5052      m_mcaSubtitle("^'([^\\.]+)'\\.\\s+(.+)"),
    51       m_mcaSeries("(^\\d+)\\/(\\d+) - (.*)$"),
    52       m_mcaCredits("(.*) \\((\\d{4})\\)\\s*([^\\.]+)\\.?\\s*$"),
    53       m_mcaActors("(.*\\.)\\s+([^\\.]+ [A-Z][^\\.]+)\\.\\s*"),
     53      m_mcaSeries("(^\\d+)\\/(\\d+)\\s-\\s(.*)$"),
     54      m_mcaCredits("(.*)\\s\\((\\d{4})\\)\\s*([^\\.]+)\\.?\\s*$"),
     55      m_mcaAvail("\\s(Only available on [^\\.]*bouquet|Not available in RSA [^\\.]*)\\.?"),
     56      m_mcaActors("(.*\\.)\\s+([^\\.]+\\s[A-Z][^\\.]+)\\.\\s*"),
    5457      m_mcaActorsSeparator("(,\\s+)"),
    55       m_mcaYear("(.*) \\((\\d{4})\\)\\s*$"),
    56       m_mcaCC("(.*)\\. HI Subtitles$"),
     58      m_mcaYear("(.*)\\s\\((\\d{4})\\)\\s*$"),
     59      m_mcaCC(",?\\s(HI|English) Subtitles\\.?"),
     60      m_mcaDD(",?\\sDD\\.?"),
    5761      m_RTLrepeat("(\\(|\\s)?Wiederholung.+vo[m|n].+((?:\\d{2}\\.\\d{2}\\.\\d{4})|(?:\\d{2}[:\\.]\\d{2}\\sUhr))\\)?"),
    5862      m_RTLSubtitle1("^Folge\\s(\\d{1,4})\\s*:\\s+'(.*)'(?:\\.\\s*|$)"),
    5963      m_RTLSubtitle2("^Folge\\s(\\d{1,4})\\s+(.{,5}[^\\.]{,120})[\\?!\\.]\\s*"),
     
    741745 */
    742746void EITFixUp::FixMCA(DBEvent &event) const
    743747{
    744     const uint SUBTITLE_PCT = 35; //% of description to allow subtitle up to
    745     const uint SUBTITLE_MAX_LEN = 128; // max length of subtitle field in db.
     748    const uint SUBTITLE_PCT     = 60; //% of description to allow subtitle to
     749    const uint SUBTITLE_MAX_LEN = 128;// max length of subtitle field in db.
     750    bool       dd               = false;
    746751    int        position;
    747752    QRegExp    tmpExp1;
    748753
     
    753758    if (event.description.length() <= 0)
    754759        return;
    755760
     761    // Replace incomplete title if the full one is in the description
     762    tmpExp1 = m_mcaIncompleteTitle;
     763    if (tmpExp1.search(event.title) != -1)
     764    {
     765        tmpExp1 = QString(m_mcaCompleteTitlea.pattern() + tmpExp1.cap(1) +
     766                          m_mcaCompleteTitleb.pattern());
     767        tmpExp1.setCaseSensitive(false);
     768        if (tmpExp1.search(event.description) != -1)
     769        {
     770            event.title       = tmpExp1.cap(1).stripWhiteSpace();
     771            event.description = tmpExp1.cap(2).stripWhiteSpace();
     772        }
     773        tmpExp1.setCaseSensitive(true);
     774    }
     775
    756776    // Try to find subtitle in description
    757777    tmpExp1 = m_mcaSubtitle;
    758778    if ((position = tmpExp1.search(event.description)) != -1)
     
    766786        }
    767787    }
    768788
    769     // Replace incomplete titles if the full one is the subtitle
    770     tmpExp1 = m_mcaIncompleteTitle;
    771     if (tmpExp1.search(event.title) != -1)
    772     {
    773         if (event.subtitle.find(tmpExp1.cap(1)) == 0)
    774         {
    775             event.title = event.subtitle;
    776             event.subtitle = QString::null;
    777         }
    778     }
    779 
    780789    // Try to find episode numbers in subtitle
    781790    tmpExp1 = m_mcaSeries;
    782791    if ((position = tmpExp1.search(event.subtitle)) != -1)
     
    791800
    792801    // Close captioned?
    793802    position = event.description.find(m_mcaCC);
    794     if (position != -1)
     803    if (position > 0)
    795804    {
    796805        event.flags |= DBEvent::kCaptioned;
    797806        event.description.replace(m_mcaCC, "");
    798807    }
    799808
     809    // Dolby Digital 5.1?
     810    position = event.description.find(m_mcaDD);
     811    if ((position > 0) && (position > (int) (event.description.length() - 7)))
     812    {
     813        event.flags |= DBEvent::kStereo;
     814        dd = true;
     815        event.description.replace(m_mcaDD, "");
     816    }
    800817
     818    // Remove bouquet tags
     819    event.description.replace(m_mcaAvail, "");
     820
     821    // Try to find year and director from the end of the description
    801822    bool isMovie = false;
    802     // Try to find year and director from the end of the description
    803823    tmpExp1  = m_mcaCredits;
    804824    position = tmpExp1.search(event.description);
    805825    if (position != -1)
    806826    {
    807827        isMovie = true;
    808         event.airdate = tmpExp1.cap(2).stripWhiteSpace();
     828        event.description = tmpExp1.cap(1).stripWhiteSpace();
     829        event.airdate     = tmpExp1.cap(2).stripWhiteSpace();
    809830        event.AddPerson(DBPerson::kDirector, tmpExp1.cap(3).stripWhiteSpace());
    810         event.description = tmpExp1.cap(1).stripWhiteSpace();
    811831    }
    812832    else
    813833    {
     
    817837        if (position != -1)
    818838        {
    819839            isMovie = true;
    820             event.airdate = tmpExp1.cap(2).stripWhiteSpace();
    821840            event.description = tmpExp1.cap(1).stripWhiteSpace();
     841            event.airdate     = tmpExp1.cap(2).stripWhiteSpace();
    822842        }
    823843    }
    824844
     
    830850        {
    831851            QStringList actors;
    832852            actors = QStringList::split(m_mcaActorsSeparator,tmpExp1.cap(2));
    833             for(QStringList::size_type i = 0; i < actors.count(); ++i)
     853            for (QStringList::size_type i = 0; i < actors.count(); ++i)
    834854                event.AddPerson(DBPerson::kActor, actors[i].stripWhiteSpace());
    835855            event.description = tmpExp1.cap(1).stripWhiteSpace();
    836856        }
    837857        event.category_type = kCategoryMovie;
    838858    }
     859
     860    //Add descriptive DD tag
     861    if (dd)
     862        event.description += " [Dolby 5.1]";
    839863}
    840864
    841865/** \fn EITFixUp::FixRTL(DBEvent&) const
  • libs/libmythtv/eitfixup.h

     
    100100    const QRegExp m_comHemSeries2;
    101101    const QRegExp m_comHemTSub;
    102102    const QRegExp m_mcaIncompleteTitle;
     103    const QRegExp m_mcaCompleteTitlea;
     104    const QRegExp m_mcaCompleteTitleb;
    103105    const QRegExp m_mcaSubtitle;
    104106    const QRegExp m_mcaSeries;
    105107    const QRegExp m_mcaCredits;
     108    const QRegExp m_mcaAvail;
    106109    const QRegExp m_mcaActors;
    107110    const QRegExp m_mcaActorsSeparator;
    108111    const QRegExp m_mcaYear;
    109112    const QRegExp m_mcaCC;
     113    const QRegExp m_mcaDD;
    110114    const QRegExp m_RTLrepeat;
    111115    const QRegExp m_RTLSubtitle1;
    112116    const QRegExp m_RTLSubtitle2;