Ticket #8483: myth-NRK-eit-fix.diff

File myth-NRK-eit-fix.diff, 10.8 KB (added by Håkon Alstadheim <hakon@…>, 10 years ago)

First patch for EIT fixes on norwegian DVB-T

  • libs/libmythtv/eitfixup.cpp

     
     1// -*- eval:(c-set-style "BSD") tab-width: 4;c-basic-offset:4; indent-tabs-mode: nil-*-
    12// C++ headers
    23#include <algorithm>
    34
     
    910
    1011#include "programinfo.h" // for subtitle types and audio and video properties
    1112
     13#define LOC QString("EITFixUp: ")
     14#define LOC_ERR QString("EITFixUp, Error: ")
     15
    1216/*------------------------------------------------------------------------
    1317 * Event Fix Up Scripts - Turned on by entry in dtv_privatetype table
    1418 *------------------------------------------------------------------------*/
     
    103107      m_nlYear2("([\\s]{1}[\\(]{1}[A-Z]{0,3}/?)([1-2]{2}[0-9]{2})([\\)]{1})"),
    104108      m_nlDirector("(?=\\svan\\s)(([A-Z]{1}[a-z]+\\s)|([A-Z]{1}\\.\\s))"),
    105109      m_nlCat("^(Amusement|Muziek|Informatief|Nieuws/actualiteiten|Jeugd|Animatie|Sport|Serie/soap|Kunst/Cultuur|Documentaire|Film|Natuur|Erotiek|Comedy|Misdaad|Religieus)\\.\\s"),
    106       m_nlOmroep ("\\s\\(([A-Z]+/?)+\\)$")
     110      m_nlOmroep ("\\s\\(([A-Z]+/?)+\\)$"),
     111      m_ColonSubtitle("^([^:]+): (.+)"),
     112      m_NRKCategories("^(Barne-tv|Fantorangen|Supermorgen|Julemorgen|Sommermorgen|Kuraffen-TV|Sport i dag|NRKs sportsl.rdag|NRKs sportss.ndag|Dagens dokumentar|NRK2s historiekveld|Detektimen|Nattkino|Filmklassiker|Film|Kortfilm|P.skemorgen|Radioteatret|Opera|P2-Akademiet|Nyhetsmorgen i P2 og Alltid Nyheter:): (.+)"),
     113      m_NOPremiere("\\s+-\\s+(Sesongpremiere|Premiere)!?$"),
     114      m_NRKPartOfSeries(" ([0-9]+):([0-9]+)$")
    107115
    108116{
    109117}
     
    120128            event.description = event.subtitle;
    121129            event.subtitle = QString("");
    122130        }
     131        VERBOSE(VB_EIT, LOC + QString("have event.fixup %1, on %2, desc.len %3, starttime %4")
     132                .arg(event.fixup) .arg(event.title.left(100)) .arg(event.description.length()) .arg(event.starttime.toString("hh:mm:ss")));
    123133    }
    124134
    125135    if (kFixHDTV & event.fixup)
     
    155165    if (kFixNL & event.fixup)
    156166        FixNL(event);
    157167
     168    if (kFixNO & event.fixup){
     169                VERBOSE(VB_EIT, LOC + QString("have event.fixup kFixNO"));
     170        //event.fixup |=  EITFixUp::kFixGenericDVB;
     171                FixNO(event);
     172                FixNRKSeries(event);
     173                FixColonSubtitle(event);
     174                FixTitleQuote(event);
     175                VERBOSE(VB_EIT, LOC + QString("New Title:%1 Subtitle:%2")
     176                                .arg(event.title.left(35)) .arg(event.subtitle.left(35)));
     177               
     178    }
     179
    158180    if (event.fixup)
    159181    {
    160182        if (!event.title.isEmpty())
     
    167189
    168190    if (kFixGenericDVB & event.fixup)
    169191    {
     192        VERBOSE(VB_EIT, LOC + QString("have event.fixup kFixGenericDVB"));
    170193        event.programId = AddDVBEITAuthority(event.chanid, event.programId);
    171194        event.seriesId  = AddDVBEITAuthority(event.chanid, event.seriesId);
    172195    }
     
    10811104
    10821105}
    10831106
     1107
     1108
     1109/** \fn EITFixUp::FixNRKSeries(DBEventEIT&) const
     1110 *  \brief Remove colon-separated episode number. Run before ColonSubtitle
     1111 */
     1112void EITFixUp::FixNRKSeries(DBEventEIT &event) const
     1113{
     1114    int position1;
     1115    // Work out the episode numbers (if any)
     1116    bool    series  = false;
     1117    QRegExp tmpExp1 = m_NRKPartOfSeries;
     1118    if ((position1 = tmpExp1.indexIn(event.title)) != -1)
     1119    {
     1120        if ((tmpExp1.cap(1).toUInt() <= tmpExp1.cap(2).toUInt())
     1121            && tmpExp1.cap(2).toUInt()<=50)
     1122        {
     1123            event.partnumber = tmpExp1.cap(1).toUInt();
     1124            event.parttotal  = tmpExp1.cap(2).toUInt();
     1125            // Remove from the title
     1126                        VERBOSE(VB_EIT, LOC + QString("Dropping series episode # from title"));
     1127            event.title = event.title.left(position1) +
     1128                                event.title.mid(position1 + tmpExp1.cap(0).length());
     1129            series = true;
     1130        }
     1131    }
     1132}
     1133
     1134/** \fn EITFixUp::FixColonSubtitle(DBEventEIT&) const
     1135 *  \brief Use this to standardise the Norwegian channels. Only NRK for now.
     1136 */
     1137void EITFixUp::FixColonSubtitle(DBEventEIT &event) const
     1138{
     1139    int        position;
     1140    QRegExp    tmpExp1;
     1141    // Try to find colon-delimited subtitle in title, only validated for NRK channels
     1142    tmpExp1 = m_ColonSubtitle;
     1143    if (!event.title.startsWith("CSI:") && !event.title.startsWith("CD:") && !event.title.startsWith("Distriktsnyheter: fra"))
     1144    {
     1145                if ((position = tmpExp1.indexIn(event.title)) != -1)
     1146                {
     1147
     1148                        if (event.subtitle.length() <= 0)
     1149                        {
     1150                                event.title    = tmpExp1.cap(1);
     1151                                event.subtitle = tmpExp1.cap(2);
     1152                        } else if (event.subtitle == tmpExp1.cap(2)) {
     1153                                VERBOSE(VB_EIT, LOC + QString("Dropping existing subtitle from title"));
     1154                                event.title    = tmpExp1.cap(1);
     1155                        } else {
     1156                                VERBOSE(VB_EIT, LOC + QString("Found colon, but it seems there already is a subtitle"));
     1157                        }
     1158                }
     1159    }
     1160}
     1161
     1162
     1163/** \fn EITFixUp::FixTitleQuote(DBEventEIT&) const
     1164 *  \brief After cleanup, sometimes the title/subtitle will be in quotes
     1165 */
     1166void EITFixUp::FixTitleQuote(DBEventEIT &event) const
     1167{
     1168        // Trimming may seem to be done twice,
     1169        // But after removing quotes, it is needed again
     1170        if (!event.title.isEmpty())
     1171                event.title = event.title.trimmed();
     1172        if (!event.subtitle.isEmpty())
     1173                event.subtitle = event.subtitle.trimmed();
     1174        if (!event.description.isEmpty())
     1175                event.description = event.description.trimmed();
     1176 
     1177        if (event.title.startsWith("\""))
     1178        {
     1179                if(event.title.endsWith("\""))
     1180                {
     1181                        VERBOSE(VB_EIT, LOC + QString("Removing quotes around title"));
     1182                        event.title = event.title.mid(1,event.title.length() -2);
     1183                       
     1184                }
     1185                else
     1186                {
     1187                        int titleEndPos;
     1188                        titleEndPos = event.title.indexOf('"',1);
     1189                        if(titleEndPos != -1)
     1190                        {
     1191                                VERBOSE(VB_EIT, LOC + QString("Removing quotes around title, moving rest to desc."));
     1192                                event.description = event.description + QString(" ") + event.title.mid(titleEndPos + 1);
     1193                                event.title = event.title.mid(1,titleEndPos - 1);
     1194                        }
     1195                }
     1196        }
     1197        if (event.subtitle.startsWith("\"") && event.subtitle.endsWith("\""))
     1198        {
     1199                VERBOSE(VB_EIT, LOC + QString("Removing quotes around subtitle"));
     1200                event.subtitle = event.subtitle.mid(1,event.title.length() -2);
     1201        }
     1202}
     1203
     1204/** \fn EITFixUp::FixNO(DBEventEIT&) const
     1205 *  \brief Use this to standardise the Norwegian channels. Only NRK for now.
     1206 */
     1207void EITFixUp::FixNO(DBEventEIT &event) const
     1208{
     1209    int        position;
     1210    QRegExp    tmpExp1;
     1211    // Remove category from program-titles
     1212        // Have seen "NRK2s historiekveld: Film: bla-bla"
     1213    tmpExp1 = m_NRKCategories;
     1214    while ((position = tmpExp1.indexIn(event.title)) != -1){
     1215                VERBOSE(VB_EIT, LOC + QString("Looping Category match"));
     1216                if(tmpExp1.cap(2).length() > 1){
     1217                        event.title  = tmpExp1.cap(2);
     1218                        event.description = "(" + tmpExp1.cap(1) + ") " + event.description;
     1219                        VERBOSE(VB_EIT, LOC + QString("Category ") + tmpExp1.cap(1)  + QString(" removed") );
     1220                }
     1221    }
     1222    // Remove season premiere markings
     1223    tmpExp1 = m_NOPremiere;
     1224    if ((position = tmpExp1.indexIn(event.title)) >=3){
     1225                VERBOSE(VB_EIT, LOC + QString("Removing Premiere tag"));
     1226                event.title.remove(m_NOPremiere);
     1227    }
     1228    // should doctor event.programId to only contain ASCII chars
     1229   
     1230}
     1231
    10841232/** \fn EITFixUp::FixRTL(DBEventEIT&) const
    10851233 *  \brief Use this to standardise the RTL group guide in Germany.
    10861234 */
  • libs/libmythtv/eithelper.cpp

     
    692692    ///////////////////////////////////////////////////////////////////////////
    693693    // Fixups to make EIT provided listings more useful
    694694    // transport_id<<32 | netword_id<<16 | service_id
     695  // NRK hos hakon
     696  // mplexid    sourceid        transportid     networkid
     697  // 27         2               910             8770
     698  //
    695699
    696700    // Bell Express VU Canada
    697701    fix[  256U << 16] = EITFixUp::kFixBell;
     
    736740    fix[40999U << 16 | 1131] = EITFixUp::kFixSubtitle;
    737741    fix[40999U << 16 | 1068] = EITFixUp::kFixSubtitle;
    738742    fix[40999U << 16 | 1069] = EITFixUp::kFixSubtitle;
     743    // Norway/NTV
     744    fix[8770U  << 16 | 0x006f] = EITFixUp::kFixNO;  //NRK Folkemusikk
     745    fix[8770U  << 16 | 0x0070] = EITFixUp::kFixNO;  //NRK Stortinget
     746    fix[8770U  << 16 | 0x0071] = EITFixUp::kFixNO;  //NRK Super
     747    fix[8770U  << 16 | 0x0072] = EITFixUp::kFixNO;  //NRK Sport
     748    fix[8770U  << 16 | 0x0073] = EITFixUp::kFixNO;  //NRK Gull
     749    fix[8770U  << 16 | 0x0074] = EITFixUp::kFixNO;  //NRK Jazz
     750    fix[8770U  << 16 | 0x0067] = EITFixUp::kFixNO;  //NRK Super / NRK3
     751    fix[8770U  << 16 | 0x0068] = EITFixUp::kFixNO;  //NRK Tegnsprï¿œ
     752    fix[8770U  << 16 | 0x0069] = EITFixUp::kFixNO;  //NRK P2
     753    fix[8770U  << 16 | 0x006a] = EITFixUp::kFixNO;  //NRK P3
     754    fix[8770U  << 16 | 0x006b] = EITFixUp::kFixNO;  //NRK Alltid Nyheter
     755    fix[8770U  << 16 | 0x006c] = EITFixUp::kFixNO;  //NRK mP3
     756    fix[8770U  << 16 | 0x006d] = EITFixUp::kFixNO;  //NRK Klassisk
     757    fix[8770U  << 16 | 0x006e] = EITFixUp::kFixNO;  //NRK Sï¿œi Radio
     758    fix[8770U  << 16 | 0x0066] = EITFixUp::kFixNO;  //NRK2
     759    fix[8770U  << 16 | 0x03f0] = EITFixUp::kFixNO;  //NRK1 Mï¿œe og Romsdal
     760    fix[8770U  << 16 | 0x0455] = EITFixUp::kFixNO;  //NRK P1 Trï¿œdelag
     761    fix[8770U  << 16 | 0x03f1] = EITFixUp::kFixNO;  //NRK1 Midtnytt
    739762
    740763    // Australia
    741764    fix[ 4096U << 16] = EITFixUp::kFixAUStar;
  • libs/libmythtv/eitfixup.h

     
    4545        kFixPremiere   = 0x0400,
    4646        kFixHDTV       = 0x0800,
    4747        kFixNL         = 0x1000,
     48        kFixNO         = 0x2000,
    4849
    4950        // Early fixups
    50         kEFixForceISO8859_1  = 0x2000,
    51         kEFixForceISO8859_15 = 0x4000,
     51        kEFixForceISO8859_1  = 0x4000,
     52        kEFixForceISO8859_15 = 0x8000,
    5253    };
    5354
    5455    EITFixUp();
     
    7778                   bool parse_subtitle) const;      // Sweden DVB-C
    7879    void FixAUStar(DBEventEIT &event) const;        // Australia DVB-S
    7980    void FixMCA(DBEventEIT &event) const;           // MultiChoice Africa DVB-S
     81    void FixNO(DBEventEIT &event) const;            // Norway, only NRK for now
     82    void FixTitleQuote(DBEventEIT &event) const;    // Remove quotes from title/subtitle
     83    void FixColonSubtitle(DBEventEIT &event) const; // Norway, only NRK for now
     84    void FixNRKSeries(DBEventEIT &event) const;     // Norway, only NRK for now
    8085    void FixRTL(DBEventEIT &event) const;           // RTL group DVB
    8186    void FixFI(DBEventEIT &event) const;            // Finland DVB-T
    8287    void FixPremiere(DBEventEIT &event) const;      // german pay-tv Premiere
     
    170175    const QRegExp m_nlDirector;
    171176    const QRegExp m_nlCat;
    172177    const QRegExp m_nlOmroep;
     178    const QRegExp m_ColonSubtitle;
     179    const QRegExp m_NRKCategories;
     180    const QRegExp m_NOPremiere;
     181    const QRegExp m_NRKPartOfSeries;
    173182};
    174183
    175184#endif // EITFIXUP_H