00001 #include "eitfixup.h"
00002 #include "mythcontext.h"
00003 #include "dvbdescriptors.h"
00004
00005 #include "programinfo.h"
00006
00007
00008
00009
00010
00011 EITFixUp::EITFixUp()
00012 : m_bellYear("[\\(]{1}[0-9]{4}[\\)]{1}"),
00013 m_bellActors("\\set\\s|,"),
00014 m_bellPPVTitleAllDay("\\s*\\(All Day.*\\)\\s*$"),
00015 m_bellPPVTitleHD("^HD\\s?-\\s?"),
00016 m_bellPPVSubtitleAllDay("^All Day \\(.*\\sEastern\\)$"),
00017 m_bellPPVDescriptionAllDay("^\\(.*\\sEastern\\)"),
00018 m_bellPPVDescriptionAllDay2("^\\([0-9].*am-[0-9].*am\\sET\\)"),
00019 m_bellPPVDescriptionEventId("\\([0-9]{5}\\)"),
00020 m_ukThen("\\s*(Then|Followed by) 60 Seconds\\.", false),
00021 m_ukNew("(New\\.|\\s*(Brand New|New)\\s*(Series|Episode)\\s*[:\\.\\-])",false),
00022 m_ukCEPQ("[:\\!\\.\\?]"),
00023 m_ukColonPeriod("[:\\.]"),
00024 m_ukDotSpaceStart("^\\. "),
00025 m_ukDotEnd("\\.$"),
00026 m_ukSpaceColonStart("^[ |:]*"),
00027 m_ukSpaceStart("^ "),
00028 m_ukSeries("\\s*\\(?\\s*(?:Episode|Part|Pt)?\\s*(\\d{1,2})\\s*(?:of|/)\\s*(\\d{1,2})\\s*\\)?\\s*(?:\\.|:)?", false),
00029 m_ukCC("\\[(?:(AD|SL|S|W),?)+\\]"),
00030 m_ukYear("[\\[\\(]([\\d]{4})[\\)\\]]"),
00031 m_uk24ep("^\\d{1,2}:00[ap]m to \\d{1,2}:00[ap]m: "),
00032 m_ukStarring("(?:Western\\s)?[Ss]tarring ([\\w\\s\\-']+)[Aa]nd\\s([\\w\\s\\-']+)[\\.|,](?:\\s)*(\\d{4})?(?:\\.\\s)?"),
00033 m_ukBBC7rpt("\\[Rptd?[^]]+\\d{1,2}\\.\\d{1,2}[ap]m\\]\\."),
00034 m_ukDescriptionRemove("^(?:CBBC\\s*\\.|CBeebies\\s*\\.|Class TV\\s*:|BBC Switch\\.)"),
00035 m_ukTitleRemove("^(?:[tT]4:|Schools\\s*:)"),
00036 m_ukDoubleDotEnd("\\.\\.+$"),
00037 m_ukDoubleDotStart("^\\.\\.+"),
00038 m_ukTime("\\d{1,2}[\\.:]\\d{1,2}\\s*(am|pm|)"),
00039 m_ukBBC34("BBC (?:THREE|FOUR) on BBC (?:ONE|TWO)\\.",false),
00040 m_ukYearColon("^[\\d]{4}:"),
00041 m_ukExclusionFromSubtitle("(starring|stars\\s|drama|series|sitcom)",false),
00042 m_ukCompleteDots("^\\.\\.+$"),
00043 m_comHemCountry("^(\\(.+\\))?\\s?([^ ]+)\\s([^\\.0-9]+)"
00044 "(?:\\sfrån\\s([0-9]{4}))(?:\\smed\\s([^\\.]+))?\\.?"),
00045 m_comHemDirector("[Rr]egi"),
00046 m_comHemActor("[Ss]kådespelare|[Ii] rollerna"),
00047 m_comHemHost("[Pp]rogramledare"),
00048 m_comHemSub("[.\\?\\!] "),
00049 m_comHemRerun1("[Rr]epris\\sfrån\\s([^\\.]+)(?:\\.|$)"),
00050 m_comHemRerun2("([0-9]+)/([0-9]+)(?:\\s-\\s([0-9]{4}))?"),
00051 m_comHemTT("[Tt]ext-[Tt][Vv]"),
00052 m_comHemPersSeparator("(, |\\soch\\s)"),
00053 m_comHemPersons("\\s?([Rr]egi|[Ss]kådespelare|[Pp]rogramledare|"
00054 "[Ii] rollerna):\\s([^\\.]+)\\."),
00055 m_comHemSubEnd("\\s?\\.\\s?$"),
00056 m_comHemSeries1("\\s?(?:[dD]el|[eE]pisode)\\s([0-9]+)"
00057 "(?:\\s?(?:/|:|av)\\s?([0-9]+))?\\."),
00058 m_comHemSeries2("\\s?-?\\s?([Dd]el\\s+([0-9]+))"),
00059 m_comHemTSub("\\s+-\\s+([^\\-]+)"),
00060 m_mcaIncompleteTitle("(.*).\\.\\.\\.$"),
00061 m_mcaCompleteTitlea("^'?("),
00062 m_mcaCompleteTitleb("[^\\.\\?]+[^\\'])'?[\\.\\?]\\s+(.+)"),
00063 m_mcaSubtitle("^'([^\\.]+)'\\.\\s+(.+)"),
00064 m_mcaSeries("(^\\d+)\\/(\\d+)\\s-\\s(.*)$"),
00065 m_mcaCredits("(.*)\\s\\((\\d{4})\\)\\s*([^\\.]+)\\.?\\s*$"),
00066 m_mcaAvail("\\s(Only available on [^\\.]*bouquet|Not available in RSA [^\\.]*)\\.?"),
00067 m_mcaActors("(.*\\.)\\s+([^\\.]+\\s[A-Z][^\\.]+)\\.\\s*"),
00068 m_mcaActorsSeparator("(,\\s+)"),
00069 m_mcaYear("(.*)\\s\\((\\d{4})\\)\\s*$"),
00070 m_mcaCC(",?\\s(HI|English) Subtitles\\.?"),
00071 m_mcaDD(",?\\sDD\\.?"),
00072 m_RTLrepeat("(\\(|\\s)?Wiederholung.+vo[m|n].+((?:\\d{2}\\.\\d{2}\\.\\d{4})|(?:\\d{2}[:\\.]\\d{2}\\sUhr))\\)?"),
00073 m_RTLSubtitle("^([^\\.]{3,})\\.\\s+(.+)"),
00074 m_RTLSubtitle1("^Folge\\s(\\d{1,4})\\s*:\\s+'(.*)'(?:\\.\\s*|$)"),
00075 m_RTLSubtitle2("^Folge\\s(\\d{1,4})\\s+(.{,5}[^\\.]{,120})[\\?!\\.]\\s*"),
00076 m_RTLSubtitle3("^(?:Folge\\s)?(\\d{1,4}(?:\\/[IVX]+)?)\\s+(.{,5}[^\\.]{,120})[\\?!\\.]\\s*"),
00077 m_RTLSubtitle4("^Thema.{0,5}:\\s([^\\.]+)\\.\\s*"),
00078 m_RTLSubtitle5("^'(.+)'\\.\\s*"),
00079 m_RTLEpisodeNo1("^(Folge\\s\\d{1,4})\\.*\\s*"),
00080 m_RTLEpisodeNo2("^(\\d{1,2}\\/[IVX]+)\\.*\\s*"),
00081 m_fiRerun("Uusinta.?"),
00082 m_Stereo("(Stereo)"),
00083 m_dePremiereInfos("([^.]+)?\\s?([0-9]{4})\\.\\s[0-9]+\\sMin\\.(?:\\sVon"
00084 "\\s([^,]+)(?:,|\\su\\.\\sa\\.)\\smit\\s(.+)\\.)?"),
00085 m_dePremiereOTitle("\\s*\\(([^\\)]*)\\)$"),
00086 m_nlStereo("stereo"),
00087 m_nlTxt("txt"),
00088 m_nlWide("breedbeeld"),
00089 m_nlRepeat("herh."),
00090 m_nlHD("\\sHD$"),
00091 m_nlSub("\\sAfl\\.:\\s([^\\.]+)\\."),
00092 m_nlActors("\\sMet:\\s.+e\\.a\\."),
00093 m_nlPres("\\sPresentatie:\\s([^\\.]+)\\."),
00094 m_nlPersSeparator("(, |\\sen\\s)"),
00095 m_nlRub("\\s?\\({1}\\W+\\){1}\\s?"),
00096 m_nlYear1("(?=\\suit\\s)([1-2]{2}[0-9]{2})"),
00097 m_nlYear2("([\\s]{1}[\\(]{1}[A-Z]{0,3}/?)([1-2]{2}[0-9]{2})([\\)]{1})"),
00098 m_nlDirector("(?=\\svan\\s)(([A-Z]{1}[a-z]+\\s)|([A-Z]{1}\\.\\s))"),
00099 m_nlCat("^(Amusement|Muziek|Informatief|Nieuws/actualiteiten|Jeugd|Animatie|Sport|Serie/soap|Kunst/Cultuur|Documentaire|Film|Natuur|Erotiek|Comedy|Misdaad|Religieus)\\.\\s"),
00100 m_nlOmroep ("\\s\\(([A-Z]+/?)+\\)$")
00101
00102 {
00103 }
00104
00105 void EITFixUp::Fix(DBEvent &event) const
00106 {
00107 if (event.fixup)
00108 {
00109 if (event.subtitle == event.title)
00110 event.subtitle = QString::null;
00111
00112 if (event.description.isEmpty() && !event.subtitle.isEmpty())
00113 {
00114 event.description = event.subtitle;
00115 event.subtitle = QString::null;
00116 }
00117 }
00118
00119 if (kFixHDTV & event.fixup)
00120 event.videoProps |= VID_HDTV;
00121
00122 if (kFixBell & event.fixup)
00123 FixBellExpressVu(event);
00124
00125 if (kFixUK & event.fixup)
00126 FixUK(event);
00127
00128 if (kFixPBS & event.fixup)
00129 FixPBS(event);
00130
00131 if (kFixComHem & event.fixup)
00132 FixComHem(event, kFixSubtitle & event.fixup);
00133
00134 if (kFixAUStar & event.fixup)
00135 FixAUStar(event);
00136
00137 if (kFixMCA & event.fixup)
00138 FixMCA(event);
00139
00140 if (kFixRTL & event.fixup)
00141 FixRTL(event);
00142
00143 if (kFixFI & event.fixup)
00144 FixFI(event);
00145
00146 if (kFixPremiere & event.fixup)
00147 FixPremiere(event);
00148
00149 if (kFixNL & event.fixup)
00150 FixNL(event);
00151
00152 if (event.fixup)
00153 {
00154 if (!event.title.isEmpty())
00155 event.title = event.title.stripWhiteSpace();
00156 if (!event.subtitle.isEmpty())
00157 event.subtitle = event.subtitle.stripWhiteSpace();
00158 if (!event.description.isEmpty())
00159 event.description = event.description.stripWhiteSpace();
00160 }
00161 }
00162
00168 void EITFixUp::FixBellExpressVu(DBEvent &event) const
00169 {
00170 QString tmp = "";
00171
00172
00173
00174 int position = event.description.find(0x0D);
00175
00176 if (position != -1)
00177 {
00178
00179
00180 event.subtitle = event.description.left(position);
00181 event.description = event.description.right(
00182 event.description.length() - position - 2);
00183 }
00184
00185
00186
00187 position = event.description.find(".");
00188
00189
00190 if (position < 10)
00191 {
00192 const QString stmp = event.description;
00193 event.description = stmp.right(stmp.length() - position - 2);
00194 event.category = stmp.left(position);
00195 }
00196 else
00197 {
00198 event.category = "Unknown";
00199 }
00200
00201
00202
00203 if (event.category == "-")
00204 event.category = "OffAir";
00205
00206 if (event.category.length() > 10)
00207 event.category = "Unknown";
00208
00209
00210
00211 position = event.description.find(m_bellYear);
00212 if (position != -1 && event.category != "")
00213 {
00214 tmp = "";
00215
00216 bool ok;
00217 uint y = event.description.mid(position + 1, 4).toUInt(&ok);
00218 if (ok)
00219 event.originalairdate = QDate(y, 1, 1);
00220
00221
00222 if (position > 3)
00223 {
00224 tmp = event.description.left(position-3);
00225 QStringList actors = QStringList::split(m_bellActors, tmp);
00226 QStringList::const_iterator it = actors.begin();
00227 for (; it != actors.end(); it++)
00228 event.AddPerson(DBPerson::kActor, *it);
00229 }
00230
00231 event.description = event.description.right(
00232 event.description.length() - position - 7);
00233 }
00234
00235
00236
00237 position = event.description.find("(CC)");
00238 if (position != -1)
00239 {
00240 event.subtitleType |= SUB_HARDHEAR;
00241 event.description = event.description.replace("(CC)", "");
00242 }
00243
00244
00245 position = event.description.find("(Stereo)");
00246 if (position != -1)
00247 {
00248 event.audioProps |= AUD_STEREO;
00249 event.description = event.description.replace("(Stereo)", "");
00250 }
00251
00252
00253 position = event.title.find(m_bellPPVTitleAllDay);
00254 if (position != -1)
00255 {
00256 event.title = event.title.replace(m_bellPPVTitleAllDay, "");
00257 }
00258
00259
00260 position = event.title.find(m_bellPPVTitleHD);
00261 if (position != -1)
00262 {
00263 event.title = event.title.replace(m_bellPPVTitleHD, "");
00264 event.videoProps |= VID_HDTV;
00265 }
00266
00267
00268 position = event.subtitle.find(m_bellPPVSubtitleAllDay);
00269 if (position != -1)
00270 {
00271 event.subtitle = event.subtitle.replace(m_bellPPVSubtitleAllDay, "");
00272 }
00273
00274
00275 position = event.description.find(m_bellPPVDescriptionAllDay);
00276 if (position != -1)
00277 {
00278 event.description = event.description.replace(m_bellPPVDescriptionAllDay, "");
00279 }
00280
00281
00282 position = event.description.find(m_bellPPVDescriptionAllDay2);
00283 if (position != -1)
00284 {
00285 event.description = event.description.replace(m_bellPPVDescriptionAllDay2, "");
00286 }
00287
00288
00289 position = event.description.find(m_bellPPVDescriptionEventId);
00290 if (position != -1)
00291 {
00292 event.description = event.description.replace(m_bellPPVDescriptionEventId, "");
00293 }
00294
00295 }
00296
00300 void EITFixUp::SetUKSubtitle(DBEvent &event) const
00301 {
00302 QStringList strListColon = QStringList::split(":",event.description,TRUE);
00303 QStringList strListEnd;
00304
00305 bool fColon = false;
00306 int nPosition1;
00307 QString strEnd;
00308 if (strListColon.count()>1)
00309 {
00310 bool fDoubleDot = false;
00311 bool fSingleDot = true;
00312 int nLength = strListColon[0].length();
00313
00314 nPosition1 = event.description.find("..");
00315 if ((nPosition1 < nLength) && (nPosition1 >= 0))
00316 fDoubleDot = true;
00317 nPosition1 = event.description.find(".");
00318 if (nPosition1==-1)
00319 fSingleDot = false;
00320 if (nPosition1 > nLength)
00321 fSingleDot = false;
00322 else
00323 {
00324 QString strTmp = event.description.mid(nPosition1+1,
00325 nLength-nPosition1);
00326
00327 if (QStringList::split(" ", strTmp ,TRUE).count()< kMaxDotToColon)
00328 fSingleDot = false;
00329 }
00330
00331 if (fDoubleDot)
00332 {
00333 strListEnd = strListColon;
00334 fColon = true;
00335 }
00336 else if (!fSingleDot)
00337 {
00338 QStringList strListTmp;
00339 uint nTitle=0;
00340 int nTitleMax=-1;
00341 int i;
00342 for (i =0; (i<(int)strListColon.count()) && (nTitleMax==-1);i++)
00343 {
00344 if ((nTitle+=
00345 QStringList::split(" ",strListColon[i],TRUE).count())
00346 <kMaxToTitle)
00347 strListTmp.push_back(strListColon[i]);
00348 else
00349 nTitleMax=i;
00350 }
00351 QString strPartial;
00352 for (i=0;i<(nTitleMax-1);i++)
00353 strPartial+=strListTmp[i]+":";
00354 if (nTitleMax>0)
00355 {
00356 strPartial+=strListTmp[nTitleMax-1];
00357 strListEnd.push_back(strPartial);
00358 }
00359 for (i=nTitleMax+1;i<(int)strListColon.count();i++)
00360 strListEnd.push_back(strListColon[i]);
00361 fColon = true;
00362 }
00363 }
00364 QStringList strListPeriod;
00365 QStringList strListQuestion;
00366 QStringList strListExcl;
00367 if (!fColon)
00368 {
00369 strListPeriod = QStringList::split(".",event.description,TRUE);
00370 if (strListPeriod.count() >1)
00371 {
00372 nPosition1 = event.description.find(".");
00373 int nPosition2 = event.description.find("..");
00374 if ((nPosition1 < nPosition2) || (nPosition2==-1))
00375 strListEnd = strListPeriod;
00376 }
00377
00378 strListQuestion = QStringList::split("?",event.description,TRUE);
00379 strListExcl = QStringList::split("!",event.description,TRUE);
00380 if ((strListQuestion.count()>1) &&
00381 (strListQuestion.count()<=kMaxQuestionExclamation))
00382 {
00383 strListEnd = strListQuestion;
00384 strEnd = "?";
00385 }
00386 else if ((strListExcl.count()>1) &&
00387 (strListExcl.count()<=kMaxQuestionExclamation))
00388 {
00389 strListEnd = strListExcl;
00390 strEnd = "!";
00391 }
00392 else
00393 strEnd = QString::null;
00394 }
00395
00396 if (strListEnd.count())
00397 {
00398 QStringList strListSpace = QStringList::split(" ",strListEnd[0]);
00399 if (fColon && (strListSpace.count() > kMaxToTitle))
00400 return;
00401 if (strListSpace.count() > kDotToTitle)
00402 return;
00403 if (strListSpace.grep(m_ukExclusionFromSubtitle).count()==0)
00404 {
00405 event.subtitle = strListEnd[0]+strEnd;
00406 event.subtitle.remove(m_ukSpaceColonStart);
00407 event.description=
00408 event.description.mid(strListEnd[0].length()+1);
00409 event.description.remove(m_ukSpaceColonStart);
00410 }
00411 }
00412 }
00413
00414
00418 void EITFixUp::FixUK(DBEvent &event) const
00419 {
00420 int position1;
00421 int position2;
00422 QString strFull;
00423
00424 bool isMovie = event.category.startsWith("Movie",false);
00425
00426 event.description = event.description.remove(m_ukThen);
00427 event.description = event.description.remove(m_ukNew);
00428
00429
00430 event.title = event.title.remove(m_ukTitleRemove);
00431 event.description = event.description.remove(m_ukDescriptionRemove);
00432
00433
00434 event.description = event.description.remove(m_ukBBC34);
00435
00436
00437 event.description = event.description.remove(m_ukBBC7rpt);
00438
00439
00440 QRegExp tmpCC = m_ukCC;
00441 if ((position1 = tmpCC.search(event.description)) != -1)
00442 {
00443 QStringList tmpCCitems = QStringList::split(",",tmpCC.cap(0).remove("[").remove("]"));
00444 if (tmpCCitems.contains("AD"))
00445 event.audioProps |= AUD_VISUALIMPAIR;
00446 if (tmpCCitems.contains("S"))
00447 event.subtitleType |= SUB_NORMAL;
00448 if (tmpCCitems.contains("SL"))
00449 event.subtitleType |= SUB_SIGNED;
00450 if (tmpCCitems.contains("W"))
00451 event.videoProps |= VID_WIDESCREEN;
00452 event.description = event.description.remove(m_ukCC);
00453 }
00454
00455 event.title = event.title.stripWhiteSpace();
00456 event.description = event.description.stripWhiteSpace();
00457
00458
00459 bool series = false;
00460 QRegExp tmpExp1 = m_ukSeries;
00461 if ((position1 = tmpExp1.search(event.title)) != -1)
00462 {
00463 if ((tmpExp1.cap(1).toUInt() <= tmpExp1.cap(2).toUInt())
00464 && tmpExp1.cap(2).toUInt()<=50)
00465 {
00466 event.partnumber = tmpExp1.cap(1).toUInt();
00467 event.parttotal = tmpExp1.cap(2).toUInt();
00468
00469 event.title = event.title.left(position1) +
00470 event.title.mid(position1 + tmpExp1.cap(0).length());
00471 series = true;
00472 }
00473 }
00474 else if ((position1 = tmpExp1.search(event.description)) != -1)
00475 {
00476 if ((tmpExp1.cap(1).toUInt() <= tmpExp1.cap(2).toUInt())
00477 && tmpExp1.cap(2).toUInt()<=50)
00478 {
00479 event.partnumber = tmpExp1.cap(1).toUInt();
00480 event.parttotal = tmpExp1.cap(2).toUInt();
00481
00482 event.description = event.description.left(position1) +
00483 event.description.mid(position1+tmpExp1.cap(0).length());
00484 series = true;
00485 }
00486 }
00487 if (series)
00488 event.category_type = kCategorySeries;
00489
00490 QRegExp tmpStarring = m_ukStarring;
00491 if (tmpStarring.search(event.description) != -1)
00492 {
00493
00494 event.AddPerson(DBPerson::kActor, tmpStarring.cap(1));
00495 event.AddPerson(DBPerson::kActor, tmpStarring.cap(2));
00496 if (tmpStarring.cap(3).length() > 0)
00497 {
00498 event.airdate = tmpStarring.cap(3);
00499 bool ok;
00500 uint y = tmpStarring.cap(3).toUInt(&ok);
00501 if (ok)
00502 event.originalairdate = QDate(y, 1, 1);
00503 }
00504 }
00505
00506 QRegExp tmp24ep = m_uk24ep;
00507 if (!event.title.startsWith("CSI:") && !event.title.startsWith("CD:"))
00508 {
00509 if (((position1=event.title.find(m_ukDoubleDotEnd)) != -1) &&
00510 ((position2=event.description.find(m_ukDoubleDotStart)) != -1))
00511 {
00512 QString strPart=event.title.remove(m_ukDoubleDotEnd)+" ";
00513 strFull = strPart + event.description.remove(m_ukDoubleDotStart);
00514 if (isMovie &&
00515 ((position1 = strFull.find(m_ukCEPQ,strPart.length())) != -1))
00516 {
00517 if (strFull[position1] == '!' || strFull[position1] == '?')
00518 position1++;
00519 event.title = strFull.left(position1);
00520 event.description = strFull.mid(position1 + 1);
00521 event.description.remove(m_ukSpaceStart);
00522 }
00523 else if ((position1 = strFull.find(m_ukCEPQ)) != -1)
00524 {
00525 if (strFull[position1] == '!' || strFull[position1] == '?')
00526 position1++;
00527 event.title = strFull.left(position1);
00528 event.description = strFull.mid(position1 + 1);
00529 event.description.remove(m_ukSpaceStart);
00530 SetUKSubtitle(event);
00531 }
00532 if ((position1 = strFull.find(m_ukYear)) != -1)
00533 {
00534
00535 if ((uint)position1 < SUBTITLE_MAX_LEN)
00536 {
00537 event.description = event.title.mid(position1);
00538 event.title = event.title.left(position1);
00539 }
00540 }
00541 }
00542 else if ((position1 = tmp24ep.search(event.description)) != -1)
00543 {
00544
00545
00546 event.subtitle = event.description.mid(position1,
00547 tmp24ep.cap(0).length() - 2);
00548 event.description = event.description.remove(tmp24ep.cap(0));
00549 }
00550 else if ((position1 = event.description.find(m_ukTime)) == -1)
00551 {
00552 if (!isMovie && (event.title.find(m_ukYearColon) < 0))
00553 {
00554 if (((position1 = event.title.find(":")) != -1) &&
00555 (event.description.find(":") < 0 ))
00556 {
00557 if (event.title.mid(position1+1).find(m_ukCompleteDots)==0)
00558 {
00559 SetUKSubtitle(event);
00560 QString strTmp = event.title.mid(position1+1);
00561 event.title.setLength(position1);
00562 event.subtitle = strTmp+event.subtitle;
00563 }
00564 else if ((uint)position1 < SUBTITLE_MAX_LEN)
00565 {
00566 event.subtitle = event.title.mid(position1 + 1);
00567 event.title = event.title.left(position1);
00568 }
00569 }
00570 else
00571 SetUKSubtitle(event);
00572 }
00573 }
00574 }
00575
00576 if (!isMovie && event.subtitle.isEmpty())
00577 {
00578 if ((position1=event.description.find(m_ukTime)) != -1)
00579 {
00580 position2 = event.description.find(m_ukColonPeriod);
00581 if ((position2>=0) && (position2 < (position1-2)))
00582 SetUKSubtitle(event);
00583 }
00584 else if ((position1=event.title.find("-")) != -1)
00585 {
00586 if ((uint)position1 < SUBTITLE_MAX_LEN)
00587 {
00588 event.subtitle = event.title.mid(position1 + 1);
00589 event.subtitle.remove(m_ukSpaceColonStart);
00590 event.title = event.title.left(position1);
00591 }
00592 }
00593 else
00594 SetUKSubtitle(event);
00595 }
00596
00597
00598 QRegExp tmpUKYear = m_ukYear;
00599 if ((position1 = tmpUKYear.search(event.description)) != -1)
00600 {
00601 QString stmp = event.description;
00602 int itmp = position1 + tmpUKYear.cap(0).length();
00603 event.description = stmp.left(position1) + stmp.mid(itmp);
00604 event.airdate = tmpUKYear.cap(1);
00605 bool ok;
00606 uint y = tmpUKYear.cap(1).toUInt(&ok);
00607 if (ok)
00608 event.originalairdate = QDate(y, 1, 1);
00609 }
00610
00611
00612 event.subtitle.remove(m_ukDotSpaceStart);
00613 if (event.subtitle.findRev("..") != (((int)event.subtitle.length())-2))
00614 event.subtitle.remove(m_ukDotEnd);
00615
00616
00617 if (event.description.isEmpty() && !event.subtitle.isEmpty())
00618 {
00619 event.description=event.subtitle;
00620 event.subtitle=QString::null;
00621 }
00622 }
00623
00627 void EITFixUp::FixPBS(DBEvent &event) const
00628 {
00629
00630 int position = event.description.find(':');
00631 if (position != -1)
00632 {
00633 const QString stmp = event.description;
00634 event.subtitle = stmp.left(position);
00635 event.description = stmp.right(stmp.length() - position - 2);
00636 }
00637 }
00638
00642 void EITFixUp::FixComHem(DBEvent &event, bool process_subtitle) const
00643 {
00644
00645 if (event.subtitle.isEmpty() && !event.description.isEmpty())
00646 {
00647 event.subtitle = event.description;
00648 event.description = "";
00649 }
00650
00651
00652 event.subtitle = "";
00653
00654 bool isSeries = false;
00655
00656 int pos;
00657 QRegExp tmpSeries1 = m_comHemSeries1;
00658 QRegExp tmpSeries2 = m_comHemSeries2;
00659 if ((pos = tmpSeries2.search(event.title)) != -1)
00660 {
00661 QStringList list = tmpSeries2.capturedTexts();
00662 event.partnumber = list[2].toUInt();
00663 event.title = event.title.replace(list[0],"");
00664 }
00665 else if ((pos = tmpSeries1.search(event.description)) != -1)
00666 {
00667 QStringList list = tmpSeries1.capturedTexts();
00668 if (!list[1].isEmpty())
00669 {
00670 event.partnumber = list[1].toUInt();
00671 }
00672 if (!list[2].isEmpty())
00673 {
00674 event.parttotal = list[2].toUInt();
00675 }
00676
00677
00678
00679 if(pos > 0)
00680 event.description = event.description.replace(list[0],"");
00681 isSeries = true;
00682 }
00683
00684
00685
00686 if (event.partnumber > 0)
00687 {
00688 event.subtitle = QString("Del %1").arg(event.partnumber);
00689 if (event.parttotal > 0)
00690 {
00691 event.subtitle += QString(" av %1").arg(event.parttotal);
00692 }
00693 }
00694
00695
00696 QRegExp tmpTSub = m_comHemTSub;
00697 if (tmpTSub.search(event.title) != -1)
00698 {
00699 event.subtitle = tmpTSub.cap(1);
00700 event.title = event.title.replace(tmpTSub.cap(0),"");
00701 }
00702
00703
00704 if (event.description.length() <= 0)
00705 return;
00706
00707
00708
00709 QRegExp tmpCountry = m_comHemCountry;
00710 pos = tmpCountry.search(event.description);
00711 if (pos != -1)
00712 {
00713 QStringList list = tmpCountry.capturedTexts();
00714 QString replacement;
00715
00716
00717
00718 if (list[1].length() > 0)
00719 {
00720 replacement = list[1] + " ";
00721
00722 }
00723
00724
00725 if (list[2].length() > 0)
00726 {
00727 replacement += list[2] + " ";
00728
00729 }
00730
00731
00732 if (list[3].length() > 0)
00733 {
00734 replacement += list[3] + ".";
00735 if(event.category.isEmpty())
00736 {
00737 event.category = list[3];
00738 }
00739
00740 if(list[3].find("serie")!=-1)
00741 {
00742 isSeries = true;
00743 }
00744 }
00745
00746
00747 if (list[4].length() > 0)
00748 {
00749 event.airdate = list[4].stripWhiteSpace();
00750 }
00751
00752
00753 if (list[5].length() > 0)
00754 {
00755 QStringList actors;
00756 actors=QStringList::split(m_comHemPersSeparator,list[5]);
00757 for(QStringList::size_type i=0;i<actors.count();i++)
00758 {
00759 event.AddPerson(DBPerson::kActor, actors[i]);
00760 }
00761 }
00762
00763
00764
00765
00766 event.description = event.description.replace(list[0],replacement);
00767 }
00768
00769 if (isSeries)
00770 event.category_type = kCategorySeries;
00771
00772
00773 QRegExp tmpPersons = m_comHemPersons;
00774 while(pos = tmpPersons.search(event.description),pos!=-1)
00775 {
00776 DBPerson::Role role;
00777 QStringList list = tmpPersons.capturedTexts();
00778
00779 QRegExp tmpDirector = m_comHemDirector;
00780 QRegExp tmpActor = m_comHemActor;
00781 QRegExp tmpHost = m_comHemHost;
00782 if (tmpDirector.search(list[1])!=-1)
00783 {
00784 role = DBPerson::kDirector;
00785 }
00786 else if(tmpActor.search(list[1])!=-1)
00787 {
00788 role = DBPerson::kActor;
00789 }
00790 else if(tmpHost.search(list[1])!=-1)
00791 {
00792 role = DBPerson::kHost;
00793 }
00794 else
00795 {
00796 event.description=event.description.replace(list[0],"");
00797 continue;
00798 }
00799
00800 QStringList actors;
00801 actors = QStringList::split(m_comHemPersSeparator, list[2]);
00802 for(QStringList::size_type i=0;i<actors.count();i++)
00803 {
00804 event.AddPerson(role, actors[i]);
00805 }
00806
00807
00808 event.description=event.description.replace(list[0],"");
00809 }
00810
00811
00812
00813
00814
00815 if (process_subtitle)
00816 {
00817 int pos = event.description.find(m_comHemSub);
00818 bool pvalid = pos != -1 && pos <= 55;
00819 if (pvalid && (event.description.length() - (pos + 2)) > 0)
00820 {
00821 event.subtitle = event.description.left(
00822 pos + (event.description[pos] == '?' ? 1 : 0));
00823 event.description = event.description.mid(pos + 2);
00824 }
00825 }
00826
00827
00828 int position = event.description.find(m_comHemTT);
00829 if (position != -1)
00830 {
00831 event.subtitleType |= SUB_NORMAL;
00832 }
00833
00834
00835 QRegExp tmpRerun1 = m_comHemRerun1;
00836 if (tmpRerun1.search(event.description) == -1)
00837 return;
00838
00839
00840 QStringList list = tmpRerun1.capturedTexts();
00841 if (list[1] == "i dag")
00842 {
00843 event.originalairdate = event.starttime.date();
00844 return;
00845 }
00846
00847
00848 if (list[1] == "eftermiddagen")
00849 {
00850 event.originalairdate = event.starttime.date().addDays(-1);
00851 return;
00852 }
00853
00854
00855 QRegExp tmpRerun2 = m_comHemRerun2;
00856 if (tmpRerun2.search(list[1]) != -1)
00857 {
00858 QStringList datelist = tmpRerun2.capturedTexts();
00859 int day = datelist[1].toInt();
00860 int month = datelist[2].toInt();
00861 int year;
00862
00863 if (datelist[3].length() > 0)
00864 year = datelist[3].toInt();
00865 else
00866 year = event.starttime.date().year();
00867
00868 if (day > 0 && month > 0)
00869 {
00870 QDate date(event.starttime.date().year(), month, day);
00871
00872 if (date > event.starttime.date())
00873 date = date.addYears(-1);
00874 event.originalairdate = date;
00875 }
00876 return;
00877 }
00878 }
00879
00883 void EITFixUp::FixAUStar(DBEvent &event) const
00884 {
00885 event.category = event.subtitle;
00886
00887 int position = event.description.find(':');
00888 if (position != -1)
00889 {
00890 const QString stmp = event.description;
00891 event.subtitle = stmp.left(position);
00892 event.description = stmp.right(stmp.length() - position - 2);
00893 }
00894 }
00895
00899 void EITFixUp::FixMCA(DBEvent &event) const
00900 {
00901 const uint SUBTITLE_PCT = 60;
00902 const uint SUBTITLE_MAX_LEN = 128;
00903 bool dd = false;
00904 int position;
00905 QRegExp tmpExp1;
00906
00907
00908 event.subtitle = QString::null;
00909
00910
00911 if (event.description.length() <= 0)
00912 return;
00913
00914
00915 tmpExp1 = m_mcaIncompleteTitle;
00916 if (tmpExp1.search(event.title) != -1)
00917 {
00918 tmpExp1 = QString(m_mcaCompleteTitlea.pattern() + tmpExp1.cap(1) +
00919 m_mcaCompleteTitleb.pattern());
00920 tmpExp1.setCaseSensitive(false);
00921 if (tmpExp1.search(event.description) != -1)
00922 {
00923 event.title = tmpExp1.cap(1).stripWhiteSpace();
00924 event.description = tmpExp1.cap(2).stripWhiteSpace();
00925 }
00926 tmpExp1.setCaseSensitive(true);
00927 }
00928
00929
00930 tmpExp1 = m_mcaSubtitle;
00931 if ((position = tmpExp1.search(event.description)) != -1)
00932 {
00933 if ((tmpExp1.cap(1).length() < SUBTITLE_MAX_LEN) &&
00934 ((tmpExp1.cap(1).length()*100)/event.description.length() <
00935 SUBTITLE_PCT))
00936 {
00937 event.subtitle = tmpExp1.cap(1);
00938 event.description = tmpExp1.cap(2);
00939 }
00940 }
00941
00942
00943 tmpExp1 = m_mcaSeries;
00944 if ((position = tmpExp1.search(event.subtitle)) != -1)
00945 {
00946 uint season = tmpExp1.cap(1).toUInt();
00947 uint episode = tmpExp1.cap(2).toUInt();
00948 event.subtitle = tmpExp1.cap(3).stripWhiteSpace();
00949 event.syndicatedepisodenumber =
00950 QString("E%1S%2").arg(episode).arg(season);
00951 event.category_type = kCategorySeries;
00952 }
00953
00954
00955 position = event.description.find(m_mcaCC);
00956 if (position > 0)
00957 {
00958 event.subtitleType |= SUB_HARDHEAR;
00959 event.description.replace(m_mcaCC, "");
00960 }
00961
00962
00963 position = event.description.find(m_mcaDD);
00964 if ((position > 0) && (position > (int) (event.description.length() - 7)))
00965 {
00966 event.audioProps |= AUD_STEREO;
00967 dd = true;
00968 event.description.replace(m_mcaDD, "");
00969 }
00970
00971
00972 event.description.replace(m_mcaAvail, "");
00973
00974
00975 bool isMovie = false;
00976 tmpExp1 = m_mcaCredits;
00977 position = tmpExp1.search(event.description);
00978 if (position != -1)
00979 {
00980 isMovie = true;
00981 event.description = tmpExp1.cap(1).stripWhiteSpace();
00982 event.airdate = tmpExp1.cap(2).stripWhiteSpace();
00983 event.AddPerson(DBPerson::kDirector, tmpExp1.cap(3).stripWhiteSpace());
00984 }
00985 else
00986 {
00987
00988 tmpExp1 = m_mcaYear;
00989 position = tmpExp1.search(event.description);
00990 if (position != -1)
00991 {
00992 isMovie = true;
00993 event.description = tmpExp1.cap(1).stripWhiteSpace();
00994 event.airdate = tmpExp1.cap(2).stripWhiteSpace();
00995 }
00996 }
00997
00998 if (isMovie)
00999 {
01000 tmpExp1 = m_mcaActors;
01001 position = tmpExp1.search(event.description);
01002 if (position != -1)
01003 {
01004 QStringList actors;
01005 actors = QStringList::split(m_mcaActorsSeparator,tmpExp1.cap(2));
01006 for (QStringList::size_type i = 0; i < actors.count(); ++i)
01007 event.AddPerson(DBPerson::kActor, actors[i].stripWhiteSpace());
01008 event.description = tmpExp1.cap(1).stripWhiteSpace();
01009 }
01010 event.category_type = kCategoryMovie;
01011 }
01012
01013
01014 if (dd)
01015 event.description += " [Dolby 5.1]";
01016 }
01017
01021 void EITFixUp::FixRTL(DBEvent &event) const
01022 {
01023 int pos;
01024
01025
01026 if (event.description.length() <= 0 || event.subtitle.length() > 0)
01027 return;
01028
01029
01030 QRegExp tmpExpRepeat = m_RTLrepeat;
01031 if ((pos = tmpExpRepeat.search(event.description)) != -1)
01032 {
01033
01034 int length = tmpExpRepeat.cap(0).length() + (pos ? 0 : 1);
01035 event.description =
01036 event.description.remove(pos, length).stripWhiteSpace();
01037 event.originalairdate = event.starttime.addDays(-1).date();
01038 }
01039
01040 QRegExp tmpExp1 = m_RTLSubtitle;
01041 QRegExp tmpExpSubtitle1 = m_RTLSubtitle1;
01042 tmpExpSubtitle1.setMinimal(true);
01043 QRegExp tmpExpSubtitle2 = m_RTLSubtitle2;
01044 QRegExp tmpExpSubtitle3 = m_RTLSubtitle3;
01045 QRegExp tmpExpSubtitle4 = m_RTLSubtitle4;
01046 QRegExp tmpExpSubtitle5 = m_RTLSubtitle5;
01047 tmpExpSubtitle5.setMinimal(true);
01048 QRegExp tmpExpEpisodeNo1 = m_RTLEpisodeNo1;
01049 QRegExp tmpExpEpisodeNo2 = m_RTLEpisodeNo2;
01050
01051
01052 if (tmpExpSubtitle1.search(event.description) != -1)
01053 {
01054 event.syndicatedepisodenumber = tmpExpSubtitle1.cap(1);
01055 event.subtitle = tmpExpSubtitle1.cap(2);
01056 event.description =
01057 event.description.remove(0, tmpExpSubtitle1.matchedLength());
01058 }
01059
01060 else if (tmpExpSubtitle2.search(event.description) != -1)
01061 {
01062 event.syndicatedepisodenumber = tmpExpSubtitle2.cap(1);
01063 event.subtitle = tmpExpSubtitle2.cap(2);
01064 event.description =
01065 event.description.remove(0, tmpExpSubtitle2.matchedLength());
01066 }
01067
01068 else if (tmpExpSubtitle3.search(event.description) != -1)
01069 {
01070 event.syndicatedepisodenumber = tmpExpSubtitle3.cap(1);
01071 event.subtitle = tmpExpSubtitle3.cap(2);
01072 event.description =
01073 event.description.remove(0, tmpExpSubtitle3.matchedLength());
01074 }
01075
01076 else if (tmpExpSubtitle4.search(event.description) != -1)
01077 {
01078 event.subtitle = tmpExpSubtitle4.cap(1);
01079 event.description =
01080 event.description.remove(0, tmpExpSubtitle4.matchedLength());
01081 }
01082
01083 else if (tmpExpSubtitle5.search(event.description) != -1)
01084 {
01085 event.subtitle = tmpExpSubtitle5.cap(1);
01086 event.description =
01087 event.description.remove(0, tmpExpSubtitle5.matchedLength());
01088 }
01089
01090 else if (tmpExpEpisodeNo1.search(event.description) != -1)
01091 {
01092 event.syndicatedepisodenumber = tmpExpEpisodeNo1.cap(2);
01093 event.subtitle = tmpExpEpisodeNo1.cap(1);
01094 event.description =
01095 event.description.remove(0, tmpExpEpisodeNo1.matchedLength());
01096 }
01097
01098 else if (tmpExpEpisodeNo2.search(event.description) != -1)
01099 {
01100 event.syndicatedepisodenumber = tmpExpEpisodeNo2.cap(2);
01101 event.subtitle = tmpExpEpisodeNo2.cap(1);
01102 event.description =
01103 event.description.remove(0, tmpExpEpisodeNo2.matchedLength());
01104 }
01105
01106 int position;
01107 const uint SUBTITLE_PCT = 35;
01108 const uint SUBTITLE_MAX_LEN = 50;
01109
01110 if ((position = tmpExp1.search(event.description)) != -1)
01111 {
01112 if ((tmpExp1.cap(1).length() < SUBTITLE_MAX_LEN) &&
01113 ((tmpExp1.cap(1).length()*100)/event.description.length() <
01114 SUBTITLE_PCT))
01115 {
01116 event.subtitle = tmpExp1.cap(1);
01117 event.description = tmpExp1.cap(2);
01118 }
01119 }
01120 }
01121
01125 void EITFixUp::FixFI(DBEvent &event) const
01126 {
01127 int position = event.description.find(m_fiRerun);
01128 if (position != -1)
01129 {
01130 event.previouslyshown = true;
01131 event.description = event.description.replace(m_fiRerun, "");
01132 }
01133
01134
01135 position = event.description.find(m_Stereo);
01136 if (position != -1)
01137 {
01138 event.audioProps |= AUD_STEREO;
01139 event.description = event.description.replace(m_Stereo, "");
01140 }
01141 }
01142
01147 void EITFixUp::FixPremiere(DBEvent &event) const
01148 {
01149 QString country = "";
01150
01151
01152 QRegExp tmpInfos = m_dePremiereInfos;
01153 if (tmpInfos.search(event.description) != -1)
01154 {
01155 country = tmpInfos.cap(1).stripWhiteSpace();
01156 event.airdate = tmpInfos.cap(2);
01157 event.AddPerson(DBPerson::kDirector, tmpInfos.cap(3));
01158 QStringList actors = QStringList::split(", ", tmpInfos.cap(4));
01159 for(QStringList::size_type j=0;j<actors.count();j++)
01160 event.AddPerson(DBPerson::kActor, actors[j]);
01161 event.description = event.description.replace(tmpInfos.cap(0), "");
01162 }
01163
01164
01165 QRegExp tmpOTitle = m_dePremiereOTitle;
01166 if (tmpOTitle.search(event.title) != -1)
01167 {
01168 event.subtitle = QString("%1, %2").arg(tmpOTitle.cap(1)).arg(country);
01169 event.title = event.title.replace(tmpOTitle.cap(0), "");
01170 }
01171 }
01172
01176 void EITFixUp::FixNL(DBEvent &event) const
01177 {
01178 QString fullinfo = "";
01179 fullinfo.append (event.subtitle);
01180 fullinfo.append (event.description);
01181 event.subtitle = "";
01182
01183
01184
01185
01186 if (event.category == "Documentary")
01187 {
01188 event.category = "Documentaire";
01189 event.category_type = kCategoryNone;
01190 }
01191 if (event.category == "News")
01192 {
01193 event.category = "Nieuws/actualiteiten";
01194 event.category_type = kCategoryNone;
01195 }
01196 if (event.category == "Kids")
01197 {
01198 event.category = "Jeugd";
01199 event.category_type = kCategoryNone;
01200 }
01201 if (event.category == "Show/game Show")
01202 {
01203 event.category = "Amusement";
01204 event.category_type = kCategoryTVShow;
01205 }
01206 if (event.category == "Music/Ballet/Dance")
01207 {
01208 event.category = "Muziek";
01209 event.category_type = kCategoryNone;
01210 }
01211 if (event.category == "News magazine")
01212 {
01213 event.category = "Informatief";
01214 event.category_type = kCategoryNone;
01215 }
01216 if (event.category == "Movie")
01217 {
01218 event.category = "Film";
01219 event.category_type = kCategoryMovie;
01220 }
01221 if (event.category == "Nature/animals/Environment")
01222 {
01223 event.category = "Natuur";
01224 event.category_type = kCategoryNone;
01225 }
01226 if (event.category == "Movie - Adult")
01227 {
01228 event.category = "Erotiek";
01229 event.category_type = kCategoryNone;
01230 }
01231 if (event.category == "Movie - Soap/melodrama/folkloric")
01232 {
01233 event.category = "Serie/soap";
01234 event.category_type = kCategorySeries;
01235 }
01236 if (event.category == "Arts/Culture")
01237 {
01238 event.category = "Kunst/Cultuur";
01239 event.category_type = kCategoryNone;
01240 }
01241 if (event.category == "Sports")
01242 {
01243 event.category = "Sport";
01244 event.category_type = kCategorySports;
01245 }
01246 if (event.category == "Cartoons/Puppets")
01247 {
01248 event.category = "Animatie";
01249 event.category_type = kCategoryNone;
01250 }
01251 if (event.category == "Movie - Comedy")
01252 {
01253 event.category = "Comedy";
01254 event.category_type = kCategorySeries;
01255 }
01256 if (event.category == "Movie - Detective/Thriller")
01257 {
01258 event.category = "Misdaad";
01259 event.category_type = kCategoryNone;
01260 }
01261 if (event.category == "Social/Spiritual Sciences")
01262 {
01263 event.category = "Religieus";
01264 event.category_type = kCategoryNone;
01265 }
01266
01267
01268 int position;
01269 if ((position = fullinfo.find(m_nlStereo)) != -1)
01270 {
01271 event.audioProps |= AUD_STEREO;
01272 fullinfo = fullinfo.replace("stereo", ".");
01273 }
01274
01275
01276 if ((position = fullinfo.find(m_nlWide)) != -1)
01277 {
01278 fullinfo = fullinfo.replace("breedbeeld", ".");
01279 }
01280
01281
01282 if ((position = fullinfo.find(m_nlRepeat)) != -1)
01283 {
01284 fullinfo = fullinfo.replace("herh.", ".");
01285 }
01286
01287
01288 if ((position = fullinfo.find(m_nlTxt)) != -1)
01289 {
01290 event.subtitleType |= SUB_NORMAL;
01291 fullinfo = fullinfo.replace("txt", ".");
01292 }
01293
01294
01295 if ((position = event.title.find(m_nlHD)) != -1)
01296 {
01297 event.videoProps |= VID_HDTV;
01298 event.title = event.title.replace(m_nlHD, "");
01299 }
01300
01301
01302 QRegExp tmpSub = m_nlSub;
01303 QString tmpSubString;
01304 if (tmpSub.search(fullinfo) != -1)
01305 {
01306 tmpSubString = tmpSub.cap(0);
01307 tmpSubString = tmpSubString.right(tmpSubString.length() - 7);
01308 event.subtitle = tmpSubString.left(tmpSubString.length() -1);
01309 fullinfo = fullinfo.replace(tmpSub.cap(0), "");
01310 }
01311
01312
01313
01314 if (((position = event.title.find(":")) != -1) &&
01315 (event.title[position + 1].upper() == event.title[position + 1]) &&
01316 (event.subtitle.isEmpty()))
01317 {
01318 event.subtitle = event.title.mid(position + 1);
01319 event.title = event.title.left(position);
01320 }
01321
01322
01323
01324 QRegExp tmpActors = m_nlActors;
01325 QStringList actors;
01326 QString tmpActorsString;
01327 if (tmpActors.search(fullinfo) != -1)
01328 {
01329 tmpActorsString = tmpActors.cap(0);
01330 tmpActorsString = tmpActorsString.right(tmpActorsString.length() - 6);
01331 tmpActorsString = tmpActorsString.left(tmpActorsString.length() - 5);
01332 actors = QStringList::split(QString(", "), tmpActorsString);
01333 for (QStringList::size_type i =0; i < actors.count(); i++)
01334 {
01335 event.AddPerson(DBPerson::kActor, actors[i]);
01336 }
01337 fullinfo = fullinfo.replace(tmpActors.cap(0), "");
01338 }
01339
01340
01341 QRegExp tmpPres = m_nlPres;
01342 QStringList host;
01343 QString tmpPresString;
01344 if (tmpPres.search(fullinfo) != -1)
01345 {
01346 tmpPresString = tmpPres.cap(0);
01347 tmpPresString = tmpPresString.right(tmpPresString.length() - 14);
01348 tmpPresString = tmpPresString.left(tmpPresString.length() -1);
01349 host = QStringList::split(m_nlPersSeparator, tmpPresString);
01350 for (QStringList::size_type i =0; i < host.count(); i++)
01351 {
01352 event.AddPerson(DBPerson::kPresenter, host[i]);
01353 }
01354 fullinfo = fullinfo.replace(tmpPres.cap(0), "");
01355 }
01356
01357
01358 QRegExp tmpYear1 = m_nlYear1;
01359 QRegExp tmpYear2 = m_nlYear2;
01360 if ((position = tmpYear1.search(fullinfo)) != -1)
01361 {
01362 bool ok;
01363 uint y = tmpYear1.cap(0).toUInt(&ok);
01364 if (ok)
01365 event.originalairdate = QDate(y, 1, 1);
01366 }
01367
01368 if ((position = tmpYear2.search(fullinfo)) != -1)
01369 {
01370 bool ok;
01371 uint y = tmpYear2.cap(2).toUInt(&ok);
01372 if (ok)
01373 event.originalairdate = QDate(y, 1, 1);
01374 }
01375
01376
01377 QRegExp tmpDirector = m_nlDirector;
01378 QString tmpDirectorString;
01379 if ((position = fullinfo.find(m_nlDirector)) != -1)
01380 {
01381 tmpDirectorString = tmpDirector.cap(0);
01382 event.AddPerson(DBPerson::kDirector, tmpDirectorString);
01383 }
01384
01385
01386 if ((position = fullinfo.find(m_nlRub)) != -1)
01387 {
01388 fullinfo = fullinfo.replace(m_nlRub, "");
01389 }
01390
01391
01392 if ((position = fullinfo.find(m_nlCat)) != -1)
01393 {
01394 fullinfo = fullinfo.replace(m_nlCat, "");
01395 }
01396
01397
01398 if ((position = event.title.find(m_nlOmroep)) != -1)
01399 {
01400 event.title = event.title.replace(m_nlOmroep, "");
01401 }
01402
01403
01404
01405 event.description = fullinfo;
01406 event.description.stripWhiteSpace();
01407 event.title.stripWhiteSpace();
01408 event.subtitle.stripWhiteSpace();
01409
01410 }