Ticket #3842: 3842-head-v2.patch
| File 3842-head-v2.patch, 24.1 KB (added by , 18 years ago) |
|---|
-
libs/libmythtv/videosource.h
110 110 { 111 111 Q_OBJECT 112 112 public: 113 DataDirect_config(const VideoSource& _parent, int _ source = DD_ZAP2IT);113 DataDirect_config(const VideoSource& _parent, int _ddsource); 114 114 115 115 virtual void load(void); 116 116 -
libs/libmythtv/datadirect.h
13 13 14 14 enum DD_PROVIDERS 15 15 { 16 DD_ZAP2IT = 0, 17 DD_PROVIDER_COUNT, 16 DD_ZAP2IT = 0, 17 DD_SCHEDULES_DIRECT = 1, 18 DD_PROVIDER_COUNT = 2, 18 19 }; 19 20 20 21 class DataDirectURLs … … 308 309 void SetListingsProvider(uint i) 309 310 { listings_provider = i % DD_PROVIDER_COUNT; } 310 311 void SetInputFile(const QString &file) { inputfilename = file; } 312 void SetCacheData(bool cd) { cachedata = cd; } 311 313 312 314 // static commands (these update temp DB tables) 313 315 static void UpdateStationViewTable(QString lineupid); … … 346 348 347 349 QString userid; 348 350 QString password; 351 bool cachedata; 349 352 350 353 QDateTime actuallistingsfrom; 351 354 QDateTime actuallistingsto; … … 361 364 QString tmpResultFile; 362 365 QString cookieFile; 363 366 QDateTime cookieFileDT; 367 368 static QString tmpDir; 364 369 }; 365 370 366 371 #endif -
libs/libmythtv/datadirect.cpp
6 6 7 7 // Qt headers 8 8 #include <qmap.h> 9 #include <qdir.h> 9 10 #include <qfile.h> 10 11 #include <qstring.h> 11 12 #include <qregexp.h> … … 25 26 #define SHOW_WGET_OUTPUT 0 26 27 27 28 #define LOC QString("DataDirect: ") 29 #define LOC_WARN QString("DataDirect, Warning: ") 28 30 #define LOC_ERR QString("DataDirect, Error: ") 29 31 30 32 static QMutex lineup_type_lock; 31 33 static QMap<QString,uint> lineupid_to_srcid; 32 34 static QMap<uint,QString> srcid_to_type; 33 35 36 QString DataDirectProcessor::tmpDir = "/tmp"; 37 34 38 static void set_lineup_type(const QString &lineupid, const QString &type); 35 39 static QString get_lineup_type(uint sourceid); 36 40 static QString get_setting(QString line, QString key); … … 533 537 DataDirectProcessor::DataDirectProcessor(uint lp, QString user, QString pass) : 534 538 listings_provider(lp % DD_PROVIDER_COUNT), 535 539 userid(user), password(pass), 540 cachedata(false), 536 541 inputfilename(""), tmpPostFile(""), 537 542 tmpResultFile(""), cookieFile(""), 538 543 cookieFileDT() … … 542 547 "http://datadirect.webservices.zap2it.com/tvlistings/xtvdService", 543 548 "http://labs.zap2it.com", 544 549 "/ztvws/ztvws_login/1,1059,TMS01-1,00.html"); 550 DataDirectURLs urls1( 551 "Schedules Direct", 552 "http://webservices.schedulesdirect.tmsdatadirect.com" 553 "/schedulesdirect/tvlistings/xtvdService", 554 "http://schedulesdirect.org", 555 "/login/index.php"); 545 556 providers.push_back(urls0); 557 providers.push_back(urls1); 546 558 547 QString tmpDir = "/tmp";548 559 tmpPostFile = makeTempFile(tmpDir + "/mythtv_post_XXXXXX"); 549 560 tmpResultFile = makeTempFile(tmpDir + "/mythtv_result_XXXXXX"); 550 561 cookieFile = makeTempFile(tmpDir + "/mythtv_cookies_XXXXXX"); … … 552 563 553 564 DataDirectProcessor::~DataDirectProcessor() 554 565 { 566 VERBOSE(VB_GENERAL, LOC + "Deleting temporary files"); 567 555 568 unlink(tmpPostFile.ascii()); 556 569 unlink(tmpResultFile.ascii()); 557 570 unlink(cookieFile.ascii()); 571 572 QDir d(tmpDir, "mythtv_dd_cache_*", QDir::Name, 573 QDir::Files | QDir::NoSymLinks); 574 575 for (uint i = 0; i < d.count(); i++) 576 { 577 //cout<<"deleting '"<<tmpDir<<"/"<<d[i]<<"'"<<endl; 578 unlink((tmpDir + "/" + d[i]).ascii()); 579 } 558 580 } 559 581 560 582 void DataDirectProcessor::UpdateStationViewTable(QString lineupid) … … 994 1016 995 1017 QString err = ""; 996 1018 QString ddurl = providers[listings_provider].webServiceURL; 1019 QString inputfile = inputfilename; 1020 QString cache_dd_data = QString::null; 997 1021 998 FILE *fp = DDPost(ddurl, tmpPostFile, inputfilename, 1022 if (cachedata) 1023 { 1024 cache_dd_data = tmpDir + QString("/mythtv_dd_cache_%1_%2_%3_%4_%5") 1025 .arg(QDateTime::currentDateTime().toString("yyMMdd")) 1026 .arg(GetListingsProvider()) 1027 .arg(GetUserID().ascii()) 1028 .arg(pstartDate.toString()) 1029 .arg(pendDate.toString()); 1030 1031 if (QFile(cache_dd_data).exists() && inputfilename.isEmpty()) 1032 { 1033 VERBOSE(VB_GENERAL, LOC + "Copying from DD cache"); 1034 inputfile = cache_dd_data; 1035 } 1036 } 1037 1038 FILE *fp = DDPost(ddurl, tmpPostFile, inputfile, 999 1039 GetUserID(), GetPassword(), 1000 1040 pstartDate, pendDate, err); 1001 1041 if (!fp) … … 1005 1045 return false; 1006 1046 } 1007 1047 1048 if (cachedata && (inputfile != cache_dd_data)) 1049 { 1050 QFile in, out(cache_dd_data); 1051 bool ok = out.open(IO_WriteOnly); 1052 if (!ok) 1053 { 1054 VERBOSE(VB_IMPORTANT, LOC_WARN + 1055 "Can not open DD cache file in '" + 1056 tmpDir + "' for writing!"); 1057 } 1058 else 1059 { 1060 VERBOSE(VB_GENERAL, LOC + "Saving listings to DD cache"); 1061 ok = in.open(IO_ReadOnly, fp); 1062 out.close(); // let copy routine handle dst file 1063 } 1064 1065 if (ok) 1066 { 1067 if (Copy(out, in)) 1068 { 1069 pclose(fp); 1070 fp = fopen(cache_dd_data.ascii(), "r"); 1071 } 1072 else 1073 { 1074 VERBOSE(VB_IMPORTANT, 1075 LOC_ERR + "Failed to save DD cache! " 1076 "redownloading data..."); 1077 cachedata = false; 1078 pclose(fp); 1079 fp = DDPost(ddurl, tmpPostFile, inputfile, 1080 GetUserID(), GetPassword(), 1081 pstartDate, pendDate, err); 1082 } 1083 } 1084 } 1085 1008 1086 QFile f; 1009 1087 if (f.open(IO_ReadOnly, fp)) 1010 1088 { … … 1083 1161 " channelMinor char(3) )"; 1084 1162 1085 1163 dd_tables["dd_schedule"] = 1086 "( programid char( 12), stationid char(12), "1164 "( programid char(40), stationid char(12), " 1087 1165 " scheduletime datetime, duration time, " 1088 1166 " isrepeat bool, stereo bool, " 1089 1167 " subtitled bool, hdtv bool, " … … 1093 1171 "INDEX progidx (programid) )"; 1094 1172 1095 1173 dd_tables["dd_program"] = 1096 "( programid char( 12) NOT NULL, seriesid char(12), "1174 "( programid char(40) NOT NULL, seriesid char(12), " 1097 1175 " title varchar(120), subtitle varchar(150), " 1098 1176 " description text, mpaarating char(5), " 1099 1177 " starrating char(5), runtime time, " … … 1115 1193 " partnumber int, parttotal int, " 1116 1194 " seriesid char(12), originalairdate date, " 1117 1195 " showtype varchar(30), colorcode varchar(20), " 1118 " syndicatedepisodenumber varchar(20), programid char( 12), "1196 " syndicatedepisodenumber varchar(20), programid char(40), " 1119 1197 " tvrating char(5), mpaarating char(5), " 1120 1198 "INDEX progidx (programid))"; 1121 1199 1122 1200 dd_tables["dd_productioncrew"] = 1123 "( programid char( 12), role char(30), "1201 "( programid char(40), role char(30), " 1124 1202 " givenname char(20), surname char(20), " 1125 1203 " fullname char(41), " 1126 1204 "INDEX progidx (programid), " 1127 1205 "INDEX nameidx (fullname))"; 1128 1206 1129 1207 dd_tables["dd_genre"] = 1130 "( programid char( 12) NOT NULL, class char(30), "1208 "( programid char(40) NOT NULL, class char(30), " 1131 1209 " relevance char(1), " 1132 1210 "INDEX progidx (programid))"; 1133 1211 -
libs/libmythtv/videosource.cpp
20 20 #include <qmap.h> 21 21 #include <qdir.h> 22 22 #include <qprocess.h> 23 #include <qdatetime.h> 23 24 24 25 // MythTV headers 25 26 #include "mythconfig.h" … … 44 45 #include "videodev_myth.h" 45 46 #endif 46 47 48 static bool is_grabber_external(const QString &grabber) 49 { 50 return !(grabber == "datadirect" || 51 grabber == "eitonly" || 52 grabber == "schedulesdirect1" || 53 grabber == "/bin/true"); 54 } 55 47 56 VideoSourceSelector::VideoSourceSelector(uint _initial_sourceid, 48 57 const QString &_card_types, 49 58 bool _must_have_mplexid) : … … 295 304 { 296 305 public: 297 306 DataDirectPassword(const VideoSource &parent) : 298 LineEditSetting(this), VideoSourceDBStorage(this, parent, "password") 307 LineEditSetting(this, true), 308 VideoSourceDBStorage(this, parent, "password") 299 309 { 310 SetPasswordEcho(true); 300 311 setLabel(QObject::tr("Password")); 301 312 } 302 313 }; … … 307 318 { 308 319 (void) uid; 309 320 (void) pwd; 310 (void) _source;311 321 #ifdef USING_BACKEND 312 322 if (uid.isEmpty() || pwd.isEmpty()) 313 323 return; … … 348 358 void DataDirect_config::load() 349 359 { 350 360 VerticalConfigurationGroup::load(); 351 if ((userid->getValue() != lastloadeduserid) || 352 (password->getValue() != lastloadedpassword)) 361 bool is_sd_userid = userid->getValue().contains("@") > 0; 362 bool match = ((is_sd_userid && (source == DD_SCHEDULES_DIRECT)) || 363 (!is_sd_userid && (source == DD_ZAP2IT))); 364 if (((userid->getValue() != lastloadeduserid) || 365 (password->getValue() != lastloadedpassword)) && match) 353 366 { 354 367 lineupselector->fillSelections(userid->getValue(), 355 368 password->getValue(), … … 442 455 "instead of just 'mythfilldatabase'.\nYour grabber does not provide " 443 456 "channel numbers, so you have to set them manually."); 444 457 445 if (grabber != "datadirect" && grabber != "eitonly" && 446 grabber != "/bin/true") 458 if (is_grabber_external(grabber)) 447 459 { 448 460 VERBOSE(VB_IMPORTANT, "\n" << err_msg); 449 461 MythPopupBox::showOkPopup( … … 508 520 // only save settings for the selected grabber 509 521 setSaveAll(false); 510 522 511 addTarget("datadirect", new DataDirect_config(parent)); 512 grabber->addSelection("North America (DataDirect) (Internal)", "datadirect"); 523 addTarget("schedulesdirect1", 524 new DataDirect_config(parent, DD_SCHEDULES_DIRECT)); 525 grabber->addSelection("North America (SchedulesDirect.org) " 526 "(Internal)", "schedulesdirect1"); 513 527 528 #if 1 529 addTarget("datadirect", new DataDirect_config(parent, DD_ZAP2IT)); 530 grabber->addSelection( 531 "North America (TMS Labs) (Internal)", "datadirect"); 532 #endif 533 514 534 addTarget("eitonly", new EITOnly_config(parent)); 515 535 grabber->addSelection("Transmitted guide only (EIT)", "eitonly"); 516 536 -
libs/libmyth/settings.cpp
639 639 connect(edit, SIGNAL(changeHelpText(QString)), cg, 640 640 SIGNAL(changeHelpText(QString))); 641 641 642 edit->setRW(rw); 642 setRW(rw); 643 SetPasswordEcho(password_echo); 643 644 644 645 return widget; 645 646 } … … 664 665 } 665 666 } 666 667 668 void LineEditSetting::SetPasswordEcho(bool b) 669 { 670 password_echo = b; 671 if (edit) 672 edit->setEchoMode(b ? QLineEdit::Password : QLineEdit::Normal); 673 } 674 667 675 QWidget* SliderSetting::configWidget(ConfigurationGroup *cg, QWidget* parent, 668 676 const char* widgetName) { 669 677 QHBox* widget; -
libs/libmyth/util.cpp
32 32 #include <qpainter.h> 33 33 #include <qpixmap.h> 34 34 #include <qfont.h> 35 #include <qfile.h> 35 36 36 37 // Myth headers 37 38 #include "mythconfig.h" … … 603 604 604 605 return false; 605 606 } 607 608 /** \fn Copy(QFile&,QFile&,uint) 609 * \brief Copies src file to dst file. 610 * 611 * If the dst file is open, it must be open for writing. 612 * If the src file is open, if must be open for reading. 613 * 614 * The files will be in the same open or close state after 615 * this function runs as they were prior to this function being called. 616 * 617 * This function does not care if the files are actual files. 618 * For compatibility with pipes and socket streams the file location 619 * will not be reset to 0 at the end of this function. If the function 620 * is succesful the file pointers will be at the end of the copied 621 * data. 622 * 623 * \param dst Destination QFile 624 * \param src Source QFile 625 * \param block_size Optional block size in bytes, must be at least 1024, 626 * otherwise the default of 16 KB will be used. 627 * \return bytes copied on success, -1 on failure. 628 */ 629 long long Copy(QFile &dst, QFile &src, uint block_size) 630 { 631 uint buflen = (block_size < 1024) ? (16 * 1024) : block_size; 632 char *buf = new char[buflen]; 633 bool odst = false, osrc = false; 634 635 if (!buf) 636 return -1LL; 637 638 if (!dst.isWritable() && !dst.isOpen()) 639 odst = dst.open(IO_Raw|IO_WriteOnly|IO_Truncate); 640 641 if (!src.isReadable() && !src.isOpen()) 642 osrc = src.open(IO_Raw|IO_ReadOnly); 643 644 bool ok = dst.isWritable() && src.isReadable(); 645 long long total_bytes = 0LL; 646 while (ok) 647 { 648 long long rlen, wlen, off = 0; 649 rlen = src.readBlock(buf, buflen); 650 if (rlen<0) 651 { 652 ok = false; 653 break; 654 } 655 if (rlen==0) 656 break; 657 658 total_bytes += (long long) rlen; 659 660 while ((rlen-off>0) && ok) 661 { 662 wlen = dst.writeBlock(buf + off, rlen - off); 663 if (wlen>=0) 664 off+= wlen; 665 if (wlen<0) 666 ok = false; 667 } 668 } 669 delete[] buf; 670 671 if (odst) 672 dst.close(); 673 674 if (osrc) 675 src.close(); 676 677 return (ok) ? total_bytes : -1LL; 678 } 679 -
libs/libmyth/util.h
16 16 class QImage; 17 17 class QPainter; 18 18 class QFont; 19 class QFile; 19 20 20 21 class MPUBLIC MythTimer 21 22 { … … 73 74 MPUBLIC bool ping(const QString &host, int timeout); 74 75 MPUBLIC bool telnet(const QString &host, int port); 75 76 77 MPUBLIC long long Copy(QFile &dst, QFile &src, uint block_size = 0); 78 76 79 #endif // UTIL_H_ -
libs/libmyth/mythcontext.h
208 208 209 209 /// Update this whenever the plug-in API changes. 210 210 /// Including changes in the libmythtv class methods used by plug-ins. 211 #define MYTH_BINARY_VERSION "0.20.20070 717-1"211 #define MYTH_BINARY_VERSION "0.20.20070817-1" 212 212 213 213 /** \brief Increment this whenever the MythTV network protocol changes. 214 214 * -
libs/libmyth/settings.h
200 200 { 201 201 protected: 202 202 LineEditSetting(Storage *_storage, bool readwrite = true) : 203 Setting(_storage), edit(NULL), rw(readwrite) { }203 Setting(_storage), edit(NULL), rw(readwrite), password_echo(false) { } 204 204 205 205 public: 206 206 virtual QWidget* configWidget(ConfigurationGroup *cg, QWidget* parent, … … 217 217 218 218 virtual void setEnabled(bool b); 219 219 virtual void setVisible(bool b); 220 virtual void SetPasswordEcho(bool b); 220 221 221 222 private: 222 223 MythLineEdit* edit; 223 224 bool rw; 225 bool password_echo; 224 226 }; 225 227 226 228 // TODO: set things up so that setting the value as a string emits -
programs/mythfilldatabase/filldata.cpp
26 26 // filldata headers 27 27 #include "filldata.h" 28 28 29 bool is_grabber_external(const QString &grabber) 30 { 31 return !(grabber == "datadirect" || 32 grabber == "eitonly" || 33 grabber == "schedulesdirect1" || 34 grabber == "/bin/true"); 35 } 36 37 bool is_grabber_datadirect(const QString &grabber) 38 { 39 return (grabber == "datadirect") || (grabber == "schedulesdirect1"); 40 } 41 42 bool is_grabber_labs(const QString &grabber) 43 { 44 return grabber == "datadirect"; 45 } 46 29 47 // DataDirect stuff 30 48 void FillData::DataDirectStationUpdate(Source source, bool update_icons) 31 49 { … … 44 62 icon_data.UpdateSourceIcons(source.id); 45 63 46 64 // Unselect channels not in users lineup for DVB, HDTV 47 if (!insert_channels && (new_channels > 0)) 65 if (!insert_channels && (new_channels > 0) && 66 is_grabber_labs(source.xmltvgrabber)) 48 67 { 49 68 bool ok0 = (logged_in == source.userid); 50 69 bool ok1 = (raw_lineup == source.id); … … 69 88 70 89 bool FillData::DataDirectUpdateChannels(Source source) 71 90 { 91 if (!is_grabber_labs(source.xmltvgrabber)) 92 { 93 VERBOSE(VB_IMPORTANT, "FillData: We only support " 94 "DataDirectUpdateChannels with TMS Labs channel editor"); 95 return false; 96 } 97 72 98 ddprocessor.SetListingsProvider(DD_ZAP2IT); 73 99 ddprocessor.SetUserID(source.userid); 74 100 ddprocessor.SetPassword(source.password); … … 87 113 bool FillData::grabDDData(Source source, int poffset, 88 114 QDate pdate, int ddSource) 89 115 { 116 if (source.dd_dups.empty()) 117 ddprocessor.SetCacheData(false); 118 else 119 { 120 VERBOSE(VB_GENERAL, QString( 121 "This DataDirect listings source is " 122 "shared by %1 MythTV lineups") 123 .arg(source.dd_dups.size()+1)); 124 if (source.id > source.dd_dups[0]) 125 { 126 VERBOSE(VB_IMPORTANT, "We should use cached data for this one"); 127 } 128 else if (source.id < source.dd_dups[0]) 129 { 130 VERBOSE(VB_IMPORTANT, "We should keep data around after this one"); 131 } 132 ddprocessor.SetCacheData(true); 133 } 134 90 135 ddprocessor.SetListingsProvider(ddSource); 91 136 ddprocessor.SetUserID(source.userid); 92 137 ddprocessor.SetPassword(source.password); … … 251 296 252 297 if (xmltv_grabber == "datadirect") 253 298 return grabDDData(source, offset, *qCurrentDate, DD_ZAP2IT); 299 if (xmltv_grabber == "schedulesdirect1") 300 return grabDDData(source, offset, *qCurrentDate, DD_SCHEDULES_DIRECT); 254 301 255 302 char tempfilename[] = "/tmp/mythXXXXXX"; 256 303 if (mkstemp(tempfilename) == -1) … … 389 436 bool FillData::fillData(QValueList<Source> &sourcelist) 390 437 { 391 438 QValueList<Source>::Iterator it; 439 QValueList<Source>::Iterator it2; 392 440 393 441 QString status, querystr; 394 442 MSqlQuery query(MSqlQuery::InitCon()); … … 403 451 need_post_grab_proc = false; 404 452 int nonewdata = 0; 405 453 454 // find all DataDirect duplicates, so we only data download once. 406 455 for (it = sourcelist.begin(); it != sourcelist.end(); ++it) 407 456 { 457 if (!is_grabber_datadirect((*it).xmltvgrabber)) 458 continue; 408 459 460 for (it2 = sourcelist.begin(); it2 != sourcelist.end(); ++it2) 461 { 462 if (((*it).id != (*it2).id) && 463 ((*it).xmltvgrabber == (*it2).xmltvgrabber) && 464 ((*it).userid == (*it2).userid) && 465 ((*it).password == (*it2).password)) 466 { 467 (*it).dd_dups.push_back((*it2).id); 468 } 469 } 470 } 471 472 for (it = sourcelist.begin(); it != sourcelist.end(); ++it) 473 { 474 409 475 query.prepare("SELECT MAX(endtime) FROM program p LEFT JOIN channel c " 410 476 "ON p.chanid=c.chanid WHERE c.sourceid= :SRCID " 411 477 "AND manualid = 0;"); … … 427 493 428 494 if (xmltv_grabber == "eitonly") 429 495 { 430 VERBOSE(VB_IMPORTANT, "Source configured to use only the " 431 "broadcasted guide data. Skipping."); 496 VERBOSE(VB_GENERAL, 497 QString("Source %1 configured to use only the " 498 "broadcasted guide data. Skipping.") 499 .arg((*it).id)); 500 432 501 externally_handled++; 433 502 query.exec(QString("UPDATE settings SET data ='%1' " 434 503 "WHERE value='mythfilldatabaseLastRunStart' OR " … … 440 509 xmltv_grabber == "none" || 441 510 xmltv_grabber == "") 442 511 { 443 VERBOSE(VB_IMPORTANT, 444 "Source configured with no grabber. Nothing to do."); 512 VERBOSE(VB_GENERAL, 513 QString("Source %1 configured with no grabber. " 514 "Nothing to do.").arg((*it).id)); 515 445 516 externally_handled++; 446 517 query.exec(QString("UPDATE settings SET data ='%1' " 447 518 "WHERE value='mythfilldatabaseLastRunStart' OR " … … 486 557 487 558 bool hasprefmethod = false; 488 559 489 if ( xmltv_grabber != "datadirect")560 if (is_grabber_external(xmltv_grabber)) 490 561 { 491 562 492 563 QProcess grabber_capabilities_proc(xmltv_grabber); … … 584 655 } 585 656 } 586 657 587 need_post_grab_proc |= (xmltv_grabber != "datadirect");658 need_post_grab_proc |= !is_grabber_datadirect(xmltv_grabber); 588 659 589 if ( (xmltv_grabber == "datadirect") && dd_grab_all)660 if (is_grabber_labs(xmltv_grabber) && dd_grab_all) 590 661 { 591 662 if (only_update_channels) 592 663 DataDirectUpdateChannels(*it); … … 601 672 if (!grabData(*it, 0)) 602 673 ++failures; 603 674 } 604 else if ((*it).xmltvgrabber_baseline || xmltv_grabber == "datadirect") 675 else if ((*it).xmltvgrabber_baseline || 676 is_grabber_datadirect(xmltv_grabber)) 605 677 { 606 678 607 679 QDate qCurrentDate = QDate::currentDate(); … … 612 684 613 685 if (maxDays > 0) // passed with --max-days 614 686 grabdays = maxDays; 615 else if ( xmltv_grabber == "datadirect")687 else if (is_grabber_datadirect(xmltv_grabber)) 616 688 grabdays = 14; 617 689 618 690 grabdays = (only_update_channels) ? 1 : grabdays; … … 620 692 if (grabdays == 1) 621 693 refresh_today = true; 622 694 623 if ( (xmltv_grabber == "datadirect") && only_update_channels)695 if (is_grabber_labs(xmltv_grabber) && only_update_channels) 624 696 { 625 697 DataDirectUpdateChannels(*it); 626 698 grabdays = 0; -
programs/mythfilldatabase/main.cpp
579 579 newsource.xmltvgrabber_prefmethod = ""; 580 580 581 581 sourcelist.append(newsource); 582 if (newsource.xmltvgrabber == "datadirect") 583 usingDataDirect = true; 582 usingDataDirect = 583 ((newsource.xmltvgrabber == "datadirect") || 584 (newsource.xmltvgrabber == "schedulesdirect1")); 584 585 } 585 586 } 586 587 else -
programs/mythfilldatabase/filldata.h
26 26 bool xmltvgrabber_manualconfig; 27 27 bool xmltvgrabber_cache; 28 28 QString xmltvgrabber_prefmethod; 29 vector<int> dd_dups; 29 30 }; 30 31 31 32 class FillData
