summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimo Eskola <timo@tolleri.net>2018-09-02 17:10:01 +0300
committerTimo Eskola <timo@tolleri.net>2018-09-02 17:10:01 +0300
commite793e61250bc01c5c8ab30c61ee88b38ffe56429 (patch)
tree9d691f168da468697bf4be68352c5fffdcfd2c5d
parent7b26ed9bf03698505676c1667bf348daf41214d7 (diff)
downloadvdr-plugin-duplicates-e793e61250bc01c5c8ab30c61ee88b38ffe56429.tar.gz
vdr-plugin-duplicates-e793e61250bc01c5c8ab30c61ee88b38ffe56429.tar.bz2
Abort duplicate scanning if recordings state has changed.
-rw-r--r--menu.c6
-rw-r--r--recording.c29
-rw-r--r--recording.h1
3 files changed, 26 insertions, 10 deletions
diff --git a/menu.c b/menu.c
index 44e197c..392e1cb 100644
--- a/menu.c
+++ b/menu.c
@@ -148,7 +148,7 @@ void cMenuDuplicates::SetHelpKeys(void) {
void cMenuDuplicates::Set(bool Refresh) {
if (DuplicateRecordings.Lock(duplicateRecordingsStateKey)) {
- dsyslog("duplicates: %s menu.", Refresh ? "Refreshing" : "Creating");
+ dsyslog("duplicates: %s menu.", Refresh ? "Refreshing" : "Creating");
const char *CurrentRecording = NULL;
int currentIndex = -1;
if (Refresh)
@@ -269,7 +269,7 @@ eOSState cMenuDuplicates::Delete(void) {
if (HasSubMenu() || Count() == 0)
return osContinue;
if (cMenuDuplicateItem *ri = (cMenuDuplicateItem *)Get(Current())) {
- const char *FileName = ri->FileName();
+ const char *FileName = ri->FileName();
if (Interface->Confirm(trVDR("Delete recording?"))) {
if (TimerStillRecording(FileName))
return osContinue;
@@ -301,8 +301,8 @@ eOSState cMenuDuplicates::Delete(void) {
SetHelpKeys();
Display();
} else {
- Skins.Message(mtError, trVDR("Error while deleting recording!"));
recordingsStateKey.Remove();
+ Skins.Message(mtError, trVDR("Error while deleting recording!"));
}
}
}
diff --git a/recording.c b/recording.c
index 5b98e82..6dee18c 100644
--- a/recording.c
+++ b/recording.c
@@ -103,7 +103,7 @@ cDuplicateRecordingScannerThread::~cDuplicateRecordingScannerThread(){
Stop();
}
-void cDuplicateRecordingScannerThread::Stop() {
+void cDuplicateRecordingScannerThread::Stop(void) {
Cancel(3);
}
@@ -141,8 +141,10 @@ void cDuplicateRecordingScannerThread::Scan(void) {
recordingsStateKey.Remove(false); // sorting doesn't count as a real modification
cList<cDuplicateRecording> duplicates;
for (cDuplicateRecording *recording = recordings.First(); recording; recording = recordings.Next(recording)) {
- if (!Running())
+ if (!Running() || RecordingsStateChanged()) {
+ delete descriptionless;
return;
+ }
if (cIoThrottle::Engaged())
cCondWait::SleepMs(100);
if (!recording->Checked()) {
@@ -171,15 +173,28 @@ void cDuplicateRecordingScannerThread::Scan(void) {
delete descriptionless;
cStateKey duplicateRecordingsStateKey;
DuplicateRecordings.Lock(duplicateRecordingsStateKey, true);
- DuplicateRecordings.Clear();
- for (cDuplicateRecording *duplicate = duplicates.First(); duplicate; duplicate = duplicates.Next(duplicate)) {
- DuplicateRecordings.Add(new cDuplicateRecording(*duplicate));
- }
- duplicateRecordingsStateKey.Remove();
+ if (!RecordingsStateChanged()) {
+ DuplicateRecordings.Clear();
+ for (cDuplicateRecording *duplicate = duplicates.First(); duplicate; duplicate = duplicates.Next(duplicate)) {
+ DuplicateRecordings.Add(new cDuplicateRecording(*duplicate));
+ }
+ duplicateRecordingsStateKey.Remove();
+ } else
+ duplicateRecordingsStateKey.Remove(false);
gettimeofday(&stopTime, NULL);
double seconds = (((long long)stopTime.tv_sec * 1000000 + stopTime.tv_usec) - ((long long)startTime.tv_sec * 1000000 + startTime.tv_usec)) / 1000000.0;
dsyslog("duplicates: Scanning of duplicates took %.2f seconds.", seconds);
}
+bool cDuplicateRecordingScannerThread::RecordingsStateChanged(void) {
+ if (cRecordings::GetRecordingsRead(recordingsStateKey)) {
+ recordingsStateKey.Reset();
+ recordingsStateKey.Remove();
+ dsyslog("duplicates: Recordings state changed while scanning.");
+ return true;
+ }
+ return false;
+}
+
cDuplicateRecordingScannerThread DuplicateRecordingScanner;
diff --git a/recording.h b/recording.h
index ce766cc..0a93dfb 100644
--- a/recording.h
+++ b/recording.h
@@ -57,6 +57,7 @@ private:
int title;
int hidden;
void Scan(void);
+ bool RecordingsStateChanged(void);
protected:
virtual void Action(void);
public: