Skip to content

Commit

Permalink
Escape 's and "s in the scheduled recorder's db access.
Browse files Browse the repository at this point in the history
Start working on the live tv -> recording transition.


git-svn-id: http://svn.mythtv.org/svn/trunk@742 7dbf422c-18fa-0310-86e9-fd20926502f2
  • Loading branch information
Isaac Richards committed Jan 9, 2003
1 parent ec89e32 commit 2ee2b4b
Show file tree
Hide file tree
Showing 13 changed files with 209 additions and 153 deletions.
3 changes: 2 additions & 1 deletion mythtv/libs/libmyth/mythcontext.cpp
Expand Up @@ -459,13 +459,14 @@ void MythContext::readSocket(void)
ReadStringList(serverSock, strlist);

QString message = strlist[0];
QString extra = strlist[1];

if (message == "BLAH")
{
}
else
{
MythEvent me(message);
MythEvent me(message, extra);
dispatch(me);
}
}
Expand Down
12 changes: 11 additions & 1 deletion mythtv/libs/libmyth/mythcontext.h
Expand Up @@ -24,13 +24,23 @@ class MythEvent : public QCustomEvent
MythEvent(const QString &lmessage) : QCustomEvent(MythEventMessage)
{
message = lmessage;
extradata = "empty";
}
MythEvent(const QString &lmessage, const QString &lextradata)
: QCustomEvent(MythEventMessage)
{
message = lmessage;
extradata = lextradata;
}

~MythEvent() {}

const QString Message() const { return message; }

const QString ExtraData() const { return extradata; }

private:
QString message;
QString extradata;
};

class MythContext : public QObject
Expand Down
1 change: 1 addition & 0 deletions mythtv/libs/libmythtv/.cvsignore
Expand Up @@ -3,4 +3,5 @@ moc_recordingprofile.cpp
moc_videosource.cpp
moc_guidegrid.cpp
moc_infodialog.cpp
moc_scheduledrecording.cpp
Makefile
5 changes: 4 additions & 1 deletion mythtv/libs/libmythtv/scheduledrecording.cpp
Expand Up @@ -16,7 +16,10 @@ class SRSetting: public SimpleDBStorage {
};

virtual QString setClause(void) {
return QString("recordid = %1, %2 = '%3'")
QString value = getValue();
value.replace(QRegExp("\""), QString("\\\""));

return QString("recordid = %1, %2 = \"%3\"")
.arg(parent.getRecordID())
.arg(getColumn())
.arg(getValue());
Expand Down
10 changes: 0 additions & 10 deletions mythtv/libs/libmythtv/tv.h
@@ -1,16 +1,6 @@
#ifndef TV_H
#define TV_H

#include <qstring.h>
#include <pthread.h>

#include "NuppelVideoRecorder.h"
#include "NuppelVideoPlayer.h"
#include "RingBuffer.h"

#include "channel.h"
#include "programinfo.h"

typedef enum
{
kState_Error = -1,
Expand Down
29 changes: 20 additions & 9 deletions mythtv/libs/libmythtv/tv_play.cpp
Expand Up @@ -142,21 +142,13 @@ TVState TV::LiveTV(void)
return retval;
}

int TV::AllowRecording(ProgramInfo *rcinfo, int timeuntil)
int TV::AllowRecording(const QString &message, int timeuntil)
{
if (internalState != kState_WatchingLiveTV)
{
return 1;
}

QString message = QString("MythTV wants to record \"") + rcinfo->title;
if (m_context->GetNumSetting("DisplayChanNum") == 0)
message += QString("\" on ") + rcinfo->channame + " [" +
rcinfo->chansign + "]";
else
message += "\" on Channel " + rcinfo->chanstr;
message += " in %d seconds. Do you want to:";

QString option1 = "Record and watch while it records";
QString option2 = "Let it record and go back to the Main Menu";
QString option3 = "Don't let it record, I want to watch TV";
Expand Down Expand Up @@ -1418,6 +1410,25 @@ void TV::customEvent(QCustomEvent *e)
changeState = true;
}
}
else if (internalState == kState_WatchingLiveTV &&
message.left(13) == "ASK_RECORDING")
{
message = message.simplifyWhiteSpace();
QStringList tokens = QStringList::split(" ", message);
int cardnum = tokens[1].toInt();
int timeuntil = tokens[2].toInt();

if (cardnum == recorder->GetRecorderNumber())
{
int retval = AllowRecording(me->ExtraData(), timeuntil);

QString resp = QString("ASK_RECORDING_RESPONSE %1 %2")
.arg(cardnum)
.arg(retval);
MythEvent newevent(resp);
m_context->dispatch(newevent);
}
}
}
}

5 changes: 4 additions & 1 deletion mythtv/libs/libmythtv/tv_play.h
Expand Up @@ -4,11 +4,14 @@
#include <qstring.h>
#include <pthread.h>

#include <qobject.h>

#include "NuppelVideoRecorder.h"
#include "NuppelVideoPlayer.h"
#include "RingBuffer.h"

#include "channel.h"
#include "programinfo.h"

class QSqlDatabase;
class QDateTime;
Expand All @@ -26,7 +29,7 @@ class TV : public QObject

TVState LiveTV(void);

int AllowRecording(ProgramInfo *rcinfo, int timeuntil);
int AllowRecording(const QString &message, int timeuntil);

// next two functions only work on recorded programs.
void Playback(ProgramInfo *rcinfo);
Expand Down
14 changes: 14 additions & 0 deletions mythtv/libs/libmythtv/tv_rec.cpp
Expand Up @@ -107,6 +107,20 @@ int TVRec::AllowRecording(ProgramInfo *rcinfo, int timeuntil)
return 1;
}

QString message = QString("MythTV wants to record \"") + rcinfo->title;
if (context->GetNumSetting("DisplayChanNum") == 0)
message += QString("\" on ") + rcinfo->channame + " [" +
rcinfo->chansign + "]";
else
message += "\" on Channel " + rcinfo->chanstr;
message += " in %d seconds. Do you want to:";

QString query = QString("ASK_RECORDING %1 %2").arg(m_capturecardnum)
.arg(timeuntil - 2);

MythEvent me(query, message);
context->dispatch(me);

return -1;
}

Expand Down
1 change: 1 addition & 0 deletions mythtv/libs/libmythtv/tv_rec.h
Expand Up @@ -9,6 +9,7 @@
#include "RingBuffer.h"

#include "channel.h"
#include "programinfo.h"

#include "tv.h"

Expand Down
92 changes: 4 additions & 88 deletions mythtv/programs/mythbackend/main.cpp
Expand Up @@ -16,92 +16,6 @@ using namespace std;
#include "libmyth/mythcontext.h"

QMap<int, EncoderLink *> tvList;
void *runScheduler(void *dummy)
{
dummy = dummy;
//MythContext *context = (MythContext *)dummy;

QSqlDatabase *db = QSqlDatabase::database("SUBDB");

Scheduler *sched = new Scheduler(db);

bool asked = false;
int secsleft;
EncoderLink *nexttv = NULL;

ProgramInfo *nextRecording = NULL;
QDateTime nextrectime;
QDateTime curtime;
QDateTime lastupdate = QDateTime::currentDateTime().addDays(-1);

while (1)
{
curtime = QDateTime::currentDateTime();

if (sched->CheckForChanges() ||
(lastupdate.date().day() != curtime.date().day()))
{
sched->FillRecordLists();
//cout << "Found changes in the todo list.\n";
nextRecording = NULL;
}

if (!nextRecording)
{
lastupdate = curtime;
nextRecording = sched->GetNextRecording();
if (nextRecording)
{
nextrectime = nextRecording->startts;
//cout << "Will record " << nextRecording->title
// << " in " << curtime.secsTo(nextrectime) << "secs.\n";
asked = false;
if (tvList.find(nextRecording->cardid) == tvList.end())
{
cerr << "invalid cardid " << nextRecording->cardid << endl;
exit(0);
}
nexttv = tvList[nextRecording->cardid];
}
}

if (nextRecording)
{
secsleft = curtime.secsTo(nextrectime);

//cout << secsleft << " seconds until " << nextRecording->title
// << endl;

if (nexttv->GetState() == kState_WatchingLiveTV &&
secsleft <= 30 && !asked)
{
asked = true;
int result = nexttv->AllowRecording(nextRecording, secsleft);

if (result == 3)
{
//cout << "Skipping " << nextRecording->title << endl;
sched->RemoveFirstRecording();
nextRecording = NULL;
continue;
}
}

if (secsleft <= -2)
{
nexttv->StartRecording(nextRecording);
//cout << "Started recording " << nextRecording->title << endl;
sched->RemoveFirstRecording();
nextRecording = NULL;
continue;
}
}

sleep(1);
}

return NULL;
}

void setupTVs(MythContext *context)
{
Expand Down Expand Up @@ -161,8 +75,8 @@ int main(int argc, char **argv)

setupTVs(context);

pthread_t scthread;
pthread_create(&scthread, NULL, runScheduler, context);
QSqlDatabase *scdb = QSqlDatabase::database("SUBDB");
Scheduler *sched = new Scheduler(context, &tvList, scdb);

int port = context->GetNumSetting("ServerPort", 6543);
int statusport = context->GetNumSetting("StatusPort", 6544);
Expand All @@ -173,5 +87,7 @@ int main(int argc, char **argv)
a.exec();

delete context;
delete sched;

return 0;
}
5 changes: 3 additions & 2 deletions mythtv/programs/mythbackend/mainserver.cpp
Expand Up @@ -147,6 +147,7 @@ void MainServer::customEvent(QCustomEvent *e)
MythEvent *me = (MythEvent *)e;

broadcast = me->Message();
broadcast << me->ExtraData();
sendstuff = true;
}

Expand Down Expand Up @@ -444,7 +445,7 @@ void MainServer::HandleGetPendingRecordings(PlaybackSock *pbs)
{
m_context->KickDatabase(QSqlDatabase::database());

Scheduler *sched = new Scheduler(QSqlDatabase::database());
Scheduler *sched = new Scheduler(NULL, NULL, QSqlDatabase::database());

bool conflicts = sched->FillRecordLists(false);
list<ProgramInfo *> *recordinglist = sched->getAllPending();
Expand All @@ -469,7 +470,7 @@ void MainServer::HandleGetConflictingRecordings(QStringList &slist,
{
m_context->KickDatabase(QSqlDatabase::database());

Scheduler *sched = new Scheduler(QSqlDatabase::database());
Scheduler *sched = new Scheduler(NULL, NULL, QSqlDatabase::database());

bool removenonplaying = purge.toInt();

Expand Down

0 comments on commit 2ee2b4b

Please sign in to comment.