Ticket #602: viewscheddiff3.patch
File viewscheddiff3.patch, 49.4 KB (added by , 18 years ago) |
---|
-
themes/G.A.N.T./ui.xml
550 550 551 551 </window> 552 552 553 <window name="schdiff"> 554 555 <font name="active_font" face="Arial"> 556 <color>#ffffff</color> 557 <size>16</size> 558 <size:small>11</size:small> 559 <bold>yes</bold> 560 </font> 561 562 <font name="inactive_font" face="Arial"> 563 <color>#9999cc</color> 564 <size>16</size> 565 <size:small>11</size:small> 566 <bold>yes</bold> 567 </font> 568 569 <font name="record_font" face="Arial"> 570 <color>#F7862B</color> 571 <size>16</size> 572 <size:small>11</size:small> 573 <bold>yes</bold> 574 </font> 575 576 <font name="recording_font" face="Arial"> 577 <color>#FF33FF</color> 578 <size>16</size> 579 <size:small>11</size:small> 580 <bold>yes</bold> 581 </font> 582 583 <font name="norecordfnt" face="Arial"> 584 <color>#999999</color> 585 <size>16</size> 586 <size:small>11</size:small> 587 <bold>yes</bold> 588 </font> 589 590 <font name="conflictfnt" face="Arial"> 591 <color>#ffff33</color> 592 <size>16</size> 593 <size:small>11</size:small> 594 <bold>yes</bold> 595 </font> 596 597 <font name="currenttitle" face="Arial"> 598 <color>#ffff33</color> 599 <size>18</size> 600 <size:small>12</size:small> 601 <bold>yes</bold> 602 </font> 603 604 <font name="title" face="Arial"> 605 <color>#ffffff</color> 606 <dropcolor>#000000</dropcolor> 607 <size>27</size> 608 <size:small>13</size:small> 609 <shadow>3,3</shadow> 610 <bold>yes</bold> 611 </font> 612 613 <font name="info" face="Arial"> 614 <color>#ffffff</color> 615 <size>17</size> 616 <size:small>8</size:small> 617 <shadow>1,1</shadow> 618 <bold>yes</bold> 619 </font> 620 621 <font name="message" face="Arial"> 622 <color>#ffffff</color> 623 <size>16</size> 624 <size:small>10</size:small> 625 <shadow>1,1</shadow> 626 <bold>yes</bold> 627 </font> 628 629 <font name="messagegray" face="Arial"> 630 <color>#999999</color> 631 <size>16</size> 632 <size:small>10</size:small> 633 <shadow>1,1</shadow> 634 <bold>yes</bold> 635 </font> 636 637 <font name="messageyellow" face="Arial"> 638 <color>#ffff33</color> 639 <size>16</size> 640 <size:small>10</size:small> 641 <shadow>1,1</shadow> 642 <bold>yes</bold> 643 </font> 644 645 <container name="background"> 646 <textarea name="sched" draworder="0"> 647 <area>20,10,800,40</area> 648 <font>info</font> 649 <value>Scheduled Recordings:</value> 650 </textarea> 651 <image name="filler" draworder="0" fleximage="yes"> 652 <filename>cr-background.png</filename> 653 <position>0,39</position> 654 </image> 655 </container> 656 657 <container name="conflict_info"> 658 <area>400,10,380,30</area> 659 <textarea name="status" align="right" draworder="4"> 660 <area>0,0,380,30</area> 661 <font>info</font> 662 </textarea> 663 </container> 664 665 <container name="showlevel_info"> 666 <area>10,330,280,30</area> 667 <textarea name="showing" draworder="4"> 668 <area>0,0,105,30</area> 669 <font>message</font> 670 <value>Showing:</value> 671 </textarea> 672 <textarea name="showlevel" draworder="4"> 673 <area>110,0,150,30</area> 674 <font>message</font> 675 </textarea> 676 </container> 677 678 <container name="selector"> 679 <area>0,39,800,290</area> 680 <listarea name="conflictlist" draworder="4"> 681 <area>20,12,760,265</area> 682 <fcnfont name="conflictfnt" function="conflictingrecording"></fcnfont> 683 <fcnfont name="norecordfnt" function="disabledrecording"></fcnfont> 684 <fcnfont name="active_font" function="active"></fcnfont> 685 <fcnfont name="inactive_font" function="inactive"></fcnfont> 686 <fcnfont name="record_font" function="record"></fcnfont> 687 <fcnfont name="recording_font" function="recording"></fcnfont> 688 <fcnfont name="active_font" function="selected"></fcnfont> 689 <columnpadding>10</columnpadding> 690 <column number="1" width="160" context="-1"></column> 691 <column number="2" width="120" context="-1"></column> 692 <column number="3" width="370" context="-1"></column> 693 <column number="4" width="20" context="-1"></column> 694 <column number="5" width="20" context="-1"></column> 695 <items>9</items> 696 <image function="selectionbar" filename="cr-selectbar.png" location="-14,-5"></image> 697 <image function="uparrow" filename="uparrow.png" location="755,22"></image> 698 <image function="downarrow" filename="downarrow.png" location="755,230"></image> 699 </listarea> 700 <image name="showinglines" draworder="5" fleximage="no"> 701 <filename>cr-lines.png</filename> 702 <position>0,0</position> 703 </image> 704 </container> 705 706 <container name="program_info"> 707 <area>0,360,800,210</area> 708 <textarea name="title" draworder="6"> 709 <area>20,0,800,40</area> 710 <font>title</font> 711 </textarea> 712 <textarea name="channel" draworder="6"> 713 <area>20,40,160,30</area> 714 <font>info</font> 715 </textarea> 716 <textarea name="timedate" draworder="6"> 717 <area>200,40,420,30</area> 718 <font>info</font> 719 </textarea> 720 <textarea name="subdescr" draworder="6"> 721 <area>20,70,720,140</area> 722 <font>info</font> 723 <multiline>yes</multiline> 724 <value>%SUBTITLE|"|" 725 %%STARS%%DESCRIPTION%</value> 726 </textarea> 727 </container> 728 729 <container name="status_info"> 730 <area>300,330,480,30</area> 731 <textarea name="recordingstatus" align="right" draworder="6"> 732 <area>0,0,480,30</area> 733 <font>message</font> 734 </textarea> 735 </container> 736 737 738 <container name="norecordings_list"> 739 <textarea name="msg" align="center" draworder="8"> 740 <area>0,110,800,70</area> 741 <font>info</font> 742 <value>No changes to the recording schedule to show</value> 743 <multiline>yes</multiline> 744 </textarea> 745 </container> 746 747 </window> 748 553 749 <window name="recprioritychannels"> 554 750 555 751 <font name="active_font" face="Arial"> -
themes/blue/ui.xml
365 365 366 366 </window> 367 367 368 <window name="schdiff"> 369 370 371 <container name="background"> 372 <area> 0, 0, 800, 600</area> 373 <textarea name="sched" draworder="0"> 374 <area>20,10,800,40</area> 375 <font>info</font> 376 <value>Scheduled Recording Changes:</value> 377 </textarea> 378 <image name="filler" draworder="0" fleximage="no"> 379 <filename>cr-background.png</filename> 380 <position>0,0</position> 381 </image> 382 </container> 383 384 <container name="conflict_info"> 385 <area>400,10,380,30</area> 386 <textarea name="status" align="right" draworder="4"> 387 <area>0,0,380,30</area> 388 <font>info</font> 389 </textarea> 390 </container> 391 392 <container name="showlevel_info"> 393 <area>25,345,280,30</area> 394 <textarea name="showing" draworder="7"> 395 <area>0,0,105,30</area> 396 <font>info</font> 397 <value>Showing:</value> 398 </textarea> 399 <textarea name="showlevel" draworder="7"> 400 <area>110,0,150,30</area> 401 <font>info</font> 402 </textarea> 403 </container> 404 405 <container name="selector"> 406 <area>0,39,800,290</area> 407 <listarea name="conflictlist" draworder="4"> 408 <area>20,12,760,265</area> 409 <fcnfont name="list-conflict" function="conflictingrecording"></fcnfont> 410 <fcnfont name="list-norecord" function="disabledrecording"></fcnfont> 411 <fcnfont name="list-active" function="active"></fcnfont> 412 <fcnfont name="list-inactive" function="inactive"></fcnfont> 413 <fcnfont name="list-record" function="record"></fcnfont> 414 <fcnfont name="list-recording" function="recording"></fcnfont> 415 <fcnfont name="list-selected" function="selected"></fcnfont> 416 <columnpadding>10</columnpadding> 417 <column number="1" width="165" context="-1"></column> 418 <column number="2" width="110" context="-1"></column> 419 <column number="3" width="390" context="-1"></column> 420 <column number="4" width="20" context="-1"></column> 421 <column number="5" width="20" context="-1"></column> 422 <items>9</items> 423 <image function="selectionbar" filename="cr-selectbar.png" location="-10,-2"></image> 424 <image function="uparrow" filename="uparrow.png" location="745,12"></image> 425 <image function="downarrow" filename="downarrow.png" location="745,244"></image> 426 </listarea> 427 <image name="showinglines" draworder="5" fleximage="no"> 428 <filename>cr-lines.png</filename> 429 <position>0,0</position> 430 </image> 431 </container> 432 433 <container name="program_info"> 434 <area>25,365,775,210</area> 435 <textarea name="title" draworder="6"> 436 <area>0,0,730,40</area> 437 <font>title</font> 438 </textarea> 439 <textarea name="channel" draworder="6"> 440 <area>0,45,160,30</area> 441 <font>info</font> 442 </textarea> 443 <textarea name="timedate" draworder="6"> 444 <area>175,45,420,30</area> 445 <font>info</font> 446 </textarea> 447 <textarea name="subdescr" draworder="6"> 448 <area>0,75,720,140</area> 449 <font>metadata</font> 450 <multiline>yes</multiline> 451 <value>%SUBTITLE|"|" 452 %%REPEAT%%STARS%%DESCRIPTION%</value> 453 </textarea> 454 </container> 455 456 <container name="status_info"> 457 <area>300,345,480,30</area> 458 <textarea name="recordingstatus" align="right" draworder="6"> 459 <area>0,0,480,30</area> 460 <font>recstatus</font> 461 </textarea> 462 </container> 463 464 465 <container name="norecordings_list"> 466 <textarea name="msg" align="center" draworder="8"> 467 <area>0,110,800,70</area> 468 <font>info</font> 469 <value>No changes to the recording schedule to show</value> 470 <multiline>yes</multiline> 471 </textarea> 472 </container> 473 474 </window> 475 368 476 <window name="recprioritychannels"> 369 477 370 478 <container name="background"> -
libs/libmythtv/channeleditor.cpp
190 190 }; 191 191 192 192 void save() {}; 193 void save(QString) {}; 193 194 void load() 194 195 { 195 196 MSqlQuery query(MSqlQuery::InitCon()); -
libs/libmythtv/scheduledrecording.h
91 91 92 92 93 93 virtual void save(); 94 virtual void save(QString); 94 95 95 96 virtual void loadByID(int id); 96 97 virtual void loadByProgram(const ProgramInfo* proginfo); … … 168 169 169 170 public slots: 170 171 void runProgList(); 172 void testRecording(); 171 173 172 174 protected slots: 173 175 void runShowDetails(); … … 253 255 virtual int exec(); 254 256 virtual void load(); 255 257 virtual void save() { }; 258 virtual void save(QString) { }; 256 259 257 260 protected slots: 258 261 void open(int id); -
libs/libmythtv/recordingprofile.h
113 113 virtual int exec(); 114 114 virtual void load(); 115 115 virtual void save() { }; 116 virtual void save(QString) { }; 116 117 117 118 protected slots: 118 119 void open(int id); -
libs/libmythtv/dvbtransporteditor.h
87 87 DVBTransportList() {} 88 88 89 89 void save() { }; 90 void save(QString) { }; 90 91 void load() 91 92 { 92 93 fillSelections(); -
libs/libmythtv/dvbtransporteditor.cpp
69 69 }; 70 70 71 71 void save() { }; 72 void save(QString) { }; 72 73 void load() 73 74 { 74 75 MSqlQuery query(MSqlQuery::InitCon()); -
libs/libmythtv/videosource.h
167 167 XMLTV_generic_config(const VideoSource& _parent, QString _grabber); 168 168 169 169 virtual void save(); 170 virtual void save(QString) { save(); } 170 171 171 172 protected: 172 173 const VideoSource& parent; … … 178 179 public: 179 180 EITOnly_config(const VideoSource& _parent); 180 181 virtual void save(); 182 virtual void save(QString) { save(); } 183 181 184 protected: 182 185 UseEIT *useeit; 183 186 }; … … 205 208 if (name) 206 209 ConfigurationWizard::save(); 207 210 }; 211 virtual void save(QString destination) { 212 if (name) 213 ConfigurationWizard::save(destination); 214 }; 208 215 209 216 private: 210 217 class ID: virtual public IntegerSetting, … … 281 288 settingValue = ""; 282 289 SimpleDBStorage::save(); 283 290 }; 291 void save(QString destination) { 292 changed = true; 293 settingValue = ""; 294 SimpleDBStorage::save(destination); 295 }; 284 296 }; 285 297 286 298 class DVBVbiDevice: public LineEditSetting, public CCSetting { … … 295 307 settingValue = ""; 296 308 SimpleDBStorage::save(); 297 309 }; 310 void save(QString destination) { 311 changed = true; 312 settingValue = ""; 313 SimpleDBStorage::save(destination); 314 }; 298 315 }; 299 316 300 317 class DVBDiseqcInputList … … 439 456 virtual int exec(); 440 457 virtual void load(); 441 458 virtual void save() { }; 459 virtual void save(QString) { }; 442 460 443 461 public slots: 444 462 void menu(); … … 464 482 virtual int exec(); 465 483 virtual void load(); 466 484 virtual void save() { }; 485 virtual void save(QString) { }; 467 486 468 487 public slots: 469 488 void menu(); … … 483 502 virtual int exec(); 484 503 virtual void load(); 485 504 virtual void save() { }; 505 virtual void save(QString) { }; 486 506 487 507 protected: 488 508 vector<CardInput*> cardinputs; … … 530 550 void fillDiseqcSettingsInput(QString _pos, QString _port); 531 551 532 552 virtual void save(); 553 virtual void save(QString destination) { save(); } 533 554 534 555 public slots: 535 556 void channelScanner(); -
libs/libmythtv/libmythtv.pro
93 93 HEADERS += sr_items.h scheduledrecording.h 94 94 HEADERS += signalmonitorvalue.h 95 95 HEADERS += mpeg/iso639.h 96 HEADERS += viewschdiff.h 96 97 HEADERS += livetvchain.h 97 98 98 99 SOURCES += programinfo.cpp proglist.cpp … … 106 107 SOURCES += sr_items.cpp scheduledrecording.cpp 107 108 SOURCES += signalmonitorvalue.cpp 108 109 SOURCES += mpeg/iso639.cpp 110 SOURCES += viewschdiff.cpp 109 111 SOURCES += livetvchain.cpp 110 112 111 113 using_frontend { -
libs/libmythtv/scanwizardhelpers.h
120 120 { setLabel(QObject::tr("Video Source")); } 121 121 virtual void load(); 122 122 virtual void save() {} 123 virtual void save(QString) {} 123 124 private: 124 125 int sourceid; 125 126 }; … … 135 136 { setLabel(QObject::tr("Transport")); } 136 137 virtual void load() { refresh(); } 137 138 virtual void save() { ; } 139 virtual void save(QString) { ; } 138 140 139 141 void refresh(); 140 142 public slots: … … 165 167 { setLabel(QObject::tr("Capture Card")); } 166 168 virtual void load() { refresh(); } 167 169 virtual void save() { ; } 170 virtual void save(QString) { ; } 168 171 void refresh(); 169 172 170 173 public slots: -
libs/libmythtv/programinfo.h
320 320 return at(index); 321 321 }; 322 322 323 bool FromScheduler(bool &hasConflicts );323 bool FromScheduler(bool &hasConflicts, QString database = ""); 324 324 bool FromScheduler(void) { 325 325 bool dummyConflicts; 326 326 return FromScheduler(dummyConflicts); -
libs/libmythtv/programinfo.cpp
3478 3478 * * 3479 3479 * ************************************************************************* */ 3480 3480 3481 bool ProgramList::FromScheduler(bool &hasConflicts )3481 bool ProgramList::FromScheduler(bool &hasConflicts, QString database) 3482 3482 { 3483 3483 clear(); 3484 3484 hasConflicts = false; 3485 3485 3486 QStringList slist = QString("QUERY_GETALLPENDING"); 3486 QString query; 3487 if (database != "") 3488 { 3489 query = QString("QUERY_GETALLPENDING %1").arg(database); 3490 } else { 3491 query = QString("QUERY_GETALLPENDING"); 3492 } 3493 3494 QStringList slist = query; 3495 3487 3496 if (!gContext->SendReceiveStringList(slist) || slist.size() < 2) 3488 3497 { 3489 3498 VERBOSE(VB_IMPORTANT, -
libs/libmythtv/sr_root.h
27 27 DialogDoneListItem* cancelItem; 28 28 DialogDoneListItem* recordAsShownItem; 29 29 ManagedListItem* upcomingButton; 30 ManagedListItem* testButton; 30 31 ManagedListItem* detailsButton; 31 32 32 33 class SRSchedOptionsGroup* schedOptions; -
libs/libmythtv/scheduledrecording.cpp
8 8 #include "sr_dialog.h" 9 9 #include "jobqueue.h" 10 10 #include "mythdbcon.h" 11 #include "viewschdiff.h" 11 12 12 13 #include <qlayout.h> 13 14 #include <qlabel.h> … … 435 436 signalChange(getRecordID()); 436 437 } 437 438 439 void ScheduledRecording::save(QString destination) 440 { 441 if (type->isChanged() && getRecordingType() == kNotRecording) 442 { 443 remove(); 444 } 445 else 446 { 447 ConfigurationGroup::save(destination); 448 } 449 signalChange(getRecordID()); 450 } 451 438 452 void ScheduledRecording::remove() 439 453 { 440 454 int rid = getRecordID(); … … 813 827 recgroup->setChanged(); 814 828 } 815 829 830 void 831 ScheduledRecording::testRecording() 832 { 833 834 QString ttable = "record_tmp"; 835 836 MSqlQueryInfo dbcon = MSqlQuery::SchedCon(); 837 MSqlQuery query(dbcon); 838 QString thequery; 839 840 thequery ="SELECT GET_LOCK(:LOCK, 2);"; 841 query.prepare(thequery); 842 query.bindValue(":LOCK", "DiffSchedule"); 843 query.exec(); 844 if (query.lastError().type() != QSqlError::None) 845 { 846 QString msg = 847 QString("DB Error (Obtaining lock in testRecording): \n" 848 "Query was: %1 \nError was: %2 \n") 849 .arg(thequery) 850 .arg(MythContext::DBErrorMessage(query.lastError())); 851 VERBOSE(VB_IMPORTANT, msg); 852 return; 853 } 854 855 856 thequery = QString("DROP TABLE IF EXISTS %1;").arg(ttable); 857 query.prepare(thequery); 858 query.exec(); 859 if (query.lastError().type() != QSqlError::None) 860 { 861 QString msg = 862 QString("DB Error (deleting old table in testRecording): \n" 863 "Query was: %1 \nError was: %2 \n") 864 .arg(thequery) 865 .arg(MythContext::DBErrorMessage(query.lastError())); 866 VERBOSE(VB_IMPORTANT, msg); 867 return; 868 } 869 870 thequery = QString("CREATE TABLE %1 SELECT * FROM record;").arg(ttable); 871 query.prepare(thequery); 872 query.exec(); 873 if (query.lastError().type() != QSqlError::None) 874 { 875 QString msg = 876 QString("DB Error (create new table): \n" 877 "Query was: %1 \nError was: %2 \n") 878 .arg(thequery) 879 .arg(MythContext::DBErrorMessage(query.lastError())); 880 VERBOSE(VB_IMPORTANT, msg); 881 return; 882 } 883 884 save(ttable); 885 886 ViewScheduleDiff vsd(gContext->GetMainWindow(), "Recording Changes", ttable); 887 888 // query2.prepare(QString("DROP TABLE %1;").arg(ttable)); 889 // query2.exec(); 890 //fprintf (stderr, "drop2\n"); 891 892 thequery = "SELECT RELEASE_LOCK(:LOCK);"; 893 query.prepare(thequery); 894 query.bindValue(":LOCK", "DiffSchedule"); 895 query.exec(); 896 if (query.lastError().type() != QSqlError::None) 897 { 898 QString msg = 899 QString("DB Error (free lock): \n" 900 "Query was: %1 \nError was: %2 \n") 901 .arg(thequery) 902 .arg(MythContext::DBErrorMessage(query.lastError())); 903 VERBOSE(VB_IMPORTANT, msg); 904 return; 905 } 906 907 vsd.exec(); 908 } 909 816 910 /* vim: set expandtab tabstop=4 shiftwidth=4: */ -
libs/libmythtv/sr_root.cpp
10 10 cancelItem->setState(MLS_BOLD); 11 11 addItem(cancelItem); 12 12 13 14 13 recType = new SRRecordingType(schedRec, _parentList, this); 15 14 addItem(recType->getItem(), -1); 16 15 connect(recType->getItem(), SIGNAL(changed(ManagedListItem*)), this, SLOT(itemChanged(ManagedListItem*))); … … 34 33 addItem(upcomingButton, -1); 35 34 connect(upcomingButton, SIGNAL(selected(ManagedListItem*)), _rec, SLOT(runProgList())); 36 35 36 testButton = new ManagedListItem(QObject::tr("Display recording changes"), 37 _parentList, this, "test"); 38 addItem(testButton, -1); 39 connect(testButton, SIGNAL(selected(ManagedListItem*)), _rec, SLOT(testRecording())); 40 37 41 recordAsShownItem = new DialogDoneListItem(QString("[ %1 ]").arg(QObject::tr("Save these settings")), 38 42 MythDialog::Accepted, NULL, _parentList, this, "recordAsShown"); 39 43 recordAsShownItem->setState(MLS_BOLD); -
libs/libmythtv/channelsettings.h
26 26 }; 27 27 28 28 void load() { }; 29 void save( )29 void save(QString table) 30 30 { 31 31 if (intValue() == 0) { 32 32 setValue(findHighest()); … … 53 53 if (query.numRowsAffected() != 1) 54 54 cerr << "ChannelID:Failed to insert into: " << table << endl; 55 55 } 56 }; 56 } 57 void save() 58 { 59 save(table); 60 } 57 61 58 62 int findHighest(int floor = 1000) 59 63 { -
libs/libmythtv/profilegroup.h
114 114 virtual int exec(); 115 115 virtual void load(); 116 116 virtual void save() {}; 117 virtual void save(QString) {}; 117 118 118 119 protected slots: 119 120 void open(int id); -
libs/libmythtv/channeleditor.h
57 57 }; 58 58 59 59 void save() {}; 60 void save(QString) {}; 60 61 void load() { 61 62 fillSelections(); 62 63 }; -
libs/libmyth/settings.cpp
109 109 (*i)->save(); 110 110 } 111 111 112 void ConfigurationGroup::save(QString destination) { 113 for(childList::iterator i = children.begin() ; 114 i != children.end() ; 115 ++i ) 116 (*i)->save(destination); 117 } 118 112 119 QWidget* VerticalConfigurationGroup::configWidget(ConfigurationGroup *cg, 113 120 QWidget* parent, 114 121 const char* widgetName) … … 350 357 children[top]->save(); 351 358 } 352 359 360 void StackedConfigurationGroup::save(QString destination) { 361 if (saveAll) 362 ConfigurationGroup::save(destination); 363 else if (top < children.size()) 364 children[top]->save(destination); 365 } 366 353 367 void TriggeredConfigurationGroup::setTrigger(Configurable* _trigger) { 354 368 trigger = _trigger; 355 369 // Make sure the stack is after the trigger … … 981 995 } 982 996 } 983 997 984 void SimpleDBStorage::save( )998 void SimpleDBStorage::save(QString table) 985 999 { 986 1000 if (!isChanged()) 987 1001 return; … … 1011 1025 } 1012 1026 } 1013 1027 1014 void AutoIncrementStorage::save() { 1028 void SimpleDBStorage::save() 1029 { 1030 save(table); 1031 } 1032 1033 void AutoIncrementStorage::save(QString table) { 1015 1034 if (intValue() == 0) 1016 1035 { 1017 1036 // Generate a new, unique ID … … 1038 1057 } 1039 1058 } 1040 1059 1060 void AutoIncrementStorage::save() 1061 { 1062 save(table); 1063 } 1064 1041 1065 void ListBoxSetting::setEnabled(bool b) 1042 1066 { 1043 1067 Configurable::setEnabled(b); -
libs/libmyth/langsettings.cpp
25 25 gContext->SaveSetting("Language", getValue()); 26 26 LanguageSettings::reload(); 27 27 }; 28 virtual void save(QString destination) { } 28 29 }; 29 30 30 31 -
libs/libmyth/settings.h
30 30 31 31 virtual void load() = 0; 32 32 virtual void save() = 0; 33 virtual void save(QString destination) = 0; 33 34 34 35 // A name for looking up the setting 35 36 void setName(QString str) { … … 123 124 virtual void load(); 124 125 125 126 virtual void save(); 127 virtual void save(QString destination); 126 128 127 129 void setUseLabel(bool useit) { uselabel = useit; } 128 130 void setUseFrame(bool useit) { useframe = useit; } … … 183 185 184 186 void raise(Configurable* child); 185 187 virtual void save(); 188 virtual void save(QString destination); 186 189 187 190 // save all children, or only the top? 188 191 void setSaveAll(bool b) { saveAll = b; }; … … 597 600 598 601 virtual void load() = 0; 599 602 virtual void save() = 0; 603 virtual void save(QString destination) = 0; 600 604 601 605 protected: 602 606 QString getColumn(void) const { return column; }; … … 615 619 616 620 virtual void load(); 617 621 virtual void save(); 622 virtual void save(QString destination); 618 623 619 624 protected: 620 625 … … 628 633 public: 629 634 virtual void load() { } 630 635 virtual void save() { } 636 virtual void save(QString) { } 631 637 }; 632 638 633 639 class AutoIncrementStorage: virtual public IntegerSetting, public DBStorage { … … 639 645 640 646 virtual void load() { }; 641 647 virtual void save(); 648 virtual void save(QString destination); 642 649 }; 643 650 644 651 class ButtonSetting: virtual public Setting { -
libs/libmyth/managedlist.cpp
682 682 int newIndex = curGroup->getCurIndex(); 683 683 int itemCount = curGroup->getItemCount(); 684 684 685 newIndex += (page ? itemCount: 1);685 newIndex += (page ? listSize : 1); 686 686 687 687 if (newIndex >= itemCount) 688 688 newIndex = (page ? itemCount - 1 : newIndex - itemCount); … … 707 707 int newIndex = curGroup->getCurIndex(); 708 708 int itemCount = curGroup->getItemCount(); 709 709 710 newIndex -= (page ? itemCount: 1);710 newIndex -= (page ? listSize : 1); 711 711 if (newIndex < 0) 712 712 newIndex = (page ? 0 : itemCount + newIndex); 713 713 -
programs/mythfrontend/main.cpp
23 23 #include "previousbox.h" 24 24 #include "customrecord.h" 25 25 #include "viewscheduled.h" 26 #include "viewschdiff.h" 26 27 #include "programrecpriority.h" 27 28 #include "channelrecpriority.h" 28 29 #include "globalsettings.h" -
programs/mythbackend/mainserver.cpp
379 379 } 380 380 else if (command == "QUERY_GETALLPENDING") 381 381 { 382 HandleGetPendingRecordings(pbs); 382 if (tokens.size() == 1) 383 HandleGetPendingRecordings(pbs); 384 else 385 HandleGetPendingRecordings(pbs, tokens[1]); 383 386 } 384 387 else if (command == "QUERY_GETALLSCHEDULED") 385 388 { … … 1937 1940 SendResponse(pbssock, strlist); 1938 1941 } 1939 1942 1940 void MainServer::HandleGetPendingRecordings(PlaybackSock *pbs )1943 void MainServer::HandleGetPendingRecordings(PlaybackSock *pbs, QString database) 1941 1944 { 1942 1945 QSocket *pbssock = pbs->getSocket(); 1943 1946 1944 1947 QStringList strList; 1945 1948 1946 if (m_sched) 1947 m_sched->getAllPending(strList); 1949 if (m_sched) { 1950 if (database == "") m_sched->getAllPending(strList); 1951 else { 1952 // We need a different connection from the scheduler proper 1953 // DDCon exists, although it's designed for other purposes. 1954 MSqlQueryInfo dbconn = MSqlQuery::DDCon(); 1955 Scheduler *sched = new Scheduler(false, encoderList, database, &dbconn); 1956 sched->FillRecordListFromDB(); 1957 sched->getAllPending(strList); 1958 delete sched; 1959 } 1960 } 1948 1961 else 1949 1962 { 1950 1963 strList << QString::number(0); -
programs/mythbackend/scheduler.cpp
31 31 #include "libmythtv/programinfo.h" 32 32 #include "libmythtv/scheduledrecording.h" 33 33 34 Scheduler::Scheduler(bool runthread, QMap<int, EncoderLink *> *tvList )34 Scheduler::Scheduler(bool runthread, QMap<int, EncoderLink *> *tvList, QString recordDB, MSqlQueryInfo *databaseConnection) 35 35 { 36 36 hasconflicts = false; 37 37 m_tvList = tvList; 38 38 39 if (databaseConnection) dbConn = *databaseConnection; 40 else dbConn = MSqlQuery::SchedCon(); 41 42 recordDatabase = recordDB; 43 39 44 m_mainServer = NULL; 40 45 41 46 m_isShuttingDown = false; … … 77 82 { 78 83 QString thequery; 79 84 80 MSqlQuery query( MSqlQuery::SchedCon());85 MSqlQuery query(dbConn); 81 86 query.prepare("SELECT NULL FROM capturecard;"); 82 87 83 88 int numcards = -1; … … 103 108 while (query.next()) 104 109 { 105 110 source = query.value(0).toInt(); 106 MSqlQuery subquery( MSqlQuery::SchedCon());111 MSqlQuery subquery(dbConn); 107 112 108 113 subquery.prepare("SELECT cardinputid FROM cardinput WHERE " 109 114 "sourceid = :SOURCEID ORDER BY cardinputid;"); … … 277 282 278 283 void Scheduler::FillRecordListFromDB(void) 279 284 { 280 MSqlQuery query( MSqlQuery::SchedCon());285 MSqlQuery query(dbConn); 281 286 query.prepare("CREATE TEMPORARY TABLE recordmatch " 282 287 "(recordid int unsigned, chanid int unsigned, " 283 288 " starttime datetime, manualid int unsigned, " … … 291 296 292 297 UpdateMatches(-1); 293 298 FillRecordList(); 299 300 MSqlQuery queryDrop(dbConn); 301 queryDrop.prepare("DROP TEMPORARY TABLE recordmatch;"); 302 queryDrop.exec(); 303 if (!queryDrop.isActive()) 304 { 305 MythContext::DBError("FillRecordListFromDB", queryDrop); 306 return; 307 } 308 294 309 } 295 310 296 311 void Scheduler::FillRecordListFromMaster(void) … … 980 995 981 996 // Mark anything that was recording as aborted. We'll fix it up. 982 997 // if possible, after the slaves connect and we start scheduling. 983 MSqlQuery query( MSqlQuery::SchedCon());998 MSqlQuery query(dbConn); 984 999 query.prepare("UPDATE oldrecorded SET recstatus = :RSABORTED " 985 1000 " WHERE recstatus = :RSRECORDING"); 986 1001 query.bindValue(":RSABORTED", rsAborted); … … 1425 1440 1426 1441 void Scheduler::UpdateManuals(int recordid) 1427 1442 { 1428 MSqlQuery query( MSqlQuery::SchedCon());1443 MSqlQuery query(dbConn); 1429 1444 1430 query.prepare( "SELECT type,title,station,startdate,starttime, "1445 query.prepare(QString("SELECT type,title,station,startdate,starttime, " 1431 1446 " enddate,endtime " 1432 "FROM record WHERE recordid = :RECORDID");1447 "FROM %1 WHERE recordid = :RECORDID").arg(recordDatabase)); 1433 1448 query.bindValue(":RECORDID", recordid); 1434 1449 query.exec(); 1435 1450 if (!query.isActive() || query.size() != 1) … … 1529 1544 QStringList &where, 1530 1545 MSqlBindings &bindings) 1531 1546 { 1532 MSqlQuery result( MSqlQuery::SchedCon());1547 MSqlQuery result(dbConn); 1533 1548 QString query; 1534 1549 QString qphrase; 1535 1550 1536 1551 query = QString("SELECT recordid,search,subtitle,description " 1537 "FROM record WHERE search <> %1AND "1538 "(recordid = % 2 OR %3= -1) ")1539 .arg( kNoSearch).arg(recordid).arg(recordid);1552 "FROM %1 WHERE search <> %2 AND " 1553 "(recordid = %3 OR %4 = -1) ") 1554 .arg(recordDatabase).arg(kNoSearch).arg(recordid).arg(recordid); 1540 1555 1541 1556 result.prepare(query); 1542 1557 … … 1574 1589 case kPowerSearch: 1575 1590 qphrase.remove(QRegExp("^\\s*AND\\s+", false)); 1576 1591 from << result.value(2).toString(); 1577 where << (QString(" record.recordid = ") + bindrecid +1592 where << (QString("%1.recordid = ").arg(recordDatabase) + bindrecid + 1578 1593 QString(" AND program.manualid = 0 AND ( %2 )") 1579 1594 .arg(qphrase)); 1580 1595 break; 1581 1596 case kTitleSearch: 1582 1597 from << ""; 1583 where << (QString(" record.recordid = ") + bindrecid + " AND "1598 where << (QString("%1.recordid = ").arg(recordDatabase) + bindrecid + " AND " 1584 1599 "program.manualid = 0 AND " 1585 1600 "program.title LIKE " + bindlikephrase); 1586 1601 break; 1587 1602 case kKeywordSearch: 1588 1603 from << ""; 1589 where << (QString(" record.recordid = ") + bindrecid +1604 where << (QString("%1.recordid = ").arg(recordDatabase) + bindrecid + 1590 1605 " AND program.manualid = 0" 1591 1606 " AND (program.title LIKE " + bindlikephrase + 1592 1607 " OR program.subtitle LIKE " + bindlikephrase + … … 1594 1609 break; 1595 1610 case kPeopleSearch: 1596 1611 from << ", people, credits"; 1597 where << (QString(" record.recordid = ") + bindrecid + " AND "1612 where << (QString("%1.recordid = ").arg(recordDatabase) + bindrecid + " AND " 1598 1613 "program.manualid = 0 AND " 1599 1614 "people.name LIKE " + bindphrase + " AND " 1600 1615 "credits.person = people.person AND " … … 1604 1619 case kManualSearch: 1605 1620 UpdateManuals(result.value(0).toInt()); 1606 1621 from << ""; 1607 where << ( QString("record.recordid = ") + bindrecid + " AND "1608 "program.manualid = record.recordid ");1622 where << ((QString("%1.recordid = ").arg(recordDatabase)) + bindrecid + " AND " + 1623 QString("program.manualid = %1.recordid ").arg(recordDatabase)); 1609 1624 break; 1610 1625 default: 1611 1626 VERBOSE(VB_IMPORTANT, QString("Unknown RecSearchType " … … 1621 1636 if (recordid == -1 || from.count() == 0) 1622 1637 { 1623 1638 from << ""; 1624 where << "record.search = :NRST AND "1625 "( record.recordid = :NRRECORDID OR :NRRECORDID = -1) AND "1639 QString s("DATABASE.search = :NRST AND " 1640 "(DATABASE.recordid = :NRRECORDID OR :NRRECORDID = -1) AND " 1626 1641 "program.manualid = 0 AND " 1627 "program.title = record.title "; 1642 "program.title = DATABASE.title "); 1643 1644 while (1) 1645 { 1646 int i = s.find("DATABASE"); 1647 if (i == -1) break; 1648 s = s.replace(i, strlen("DATABASE"), recordDatabase); 1649 } 1650 1651 where << s; 1628 1652 bindings[":NRST"] = kNoSearch; 1629 1653 bindings[":NRRECORDID"] = recordid; 1630 1654 } … … 1633 1657 void Scheduler::UpdateMatches(int recordid) { 1634 1658 struct timeval dbstart, dbend; 1635 1659 1636 MSqlQuery query( MSqlQuery::SchedCon());1660 MSqlQuery query(dbConn); 1637 1661 query.prepare("DELETE FROM recordmatch " 1638 1662 "WHERE recordid = :RECORDID OR :RECORDID = -1;"); 1639 1663 … … 1673 1697 { 1674 1698 QString query = QString( 1675 1699 "INSERT INTO recordmatch (recordid, chanid, starttime, manualid) " 1676 "SELECT record.recordid, program.chanid, program.starttime, "1700 "SELECT DATABASE.recordid, program.chanid, program.starttime, " 1677 1701 " IF(search = %1, recordid, 0) " 1678 "FROM record, program ").arg(kManualSearch) + fromclauses[clause] + QString(1702 "FROM DATABASE, program ").arg(kManualSearch) + fromclauses[clause] + QString( 1679 1703 " INNER JOIN channel ON (channel.chanid = program.chanid) " 1680 1704 "WHERE ") + whereclauses[clause] + QString(" AND channel.visible = 1 AND " 1681 "(( record.type = %1 " // allrecord1682 "OR record.type = %2 " // findonerecord1683 "OR record.type = %3 " // finddailyrecord1684 "OR record.type = %4) " // findweeklyrecord1705 "((DATABASE.type = %1 " // allrecord 1706 "OR DATABASE.type = %2 " // findonerecord 1707 "OR DATABASE.type = %3 " // finddailyrecord 1708 "OR DATABASE.type = %4) " // findweeklyrecord 1685 1709 " OR " 1686 " (( record.station = channel.callsign) " // channel matches1710 " ((DATABASE.station = channel.callsign) " // channel matches 1687 1711 " AND " 1688 " (( record.type = %5) " // channelrecord1712 " ((DATABASE.type = %5) " // channelrecord 1689 1713 " OR" 1690 " ((TIME_TO_SEC( record.starttime) = TIME_TO_SEC(program.starttime)) " // timeslot matches1714 " ((TIME_TO_SEC(DATABASE.starttime) = TIME_TO_SEC(program.starttime)) " // timeslot matches 1691 1715 " AND " 1692 " (( record.type = %6) " // timeslotrecord1716 " ((DATABASE.type = %6) " // timeslotrecord 1693 1717 " OR" 1694 " ((DAYOFWEEK( record.startdate) = DAYOFWEEK(program.starttime) "1718 " ((DAYOFWEEK(DATABASE.startdate) = DAYOFWEEK(program.starttime) " 1695 1719 " AND " 1696 " (( record.type = %7) " // weekslotrecord1720 " ((DATABASE.type = %7) " // weekslotrecord 1697 1721 " OR" 1698 " ((TO_DAYS( record.startdate) = TO_DAYS(program.starttime)) " // date matches1722 " ((TO_DAYS(DATABASE.startdate) = TO_DAYS(program.starttime)) " // date matches 1699 1723 " )" 1700 1724 " )" 1701 1725 " )" … … 1713 1737 .arg(kTimeslotRecord) 1714 1738 .arg(kWeekslotRecord); 1715 1739 1740 while (1) 1741 { 1742 int i = query.find("DATABASE"); 1743 if (i == -1) break; 1744 query = query.replace(i, strlen("DATABASE"), recordDatabase); 1745 } 1746 1716 1747 VERBOSE(VB_SCHEDULE, QString(" |-- Start DB Query %1...").arg(clause)); 1717 1748 1718 1749 gettimeofday(&dbstart, NULL); 1719 MSqlQuery result( MSqlQuery::SchedCon());1750 MSqlQuery result(dbConn); 1720 1751 result.prepare(query); 1721 1752 result.bindValues(bindings); 1722 1753 result.exec(); … … 1757 1788 QMap<int, bool> tooManyMap; 1758 1789 bool checkTooMany = false; 1759 1790 1760 MSqlQuery rlist( MSqlQuery::SchedCon());1761 rlist.prepare( "SELECT recordid,title,maxepisodes,maxnewest FROM record;");1791 MSqlQuery rlist(dbConn); 1792 rlist.prepare(QString("SELECT recordid,title,maxepisodes,maxnewest FROM %1;").arg(recordDatabase)); 1762 1793 1763 1794 rlist.exec(); 1764 1795 … … 1779 1810 1780 1811 if (maxEpisodes && !maxNewest) 1781 1812 { 1782 MSqlQuery epicnt( MSqlQuery::SchedCon());1813 MSqlQuery epicnt(dbConn); 1783 1814 1784 1815 epicnt.prepare("SELECT count(*) FROM recorded " 1785 1816 "WHERE title = :TITLE;"); … … 1801 1832 } 1802 1833 1803 1834 QString progfindid = QString( 1804 "(CASE record.type "1835 "(CASE DATABASE.type " 1805 1836 " WHEN %1 " 1806 " THEN record.findid "1837 " THEN DATABASE.findid " 1807 1838 " WHEN %2 " 1808 1839 " THEN to_days(date_sub(program.starttime, interval " 1809 " time_format( record.findtime, '%H:%i') hour_minute)) "1840 " time_format(DATABASE.findtime, '%H:%i') hour_minute)) " 1810 1841 " WHEN %3 " 1811 1842 " THEN floor((to_days(date_sub(program.starttime, interval " 1812 " time_format( record.findtime, '%H:%i') hour_minute)) - "1813 " record.findday)/7) * 7 + record.findday "1843 " time_format(DATABASE.findtime, '%H:%i') hour_minute)) - " 1844 " DATABASE.findday)/7) * 7 + DATABASE.findday " 1814 1845 " WHEN %4 " 1815 " THEN record.findid "1846 " THEN DATABASE.findid " 1816 1847 " ELSE 0 " 1817 1848 " END) ") 1818 1849 .arg(kFindOneRecord) … … 1826 1857 "program.title, program.subtitle, program.description, " 1827 1858 "channel.channum, channel.callsign, channel.name, " 1828 1859 "oldrecorded.endtime IS NOT NULL AS oldrecduplicate, program.category, " 1829 " record.recpriority, "1830 " record.dupin, "1860 "DATABASE.recpriority, " 1861 "DATABASE.dupin, " 1831 1862 "recorded.endtime IS NOT NULL AND recorded.endtime < NOW() AS recduplicate, " 1832 1863 "oldfind.findid IS NOT NULL AS findduplicate, " 1833 " record.type, record.recordid, "1834 "program.starttime - INTERVAL record.startoffset minute AS recstartts, "1835 "program.endtime + INTERVAL record.endoffset minute AS recendts, "1836 "program.previouslyshown, record.recgroup, record.dupmethod, "1864 "DATABASE.type, DATABASE.recordid, " 1865 "program.starttime - INTERVAL DATABASE.startoffset minute AS recstartts, " 1866 "program.endtime + INTERVAL DATABASE.endoffset minute AS recendts, " 1867 "program.previouslyshown, DATABASE.recgroup, DATABASE.dupmethod, " 1837 1868 "channel.commfree, capturecard.cardid, " 1838 1869 "cardinput.cardinputid, UPPER(cardinput.shareable) = 'Y' AS shareable, " 1839 1870 "program.seriesid, program.programid, program.category_type, " 1840 "program.airdate, program.stars, program.originalairdate, record.inactive, "1841 " record.parentid, ") + progfindid + ", record.tsdefault, "1871 "program.airdate, program.stars, program.originalairdate, DATABASE.inactive, " 1872 "DATABASE.parentid, ") + progfindid + ", DATABASE.tsdefault, " 1842 1873 "oldrecstatus.recstatus, oldrecstatus.reactivate, " 1843 1874 "channel.recpriority + cardinput.preference " 1844 1875 + QString( 1845 1876 "FROM recordmatch " 1846 1877 1847 " INNER JOIN record ON (recordmatch.recordid = record.recordid) "1878 " INNER JOIN DATABASE ON (recordmatch.recordid = DATABASE.recordid) " 1848 1879 " INNER JOIN program ON (recordmatch.chanid = program.chanid AND " 1849 1880 " recordmatch.starttime = program.starttime AND " 1850 1881 " recordmatch.manualid = program.manualid) " … … 1857 1888 " oldrecstatus.title = program.title ) " 1858 1889 " LEFT JOIN oldrecorded ON " 1859 1890 " ( " 1860 " record.dupmethod > 1 AND "1891 " DATABASE.dupmethod > 1 AND " 1861 1892 " oldrecorded.duplicate <> 0 AND " 1862 1893 " program.title = oldrecorded.title " 1863 1894 " AND " … … 1872 1903 " ( " 1873 1904 " (program.programid = '' OR oldrecorded.programid = '') " 1874 1905 " AND " 1875 " ((( record.dupmethod & 0x02) = 0) OR (program.subtitle <> '' "1906 " (((DATABASE.dupmethod & 0x02) = 0) OR (program.subtitle <> '' " 1876 1907 " AND program.subtitle = oldrecorded.subtitle)) " 1877 1908 " AND " 1878 " ((( record.dupmethod & 0x04) = 0) OR (program.description <> '' "1909 " (((DATABASE.dupmethod & 0x04) = 0) OR (program.description <> '' " 1879 1910 " AND program.description = oldrecorded.description)) " 1880 1911 " ) " 1881 1912 " ) " 1882 1913 " ) " 1883 1914 " LEFT JOIN recorded ON " 1884 1915 " ( " 1885 " record.dupmethod > 1 AND "1916 " DATABASE.dupmethod > 1 AND " 1886 1917 " program.title = recorded.title " 1887 1918 " AND " 1888 1919 " ( " … … 1896 1927 " ( " 1897 1928 " (program.programid = '' OR recorded.programid = '') " 1898 1929 " AND " 1899 " ((( record.dupmethod & 0x02) = 0) OR (program.subtitle <> '' "1930 " (((DATABASE.dupmethod & 0x02) = 0) OR (program.subtitle <> '' " 1900 1931 " AND program.subtitle = recorded.subtitle)) " 1901 1932 " AND " 1902 " ((( record.dupmethod & 0x04) = 0) OR (program.description <> '' "1933 " (((DATABASE.dupmethod & 0x04) = 0) OR (program.description <> '' " 1903 1934 " AND program.description = recorded.description)) " 1904 1935 " ) " 1905 1936 " ) " … … 1907 1938 " LEFT JOIN oldfind ON " 1908 1939 " (oldfind.recordid = recordmatch.recordid AND " 1909 1940 " oldfind.findid = ") + progfindid + QString(") " 1910 " ORDER BY record.recordid DESC "1941 " ORDER BY DATABASE.recordid DESC " 1911 1942 ); 1912 1943 1944 while (1) 1945 { 1946 int i = query.find("DATABASE"); 1947 if (i == -1) break; 1948 query = query.replace(i, strlen("DATABASE"), recordDatabase); 1949 } 1950 1913 1951 VERBOSE(VB_SCHEDULE, QString(" |-- Start DB Query...")); 1914 1952 1915 1953 gettimeofday(&dbstart, NULL); 1916 MSqlQuery result( MSqlQuery::SchedCon());1954 MSqlQuery result(dbConn); 1917 1955 result.prepare(query); 1918 1956 result.exec(); 1919 1957 gettimeofday(&dbend, NULL); … … 1976 2014 p->year = result.value(30).toString(); 1977 2015 p->stars = result.value(31).toDouble(); 1978 2016 2017 1979 2018 if (result.value(32).isNull()) 1980 2019 { 1981 2020 p->originalAirDate = p->startts.date(); … … 2081 2120 RecList tmpList; 2082 2121 2083 2122 QString query = QString( 2084 "SELECT record.recordid, record.type, record.chanid, "2085 " record.starttime, record.startdate, record.endtime, record.enddate, "2086 " record.startoffset, record.endoffset, "2087 " record.title, record.subtitle, record.description, "2123 "SELECT DATABASE.recordid, DATABASE.type, DATABASE.chanid, " 2124 "DATABASE.starttime, DATABASE.startdate, DATABASE.endtime, DATABASE.enddate, " 2125 "DATABASE.startoffset, DATABASE.endoffset, " 2126 "DATABASE.title, DATABASE.subtitle, DATABASE.description, " 2088 2127 "channel.channum, channel.callsign, channel.name " 2089 "FROM record"2090 " INNER JOIN channel ON (channel.chanid = record.chanid) "2091 " LEFT JOIN recordmatch on record.recordid = recordmatch.recordid "2128 "FROM DATABASE " 2129 " INNER JOIN channel ON (channel.chanid = DATABASE.chanid) " 2130 " LEFT JOIN recordmatch on DATABASE.recordid = recordmatch.recordid " 2092 2131 "WHERE (type = %1 OR type = %2) AND recordmatch.chanid IS NULL") 2093 2132 .arg(kSingleRecord) 2094 2133 .arg(kOverrideRecord); 2095 2134 2135 while (1) 2136 { 2137 int i = query.find("DATABASE"); 2138 if (i == -1) break; 2139 query = query.replace(i, strlen("DATABASE"), recordDatabase); 2140 } 2141 2096 2142 VERBOSE(VB_SCHEDULE, QString(" |-- Start DB Query...")); 2097 2143 2098 2144 gettimeofday(&dbstart, NULL); 2099 MSqlQuery result( MSqlQuery::SchedCon());2145 MSqlQuery result(dbConn); 2100 2146 result.prepare(query); 2101 2147 result.exec(); 2102 2148 gettimeofday(&dbend, NULL); … … 2166 2212 void Scheduler::findAllScheduledPrograms(list<ProgramInfo *> &proglist) 2167 2213 { 2168 2214 QString temptime, tempdate; 2169 QString query = QString("SELECT record.chanid, record.starttime, "2170 " record.startdate, record.endtime, record.enddate, record.title, "2171 " record.subtitle, record.description, record.recpriority, record.type, "2172 "channel.name, record.recordid, record.recgroup, record.dupin, "2173 " record.dupmethod, channel.commfree, channel.channum, record.station, "2174 " record.seriesid, record.programid, record.category, record.findid, "2175 " record.tsdefault "2176 "FROM record"2177 "LEFT JOIN channel ON channel.callsign = record.station "2215 QString query = QString("SELECT DATABASE.chanid, DATABASE.starttime, " 2216 "DATABASE.startdate, DATABASE.endtime, DATABASE.enddate, DATABASE.title, " 2217 "DATABASE.subtitle, DATABASE.description, DATABASE.recpriority, DATABASE.type, " 2218 "channel.name, DATABASE.recordid, DATABASE.recgroup, DATABASE.dupin, " 2219 "DATABASE.dupmethod, channel.commfree, channel.channum, DATABASE.station, " 2220 "DATABASE.seriesid, DATABASE.programid, DATABASE.category, DATABASE.findid, " 2221 "DATABASE.tsdefault " 2222 "FROM DATABASE " 2223 "LEFT JOIN channel ON channel.callsign = DATABASE.station " 2178 2224 "GROUP BY recordid " 2179 2225 "ORDER BY title ASC;"); 2180 2226 2227 while (1) 2228 { 2229 int i = query.find("DATABASE"); 2230 if (i == -1) break; 2231 query = query.replace(i, strlen("DATABASE"), recordDatabase); 2232 } 2233 2181 2234 MSqlQuery result(MSqlQuery::InitCon()); 2182 2235 result.prepare(query); 2183 2236 result.exec(); -
programs/mythbackend/mainserver.h
83 83 void HandleQueryFreeSpace(PlaybackSock *pbs, bool allBackends); 84 84 void HandleQueryCheckFile(QStringList &slist, PlaybackSock *pbs); 85 85 void HandleQueryGuideDataThrough(PlaybackSock *pbs); 86 void HandleGetPendingRecordings(PlaybackSock *pbs );86 void HandleGetPendingRecordings(PlaybackSock *pbs, QString database = ""); 87 87 void HandleGetScheduledRecordings(PlaybackSock *pbs); 88 88 void HandleGetConflictingRecordings(QStringList &slist, PlaybackSock *pbs); 89 89 void HandleGetNextFreeRecorder(QStringList &slist, PlaybackSock *pbs); -
programs/mythbackend/scheduler.h
22 22 class Scheduler : public QObject 23 23 { 24 24 public: 25 Scheduler(bool runthread, QMap<int, EncoderLink *> *tvList );25 Scheduler(bool runthread, QMap<int, EncoderLink *> *tvList, QString recorddb = "record", MSqlQueryInfo *dbConnUse = NULL); 26 26 ~Scheduler(); 27 27 28 28 void Reschedule(int recordid); … … 61 61 static void *SchedulerThread(void *param); 62 62 63 63 private: 64 QString recordDatabase; 65 64 66 void verifyCards(void); 65 67 66 68 bool FillRecordList(void); … … 117 119 MainServer *m_mainServer; 118 120 119 121 bool m_isShuttingDown; 122 MSqlQueryInfo dbConn; 120 123 121 124 }; 122 125