summaryrefslogtreecommitdiff
path: root/recdone_thread.c
diff options
context:
space:
mode:
Diffstat (limited to 'recdone_thread.c')
-rw-r--r--recdone_thread.c97
1 files changed, 42 insertions, 55 deletions
diff --git a/recdone_thread.c b/recdone_thread.c
index 9e7b38b..6b0e02b 100644
--- a/recdone_thread.c
+++ b/recdone_thread.c
@@ -32,11 +32,12 @@ Or, point your browser to http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
extern int updateForced;
cRecdoneThread::cRecdoneThread()
-: cThread("EPGSearch: recdone")
+ : cThread("EPGSearch: recdone")
{
}
-cRecdoneThread::~cRecdoneThread() {
+cRecdoneThread::~cRecdoneThread()
+{
}
bool cRecdoneThread::IsPesRecording(const cRecording *pRecording)
@@ -47,16 +48,15 @@ bool cRecdoneThread::IsPesRecording(const cRecording *pRecording)
#define LOC_INDEXFILESUFFIX "/index"
struct tIndexTs {
- uint64_t offset:40; // up to 1TB per file (not using off_t here - must definitely be exactly 64 bit!)
- int reserved:7; // reserved for future use
- int independent:1; // marks frames that can be displayed by themselves (for trick modes)
- uint16_t number:16; // up to 64K files per recording
- tIndexTs(off_t Offset, bool Independent, uint16_t Number)
- {
- offset = Offset;
- reserved = 0;
- independent = Independent;
- number = Number;
+ uint64_t offset: 40; // up to 1TB per file (not using off_t here - must definitely be exactly 64 bit!)
+ int reserved: 7; // reserved for future use
+ int independent: 1; // marks frames that can be displayed by themselves (for trick modes)
+ uint16_t number: 16; // up to 64K files per recording
+ tIndexTs(off_t Offset, bool Independent, uint16_t Number) {
+ offset = Offset;
+ reserved = 0;
+ independent = Independent;
+ number = Number;
}
};
@@ -64,47 +64,41 @@ int cRecdoneThread::RecLengthInSecs(const cRecording *pRecording)
{
struct stat buf;
cString fullname = cString::sprintf("%s%s", pRecording->FileName(), IsPesRecording(pRecording) ? LOC_INDEXFILESUFFIX ".vdr" : LOC_INDEXFILESUFFIX);
- if (pRecording->FileName() && *fullname && access(fullname, R_OK) == 0 && stat(fullname, &buf) == 0)
- {
- double frames = buf.st_size ? (buf.st_size - 1) / sizeof(tIndexTs) + 1 : 0;
- double Seconds = 0;
- modf((frames + 0.5) / pRecording->FramesPerSecond(), &Seconds);
- return Seconds;
+ if (pRecording->FileName() && *fullname && access(fullname, R_OK) == 0 && stat(fullname, &buf) == 0) {
+ double frames = buf.st_size ? (buf.st_size - 1) / sizeof(tIndexTs) + 1 : 0;
+ double Seconds = 0;
+ modf((frames + 0.5) / pRecording->FramesPerSecond(), &Seconds);
+ return Seconds;
}
return -1;
}
void cRecdoneThread::Action(void)
{
- LogFile.Log(1,"started recdone_thread");
+ LogFile.Log(1, "started recdone_thread");
cMutexLock RecsDoneLock(&RecsDone);
time_t now = time(NULL);
// remove timers that finished recording from TimersRecording
// incomplete recordings are kept for a while, perhaps they will be resumed
LOCK_TIMERS_READ;
- while (m_fnames.size())
- {
- vector<string>::iterator it=m_fnames.begin();
- const char *m_filename=(*it).c_str();
- LogFile.Log(1,"recdone_thread processing %s",m_filename);
+ while (m_fnames.size()) {
+ vector<string>::iterator it = m_fnames.begin();
+ const char *m_filename = (*it).c_str();
+ LogFile.Log(1, "recdone_thread processing %s", m_filename);
cMutexLock TimersRecordingLock(&TimersRecording);
cRecDoneTimerObj *tiR = TimersRecording.First();
- while(tiR)
- {
+ while (tiR) {
// check if timer still exists
bool found = false;
for (const cTimer *ti = Timers->First(); ti; ti = Timers->Next(ti))
- if (ti == tiR->timer)
- {
+ if (ti == tiR->timer) {
found = true;
break;
}
- if (found && !tiR->timer->Recording())
- {
- if (tiR->recDone)
- {
+ if (found && !tiR->timer->Recording()) {
+ if (tiR->recDone) {
cSearchExt* search = SearchExts.GetSearchFromID(tiR->recDone->searchID);
if (!search) return;
// check if recording has ended before timer end
@@ -115,31 +109,26 @@ void cRecdoneThread::Action(void)
LOCK_RECORDINGS_READ;
pRecording = Recordings->GetByName(m_filename);
}
- long timerLengthSecs = tiR->timer->StopTime()-tiR->timer->StartTime();
+ long timerLengthSecs = tiR->timer->StopTime() - tiR->timer->StartTime();
int recFraction = 100;
- if (pRecording && timerLengthSecs)
- {
+ if (pRecording && timerLengthSecs) {
int recLen = RecLengthInSecs(pRecording);
recFraction = double(recLen) * 100 / timerLengthSecs;
}
bool vpsUsed = tiR->timer->HasFlags(tfVps) && tiR->timer->Event() && tiR->timer->Event()->Vps();
- if ((!vpsUsed && now < tiR->timer->StopTime()) || recFraction < (vpsUsed ? 90: 98)) // assure timer has reached its end or at least 98% were recorded
- {
+ if ((!vpsUsed && now < tiR->timer->StopTime()) || recFraction < (vpsUsed ? 90 : 98)) { // assure timer has reached its end or at least 98% were recorded
complete = false;
- LogFile.Log(1,"finished: '%s' (not complete! - recorded only %d%%); search timer: '%s'; VPS used: %s", tiR->timer->File(), recFraction, search->search, vpsUsed ? "Yes": "No");
- }
- else
- {
- LogFile.Log(1,"finished: '%s'; search timer: '%s'; VPS used: %s", tiR->timer->File(), search->search, vpsUsed ? "Yes": "No");
+ LogFile.Log(1, "finished: '%s' (not complete! - recorded only %d%%); search timer: '%s'; VPS used: %s", tiR->timer->File(), recFraction, search->search, vpsUsed ? "Yes" : "No");
+ } else {
+ LogFile.Log(1, "finished: '%s'; search timer: '%s'; VPS used: %s", tiR->timer->File(), search->search, vpsUsed ? "Yes" : "No");
if (recFraction < 100)
- LogFile.Log(2,"recorded %d%%'", recFraction);
+ LogFile.Log(2, "recorded %d%%'", recFraction);
}
- if (complete)
- {
+ if (complete) {
RecsDone.Add(tiR->recDone);
- LogFile.Log(1,"added rec done for '%s~%s';%s", tiR->recDone->title?tiR->recDone->title:"unknown title",
- tiR->recDone->shortText?tiR->recDone->shortText:"unknown subtitle",
- search->search);
+ LogFile.Log(1, "added rec done for '%s~%s';%s", tiR->recDone->title ? tiR->recDone->title : "unknown title",
+ tiR->recDone->shortText ? tiR->recDone->shortText : "unknown subtitle",
+ search->search);
RecsDone.Save();
tiR->recDone = NULL; // prevent deletion
tiR->lastBreak = 0;
@@ -150,12 +139,11 @@ void cRecdoneThread::Action(void)
// trigger a search timer update (skip running events)
search->skipRunningEvents = true;
updateForced = 1;
- }
- else if (tiR->lastBreak == 0) // store first break
+ } else if (tiR->lastBreak == 0) // store first break
tiR->lastBreak = now;
}
- if (tiR->lastBreak == 0 || (now - tiR->lastBreak) > ALLOWED_BREAK_INSECS)
- { // remove finished recordings or those with an unallowed break
+ if (tiR->lastBreak == 0 || (now - tiR->lastBreak) > ALLOWED_BREAK_INSECS) {
+ // remove finished recordings or those with an unallowed break
if (tiR->recDone) delete tiR->recDone; // clean up
cRecDoneTimerObj *tiRNext = TimersRecording.Next(tiR);
TimersRecording.Del(tiR);
@@ -164,8 +152,7 @@ void cRecdoneThread::Action(void)
}
break;
}
- if (!found)
- {
+ if (!found) {
if (tiR->recDone) delete tiR->recDone; // clean up
cRecDoneTimerObj *tiRNext = TimersRecording.Next(tiR);
TimersRecording.Del(tiR);
@@ -176,5 +163,5 @@ void cRecdoneThread::Action(void)
}
m_fnames.erase(it);
} // while fnames
- LogFile.Log(1,"recdone_thread ended");
+ LogFile.Log(1, "recdone_thread ended");
}