Ticket #602: viewscheddiff4.patch
File viewscheddiff4.patch, 53.0 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 altTable = "", int recordid=-1); 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, int recordid) 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 %2").arg(database).arg(recordid); 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> 14 15 #include <qapplication.h> 15 16 #include <qregexp.h> 17 #include <qsqlquery.h> 16 18 17 19 // NOTE: if this changes, you _MUST_ update the RecTypePriority function 18 20 // in recordingtypes.cpp. … … 435 437 signalChange(getRecordID()); 436 438 } 437 439 440 void ScheduledRecording::save(QString destination) 441 { 442 if (type->isChanged() && getRecordingType() == kNotRecording) 443 { 444 remove(); 445 } 446 else 447 { 448 ConfigurationGroup::save(destination); 449 } 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 thequery = QString("SHOW COLUMNS FROM %1;").arg(ttable); 885 query.prepare(thequery); 886 query.exec(); 887 if (query.lastError().type() != QSqlError::None) 888 { 889 QString msg = 890 QString("DB Error (query columns): \n" 891 "Query was: %1 \nError was: %2 \n") 892 .arg(thequery) 893 .arg(MythContext::DBErrorMessage(query.lastError())); 894 VERBOSE(VB_IMPORTANT, msg); 895 return; 896 } 897 898 QStringList cols; 899 QStringList coltype; 900 while (query.next()) { 901 cols.push_back(query.value(0).toString()); 902 coltype.push_back(query.value(1).toString()); 903 } 904 905 QDict<QVariant> newvals; 906 newvals.setAutoDelete(true); 907 908 909 if (getRecordID() == 0) 910 thequery = QString("INSERT INTO %1 SET").arg(ttable); 911 else 912 thequery = QString("UPDATE %1 SET").arg(ttable); 913 914 char pref = ' '; 915 916 Setting *s; 917 for (unsigned int i = 0; i < cols.count(); i++) { 918 if (cols[i] == "recordid") continue; 919 int c = coltype[i].find('('); 920 QString ctype = coltype[i]; 921 if (c != -1) ctype.truncate(c); 922 923 s = byName(cols[i]); 924 if (!s) continue; 925 if (!s->isChanged()) continue; 926 927 QVariant *v = NULL; 928 if (ctype == "tinyint" || ctype == "int") 929 v = new QVariant(s->getValue().toInt()); 930 else if (ctype == "varchar" || ctype == "text" || 931 ctype == "date" || ctype == "time") 932 v = new QVariant(s->getValue().utf8()); 933 else if (ctype == "float") 934 v = new QVariant(s->getValue().toFloat()); 935 else 936 { 937 QString msg = 938 QString("Unknown column type %1 for field %2") 939 .arg(ctype).arg(cols[i]); 940 VERBOSE(VB_IMPORTANT, msg); 941 continue; 942 } 943 944 newvals.insert(cols[i], v); 945 thequery += pref; 946 thequery += ' '; 947 pref = ','; 948 thequery += QString("%1 = :%2").arg(cols[i]).arg(cols[i]); 949 } 950 if (getRecordID() != 0) thequery += QString(" WHERE recordid = :RECORDID"); 951 query.prepare(thequery); 952 if (getRecordID() != 0) query.bindValue(":RECORDID", getRecordID()); 953 for (unsigned int i = 0; i < cols.count(); i++) { 954 QVariant *v = newvals[cols[i]]; 955 if (v) query.bindValue(":" + cols[i], *v); 956 } 957 query.exec(); 958 if (query.lastError().type() != QSqlError::None) 959 { 960 QString msg = 961 QString("DB Error (query columns): \n" 962 "Query was: %1 \nError was: %2 \n") 963 .arg(thequery) 964 .arg(MythContext::DBErrorMessage(query.lastError())); 965 VERBOSE(VB_IMPORTANT, msg); 966 return; 967 } 968 969 ViewScheduleDiff vsd(gContext->GetMainWindow(), "Recording Changes", ttable, getRecordID()); 970 971 // query2.prepare(QString("DROP TABLE %1;").arg(ttable)); 972 // query2.exec(); 973 //fprintf (stderr, "drop2\n"); 974 975 thequery = "SELECT RELEASE_LOCK(:LOCK);"; 976 query.prepare(thequery); 977 query.bindValue(":LOCK", "DiffSchedule"); 978 query.exec(); 979 if (query.lastError().type() != QSqlError::None) 980 { 981 QString msg = 982 QString("DB Error (free lock): \n" 983 "Query was: %1 \nError was: %2 \n") 984 .arg(thequery) 985 .arg(MythContext::DBErrorMessage(query.lastError())); 986 VERBOSE(VB_IMPORTANT, msg); 987 return; 988 } 989 990 vsd.exec(); 991 } 992 816 993 /* 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 { -
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 if (tokens.size() == 2) 385 HandleGetPendingRecordings(pbs, tokens[1]); 386 else 387 HandleGetPendingRecordings(pbs, tokens[1], tokens[2].toInt()); 383 388 } 384 389 else if (command == "QUERY_GETALLSCHEDULED") 385 390 { … … 1937 1942 SendResponse(pbssock, strlist); 1938 1943 } 1939 1944 1940 void MainServer::HandleGetPendingRecordings(PlaybackSock *pbs )1945 void MainServer::HandleGetPendingRecordings(PlaybackSock *pbs, QString table, int recordid) 1941 1946 { 1942 1947 QSocket *pbssock = pbs->getSocket(); 1943 1948 1944 1949 QStringList strList; 1945 1950 1946 if (m_sched) 1947 m_sched->getAllPending(strList); 1951 if (m_sched) { 1952 if (table == "") m_sched->getAllPending(strList); 1953 else { 1954 // We need a different connection from the scheduler proper 1955 // DDCon exists, although it's designed for other purposes. 1956 MSqlQueryInfo dbconn = MSqlQuery::DDCon(); 1957 Scheduler *sched = new Scheduler(false, encoderList, table, &dbconn); 1958 sched->FillRecordListFromDB(recordid); 1959 sched->getAllPending(strList); 1960 delete sched; 1961 } 1962 } 1948 1963 else 1949 1964 { 1950 1965 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 recordTbl, 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 recordTable = recordTbl; 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;"); … … 275 280 return hasconflicts; 276 281 } 277 282 278 void Scheduler::FillRecordListFromDB( void)283 void Scheduler::FillRecordListFromDB(int recordid) 279 284 { 280 MSqlQuery query(MSqlQuery::SchedCon()); 281 query.prepare("CREATE TEMPORARY TABLE recordmatch " 285 struct timeval fillstart, fillend; 286 287 gettimeofday(&fillstart, NULL); 288 289 MSqlQuery query(dbConn); 290 QString thequery; 291 if (recordid == -1) 292 { 293 thequery = "CREATE TEMPORARY TABLE recordmatch " 282 294 "(recordid int unsigned, chanid int unsigned, " 283 295 " starttime datetime, manualid int unsigned, " 284 " INDEX (recordid));"); 296 " INDEX (recordid));"; 297 } else { 298 thequery = "CREATE TEMPORARY TABLE recordmatch " 299 "(recordid int unsigned, chanid int unsigned, " 300 " starttime datetime, manualid int unsigned, " 301 " INDEX (recordid)) SELECT * from recordmatch;"; 302 } 303 304 query.prepare(thequery); 285 305 query.exec(); 286 306 if (!query.isActive()) 287 307 { … … 289 309 return; 290 310 } 291 311 292 UpdateMatches( -1);312 UpdateMatches(recordid); 293 313 FillRecordList(); 314 315 MSqlQuery queryDrop(dbConn); 316 queryDrop.prepare("DROP TEMPORARY TABLE recordmatch;"); 317 queryDrop.exec(); 318 if (!queryDrop.isActive()) 319 { 320 MythContext::DBError("FillRecordListFromDB", queryDrop); 321 return; 322 } 323 324 gettimeofday(&fillend, NULL); 325 326 double schedTime = (fillend.tv_sec - fillstart.tv_sec ) + 327 (fillend.tv_usec - fillstart.tv_usec) / 1000000.0; 328 QString msg; 329 msg.sprintf("Speculative scheduled %d items in " 330 "%.2f", (int)reclist.size(), 331 schedTime); 332 VERBOSE(VB_GENERAL, msg); 294 333 } 295 334 296 335 void Scheduler::FillRecordListFromMaster(void) … … 980 1019 981 1020 // Mark anything that was recording as aborted. We'll fix it up. 982 1021 // if possible, after the slaves connect and we start scheduling. 983 MSqlQuery query( MSqlQuery::SchedCon());1022 MSqlQuery query(dbConn); 984 1023 query.prepare("UPDATE oldrecorded SET recstatus = :RSABORTED " 985 1024 " WHERE recstatus = :RSRECORDING"); 986 1025 query.bindValue(":RSABORTED", rsAborted); … … 1425 1464 1426 1465 void Scheduler::UpdateManuals(int recordid) 1427 1466 { 1428 MSqlQuery query( MSqlQuery::SchedCon());1467 MSqlQuery query(dbConn); 1429 1468 1430 query.prepare( "SELECT type,title,station,startdate,starttime, "1469 query.prepare(QString("SELECT type,title,station,startdate,starttime, " 1431 1470 " enddate,endtime " 1432 "FROM record WHERE recordid = :RECORDID");1471 "FROM %1 WHERE recordid = :RECORDID").arg(recordTable)); 1433 1472 query.bindValue(":RECORDID", recordid); 1434 1473 query.exec(); 1435 1474 if (!query.isActive() || query.size() != 1) … … 1529 1568 QStringList &where, 1530 1569 MSqlBindings &bindings) 1531 1570 { 1532 MSqlQuery result( MSqlQuery::SchedCon());1571 MSqlQuery result(dbConn); 1533 1572 QString query; 1534 1573 QString qphrase; 1535 1574 1536 1575 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);1576 "FROM %1 WHERE search <> %2 AND " 1577 "(recordid = %3 OR %4 = -1) ") 1578 .arg(recordTable).arg(kNoSearch).arg(recordid).arg(recordid); 1540 1579 1541 1580 result.prepare(query); 1542 1581 … … 1574 1613 case kPowerSearch: 1575 1614 qphrase.remove(QRegExp("^\\s*AND\\s+", false)); 1576 1615 from << result.value(2).toString(); 1577 where << (QString(" record.recordid = ") + bindrecid +1616 where << (QString("%1.recordid = ").arg(recordTable) + bindrecid + 1578 1617 QString(" AND program.manualid = 0 AND ( %2 )") 1579 1618 .arg(qphrase)); 1580 1619 break; 1581 1620 case kTitleSearch: 1582 1621 from << ""; 1583 where << (QString(" record.recordid = ") + bindrecid + " AND "1622 where << (QString("%1.recordid = ").arg(recordTable) + bindrecid + " AND " 1584 1623 "program.manualid = 0 AND " 1585 1624 "program.title LIKE " + bindlikephrase); 1586 1625 break; 1587 1626 case kKeywordSearch: 1588 1627 from << ""; 1589 where << (QString(" record.recordid = ") + bindrecid +1628 where << (QString("%1.recordid = ").arg(recordTable) + bindrecid + 1590 1629 " AND program.manualid = 0" 1591 1630 " AND (program.title LIKE " + bindlikephrase + 1592 1631 " OR program.subtitle LIKE " + bindlikephrase + … … 1594 1633 break; 1595 1634 case kPeopleSearch: 1596 1635 from << ", people, credits"; 1597 where << (QString(" record.recordid = ") + bindrecid + " AND "1636 where << (QString("%1.recordid = ").arg(recordTable) + bindrecid + " AND " 1598 1637 "program.manualid = 0 AND " 1599 1638 "people.name LIKE " + bindphrase + " AND " 1600 1639 "credits.person = people.person AND " … … 1604 1643 case kManualSearch: 1605 1644 UpdateManuals(result.value(0).toInt()); 1606 1645 from << ""; 1607 where << ( QString("record.recordid = ") + bindrecid + " AND "1608 "program.manualid = record.recordid ");1646 where << ((QString("%1.recordid = ").arg(recordTable)) + bindrecid + " AND " + 1647 QString("program.manualid = %1.recordid ").arg(recordTable)); 1609 1648 break; 1610 1649 default: 1611 1650 VERBOSE(VB_IMPORTANT, QString("Unknown RecSearchType " … … 1621 1660 if (recordid == -1 || from.count() == 0) 1622 1661 { 1623 1662 from << ""; 1624 where << "record.search = :NRST AND "1625 "( record.recordid = :NRRECORDID OR :NRRECORDID = -1) AND "1663 QString s("DATABASE.search = :NRST AND " 1664 "(DATABASE.recordid = :NRRECORDID OR :NRRECORDID = -1) AND " 1626 1665 "program.manualid = 0 AND " 1627 "program.title = record.title "; 1666 "program.title = DATABASE.title "); 1667 1668 while (1) 1669 { 1670 int i = s.find("DATABASE"); 1671 if (i == -1) break; 1672 s = s.replace(i, strlen("DATABASE"), recordTable); 1673 } 1674 1675 where << s; 1628 1676 bindings[":NRST"] = kNoSearch; 1629 1677 bindings[":NRRECORDID"] = recordid; 1630 1678 } … … 1633 1681 void Scheduler::UpdateMatches(int recordid) { 1634 1682 struct timeval dbstart, dbend; 1635 1683 1636 MSqlQuery query( MSqlQuery::SchedCon());1684 MSqlQuery query(dbConn); 1637 1685 query.prepare("DELETE FROM recordmatch " 1638 1686 "WHERE recordid = :RECORDID OR :RECORDID = -1;"); 1639 1687 … … 1673 1721 { 1674 1722 QString query = QString( 1675 1723 "INSERT INTO recordmatch (recordid, chanid, starttime, manualid) " 1676 "SELECT record.recordid, program.chanid, program.starttime, "1724 "SELECT DATABASE.recordid, program.chanid, program.starttime, " 1677 1725 " IF(search = %1, recordid, 0) " 1678 "FROM record, program ").arg(kManualSearch) + fromclauses[clause] + QString(1726 "FROM DATABASE, program ").arg(kManualSearch) + fromclauses[clause] + QString( 1679 1727 " INNER JOIN channel ON (channel.chanid = program.chanid) " 1680 1728 "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) " // findweeklyrecord1729 "((DATABASE.type = %1 " // allrecord 1730 "OR DATABASE.type = %2 " // findonerecord 1731 "OR DATABASE.type = %3 " // finddailyrecord 1732 "OR DATABASE.type = %4) " // findweeklyrecord 1685 1733 " OR " 1686 " (( record.station = channel.callsign) " // channel matches1734 " ((DATABASE.station = channel.callsign) " // channel matches 1687 1735 " AND " 1688 " (( record.type = %5) " // channelrecord1736 " ((DATABASE.type = %5) " // channelrecord 1689 1737 " OR" 1690 " ((TIME_TO_SEC( record.starttime) = TIME_TO_SEC(program.starttime)) " // timeslot matches1738 " ((TIME_TO_SEC(DATABASE.starttime) = TIME_TO_SEC(program.starttime)) " // timeslot matches 1691 1739 " AND " 1692 " (( record.type = %6) " // timeslotrecord1740 " ((DATABASE.type = %6) " // timeslotrecord 1693 1741 " OR" 1694 " ((DAYOFWEEK( record.startdate) = DAYOFWEEK(program.starttime) "1742 " ((DAYOFWEEK(DATABASE.startdate) = DAYOFWEEK(program.starttime) " 1695 1743 " AND " 1696 " (( record.type = %7) " // weekslotrecord1744 " ((DATABASE.type = %7) " // weekslotrecord 1697 1745 " OR" 1698 " ((TO_DAYS( record.startdate) = TO_DAYS(program.starttime)) " // date matches1746 " ((TO_DAYS(DATABASE.startdate) = TO_DAYS(program.starttime)) " // date matches 1699 1747 " )" 1700 1748 " )" 1701 1749 " )" … … 1713 1761 .arg(kTimeslotRecord) 1714 1762 .arg(kWeekslotRecord); 1715 1763 1764 while (1) 1765 { 1766 int i = query.find("DATABASE"); 1767 if (i == -1) break; 1768 query = query.replace(i, strlen("DATABASE"), recordTable); 1769 } 1770 1716 1771 VERBOSE(VB_SCHEDULE, QString(" |-- Start DB Query %1...").arg(clause)); 1717 1772 1718 1773 gettimeofday(&dbstart, NULL); 1719 MSqlQuery result( MSqlQuery::SchedCon());1774 MSqlQuery result(dbConn); 1720 1775 result.prepare(query); 1721 1776 result.bindValues(bindings); 1722 1777 result.exec(); … … 1757 1812 QMap<int, bool> tooManyMap; 1758 1813 bool checkTooMany = false; 1759 1814 1760 MSqlQuery rlist( MSqlQuery::SchedCon());1761 rlist.prepare( "SELECT recordid,title,maxepisodes,maxnewest FROM record;");1815 MSqlQuery rlist(dbConn); 1816 rlist.prepare(QString("SELECT recordid,title,maxepisodes,maxnewest FROM %1;").arg(recordTable)); 1762 1817 1763 1818 rlist.exec(); 1764 1819 … … 1779 1834 1780 1835 if (maxEpisodes && !maxNewest) 1781 1836 { 1782 MSqlQuery epicnt( MSqlQuery::SchedCon());1837 MSqlQuery epicnt(dbConn); 1783 1838 1784 1839 epicnt.prepare("SELECT count(*) FROM recorded " 1785 1840 "WHERE title = :TITLE;"); … … 1801 1856 } 1802 1857 1803 1858 QString progfindid = QString( 1804 "(CASE record.type "1859 "(CASE DATABASE.type " 1805 1860 " WHEN %1 " 1806 " THEN record.findid "1861 " THEN DATABASE.findid " 1807 1862 " WHEN %2 " 1808 1863 " THEN to_days(date_sub(program.starttime, interval " 1809 " time_format( record.findtime, '%H:%i') hour_minute)) "1864 " time_format(DATABASE.findtime, '%H:%i') hour_minute)) " 1810 1865 " WHEN %3 " 1811 1866 " 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 "1867 " time_format(DATABASE.findtime, '%H:%i') hour_minute)) - " 1868 " DATABASE.findday)/7) * 7 + DATABASE.findday " 1814 1869 " WHEN %4 " 1815 " THEN record.findid "1870 " THEN DATABASE.findid " 1816 1871 " ELSE 0 " 1817 1872 " END) ") 1818 1873 .arg(kFindOneRecord) … … 1826 1881 "program.title, program.subtitle, program.description, " 1827 1882 "channel.channum, channel.callsign, channel.name, " 1828 1883 "oldrecorded.endtime IS NOT NULL AS oldrecduplicate, program.category, " 1829 " record.recpriority, "1830 " record.dupin, "1884 "DATABASE.recpriority, " 1885 "DATABASE.dupin, " 1831 1886 "recorded.endtime IS NOT NULL AND recorded.endtime < NOW() AS recduplicate, " 1832 1887 "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, "1888 "DATABASE.type, DATABASE.recordid, " 1889 "program.starttime - INTERVAL DATABASE.startoffset minute AS recstartts, " 1890 "program.endtime + INTERVAL DATABASE.endoffset minute AS recendts, " 1891 "program.previouslyshown, DATABASE.recgroup, DATABASE.dupmethod, " 1837 1892 "channel.commfree, capturecard.cardid, " 1838 1893 "cardinput.cardinputid, UPPER(cardinput.shareable) = 'Y' AS shareable, " 1839 1894 "program.seriesid, program.programid, program.category_type, " 1840 "program.airdate, program.stars, program.originalairdate, record.inactive, "1841 " record.parentid, ") + progfindid + ", record.tsdefault, "1895 "program.airdate, program.stars, program.originalairdate, DATABASE.inactive, " 1896 "DATABASE.parentid, ") + progfindid + ", DATABASE.tsdefault, " 1842 1897 "oldrecstatus.recstatus, oldrecstatus.reactivate, " 1843 1898 "channel.recpriority + cardinput.preference " 1844 1899 + QString( 1845 1900 "FROM recordmatch " 1846 1901 1847 " INNER JOIN record ON (recordmatch.recordid = record.recordid) "1902 " INNER JOIN DATABASE ON (recordmatch.recordid = DATABASE.recordid) " 1848 1903 " INNER JOIN program ON (recordmatch.chanid = program.chanid AND " 1849 1904 " recordmatch.starttime = program.starttime AND " 1850 1905 " recordmatch.manualid = program.manualid) " … … 1857 1912 " oldrecstatus.title = program.title ) " 1858 1913 " LEFT JOIN oldrecorded ON " 1859 1914 " ( " 1860 " record.dupmethod > 1 AND "1915 " DATABASE.dupmethod > 1 AND " 1861 1916 " oldrecorded.duplicate <> 0 AND " 1862 1917 " program.title = oldrecorded.title " 1863 1918 " AND " … … 1872 1927 " ( " 1873 1928 " (program.programid = '' OR oldrecorded.programid = '') " 1874 1929 " AND " 1875 " ((( record.dupmethod & 0x02) = 0) OR (program.subtitle <> '' "1930 " (((DATABASE.dupmethod & 0x02) = 0) OR (program.subtitle <> '' " 1876 1931 " AND program.subtitle = oldrecorded.subtitle)) " 1877 1932 " AND " 1878 " ((( record.dupmethod & 0x04) = 0) OR (program.description <> '' "1933 " (((DATABASE.dupmethod & 0x04) = 0) OR (program.description <> '' " 1879 1934 " AND program.description = oldrecorded.description)) " 1880 1935 " ) " 1881 1936 " ) " 1882 1937 " ) " 1883 1938 " LEFT JOIN recorded ON " 1884 1939 " ( " 1885 " record.dupmethod > 1 AND "1940 " DATABASE.dupmethod > 1 AND " 1886 1941 " program.title = recorded.title " 1887 1942 " AND " 1888 1943 " ( " … … 1896 1951 " ( " 1897 1952 " (program.programid = '' OR recorded.programid = '') " 1898 1953 " AND " 1899 " ((( record.dupmethod & 0x02) = 0) OR (program.subtitle <> '' "1954 " (((DATABASE.dupmethod & 0x02) = 0) OR (program.subtitle <> '' " 1900 1955 " AND program.subtitle = recorded.subtitle)) " 1901 1956 " AND " 1902 " ((( record.dupmethod & 0x04) = 0) OR (program.description <> '' "1957 " (((DATABASE.dupmethod & 0x04) = 0) OR (program.description <> '' " 1903 1958 " AND program.description = recorded.description)) " 1904 1959 " ) " 1905 1960 " ) " … … 1907 1962 " LEFT JOIN oldfind ON " 1908 1963 " (oldfind.recordid = recordmatch.recordid AND " 1909 1964 " oldfind.findid = ") + progfindid + QString(") " 1910 " ORDER BY record.recordid DESC "1965 " ORDER BY DATABASE.recordid DESC " 1911 1966 ); 1912 1967 1968 while (1) 1969 { 1970 int i = query.find("DATABASE"); 1971 if (i == -1) break; 1972 query = query.replace(i, strlen("DATABASE"), recordTable); 1973 } 1974 1913 1975 VERBOSE(VB_SCHEDULE, QString(" |-- Start DB Query...")); 1914 1976 1915 1977 gettimeofday(&dbstart, NULL); 1916 MSqlQuery result( MSqlQuery::SchedCon());1978 MSqlQuery result(dbConn); 1917 1979 result.prepare(query); 1918 1980 result.exec(); 1919 1981 gettimeofday(&dbend, NULL); … … 1976 2038 p->year = result.value(30).toString(); 1977 2039 p->stars = result.value(31).toDouble(); 1978 2040 2041 1979 2042 if (result.value(32).isNull()) 1980 2043 { 1981 2044 p->originalAirDate = p->startts.date(); … … 2081 2144 RecList tmpList; 2082 2145 2083 2146 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, "2147 "SELECT DATABASE.recordid, DATABASE.type, DATABASE.chanid, " 2148 "DATABASE.starttime, DATABASE.startdate, DATABASE.endtime, DATABASE.enddate, " 2149 "DATABASE.startoffset, DATABASE.endoffset, " 2150 "DATABASE.title, DATABASE.subtitle, DATABASE.description, " 2088 2151 "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 "2152 "FROM DATABASE " 2153 " INNER JOIN channel ON (channel.chanid = DATABASE.chanid) " 2154 " LEFT JOIN recordmatch on DATABASE.recordid = recordmatch.recordid " 2092 2155 "WHERE (type = %1 OR type = %2) AND recordmatch.chanid IS NULL") 2093 2156 .arg(kSingleRecord) 2094 2157 .arg(kOverrideRecord); 2095 2158 2159 while (1) 2160 { 2161 int i = query.find("DATABASE"); 2162 if (i == -1) break; 2163 query = query.replace(i, strlen("DATABASE"), recordTable); 2164 } 2165 2096 2166 VERBOSE(VB_SCHEDULE, QString(" |-- Start DB Query...")); 2097 2167 2098 2168 gettimeofday(&dbstart, NULL); 2099 MSqlQuery result( MSqlQuery::SchedCon());2169 MSqlQuery result(dbConn); 2100 2170 result.prepare(query); 2101 2171 result.exec(); 2102 2172 gettimeofday(&dbend, NULL); … … 2166 2236 void Scheduler::findAllScheduledPrograms(list<ProgramInfo *> &proglist) 2167 2237 { 2168 2238 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 "2239 QString query = QString("SELECT DATABASE.chanid, DATABASE.starttime, " 2240 "DATABASE.startdate, DATABASE.endtime, DATABASE.enddate, DATABASE.title, " 2241 "DATABASE.subtitle, DATABASE.description, DATABASE.recpriority, DATABASE.type, " 2242 "channel.name, DATABASE.recordid, DATABASE.recgroup, DATABASE.dupin, " 2243 "DATABASE.dupmethod, channel.commfree, channel.channum, DATABASE.station, " 2244 "DATABASE.seriesid, DATABASE.programid, DATABASE.category, DATABASE.findid, " 2245 "DATABASE.tsdefault " 2246 "FROM DATABASE " 2247 "LEFT JOIN channel ON channel.callsign = DATABASE.station " 2178 2248 "GROUP BY recordid " 2179 2249 "ORDER BY title ASC;"); 2180 2250 2251 while (1) 2252 { 2253 int i = query.find("DATABASE"); 2254 if (i == -1) break; 2255 query = query.replace(i, strlen("DATABASE"), recordTable); 2256 } 2257 2181 2258 MSqlQuery result(MSqlQuery::InitCon()); 2182 2259 result.prepare(query); 2183 2260 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 table = "", int recordid=-1); 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 recordTbl = "record", MSqlQueryInfo *dbConnUse = NULL); 26 26 ~Scheduler(); 27 27 28 28 void Reschedule(int recordid); 29 void FillRecordListFromDB(void); 29 /// @param[in] recordID changed from master (-1 == everything changed) 30 void FillRecordListFromDB(int recordid = -1); 30 31 void FillRecordListFromMaster(void); 31 32 32 33 void FillEncoderFreeSpaceCache(void); … … 61 62 static void *SchedulerThread(void *param); 62 63 63 64 private: 65 QString recordTable; 66 64 67 void verifyCards(void); 65 68 66 69 bool FillRecordList(void); … … 117 120 MainServer *m_mainServer; 118 121 119 122 bool m_isShuttingDown; 123 MSqlQueryInfo dbConn; 120 124 121 125 }; 122 126