Ticket #602: viewscheddiff3.patch

File viewscheddiff3.patch, 49.4 KB (added by anonymous, 18 years ago)

UI support for all themes, fixed blocking query error that occurred on new system

  • themes/G.A.N.T./ui.xml

     
    550550
    551551  </window>
    552552
     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
    553749  <window name="recprioritychannels">
    554750
    555751    <font name="active_font" face="Arial">
  • themes/blue/ui.xml

     
    365365
    366366  </window>
    367367
     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
    368476  <window name="recprioritychannels">
    369477
    370478    <container name="background">
  • libs/libmythtv/channeleditor.cpp

     
    190190    };
    191191
    192192    void save() {};
     193    void save(QString) {};
    193194    void load()
    194195    {
    195196        MSqlQuery query(MSqlQuery::InitCon());
  • libs/libmythtv/scheduledrecording.h

     
    9191
    9292   
    9393    virtual void save();
     94    virtual void save(QString);
    9495
    9596    virtual void loadByID(int id);
    9697    virtual void loadByProgram(const ProgramInfo* proginfo);
     
    168169
    169170public slots:
    170171    void runProgList();
     172    void testRecording();
    171173
    172174protected slots:
    173175    void runShowDetails();
     
    253255    virtual int exec();
    254256    virtual void load();
    255257    virtual void save() { };
     258    virtual void save(QString) { };
    256259
    257260protected slots:
    258261    void open(int id);
  • libs/libmythtv/recordingprofile.h

     
    113113    virtual int exec();
    114114    virtual void load();
    115115    virtual void save() { };
     116    virtual void save(QString) { };
    116117
    117118protected slots:
    118119    void open(int id);
  • libs/libmythtv/dvbtransporteditor.h

     
    8787    DVBTransportList() {}
    8888
    8989    void save() { };
     90    void save(QString) { };
    9091    void load()
    9192    {
    9293        fillSelections();
  • libs/libmythtv/dvbtransporteditor.cpp

     
    6969    };
    7070
    7171    void save() { };
     72    void save(QString) { };
    7273    void load()
    7374    {
    7475        MSqlQuery query(MSqlQuery::InitCon());
  • libs/libmythtv/videosource.h

     
    167167    XMLTV_generic_config(const VideoSource& _parent, QString _grabber);
    168168
    169169    virtual void save();
     170    virtual void save(QString) { save(); }
    170171
    171172protected:
    172173    const VideoSource& parent;
     
    178179public:
    179180    EITOnly_config(const VideoSource& _parent);
    180181    virtual void save();
     182    virtual void save(QString) { save(); }
     183
    181184protected:
    182185    UseEIT *useeit;
    183186};
     
    205208        if (name)
    206209            ConfigurationWizard::save();
    207210    };
     211    virtual void save(QString destination) {
     212        if (name)
     213            ConfigurationWizard::save(destination);
     214    };
    208215
    209216private:
    210217    class ID: virtual public IntegerSetting,
     
    281288        settingValue = "";
    282289        SimpleDBStorage::save();
    283290    };
     291    void save(QString destination) {
     292        changed = true;
     293        settingValue = "";
     294        SimpleDBStorage::save(destination);
     295    };
    284296};
    285297
    286298class DVBVbiDevice: public LineEditSetting, public CCSetting {
     
    295307        settingValue = "";
    296308        SimpleDBStorage::save();
    297309    };
     310    void save(QString destination) {
     311        changed = true;
     312        settingValue = "";
     313        SimpleDBStorage::save(destination);
     314    };
    298315};
    299316
    300317class DVBDiseqcInputList
     
    439456    virtual int exec();
    440457    virtual void load();
    441458    virtual void save() { };
     459    virtual void save(QString) { };
    442460
    443461public slots:
    444462    void menu();
     
    464482    virtual int exec();
    465483    virtual void load();
    466484    virtual void save() { };
     485    virtual void save(QString) { };
    467486
    468487public slots:
    469488    void menu();
     
    483502    virtual int exec();
    484503    virtual void load();
    485504    virtual void save() { };
     505    virtual void save(QString) { };
    486506
    487507protected:
    488508    vector<CardInput*> cardinputs;
     
    530550    void fillDiseqcSettingsInput(QString _pos, QString _port);
    531551
    532552    virtual void save();
     553    virtual void save(QString destination) { save(); }
    533554
    534555  public slots:
    535556    void channelScanner();
  • libs/libmythtv/libmythtv.pro

     
    9393HEADERS += sr_items.h               scheduledrecording.h
    9494HEADERS += signalmonitorvalue.h
    9595HEADERS += mpeg/iso639.h
     96HEADERS += viewschdiff.h
    9697HEADERS += livetvchain.h
    9798
    9899SOURCES += programinfo.cpp          proglist.cpp
     
    106107SOURCES += sr_items.cpp             scheduledrecording.cpp
    107108SOURCES += signalmonitorvalue.cpp
    108109SOURCES += mpeg/iso639.cpp
     110SOURCES += viewschdiff.cpp
    109111SOURCES += livetvchain.cpp
    110112
    111113using_frontend {
  • libs/libmythtv/scanwizardhelpers.h

     
    120120        { setLabel(QObject::tr("Video Source")); }
    121121    virtual void load();
    122122    virtual void save() {}
     123    virtual void save(QString) {}
    123124  private:
    124125    int sourceid;
    125126};
     
    135136        { setLabel(QObject::tr("Transport")); }
    136137    virtual void load() { refresh(); }
    137138    virtual void save() { ; }
     139    virtual void save(QString) { ; }
    138140
    139141    void refresh();
    140142  public slots:
     
    165167        { setLabel(QObject::tr("Capture Card")); }
    166168    virtual void load() { refresh(); }
    167169    virtual void save() { ; }
     170    virtual void save(QString) { ; }
    168171    void refresh();
    169172
    170173  public slots:
  • libs/libmythtv/programinfo.h

     
    320320        return at(index);
    321321    };
    322322
    323     bool FromScheduler(bool &hasConflicts);
     323    bool FromScheduler(bool &hasConflicts, QString database = "");
    324324    bool FromScheduler(void) {
    325325        bool dummyConflicts;
    326326        return FromScheduler(dummyConflicts);
  • libs/libmythtv/programinfo.cpp

     
    34783478 *                                                                           *
    34793479 * ************************************************************************* */
    34803480
    3481 bool ProgramList::FromScheduler(bool &hasConflicts)
     3481bool ProgramList::FromScheduler(bool &hasConflicts, QString database)
    34823482{
    34833483    clear();
    34843484    hasConflicts = false;
    34853485
    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
    34873496    if (!gContext->SendReceiveStringList(slist) || slist.size() < 2)
    34883497    {
    34893498        VERBOSE(VB_IMPORTANT,
  • libs/libmythtv/sr_root.h

     
    2727         DialogDoneListItem* cancelItem;
    2828         DialogDoneListItem* recordAsShownItem;
    2929         ManagedListItem* upcomingButton;         
     30         ManagedListItem* testButton;         
    3031         ManagedListItem* detailsButton;
    3132
    3233         class SRSchedOptionsGroup* schedOptions;
  • libs/libmythtv/scheduledrecording.cpp

     
    88#include "sr_dialog.h"
    99#include "jobqueue.h"
    1010#include "mythdbcon.h"
     11#include "viewschdiff.h"
    1112
    1213#include <qlayout.h>
    1314#include <qlabel.h>
     
    435436    signalChange(getRecordID());
    436437}
    437438
     439void 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
    438452void ScheduledRecording::remove()
    439453{
    440454    int rid = getRecordID();
     
    813827    recgroup->setChanged();
    814828}
    815829
     830void
     831ScheduledRecording::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
    816910/* vim: set expandtab tabstop=4 shiftwidth=4: */
  • libs/libmythtv/sr_root.cpp

     
    1010    cancelItem->setState(MLS_BOLD);
    1111    addItem(cancelItem);
    1212
    13 
    1413    recType = new SRRecordingType(schedRec, _parentList, this);
    1514    addItem(recType->getItem(), -1);
    1615    connect(recType->getItem(), SIGNAL(changed(ManagedListItem*)), this, SLOT(itemChanged(ManagedListItem*)));
     
    3433    addItem(upcomingButton, -1);
    3534    connect(upcomingButton, SIGNAL(selected(ManagedListItem*)), _rec, SLOT(runProgList()));
    3635
     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
    3741    recordAsShownItem = new DialogDoneListItem(QString("[ %1 ]").arg(QObject::tr("Save these settings")),
    3842                                               MythDialog::Accepted, NULL, _parentList, this, "recordAsShown");
    3943    recordAsShownItem->setState(MLS_BOLD);
  • libs/libmythtv/channelsettings.h

     
    2626    };
    2727
    2828    void load() { };
    29     void save()
     29    void save(QString table)
    3030    {
    3131        if (intValue() == 0) {
    3232            setValue(findHighest());
     
    5353            if (query.numRowsAffected() != 1)
    5454                cerr << "ChannelID:Failed to insert into: " << table << endl;
    5555        }
    56     };
     56    }
     57    void save()
     58    {
     59        save(table);
     60    }
    5761
    5862    int findHighest(int floor = 1000)
    5963    {
  • libs/libmythtv/profilegroup.h

     
    114114    virtual int exec();
    115115    virtual void load();
    116116    virtual void save() {};
     117    virtual void save(QString) {};
    117118
    118119protected slots:
    119120    void open(int id);
  • libs/libmythtv/channeleditor.h

     
    5757    };
    5858
    5959    void save() {};
     60    void save(QString) {};
    6061    void load() {
    6162        fillSelections();
    6263    };
  • libs/libmyth/settings.cpp

     
    109109        (*i)->save();
    110110}
    111111
     112void ConfigurationGroup::save(QString destination) {
     113    for(childList::iterator i = children.begin() ;
     114        i != children.end() ;
     115        ++i )
     116        (*i)->save(destination);
     117}
     118
    112119QWidget* VerticalConfigurationGroup::configWidget(ConfigurationGroup *cg,
    113120                                                  QWidget* parent,
    114121                                                  const char* widgetName)
     
    350357        children[top]->save();
    351358}
    352359
     360void StackedConfigurationGroup::save(QString destination) {
     361    if (saveAll)
     362        ConfigurationGroup::save(destination);
     363    else if (top < children.size())
     364        children[top]->save(destination);
     365}
     366
    353367void TriggeredConfigurationGroup::setTrigger(Configurable* _trigger) {
    354368    trigger = _trigger;
    355369    // Make sure the stack is after the trigger
     
    981995    }
    982996}
    983997
    984 void SimpleDBStorage::save()
     998void SimpleDBStorage::save(QString table)
    985999{
    9861000    if (!isChanged())
    9871001        return;
     
    10111025    }
    10121026}
    10131027
    1014 void AutoIncrementStorage::save() {
     1028void SimpleDBStorage::save()
     1029{
     1030    save(table);
     1031}
     1032
     1033void AutoIncrementStorage::save(QString table) {
    10151034    if (intValue() == 0)
    10161035    {
    10171036        // Generate a new, unique ID
     
    10381057    }
    10391058}
    10401059
     1060void AutoIncrementStorage::save()
     1061{
     1062    save(table);
     1063}
     1064
    10411065void ListBoxSetting::setEnabled(bool b)
    10421066{
    10431067    Configurable::setEnabled(b);
  • libs/libmyth/langsettings.cpp

     
    2525        gContext->SaveSetting("Language", getValue());
    2626        LanguageSettings::reload();
    2727    };
     28    virtual void save(QString destination) { }
    2829};
    2930
    3031
  • libs/libmyth/settings.h

     
    3030
    3131    virtual void load() = 0;
    3232    virtual void save() = 0;
     33    virtual void save(QString destination) = 0;
    3334
    3435    // A name for looking up the setting
    3536    void setName(QString str) {
     
    123124    virtual void load();
    124125
    125126    virtual void save();
     127    virtual void save(QString destination);
    126128
    127129    void setUseLabel(bool useit) { uselabel = useit; }
    128130    void setUseFrame(bool useit) { useframe = useit; }
     
    183185
    184186    void raise(Configurable* child);
    185187    virtual void save();
     188    virtual void save(QString destination);
    186189
    187190    // save all children, or only the top?
    188191    void setSaveAll(bool b) { saveAll = b; };
     
    597600
    598601    virtual void load() = 0;
    599602    virtual void save() = 0;
     603    virtual void save(QString destination) = 0;
    600604
    601605protected:
    602606    QString getColumn(void) const { return column; };
     
    615619
    616620    virtual void load();
    617621    virtual void save();
     622    virtual void save(QString destination);
    618623
    619624protected:
    620625
     
    628633public:
    629634    virtual void load() {  }
    630635    virtual void save() {  }
     636    virtual void save(QString) {  }
    631637};
    632638
    633639class AutoIncrementStorage: virtual public IntegerSetting, public DBStorage {
     
    639645
    640646    virtual void load() { };
    641647    virtual void save();
     648    virtual void save(QString destination);
    642649};
    643650
    644651class ButtonSetting: virtual public Setting {
  • libs/libmyth/managedlist.cpp

     
    682682        int newIndex = curGroup->getCurIndex();
    683683        int itemCount = curGroup->getItemCount();
    684684
    685         newIndex += (page ? itemCount : 1);
     685        newIndex += (page ? listSize : 1);
    686686
    687687        if (newIndex >= itemCount)
    688688            newIndex = (page ? itemCount - 1 : newIndex - itemCount);
     
    707707        int newIndex = curGroup->getCurIndex();
    708708        int itemCount = curGroup->getItemCount();
    709709
    710         newIndex -= (page ? itemCount : 1);
     710        newIndex -= (page ? listSize : 1);
    711711        if (newIndex < 0)
    712712            newIndex = (page ? 0 : itemCount + newIndex);
    713713
  • programs/mythfrontend/main.cpp

     
    2323#include "previousbox.h"
    2424#include "customrecord.h"
    2525#include "viewscheduled.h"
     26#include "viewschdiff.h"
    2627#include "programrecpriority.h"
    2728#include "channelrecpriority.h"
    2829#include "globalsettings.h"
  • programs/mythbackend/mainserver.cpp

     
    379379    }
    380380    else if (command == "QUERY_GETALLPENDING")
    381381    {
    382         HandleGetPendingRecordings(pbs);
     382        if (tokens.size() == 1)
     383            HandleGetPendingRecordings(pbs);
     384        else
     385            HandleGetPendingRecordings(pbs, tokens[1]);
    383386    }
    384387    else if (command == "QUERY_GETALLSCHEDULED")
    385388    {
     
    19371940    SendResponse(pbssock, strlist);
    19381941}
    19391942
    1940 void MainServer::HandleGetPendingRecordings(PlaybackSock *pbs)
     1943void MainServer::HandleGetPendingRecordings(PlaybackSock *pbs, QString database)
    19411944{
    19421945    QSocket *pbssock = pbs->getSocket();
    19431946
    19441947    QStringList strList;
    19451948
    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    }
    19481961    else
    19491962    {
    19501963        strList << QString::number(0);
  • programs/mythbackend/scheduler.cpp

     
    3131#include "libmythtv/programinfo.h"
    3232#include "libmythtv/scheduledrecording.h"
    3333
    34 Scheduler::Scheduler(bool runthread, QMap<int, EncoderLink *> *tvList)
     34Scheduler::Scheduler(bool runthread, QMap<int, EncoderLink *> *tvList, QString recordDB, MSqlQueryInfo *databaseConnection)
    3535{
    3636    hasconflicts = false;
    3737    m_tvList = tvList;
    3838
     39    if (databaseConnection) dbConn = *databaseConnection;
     40    else dbConn = MSqlQuery::SchedCon();
     41
     42    recordDatabase = recordDB;
     43
    3944    m_mainServer = NULL;
    4045
    4146    m_isShuttingDown = false;
     
    7782{
    7883    QString thequery;
    7984
    80     MSqlQuery query(MSqlQuery::SchedCon());
     85    MSqlQuery query(dbConn);
    8186    query.prepare("SELECT NULL FROM capturecard;");
    8287
    8388    int numcards = -1;
     
    103108        while (query.next())
    104109        {
    105110            source = query.value(0).toInt();
    106             MSqlQuery subquery(MSqlQuery::SchedCon());
     111            MSqlQuery subquery(dbConn);
    107112
    108113            subquery.prepare("SELECT cardinputid FROM cardinput WHERE "
    109114                             "sourceid = :SOURCEID ORDER BY cardinputid;");
     
    277282
    278283void Scheduler::FillRecordListFromDB(void)
    279284{
    280     MSqlQuery query(MSqlQuery::SchedCon());
     285    MSqlQuery query(dbConn);
    281286    query.prepare("CREATE TEMPORARY TABLE recordmatch "
    282287                  "(recordid int unsigned, chanid int unsigned, "
    283288                  " starttime datetime, manualid int unsigned, "
     
    291296
    292297    UpdateMatches(-1);
    293298    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
    294309}
    295310
    296311void Scheduler::FillRecordListFromMaster(void)
     
    980995
    981996    // Mark anything that was recording as aborted.  We'll fix it up.
    982997    // if possible, after the slaves connect and we start scheduling.
    983     MSqlQuery query(MSqlQuery::SchedCon());
     998    MSqlQuery query(dbConn);
    984999    query.prepare("UPDATE oldrecorded SET recstatus = :RSABORTED "
    9851000                  "  WHERE recstatus = :RSRECORDING");
    9861001    query.bindValue(":RSABORTED", rsAborted);
     
    14251440
    14261441void Scheduler::UpdateManuals(int recordid)
    14271442{
    1428     MSqlQuery query(MSqlQuery::SchedCon());
     1443    MSqlQuery query(dbConn);
    14291444
    1430     query.prepare("SELECT type,title,station,startdate,starttime, "
     1445    query.prepare(QString("SELECT type,title,station,startdate,starttime, "
    14311446                  " enddate,endtime "
    1432                   "FROM record WHERE recordid = :RECORDID");
     1447                  "FROM %1 WHERE recordid = :RECORDID").arg(recordDatabase));
    14331448    query.bindValue(":RECORDID", recordid);
    14341449    query.exec();
    14351450    if (!query.isActive() || query.size() != 1)
     
    15291544                                       QStringList &where,
    15301545                                       MSqlBindings &bindings)
    15311546{
    1532     MSqlQuery result(MSqlQuery::SchedCon());
     1547    MSqlQuery result(dbConn);
    15331548    QString query;
    15341549    QString qphrase;
    15351550
    15361551    query = QString("SELECT recordid,search,subtitle,description "
    1537                     "FROM record WHERE search <> %1 AND "
    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);
    15401555
    15411556    result.prepare(query);
    15421557
     
    15741589        case kPowerSearch:
    15751590            qphrase.remove(QRegExp("^\\s*AND\\s+", false));
    15761591            from << result.value(2).toString();
    1577             where << (QString("record.recordid = ") + bindrecid +
     1592            where << (QString("%1.recordid = ").arg(recordDatabase) + bindrecid +
    15781593                      QString(" AND program.manualid = 0 AND ( %2 )")
    15791594                      .arg(qphrase));
    15801595            break;
    15811596        case kTitleSearch:
    15821597            from << "";
    1583             where << (QString("record.recordid = ") + bindrecid + " AND "
     1598            where << (QString("%1.recordid = ").arg(recordDatabase) + bindrecid + " AND "
    15841599                      "program.manualid = 0 AND "
    15851600                      "program.title LIKE " + bindlikephrase);
    15861601            break;
    15871602        case kKeywordSearch:
    15881603            from << "";
    1589             where << (QString("record.recordid = ") + bindrecid +
     1604            where << (QString("%1.recordid = ").arg(recordDatabase) + bindrecid +
    15901605                      " AND program.manualid = 0"
    15911606                      " AND (program.title LIKE " + bindlikephrase +
    15921607                      " OR program.subtitle LIKE " + bindlikephrase +
     
    15941609            break;
    15951610        case kPeopleSearch:
    15961611            from << ", people, credits";
    1597             where << (QString("record.recordid = ") + bindrecid + " AND "
     1612            where << (QString("%1.recordid = ").arg(recordDatabase) + bindrecid + " AND "
    15981613                      "program.manualid = 0 AND "
    15991614                      "people.name LIKE " + bindphrase + " AND "
    16001615                      "credits.person = people.person AND "
     
    16041619        case kManualSearch:
    16051620            UpdateManuals(result.value(0).toInt());
    16061621            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));
    16091624            break;
    16101625        default:
    16111626            VERBOSE(VB_IMPORTANT, QString("Unknown RecSearchType "
     
    16211636    if (recordid == -1 || from.count() == 0)
    16221637    {
    16231638        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 "
    16261641                 "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;
    16281652        bindings[":NRST"] = kNoSearch;
    16291653        bindings[":NRRECORDID"] = recordid;
    16301654    }
     
    16331657void Scheduler::UpdateMatches(int recordid) {
    16341658    struct timeval dbstart, dbend;
    16351659
    1636     MSqlQuery query(MSqlQuery::SchedCon());
     1660    MSqlQuery query(dbConn);
    16371661    query.prepare("DELETE FROM recordmatch "
    16381662                  "WHERE recordid = :RECORDID OR :RECORDID = -1;");
    16391663
     
    16731697    {
    16741698        QString query = QString(
    16751699"INSERT INTO recordmatch (recordid, chanid, starttime, manualid) "
    1676 "SELECT record.recordid, program.chanid, program.starttime, "
     1700"SELECT DATABASE.recordid, program.chanid, program.starttime, "
    16771701" IF(search = %1, recordid, 0) "
    1678 "FROM record, program ").arg(kManualSearch) + fromclauses[clause] + QString(
     1702"FROM DATABASE, program ").arg(kManualSearch) + fromclauses[clause] + QString(
    16791703" INNER JOIN channel ON (channel.chanid = program.chanid) "
    16801704"WHERE ") + whereclauses[clause] + QString(" AND channel.visible = 1 AND "
    1681 "((record.type = %1 " // allrecord
    1682 "OR record.type = %2 " // findonerecord
    1683 "OR record.type = %3 " // finddailyrecord
    1684 "OR record.type = %4) " // findweeklyrecord
     1705"((DATABASE.type = %1 " // allrecord
     1706"OR DATABASE.type = %2 " // findonerecord
     1707"OR DATABASE.type = %3 " // finddailyrecord
     1708"OR DATABASE.type = %4) " // findweeklyrecord
    16851709" OR "
    1686 " ((record.station = channel.callsign) " // channel matches
     1710" ((DATABASE.station = channel.callsign) " // channel matches
    16871711"  AND "
    1688 "  ((record.type = %5) " // channelrecord
     1712"  ((DATABASE.type = %5) " // channelrecord
    16891713"   OR"
    1690 "   ((TIME_TO_SEC(record.starttime) = TIME_TO_SEC(program.starttime)) " // timeslot matches
     1714"   ((TIME_TO_SEC(DATABASE.starttime) = TIME_TO_SEC(program.starttime)) " // timeslot matches
    16911715"    AND "
    1692 "    ((record.type = %6) " // timeslotrecord
     1716"    ((DATABASE.type = %6) " // timeslotrecord
    16931717"     OR"
    1694 "     ((DAYOFWEEK(record.startdate) = DAYOFWEEK(program.starttime) "
     1718"     ((DAYOFWEEK(DATABASE.startdate) = DAYOFWEEK(program.starttime) "
    16951719"      AND "
    1696 "      ((record.type = %7) " // weekslotrecord
     1720"      ((DATABASE.type = %7) " // weekslotrecord
    16971721"       OR"
    1698 "       ((TO_DAYS(record.startdate) = TO_DAYS(program.starttime)) " // date matches
     1722"       ((TO_DAYS(DATABASE.startdate) = TO_DAYS(program.starttime)) " // date matches
    16991723"        )"
    17001724"       )"
    17011725"      )"
     
    17131737            .arg(kTimeslotRecord)
    17141738            .arg(kWeekslotRecord);
    17151739
     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
    17161747        VERBOSE(VB_SCHEDULE, QString(" |-- Start DB Query %1...").arg(clause));
    17171748
    17181749        gettimeofday(&dbstart, NULL);
    1719         MSqlQuery result(MSqlQuery::SchedCon());
     1750        MSqlQuery result(dbConn);
    17201751        result.prepare(query);
    17211752        result.bindValues(bindings);
    17221753        result.exec();
     
    17571788    QMap<int, bool> tooManyMap;
    17581789    bool checkTooMany = false;
    17591790
    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));
    17621793
    17631794    rlist.exec();
    17641795
     
    17791810
    17801811        if (maxEpisodes && !maxNewest)
    17811812        {
    1782             MSqlQuery epicnt(MSqlQuery::SchedCon());
     1813            MSqlQuery epicnt(dbConn);
    17831814
    17841815            epicnt.prepare("SELECT count(*) FROM recorded "
    17851816                           "WHERE title = :TITLE;");
     
    18011832    }
    18021833
    18031834    QString progfindid = QString(
    1804 "(CASE record.type "
     1835"(CASE DATABASE.type "
    18051836"  WHEN %1 "
    1806 "   THEN record.findid "
     1837"   THEN DATABASE.findid "
    18071838"  WHEN %2 "
    18081839"   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)) "
    18101841"  WHEN %3 "
    18111842"   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 "
    18141845"  WHEN %4 "
    1815 "   THEN record.findid "
     1846"   THEN DATABASE.findid "
    18161847"  ELSE 0 "
    18171848" END) ")
    18181849        .arg(kFindOneRecord)
     
    18261857"program.title, program.subtitle, program.description, "
    18271858"channel.channum, channel.callsign, channel.name, "
    18281859"oldrecorded.endtime IS NOT NULL AS oldrecduplicate, program.category, "
    1829 "record.recpriority, "
    1830 "record.dupin, "
     1860"DATABASE.recpriority, "
     1861"DATABASE.dupin, "
    18311862"recorded.endtime IS NOT NULL AND recorded.endtime < NOW() AS recduplicate, "
    18321863"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, "
    18371868"channel.commfree, capturecard.cardid, "
    18381869"cardinput.cardinputid, UPPER(cardinput.shareable) = 'Y' AS shareable, "
    18391870"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, "
    18421873"oldrecstatus.recstatus, oldrecstatus.reactivate, "
    18431874"channel.recpriority + cardinput.preference "
    18441875+ QString(
    18451876"FROM recordmatch "
    18461877
    1847 " INNER JOIN record ON (recordmatch.recordid = record.recordid) "
     1878" INNER JOIN DATABASE ON (recordmatch.recordid = DATABASE.recordid) "
    18481879" INNER JOIN program ON (recordmatch.chanid = program.chanid AND "
    18491880"                        recordmatch.starttime = program.starttime AND "
    18501881"                        recordmatch.manualid = program.manualid) "
     
    18571888"    oldrecstatus.title = program.title ) "
    18581889" LEFT JOIN oldrecorded ON "
    18591890"  ( "
    1860 "    record.dupmethod > 1 AND "
     1891"    DATABASE.dupmethod > 1 AND "
    18611892"    oldrecorded.duplicate <> 0 AND "
    18621893"    program.title = oldrecorded.title "
    18631894"     AND "
     
    18721903"      ( "
    18731904"       (program.programid = '' OR oldrecorded.programid = '') "
    18741905"       AND "
    1875 "       (((record.dupmethod & 0x02) = 0) OR (program.subtitle <> '' "
     1906"       (((DATABASE.dupmethod & 0x02) = 0) OR (program.subtitle <> '' "
    18761907"          AND program.subtitle = oldrecorded.subtitle)) "
    18771908"       AND "
    1878 "       (((record.dupmethod & 0x04) = 0) OR (program.description <> '' "
     1909"       (((DATABASE.dupmethod & 0x04) = 0) OR (program.description <> '' "
    18791910"          AND program.description = oldrecorded.description)) "
    18801911"      ) "
    18811912"     ) "
    18821913"  ) "
    18831914" LEFT JOIN recorded ON "
    18841915"  ( "
    1885 "    record.dupmethod > 1 AND "
     1916"    DATABASE.dupmethod > 1 AND "
    18861917"    program.title = recorded.title "
    18871918"     AND "
    18881919"     ( "
     
    18961927"      ( "
    18971928"       (program.programid = '' OR recorded.programid = '') "
    18981929"       AND "
    1899 "       (((record.dupmethod & 0x02) = 0) OR (program.subtitle <> '' "
     1930"       (((DATABASE.dupmethod & 0x02) = 0) OR (program.subtitle <> '' "
    19001931"          AND program.subtitle = recorded.subtitle)) "
    19011932"       AND "
    1902 "       (((record.dupmethod & 0x04) = 0) OR (program.description <> '' "
     1933"       (((DATABASE.dupmethod & 0x04) = 0) OR (program.description <> '' "
    19031934"          AND program.description = recorded.description)) "
    19041935"      ) "
    19051936"     ) "
     
    19071938" LEFT JOIN oldfind ON "
    19081939"  (oldfind.recordid = recordmatch.recordid AND "
    19091940"   oldfind.findid = ") + progfindid + QString(") "
    1910 " ORDER BY record.recordid DESC "
     1941" ORDER BY DATABASE.recordid DESC "
    19111942);
    19121943
     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
    19131951    VERBOSE(VB_SCHEDULE, QString(" |-- Start DB Query..."));
    19141952
    19151953    gettimeofday(&dbstart, NULL);
    1916     MSqlQuery result(MSqlQuery::SchedCon());
     1954    MSqlQuery result(dbConn);
    19171955    result.prepare(query);
    19181956    result.exec();
    19191957    gettimeofday(&dbend, NULL);
     
    19762014        p->year = result.value(30).toString();
    19772015        p->stars =  result.value(31).toDouble();
    19782016
     2017
    19792018        if (result.value(32).isNull())
    19802019        {
    19812020            p->originalAirDate = p->startts.date();
     
    20812120    RecList tmpList;
    20822121
    20832122    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, "
    20882127"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 "
    20922131"WHERE (type = %1 OR type = %2) AND recordmatch.chanid IS NULL")
    20932132        .arg(kSingleRecord)
    20942133        .arg(kOverrideRecord);
    20952134
     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
    20962142    VERBOSE(VB_SCHEDULE, QString(" |-- Start DB Query..."));
    20972143
    20982144    gettimeofday(&dbstart, NULL);
    2099     MSqlQuery result(MSqlQuery::SchedCon());
     2145    MSqlQuery result(dbConn);
    21002146    result.prepare(query);
    21012147    result.exec();
    21022148    gettimeofday(&dbend, NULL);
     
    21662212void Scheduler::findAllScheduledPrograms(list<ProgramInfo *> &proglist)
    21672213{
    21682214    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 "
    21782224"GROUP BY recordid "
    21792225"ORDER BY title ASC;");
    21802226
     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
    21812234    MSqlQuery result(MSqlQuery::InitCon());
    21822235    result.prepare(query);
    21832236    result.exec();
  • programs/mythbackend/mainserver.h

     
    8383    void HandleQueryFreeSpace(PlaybackSock *pbs, bool allBackends);
    8484    void HandleQueryCheckFile(QStringList &slist, PlaybackSock *pbs);
    8585    void HandleQueryGuideDataThrough(PlaybackSock *pbs);
    86     void HandleGetPendingRecordings(PlaybackSock *pbs);
     86    void HandleGetPendingRecordings(PlaybackSock *pbs, QString database = "");
    8787    void HandleGetScheduledRecordings(PlaybackSock *pbs);
    8888    void HandleGetConflictingRecordings(QStringList &slist, PlaybackSock *pbs);
    8989    void HandleGetNextFreeRecorder(QStringList &slist, PlaybackSock *pbs);
  • programs/mythbackend/scheduler.h

     
    2222class Scheduler : public QObject
    2323{
    2424  public:
    25     Scheduler(bool runthread, QMap<int, EncoderLink *> *tvList);
     25    Scheduler(bool runthread, QMap<int, EncoderLink *> *tvList, QString recorddb = "record", MSqlQueryInfo *dbConnUse = NULL);
    2626    ~Scheduler();
    2727
    2828    void Reschedule(int recordid);
     
    6161    static void *SchedulerThread(void *param);
    6262
    6363  private:
     64    QString recordDatabase;
     65
    6466    void verifyCards(void);
    6567
    6668    bool FillRecordList(void);
     
    117119    MainServer *m_mainServer;
    118120
    119121    bool m_isShuttingDown;
     122    MSqlQueryInfo dbConn;
    120123
    121124};
    122125