From b866318464e9cd35847292117d1d6d241f452507 Mon Sep 17 00:00:00 2001 From: Thomas Maass Date: Tue, 5 Nov 2013 15:29:27 +0100 Subject: Added optional patch for VDR 2.0.4. --- patches/vdr-2.0.4-hddarchive.patch | 96 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 patches/vdr-2.0.4-hddarchive.patch diff --git a/patches/vdr-2.0.4-hddarchive.patch b/patches/vdr-2.0.4-hddarchive.patch new file mode 100644 index 0000000..b5ad123 --- /dev/null +++ b/patches/vdr-2.0.4-hddarchive.patch @@ -0,0 +1,96 @@ +--- menu.c.orig 2013-10-16 11:46:24.000000000 +0200 ++++ menu.c 2013-11-04 17:00:26.000000000 +0100 +@@ -51,6 +51,18 @@ + #define CHNUMWIDTH (numdigits(Channels.MaxNumber()) + 1) + #define CHNAMWIDTH (min(MAXCHNAMWIDTH, Channels.MaxShortChannelNameLength() + 1)) + ++struct Hddarchive_archiveid_v1_0 ++{ ++ const cRecording *recording; ++ bool isarchive; ++ const char *archiveid; ++}; ++ ++struct Hddarchive_play_v1_0 ++{ ++ const cRecording *recording; ++}; ++ + // --- cMenuEditCaItem ------------------------------------------------------- + + class cMenuEditCaItem : public cMenuEditIntItem { +@@ -2194,7 +2206,23 @@ + level = Level; + name = NULL; + totalEntries = newEntries = 0; +- SetText(Recording->Title('\t', true, Level)); ++ // replace newindicator with '#' for archives ++ cPlugin *hddarchivePlugin = cPluginManager::GetPlugin("hddarchive"); ++ Hddarchive_archiveid_v1_0 data; ++ data.recording = Recording; ++ data.isarchive = false; ++ if (hddarchivePlugin) { ++ hddarchivePlugin->Service("Hddarchive-archiveid_v1.0", &data); ++ } ++ if (data.isarchive && (level < 0 || level == recording->HierarchyLevels())) { ++ char *text = strdup(recording->Title('\t', true, level)); ++ int nipos = strlen(strrchr(recording->Title('\t', true, level), '\t') + 1); ++ text[strlen(recording->Title('\t', true, level)) - nipos - 2] = '#'; ++ SetText(text); ++ free(text); ++ } ++ else ++ SetText(Recording->Title('\t', true, Level)); + if (*Text() == '\t') + name = strdup(Text() + 2); // 'Text() + 2' to skip the two '\t' + } +@@ -2348,6 +2376,13 @@ + if (ri->IsDirectory()) + Open(); + else { ++ cPlugin *hddarchivePlugin = cPluginManager::GetPlugin("hddarchive"); ++ Hddarchive_play_v1_0 data; ++ data.recording = ri->Recording(); ++ if (hddarchivePlugin) { ++ hddarchivePlugin->Service("Hddarchive-play_v1.0", &data); ++ return osEnd; ++ } + cReplayControl::SetRecording(ri->Recording()->FileName()); + return osReplay; + } +@@ -2374,6 +2409,17 @@ + if (HasSubMenu() || Count() == 0) + return osContinue; + cMenuRecordingItem *ri = (cMenuRecordingItem *)Get(Current()); ++ cPlugin *hddarchivePlugin = cPluginManager::GetPlugin("hddarchive"); ++ Hddarchive_archiveid_v1_0 data; ++ data.recording = ri->Recording(); ++ data.isarchive = false; ++ if (hddarchivePlugin) { ++ hddarchivePlugin->Service("Hddarchive-archiveid_v1.0", &data); ++ if (data.isarchive) { ++ Skins.Message(mtError, tr("Cannot delete archived recording!")); ++ return osContinue; ++ } ++ } + if (ri && !ri->IsDirectory()) { + if (Interface->Confirm(tr("Delete recording?"))) { + cRecordControl *rc = cRecordControls::GetRecordControl(ri->Recording()->FileName()); +@@ -4832,7 +4878,16 @@ + if (*fileName) { + Hide(); + if (!cCutter::Active()) { +- if (!marks.Count()) ++ cPlugin *hddarchivePlugin = cPluginManager::GetPlugin("hddarchive"); ++ Hddarchive_archiveid_v1_0 data; ++ data.recording = GetRecording(); ++ data.isarchive = false; ++ if (hddarchivePlugin) { ++ hddarchivePlugin->Service("Hddarchive-archiveid_v1.0", &data); ++ } ++ if (data.isarchive) ++ Skins.Message(mtError, tr("Cannot edit archived recording!")); ++ else if (!marks.Count()) + Skins.Message(mtError, tr("No editing marks defined!")); + else if (!marks.GetNumSequences()) + Skins.Message(mtError, tr("No editing sequences defined!")); -- cgit v1.2.3