summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--HISTORY16
-rw-r--r--Makefile9
-rw-r--r--README25
-rw-r--r--contrib/hddarchive/README28
-rw-r--r--contrib/hddarchive/hddarchive.conf17
-rw-r--r--contrib/hddarchive/patches/live-ArchiveHDD.patch487
-rw-r--r--contrib/hddarchive/reccmds/reccmds.custom.conf1
-rw-r--r--contrib/hddarchive/reccmds/reccmds.custom.conf.de1
-rw-r--r--contrib/hddarchive/vdr_move_to_hdd.sh116
-rw-r--r--contrib/rating/README12
-rw-r--r--contrib/rating/reccmds/reccmds.custom.conf12
-rw-r--r--contrib/rating/reccmds/reccmds.custom.conf.de12
-rw-r--r--contrib/rating/vdr-rate-recording.sh8
-rw-r--r--contrib/reclist/README42
-rw-r--r--contrib/reclist/commands/commands.reclist.conf15
-rw-r--r--contrib/reclist/commands/commands.reclist.conf.de15
-rw-r--r--contrib/reclist/vdr_add_recording.sh13
-rw-r--r--contrib/reclist/vdr_create_recording_list_entry.awk302
-rw-r--r--contrib/reclist/vdr_crop_output.sh34
-rw-r--r--contrib/reclist/vdr_generate_recording_list.sh194
-rw-r--r--contrib/reclist/vdr_get_recordings.sh33
-rw-r--r--contrib/reclist/vdr_set_values_for_recording_lists.sh31
-rw-r--r--extrecmenu.c19
-rw-r--r--mymenucommands.c43
-rw-r--r--mymenucommands.h4
-rw-r--r--mymenueditrecording.c334
-rw-r--r--mymenurecordings.c509
-rw-r--r--mymenurecordings.h4
-rw-r--r--mymenusetup.c16
-rw-r--r--mymenusetup.h4
-rw-r--r--myreplaycontrol.c13
-rw-r--r--po/ca_ES.po33
-rw-r--r--po/cs_CZ.po36
-rw-r--r--po/da_DK.po33
-rw-r--r--po/de_DE.po41
-rw-r--r--po/el_GR.po33
-rw-r--r--po/es_ES.po33
-rw-r--r--po/et_EE.po33
-rw-r--r--po/fi_FI.po36
-rw-r--r--po/fr_FR.po36
-rw-r--r--po/hr_HR.po33
-rw-r--r--po/hu_HU.po33
-rw-r--r--po/it_IT.po92
-rw-r--r--po/nl_NL.po33
-rw-r--r--po/nn_NO.po33
-rw-r--r--po/pl_PL.po33
-rw-r--r--po/pt_PT.po33
-rw-r--r--po/ro_RO.po33
-rw-r--r--po/ru_RU.po33
-rw-r--r--po/sl_SI.po33
-rw-r--r--po/sv_SE.po33
-rw-r--r--po/tr_TR.po33
-rw-r--r--scripts/hddarchive.sh306
-rw-r--r--tools.c138
-rw-r--r--tools.h3
-rw-r--r--ttf/VDRSymbolsSans-Bold.ttfbin0 -> 584464 bytes
-rw-r--r--ttf/VDRSymbolsSans.ttfbin512488 -> 626816 bytes
57 files changed, 2942 insertions, 643 deletions
diff --git a/HISTORY b/HISTORY
index ba592f0..c634e8c 100644
--- a/HISTORY
+++ b/HISTORY
@@ -1,6 +1,22 @@
VDR Plugin 'extrecmenu' Revision History
----------------------------------------
+2010-xx-xx: Version 1.2.1
+- [amair] Merged following changes from v1.3-devel head (Submitted by Joe_D @vdr-portal.de).
+- [amair] Lifetime and priority for TS recording can be edited again.
+- [amair] Use international characters for renaming recordings and creating directories like VDR.
+- [amair] Don't use the VDR cutter by default as this crashes VDR (Can be enabled by defining USE_VDR_CUTTER).
+- [amair] Updated Italian translation (Submitted by Diego Pierotto).
+- [amair] Enable support for PIN plugin if USE_PINPLUGIN is set to "1" in Make.config.
+- [amair] Reorganiced contrib directory.
+- [amair] Fixed compiler warnings and errors.
+- [amair] Use VDR's cutting feature (Submitted by Helmut Auer).
+- [amair] Added HDD archive feature (Submitted by Carsten Siebholz).
+- [amair] Updated VDRSymbols font to version 20100612.
+- [amair] Included Rating patch (Submitted by Carsten Siebholz).
+- [amair] Remove obsolete i18n files and scripts.
+- [amair] Require at least VDR v1.6.0 or v1.7.14.
+
2010-05-29: Version 1.2 [amair]
- New homepage: http://projects.vdr-developer.org/projects/show/plg-extrecmenu
diff --git a/Makefile b/Makefile
index 1ceb24c..8789ab3 100644
--- a/Makefile
+++ b/Makefile
@@ -34,6 +34,10 @@ TMPDIR = /tmp
-include $(VDRDIR)/Make.config
+ifdef USE_PINPLUGIN
+DEFINES += -DUSE_PINPLUGIN
+endif
+
### The version number of VDR's plugin API (taken from VDR's "config.h"):
APIVERSION = $(shell sed -ne '/define APIVERSION/s/^.*"\(.*\)".*$$/\1/p' $(VDRDIR)/config.h)
@@ -51,8 +55,7 @@ DEFINES += -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
### The object files (add further files here):
-OBJS = $(PLUGIN).o mymenurecordings.o mymenueditrecording.o myreplaycontrol.o \
- mymenucommands.o mymenusetup.o tools.o i18n.o
+OBJS = $(PLUGIN).o mymenurecordings.o mymenueditrecording.o myreplaycontrol.o mymenucommands.o mymenusetup.o tools.o
### The main target:
@@ -87,7 +90,7 @@ $(I18Npot): $(wildcard *.c)
xgettext -C -cTRANSLATORS --no-wrap --no-location -k -ktr -ktrNOOP --msgid-bugs-address='<see README>' -o $@ $^
%.po: $(I18Npot)
- msgmerge -U --no-wrap --no-location --backup=none -q $@ $<
+ msgmerge -U --no-wrap --no-location --backup=none --no-fuzzy-matching -q $@ $<
@touch $@
$(I18Nmsgs): $(LOCALEDIR)/%/LC_MESSAGES/vdr-$(PLUGIN).mo: $(PODIR)/%.mo
diff --git a/README b/README
index 4b6d538..103e569 100644
--- a/README
+++ b/README
@@ -1,9 +1,11 @@
This is a "plugin" for the Video Disk Recorder (VDR).
-Original author: Martin Prochnow (nordlicht@martins-kabuff.de)
Current maintainers: see project's homepage
Project's homepage: http://projects.vdr-developer.org/projects/show/plg-extrecmenu
+Original author: Martin Prochnow (nordlicht@martins-kabuff.de)
+Original homepage: http://martins-kabuff.de/extrecmenu_en.html
+
See the file COPYING for license information.
I want to thank to following contributors:
@@ -14,6 +16,7 @@ I want to thank to following contributors:
- Diego <vdr-italian@tiscali.it> for the italian translation
- Andreas Mair <andreas@vdr-developer.org> for the true type font containg the
icons
+- Carsten Siebholz for adding HDD Archive compatibility
-------------------------------------------------------------------------------
Description
@@ -44,15 +47,27 @@ Installation
-------------------------------------------------------------------------------
Installation of the plugin itselfs is like any other plugin installation.
+Compile time configuration
+-------------------------------------------------------------------------------
+Some features of the ExtRecMenu must be activated before compiling the plugin.
+This configuration has to be added to the Make.config file in the VDR's source
+directory if you want to use it.
+
+USE_PINPLUGIN = 1
+Add support for protected recordings by using the PIN plugin.
+
+Font including required symbols
+-------------------------------------------------------------------------------
In addition you have to copy the true type font in the ttf/-directory to a
location where freetype will find it (usually /usr/share/fonts/truetype) and
select it in the OSD setup menu of VDR so that the icons which this plugin uses
can be displayed.
-Also check the Makefile if you use the PIN-plugin. You have to place the script
-'dvdarchive.sh' from the scripts/-directory within your $PATH (maybe adjust the
-permissions) for the DVDArchive-patch functionality. See the top of
-'dvdarchive.sh' for the adjustments you maybe have to take.
+Notes
+-------------------------------------------------------------------------------
+You have to place the script 'dvdarchive.sh' from the scripts/-directory within
+your $PATH (maybe adjust the permissions) for the DVDArchive-patch functionality.
+See the top of 'dvdarchive.sh' for the adjustments you maybe have to take.
If your /video-directory is a nfs mount, you have to mount it with the option
'hard' to make renaming and moving of recordings possible.
diff --git a/contrib/hddarchive/README b/contrib/hddarchive/README
new file mode 100644
index 0000000..68b674e
--- /dev/null
+++ b/contrib/hddarchive/README
@@ -0,0 +1,28 @@
+The hddarchive feature of the extrecmenu plugin is similar to
+the dvdarchive feature. Except that the recordings are moved to a
+HDD and not burned to a DVD.
+In my case, I have an external USB docking station for SATA HDDs in which
+I plug in the HDD with the recording to play.
+
+
+Installation
+============
+
+1. Copy the 'hddarchive.sh' to the same directory like 'dvdarchive.sh'
+ (in Gentoo Linux it is /usr/bin/hddarchive.sh)
+2. Copy the 'hddarchive.conf' to the same directory like 'dvdarchive.conf'
+ (in Gentoo Linux it is located in /etc/vdr/)
+3. Edit the 'hddarchive.conf'. MOUNTPOINT should be an existing path, in
+ which the HDD will be mounted.
+4. Copy the script 'vdr_move_to_hdd.sh' to /usr/local/bin/
+5. Edit /usr/local/bin/vdr_move_to_hdd.sh: check that ARCHIVEHDD is the same
+ as MOUNTPOINT in 3.
+ VDRSETTINGSFILE is the path to the gentoo vdr config file (/etc/conf.d/vdr).
+ This is only used to get the envvar ${VIDEO}. Alternative, You can set
+ VIDEO=... manually.
+6. Add the content of ./reccmds/reccmds.custom.conf to Your reccmds.conf.
+7. Create a file hdd.vdr in the root direcory on each archive HDD (/hdd.vdr)
+ The content is used to identify the HDD and should be unique.
+ I have used 2 digits 01, 02... "99 harddisks ought to be enough for anybody" ;-)
+8. If you use the "live" plugin you may want to patch it with
+ ./patches/live-ArchiveHDD.patch to support the archive HDDs.
diff --git a/contrib/hddarchive/hddarchive.conf b/contrib/hddarchive/hddarchive.conf
new file mode 100644
index 0000000..c07e213
--- /dev/null
+++ b/contrib/hddarchive/hddarchive.conf
@@ -0,0 +1,17 @@
+# config file for /usr/bin/hddarchive.sh
+# this is used by vdr-extrecmenu for hddarchives
+
+# Mountpoint, the same as in fstab
+MOUNTPOINT="/mnt/archive-hdd" # no trailing '/'
+
+# Log warnings/errors in syslog. 1 = yes, 0 = no.
+SYSLOG=1
+
+# Create a length.vdr after mounting the dvd for the played recording. 1 = yes, 0 = no.
+# Only for non-vfat and with index.vdr only on dvd.
+GETLENGTH=1
+
+# Put debug infos in file $DEBUGLOG. Only if $DEBUG=1.
+DEBUG=0
+DEBUGLOG="/tmp/hddarchive.sh-debug.log"
+
diff --git a/contrib/hddarchive/patches/live-ArchiveHDD.patch b/contrib/hddarchive/patches/live-ArchiveHDD.patch
new file mode 100644
index 0000000..d9c053e
--- /dev/null
+++ b/contrib/hddarchive/patches/live-ArchiveHDD.patch
@@ -0,0 +1,487 @@
+diff -Nurb live-0.2.0-org/i18n-generated.h live-0.2.0/i18n-generated.h
+--- live-0.2.0-org/i18n-generated.h 2008-04-30 21:43:49.000000000 +0200
++++ live-0.2.0/i18n-generated.h 2008-10-10 12:03:33.000000000 +0200
+@@ -501,6 +501,41 @@
+ "",
+ #endif
+ },
++ { "On archive HDD No.",
++ "Auf Archiv-HDD Nr.",
++ "",
++ "In archivio HDD No.",
++ "",
++ "",
++ "Sur le HDD archive no°",
++ "",
++ "Arkistointi-HDD:llä numero",
++ "",
++ "",
++ "",
++ "",
++ "",
++ "",
++ "",
++#if VDRVERSNUM >= 10302
++ "",
++#endif
++#if VDRVERSNUM >= 10307
++ "",
++#endif
++#if VDRVERSNUM >= 10313
++ "",
++#endif
++#if VDRVERSNUM >= 10316
++ "",
++#endif
++#if VDRVERSNUM >= 10342
++ "",
++#endif
++#if VDRVERSNUM >= 10502
++ "",
++#endif
++ },
+ { "Couldn't find channel or no channels available.",
+ "Kann das Programm nicht finden oder keine vorhanden.",
+ "",
+diff -Nurb live-0.2.0-org/i18n.cpp live-0.2.0/i18n.cpp
+--- live-0.2.0-org/i18n.cpp 2007-08-19 21:48:54.000000000 +0200
++++ live-0.2.0/i18n.cpp 2008-10-10 12:03:33.000000000 +0200
+@@ -3564,7 +3564,7 @@
+ { "On archive DVD No.", // English
+ "Auf Archiv-DVD Nr.", // Deutsch
+ "", // Slovenski
+- "", // Italiano
++ "In archivio DVD No.", // Italiano
+ "", // Nederlands
+ "", // Português
+ "Sur le DVD archive no°", // Français
+@@ -3583,6 +3583,28 @@
+ "", // Dansk
+ "", // Czech
+ },
++ { "On archive HDD No.", // English
++ "Auf Archiv-HDD Nr.", // Deutsch
++ "", // Slovenski
++ "In archivio HDD No.", // Italiano
++ "", // Nederlands
++ "", // Português
++ "Sur le HDD archive no°", // Français
++ "", // Norsk
++ "Arkistointi-HDD:llä numero",
++ "", // Polski
++ "", // Español
++ "", // Greek
++ "", // Svenska
++ "", // Românã
++ "", // Magyar
++ "", // Català
++ "", // Russian
++ "", // Hrvatski
++ "", // Eesti
++ "", // Dansk
++ "", // Czech
++ },
+ { "Starts between", // English
+ "Beginnt zwischen", // Deutsch
+ "", // Slovenski
+diff -Nurb live-0.2.0-org/po/ca_ES.po live-0.2.0/po/ca_ES.po
+--- live-0.2.0-org/po/ca_ES.po 2008-04-21 00:35:22.000000000 +0200
++++ live-0.2.0/po/ca_ES.po 2008-10-10 12:03:33.000000000 +0200
+@@ -59,6 +59,9 @@
+ msgid "On archive DVD No."
+ msgstr ""
+
++msgid "On archive HDD No."
++msgstr ""
++
+ msgid "Couldn't find channel or no channels available."
+ msgstr ""
+
+diff -Nurb live-0.2.0-org/po/cs_CZ.po live-0.2.0/po/cs_CZ.po
+--- live-0.2.0-org/po/cs_CZ.po 2008-04-21 00:35:22.000000000 +0200
++++ live-0.2.0/po/cs_CZ.po 2008-10-10 12:03:33.000000000 +0200
+@@ -57,6 +57,9 @@
+ msgid "On archive DVD No."
+ msgstr ""
+
++msgid "On archive HDD No."
++msgstr ""
++
+ msgid "Couldn't find channel or no channels available."
+ msgstr ""
+
+diff -Nurb live-0.2.0-org/po/da_DK.po live-0.2.0/po/da_DK.po
+--- live-0.2.0-org/po/da_DK.po 2008-04-21 00:35:22.000000000 +0200
++++ live-0.2.0/po/da_DK.po 2008-10-10 12:03:33.000000000 +0200
+@@ -57,6 +57,9 @@
+ msgid "On archive DVD No."
+ msgstr ""
+
++msgid "On archive HDD No."
++msgstr ""
++
+ msgid "Couldn't find channel or no channels available."
+ msgstr ""
+
+diff -Nurb live-0.2.0-org/po/de_DE.po live-0.2.0/po/de_DE.po
+--- live-0.2.0-org/po/de_DE.po 2008-04-21 00:35:22.000000000 +0200
++++ live-0.2.0/po/de_DE.po 2008-10-10 12:03:33.000000000 +0200
+@@ -59,6 +59,9 @@
+ msgid "On archive DVD No."
+ msgstr "Auf Archiv-DVD Nr."
+
++msgid "On archive HDD No."
++msgstr "Auf Archiv-HDD Nr."
++
+ msgid "Couldn't find channel or no channels available."
+ msgstr "Kann das Programm nicht finden oder keine vorhanden."
+
+diff -Nurb live-0.2.0-org/po/el_GR.po live-0.2.0/po/el_GR.po
+--- live-0.2.0-org/po/el_GR.po 2008-04-21 00:35:22.000000000 +0200
++++ live-0.2.0/po/el_GR.po 2008-10-10 12:03:33.000000000 +0200
+@@ -57,6 +57,9 @@
+ msgid "On archive DVD No."
+ msgstr ""
+
++msgid "On archive HDD No."
++msgstr ""
++
+ msgid "Couldn't find channel or no channels available."
+ msgstr ""
+
+diff -Nurb live-0.2.0-org/po/es_ES.po live-0.2.0/po/es_ES.po
+--- live-0.2.0-org/po/es_ES.po 2008-04-21 00:35:22.000000000 +0200
++++ live-0.2.0/po/es_ES.po 2008-10-10 12:03:33.000000000 +0200
+@@ -57,6 +57,9 @@
+ msgid "On archive DVD No."
+ msgstr ""
+
++msgid "On archive HDD No."
++msgstr ""
++
+ msgid "Couldn't find channel or no channels available."
+ msgstr ""
+
+diff -Nurb live-0.2.0-org/po/et_EE.po live-0.2.0/po/et_EE.po
+--- live-0.2.0-org/po/et_EE.po 2008-04-21 00:35:22.000000000 +0200
++++ live-0.2.0/po/et_EE.po 2008-10-10 12:03:33.000000000 +0200
+@@ -57,6 +57,9 @@
+ msgid "On archive DVD No."
+ msgstr ""
+
++msgid "On archive HDD No."
++msgstr ""
++
+ msgid "Couldn't find channel or no channels available."
+ msgstr ""
+
+diff -Nurb live-0.2.0-org/po/fi_FI.po live-0.2.0/po/fi_FI.po
+--- live-0.2.0-org/po/fi_FI.po 2008-04-27 12:49:36.000000000 +0200
++++ live-0.2.0/po/fi_FI.po 2008-10-10 12:03:33.000000000 +0200
+@@ -57,6 +57,9 @@
+ msgid "On archive DVD No."
+ msgstr "Arkistointi-DVD:llä numero"
+
++msgid "On archive HDD No."
++msgstr "Arkistointi-HDD:llä numero"
++
+ msgid "Couldn't find channel or no channels available."
+ msgstr "Kanavaa ei löydy tai yhtään kanavaa ei ole saatavilla."
+
+diff -Nurb live-0.2.0-org/po/fr_FR.po live-0.2.0/po/fr_FR.po
+--- live-0.2.0-org/po/fr_FR.po 2008-04-21 00:35:22.000000000 +0200
++++ live-0.2.0/po/fr_FR.po 2008-10-10 12:03:33.000000000 +0200
+@@ -60,6 +60,9 @@
+ msgid "On archive DVD No."
+ msgstr "Sur le DVD archive no°"
+
++msgid "On archive HDD No."
++msgstr "Sur le HDD archive noä"
++
+ msgid "Couldn't find channel or no channels available."
+ msgstr "Impossible de trouver la chaîne ou pas de chaînes disponibles."
+
+diff -Nurb live-0.2.0-org/po/hr_HR.po live-0.2.0/po/hr_HR.po
+--- live-0.2.0-org/po/hr_HR.po 2008-04-21 00:35:22.000000000 +0200
++++ live-0.2.0/po/hr_HR.po 2008-10-10 12:03:33.000000000 +0200
+@@ -58,6 +58,9 @@
+ msgid "On archive DVD No."
+ msgstr ""
+
++msgid "On archive HDD No."
++msgstr ""
++
+ msgid "Couldn't find channel or no channels available."
+ msgstr ""
+
+diff -Nurb live-0.2.0-org/po/hu_HU.po live-0.2.0/po/hu_HU.po
+--- live-0.2.0-org/po/hu_HU.po 2008-04-21 00:35:22.000000000 +0200
++++ live-0.2.0/po/hu_HU.po 2008-10-10 12:03:33.000000000 +0200
+@@ -58,6 +58,9 @@
+ msgid "On archive DVD No."
+ msgstr ""
+
++msgid "On archive HDD No."
++msgstr ""
++
+ msgid "Couldn't find channel or no channels available."
+ msgstr ""
+
+diff -Nurb live-0.2.0-org/po/it_IT.po live-0.2.0/po/it_IT.po
+--- live-0.2.0-org/po/it_IT.po 2008-04-21 00:35:22.000000000 +0200
++++ live-0.2.0/po/it_IT.po 2008-10-10 12:03:33.000000000 +0200
+@@ -59,6 +59,9 @@
+ msgid "On archive DVD No."
+ msgstr "In archivio DVD No."
+
++msgid "On archive HDD No."
++msgstr "In archivio HDD No."
++
+ msgid "Couldn't find channel or no channels available."
+ msgstr "Impossibile trovare canale o canali disponibili."
+
+diff -Nurb live-0.2.0-org/po/nl_NL.po live-0.2.0/po/nl_NL.po
+--- live-0.2.0-org/po/nl_NL.po 2008-04-21 00:35:22.000000000 +0200
++++ live-0.2.0/po/nl_NL.po 2008-10-10 12:03:33.000000000 +0200
+@@ -60,6 +60,9 @@
+ msgid "On archive DVD No."
+ msgstr ""
+
++msgid "On archive HDD No."
++msgstr ""
++
+ msgid "Couldn't find channel or no channels available."
+ msgstr ""
+
+diff -Nurb live-0.2.0-org/po/nn_NO.po live-0.2.0/po/nn_NO.po
+--- live-0.2.0-org/po/nn_NO.po 2008-04-21 00:35:22.000000000 +0200
++++ live-0.2.0/po/nn_NO.po 2008-10-10 12:03:33.000000000 +0200
+@@ -58,6 +58,9 @@
+ msgid "On archive DVD No."
+ msgstr ""
+
++msgid "On archive HDD No."
++msgstr ""
++
+ msgid "Couldn't find channel or no channels available."
+ msgstr ""
+
+diff -Nurb live-0.2.0-org/po/pl_PL.po live-0.2.0/po/pl_PL.po
+--- live-0.2.0-org/po/pl_PL.po 2008-04-21 00:35:22.000000000 +0200
++++ live-0.2.0/po/pl_PL.po 2008-10-10 12:03:33.000000000 +0200
+@@ -57,6 +57,9 @@
+ msgid "On archive DVD No."
+ msgstr ""
+
++msgid "On archive HDD No."
++msgstr ""
++
+ msgid "Couldn't find channel or no channels available."
+ msgstr ""
+
+diff -Nurb live-0.2.0-org/po/pt_PT.po live-0.2.0/po/pt_PT.po
+--- live-0.2.0-org/po/pt_PT.po 2008-04-21 00:35:22.000000000 +0200
++++ live-0.2.0/po/pt_PT.po 2008-10-10 12:03:33.000000000 +0200
+@@ -57,6 +57,9 @@
+ msgid "On archive DVD No."
+ msgstr ""
+
++msgid "On archive HDD No."
++msgstr ""
++
+ msgid "Couldn't find channel or no channels available."
+ msgstr ""
+
+diff -Nurb live-0.2.0-org/po/ro_RO.po live-0.2.0/po/ro_RO.po
+--- live-0.2.0-org/po/ro_RO.po 2008-04-21 00:35:22.000000000 +0200
++++ live-0.2.0/po/ro_RO.po 2008-10-10 12:03:33.000000000 +0200
+@@ -58,6 +58,9 @@
+ msgid "On archive DVD No."
+ msgstr ""
+
++msgid "On archive HDD No."
++msgstr ""
++
+ msgid "Couldn't find channel or no channels available."
+ msgstr ""
+
+diff -Nurb live-0.2.0-org/po/ru_RU.po live-0.2.0/po/ru_RU.po
+--- live-0.2.0-org/po/ru_RU.po 2008-04-21 00:35:22.000000000 +0200
++++ live-0.2.0/po/ru_RU.po 2008-10-10 12:03:33.000000000 +0200
+@@ -57,6 +57,9 @@
+ msgid "On archive DVD No."
+ msgstr ""
+
++msgid "On archive HDD No."
++msgstr ""
++
+ msgid "Couldn't find channel or no channels available."
+ msgstr ""
+
+diff -Nurb live-0.2.0-org/po/sl_SI.po live-0.2.0/po/sl_SI.po
+--- live-0.2.0-org/po/sl_SI.po 2008-04-21 00:35:22.000000000 +0200
++++ live-0.2.0/po/sl_SI.po 2008-10-10 12:03:33.000000000 +0200
+@@ -58,6 +58,9 @@
+ msgid "On archive DVD No."
+ msgstr ""
+
++msgid "On archive HDD No."
++msgstr ""
++
+ msgid "Couldn't find channel or no channels available."
+ msgstr ""
+
+diff -Nurb live-0.2.0-org/po/sv_SE.po live-0.2.0/po/sv_SE.po
+--- live-0.2.0-org/po/sv_SE.po 2008-04-21 00:35:22.000000000 +0200
++++ live-0.2.0/po/sv_SE.po 2008-10-10 12:03:33.000000000 +0200
+@@ -58,6 +58,9 @@
+ msgid "On archive DVD No."
+ msgstr ""
+
++msgid "On archive HDD No."
++msgstr ""
++
+ msgid "Couldn't find channel or no channels available."
+ msgstr ""
+
+diff -Nurb live-0.2.0-org/po/tr_TR.po live-0.2.0/po/tr_TR.po
+--- live-0.2.0-org/po/tr_TR.po 2008-04-21 00:35:22.000000000 +0200
++++ live-0.2.0/po/tr_TR.po 2008-10-10 12:03:33.000000000 +0200
+@@ -58,6 +58,9 @@
+ msgid "On archive DVD No."
+ msgstr ""
+
++msgid "On archive HDD No."
++msgstr ""
++
+ msgid "Couldn't find channel or no channels available."
+ msgstr ""
+
+diff -Nurb live-0.2.0-org/recman.cpp live-0.2.0/recman.cpp
+--- live-0.2.0-org/recman.cpp 2008-10-10 12:06:17.000000000 +0200
++++ live-0.2.0/recman.cpp 2008-10-10 12:09:00.000000000 +0200
+@@ -1,5 +1,4 @@
+ #include <unistd.h>
+-#include <cstring>
+ #include <string>
+ #include <sstream>
+ #include <fstream>
+@@ -13,6 +12,7 @@
+ #include "recman.h"
+
+ #define INDEXFILESUFFIX "/index.vdr"
++#define LENGTHFILESUFFIX "/length.vdr"
+
+ using namespace std::tr1;
+ using namespace std;
+@@ -101,24 +101,28 @@
+ Recordings.DelByName(name.c_str());
+ }
+
+- bool RecordingsManager::IsArchived(cRecording const * recording)
++ int RecordingsManager::GetArchiveType(cRecording const * recording)
+ {
+ string filename = recording->FileName();
+
+- string vdrFile = filename + "/001.vdr";
+- if (0 == access(vdrFile.c_str(), R_OK))
+- return false;
+-
+- filename += "/dvd.vdr";
+- return (0 == access(filename.c_str(), R_OK));
++ string dvdFile = filename + "/dvd.vdr";
++ if (0 == access(dvdFile.c_str(), R_OK)) {
++ return 1;
++ }
++ string hddFile = filename + "/hdd.vdr";
++ if (0 == access(hddFile.c_str(), R_OK)) {
++ return 2;
++ }
++ return 0;
+ }
+
+- string const RecordingsManager::GetArchiveId(cRecording const * recording)
++ string const RecordingsManager::GetArchiveId(cRecording const * recording, int archiveType)
+ {
+ string filename = recording->FileName();
+
+- filename += "/dvd.vdr";
+- ifstream dvd(filename.c_str());
++ if (archiveType==1) {
++ string dvdFile = filename + "/dvd.vdr";
++ ifstream dvd(dvdFile.c_str());
+
+ if (dvd) {
+ string archiveDisc;
+@@ -130,17 +134,35 @@
+ }
+ return archiveDisc;
+ }
++ } else if(archiveType==2) {
++ string hddFile = filename + "/hdd.vdr";
++ ifstream hdd(hddFile.c_str());
++
++ if (hdd) {
++ string archiveDisc;
++ hdd >> archiveDisc;
++ return archiveDisc;
++ }
++ }
+ return "";
+ }
+
+ string const RecordingsManager::GetArchiveDescr(cRecording const * recording)
+ {
++ int archiveType;
+ string archived;
+- if (IsArchived(recording)) {
++ archiveType = GetArchiveType(recording);
++ if (archiveType==1) {
+ archived += " [";
+ archived += tr("On archive DVD No.");
+ archived += ": ";
+- archived += GetArchiveId(recording);
++ archived += GetArchiveId(recording, archiveType);
++ archived += "]";
++ } else if (archiveType==2) {
++ archived += " [";
++ archived += tr("On archive HDD No.");
++ archived += ": ";
++ archived += GetArchiveId(recording, archiveType);
+ archived += "]";
+ }
+ return archived;
+@@ -266,6 +266,13 @@
+ }
+ delete index;
+ #endif
++ if (RecLength == 0) {
++ cString lengthFile = cString::sprintf("%s%s", m_recording->FileName(), LENGTHFILESUFFIX);
++ ifstream length(*lengthFile);
++ if(length)
++ length >> RecLength;
++ }
++
+ return RecLength;
+ }
+
+diff -Nurb live-0.2.0-org/recman.h live-0.2.0/recman.h
+--- live-0.2.0-org/recman.h 2008-04-08 19:52:00.000000000 +0200
++++ live-0.2.0/recman.h 2008-10-10 12:03:33.000000000 +0200
+@@ -78,14 +78,14 @@
+ * Determine wether the recording has been archived on
+ * removable media (e.g. DVD-ROM)
+ */
+- static bool IsArchived(cRecording const * recording);
++ static int GetArchiveType(cRecording const * recording);
+
+ /**
+ * Provide an identification of the removable media
+ * (e.g. DVD-ROM Number or Name) where the recording has
+ * been archived.
+ */
+- static std::string const GetArchiveId(cRecording const * recording);
++ static std::string const GetArchiveId(cRecording const * recording, int archiveType);
+
+ static std::string const GetArchiveDescr(cRecording const * recording);
+
diff --git a/contrib/hddarchive/reccmds/reccmds.custom.conf b/contrib/hddarchive/reccmds/reccmds.custom.conf
new file mode 100644
index 0000000..92869ea
--- /dev/null
+++ b/contrib/hddarchive/reccmds/reccmds.custom.conf
@@ -0,0 +1 @@
+Move to Archive-HDD: /usr/share/vdr/bin/vdr-bg.sh /usr/local/bin/vdr_move_to_hdd.sh
diff --git a/contrib/hddarchive/reccmds/reccmds.custom.conf.de b/contrib/hddarchive/reccmds/reccmds.custom.conf.de
new file mode 100644
index 0000000..2a12f98
--- /dev/null
+++ b/contrib/hddarchive/reccmds/reccmds.custom.conf.de
@@ -0,0 +1 @@
+Auf Archiv-HDD verschieben: /usr/share/vdr/bin/vdr-bg.sh /usr/local/bin/vdr_move_to_hdd.sh
diff --git a/contrib/hddarchive/vdr_move_to_hdd.sh b/contrib/hddarchive/vdr_move_to_hdd.sh
new file mode 100644
index 0000000..c50ef28
--- /dev/null
+++ b/contrib/hddarchive/vdr_move_to_hdd.sh
@@ -0,0 +1,116 @@
+#!/bin/bash
+
+#LOGFILE=~/vdr_move_to_hdd.log
+
+#ARCHIVEHDD=~/Archive-HDD
+ARCHIVEHDD=/mnt/archive-hdd
+
+#VDRSETTINGSFILE=~/vdr
+VDRSETTINGSFILE=/etc/conf.d/vdr
+
+source ${VDRSETTINGSFILE}
+
+HDDMOUNTED=0
+
+
+#echo "" > ${LOGFILE}
+
+# Test, if recording has already moved?
+if [ -f ${SRC_FULLPATH}/hdd.vdr ]; then
+ svdrpsend.pl mesg "Recording has already been moved to Archive-HDD!"
+# echo "Recording has already been moved to Archive-HDD!" >> ${LOGFILE}
+ exit 1
+fi
+
+
+# Test, if Archive-HDD can be mounted
+if [ ! -f ${ARCHIVEHDD}/hdd.vdr ]; then
+ mount ${ARCHIVEHDD}
+ HDDMOUNTED=1
+fi
+if [ ! -f ${ARCHIVEHDD}/hdd.vdr ]; then
+ svdrpsend.pl mesg "Archive-HDD could not be mounted!"
+# echo "Archive-HDD could not be mounted!" >> ${LOGFILE}
+ exit 1
+fi
+
+
+#echo "PARAMETER = $1" >> ${LOGFILE}
+#echo "VDRSETTINGSFILE= ${VDRSETTINGSFILE}" >> ${LOGFILE}
+#echo "VIDEO = ${VIDEO}" >> ${LOGFILE}
+#echo "ARCHIVEHDD = ${ARCHIVEHDD}" >> ${LOGFILE}
+#echo "" >> ${LOGFILE}
+
+VID_FULLPATH="`cd \"$VIDEO\" 2>/dev/null && pwd || echo \"$VIDEO\"`/"
+#echo "VID_FULLPATH = ${VID_FULLPATH}" >> ${LOGFILE}
+
+SRC_FULLPATH="`cd \"$1\" 2>/dev/null && pwd || echo \"${1}\"`/"
+#echo "SRC_FULLPATH = ${SRC_FULLPATH}" >> ${LOGFILE}
+#echo "" >> ${LOGFILE}
+
+
+
+#RELPATH=$(echo ${SRC_FULLPATH} | sed -e "s#$VID_FULLPATH##")
+RELPATH=${SRC_FULLPATH#$VID_FULLPATH}
+#echo "RELPATH = ${RELPATH}" >> ${LOGFILE}
+
+MODPATH=$(echo "$RELPATH" | awk '
+BEGIN{
+ FS="/";
+}
+{
+ MODPATH="";
+ #printf "0: %s\n", MODPATH;
+ for (i=1; i<=NF; i++) {
+ if ((i==NF-2) && (index($i, "%")==1)) { # cutted movie
+ #printf "replace\n";
+ MODPATH=MODPATH "" substr ($i, 2);
+ } else {
+ #printf "original\n";
+ MODPATH=MODPATH "" $i;
+ }
+ if (i<NF) MODPATH=MODPATH "/";
+ #printf "%i:%s %s\n", i, $i, MODPATH;
+ }
+ printf "%s", MODPATH;
+}' ARCHIVEHDD="$ARCHIVEHDD")
+#echo "MODPATH = ${MODPATH}" >> ${LOGFILE}
+
+mkdir -p ${ARCHIVEHDD}/${MODPATH}
+for i in ${SRC_FULLPATH}/0??.vdr; do
+ if [ -e "${i}" ]; then
+ B=$(basename $i)
+ svdrpsend.pl mesg "Moving $B..."
+# sleep 5
+ mv ${i} ${ARCHIVEHDD}/${MODPATH}
+ fi
+done
+for i in ${SRC_FULLPATH}/0????.ts; do
+ if [ -e "${i}" ]; then
+ B=$(basename $i)
+ svdrpsend.pl mesg "Moving $B..."
+# sleep 5
+ mv ${i} ${ARCHIVEHDD}/${MODPATH}
+ fi
+done
+mv ${SRC_FULLPATH}/index.vdr ${ARCHIVEHDD}/${MODPATH}
+mv ${SRC_FULLPATH}/index ${ARCHIVEHDD}/${MODPATH}
+cp ${SRC_FULLPATH}/info.vdr ${ARCHIVEHDD}/${MODPATH}
+cp ${SRC_FULLPATH}/info ${ARCHIVEHDD}/${MODPATH}
+rm ${SRC_FULLPATH}/resume.vdr
+rm ${SRC_FULLPATH}/resume
+rm ${SRC_FULLPATH}/marks.vdr
+rm ${SRC_FULLPATH}/marks
+cp ${ARCHIVEHDD}/hdd.vdr ${SRC_FULLPATH}/
+
+
+if [ "${HDDMOUNTED}" == "1" ]; then
+# svdrpsend.pl mesg "umount."
+# sleep 5
+ umount ${ARCHIVEHDD}
+#else
+# svdrpsend.pl mesg "NO umount."
+# sleep 5
+fi
+
+svdrpsend.pl mesg "Successfully moved Recording to Archive-HDD."
diff --git a/contrib/rating/README b/contrib/rating/README
new file mode 100644
index 0000000..e4da43d
--- /dev/null
+++ b/contrib/rating/README
@@ -0,0 +1,12 @@
+The rating feature of the extrecmenu plugin gives the possibility
+to rate recordings. These ratings are shown in the Recordings menu
+with up to 5 stars.
+
+
+Installation
+============
+
+1. Copy ./vdr-rate-recording.sh to Your local file system
+2. Edit your reccmds.conf file: add entries to rate a recording.
+ You may want to use ./reccmds/reccmds.custom.conf as a starting point.
+ Modify the path to vdr-rate-recording.sh (if neccessary)
diff --git a/contrib/rating/reccmds/reccmds.custom.conf b/contrib/rating/reccmds/reccmds.custom.conf
new file mode 100644
index 0000000..0555e4d
--- /dev/null
+++ b/contrib/rating/reccmds/reccmds.custom.conf
@@ -0,0 +1,12 @@
+=== Rate Recording === : echo "no function"
+-rate with 10: /usr/share/vdr/bin/vdr-rate-recording.sh 10
+-rate with 9: /usr/share/vdr/bin/vdr-rate-recording.sh 9
+-rate with 8: /usr/share/vdr/bin/vdr-rate-recording.sh 8
+-rate with 7: /usr/share/vdr/bin/vdr-rate-recording.sh 7
+-rate with 6: /usr/share/vdr/bin/vdr-rate-recording.sh 6
+-rate with 5: /usr/share/vdr/bin/vdr-rate-recording.sh 5
+-rate with 4: /usr/share/vdr/bin/vdr-rate-recording.sh 4
+-rate with 3: /usr/share/vdr/bin/vdr-rate-recording.sh 3
+-rate with 2: /usr/share/vdr/bin/vdr-rate-recording.sh 2
+-rate with 1: /usr/share/vdr/bin/vdr-rate-recording.sh 1
+-remove rating: /usr/share/vdr/bin/vdr-rate-recording.sh 0
diff --git a/contrib/rating/reccmds/reccmds.custom.conf.de b/contrib/rating/reccmds/reccmds.custom.conf.de
new file mode 100644
index 0000000..89c875d
--- /dev/null
+++ b/contrib/rating/reccmds/reccmds.custom.conf.de
@@ -0,0 +1,12 @@
+=== Aufnahme bewerten === : echo "no function"
+-bewerte mit 10: /usr/share/vdr/bin/vdr-rate-recording.sh 10
+-bewerte mit 9: /usr/share/vdr/bin/vdr-rate-recording.sh 9
+-bewerte mit 8: /usr/share/vdr/bin/vdr-rate-recording.sh 8
+-bewerte mit 7: /usr/share/vdr/bin/vdr-rate-recording.sh 7
+-bewerte mit 6: /usr/share/vdr/bin/vdr-rate-recording.sh 6
+-bewerte mit 5: /usr/share/vdr/bin/vdr-rate-recording.sh 5
+-bewerte mit 4: /usr/share/vdr/bin/vdr-rate-recording.sh 4
+-bewerte mit 3: /usr/share/vdr/bin/vdr-rate-recording.sh 3
+-bewerte mit 2: /usr/share/vdr/bin/vdr-rate-recording.sh 2
+-bewerte mit 1: /usr/share/vdr/bin/vdr-rate-recording.sh 1
+-entferne Bewertung: /usr/share/vdr/bin/vdr-rate-recording.sh 0
diff --git a/contrib/rating/vdr-rate-recording.sh b/contrib/rating/vdr-rate-recording.sh
new file mode 100644
index 0000000..30b43b1
--- /dev/null
+++ b/contrib/rating/vdr-rate-recording.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+[ $? -ne 2 ] && echo "Usage: $0 <path to the VDR recording> <rating 0 - 10>" && exit 1
+
+rm ${2}/rated.vdr >/dev/null 2>&1
+if [ ! ${1} = "0" ]; then
+ echo "${1}" > $2/rated.vdr
+fi
diff --git a/contrib/reclist/README b/contrib/reclist/README
new file mode 100644
index 0000000..7f5ae33
--- /dev/null
+++ b/contrib/reclist/README
@@ -0,0 +1,42 @@
+The reclist is independent of the extrecmenu plugin.
+It's nothing else than a set of scripts to create a 'database' of all
+recordings. And to create different user defined outputs of this DB.
+
+
+Installation
+============
+
+1. Copy the include scripts to /usr/local/bin
+2. Edit vdr_set_values_for_recording_lists.sh to meet Your needs.
+ VIDEODIR should contain Your video directory (eg: /video)
+ RECLISTDIR is the directory, the list will be created in
+ RECLISTFILE is the filename of the list
+ All other parameters are values to define the layout of the output
+3. Edit Your commands.conf file:
+ You may want to use ./commands/commands.reclist.conf as a starting point.
+ Modify the path to vdr_get_recordings.sh and
+ vdr_generate_recording_list.sh (if neccessary)
+
+
+Explanation of the scripts
+--------------------------
+vdr_set_values_for_recording_lists.sh
+ sets values to generate the list and to generate the user defined outputs
+vdr_get_recordings.sh
+ scans all recordings and calls 'vdr_add_recording.sh' for each recording
+vdr_add_recording.sh
+ calls 'vdr_create_recording_list_entry.awk' to create an entry for each recording
+vdr_create_recording_list_entry.awk
+ does the real work. It extracts the neccessary values out of info or info.vdr
+ and stores them in the reclist. Currently these values will be extracted:
+ Title, Genre, Country, Year, Length, Date, Size, Media, Path.
+vdr_generate_recording_list.sh
+ creates the user defined outputs of the list.
+ usage: vdr_generate_recording_list.sh <type> <what>
+ where <type> = (title|genre|country|year|length|date|size|media|path)
+ and <what> = (all|head|tail)
+ 'all' shows all entries, 'head' shows the first n entries, 'tail' the last n entries
+ where n id the LINES_PER_PAGE defined in vdr_set_values_for_recording_lists.sh
+vdr_crop_output.sh
+ is just a script for convenience. It can crop a lengthy output to the first/last
+ LINES_PER_PAGE lines
diff --git a/contrib/reclist/commands/commands.reclist.conf b/contrib/reclist/commands/commands.reclist.conf
new file mode 100644
index 0000000..bfe7b9b
--- /dev/null
+++ b/contrib/reclist/commands/commands.reclist.conf
@@ -0,0 +1,15 @@
+List of Recordings commands {
+ generate list of recordings : /usr/share/vdr/bin/vdr-bg.sh /usr/local/bin/vdr_get_recordings.sh
+ Recordings sorted by title : vdr_generate_recording_list.sh title all
+ Recordings sorted by genre : vdr_generate_recording_list.sh genre all
+ Recordings sorted by country : vdr_generate_recording_list.sh country all
+ Recordings sorted by year : vdr_generate_recording_list.sh year all
+ Recordings sorted by length : vdr_generate_recording_list.sh length all
+ Recordings sorted by media : vdr_generate_recording_list.sh media all
+ Recordings sorted by path : vdr_generate_recording_list.sh path all
+ Recordings sorted by size : vdr_generate_recording_list.sh size tail
+ '' (w/o Tatort+Kochen) : vdr_generate_recording_list.sh size all | grep -v "Kochen/" | grep -v "Tatort/" | vdr_crop_output.sh tail
+ '' (w/o Tatort,Kochen+Musik) : vdr_generate_recording_list.sh size all | grep -v "Kochen/" | grep -v "Tatort/" | grep -v "Musik/" | vdr_crop_output.sh tail
+ '' (only Movies) : vdr_generate_recording_list.sh size all | grep "Spielfilme/" | vdr_crop_output.sh tail
+ show newest Recordings : vdr_generate_recording_list.sh date tail
+}
diff --git a/contrib/reclist/commands/commands.reclist.conf.de b/contrib/reclist/commands/commands.reclist.conf.de
new file mode 100644
index 0000000..fc2b0b6
--- /dev/null
+++ b/contrib/reclist/commands/commands.reclist.conf.de
@@ -0,0 +1,15 @@
+Liste der Aufnahmen {
+ generiere Liste der Aufnahmen : /usr/share/vdr/bin/vdr-bg.sh /usr/local/bin/vdr_get_recordings.sh
+ Aufnahmen sortiert nach Titel : vdr_generate_recording_list.sh title all
+ Aufnahmen sortiert nach Genre : vdr_generate_recording_list.sh genre all
+ Aufnahmen sortiert nach Land : vdr_generate_recording_list.sh country all
+ Aufnahmen sortiert nach Jahr : vdr_generate_recording_list.sh year all
+ Aufnahmen sortiert nach Länge : vdr_generate_recording_list.sh length all
+ Aufnahmen sortiert nach Medium : vdr_generate_recording_list.sh media all
+ Aufnahmen sortiert nach Verzeichnis : vdr_generate_recording_list.sh path all
+ Aufnahmen sortiert nach Größe : vdr_generate_recording_list.sh size tail
+ '' (ohne Tatort+Kochen) : vdr_generate_recording_list.sh size all | grep -v "Kochen/" | grep -v "Tatort/" | vdr_crop_output.sh tail
+ '' (ohne Tatort,Kochen+Musik) : vdr_generate_recording_list.sh size all | grep -v "Kochen/" | grep -v "Tatort/" | grep -v "Musik/" | vdr_crop_output.sh tail
+ '' (nur Spielfilme) : vdr_generate_recording_list.sh size all | grep "Spielfilme/" | vdr_crop_output.sh tail
+ neueste Aufnahmen anzeigen : vdr_generate_recording_list.sh date tail
+}
diff --git a/contrib/reclist/vdr_add_recording.sh b/contrib/reclist/vdr_add_recording.sh
new file mode 100644
index 0000000..1ca4b42
--- /dev/null
+++ b/contrib/reclist/vdr_add_recording.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+
+echo "${1}" | \
+ awk -f /usr/local/bin/vdr_create_recording_list_entry.awk basedir="${VIDEODIR}" Seperator="${SEPERATOR}" \
+ LenTitle="${LEN_TITLE}" \
+ LenGenre="${LEN_GENRE}" \
+ LenCountry="${LEN_COUNTRY}" \
+ LenYear="${LEN_YEAR}" \
+ LenLength="${LEN_LENGTH}" \
+ LenDate="${LEN_DATE}" \
+ LenSize="${LEN_SIZE}" \
+ LenMedia="${LEN_MEDIA}" >> ${RECLISTDIR}/${RECLISTFILE} \ No newline at end of file
diff --git a/contrib/reclist/vdr_create_recording_list_entry.awk b/contrib/reclist/vdr_create_recording_list_entry.awk
new file mode 100644
index 0000000..ba6fe60
--- /dev/null
+++ b/contrib/reclist/vdr_create_recording_list_entry.awk
@@ -0,0 +1,302 @@
+BEGIN {
+ debug=4;
+ BLANK=" ";
+ TAG_RECORDING=".rec";
+
+
+ # set default values if not defined
+ if (basedir == "") {basedir="/var/vdr/data/_video/";}
+ if (Seperator == "") {Seperator="|";}
+ if (LenTitle == "") {LenTitle=50;}
+ if (LenGenre == "") {LenGenre=20;}
+ if (LenCountry == "") {LenCountry=5;}
+ if (LenYear == "") {LenYear=4;}
+ if (LenLength == "") {LenLength=4;}
+ if (LenDate == "") {LenDate=10;}
+ if (LenSize == "") {LenSize=9;}
+ if (LenMedia == "") {LenMedia=8;}
+}
+
+{
+ InputParam=$0
+ InfoFile=InputParam;
+ if (debug>0) printf("InfoFile :%s\n", InfoFile) > "/dev/stderr";
+ InfoFileBasename="";
+
+ Title="";
+ SubTitle="";
+ Genre="";
+ Country="";
+ Year="";
+ Length="";
+ Date="";
+ Size="";
+ Media="Internal";
+ Path="";
+
+ Len="";
+ Nr="----";
+ FullDir="";
+
+ n = split (InfoFile, p, "/");
+ if (debug>2) {
+ for (i=1; i<=n; i++) {
+ printf("p[%d] :%s\n", i, p[i]) > "/dev/stderr";
+ }
+ }
+ if (n>2) {
+ Dir = p[1];
+ FullDir = p[1];
+ if (debug>2) printf("FullDir1 :%s\n", FullDir) > "/dev/stderr";
+ InfoFileBasename = p[n];
+ for (i=2; i<=n-1; i++) {
+ if (i<=n-2) {
+ Dir = Dir "/" p[i];
+ if (debug>2) printf("Dir 2 :%s\n", Dir) > "/dev/stderr";
+ } else {
+ Date = substr(p[i],1, 10);
+ if (debug>2) printf("Date :%s\n", Date) > "/dev/stderr";
+ }
+ FullDir = FullDir "/" p[i];
+ if (debug>2) printf("FullDir2 :%s\n", FullDir) > "/dev/stderr";
+ }
+ if (index(Dir, basedir)==1) {
+ Path = substr(Dir, length(basedir)+1);
+ if (debug>2) printf("Path :%s\n", Path) > "/dev/stderr";
+ }
+ }
+ if (FullDir != "") {
+ EscDir = FullDir;
+ gsub(/\"/, "\\\"", EscDir);
+ if (debug>0) printf("EscDir :%s\n", EscDir) > "/dev/stderr";
+ getsize = "du \""EscDir"\"";
+ if ((getsize | getline duRes) > 0) {
+ n = split(duRes, s, " ");
+ Size = s[1];
+ if (debug>1) printf("Size :%s\n", Size) > "/dev/stderr";
+ close(getsize)
+ }
+ }
+
+
+ # check, if recording is valid (not deleted)
+ if (match(EscDir, /rec$/)) {
+
+ # check for length file
+ LenFile=InputParam;
+ sub( InfoFileBasename, "length.vdr", LenFile );
+ if (debug>0) printf("Looking for length...\n") > "/dev/stderr";
+ if (debug>1) printf("LenFile1 :%s\n", LenFile) > "/dev/stderr";
+ getline Len < LenFile;
+ if (debug>1) printf("Len 1 :%s\n", Len) > "/dev/stderr";
+ if (Len != "") {
+ Length = sprintf("%d:%02d", Len/60, Len%60);
+ } else {
+ IndexFile=InputParam;
+ sub( InfoFileBasename, "index.vdr", IndexFile );
+ gsub(/\"/, "\\\"", IndexFile);
+ if (debug>1) printf("IndexFile:%s\n", IndexFile) > "/dev/stderr";
+ $1="";
+ "stat -L -c %s \""IndexFile"\" 2>/dev/null" | getline;
+ if (debug>2) printf("Len 2 :%s\t%s\n", $1, IndexFile) > "/dev/stderr";
+ if ($1 != "") {
+ Len=($1/12000);
+ if (debug>1) printf("Len 3 :%s\n", Len) > "/dev/stderr";
+ Length = sprintf("%d:%02d", Len/60, Len%60);
+ }
+ }
+
+
+ # check for archive DVD
+ ExtFile=InputParam;
+ sub( InfoFileBasename, "dvd.vdr", ExtFile );
+ if (debug>0) printf("Looking for archive DVD...\n") > "/dev/stderr";
+ if (debug>1) printf("ExtFile1 :%s\n", ExtFile) > "/dev/stderr";
+ getline Nr < ExtFile;
+ if (debug>1) printf("Nr 1 :%s\n", Nr) > "/dev/stderr";
+ if (Nr != "----") {
+ Media="DVD "Nr;
+ } else {
+ # check for archive HDD
+ ExtFile=InputParam;
+ sub( InfoFileBasename, "hdd.vdr", ExtFile );
+ if (debug>0) printf("Looking for archive HDD...\n") > "/dev/stderr";
+ if (debug>1) printf("ExtFile2 :%s\n", ExtFile) > "/dev/stderr";
+ getline Nr < ExtFile;
+ if (debug>1) printf("Nr 2 :%s\n", Nr) > "/dev/stderr";
+ if (Nr != "----") {
+ Media="HDD "Nr;
+ }
+ }
+
+
+ do {
+ rc=getline line < InfoFile;
+ if ( rc>0 ) {
+ if ( substr(line, 1, 1)=="T" ) {
+ Title=substr(line, 3);
+ } else if ( substr(line, 1, 1)=="S" ) {
+ SubTitle=substr(line, 3);
+ } else if ( substr(line, 1, 1)=="D" ) {
+
+ # D Horrorfilm, USA 1999||...
+ line=substr(line, 3);
+ # Horrorfilm, USA 1999||...
+ if (debug>2) printf("line3:%s\n", line) > "/dev/stderr";
+
+ if (debug>0) printf("Looking for values...\n") > "/dev/stderr";
+
+ # get Genre from tag (...|Genre: xxx|...)
+ Genre2=line;
+ if (debug>0) printf("Looking for Genre... ( tag '...|Genre: xxx|...' )\n") > "/dev/stderr";
+ startIndex=index(Genre2, "|Genre: ");
+ if (startIndex>0) {
+ Genre3=substr(Genre2, startIndex+8);
+ if (debug>2) printf("c3 :%s\n", Genre3) > "/dev/stderr";
+ stopIndex=index(Genre3, "|");
+ if (stopIndex>1) {
+ Genre4=substr(Genre3, 0, stopIndex-1);
+ Genre=Genre4;
+ if (debug>1) printf("Found Genre: %s\n", Genre) > "/dev/stderr";
+ }
+ }
+
+ # get Year from tag (...|Year: xxx|...)
+ Year2=line;
+ if (debug>0) printf("Looking for Year... ( tag '...|Year: xxx|...' )\n") > "/dev/stderr";
+ startIndex=index(Year2, "|Year: ");
+ if (startIndex>0) {
+ Year3=substr(Year2, startIndex+7);
+ if (debug>2) printf("y3 :%s\n", Year3) > "/dev/stderr";
+ stopIndex=index(Year3, "|");
+ if (stopIndex>1) {
+ Year4=substr(Year3, 0, stopIndex-1);
+ Year=Year4;
+ if (debug>1) printf("Found Year: %s\n", Year) > "/dev/stderr";
+ }
+ }
+
+ # get Country (and Year if not already filled) from tag (...|Land: XXX YYYY|...)
+ if(Country=="" || Year=="") {
+ Country2=line;
+ if (debug>0) printf("Looking for Country or Year... ( tag '...|Land: XXX YYYY|...' )\n") > "/dev/stderr";
+ startIndex=index(Country2, "|Land: ");
+ if (startIndex>0) {
+ Country3=substr(Country2, startIndex+7); # USA 1999|...
+ if (debug>2) printf("c3 :%s\n", Country3) > "/dev/stderr";
+ stopIndex=index(Country3, "|");
+ if (stopIndex>1) {
+ Country4=substr(Country3, 0, stopIndex-1); # USA 1999
+ if (debug>2) printf("c4 :%s\n", Country4) > "/dev/stderr";
+ gsub(/^ +/, "", Country4);
+ gsub(/ +$/, "", Country4);
+ gsub(/ +/, " ", Country4); # USA 1999
+ if (debug>2) printf("c5 :%s\n", Country4) > "/dev/stderr";
+ n = split (Country4, F2, / *[, ] */ ); # split to 'USA' '1999'
+ for (i=1; i<=n; i++) {
+ if (match (F2[i], /^[0-9]+$/)) { # only digits
+ if (Year=="") {
+ Year = F2[i];
+ if (debug>1) printf("Found Year: %s\n", Year) > "/dev/stderr";
+ }
+ } else {
+ if (match (F2[i], /^[A-Z/]+$/)) { # only UPPERCASE
+ if (Country=="") {
+ Country = F2[i];
+ if (debug>1) printf("Found Country: %s\n", Country) > "/dev/stderr";
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+
+ # if not filled already, get Genre, Country and Year from the beginning of the line (Horrorfilm, USA 1999||...)
+ if(Genre=="" || Country=="" || Year=="") {
+ if (debug>0) printf("Looking for Genre, Country or Year... ( tag 'D Horrorfilm, USA 1999||...' )\n") > "/dev/stderr";
+ n = split (line, F1, "|");
+ # F1[1]: Horrorfilm, USA 1999
+ gsub(/^ +/, "", F1[1]);
+ gsub(/ +$/, "", F1[1]);
+ if (debug>2) printf("b1: F1[1]:%s\n", F1[1]) > "/dev/stderr";
+ n = split (F1[1], F2, / *[, ] */ ); # split to 'Horrorfilm' 'USA' '1999'
+ for (i=1; i<=n; i++) {
+ if (debug>2) printf("b2: F2[%d]:%s\n", i, F2[i]) > "/dev/stderr";
+ if (match (F2[i], /^[0-9]+$/)) { # only digits
+ if (Year=="") {
+ Year = F2[i];
+ if (debug>1) printf("Found Year: %s\n", Year) > "/dev/stderr";
+ }
+ } else {
+ if (match (F2[i], /^[A-Z/]+$/)) { # only UPPERCASE
+ if (Country=="") {
+ Country = F2[i];
+ if (debug>1) printf("Found Country: %s\n", Country) > "/dev/stderr";
+ }
+ } else {
+ if (Genre=="") {
+ Genre = F2[i];
+ if (debug>1) printf("Found Genre: %s\n", Genre) > "/dev/stderr";
+ }
+ }
+ }
+ }
+ }
+
+ } else {
+ if (debug>2) printf("l :%s\n", line) > "/dev/stderr";
+ }
+ }
+ } while (rc>0);
+# close("/dev/stderr");
+
+ if (debug>0) {
+ printf("Title :%s\n", Title) > "/dev/stderr";
+ printf("SubTitle :%s\n", SubTitle) > "/dev/stderr";
+ printf("Genre :%s\n", Genre) > "/dev/stderr";
+ printf("Country :%s\n", Country) > "/dev/stderr";
+ printf("Year :%s\n", Year) > "/dev/stderr";
+ printf("Length :%s\n", Length) > "/dev/stderr";
+ printf("Date :%s\n", Date) > "/dev/stderr";
+ printf("Size :%s\n", Size) > "/dev/stderr";
+ printf("Media :%s\n", Media) > "/dev/stderr";
+ printf("Path :%s\n\n\n", Path) > "/dev/stderr";
+ }
+
+ if (SubTitle != "") {
+ Title = Title": "SubTitle;
+ }
+ if (length(Title)>LenTitle) { Title = substr(Title, 1, LenTitle) };
+ printf("%-"LenTitle"s%s", Title, Seperator);
+
+ if (length(Genre)>LenGenre) { Genre = substr(Genre, 1, LenGenre) };
+ printf("%-"LenGenre"s%s", Genre, Seperator);
+
+ if (length(Media)>LenCountry) { Country = substr(Country, 1, LenCountry) };
+ printf("%-"LenCountry"s%s", Country, Seperator);
+
+ if (length(Year)>LenYear) { Year = substr(Year, length(Year)-LenYear+1, LenYear) };
+ printf("%"LenYear"s%s", Year, Seperator);
+
+ if (length(Media)>LenLength) { Length = substr(Length, length(Length)-LenLength+1, LenLength) };
+ printf("%-"LenLength"s%s", Length, Seperator);
+
+ if (length(Date)>LenDate) { Date = substr(Date, length(Date)-LenDate+1, LenDate) };
+ printf("%"LenDate"s%s", Date, Seperator);
+
+ if (length(Size)>LenSize) { Size = substr(Size, length(Size)-LenSize+1, LenSize) };
+ printf("%"LenSize"s%s", Size, Seperator);
+
+ if (length(Media)>LenMedia) { Media = substr(Media, length(Media)-LenMedia+1, LenMedia) };
+ printf("%-"LenMedia"s%s", Media, Seperator);
+
+ printf("%s\n", Path);
+ } else {
+ if (debug>1) printf("No regular recording. Ignoring.\n") > "/dev/stderr";
+ }
+}
+
+END {
+} \ No newline at end of file
diff --git a/contrib/reclist/vdr_crop_output.sh b/contrib/reclist/vdr_crop_output.sh
new file mode 100644
index 0000000..80df4f3
--- /dev/null
+++ b/contrib/reclist/vdr_crop_output.sh
@@ -0,0 +1,34 @@
+#!/bin/bash
+
+PRGNAME=$(basename $0)
+
+usage() {
+ echo "usage: ${PRGNAME} (all|head|tail)"
+}
+
+what=${1}
+if [[ -z ${what} ]]; then
+ usage
+ exit
+fi
+
+
+
+# set values for the positions of each column and the sortpositions
+. vdr_set_values_for_recording_lists.sh
+
+
+
+# crop vertically / lines
+if [ "$what" == "head" ] ; then
+ LINEFILTER=" head -n ${LINES_PER_PAGE} |"
+elif [ "$what" == "tail" ] ; then
+ LINEFILTER=" tail -n ${LINES_PER_PAGE} |"
+else
+ LINEFILTER=""
+fi
+
+
+COMMAND="cat /dev/stdin | ${LINEFILTER} cut -b 1-${CHARS_PER_LINE}"
+#echo "cmd: ${COMMAND}"
+eval "${COMMAND}"
diff --git a/contrib/reclist/vdr_generate_recording_list.sh b/contrib/reclist/vdr_generate_recording_list.sh
new file mode 100644
index 0000000..f49efa5
--- /dev/null
+++ b/contrib/reclist/vdr_generate_recording_list.sh
@@ -0,0 +1,194 @@
+#!/bin/bash
+
+usage() {
+ echo "usage: ${PRGNAME} <type> <what>"
+ echo " where <type> = (title|genre|country|year|length|date|size|media|path)"
+ echo " and <what> = (all|head|tail)"
+}
+
+PRGNAME=$(basename $0)
+type=${1}
+what=${2}
+
+if [[ -z ${type} ]]; then
+ usage
+ exit
+fi
+if [[ -z ${what} ]]; then
+ usage
+ exit
+fi
+
+
+
+# set values for the column length
+. vdr_set_values_for_recording_lists.sh
+
+
+
+# crop vertically / lines per page
+if [ "$what" == "head" ] ; then
+ LINEFILTER=" head -n ${LINES_PER_PAGE} |"
+elif [ "$what" == "tail" ] ; then
+ LINEFILTER=" tail -n ${LINES_PER_PAGE} |"
+else
+ LINEFILTER=""
+fi
+
+
+
+if [ "$type" == "title" ] ; then
+ COMMAND="cat ${RECLISTDIR}/${RECLISTFILE} | sort -t'|' -d -b -f -k 1 | ${LINEFILTER} awk ' \
+ BEGIN{FS=\"|\"} { \
+ c1=\$1; l1=32; \
+ c2=\$2; l2=10; \
+ c3=\$3; l3=3; \
+ c4=\$4; l4=4; \
+ c5=\$5; l5=4; \
+ c6=\$8; l6=1; \
+ printf (\"%-*s %-*s %-*s %-*s %-*s %-*s\n\", \
+ l1, substr(c1,1,l1), \
+ l2, substr(c2,1,l2), \
+ l3, substr(c3,1,l3), \
+ l4, substr(c4,1,l4), \
+ l5, substr(c5,1,l5), \
+ l6, substr(c6,1,l6) ); \
+ }'"
+
+elif [ "$type" == "genre" ] ; then
+ COMMAND="cat ${RECLISTDIR}/${RECLISTFILE} | sort -t'|' -d -b -f -k2,2 -k1,1 | ${LINEFILTER} awk ' \
+ BEGIN{FS=\"|\"} { \
+ c1=\$2; l1=20; \
+ c2=\$1; l2=22; \
+ c3=\$3; l3=3; \
+ c4=\$4; l4=4; \
+ c5=\$5; l5=4; \
+ c6=\$8; l6=1; \
+ printf (\"%-*s %-*s %-*s %-*s %-*s %-*s\n\", \
+ l1, substr(c1,1,l1), \
+ l2, substr(c2,1,l2), \
+ l3, substr(c3,1,l3), \
+ l4, substr(c4,1,l4), \
+ l5, substr(c5,1,l5), \
+ l6, substr(c6,1,l6) ); \
+ }'"
+
+elif [ "$type" == "country" ] ; then
+ COMMAND="cat ${RECLISTDIR}/${RECLISTFILE} | sort -t'|' -d -b -f -k3,3 -k1,1 | ${LINEFILTER} awk ' \
+ BEGIN{FS=\"|\"} { \
+ c1=\$3; l1=5; \
+ c2=\$1; l2=30; \
+ c3=\$2; l3=10; \
+ c4=\$4; l4=4; \
+ c5=\$5; l5=4; \
+ c6=\$8; l6=1; \
+ printf (\"%-*s %-*s %-*s %-*s %-*s %-*s\n\", \
+ l1, substr(c1,1,l1), \
+ l2, substr(c2,1,l2), \
+ l3, substr(c3,1,l3), \
+ l4, substr(c4,1,l4), \
+ l5, substr(c5,1,l5), \
+ l6, substr(c6,1,l6) ); \
+ }'"
+
+elif [ "$type" == "year" ] ; then
+ COMMAND="cat ${RECLISTDIR}/${RECLISTFILE} | sort -t'|' -k4,4 -k1,1 | ${LINEFILTER} awk ' \
+ BEGIN{FS=\"|\"} { \
+ c1=\$4; l1=4; \
+ c2=\$1; l2=32; \
+ c3=\$2; l3=10; \
+ c4=\$3; l4=3; \
+ c5=\$5; l5=4; \
+ c6=\$8; l6=1; \
+ printf (\"%-*s %-*s %-*s %-*s %-*s %-*s\n\", \
+ l1, substr(c1,1,l1), \
+ l2, substr(c2,1,l2), \
+ l3, substr(c3,1,l3), \
+ l4, substr(c4,1,l4), \
+ l5, substr(c5,1,l5), \
+ l6, substr(c6,1,l6) ); \
+ }'"
+
+elif [ "$type" == "length" ] ; then
+ COMMAND="cat ${RECLISTDIR}/${RECLISTFILE} | sort -t'|' -d -b -f -k5,5 -k1,1 | ${LINEFILTER} awk ' \
+ BEGIN{FS=\"|\"} { \
+ c1=\$5; l1=4; \
+ c2=\$1; l2=32; \
+ c3=\$2; l3=10; \
+ c4=\$3; l4=3; \
+ c5=\$4; l5=4; \
+ c6=\$8; l6=1; \
+ printf (\"%-*s %-*s %-*s %-*s %-*s %-*s\n\", \
+ l1, substr(c1,1,l1), \
+ l2, substr(c2,1,l2), \
+ l3, substr(c3,1,l3), \
+ l4, substr(c4,1,l4), \
+ l5, substr(c5,1,l5), \
+ l6, substr(c6,1,l6) ); \
+ }'"
+
+elif [ "$type" == "date" ] ; then
+ COMMAND="cat ${RECLISTDIR}/${RECLISTFILE} | sort -t'|' -d -b -f -k6,6 -k1,1 | ${LINEFILTER} awk ' \
+ BEGIN{FS=\"|\"} { \
+ c1=\$6; l1=10; \
+ c2=\$1; l2=22; \
+ c3=\$2; l3=9; \
+ c4=\$3; l4=3; \
+ c5=\$4; l5=4; \
+ c6=\$5; l6=4; \
+ c7=\$8; l7=1; \
+ printf (\"%-*s %-*s %-*s %-*s %-*s %-*s %-*s\n\", \
+ l1, substr(c1,1,l1), \
+ l2, substr(c2,1,l2), \
+ l3, substr(c3,1,l3), \
+ l4, substr(c4,1,l4), \
+ l5, substr(c5,1,l5), \
+ l6, substr(c6,1,l6), \
+ l7, substr(c7,1,l7) ); \
+ }'"
+
+elif [ "$type" == "size" ] ; then
+ COMMAND="cat ${RECLISTDIR}/${RECLISTFILE} | sort -t'|' -n -k7,7 -k1,1 | ${LINEFILTER} awk ' \
+ BEGIN{FS=\"|\"} { \
+ c1=\$7; l1=9; \
+ c2=\$9; l2=49; \
+ printf (\"%-*s %-*s\n\", \
+ l1, substr(c1,1,l1), \
+ l2, substr(c2,1,l2) ); \
+ }'"
+
+elif [ "$type" == "media" ] ; then
+ COMMAND="cat ${RECLISTDIR}/${RECLISTFILE} | sort -t'|' -d -b -f -k8,8 -k1,1 | ${LINEFILTER} awk ' \
+ BEGIN{FS=\"|\"} { \
+ c1=\$8; l1=8; \
+ c2=\$1; l2=25; \
+ c3=\$2; l3=10; \
+ c4=\$3; l4=3; \
+ c5=\$4; l5=4; \
+ c6=\$5; l6=4; \
+ printf (\"%-*s %-*s %-*s %-*s %-*s %-*s\n\", \
+ l1, substr(c1,1,l1), \
+ l2, substr(c2,1,l2), \
+ l3, substr(c3,1,l3), \
+ l4, substr(c4,1,l4), \
+ l5, substr(c5,1,l5), \
+ l6, substr(c6,1,l6) ); \
+ }'"
+
+elif [ "$type" == "path" ] ; then
+ COMMAND="cat ${RECLISTDIR}/${RECLISTFILE} | sort -t'|' -d -b -f -k9,9 | ${LINEFILTER} awk ' \
+ BEGIN{FS=\"|\"} { \
+ c1=\$9; l1=59; \
+ printf (\"%-*s\n\", \
+ l1, substr(c1,1,l1) ); \
+ }'"
+
+fi
+
+
+# crop horizontally / chars per line
+COMMAND="${COMMAND} | cut -b 1-${CHARS_PER_LINE}"
+
+
+#echo "cmd: ${COMMAND}"
+eval "${COMMAND}"
diff --git a/contrib/reclist/vdr_get_recordings.sh b/contrib/reclist/vdr_get_recordings.sh
new file mode 100644
index 0000000..7e5a5ba
--- /dev/null
+++ b/contrib/reclist/vdr_get_recordings.sh
@@ -0,0 +1,33 @@
+#!/bin/sh
+
+# set values for the length of each column
+. vdr_set_values_for_recording_lists.sh
+
+#echo "LEN_TITLE : ${LEN_TITLE}"
+#echo "LEN_GENRE : ${LEN_GENRE}"
+#echo "LEN_COUNTRY : ${LEN_COUNTRY}"
+#echo "LEN_YEAR : ${LEN_YEAR}"
+#echo "LEN_LENGTH : ${LEN_LENGTH}"
+#echo "LEN_DATE : ${LEN_DATE}"
+#echo "LEN_SIZE : ${LEN_SIZE}"
+#echo "LEN_MEDIA : ${LEN_MEDIA}"
+#echo "LEN_PATH : ${LEN_PATH}"
+
+#echo "VIDEODIR : ${VIDEODIR}"
+
+# find the info.vdr files and let awk create a recording list entry
+rm ${RECLISTDIR}/${RECLISTFILE} 2>/dev/null
+
+find ${VIDEODIR} -name 'info.vdr' -exec vdr_add_recording.sh \{\} \;
+find ${VIDEODIR} -name 'info' -exec vdr_add_recording.sh \{\} \;
+
+#find ${VIDEODIR} -name info.vdr -exec echo "{}" \; | \
+# awk -f /usr/local/bin/vdr_create_recording_list_entry.awk basedir="${VIDEODIR}" Seperator="${SEPERATOR}" \
+# LenTitle="${LEN_TITLE}" \
+# LenGenre="${LEN_GENRE}" \
+# LenCountry="${LEN_COUNTRY}" \
+# LenYear="${LEN_YEAR}" \
+# LenLength="${LEN_LENGTH}" \
+# LenDate="${LEN_DATE}" \
+# LenSize="${LEN_SIZE}" \
+# LenMedia="${LEN_MEDIA}" >> ${RECLISTDIR}/${RECLISTFILE} \ No newline at end of file
diff --git a/contrib/reclist/vdr_set_values_for_recording_lists.sh b/contrib/reclist/vdr_set_values_for_recording_lists.sh
new file mode 100644
index 0000000..0a23d74
--- /dev/null
+++ b/contrib/reclist/vdr_set_values_for_recording_lists.sh
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+source /etc/conf.d/vdr
+export VIDEODIR="${VIDEO}/"
+export RECLISTDIR="$(dirname ${EPGFILE})/"
+#export RECLISTDIR="/root/t/"
+export RECLISTFILE="vdr_recordings.lst"
+
+PAGE_WIDTH=1139
+PAGE_HEIGHT=395
+FONTFIXSIZE=$[$(grep "FontFixSize " /etc/vdr/setup.conf | awk 'BEGIN{FS="="}{print $2}')]
+
+#export CHARS_PER_LINE=$[${PAGE_WIDTH}/(${FONTFIXSIZE}+1)]
+export CHARS_PER_LINE=59
+#echo "CHARS_PER_LINE: ${CHARS_PER_LINE}"
+#export LINES_PER_PAGE=$[${PAGE_HEIGHT}/${FONTFIXSIZE}]
+export LINES_PER_PAGE=21
+#echo "LINES_PER_PAGE: ${LINES_PER_PAGE}"
+
+
+export SEPERATOR="|"
+
+
+export LEN_TITLE=50
+export LEN_GENRE=20
+export LEN_COUNTRY=8
+export LEN_YEAR=4
+export LEN_LENGTH=4
+export LEN_DATE=10
+export LEN_SIZE=9
+export LEN_MEDIA=8
diff --git a/extrecmenu.c b/extrecmenu.c
index d1f8d54..df6ade7 100644
--- a/extrecmenu.c
+++ b/extrecmenu.c
@@ -6,12 +6,21 @@
#include <vdr/plugin.h>
#include "mymenusetup.h"
#include "mymenurecordings.h"
-#include "i18n.h"
#include "tools.h"
+#if defined(APIVERSNUM)
+# if APIVERSNUM < 10600
+# error "VDR-1.6.0 API version or greater is required!"
+# else
+# if APIVERSNUM >= 10700 && APIVERSNUM < 10714
+# error "VDR-1.7.14 API version or greater is required!"
+# endif
+# endif
+#endif
+
using namespace std;
-static const char *VERSION = "1.2";
+static const char *VERSION = "1.2.1pre";
static const char *DESCRIPTION = tr("Extended recordings menu");
static const char *MAINMENUENTRY = "ExtRecMenu";
@@ -60,8 +69,6 @@ bool cPluginExtrecmenu::ProcessArgs(int /* argc */,char ** /* argv */)
bool cPluginExtrecmenu::Initialize(void)
{
- RegisterI18n(Phrases);
-
return true;
}
@@ -69,7 +76,7 @@ bool cPluginExtrecmenu::Start(void)
{
mySortList=new SortList;
mySortList->ReadConfigFile();
-
+
Icons::InitCharSet();
MoveCutterThread=new WorkerThread();
@@ -115,6 +122,8 @@ bool cPluginExtrecmenu::SetupParse(const char *_Name,const char *Value)
mysetup.ShowRecTime=atoi(Value);
else if(!strcasecmp(_Name,"ShowRecLength"))
mysetup.ShowRecLength=atoi(Value);
+ else if(!strcasecmp(_Name,"ShowRecRating"))
+ mysetup.ShowRecRating=atoi(Value);
else if(!strcasecmp(_Name,"HideMainMenuEntry"))
mysetup.HideMainMenuEntry=atoi(Value);
else if(!strcasecmp(_Name,"ReplaceOrgRecMenu"))
diff --git a/mymenucommands.c b/mymenucommands.c
index ef81fc5..9122cd5 100644
--- a/mymenucommands.c
+++ b/mymenucommands.c
@@ -9,15 +9,15 @@
#include <vdr/interface.h>
#include "mymenucommands.h"
-#if VDRVERSNUM >= 10713
-myMenuCommands::myMenuCommands(const char *Title,cList<cNestedItem> *_Commands,const char *Parameters):cOsdMenu(Title)
+#if VDRVERSNUM > 10713
+myMenuCommands::myMenuCommands(const char *_Title,cList<cNestedItem> *_Commands,const char *Parameters):cOsdMenu(_Title)
#else
-myMenuCommands::myMenuCommands(const char *Title,cCommands *_Commands,const char *Parameters):cOsdMenu(Title)
+myMenuCommands::myMenuCommands(const char *_Title,cCommands *_Commands, const char *Parameters):cOsdMenu(_Title)
#endif
{
SetHasHotkeys();
commands=_Commands;
-#if VDRVERSNUM >= 10713
+#if VDRVERSNUM > 10713
result=NULL;
parameters=Parameters;
for(cNestedItem *Command=commands->First();Command;Command=commands->Next(Command)) {
@@ -36,14 +36,14 @@ myMenuCommands::myMenuCommands(const char *Title,cCommands *_Commands,const char
myMenuCommands::~myMenuCommands()
{
-#if VDRVERSNUM >= 10713
+#if VDRVERSNUM > 10713
free(result);
#else
free(parameters);
#endif
}
-#if VDRVERSNUM >= 10713
+#if VDRVERSNUM > 10713
bool myMenuCommands::Parse(const char *s)
{
const char *p=strchr(s,':');
@@ -66,7 +66,9 @@ bool myMenuCommands::Parse(const char *s)
}
return false;
}
+#endif
+#if VDRVERSNUM > 10713
eOSState myMenuCommands::Execute()
{
cNestedItem *Command=commands->Get(Current());
@@ -107,32 +109,38 @@ eOSState myMenuCommands::Execute()
}
return osContinue;
}
-#else //VDRVERSNUM < 10713
+#else
eOSState myMenuCommands::Execute()
{
cCommand *command=commands->Get(Current());
if(command)
{
char *buffer=NULL;
- bool confirmed=true;
+ bool confirmed=false;
#ifdef CMDSUBMENUVERSNUM
- if (command->hasChilds()) {
+ if (command->hasChilds())
+ {
AddSubMenu(new myMenuCommands(command->Title(), command->getChilds(), parameters));
return osContinue;
}
#endif
- if(command->Confirm()) {
- asprintf(&buffer,"%s?",command->Title());
- confirmed=Interface->Confirm(buffer);
- free(buffer);
+ if(command->Confirm())
+ {
+ if(asprintf(&buffer,"%s?",command->Title())!=-1)
+ {
+ confirmed=Interface->Confirm(buffer);
+ free(buffer);
+ }
}
if(confirmed)
{
- asprintf(&buffer, "%s...",command->Title());
- Skins.Message(mtStatus,buffer);
- free(buffer);
+ if(asprintf(&buffer, "%s...",command->Title())!=-1)
+ {
+ Skins.Message(mtStatus,buffer);
+ free(buffer);
+ }
const char *Result=command->Execute(parameters);
- Skins.Message(mtStatus, NULL);
+ Skins.Message(mtStatus,NULL);
if(Result)
return AddSubMenu(new cMenuText(command->Title(),Result,fontFix));
return osEnd;
@@ -140,7 +148,6 @@ eOSState myMenuCommands::Execute()
}
return osContinue;
}
-
#endif
eOSState myMenuCommands::ProcessKey(eKeys Key)
diff --git a/mymenucommands.h b/mymenucommands.h
index 7ba3f01..1ab84d9 100644
--- a/mymenucommands.h
+++ b/mymenucommands.h
@@ -1,7 +1,7 @@
class myMenuCommands:public cOsdMenu
{
private:
-#if VDRVERSNUM >= 10713
+#if VDRVERSNUM > 10713
cList<cNestedItem> *commands;
cString parameters;
cString title;
@@ -15,7 +15,7 @@ class myMenuCommands:public cOsdMenu
#endif
eOSState Execute(void);
public:
-#if VDRVERSNUM >= 10713
+#if VDRVERSNUM > 10713
myMenuCommands(const char *Title, cList<cNestedItem> *Commands, const char *Parameters = NULL);
#else
myMenuCommands(const char *Title, cCommands *Commands, const char *Parameters = NULL);
diff --git a/mymenueditrecording.c b/mymenueditrecording.c
index bf05140..135fd5e 100644
--- a/mymenueditrecording.c
+++ b/mymenueditrecording.c
@@ -30,13 +30,13 @@ myMenuRenameRecording::myMenuRenameRecording(cRecording *Recording,const char *D
{
strn0cpy(name,++p,sizeof(name));
strn0cpy(path,recording->Name(),sizeof(path));
-
+
p=strrchr(path,'~');
if(p)
*p=0;
}
else
- strn0cpy(name,recording->Name(),sizeof(name));
+ strn0cpy(name,recording->Name(),sizeof(name));
}
else
{
@@ -45,7 +45,7 @@ myMenuRenameRecording::myMenuRenameRecording(cRecording *Recording,const char *D
if(DirBase)
strn0cpy(path,DirBase,sizeof(path));
}
- Add(new cMenuEditStrItem(trVDR("Name"),name,sizeof(name),tr(FileNameChars)));
+ Add(new cMenuEditStrItem(trVDR("Name"),name,sizeof(name),trVDR(FileNameChars)));
cRemote::Put(kRight);
}
@@ -75,26 +75,36 @@ eOSState myMenuRenameRecording::ProcessKey(eKeys Key)
}
if(isdir)
- asprintf(&oldname,"%s%s%s/%s",VideoDirectory,tmppath?"/":"",dirbase?dirbase:"",dirname);
+ {
+ if(-1==asprintf(&oldname,"%s%s%s/%s",VideoDirectory,tmppath?"/":"",dirbase?dirbase:"",dirname))
+ oldname=NULL;
+ }
else
oldname=strdup(recording->FileName());
- asprintf(&newname,"%s%s%s/%s%s",VideoDirectory,tmppath?"/":"",tmppath?tmppath:"",tmpname,isdir?"":strrchr(recording->FileName(),'/'));
-
- if(!MakeDirs(newname,true))
- Skins.Message(mtError,tr("Creating directories failed!"));
- else
+ if(oldname)
{
- if(MoveRename(oldname,newname,isdir?NULL:recording,false))
- state=osBack;
- else
+ if(-1==asprintf(&newname,"%s%s%s/%s%s",VideoDirectory,tmppath?"/":"",tmppath?tmppath:"",tmpname,isdir?"":strrchr(recording->FileName(),'/')))
+ newname=NULL;
+
+ if(newname)
{
- cRemote::Put(kRight);
- state=osContinue;
+ if(!MakeDirs(newname,true))
+ Skins.Message(mtError,tr("Creating directories failed!"));
+ else
+ {
+ if(MoveRename(oldname,newname,isdir?NULL:recording,false))
+ state=osBack;
+ else
+ {
+ cRemote::Put(kRight);
+ state=osContinue;
+ }
+ }
+ free(newname);
}
+ free(oldname);
}
- free(oldname);
- free(newname);
free(tmppath);
free(tmpname);
}
@@ -120,14 +130,14 @@ class myMenuNewName:public cOsdMenu
myMenuNewName::myMenuNewName():cOsdMenu(tr("New folder"),12)
{
strn0cpy(name,tr("New folder"),sizeof(name));
- Add(new cMenuEditStrItem(trVDR("Name"),name,sizeof(name),tr(FileNameChars)));
+ Add(new cMenuEditStrItem(trVDR("Name"),name,sizeof(name),trVDR(FileNameChars)));
cRemote::Put(kRight);
}
eOSState myMenuNewName::ProcessKey(eKeys Key)
{
eOSState state=cOsdMenu::ProcessKey(Key);
-
+
if(state==osContinue)
{
if(Key==kOk)
@@ -147,7 +157,7 @@ eOSState myMenuNewName::ProcessKey(eKeys Key)
if(Key==kBack)
state=osBack;
}
-
+
return state;
}
@@ -211,7 +221,7 @@ myMenuMoveRecording::myMenuMoveRecording(cRecording *Recording,const char *DirBa
strn0cpy(newname,"",sizeof(newname));
recording=Recording;
base=Base?strdup(Base):NULL;
-
+
level=Level;
Set();
SetHelp(tr("Button$Cancel"),NULL,tr("Button$Create"),tr("Button$Move"));
@@ -290,143 +300,165 @@ eOSState myMenuMoveRecording::MoveRec()
char *dir=NULL;
char *tmpdirbase=dirbase?ExchangeChars(strdup(dirbase),true):NULL;
char *tmpdirname=dirname?ExchangeChars(strdup(dirname),true):NULL;
-
+
eOSState state=osContinue;
if(dirname)
- asprintf(&oldname,"%s%s%s/%s",VideoDirectory,dirbase?"/":"",tmpdirbase?tmpdirbase:"",tmpdirname);
+ {
+ if(-1==asprintf(&oldname,"%s%s%s/%s",VideoDirectory,dirbase?"/":"",tmpdirbase?tmpdirbase:"",tmpdirname))
+ oldname=NULL;
+ }
else
oldname=strdup(recording->FileName());
- myMenuMoveRecordingItem *item=(myMenuMoveRecordingItem*)Get(Current());
- if(item)
+ if(oldname)
{
- if(strcmp(tr("[base dir]"),item->Text()))
+ myMenuMoveRecordingItem *item=(myMenuMoveRecordingItem*)Get(Current());
+ if(item)
{
- if(dirname)
- asprintf(&dir,"%s%s%s",base?base:"",base?"~":"",item->Text());
- else // needed for move recording menu
+ if(strcmp(tr("[base dir]"),item->Text()))
{
- const char *p=strrchr(recording->Name(),'~');
- asprintf(&dir,"%s%s%s~%s",base?base:"",base?"~":"",item->Text(),p?p+1:recording->Name());
+ if(dirname)
+ {
+ if(-1==asprintf(&dir,"%s%s%s",base?base:"",base?"~":"",item->Text()))
+ dir=NULL;
+ }
+ else // needed for move recording menu
+ {
+ const char *p=strrchr(recording->Name(),'~');
+ if(-1==asprintf(&dir,"%s%s%s~%s",base?base:"",base?"~":"",item->Text(),p?p+1:recording->Name()))
+ dir=NULL;
+ }
+ }
+ else
+ {
+ if(!dirname)
+ {
+ const char *p=strrchr(recording->Name(),'~');
+ if(-1==asprintf(&dir,"%s",p?++p:recording->Name()))
+ dir=NULL;
+ }
}
}
else
{
- if(!dirname)
+ if(dirname)
+ {
+ if(-1==asprintf(&dir,"%s",base))
+ dir=NULL;
+ }
+ else
{
const char *p=strrchr(recording->Name(),'~');
- asprintf(&dir,"%s",p?++p:recording->Name());
+ if(-1==asprintf(&dir,"%s~%s",base,p?p:recording->Name()))
+ dir=NULL;
}
}
- }
- else
- {
- if(dirname)
- asprintf(&dir,"%s",base);
- else
- {
- const char *p=strrchr(recording->Name(),'~');
- asprintf(&dir,"%s~%s",base,p?p:recording->Name());
- }
- }
- if(dir)
- dir=ExchangeChars(dir,true);
-
- asprintf(&_newname,"%s%s%s%s",VideoDirectory,dir?"/":"",dir?dir:"",strrchr(dirname?oldname:recording->FileName(),'/'));
-
- // getting existing part of target path
- string path=_newname;
- string::size_type pos=string::npos;
- do
- pos=path.rfind('/',pos)-1;
- while(access(path.substr(0,pos+1).c_str(),R_OK));
-
- path=path.substr(0,pos+1);
-
- struct stat stat1,stat2;
- stat(oldname,&stat1);
- stat(path.c_str(),&stat2);
- // are source and target at the same filesystem?
- if(stat1.st_dev==stat2.st_dev)
- {
- if(MoveRename(oldname,_newname,dirname?NULL:recording,true))
- {
- clearall=true;
- state=osBack;
- }
- }
- else
- {
- struct statvfs fsstat;
- if(!statvfs(path.c_str(),&fsstat))
- {
- int freemb=int((double)fsstat.f_bavail/(1024.0*1024.0/fsstat.f_bsize));
- int recmb=0;
+ if(dir)
+ dir=ExchangeChars(dir,true);
+
+ if(-1==asprintf(&_newname,"%s%s%s%s",VideoDirectory,dir?"/":"",dir?dir:"",strrchr(dirname?oldname:recording->FileName(),'/')))
+ _newname=NULL;
- // moving a single recording
- if(recording)
+ if(_newname)
+ {
+ // getting existing part of target path
+ string path=_newname;
+ string::size_type pos=string::npos;
+ do
+ pos=path.rfind('/',pos)-1;
+ while(access(path.substr(0,pos+1).c_str(),R_OK));
+
+ path=path.substr(0,pos+1);
+
+ struct stat stat1,stat2;
+ stat(oldname,&stat1);
+ stat(path.c_str(),&stat2);
+ // are source and target at the same filesystem?
+ if(stat1.st_dev==stat2.st_dev)
{
- recmb=DirSizeMB(recording->FileName());
- if(freemb-recmb > 0 || Interface->Confirm(tr("Target filesystem filled - try anyway?")))
+ if(MoveRename(oldname,_newname,dirname?NULL:recording,true))
{
- MoveCutterThread->AddToMoveList(oldname,_newname);
clearall=true;
state=osBack;
}
}
- // moving a directory
else
{
- string buf=oldname;
- buf+="/";
- if(!buf.compare(0,buf.length(),_newname))
- Skins.Message(mtError,tr("Moving into own sub-directory not allowed!"));
- else
+ struct statvfs fsstat;
+ if(!statvfs(path.c_str(),&fsstat))
{
- cThreadLock RecordingsLock(&Recordings);
- for(cRecording *rec=Recordings.First();rec;rec=Recordings.Next(rec))
+ int freemb=int((double)fsstat.f_bavail/(1024.0*1024.0/fsstat.f_bsize));
+ int recmb=0;
+
+ // moving a single recording
+ if(recording)
{
- if(!strncmp(oldname,rec->FileName(),strlen(oldname)))
- recmb+=DirSizeMB(rec->FileName());
+ recmb=DirSizeMB(recording->FileName());
+ if(freemb-recmb > 0 || Interface->Confirm(tr("Target filesystem filled - try anyway?")))
+ {
+ MoveCutterThread->AddToMoveList(oldname,_newname);
+ clearall=true;
+ state=osBack;
+ }
}
-
- if(freemb-recmb > 0 || Interface->Confirm(tr("Target filesystem filled - try anyway?")))
+ // moving a directory
+ else
{
- for(cRecording *rec=Recordings.First();rec;rec=Recordings.Next(rec))
+ string buf=oldname;
+ buf+="/";
+ if(!buf.compare(0,buf.length(),_newname))
+ Skins.Message(mtError,tr("Moving into own sub-directory not allowed!"));
+ else
{
- if(!strncmp(oldname,rec->FileName(),strlen(oldname)))
+ cThreadLock RecordingsLock(&Recordings);
+ for(cRecording *rec=Recordings.First();rec;rec=Recordings.Next(rec))
+ {
+ if(!strncmp(oldname,rec->FileName(),strlen(oldname)))
+ recmb+=DirSizeMB(rec->FileName());
+ }
+
+ if(freemb-recmb > 0 || Interface->Confirm(tr("Target filesystem filled - try anyway?")))
{
- char *_buf=ExchangeChars(strdup(oldname+strlen(VideoDirectory)+1),false);
-
- if(strcmp(rec->Name(),_buf))
+ for(cRecording *rec=Recordings.First();rec;rec=Recordings.Next(rec))
{
- free(_buf);
- asprintf(&_buf,"%s%s",_newname,rec->FileName()+strlen(oldname));
-
- MoveCutterThread->AddToMoveList(rec->FileName(),_buf);
+ if(!strncmp(oldname,rec->FileName(),strlen(oldname)))
+ {
+ char *_buf=ExchangeChars(strdup(oldname+strlen(VideoDirectory)+1),false);
+
+ if(strcmp(rec->Name(),_buf))
+ {
+ free(_buf);
+ if(-1==asprintf(&_buf,"%s%s",_newname,rec->FileName()+strlen(oldname)))
+ _buf=NULL;
+
+ if(_buf)
+ MoveCutterThread->AddToMoveList(rec->FileName(),_buf);
+ }
+ free(_buf);
+ _buf=NULL;
+ }
}
- free(_buf);
+ clearall=true;
+ state=osBack;
}
}
- clearall=true;
- state=osBack;
}
}
+ else
+ {
+ Skins.Message(mtError,tr("Can't get filesystem information"));
+ esyslog("[extrecmenu] %s",strerror(errno));
+ }
}
+ free(_newname);
}
- else
- {
- Skins.Message(mtError,tr("Can't get filesystem information"));
- esyslog("[extrecmenu] %s",strerror(errno));
- }
+ free(oldname);
}
- free(oldname);
- free(_newname);
free(dir);
free(tmpdirbase);
free(tmpdirname);
-
+
return state;
}
@@ -438,7 +470,7 @@ eOSState myMenuMoveRecording::Create()
eOSState myMenuMoveRecording::ProcessKey(eKeys Key)
{
eOSState state=cOsdMenu::ProcessKey(Key);
-
+
if(state==osUnknown)
{
switch(Key)
@@ -482,19 +514,75 @@ eOSState myMenuRecordingDetails::ProcessKey(eKeys Key)
{
if(Key==kOk)
{
- char *oldname=strdup(recording->FileName());
- char *_newname=strdup(recording->FileName());
+ if((priority!=recording->priority)||(lifetime!=recording->lifetime))
+ {
+#if VDRVERSNUM > 10713
+ if(recording->IsPesRecording())
+#endif
+ {
+ char *oldname=strdup(recording->FileName());
+ char *_newname=strdup(recording->FileName());
- sprintf(_newname+strlen(_newname)-9,"%02d.%02d.rec",priority,lifetime);
+ sprintf(_newname+strlen(_newname)-9,"%02d.%02d.rec",priority,lifetime);
- if(MoveRename(oldname,_newname,recording,false))
- state=osBack;
- else
- state=osContinue;
+ if(MoveRename(oldname,_newname,recording,false))
+ state=osBack;
+ else
+ state=osContinue;
- free(oldname);
- free(_newname);
+ free(oldname);
+ free(_newname);
+ }
+#if VDRVERSNUM > 10713
+ else
+ {
+ cString buffer = cString::sprintf("P %d\nL %d", priority, lifetime);
+ if(ModifyInfo(recording,*buffer))
+ {
+ cString fileName = recording->FileName();
+ Recordings.Del(recording);
+ Recordings.AddByName(*fileName);
+ state=osBack;
+ }
+ else
+ state=osContinue;
+ }
+#endif
+ }
+ else
+ state=osBack;
}
}
return state;
}
+
+#define INFOFILE_PES "info.vdr"
+#define INFOFILE_TS "info"
+bool myMenuRecordingDetails::ModifyInfo(cRecording *Recording, const char *Info)
+{ //This has been taken from remotetimers-0.1.3, written by Frank Schmirler <vdrdev@schmirler.de>
+
+ // check for write access as cRecording::WriteInfo() always returns true
+ // TODO: writing may still fail as access() doesn't use the effective UID
+#if VDRVERSNUM > 10713
+ cString InfoFileName=cString::sprintf(Recording->IsPesRecording()?"%s/"INFOFILE_PES:"%s/"INFOFILE_TS,Recording->FileName());
+#else
+ cString InfoFileName=cString::sprintf("%s/"INFOFILE_PES,Recording->FileName());
+#endif
+ if(access(InfoFileName,W_OK)==0)
+ {
+ FILE *f=fmemopen((void *)Info,strlen(Info)*sizeof(char),"r");
+ if(f)
+ {
+ // Casting const away is nasty, but what the heck?
+ // The Recordings thread is locked and the object is going to be deleted anyway.
+ if(((cRecordingInfo *)Recording->Info())->Read(f)&&Recording->WriteInfo())
+ return true;
+ esyslog("[extrecmenu] error in info string '%s'",Info);
+ }
+ else
+ esyslog("[extrecmenu] error in fmemopen: %m");
+ }
+ else
+ esyslog("[extrecmenu] '%s' not writeable: %m",*InfoFileName);
+ return false;
+}
diff --git a/mymenurecordings.c b/mymenurecordings.c
index c5bdfef..48a9d86 100644
--- a/mymenurecordings.c
+++ b/mymenurecordings.c
@@ -74,7 +74,7 @@ void myMenuRecordingInfo::Display(void)
if(recording->Info()->Description())
text << recording->Info()->Description() << "\n\n";
}
-
+
string recname=recording->Name();
string::size_type i=recname.rfind('~');
if(i!=string::npos)
@@ -82,7 +82,7 @@ void myMenuRecordingInfo::Display(void)
<< tr("Path") << ": " << recname.substr(0,i) << "\n";
else
text << tr("Name") << ": " << recname << "\n";
-
+
cChannel *chan=Channels.GetByChannelID(((cRecordingInfo*)recording->Info())->ChannelID());
if(chan)
text << tr("Channel") << ": " << *ChannelString(chan,0) << "\n";
@@ -143,13 +143,15 @@ myMenuRecordingsItem::myMenuRecordingsItem(cRecording *Recording,int Level)
{
totalentries=newentries=0;
isdvd=false;
+ ishdd=false;
dirismoving=true;
name=NULL;
filename=Recording->FileName();
-#if VDRVERSNUM >= 10703
+#if VDRVERSNUM > 10713
isPesRecording=Recording->IsPesRecording();
+#else
+ isPesRecording=true;
#endif
-
// get the level of this recording
level=0;
const char *s=Recording->Name();
@@ -188,27 +190,29 @@ myMenuRecordingsItem::myMenuRecordingsItem(cRecording *Recording,int Level)
string buffer;
stringstream titlebuffer;
stringstream idbuffer;
-
+
buffer=filename;
-#if VDRVERSNUM > 10703
if (isPesRecording)
buffer+="/001.vdr";
else
buffer+="/00001.ts";
-#else
- buffer+="/001.vdr";
-#endif
+
if(access(buffer.c_str(),R_OK))
{
buffer=filename;
buffer+="/dvd.vdr";
isdvd=!access(buffer.c_str(),R_OK);
+ buffer=filename;
+ buffer+="/hdd.vdr";
+ ishdd=!access(buffer.c_str(),R_OK);
}
-
+
if(MoveCutterThread->IsMoving(filename))
titlebuffer << Icons::MovingRecording(); // moving recording
else if(isdvd)
titlebuffer << Icons::DVD(); // archive dvd
+ else if(ishdd)
+ titlebuffer << Icons::HDD(); // archive hdd
else if(MoveCutterThread->IsCutting(filename))
titlebuffer << Icons::Scissor(); // cutting recording
else if(Recording->IsNew() && !mysetup.PatchNew)
@@ -216,23 +220,23 @@ myMenuRecordingsItem::myMenuRecordingsItem(cRecording *Recording,int Level)
else if(!Recording->IsNew() && mysetup.PatchNew)
titlebuffer << Icons::Continue(); // alternative to new marker / rewind / continue
else titlebuffer << ' '; // no icon
-
+
titlebuffer << '\t';
-
+
// date and time of recording
struct tm tm_r;
struct tm *t=localtime_r(&Recording->start,&tm_r);
-
+
if(mysetup.ShowRecDate)
titlebuffer << setw(2) << setfill('0') << t->tm_mday << '.'
<< setw(2) << setfill('0') << t->tm_mon+1 << '.'
<< setw(2) << setfill('0') << t->tm_year%100 << '\t';
-
+
if(mysetup.ShowRecTime)
titlebuffer << setw(2) << setfill('0') << t->tm_hour << '.'
<< setw(2) << setfill('0') << t->tm_min << '\t';
-
-
+
+
idbuffer << t->tm_mday << t->tm_mon << t->tm_year
<< t->tm_hour << t->tm_min;
@@ -240,14 +244,11 @@ myMenuRecordingsItem::myMenuRecordingsItem(cRecording *Recording,int Level)
if(mysetup.ShowRecLength)
{
buffer=filename;
-#if VDRVERSNUM > 10703
if (isPesRecording)
buffer+="/index.vdr";
else
buffer+="/index";
-#else
- buffer+="/index.vdr";
-#endif
+
struct stat statbuf;
if(!stat(buffer.c_str(),&statbuf))
{
@@ -261,29 +262,72 @@ myMenuRecordingsItem::myMenuRecordingsItem(cRecording *Recording,int Level)
// get recording length from file 'length.vdr'
buffer=filename;
buffer+="/length.vdr";
-
+
ifstream in(buffer.c_str());
if(in)
{
if(!in.eof())
getline(in,buffer);
-
+
buffer+="'";
// replace leading spaces with fixed blank (right align)
while(buffer.length()<=3)
buffer.insert(0,Icons::FixedBlank());
titlebuffer << buffer << '\t';
-
+
in.close();
}
else
titlebuffer << '\t';
}
}
- if(!mysetup.ShowRecDate && !mysetup.ShowRecTime && !mysetup.ShowRecLength)
+
+ // recording rating
+ if(mysetup.ShowRecRating)
+ {
+ // get recording rating from file 'rated.vdr'
+ buffer=filename;
+ buffer+="/rated.vdr";
+
+ ifstream in(buffer.c_str());
+ if(in)
+ {
+ if(!in.eof())
+ getline(in,buffer);
+ int rated=atoi(buffer.c_str());
+ buffer="";
+ if (rated>10)
+ rated=10;
+
+ int cstar=0;
+ if (rated>0) {
+ while (rated>1) {
+ buffer += Icons::StarFull();
+ rated = rated-2;
+ cstar++;
+ }
+ if (rated>0) {
+ buffer += Icons::StarHalf();
+ rated--;
+ cstar++;
+ }
+ }
+ while (cstar<5) {
+ buffer += Icons::FixedBlank();
+ cstar++;
+ }
+ titlebuffer << buffer;
+
+ in.close();
+ }
+
+ titlebuffer << '\t';
+ }
+
+ if(!mysetup.ShowRecDate && !mysetup.ShowRecTime && !mysetup.ShowRecLength && !mysetup.ShowRecRating)
titlebuffer << '\t';
-
+
// recording title
string _s=Recording->Name();
string::size_type i=_s.rfind('~');
@@ -297,7 +341,7 @@ myMenuRecordingsItem::myMenuRecordingsItem(cRecording *Recording,int Level)
titlebuffer << _s;
idbuffer << _s;
}
-
+
title=strdup(titlebuffer.str().c_str());
uniqid=idbuffer.str();
}
@@ -321,7 +365,7 @@ void myMenuRecordingsItem::IncrementCounter(bool IsNew)
totalentries++;
if(IsNew)
newentries++;
-
+
char *buffer=NULL;
ostringstream entries;
@@ -329,30 +373,33 @@ void myMenuRecordingsItem::IncrementCounter(bool IsNew)
if(mysetup.ShowNewRecs)
{
- asprintf(&buffer,"%s\t%s (%d)%s%s%s%s%s",
- GetDirIsMoving()?Icons::MovingDirectory():Icons::Directory(),
- // replace leading spaces with fixed blank (right align)
- myStrReplace(entries.str(),' ',Icons::FixedBlank()).c_str(),
- newentries,
- (!mysetup.ShowRecDate&&!mysetup.ShowRecTime&&!mysetup.ShowRecLength)?"\t":"",
- (mysetup.ShowRecDate||mysetup.ShowRecTime||mysetup.ShowRecLength)?"\t":"",
- ((mysetup.ShowRecDate&&mysetup.ShowRecTime)||(mysetup.ShowRecTime&&mysetup.ShowRecLength)||(mysetup.ShowRecLength&&mysetup.ShowRecDate))?"\t":"",
- (mysetup.ShowRecDate&&mysetup.ShowRecTime&&mysetup.ShowRecLength)?"\t":"",
- name);
+ if(-1==asprintf(&buffer,"%s\t%s (%d)%s%s%s%s%s",
+ GetDirIsMoving()?Icons::MovingDirectory():Icons::Directory(),
+ // replace leading spaces with fixed blank (right align)
+ myStrReplace(entries.str(),' ',Icons::FixedBlank()).c_str(),
+ newentries,
+ mysetup.ShowRecDate||mysetup.ShowOnlyRecs?"\t":"",
+ mysetup.ShowRecTime?"\t":"",
+ mysetup.ShowRecLength?"\t":"",
+ mysetup.ShowRecRating?"\t":"",
+ name))
+ buffer=NULL;
}
else
{
- asprintf(&buffer,"%s\t%s%s%s%s%s%s",
- GetDirIsMoving()?Icons::MovingDirectory():Icons::Directory(),
- // replace leading spaces with fixed blank (right align)
- myStrReplace(entries.str(),' ',Icons::FixedBlank()).c_str(),
- (!mysetup.ShowRecDate&&!mysetup.ShowRecTime&&!mysetup.ShowRecLength)?"\t":"",
- (mysetup.ShowRecDate||mysetup.ShowRecTime||mysetup.ShowRecLength)?"\t":"",
- ((mysetup.ShowRecDate&&mysetup.ShowRecTime)||(mysetup.ShowRecTime&&mysetup.ShowRecLength)||(mysetup.ShowRecLength&&mysetup.ShowRecDate))?"\t":"",
- (mysetup.ShowRecDate&&mysetup.ShowRecTime&&mysetup.ShowRecLength)?"\t":"",
- name);
+ if(-1==asprintf(&buffer,"%s\t%s%s%s%s%s%s",
+ GetDirIsMoving()?Icons::MovingDirectory():Icons::Directory(),
+ // replace leading spaces with fixed blank (right align)
+ myStrReplace(entries.str(),' ',Icons::FixedBlank()).c_str(),
+ mysetup.ShowRecDate||mysetup.ShowOnlyRecs?"\t":"",
+ mysetup.ShowRecTime?"\t":"",
+ mysetup.ShowRecLength?"\t":"",
+ mysetup.ShowRecRating?"\t":"",
+ name))
+ buffer=NULL;
}
- SetText(buffer,false);
+ if(buffer)
+ SetText(buffer,false);
}
// --- myMenuRecordings -------------------------------------------------------
@@ -360,27 +407,52 @@ void myMenuRecordingsItem::IncrementCounter(bool IsNew)
bool myMenuRecordings::golastreplayed=false;
bool myMenuRecordings::wasdvd;
+bool myMenuRecordings::washdd;
dev_t myMenuRecordings::fsid=0;
int myMenuRecordings::freediskspace=0;
myMenuRecordings::myMenuRecordings(const char *Base,int Level):cOsdMenu("")
{
- // set tabs
- if(mysetup.ShowRecDate&&mysetup.ShowRecTime&&!mysetup.ShowRecLength) // recording date and time are shown, recording length not
- SetCols(2,8,6);
- else if(mysetup.ShowRecDate&&mysetup.ShowRecTime) // all details are shown
- SetCols(2,8,6,4);
- else if(mysetup.ShowRecDate&&!mysetup.ShowRecTime) // recording time is not shown
- SetCols(2,8,4);
- else if(!mysetup.ShowRecDate&&mysetup.ShowRecTime&&mysetup.ShowRecLength) // recording date is not shown
- SetCols(2,6,4);
- else // recording date and time are not shown; even if recording length should be not shown we must set two tabs because of the details of the directories
- {
- if(mysetup.ShowNewRecs)
- SetCols(2,8,3);
- else
- SetCols(2,4,3);
- }
+ mysetup.ShowOnlyRecs=false;
+ int c[5],i=0;
+ for (i=0; i<5; i++) c[i]=0;
+
+ // set first tab to 2
+ i=0;
+ c[i]=2;//2;
+
+ if(mysetup.ShowRecDate)
+ {
+ i++;
+ c[i]=8;
+ }
+ if(mysetup.ShowRecTime)
+ {
+ i++;
+ c[i]=6;
+ }
+ if(mysetup.ShowRecLength)
+ {
+ i++;
+ c[i]=4;
+ }
+ if(mysetup.ShowRecRating)
+ {
+ i++;
+ c[i]=8;//5;
+ }
+ if(i==0)
+ { // only icon and name colums: add column for number of recordings in folders
+ i++;
+ c[i]=(mysetup.ShowNewRecs?9:3);
+ mysetup.ShowOnlyRecs=true;
+ }
+ else
+ { // make the first column wide enough
+ c[1]=std::max(c[1],(mysetup.ShowNewRecs?9:3));
+ }
+
+ SetCols(c[0], c[1], c[2], c[3], c[4]);
edit=false;
level=Level;
@@ -394,23 +466,44 @@ myMenuRecordings::myMenuRecordings(const char *Base,int Level):cOsdMenu("")
if(wasdvd&&!cControl::Control())
{
char *cmd=NULL;
- asprintf(&cmd,"dvdarchive.sh umount \"%s\"",*strescape(myReplayControl::LastReplayed(),"'\\\"$"));
- isyslog("[extrecmenu] calling %s to unmount dvd",cmd);
- int result=SystemExec(cmd);
- if(result)
+ if(-1!=asprintf(&cmd,"dvdarchive.sh umount \"%s\"",*strescape(myReplayControl::LastReplayed(),"'\\\"$")))
{
- result=result/256;
- if(result==1)
- Skins.Message(mtError,tr("Error while mounting DVD!"));
+ isyslog("[extrecmenu] calling %s to unmount dvd",cmd);
+ int result=SystemExec(cmd);
+ if(result)
+ {
+ result=result/256;
+ if(result==1)
+ Skins.Message(mtError,tr("Error while mounting DVD!"));
+ }
+ isyslog("[extrecmenu] dvdarchive.sh returns %d",result);
+ free(cmd);
}
- isyslog("[extrecmenu] dvdarchive.sh returns %d",result);
- free(cmd);
wasdvd=false;
}
+ if(washdd&&!cControl::Control())
+ {
+ char *cmd=NULL;
+ if(-1!=asprintf(&cmd,"hddarchive.sh umount \"%s\"",*strescape(myReplayControl::LastReplayed(),"'\\\"$")))
+ {
+ isyslog("[extrecmenu] calling %s to unmount Archive-HDD",cmd);
+ int result=SystemExec(cmd);
+ if(result)
+ {
+ result=result/256;
+ if(result==1)
+ Skins.Message(mtError,tr("Error while mounting Archive-HDD!"));
+ }
+ isyslog("[extrecmenu] hddarchive.sh returns %d",result);
+ free(cmd);
+ }
+
+ washdd=false;
+ }
Set();
-
+
if(myReplayControl::LastReplayed())
Open();
@@ -439,7 +532,7 @@ int myMenuRecordings::FreeMB()
if(statdir.st_dev!=fsid)
{
fsid=statdir.st_dev;
-
+
struct statvfs fsstat;
if(!statvfs(path.c_str(),&fsstat))
{
@@ -452,7 +545,7 @@ int myMenuRecordings::FreeMB()
if(statdir.st_dev==fsid)
freediskspace+=DirSizeMB(rec->FileName());
}
- }
+ }
}
else
{
@@ -497,13 +590,13 @@ void myMenuRecordings::Title()
buffer << base;
else
buffer << trVDR("Recordings");
-
+
buffer << " ("
<< minutes/60 << ":"
<< setw(2) << setfill('0') << minutes%60 << " "
<< trVDR("free")
<< ")";
-
+
SetTitle(buffer.str().c_str());
}
@@ -577,9 +670,9 @@ void myMenuRecordings::Set(bool Refresh,char *_current)
lastreplayed=recording->FileName();
}
}
-
+
Clear();
-
+
// create my own recordings list from VDR's
myRecList *list=new myRecList();
for(cRecording *recording=Recordings.First();recording;recording=Recordings.Next(recording))
@@ -599,7 +692,7 @@ void myMenuRecordings::Set(bool Refresh,char *_current)
if(!base||(strstr(listitem->recording->Name(),base)==listitem->recording->Name()&&listitem->recording->Name()[strlen(base)]=='~'))
{
myMenuRecordingsItem *recitem=new myMenuRecordingsItem(listitem->recording,level);
-#ifdef WITHPINPLUGIN
+#ifdef USE_PINPLUGIN
bool hidepinprotectedrecs=false;
cPlugin *pinplugin=cPluginManager::GetPlugin("pin");
if(pinplugin)
@@ -623,7 +716,7 @@ void myMenuRecordings::Set(bool Refresh,char *_current)
{
if(!MoveCutterThread->IsMoving(recording->FileName()))
lastitem->SetDirIsMoving(false);
-
+
if(lastitem->IsDirectory())
lastitem->IncrementCounter(recording->IsNew());
if(lastreplayed && !strcmp(lastreplayed,recording->FileName()))
@@ -634,7 +727,7 @@ void myMenuRecordings::Set(bool Refresh,char *_current)
if(recitem && !recitem->IsDirectory() && !cControl::Control() && !mysetup.GoLastReplayed)
golastreplayed=false;
}
- if(recitem&&!recitem->IsDirectory()&&recitem->IsDVD()&&!cControl::Control())
+ if(recitem&&!recitem->IsDirectory()&&(recitem->IsDVD()||recitem->IsHDD())&&!cControl::Control())
cReplayControl::ClearLastReplayed(cReplayControl::LastReplayed());
}
}
@@ -667,10 +760,12 @@ bool myMenuRecordings::Open()
char *buffer=NULL;
if(base)
{
- asprintf(&buffer,"%s~%s",base,t);
+ if(-1==asprintf(&buffer,"%s~%s",base,t))
+ buffer=NULL;
t=buffer;
}
- AddSubMenu(new myMenuRecordings(t,level+1));
+ if(t)
+ AddSubMenu(new myMenuRecordings(t,level+1));
free(buffer);
return true;
}
@@ -689,7 +784,7 @@ eOSState myMenuRecordings::Play()
myMenuRecordingsItem *item=(myMenuRecordingsItem*)Get(Current());
if(item)
{
-#ifdef WITHPINPLUGIN
+#ifdef USE_PINPLUGIN
if(cStatus::MsgReplayProtected(GetRecording(item),item->Name(),base,item->IsDirectory())==true)
return osContinue;
#endif
@@ -700,89 +795,165 @@ eOSState myMenuRecordings::Play()
cRecording *recording=GetRecording(item);
if(recording)
{
- if(item->IsDVD())
+ if(item->IsHDD())
{
- bool isvideodvd=false;
- char dvdnr[BUFSIZ];
+ char hddnr[BUFSIZ];
char *buffer=NULL;
FILE *f;
-
- asprintf(&buffer,"%s/dvd.vdr",recording->FileName());
- if((f=fopen(buffer,"r"))!=NULL)
+
+ if(-1!=asprintf(&buffer,"%s/hdd.vdr",recording->FileName()))
{
- // get the dvd id
- if(fgets(dvdnr,sizeof(dvdnr),f))
+ if((f=fopen(buffer,"r"))!=NULL)
{
- char *p=strchr(dvdnr,'\n');
- if(p)
- *p=0;
+ // get the hdd id
+ if(fgets(hddnr,sizeof(hddnr),f))
+ {
+ char *p=strchr(hddnr,'\n');
+ if(p)
+ *p=0;
+ }
+ fclose(f);
}
- // determine if dvd is a video dvd
- char tmp[BUFSIZ];
- if(fgets(tmp,sizeof(dvdnr),f))
- isvideodvd=true;
-
- fclose(f);
- }
- free(buffer);
+ free(buffer);
+ buffer=NULL;
- asprintf(&msg,tr("Please insert DVD %s"),dvdnr);
- if(Interface->Confirm(msg))
- {
- free(msg);
- // recording is a video dvd
- if(isvideodvd)
+ if(-1!=asprintf(&msg,tr("Please attach Archive-HDD %s"),hddnr))
{
- cPlugin *plugin=cPluginManager::GetPlugin("dvd");
- if(plugin)
+ if(Interface->Confirm(msg))
{
- cOsdObject *osd=plugin->MainMenuAction();
- delete osd;
- osd=NULL;
- return osEnd;
+ free(msg);
+ // recording is an archive hdd
+ strcpy(path,recording->FileName());
+ name=strrchr(path,'/')+1;
+ if(-1!=asprintf(&msg,"hddarchive.sh mount \"%s\" '%s'",*strescape(path,"'"),*strescape(name,"'\\\"$")))
+ {
+ isyslog("[extrecmenu] calling %s to mount Archive-HDD",msg);
+ int result=SystemExec(msg);
+ isyslog("[extrecmenu] hddarchive.sh returns %d",result);
+ free(msg);
+ msg=NULL;
+ if(result)
+ {
+ result=result/256;
+ if(result==1)
+ Skins.Message(mtError,tr("Error while mounting Archive-HDD!"));
+ if(result==3)
+ Skins.Message(mtError,tr("Recording not found on Archive-HDD!"));
+ if(result==4)
+ Skins.Message(mtError,tr("Error while linking [0-9]*.vdr!"));
+ if(result==5)
+ Skins.Message(mtError,tr("sudo or mount --bind / umount error (vfat system)"));
+ if(result==127)
+ Skins.Message(mtError,tr("Script 'hddarchive.sh' not found!"));
+ return osContinue;
+ }
+ washdd=true;
+ }
+ msg=NULL;
}
else
{
- Skins.Message(mtError,tr("DVD plugin is not installed!"));
+ free(msg);
return osContinue;
}
}
- // recording is an archive dvd
- else
+ msg=NULL;
+ }
+ buffer=NULL;
+ } else if(item->IsDVD())
+ {
+ bool isvideodvd=false;
+ char dvdnr[BUFSIZ];
+ char *buffer=NULL;
+ FILE *f;
+
+ if(-1!=asprintf(&buffer,"%s/dvd.vdr",recording->FileName()))
+ {
+ if((f=fopen(buffer,"r"))!=NULL)
+ {
+ // get the dvd id
+ if(fgets(dvdnr,sizeof(dvdnr),f))
+ {
+ char *p=strchr(dvdnr,'\n');
+ if(p)
+ *p=0;
+ }
+ // determine if dvd is a video dvd
+ char tmp[BUFSIZ];
+ if(fgets(tmp,sizeof(dvdnr),f))
+ isvideodvd=true;
+
+ fclose(f);
+ }
+ free(buffer);
+ buffer=NULL;
+
+ if(-1!=asprintf(&msg,tr("Please insert DVD %s"),dvdnr))
{
- strcpy(path,recording->FileName());
- name=strrchr(path,'/')+1;
- asprintf(&msg,"dvdarchive.sh mount \"%s\" '%s'",*strescape(path,"'"),*strescape(name,"'\\\"$"));
-
- isyslog("[extrecmenu] calling %s to mount dvd",msg);
- int result=SystemExec(msg);
- isyslog("[extrecmenu] dvdarchive.sh returns %d",result);
- free(msg);
- if(result)
+ if(Interface->Confirm(msg))
{
- result=result/256;
- if(result==1)
- Skins.Message(mtError,tr("Error while mounting DVD!"));
- if(result==2)
- Skins.Message(mtError,tr("No DVD in drive!"));
- if(result==3)
- Skins.Message(mtError,tr("Recording not found on DVD!"));
- if(result==4)
- Skins.Message(mtError,tr("Error while linking [0-9]*.vdr!"));
- if(result==5)
- Skins.Message(mtError,tr("sudo or mount --bind / umount error (vfat system)"));
- if(result==127)
- Skins.Message(mtError,tr("Script 'dvdarchive.sh' not found!"));
+ free(msg);
+ msg=NULL;
+ // recording is a video dvd
+ if(isvideodvd)
+ {
+ cPlugin *plugin=cPluginManager::GetPlugin("dvd");
+ if(plugin)
+ {
+ cOsdObject *osd=plugin->MainMenuAction();
+ delete osd;
+ osd=NULL;
+ return osEnd;
+ }
+ else
+ {
+ Skins.Message(mtError,tr("DVD plugin is not installed!"));
+ return osContinue;
+ }
+ }
+ // recording is an archive dvd
+ else
+ {
+ strcpy(path,recording->FileName());
+ name=strrchr(path,'/')+1;
+ if(-1!=asprintf(&msg,"dvdarchive.sh mount \"%s\" '%s'",*strescape(path,"'"),*strescape(name,"'\\\"$")))
+ {
+ isyslog("[extrecmenu] calling %s to mount dvd",msg);
+ int result=SystemExec(msg);
+ isyslog("[extrecmenu] dvdarchive.sh returns %d",result);
+ free(msg);
+ msg=NULL;
+ if(result)
+ {
+ result=result/256;
+ if(result==1)
+ Skins.Message(mtError,tr("Error while mounting DVD!"));
+ if(result==2)
+ Skins.Message(mtError,tr("No DVD in drive!"));
+ if(result==3)
+ Skins.Message(mtError,tr("Recording not found on DVD!"));
+ if(result==4)
+ Skins.Message(mtError,tr("Error while linking [0-9]*.vdr!"));
+ if(result==5)
+ Skins.Message(mtError,tr("sudo or mount --bind / umount error (vfat system)"));
+ if(result==127)
+ Skins.Message(mtError,tr("Script 'dvdarchive.sh' not found!"));
+ return osContinue;
+ }
+ wasdvd=true;
+ }
+ msg=NULL;
+ }
+ }
+ else
+ {
+ free(msg);
return osContinue;
}
- wasdvd=true;
}
+ msg=NULL;
}
- else
- {
- free(msg);
- return osContinue;
- }
+ buffer=NULL;
}
golastreplayed=true;
myReplayControl::SetRecording(recording->FileName(),recording->Title());
@@ -806,7 +977,7 @@ eOSState myMenuRecordings::Rewind()
if(item&&!item->IsDirectory())
{
cDevice::PrimaryDevice()->StopReplay();
-#if VDRVERSNUM >= 10703
+#if VDRVERSNUM > 10713
cResumeFile ResumeFile(item->FileName(), item->IsPesRecording());
#else
cResumeFile ResumeFile(item->FileName());
@@ -902,11 +1073,7 @@ eOSState myMenuRecordings::Details()
if(item && !item->IsDirectory())
{
cRecording *recording=GetRecording(item);
-#if VDRVERSNUM >= 10703
- if(recording && recording->IsPesRecording())
-#else
if(recording)
-#endif
return AddSubMenu(new myMenuRecordingDetails(recording));
}
return osContinue;
@@ -957,7 +1124,7 @@ eOSState myMenuRecordings::Commands(eKeys Key)
{
if(HasSubMenu() || Count()==0)
return osContinue;
-
+
myMenuRecordingsItem *item=(myMenuRecordingsItem*)Get(Current());
if(item)
{
@@ -969,14 +1136,18 @@ eOSState myMenuRecordings::Commands(eKeys Key)
{
char *strBase=base?ExchangeChars(strdup(base), true):NULL;
char *strName=ExchangeChars(strdup(item->Name()), true);
- asprintf(&parameter,"\"%s/%s/%s\"",VideoDirectory,strBase?strBase:"", strName);
+ if(-1==asprintf(&parameter,"\"%s/%s/%s\"",VideoDirectory,strBase?strBase:"", strName))
+ parameter=NULL;
free(strBase);
free(strName);
}
else
- asprintf(&parameter,"\"%s\"",recording->FileName());
+ {
+ if(-1==asprintf(&parameter,"\"%s\"",recording->FileName()))
+ parameter=NULL;
+ }
myMenuCommands *menu;
- eOSState state=AddSubMenu(menu=new myMenuCommands(trVDR("Recording commands"),item->IsDirectory() ? &RecordingDirCommands : &RecordingCommands,parameter));
+ eOSState state=AddSubMenu(menu=new myMenuCommands(trVDR("Recording commands"),item->IsDirectory() ? &RecordingDirCommands : &RecordingCommands,parameter?parameter:""));
free(parameter);
if(Key!=kNone)
state=menu->ProcessKey(Key);
@@ -1007,12 +1178,12 @@ eOSState myMenuRecordings::ChangeSorting()
return osContinue;
}
}
- mySortList->Add(new SortListItem(path));
+ mySortList->Add(new SortListItem(path));
mySortList->WriteConfigFile();
Set(true);
Skins.Message(mtInfo,tr("Sort by name"),1);
-
+
return osContinue;
}
@@ -1023,7 +1194,7 @@ eOSState myMenuRecordings::ProcessKey(eKeys Key)
if(edit)
{
myMenuRecordingsItem *item=(myMenuRecordingsItem*)Get(Current());
- if(Key==kRed || Key==kGreen || Key==kYellow || (!item->IsDVD() && Key==kBlue) || Key==kBack)
+ if(Key==kRed || Key==kGreen || Key==kYellow || (!item->IsDVD() && !item->IsHDD() && Key==kBlue) || Key==kBack)
{
edit=false;
helpkeys=-1;
@@ -1033,11 +1204,7 @@ eOSState myMenuRecordings::ProcessKey(eKeys Key)
case kRed: return Rename();
case kGreen: return MoveRec();
case kYellow: return Delete();
-#if VDRVERSNUM >= 10703
- case kBlue: if(item&&!item->IsDVD()&&item->IsPesRecording())
-#else
- case kBlue: if(item&&!item->IsDVD())
-#endif
+ case kBlue: if(item&&!item->IsDVD()&&!item->IsHDD())
return Details();
else
break;
@@ -1098,7 +1265,7 @@ eOSState myMenuRecordings::ProcessKey(eKeys Key)
cRecording *rec=GetRecording(item);
if(rec)
{
-#ifdef WITHPINPLUGIN
+#ifdef USE_PINPLUGIN
if(cStatus::MsgReplayProtected(rec,item->Name(),base,item->IsDirectory())==true)
break;
#endif
@@ -1121,11 +1288,7 @@ eOSState myMenuRecordings::ProcessKey(eKeys Key)
else
{
edit=true;
-#if VDRVERSNUM >= 10703
- SetHelp(tr("Button$Rename"),tr("Button$Move"),tr("Button$Delete"),(item->IsPesRecording()&&!item->IsDVD())?tr("Details"):NULL);
-#else
- SetHelp(tr("Button$Rename"),tr("Button$Move"),tr("Button$Delete"),(!item->IsDVD())?tr("Details"):NULL);
-#endif
+ SetHelp(tr("Button$Rename"),tr("Button$Move"),tr("Button$Delete"),!item->IsDVD()&&!item->IsHDD()?tr("Details"):NULL);
}
}
}
@@ -1141,11 +1304,11 @@ eOSState myMenuRecordings::ProcessKey(eKeys Key)
}
bool stateChanged = Recordings.StateChanged(recordingsstate);
if(stateChanged || MoveCutterThread->IsCutterQueueEmpty())
- Set(true);
-
+ Set(true);
+
if(!Count() && level>0)
state=osBack;
-
+
if((!HasSubMenu() && Key!=kNone) || stateChanged)
SetHelpKeys();
}
diff --git a/mymenurecordings.h b/mymenurecordings.h
index 2604775..236fa3c 100644
--- a/mymenurecordings.h
+++ b/mymenurecordings.h
@@ -4,6 +4,7 @@ class myMenuRecordingsItem:public cOsdItem
private:
bool dirismoving;
bool isdvd;
+ bool ishdd;
bool isPesRecording;
int level,isdirectory;
int totalentries,newentries;
@@ -20,6 +21,7 @@ class myMenuRecordingsItem:public cOsdItem
bool IsPesRecording(void) const { return isPesRecording; }
void IncrementCounter(bool IsNew);
bool IsDVD(){return isdvd;}
+ bool IsHDD(){return ishdd;}
void SetDirIsMoving(bool moving){dirismoving=moving;}
bool GetDirIsMoving(){return dirismoving;}
const char *UniqID(){return uniqid.length()?uniqid.c_str():"";}
@@ -31,6 +33,7 @@ class myMenuRecordings:public cOsdMenu
private:
bool edit;
static bool wasdvd;
+ static bool washdd;
static bool golastreplayed;
static dev_t fsid;
static int freediskspace;
@@ -107,4 +110,5 @@ class myMenuRecordingDetails:public cOsdMenu
public:
myMenuRecordingDetails(cRecording *Recording);
virtual eOSState ProcessKey(eKeys Key);
+ static bool ModifyInfo(cRecording *Recording, const char *Info);
};
diff --git a/mymenusetup.c b/mymenusetup.c
index 1dd1762..9028996 100644
--- a/mymenusetup.c
+++ b/mymenusetup.c
@@ -5,7 +5,7 @@
#include <vdr/menu.h>
#include "mymenusetup.h"
-#if VDRVERSNUM >= 10713
+#if VDRVERSNUM > 10713
cNestedItemList RecordingDirCommands;
#else
cCommands RecordingDirCommands;
@@ -19,7 +19,9 @@ mySetup::mySetup()
mysetup.ShowRecDate=1;
mysetup.ShowRecTime=1;
mysetup.ShowRecLength=0;
+ mysetup.ShowRecRating=0;
mysetup.ShowNewRecs=1;
+ mysetup.ShowOnlyRecs=false;
mysetup.DescendSorting=0;
mysetup.GoLastReplayed=0;
mysetup.ReturnToPlugin=1;
@@ -35,13 +37,14 @@ mySetup mysetup;
myMenuSetup::myMenuSetup()
{
SetCols(36);
-
+
hidemainmenuentry=mysetup.HideMainMenuEntry;
patchnew=mysetup.PatchNew;
replaceorgrecmenu=mysetup.ReplaceOrgRecMenu;
showrecdate=mysetup.ShowRecDate;
showrectime=mysetup.ShowRecTime;
showreclength=mysetup.ShowRecLength;
+ showrecrating=mysetup.ShowRecRating;
shownewrecs=mysetup.ShowNewRecs;
descendsorting=mysetup.DescendSorting;
golastreplayed=mysetup.GoLastReplayed;
@@ -51,13 +54,14 @@ myMenuSetup::myMenuSetup()
patchfont=mysetup.PatchFont;
filesystemfreemb=mysetup.FileSystemFreeMB;
usecutterqueue=mysetup.UseCutterQueue;
-
+
sortingtypetexts[0]=tr("ascending");
sortingtypetexts[1]=tr("descending");
-
+
Add(new cMenuEditBoolItem(tr("Show recording date"),&showrecdate));
Add(new cMenuEditBoolItem(tr("Show recording time"),&showrectime));
Add(new cMenuEditBoolItem(tr("Show recording length"),&showreclength));
+ Add(new cMenuEditBoolItem(tr("Show recording rating"),&showrecrating));
Add(new cMenuEditBoolItem(tr("Show nr. of new recordings of a directory"),&shownewrecs));
Add(new cMenuEditBoolItem(tr("Show alternative to new marker"),&patchnew));
Add(new cMenuEditBoolItem(tr("Show free disk space for each file system"),&filesystemfreemb));
@@ -68,9 +72,6 @@ myMenuSetup::myMenuSetup()
#endif
Add(new cMenuEditBoolItem(tr("Jump to last replayed recording"),&golastreplayed));
Add(new cMenuEditBoolItem(tr("Call plugin after playback"),&returntoplugin));
-#if VDRVERSNUM < 10503
- Add(new cMenuEditBoolItem(tr("Patch font"),&patchfont));
-#endif
Add(new cMenuEditBoolItem(tr("Limit bandwidth for move recordings"),&limitbandwidth));
Add(new cMenuEditBoolItem(tr("Use VDR's recording info menu"),&usevdrsrecinfomenu));
Add(new cMenuEditBoolItem(tr("Use cutter queue"),&usecutterqueue));
@@ -84,6 +85,7 @@ void myMenuSetup::Store()
SetupStore("ShowRecDate",mysetup.ShowRecDate=showrecdate);
SetupStore("ShowRecTime",mysetup.ShowRecTime=showrectime);
SetupStore("ShowRecLength",mysetup.ShowRecLength=showreclength);
+ SetupStore("ShowRecRating",mysetup.ShowRecRating=showrecrating);
SetupStore("ShowNewRecs",mysetup.ShowNewRecs=shownewrecs);
SetupStore("DescendSorting",mysetup.DescendSorting=descendsorting);
SetupStore("GoLastReplayed",mysetup.GoLastReplayed=golastreplayed);
diff --git a/mymenusetup.h b/mymenusetup.h
index 325eb5e..7861155 100644
--- a/mymenusetup.h
+++ b/mymenusetup.h
@@ -6,6 +6,7 @@ extern cNestedItemList RecordingDirCommands;
extern cCommands RecordingDirCommands;
#endif
+
class mySetup
{
public:
@@ -13,9 +14,11 @@ class mySetup
int ShowRecDate;
int ShowRecTime;
int ShowRecLength;
+ int ShowRecRating;
int HideMainMenuEntry;
int ReplaceOrgRecMenu;
int PatchNew;
+ int ShowOnlyRecs;
int ShowNewRecs;
int DescendSorting;
int GoLastReplayed;
@@ -36,6 +39,7 @@ class myMenuSetup:public cMenuSetupPage
int showrecdate;
int showrectime;
int showreclength;
+ int showrecrating;
int hidemainmenuentry;
int replaceorgrecmenu;
int patchnew;
diff --git a/myreplaycontrol.c b/myreplaycontrol.c
index 248fa1d..9403962 100644
--- a/myreplaycontrol.c
+++ b/myreplaycontrol.c
@@ -48,13 +48,12 @@ eOSState myReplayControl::ProcessKey(eKeys Key)
else
{
cMarks _marks;
-#if VDRVERSNUM >= 10703
+ #if VDRVERSNUM > 10713
cRecording Recording(filename);
- _marks.Load(filename, Recording.FramesPerSecond(), Recording.IsPesRecording());
-#else
- _marks.Load(filename);
-#endif
-
+ _marks.Load(filename, Recording.FramesPerSecond(), Recording.IsPesRecording());
+ #else
+ _marks.Load(filename);
+ #endif
if(!_marks.Count())
Skins.Message(mtError,tr("No editing marks defined!"));
else
@@ -69,7 +68,7 @@ eOSState myReplayControl::ProcessKey(eKeys Key)
if(Key==kRed)
timesearchactive=true;
- }
+ }
if(Key==kBack)
return osEnd;
}
diff --git a/po/ca_ES.po b/po/ca_ES.po
index d7f139e..58380c3 100644
--- a/po/ca_ES.po
+++ b/po/ca_ES.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ExtRecMenu 1.2\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2008-08-13 08:38+0200\n"
+"POT-Creation-Date: 2010-06-17 20:39+0200\n"
"PO-Revision-Date: 2008-03-15 16:21+0100\n"
"Last-Translator: Jordi Vilà <jvila@tinet.org>\n"
"Language-Team: <vdr@linuxtv.org>\n"
@@ -80,6 +80,9 @@ msgstr ""
msgid "Error while mounting DVD!"
msgstr ""
+msgid "Error while mounting Archive-HDD!"
+msgstr ""
+
msgid "Button$Commands"
msgstr ""
@@ -93,22 +96,32 @@ msgid "Button$Info"
msgstr ""
#, c-format
-msgid "Please insert DVD %s"
+msgid "Please attach Archive-HDD %s"
msgstr ""
-msgid "DVD plugin is not installed!"
+msgid "Recording not found on Archive-HDD!"
msgstr ""
-msgid "No DVD in drive!"
+msgid "Error while linking [0-9]*.vdr!"
msgstr ""
-msgid "Recording not found on DVD!"
+msgid "sudo or mount --bind / umount error (vfat system)"
msgstr ""
-msgid "Error while linking [0-9]*.vdr!"
+msgid "Script 'hddarchive.sh' not found!"
msgstr ""
-msgid "sudo or mount --bind / umount error (vfat system)"
+#, c-format
+msgid "Please insert DVD %s"
+msgstr ""
+
+msgid "DVD plugin is not installed!"
+msgstr ""
+
+msgid "No DVD in drive!"
+msgstr ""
+
+msgid "Recording not found on DVD!"
msgstr ""
msgid "Script 'dvdarchive.sh' not found!"
@@ -144,6 +157,9 @@ msgstr ""
msgid "Show recording length"
msgstr ""
+msgid "Show recording rating"
+msgstr ""
+
msgid "Show nr. of new recordings of a directory"
msgstr ""
@@ -168,9 +184,6 @@ msgstr ""
msgid "Call plugin after playback"
msgstr ""
-msgid "Patch font"
-msgstr ""
-
msgid "Limit bandwidth for move recordings"
msgstr ""
diff --git a/po/cs_CZ.po b/po/cs_CZ.po
index 72fdfc4..d176a81 100644
--- a/po/cs_CZ.po
+++ b/po/cs_CZ.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ExtRecMenu 1.2\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2008-08-13 08:38+0200\n"
+"POT-Creation-Date: 2010-06-17 20:39+0200\n"
"PO-Revision-Date: 2008-03-15 16:21+0100\n"
"Last-Translator: Vladimír Bárta <vladimir.barta@k2atmitec.cz>\n"
"Language-Team: <vdr@linuxtv.org>\n"
@@ -78,6 +78,9 @@ msgstr "Velikost"
msgid "Error while mounting DVD!"
msgstr "Chyba bìhem pøipojování DVD!"
+msgid "Error while mounting Archive-HDD!"
+msgstr ""
+
msgid "Button$Commands"
msgstr "Pøíkazy"
@@ -91,6 +94,22 @@ msgid "Button$Info"
msgstr "Info"
#, c-format
+msgid "Please attach Archive-HDD %s"
+msgstr ""
+
+msgid "Recording not found on Archive-HDD!"
+msgstr ""
+
+msgid "Error while linking [0-9]*.vdr!"
+msgstr "Chyba pøi spojování [0-9]*.vdr!"
+
+msgid "sudo or mount --bind / umount error (vfat system)"
+msgstr "sudo nebo mount --bind / umount selhal (VFAT-systém)"
+
+msgid "Script 'hddarchive.sh' not found!"
+msgstr ""
+
+#, c-format
msgid "Please insert DVD %s"
msgstr "Vlo¾te prosím DVD %s"
@@ -103,12 +122,6 @@ msgstr "V jednotce není DVD!"
msgid "Recording not found on DVD!"
msgstr "Nahrávka nebyla na DVD nalezena!"
-msgid "Error while linking [0-9]*.vdr!"
-msgstr "Chyba pøi spojování [0-9]*.vdr!"
-
-msgid "sudo or mount --bind / umount error (vfat system)"
-msgstr "sudo nebo mount --bind / umount selhal (VFAT-systém)"
-
msgid "Script 'dvdarchive.sh' not found!"
msgstr "Skript 'dvdarchive.sh' nebyl nalezen!"
@@ -142,6 +155,9 @@ msgstr "Zobrazit èas nahrávky"
msgid "Show recording length"
msgstr "Zobrazit délku nahrávky"
+msgid "Show recording rating"
+msgstr ""
+
msgid "Show nr. of new recordings of a directory"
msgstr "Zobrazovat poèet nových nahrávek v adresáøi"
@@ -166,9 +182,6 @@ msgstr "Skoèit na poslední pøehrávanou nahrávku"
msgid "Call plugin after playback"
msgstr "Návrat do modulu po ukonèení pøehrávání"
-msgid "Patch font"
-msgstr "Upravit font"
-
msgid "Limit bandwidth for move recordings"
msgstr "Omezit rychlost pro pøesun nahrávek"
@@ -198,3 +211,6 @@ msgstr "Probíhá pøesouvání nahrávek"
msgid "Can't start editing process!"
msgstr ""
+
+#~ msgid "Patch font"
+#~ msgstr "Upravit font"
diff --git a/po/da_DK.po b/po/da_DK.po
index d213ec1..028dfc2 100644
--- a/po/da_DK.po
+++ b/po/da_DK.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ExtRecMenu 1.2\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2008-08-13 08:38+0200\n"
+"POT-Creation-Date: 2010-06-17 20:39+0200\n"
"PO-Revision-Date: 2008-03-15 16:21+0100\n"
"Last-Translator: Mogens Elneff <mogens@elneff.dk>\n"
"Language-Team: <vdr@linuxtv.org>\n"
@@ -78,6 +78,9 @@ msgstr ""
msgid "Error while mounting DVD!"
msgstr ""
+msgid "Error while mounting Archive-HDD!"
+msgstr ""
+
msgid "Button$Commands"
msgstr ""
@@ -91,22 +94,32 @@ msgid "Button$Info"
msgstr ""
#, c-format
-msgid "Please insert DVD %s"
+msgid "Please attach Archive-HDD %s"
msgstr ""
-msgid "DVD plugin is not installed!"
+msgid "Recording not found on Archive-HDD!"
msgstr ""
-msgid "No DVD in drive!"
+msgid "Error while linking [0-9]*.vdr!"
msgstr ""
-msgid "Recording not found on DVD!"
+msgid "sudo or mount --bind / umount error (vfat system)"
msgstr ""
-msgid "Error while linking [0-9]*.vdr!"
+msgid "Script 'hddarchive.sh' not found!"
msgstr ""
-msgid "sudo or mount --bind / umount error (vfat system)"
+#, c-format
+msgid "Please insert DVD %s"
+msgstr ""
+
+msgid "DVD plugin is not installed!"
+msgstr ""
+
+msgid "No DVD in drive!"
+msgstr ""
+
+msgid "Recording not found on DVD!"
msgstr ""
msgid "Script 'dvdarchive.sh' not found!"
@@ -142,6 +155,9 @@ msgstr ""
msgid "Show recording length"
msgstr ""
+msgid "Show recording rating"
+msgstr ""
+
msgid "Show nr. of new recordings of a directory"
msgstr ""
@@ -166,9 +182,6 @@ msgstr ""
msgid "Call plugin after playback"
msgstr ""
-msgid "Patch font"
-msgstr ""
-
msgid "Limit bandwidth for move recordings"
msgstr ""
diff --git a/po/de_DE.po b/po/de_DE.po
index d7663ca..3accc9c 100644
--- a/po/de_DE.po
+++ b/po/de_DE.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ExtRecMenu 1.2\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2008-08-13 08:38+0200\n"
+"POT-Creation-Date: 2010-07-03 10:55+0200\n"
"PO-Revision-Date: 2008-03-15 16:21+0100\n"
"Last-Translator: Klaus Schmidinger <kls@cadsoft.de>\n"
"Language-Team: <vdr@linuxtv.org>\n"
@@ -25,7 +25,7 @@ msgid "Invalid filename!"
msgstr "Ungültiger Dateiname!"
msgid "Creating directories failed!"
-msgstr ""
+msgstr "Erstellen des Verzeichnisses fehlgeschlagen!"
msgid "New folder"
msgstr "Neues Verzeichnis"
@@ -70,7 +70,7 @@ msgid "Path"
msgstr "Pfad"
msgid "Channel"
-msgstr ""
+msgstr "Kanal"
msgid "Size"
msgstr "Größe"
@@ -78,6 +78,9 @@ msgstr "Größe"
msgid "Error while mounting DVD!"
msgstr "Fehler beim Einhängen der DVD!"
+msgid "Error while mounting Archive-HDD!"
+msgstr "Fehler beim Einhängen der Archiv-HDD!"
+
msgid "Button$Commands"
msgstr "Befehle"
@@ -91,6 +94,22 @@ msgid "Button$Info"
msgstr "Info"
#, c-format
+msgid "Please attach Archive-HDD %s"
+msgstr "Bitte Archiv-HDD %s anschliessen"
+
+msgid "Recording not found on Archive-HDD!"
+msgstr "Aufzeichnung auf der Archiv-HDD nicht gefunden!"
+
+msgid "Error while linking [0-9]*.vdr!"
+msgstr "Fehler beim Anlegen der Symlinks [0-9]*.vdr!"
+
+msgid "sudo or mount --bind / umount error (vfat system)"
+msgstr "sudo oder mount --bind / umount Fehler (VFAT-System)"
+
+msgid "Script 'hddarchive.sh' not found!"
+msgstr "Skript 'hddarchive.sh' wurde nicht gefunden!"
+
+#, c-format
msgid "Please insert DVD %s"
msgstr "Bitte DVD %s einlegen"
@@ -103,12 +122,6 @@ msgstr "Keine DVD im Laufwerk!"
msgid "Recording not found on DVD!"
msgstr "Aufzeichnung auf DVD nicht gefunden!"
-msgid "Error while linking [0-9]*.vdr!"
-msgstr "Fehler beim Anlegen der Symlinks [0-9]*.vdr!"
-
-msgid "sudo or mount --bind / umount error (vfat system)"
-msgstr "sudo oder mount --bind / umount Fehler (VFAT-System)"
-
msgid "Script 'dvdarchive.sh' not found!"
msgstr "Skript 'dvdarchive.sh' wurde nicht gefunden!"
@@ -142,6 +155,9 @@ msgstr "Aufnahmezeit anzeigen"
msgid "Show recording length"
msgstr "Aufnahmelänge anzeigen"
+msgid "Show recording rating"
+msgstr "Aufnahmenbewertung anzeigen"
+
msgid "Show nr. of new recordings of a directory"
msgstr "Anzahl der neuen Aufz. eines Ordners anzeigen"
@@ -166,9 +182,6 @@ msgstr "Springe zur zuletzt abgespielten Aufzeichnung"
msgid "Call plugin after playback"
msgstr "Nach Wiedergabe Plugin aufrufen"
-msgid "Patch font"
-msgstr "Font patchen"
-
msgid "Limit bandwidth for move recordings"
msgstr "Bandbreite beim Verschieben begrenzen"
@@ -182,7 +195,7 @@ msgid "Recording already in cutter queue!"
msgstr "Aufzeichnung bereits in Schnitt-Warteschlange"
msgid "No editing marks defined!"
-msgstr ""
+msgstr "Keine Schnittmarken vorhanden!"
msgid "Added recording to cutter queue"
msgstr "Aufzeichnung der Schnitt-Warteschlange hinzugefügt"
@@ -197,4 +210,4 @@ msgid "Move recordings in progress"
msgstr "Es werden Aufzeichnungen verschoben"
msgid "Can't start editing process!"
-msgstr ""
+msgstr "Kann Schneidevorgang nicht starten!"
diff --git a/po/el_GR.po b/po/el_GR.po
index 9d358a2..7786912 100644
--- a/po/el_GR.po
+++ b/po/el_GR.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ExtRecMenu 1.2\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2008-08-13 08:38+0200\n"
+"POT-Creation-Date: 2010-06-17 20:39+0200\n"
"PO-Revision-Date: 2008-03-15 16:21+0100\n"
"Last-Translator: Dimitrios Dimitrakos <mail@dimitrios.de>\n"
"Language-Team: <vdr@linuxtv.org>\n"
@@ -78,6 +78,9 @@ msgstr ""
msgid "Error while mounting DVD!"
msgstr ""
+msgid "Error while mounting Archive-HDD!"
+msgstr ""
+
msgid "Button$Commands"
msgstr ""
@@ -91,22 +94,32 @@ msgid "Button$Info"
msgstr ""
#, c-format
-msgid "Please insert DVD %s"
+msgid "Please attach Archive-HDD %s"
msgstr ""
-msgid "DVD plugin is not installed!"
+msgid "Recording not found on Archive-HDD!"
msgstr ""
-msgid "No DVD in drive!"
+msgid "Error while linking [0-9]*.vdr!"
msgstr ""
-msgid "Recording not found on DVD!"
+msgid "sudo or mount --bind / umount error (vfat system)"
msgstr ""
-msgid "Error while linking [0-9]*.vdr!"
+msgid "Script 'hddarchive.sh' not found!"
msgstr ""
-msgid "sudo or mount --bind / umount error (vfat system)"
+#, c-format
+msgid "Please insert DVD %s"
+msgstr ""
+
+msgid "DVD plugin is not installed!"
+msgstr ""
+
+msgid "No DVD in drive!"
+msgstr ""
+
+msgid "Recording not found on DVD!"
msgstr ""
msgid "Script 'dvdarchive.sh' not found!"
@@ -142,6 +155,9 @@ msgstr ""
msgid "Show recording length"
msgstr ""
+msgid "Show recording rating"
+msgstr ""
+
msgid "Show nr. of new recordings of a directory"
msgstr ""
@@ -166,9 +182,6 @@ msgstr ""
msgid "Call plugin after playback"
msgstr ""
-msgid "Patch font"
-msgstr ""
-
msgid "Limit bandwidth for move recordings"
msgstr ""
diff --git a/po/es_ES.po b/po/es_ES.po
index a9c982c..f6495ce 100644
--- a/po/es_ES.po
+++ b/po/es_ES.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ExtRecMenu 1.2\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2008-08-13 08:38+0200\n"
+"POT-Creation-Date: 2010-06-17 20:39+0200\n"
"PO-Revision-Date: 2008-03-15 16:21+0100\n"
"Last-Translator: Ruben Nunez Francisco <ruben.nunez@tang-it.com>\n"
"Language-Team: <vdr@linuxtv.org>\n"
@@ -78,6 +78,9 @@ msgstr ""
msgid "Error while mounting DVD!"
msgstr ""
+msgid "Error while mounting Archive-HDD!"
+msgstr ""
+
msgid "Button$Commands"
msgstr ""
@@ -91,22 +94,32 @@ msgid "Button$Info"
msgstr ""
#, c-format
-msgid "Please insert DVD %s"
+msgid "Please attach Archive-HDD %s"
msgstr ""
-msgid "DVD plugin is not installed!"
+msgid "Recording not found on Archive-HDD!"
msgstr ""
-msgid "No DVD in drive!"
+msgid "Error while linking [0-9]*.vdr!"
msgstr ""
-msgid "Recording not found on DVD!"
+msgid "sudo or mount --bind / umount error (vfat system)"
msgstr ""
-msgid "Error while linking [0-9]*.vdr!"
+msgid "Script 'hddarchive.sh' not found!"
msgstr ""
-msgid "sudo or mount --bind / umount error (vfat system)"
+#, c-format
+msgid "Please insert DVD %s"
+msgstr ""
+
+msgid "DVD plugin is not installed!"
+msgstr ""
+
+msgid "No DVD in drive!"
+msgstr ""
+
+msgid "Recording not found on DVD!"
msgstr ""
msgid "Script 'dvdarchive.sh' not found!"
@@ -142,6 +155,9 @@ msgstr ""
msgid "Show recording length"
msgstr ""
+msgid "Show recording rating"
+msgstr ""
+
msgid "Show nr. of new recordings of a directory"
msgstr ""
@@ -166,9 +182,6 @@ msgstr ""
msgid "Call plugin after playback"
msgstr ""
-msgid "Patch font"
-msgstr ""
-
msgid "Limit bandwidth for move recordings"
msgstr ""
diff --git a/po/et_EE.po b/po/et_EE.po
index a0ca66c..363b88d 100644
--- a/po/et_EE.po
+++ b/po/et_EE.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ExtRecMenu 1.2\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2008-08-13 08:38+0200\n"
+"POT-Creation-Date: 2010-06-17 20:39+0200\n"
"PO-Revision-Date: 2008-03-15 16:21+0100\n"
"Last-Translator: Arthur Konovalov <kasjas@hot.ee>\n"
"Language-Team: <vdr@linuxtv.org>\n"
@@ -78,6 +78,9 @@ msgstr ""
msgid "Error while mounting DVD!"
msgstr ""
+msgid "Error while mounting Archive-HDD!"
+msgstr ""
+
msgid "Button$Commands"
msgstr ""
@@ -91,22 +94,32 @@ msgid "Button$Info"
msgstr ""
#, c-format
-msgid "Please insert DVD %s"
+msgid "Please attach Archive-HDD %s"
msgstr ""
-msgid "DVD plugin is not installed!"
+msgid "Recording not found on Archive-HDD!"
msgstr ""
-msgid "No DVD in drive!"
+msgid "Error while linking [0-9]*.vdr!"
msgstr ""
-msgid "Recording not found on DVD!"
+msgid "sudo or mount --bind / umount error (vfat system)"
msgstr ""
-msgid "Error while linking [0-9]*.vdr!"
+msgid "Script 'hddarchive.sh' not found!"
msgstr ""
-msgid "sudo or mount --bind / umount error (vfat system)"
+#, c-format
+msgid "Please insert DVD %s"
+msgstr ""
+
+msgid "DVD plugin is not installed!"
+msgstr ""
+
+msgid "No DVD in drive!"
+msgstr ""
+
+msgid "Recording not found on DVD!"
msgstr ""
msgid "Script 'dvdarchive.sh' not found!"
@@ -142,6 +155,9 @@ msgstr ""
msgid "Show recording length"
msgstr ""
+msgid "Show recording rating"
+msgstr ""
+
msgid "Show nr. of new recordings of a directory"
msgstr ""
@@ -166,9 +182,6 @@ msgstr ""
msgid "Call plugin after playback"
msgstr ""
-msgid "Patch font"
-msgstr ""
-
msgid "Limit bandwidth for move recordings"
msgstr ""
diff --git a/po/fi_FI.po b/po/fi_FI.po
index 4e91323..6fb7a2a 100644
--- a/po/fi_FI.po
+++ b/po/fi_FI.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ExtRecMenu 1.2\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2008-08-13 08:38+0200\n"
+"POT-Creation-Date: 2010-06-17 20:39+0200\n"
"PO-Revision-Date: 2008-03-15 16:21+0100\n"
"Last-Translator: Rolf Ahrenberg <rahrenbe@cc.hut.fi>\n"
"Language-Team: <vdr@linuxtv.org>\n"
@@ -81,6 +81,9 @@ msgstr "Koko"
msgid "Error while mounting DVD!"
msgstr "DVD:n avaaminen epäonnistui!"
+msgid "Error while mounting Archive-HDD!"
+msgstr ""
+
msgid "Button$Commands"
msgstr "Komennot"
@@ -94,6 +97,22 @@ msgid "Button$Info"
msgstr "Tiedot"
#, c-format
+msgid "Please attach Archive-HDD %s"
+msgstr ""
+
+msgid "Recording not found on Archive-HDD!"
+msgstr ""
+
+msgid "Error while linking [0-9]*.vdr!"
+msgstr "Tiedostojen [0-9]*.vdr linkittäminen epäonnistui!"
+
+msgid "sudo or mount --bind / umount error (vfat system)"
+msgstr "Sudo tai mount --bind / umount -komento epäonnistui (VFAT)!"
+
+msgid "Script 'hddarchive.sh' not found!"
+msgstr ""
+
+#, c-format
msgid "Please insert DVD %s"
msgstr "Laita DVD %s asemaan"
@@ -106,12 +125,6 @@ msgstr "Asemassa ei ole DVD-levyä!"
msgid "Recording not found on DVD!"
msgstr "Tallennetta ei löydy DVD:ltä!"
-msgid "Error while linking [0-9]*.vdr!"
-msgstr "Tiedostojen [0-9]*.vdr linkittäminen epäonnistui!"
-
-msgid "sudo or mount --bind / umount error (vfat system)"
-msgstr "Sudo tai mount --bind / umount -komento epäonnistui (VFAT)!"
-
msgid "Script 'dvdarchive.sh' not found!"
msgstr "'dvdarchive.sh'-skriptiä ei löydetä!"
@@ -145,6 +158,9 @@ msgstr "Näytä tallenteen ajankohta"
msgid "Show recording length"
msgstr "Näytä tallenteen kesto"
+msgid "Show recording rating"
+msgstr ""
+
msgid "Show nr. of new recordings of a directory"
msgstr "Näytä uusien tallenteiden lukumäärä"
@@ -169,9 +185,6 @@ msgstr "Siirry viimeksi toistettuun tallenteeseen"
msgid "Call plugin after playback"
msgstr "Avaa laajennos toiston loputtua"
-msgid "Patch font"
-msgstr "Käytä paikattua kirjasinta"
-
msgid "Limit bandwidth for move recordings"
msgstr "Rajoita tallenteiden siirtokaistaa"
@@ -201,3 +214,6 @@ msgstr "Tallenteiden siirto käynnissä"
msgid "Can't start editing process!"
msgstr ""
+
+#~ msgid "Patch font"
+#~ msgstr "Käytä paikattua kirjasinta"
diff --git a/po/fr_FR.po b/po/fr_FR.po
index b74fae8..34e2899 100644
--- a/po/fr_FR.po
+++ b/po/fr_FR.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ExtRecMenu 1.2\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2008-08-13 08:38+0200\n"
+"POT-Creation-Date: 2010-06-17 20:39+0200\n"
"PO-Revision-Date: 2008-03-15 16:21+0100\n"
"Last-Translator: Nicolas Huillard <nhuillard@e-dition.fr>\n"
"Language-Team: <vdr@linuxtv.org>\n"
@@ -81,6 +81,9 @@ msgstr "Taille"
msgid "Error while mounting DVD!"
msgstr "Erreur lors du montage du DVD!"
+msgid "Error while mounting Archive-HDD!"
+msgstr ""
+
msgid "Button$Commands"
msgstr "Commande"
@@ -94,6 +97,22 @@ msgid "Button$Info"
msgstr "Info"
#, c-format
+msgid "Please attach Archive-HDD %s"
+msgstr ""
+
+msgid "Recording not found on Archive-HDD!"
+msgstr ""
+
+msgid "Error while linking [0-9]*.vdr!"
+msgstr "Erreur lors de la création des racourcis [0-9]*.vdr!"
+
+msgid "sudo or mount --bind / umount error (vfat system)"
+msgstr "Erreur sudo ou mount --bind / umount (Systeme VFAT)"
+
+msgid "Script 'hddarchive.sh' not found!"
+msgstr ""
+
+#, c-format
msgid "Please insert DVD %s"
msgstr "Mettez le DVD %s dans le lecteur"
@@ -106,12 +125,6 @@ msgstr "Pas de DVD dans le lecteur!"
msgid "Recording not found on DVD!"
msgstr "Il n'y a pas d'enregistrement sur le DVD!"
-msgid "Error while linking [0-9]*.vdr!"
-msgstr "Erreur lors de la création des racourcis [0-9]*.vdr!"
-
-msgid "sudo or mount --bind / umount error (vfat system)"
-msgstr "Erreur sudo ou mount --bind / umount (Systeme VFAT)"
-
msgid "Script 'dvdarchive.sh' not found!"
msgstr "Impossible de trouver le script 'dvdarchive.sh'!"
@@ -145,6 +158,9 @@ msgstr "Afficher l'heure d'enregistrement"
msgid "Show recording length"
msgstr "Afficher la longeur de l'enregistrement"
+msgid "Show recording rating"
+msgstr ""
+
msgid "Show nr. of new recordings of a directory"
msgstr "Afficher le nombre de nouveaux enregistrements dans les dossiers"
@@ -169,9 +185,6 @@ msgstr "Retour au dernier enregistrement lu"
msgid "Call plugin after playback"
msgstr "Après la lecture démarer le plugin"
-msgid "Patch font"
-msgstr "Patch des police"
-
msgid "Limit bandwidth for move recordings"
msgstr "Limiter la bande passante lors du déplacement"
@@ -201,3 +214,6 @@ msgstr "Des enregistrements sont en déplacement"
msgid "Can't start editing process!"
msgstr ""
+
+#~ msgid "Patch font"
+#~ msgstr "Patch des police"
diff --git a/po/hr_HR.po b/po/hr_HR.po
index 222dcd6..fd570e0 100644
--- a/po/hr_HR.po
+++ b/po/hr_HR.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ExtRecMenu 1.2\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2008-08-13 08:38+0200\n"
+"POT-Creation-Date: 2010-06-17 20:39+0200\n"
"PO-Revision-Date: 2008-03-15 16:21+0100\n"
"Last-Translator: Drazen Dupor <drazen.dupor@dupor.com>\n"
"Language-Team: <vdr@linuxtv.org>\n"
@@ -79,6 +79,9 @@ msgstr ""
msgid "Error while mounting DVD!"
msgstr ""
+msgid "Error while mounting Archive-HDD!"
+msgstr ""
+
msgid "Button$Commands"
msgstr ""
@@ -92,22 +95,32 @@ msgid "Button$Info"
msgstr ""
#, c-format
-msgid "Please insert DVD %s"
+msgid "Please attach Archive-HDD %s"
msgstr ""
-msgid "DVD plugin is not installed!"
+msgid "Recording not found on Archive-HDD!"
msgstr ""
-msgid "No DVD in drive!"
+msgid "Error while linking [0-9]*.vdr!"
msgstr ""
-msgid "Recording not found on DVD!"
+msgid "sudo or mount --bind / umount error (vfat system)"
msgstr ""
-msgid "Error while linking [0-9]*.vdr!"
+msgid "Script 'hddarchive.sh' not found!"
msgstr ""
-msgid "sudo or mount --bind / umount error (vfat system)"
+#, c-format
+msgid "Please insert DVD %s"
+msgstr ""
+
+msgid "DVD plugin is not installed!"
+msgstr ""
+
+msgid "No DVD in drive!"
+msgstr ""
+
+msgid "Recording not found on DVD!"
msgstr ""
msgid "Script 'dvdarchive.sh' not found!"
@@ -143,6 +156,9 @@ msgstr ""
msgid "Show recording length"
msgstr ""
+msgid "Show recording rating"
+msgstr ""
+
msgid "Show nr. of new recordings of a directory"
msgstr ""
@@ -167,9 +183,6 @@ msgstr ""
msgid "Call plugin after playback"
msgstr ""
-msgid "Patch font"
-msgstr ""
-
msgid "Limit bandwidth for move recordings"
msgstr ""
diff --git a/po/hu_HU.po b/po/hu_HU.po
index eba5247..aeae350 100644
--- a/po/hu_HU.po
+++ b/po/hu_HU.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ExtRecMenu 1.2\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2008-08-13 08:38+0200\n"
+"POT-Creation-Date: 2010-06-17 20:39+0200\n"
"PO-Revision-Date: 2008-03-15 16:21+0100\n"
"Last-Translator: Istvan Koenigsberger <istvnko@hotmail.com>, Guido Josten <guido.josten@t-online.de>\n"
"Language-Team: <vdr@linuxtv.org>\n"
@@ -79,6 +79,9 @@ msgstr ""
msgid "Error while mounting DVD!"
msgstr ""
+msgid "Error while mounting Archive-HDD!"
+msgstr ""
+
msgid "Button$Commands"
msgstr ""
@@ -92,22 +95,32 @@ msgid "Button$Info"
msgstr ""
#, c-format
-msgid "Please insert DVD %s"
+msgid "Please attach Archive-HDD %s"
msgstr ""
-msgid "DVD plugin is not installed!"
+msgid "Recording not found on Archive-HDD!"
msgstr ""
-msgid "No DVD in drive!"
+msgid "Error while linking [0-9]*.vdr!"
msgstr ""
-msgid "Recording not found on DVD!"
+msgid "sudo or mount --bind / umount error (vfat system)"
msgstr ""
-msgid "Error while linking [0-9]*.vdr!"
+msgid "Script 'hddarchive.sh' not found!"
msgstr ""
-msgid "sudo or mount --bind / umount error (vfat system)"
+#, c-format
+msgid "Please insert DVD %s"
+msgstr ""
+
+msgid "DVD plugin is not installed!"
+msgstr ""
+
+msgid "No DVD in drive!"
+msgstr ""
+
+msgid "Recording not found on DVD!"
msgstr ""
msgid "Script 'dvdarchive.sh' not found!"
@@ -143,6 +156,9 @@ msgstr ""
msgid "Show recording length"
msgstr ""
+msgid "Show recording rating"
+msgstr ""
+
msgid "Show nr. of new recordings of a directory"
msgstr ""
@@ -167,9 +183,6 @@ msgstr ""
msgid "Call plugin after playback"
msgstr ""
-msgid "Patch font"
-msgstr ""
-
msgid "Limit bandwidth for move recordings"
msgstr ""
diff --git a/po/it_IT.po b/po/it_IT.po
index a0741ac..f740e31 100644
--- a/po/it_IT.po
+++ b/po/it_IT.po
@@ -9,16 +9,19 @@ msgid ""
msgstr ""
"Project-Id-Version: ExtRecMenu 1.2\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2008-08-13 08:38+0200\n"
-"PO-Revision-Date: 2008-03-15 16:21+0100\n"
-"Last-Translator: Sean Carlos <seanc@libero.it>\n"
-"Language-Team: <vdr@linuxtv.org>\n"
+"POT-Creation-Date: 2010-06-17 20:39+0200\n"
+"PO-Revision-Date: 2010-08-07 23:10+0100\n"
+"Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n"
+"Language-Team: <vdr@linuxtv.org>\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-15\n"
+"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: Italian\n"
+"X-Poedit-Country: ITALY\n"
+"X-Poedit-SourceCharset: utf-8\n"
msgid "Extended recordings menu"
-msgstr "Menu registrazioni esteso"
+msgstr "Menu registrazioni avanzato"
msgid "Rename"
msgstr "Rinomina"
@@ -27,10 +30,10 @@ msgid "Invalid filename!"
msgstr "Nome file non valido!"
msgid "Creating directories failed!"
-msgstr ""
+msgstr "Creazione directory fallita!"
msgid "New folder"
-msgstr "Nuova cartella"
+msgstr "Nuova directory"
msgid "Button$Cancel"
msgstr "Annulla"
@@ -45,19 +48,19 @@ msgid "[base dir]"
msgstr "[dir. base]"
msgid "Target filesystem filled - try anyway?"
-msgstr "Partizione di destinazione piena - provare comunque?"
+msgstr "Destinazione senza spazio - provare comunque?"
msgid "Moving into own sub-directory not allowed!"
-msgstr "Spostamento all'interno di sotto directory non permesso!"
+msgstr "Spostamento nella sotto directory non permesso!"
msgid "Can't get filesystem information"
-msgstr "Impossibile ottenere informazioni sulla partizione"
+msgstr "Impossibile ottenere info sulla partizione"
msgid "Details"
msgstr "Dettagli"
msgid "Button$Play"
-msgstr "Esegui"
+msgstr "Riproduci"
msgid "Button$Rewind"
msgstr "Riavvolgi"
@@ -66,13 +69,13 @@ msgid "Button$Back"
msgstr "Indietro"
msgid "Name"
-msgstr ""
+msgstr "Nome"
msgid "Path"
msgstr "Percorso"
msgid "Channel"
-msgstr ""
+msgstr "Canale"
msgid "Size"
msgstr "Dimensione"
@@ -80,6 +83,9 @@ msgstr "Dimensione"
msgid "Error while mounting DVD!"
msgstr "Errore durante montaggio DVD!"
+msgid "Error while mounting Archive-HDD!"
+msgstr "Errore durante montaggio archivio DVD!"
+
msgid "Button$Commands"
msgstr "Comandi"
@@ -93,8 +99,24 @@ msgid "Button$Info"
msgstr "Info"
#, c-format
+msgid "Please attach Archive-HDD %s"
+msgstr "Allega archivio HDD %s"
+
+msgid "Recording not found on Archive-HDD!"
+msgstr "Registrazione non trovata nell'archivio HDD!"
+
+msgid "Error while linking [0-9]*.vdr!"
+msgstr "Errore creazione collegamento [0-9]*.vdr!"
+
+msgid "sudo or mount --bind / umount error (vfat system)"
+msgstr "Errore sudo o mount --bind / umount (sistema vfat)"
+
+msgid "Script 'hddarchive.sh' not found!"
+msgstr "Script 'hddarchive.sh' non trovato!"
+
+#, c-format
msgid "Please insert DVD %s"
-msgstr "Per favore inserisci DVD %s"
+msgstr "Inserisci il DVD %s"
msgid "DVD plugin is not installed!"
msgstr "Plugin DVD non installato!"
@@ -105,12 +127,6 @@ msgstr "Nessun DVD nel lettore!"
msgid "Recording not found on DVD!"
msgstr "Registrazione non trovata nel DVD!"
-msgid "Error while linking [0-9]*.vdr!"
-msgstr "Errore creazione collegamento [0-9]*.vdr!"
-
-msgid "sudo or mount --bind / umount error (vfat system)"
-msgstr "Errore sudo o mount --bind / umount (sistema vfat)"
-
msgid "Script 'dvdarchive.sh' not found!"
msgstr "Script 'dvdarchive.sh non trovato!"
@@ -121,16 +137,16 @@ msgid "Sort by name"
msgstr "Ordina per nome"
msgid "Cancel moving?"
-msgstr "Anullare spostamento?"
+msgstr "Annullare spostamento?"
msgid "Button$Rename"
msgstr "Rinomina"
msgid "Button$Delete"
-msgstr "Cancella"
+msgstr "Elimina"
msgid "ascending"
-msgstr "ascendente"
+msgstr "crescente"
msgid "descending"
msgstr "decrescente"
@@ -144,47 +160,47 @@ msgstr "Mostra ora registrazione"
msgid "Show recording length"
msgstr "Mostra durata registrazione"
+msgid "Show recording rating"
+msgstr "Mostra valutazione registrazione"
+
msgid "Show nr. of new recordings of a directory"
-msgstr "Mostra numero di nuove registrazioni di una directory"
+msgstr "Mostra num. nuove reg. directory"
msgid "Show alternative to new marker"
-msgstr "Mostra alternative al nuovo marcatore"
+msgstr "Mostra opzioni nuovo marcatore"
msgid "Show free disk space for each file system"
-msgstr "Mostra spazio libero per ogni partizione"
+msgstr "Mostra spazio disponibile partizioni"
msgid "Sorting"
msgstr "Ordinamento"
msgid "Hide main menu entry"
-msgstr "Nascondi voce nel menu principale"
+msgstr "Nascondi voce menu principale"
msgid "Replace original recordings menu"
-msgstr "Sostituisci menu registrazioni originale"
+msgstr "Sostituisci menu reg. originale"
msgid "Jump to last replayed recording"
-msgstr "Vai all'ultima registrazione riprodotta"
+msgstr "Vai all'ultima reg. riprodotta"
msgid "Call plugin after playback"
msgstr "Chiama plugin dopo esecuzione"
-msgid "Patch font"
-msgstr "Patch caratteri"
-
msgid "Limit bandwidth for move recordings"
-msgstr "Limiti banda per spostamento registrazioni"
+msgstr "Limita banda spostamento reg."
msgid "Use VDR's recording info menu"
-msgstr "Utilizza menu info registrazioni di VDR"
+msgstr "Utilizza menu info reg. di VDR"
msgid "Use cutter queue"
msgstr "Utilizza coda tagli"
msgid "Recording already in cutter queue!"
-msgstr "Registrazione già presente nella coda tagli!"
+msgstr "Registrazione già presente nella coda tagli!"
msgid "No editing marks defined!"
-msgstr ""
+msgstr "Nessun marcatore di modifica definito!"
msgid "Added recording to cutter queue"
msgstr "Aggiunta registrazione alla coda tagli"
@@ -199,4 +215,4 @@ msgid "Move recordings in progress"
msgstr "Spostamento registrazioni in corso"
msgid "Can't start editing process!"
-msgstr ""
+msgstr "Impossibile avviare il processo di modifica!"
diff --git a/po/nl_NL.po b/po/nl_NL.po
index 1db01a6..4a436d8 100644
--- a/po/nl_NL.po
+++ b/po/nl_NL.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ExtRecMenu 1.2\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2008-08-13 08:38+0200\n"
+"POT-Creation-Date: 2010-06-17 20:39+0200\n"
"PO-Revision-Date: 2008-03-15 16:21+0100\n"
"Last-Translator: Maarten Wisse <Maarten.Wisse@urz.uni-hd.de>\n"
"Language-Team: <vdr@linuxtv.org>\n"
@@ -80,6 +80,9 @@ msgstr ""
msgid "Error while mounting DVD!"
msgstr ""
+msgid "Error while mounting Archive-HDD!"
+msgstr ""
+
msgid "Button$Commands"
msgstr ""
@@ -93,22 +96,32 @@ msgid "Button$Info"
msgstr ""
#, c-format
-msgid "Please insert DVD %s"
+msgid "Please attach Archive-HDD %s"
msgstr ""
-msgid "DVD plugin is not installed!"
+msgid "Recording not found on Archive-HDD!"
msgstr ""
-msgid "No DVD in drive!"
+msgid "Error while linking [0-9]*.vdr!"
msgstr ""
-msgid "Recording not found on DVD!"
+msgid "sudo or mount --bind / umount error (vfat system)"
msgstr ""
-msgid "Error while linking [0-9]*.vdr!"
+msgid "Script 'hddarchive.sh' not found!"
msgstr ""
-msgid "sudo or mount --bind / umount error (vfat system)"
+#, c-format
+msgid "Please insert DVD %s"
+msgstr ""
+
+msgid "DVD plugin is not installed!"
+msgstr ""
+
+msgid "No DVD in drive!"
+msgstr ""
+
+msgid "Recording not found on DVD!"
msgstr ""
msgid "Script 'dvdarchive.sh' not found!"
@@ -144,6 +157,9 @@ msgstr ""
msgid "Show recording length"
msgstr ""
+msgid "Show recording rating"
+msgstr ""
+
msgid "Show nr. of new recordings of a directory"
msgstr ""
@@ -168,9 +184,6 @@ msgstr ""
msgid "Call plugin after playback"
msgstr ""
-msgid "Patch font"
-msgstr ""
-
msgid "Limit bandwidth for move recordings"
msgstr ""
diff --git a/po/nn_NO.po b/po/nn_NO.po
index cf2acab..93c92b4 100644
--- a/po/nn_NO.po
+++ b/po/nn_NO.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ExtRecMenu 1.2\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2008-08-13 08:38+0200\n"
+"POT-Creation-Date: 2010-06-17 20:39+0200\n"
"PO-Revision-Date: 2008-03-15 16:21+0100\n"
"Last-Translator: Truls Slevigen <truls@slevigen.no>\n"
"Language-Team: <vdr@linuxtv.org>\n"
@@ -79,6 +79,9 @@ msgstr ""
msgid "Error while mounting DVD!"
msgstr ""
+msgid "Error while mounting Archive-HDD!"
+msgstr ""
+
msgid "Button$Commands"
msgstr ""
@@ -92,22 +95,32 @@ msgid "Button$Info"
msgstr ""
#, c-format
-msgid "Please insert DVD %s"
+msgid "Please attach Archive-HDD %s"
msgstr ""
-msgid "DVD plugin is not installed!"
+msgid "Recording not found on Archive-HDD!"
msgstr ""
-msgid "No DVD in drive!"
+msgid "Error while linking [0-9]*.vdr!"
msgstr ""
-msgid "Recording not found on DVD!"
+msgid "sudo or mount --bind / umount error (vfat system)"
msgstr ""
-msgid "Error while linking [0-9]*.vdr!"
+msgid "Script 'hddarchive.sh' not found!"
msgstr ""
-msgid "sudo or mount --bind / umount error (vfat system)"
+#, c-format
+msgid "Please insert DVD %s"
+msgstr ""
+
+msgid "DVD plugin is not installed!"
+msgstr ""
+
+msgid "No DVD in drive!"
+msgstr ""
+
+msgid "Recording not found on DVD!"
msgstr ""
msgid "Script 'dvdarchive.sh' not found!"
@@ -143,6 +156,9 @@ msgstr ""
msgid "Show recording length"
msgstr ""
+msgid "Show recording rating"
+msgstr ""
+
msgid "Show nr. of new recordings of a directory"
msgstr ""
@@ -167,9 +183,6 @@ msgstr ""
msgid "Call plugin after playback"
msgstr ""
-msgid "Patch font"
-msgstr ""
-
msgid "Limit bandwidth for move recordings"
msgstr ""
diff --git a/po/pl_PL.po b/po/pl_PL.po
index 5d84ac6..f1affd2 100644
--- a/po/pl_PL.po
+++ b/po/pl_PL.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ExtRecMenu 1.2\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2008-08-13 08:38+0200\n"
+"POT-Creation-Date: 2010-06-17 20:39+0200\n"
"PO-Revision-Date: 2008-03-15 16:21+0100\n"
"Last-Translator: Michael Rakowski <mrak@gmx.de>\n"
"Language-Team: <vdr@linuxtv.org>\n"
@@ -78,6 +78,9 @@ msgstr ""
msgid "Error while mounting DVD!"
msgstr ""
+msgid "Error while mounting Archive-HDD!"
+msgstr ""
+
msgid "Button$Commands"
msgstr ""
@@ -91,22 +94,32 @@ msgid "Button$Info"
msgstr ""
#, c-format
-msgid "Please insert DVD %s"
+msgid "Please attach Archive-HDD %s"
msgstr ""
-msgid "DVD plugin is not installed!"
+msgid "Recording not found on Archive-HDD!"
msgstr ""
-msgid "No DVD in drive!"
+msgid "Error while linking [0-9]*.vdr!"
msgstr ""
-msgid "Recording not found on DVD!"
+msgid "sudo or mount --bind / umount error (vfat system)"
msgstr ""
-msgid "Error while linking [0-9]*.vdr!"
+msgid "Script 'hddarchive.sh' not found!"
msgstr ""
-msgid "sudo or mount --bind / umount error (vfat system)"
+#, c-format
+msgid "Please insert DVD %s"
+msgstr ""
+
+msgid "DVD plugin is not installed!"
+msgstr ""
+
+msgid "No DVD in drive!"
+msgstr ""
+
+msgid "Recording not found on DVD!"
msgstr ""
msgid "Script 'dvdarchive.sh' not found!"
@@ -142,6 +155,9 @@ msgstr ""
msgid "Show recording length"
msgstr ""
+msgid "Show recording rating"
+msgstr ""
+
msgid "Show nr. of new recordings of a directory"
msgstr ""
@@ -166,9 +182,6 @@ msgstr ""
msgid "Call plugin after playback"
msgstr ""
-msgid "Patch font"
-msgstr ""
-
msgid "Limit bandwidth for move recordings"
msgstr ""
diff --git a/po/pt_PT.po b/po/pt_PT.po
index 83269f1..09c4727 100644
--- a/po/pt_PT.po
+++ b/po/pt_PT.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ExtRecMenu 1.2\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2008-08-13 08:38+0200\n"
+"POT-Creation-Date: 2010-06-17 20:39+0200\n"
"PO-Revision-Date: 2008-03-15 16:21+0100\n"
"Last-Translator: Paulo Lopes <pmml@netvita.pt>\n"
"Language-Team: <vdr@linuxtv.org>\n"
@@ -78,6 +78,9 @@ msgstr ""
msgid "Error while mounting DVD!"
msgstr ""
+msgid "Error while mounting Archive-HDD!"
+msgstr ""
+
msgid "Button$Commands"
msgstr ""
@@ -91,22 +94,32 @@ msgid "Button$Info"
msgstr ""
#, c-format
-msgid "Please insert DVD %s"
+msgid "Please attach Archive-HDD %s"
msgstr ""
-msgid "DVD plugin is not installed!"
+msgid "Recording not found on Archive-HDD!"
msgstr ""
-msgid "No DVD in drive!"
+msgid "Error while linking [0-9]*.vdr!"
msgstr ""
-msgid "Recording not found on DVD!"
+msgid "sudo or mount --bind / umount error (vfat system)"
msgstr ""
-msgid "Error while linking [0-9]*.vdr!"
+msgid "Script 'hddarchive.sh' not found!"
msgstr ""
-msgid "sudo or mount --bind / umount error (vfat system)"
+#, c-format
+msgid "Please insert DVD %s"
+msgstr ""
+
+msgid "DVD plugin is not installed!"
+msgstr ""
+
+msgid "No DVD in drive!"
+msgstr ""
+
+msgid "Recording not found on DVD!"
msgstr ""
msgid "Script 'dvdarchive.sh' not found!"
@@ -142,6 +155,9 @@ msgstr ""
msgid "Show recording length"
msgstr ""
+msgid "Show recording rating"
+msgstr ""
+
msgid "Show nr. of new recordings of a directory"
msgstr ""
@@ -166,9 +182,6 @@ msgstr ""
msgid "Call plugin after playback"
msgstr ""
-msgid "Patch font"
-msgstr ""
-
msgid "Limit bandwidth for move recordings"
msgstr ""
diff --git a/po/ro_RO.po b/po/ro_RO.po
index 5277637..da7f234 100644
--- a/po/ro_RO.po
+++ b/po/ro_RO.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ExtRecMenu 1.2\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2008-08-13 08:38+0200\n"
+"POT-Creation-Date: 2010-06-17 20:39+0200\n"
"PO-Revision-Date: 2008-03-15 16:21+0100\n"
"Last-Translator: Lucian Muresan <lucianm@users.sourceforge.net>\n"
"Language-Team: <vdr@linuxtv.org>\n"
@@ -79,6 +79,9 @@ msgstr ""
msgid "Error while mounting DVD!"
msgstr ""
+msgid "Error while mounting Archive-HDD!"
+msgstr ""
+
msgid "Button$Commands"
msgstr ""
@@ -92,22 +95,32 @@ msgid "Button$Info"
msgstr ""
#, c-format
-msgid "Please insert DVD %s"
+msgid "Please attach Archive-HDD %s"
msgstr ""
-msgid "DVD plugin is not installed!"
+msgid "Recording not found on Archive-HDD!"
msgstr ""
-msgid "No DVD in drive!"
+msgid "Error while linking [0-9]*.vdr!"
msgstr ""
-msgid "Recording not found on DVD!"
+msgid "sudo or mount --bind / umount error (vfat system)"
msgstr ""
-msgid "Error while linking [0-9]*.vdr!"
+msgid "Script 'hddarchive.sh' not found!"
msgstr ""
-msgid "sudo or mount --bind / umount error (vfat system)"
+#, c-format
+msgid "Please insert DVD %s"
+msgstr ""
+
+msgid "DVD plugin is not installed!"
+msgstr ""
+
+msgid "No DVD in drive!"
+msgstr ""
+
+msgid "Recording not found on DVD!"
msgstr ""
msgid "Script 'dvdarchive.sh' not found!"
@@ -143,6 +156,9 @@ msgstr ""
msgid "Show recording length"
msgstr ""
+msgid "Show recording rating"
+msgstr ""
+
msgid "Show nr. of new recordings of a directory"
msgstr ""
@@ -167,9 +183,6 @@ msgstr ""
msgid "Call plugin after playback"
msgstr ""
-msgid "Patch font"
-msgstr ""
-
msgid "Limit bandwidth for move recordings"
msgstr ""
diff --git a/po/ru_RU.po b/po/ru_RU.po
index e400c8b..9728897 100644
--- a/po/ru_RU.po
+++ b/po/ru_RU.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ExtRecMenu 1.2\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2008-08-13 08:38+0200\n"
+"POT-Creation-Date: 2010-06-17 20:39+0200\n"
"PO-Revision-Date: 2008-03-15 16:21+0100\n"
"Last-Translator: Vyacheslav Dikonov <sdiconov@mail.ru>\n"
"Language-Team: <vdr@linuxtv.org>\n"
@@ -78,6 +78,9 @@ msgstr ""
msgid "Error while mounting DVD!"
msgstr ""
+msgid "Error while mounting Archive-HDD!"
+msgstr ""
+
msgid "Button$Commands"
msgstr ""
@@ -91,22 +94,32 @@ msgid "Button$Info"
msgstr ""
#, c-format
-msgid "Please insert DVD %s"
+msgid "Please attach Archive-HDD %s"
msgstr ""
-msgid "DVD plugin is not installed!"
+msgid "Recording not found on Archive-HDD!"
msgstr ""
-msgid "No DVD in drive!"
+msgid "Error while linking [0-9]*.vdr!"
msgstr ""
-msgid "Recording not found on DVD!"
+msgid "sudo or mount --bind / umount error (vfat system)"
msgstr ""
-msgid "Error while linking [0-9]*.vdr!"
+msgid "Script 'hddarchive.sh' not found!"
msgstr ""
-msgid "sudo or mount --bind / umount error (vfat system)"
+#, c-format
+msgid "Please insert DVD %s"
+msgstr ""
+
+msgid "DVD plugin is not installed!"
+msgstr ""
+
+msgid "No DVD in drive!"
+msgstr ""
+
+msgid "Recording not found on DVD!"
msgstr ""
msgid "Script 'dvdarchive.sh' not found!"
@@ -142,6 +155,9 @@ msgstr ""
msgid "Show recording length"
msgstr ""
+msgid "Show recording rating"
+msgstr ""
+
msgid "Show nr. of new recordings of a directory"
msgstr ""
@@ -166,9 +182,6 @@ msgstr ""
msgid "Call plugin after playback"
msgstr ""
-msgid "Patch font"
-msgstr ""
-
msgid "Limit bandwidth for move recordings"
msgstr ""
diff --git a/po/sl_SI.po b/po/sl_SI.po
index 26fa03b..f3a4418 100644
--- a/po/sl_SI.po
+++ b/po/sl_SI.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ExtRecMenu 1.2\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2008-08-13 08:38+0200\n"
+"POT-Creation-Date: 2010-06-17 20:39+0200\n"
"PO-Revision-Date: 2008-03-15 16:21+0100\n"
"Last-Translator: Matjaz Thaler <matjaz.thaler@guest.arnes.si>\n"
"Language-Team: <vdr@linuxtv.org>\n"
@@ -79,6 +79,9 @@ msgstr ""
msgid "Error while mounting DVD!"
msgstr ""
+msgid "Error while mounting Archive-HDD!"
+msgstr ""
+
msgid "Button$Commands"
msgstr ""
@@ -92,22 +95,32 @@ msgid "Button$Info"
msgstr ""
#, c-format
-msgid "Please insert DVD %s"
+msgid "Please attach Archive-HDD %s"
msgstr ""
-msgid "DVD plugin is not installed!"
+msgid "Recording not found on Archive-HDD!"
msgstr ""
-msgid "No DVD in drive!"
+msgid "Error while linking [0-9]*.vdr!"
msgstr ""
-msgid "Recording not found on DVD!"
+msgid "sudo or mount --bind / umount error (vfat system)"
msgstr ""
-msgid "Error while linking [0-9]*.vdr!"
+msgid "Script 'hddarchive.sh' not found!"
msgstr ""
-msgid "sudo or mount --bind / umount error (vfat system)"
+#, c-format
+msgid "Please insert DVD %s"
+msgstr ""
+
+msgid "DVD plugin is not installed!"
+msgstr ""
+
+msgid "No DVD in drive!"
+msgstr ""
+
+msgid "Recording not found on DVD!"
msgstr ""
msgid "Script 'dvdarchive.sh' not found!"
@@ -143,6 +156,9 @@ msgstr ""
msgid "Show recording length"
msgstr ""
+msgid "Show recording rating"
+msgstr ""
+
msgid "Show nr. of new recordings of a directory"
msgstr ""
@@ -167,9 +183,6 @@ msgstr ""
msgid "Call plugin after playback"
msgstr ""
-msgid "Patch font"
-msgstr ""
-
msgid "Limit bandwidth for move recordings"
msgstr ""
diff --git a/po/sv_SE.po b/po/sv_SE.po
index 3be40ae..9aec234 100644
--- a/po/sv_SE.po
+++ b/po/sv_SE.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ExtRecMenu 1.2\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2008-08-13 08:38+0200\n"
+"POT-Creation-Date: 2010-06-17 20:39+0200\n"
"PO-Revision-Date: 2008-03-15 16:21+0100\n"
"Last-Translator: Tomas Prybil <tomas@prybil.se>\n"
"Language-Team: <vdr@linuxtv.org>\n"
@@ -79,6 +79,9 @@ msgstr ""
msgid "Error while mounting DVD!"
msgstr ""
+msgid "Error while mounting Archive-HDD!"
+msgstr ""
+
msgid "Button$Commands"
msgstr ""
@@ -92,22 +95,32 @@ msgid "Button$Info"
msgstr ""
#, c-format
-msgid "Please insert DVD %s"
+msgid "Please attach Archive-HDD %s"
msgstr ""
-msgid "DVD plugin is not installed!"
+msgid "Recording not found on Archive-HDD!"
msgstr ""
-msgid "No DVD in drive!"
+msgid "Error while linking [0-9]*.vdr!"
msgstr ""
-msgid "Recording not found on DVD!"
+msgid "sudo or mount --bind / umount error (vfat system)"
msgstr ""
-msgid "Error while linking [0-9]*.vdr!"
+msgid "Script 'hddarchive.sh' not found!"
msgstr ""
-msgid "sudo or mount --bind / umount error (vfat system)"
+#, c-format
+msgid "Please insert DVD %s"
+msgstr ""
+
+msgid "DVD plugin is not installed!"
+msgstr ""
+
+msgid "No DVD in drive!"
+msgstr ""
+
+msgid "Recording not found on DVD!"
msgstr ""
msgid "Script 'dvdarchive.sh' not found!"
@@ -143,6 +156,9 @@ msgstr ""
msgid "Show recording length"
msgstr ""
+msgid "Show recording rating"
+msgstr ""
+
msgid "Show nr. of new recordings of a directory"
msgstr ""
@@ -167,9 +183,6 @@ msgstr ""
msgid "Call plugin after playback"
msgstr ""
-msgid "Patch font"
-msgstr ""
-
msgid "Limit bandwidth for move recordings"
msgstr ""
diff --git a/po/tr_TR.po b/po/tr_TR.po
index bb168c3..178468c 100644
--- a/po/tr_TR.po
+++ b/po/tr_TR.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ExtRecMenu 1.2\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2008-08-13 08:38+0200\n"
+"POT-Creation-Date: 2010-06-17 20:39+0200\n"
"PO-Revision-Date: 2008-03-15 16:21+0100\n"
"Last-Translator: Oktay Yolgeçen <oktay_73@yahoo.de>\n"
"Language-Team: <vdr@linuxtv.org>\n"
@@ -78,6 +78,9 @@ msgstr ""
msgid "Error while mounting DVD!"
msgstr ""
+msgid "Error while mounting Archive-HDD!"
+msgstr ""
+
msgid "Button$Commands"
msgstr ""
@@ -91,22 +94,32 @@ msgid "Button$Info"
msgstr ""
#, c-format
-msgid "Please insert DVD %s"
+msgid "Please attach Archive-HDD %s"
msgstr ""
-msgid "DVD plugin is not installed!"
+msgid "Recording not found on Archive-HDD!"
msgstr ""
-msgid "No DVD in drive!"
+msgid "Error while linking [0-9]*.vdr!"
msgstr ""
-msgid "Recording not found on DVD!"
+msgid "sudo or mount --bind / umount error (vfat system)"
msgstr ""
-msgid "Error while linking [0-9]*.vdr!"
+msgid "Script 'hddarchive.sh' not found!"
msgstr ""
-msgid "sudo or mount --bind / umount error (vfat system)"
+#, c-format
+msgid "Please insert DVD %s"
+msgstr ""
+
+msgid "DVD plugin is not installed!"
+msgstr ""
+
+msgid "No DVD in drive!"
+msgstr ""
+
+msgid "Recording not found on DVD!"
msgstr ""
msgid "Script 'dvdarchive.sh' not found!"
@@ -142,6 +155,9 @@ msgstr ""
msgid "Show recording length"
msgstr ""
+msgid "Show recording rating"
+msgstr ""
+
msgid "Show nr. of new recordings of a directory"
msgstr ""
@@ -166,9 +182,6 @@ msgstr ""
msgid "Call plugin after playback"
msgstr ""
-msgid "Patch font"
-msgstr ""
-
msgid "Limit bandwidth for move recordings"
msgstr ""
diff --git a/scripts/hddarchive.sh b/scripts/hddarchive.sh
new file mode 100644
index 0000000..d141956
--- /dev/null
+++ b/scripts/hddarchive.sh
@@ -0,0 +1,306 @@
+#!/bin/sh
+#
+# ---> CONFIGURATION AT LINE 83 <---
+#
+# MANUAL:
+# -------
+# 1.
+# If you run VDR as user, you need in /etc/fstab the option "user" for your HDD mountpoint.
+#
+# Example:
+# /dev/sdf /media/hdd auto defaults,ro,user,noauto 0 0
+#
+# 2.
+# If you use a VFAT partition for your video-data, you must configure sudo to allow the
+# VDR-user to execute mount and umount as root. To edit sudoers run 'visudo' command as root.
+#
+# Example:
+# # Cmnd alias specification
+# Cmnd_Alias SYSTEM = /bin/mount, /bin/umount
+# # User privilege specification
+# vdr ALL=(root) NOPASSWD: SYSTEM
+#
+# With a vfat partition some things doesn't work: resume, marks
+#
+# 3.
+# Tools needed: mount, awk, find, test, stat, sed
+#
+# 4.
+# If you have some Archive-HDDs with the index.vdr only on Archive-HDD, you don't use vfat
+# and you want to see the recording length in the menu, you can switch GETLENGTH to 1 and
+# the script will create a length.vdr for you.
+#
+# 5.
+# If something went wrong, set DEBUG=1 and send me the file which is defined in $DEBUGLOG.
+# Use VDR-Portal or EMail.
+#
+# 6.
+# Exitcodes:
+#
+# exit 0 - no error
+# exit 1 - mount/umount error
+# exit 3 - wrong hdd / recording not found
+# exit 4 - error while linking [0-9]*.vdr
+# exit 5 - sudo or mount --bind / umount error (vfat system)
+#
+# CONFIGURATION
+# -------------
+#<Configuration>
+
+# Mountpoint, the same as in fstab
+MOUNTPOINT="/mnt/archive-hdd" # no trailing '/'
+# Log warnings/errors in syslog. 1 = yes, 0 = no.
+SYSLOG=1
+
+# Create a length.vdr after mounting the Archive-HDD for the played recording. 1 = yes, 0 = no.
+# Only for non-vfat and with index.vdr only on Archive-HDD.
+GETLENGTH=1
+# Put debug infos in file $DEBUGLOG. Only if $DEBUG=1.
+DEBUG=0
+DEBUGLOG="/tmp/hddarchive.sh-debug.log"
+VDRSETTINGSFILE=/etc/conf.d/vdr
+
+#</Configuration>
+# No changes needed after this mark
+
+# read config file
+if [ -f /etc/vdr/hddarchive.conf ]; then
+ . /etc/vdr/hddarchive.conf
+fi
+
+# get VIDEO path
+if [ -f ${VDRSETTINGSFILE} ]; then
+ source ${VDRSETTINGSFILE}
+fi
+
+# Remove trailing slash
+MOUNTPOINT="$(echo "${MOUNTPOINT}" | sed -e 's/\/$//')"
+if [ -L "$MOUNTPOINT" ]; then
+ MOUNTPOINTT="$(find "$MOUNTPOINT" -printf "%l")"
+else
+ MOUNTPOINTT="$MOUNTPOINT"
+fi
+# determine hdd-device
+DEVICE="$(awk '( $1 !~ /^#/ ) && ( $2 == "'$MOUNTPOINT'" ) { printf("%s", $1); exit; }' /etc/fstab)"
+if [ -L "$DEVICE" ]; then
+ DEVICET="$(find "$DEVICE" -printf "%l")"
+else
+ DEVICET="$DEVICE"
+fi
+
+ACTION="$1"
+REC="$2"
+NAME="$3"
+if [ "$ACTION" = "mount" -a -z "$NAME" ]; then
+ NAME="basename ${REC})"
+fi
+
+# function to print help
+call() {
+ echo -e "\nScript $0 needs three parameters for mount and two for umount. The first must be mount or umount, the second is the full path.\n"
+ echo -e "Only for mounting the script needs a third parameter, the last part of the recording path.\n"
+ echo -e "Example: hddarchive.sh mount '/video0/Music/%Riverdance/2004-06-06.00:10.50.99.rec' '2004-06-06.00:10.50.99.rec'\n"
+ echo -e "Example: hddarchive.sh umount '/video0/Music/%Riverdance/2004-06-06.00:10.50.99.rec'\n"
+ echo -e "For more information read the MANUAL part inside this script.\n"
+}
+
+# function to log messages
+log() {
+ case "$1" in
+ info)
+ echo -e "INFO: $2"
+ [ $SYSLOG -eq 1 ] && logger -t "$0" "INFO: $2"
+ ;;
+ warning)
+ echo -e "WARNING: $2"
+ [ $SYSLOG -eq 1 ] && logger -t "$0" "WARNING: $2"
+ ;;
+ error)
+ echo -e "ERROR: $2"
+ [ $SYSLOG -eq 1 ] && logger -t "$0" "ERROR: $2"
+ if [ $DEBUG -eq 1 ]; then
+ echo "-------" >> $DEBUGLOG
+ echo -e "Parameters: $ACTION $REC $NAME\n" >> $DEBUGLOG
+ echo -e "ERROR: $2\n\n" >> $DEBUGLOG
+ echo -e "Mountpoint: $MOUNTPOINT\nDevice: $DEVICE\n" >> $DEBUGLOG
+ echo -e "MountpointT: $MOUNTPOINTT\nDeviceT: $DEVICET\n" >> $DEBUGLOG
+ FSTAB="$(awk '( $1 !~ /^#/ ) && ( $2 == "'$MOUNTPOINT'" || $2 == "'$MOUNTPOINTT'" ) { printf("%s", $0); }' /etc/fstab)"
+ echo -e "fstab: ${FSTAB}\n" >>$DEBUGLOG
+ echo -e "Filesystem: $(stat -f -c %T "$REC")\n" >> $DEBUGLOG
+ mount >> $DEBUGLOG
+ echo >> $DEBUGLOG
+ cat /proc/mounts >> $DEBUGLOG
+ echo >> $DEBUGLOG
+ sudo -l >> $DEBUGLOG
+ fi
+ ;;
+ esac
+}
+
+# Some checks before doing something
+[ "$ACTION" = "mount" -o "$ACTION" = "umount" ] || { call; exit 10; }
+[ -z "$REC" -o ! -d "$REC" ] && { call; exit 10; }
+[ "$ACTION" = "mount" -a -z "$NAME" ] && { call; exit 10; }
+[ ! -d "$MOUNTPOINT" ] && { log error "Mountpoint $MOUNTPOINT doesn't exist"; exit 10; }
+[ ! -e "$DEVICE" ] && { log error "Device $DEVICE doesn't exist"; exit 10; }
+
+case "$ACTION" in
+mount)
+ # check if not mounted
+ if mount | egrep -q " $MOUNTPOINTT "; then
+ # check if hdd is in use
+ if mount | egrep -q "^$DEVICET"; then
+ log warning "hdd in use (at: check if hdd is in use)"
+ fi
+
+ # if already mounted, try to umount
+ log warning "hdd already mounted, try to umount"
+ umount "$MOUNTPOINT" || { log error "hdd umount error (at: hdd already mounted, try to umount)"; exit 1; }
+
+ # unlink broken existing links
+ for LINK in "${REC}/"*.vdr; do
+ if [ -L "$LINK" -a ! -s "$LINK" ]; then
+ rm "$LINK"
+ fi
+ done
+ for LINK in "${REC}/"*.ts; do
+ if [ -L "$LINK" -a ! -s "$LINK" ]; then
+ rm "$LINK"
+ fi
+ done
+ for LINK in "${REC}/"index*; do
+ if [ -L "$LINK" -a ! -s "$LINK" ]; then
+ rm "$LINK"
+ fi
+ done
+ fi
+
+ # mount hdd
+ mount "$MOUNTPOINT" || { log error "hdd mount error (at: mount hdd)"; exit 1; }
+ # mount was OK. Now, find recording on hdd
+
+ # search recording in the subtree (Movies/Action/)
+ RELPATH1=${REC#$VIDEO}
+ RELPATH=${RELPATH1%$NAME}
+ DIR="$(find "${MOUNTPOINT}/${RELPATH}" -name "$NAME")"
+ # if not found, seach recording on the whole disk
+ if [ -z "$DIR" ]; then
+ DIR="$(find "${MOUNTPOINT}/" -name "$NAME")"
+ fi
+ # if not found, umount
+ if [ -z "$DIR" ]; then
+ log error "wrong hdd / recording not found on hdd"
+ umount "$MOUNTPOINT" || { log error "hdd umount error (at: wrong hdd / recording not found on hdd)"; exit 1; }
+ exit 3
+ fi
+
+ # check if video partition is vfat
+ if [ "$(stat -f -c %T "$REC")" != "vfat" ]; then
+
+ # link index.vdr if not exist
+ if [ -e "${DIR}/index.vdr" -a ! -e "${REC}/index.vdr" ]; then
+ ln -s "${DIR}/index.vdr" "${REC}/index.vdr" || { log error "could not link index.vdr (at: link index.vdr from hdd to disk)"; }
+ fi
+ if [ -e "${DIR}/index" -a ! -e "${REC}/index" ]; then
+ ln -s "${DIR}/index" "${REC}/index" || { log error "could not link index (at: link index from hdd to disk)"; }
+ fi
+
+ # link [0-9]*.vdr files
+ for FILE in "${DIR}/"[0-9]*.vdr; do
+ if [ -e "${FILE}" ]; then
+ ln -s "$FILE" "${REC}/$(basename "$FILE")"
+ fi
+ done
+ # error while linking [0-9]*.vdr files?
+ if [ $? -ne 0 ]; then
+ log error "error while linking [0-9]*.vdr"
+ # umount hdd bevor unlinking
+ umount "$MOUNTPOINT" || { log error "hdd umount error (at: error while linking)"; exit 1; }
+ # unlink broken links
+ for LINK in "${REC}/"*.vdr; do
+ if [ -L "$LINK" -a ! -s "$LINK" ]; then
+ rm "$LINK"
+ fi
+ done
+ exit 4
+ fi
+ for FILE in "${DIR}/"[0-9]*.ts; do
+ if [ -e "${FILE}" ]; then
+ ln -s "$FILE" "${REC}/$(basename "$FILE")"
+ fi
+ done
+ # error while linking [0-9]*.ts files?
+ if [ $? -ne 0 ]; then
+ log error "error while linking [0-9]*.ts"
+ # umount hdd bevor unlinking
+ umount "$MOUNTPOINT" || { log error "hdd umount error (at: error while linking)"; exit 1; }
+ # unlink broken links
+ for LINK in "${REC}/"*.ts; do
+ if [ -L "$LINK" -a ! -s "$LINK" ]; then
+ rm "$LINK"
+ fi
+ done
+ exit 4
+ fi
+
+ # If wanted, create length.vdr
+ if [ $GETLENGTH -eq 1 -a ! -s "${REC}/length.vdr" -a -L "${REC}/index.vdr" ]; then
+ echo $(( $(stat -L -c %s "${REC}/index.vdr")/12000 )) > "${REC}/length.vdr"
+ fi
+ if [ $GETLENGTH -eq 1 -a ! -s "${REC}/length.vdr" -a -L "${REC}/index" ]; then
+ echo $(( $(stat -L -c %s "${REC}/index")/12000 )) > "${REC}/length.vdr"
+ fi
+ else
+ if [ ! "$(sudo -l | egrep "\(root\) NOPASSWD: /bin/mount")" -o ! "$(sudo -l | egrep "\(root\) NOPASSWD: /bin/umount")" ]; then
+ log error "you must configure sudo and allow $(whoami) to use mount/umount!"
+ log info "$(sudo -l)"
+ umount "$MOUNTPOINT" || { log error "hdd umount error (at: you must configure sudo)"; exit 1; }
+ exit 5
+ fi
+ # mount recording
+ sudo mount --bind "$DIR" "$REC"
+ if [ $? -ne 0 ]; then
+ log error "sudo mount --bind $DIR $REC"
+ umount "$MOUNTPOINT" || { log error "hdd umount error (at: sudo mount --bind)"; exit 1; }
+ exit 5
+ fi
+ fi
+ ;;
+umount)
+ # check if hdd is mounted
+ mount | egrep -q " $MOUNTPOINTT " || { log error "hdd not mounted (at: check if hdd is mounted)"; exit 1; }
+ # check if video partition is vfat
+ if [ "$(stat -f -c %T "$REC")" != "vfat" ]; then
+ # is mounted, umount hdd bevor unlinking
+ umount "$MOUNTPOINT" || { log error "hdd umount error (at: is mounted, umount hdd bevor unlinking)"; exit 1; }
+ # unlink broken links
+ for LINK in "${REC}/"index*; do
+ if [ -L "$LINK" -a ! -s "$LINK" ]; then
+ rm "$LINK"
+ fi
+ done
+ for LINK in "${REC}/"*.vdr; do
+ if [ -L "$LINK" -a ! -s "$LINK" ]; then
+ rm "$LINK"
+ fi
+ done
+ for LINK in "${REC}/"*.ts; do
+ if [ -L "$LINK" -a ! -s "$LINK" ]; then
+ rm "$LINK"
+ fi
+ done
+ else
+ # umount recording
+ sudo umount "$REC" || { log error "sudo umount $REC"; exit 5; }
+ # umount Archive-HDD at umount
+ umount "$MOUNTPOINT" || { log error "hdd umount error (at: umount hdd at umount)"; exit 1; }
+ fi
+ ;;
+*)
+# Output help
+ log error "\nWrong action $ACTION."
+ call
+ ;;
+esac
+
+exit 0
diff --git a/tools.c b/tools.c
index 377a5c1..2a5ec8f 100644
--- a/tools.c
+++ b/tools.c
@@ -54,7 +54,7 @@ void SortList::ReadConfigFile()
{
string configfile(cPlugin::ConfigDirectory());
configfile+=CONFIGFILE;
-
+
ifstream in(configfile.c_str());
if(in)
{
@@ -72,9 +72,9 @@ void SortList::WriteConfigFile()
{
string configfile(cPlugin::ConfigDirectory());
configfile+=CONFIGFILE;
-
+
ofstream outfile(configfile.c_str());
-
+
for(SortListItem *item=First();item;item=Next(item))
outfile << item->Path() << endl;
}
@@ -101,13 +101,13 @@ bool MoveRename(const char *OldName,const char *NewName,cRecording *Recording,bo
if(Recording)
{
isyslog("[extrecmenu] moving %s to %s",OldName,NewName);
-
+
if(!MakeDirs(NewName,true))
{
Skins.Message(mtError,tr("Creating directories failed!"));
return false;
}
-
+
if(rename(OldName,NewName)==-1)
{
remove(NewName); // remove created directory
@@ -119,24 +119,30 @@ bool MoveRename(const char *OldName,const char *NewName,cRecording *Recording,bo
cThreadLock RecordingsLock(&Recordings);
Recordings.DelByName(OldName);
Recordings.AddByName(NewName);
-
+
// set user command for '-r'-option of VDR
- asprintf(&buf,"%s \"%s\"",Move?"move":"rename",*strescape(OldName,"'\\\"$"));
- cRecordingUserCommand::InvokeCommand(buf,NewName);
- free(buf);
+ if(-1!=asprintf(&buf,"%s \"%s\"",Move?"move":"rename",*strescape(OldName,"'\\\"$")))
+ {
+ cRecordingUserCommand::InvokeCommand(buf,NewName);
+ free(buf);
+ }
+ buf=NULL;
}
else
{
// is the new path within the old?
- asprintf(&buf,"%s/",OldName); // we have to append a / to make sure that we search for a directory
- if(!strncmp(buf,NewName,strlen(buf)))
+ if(-1!=asprintf(&buf,"%s/",OldName)) // we have to append a / to make sure that we search for a directory
{
- Skins.Message(mtError,tr("Moving into own sub-directory not allowed!"));
+ if(!strncmp(buf,NewName,strlen(buf)))
+ {
+ Skins.Message(mtError,tr("Moving into own sub-directory not allowed!"));
+ free(buf);
+ return false;
+ }
free(buf);
- return false;
}
- free(buf);
-
+ buf=NULL;
+
myRecList *list=new myRecList();
for(cRecording *recording=Recordings.First();recording;recording=Recordings.Next(recording))
list->Add(new myRecListItem(recording));
@@ -147,27 +153,33 @@ bool MoveRename(const char *OldName,const char *NewName,cRecording *Recording,bo
if(!strncmp(OldName,item->recording->FileName(),strlen(OldName)))
{
buf=strdup(OldName+strlen(VideoDirectory)+1);
- buf=ExchangeChars(buf,false);
-
- if(strcmp(item->recording->Name(),buf))
+ if(buf)
{
- free(buf);
- asprintf(&buf,"%s%s",NewName,item->recording->FileName()+strlen(OldName));
- if(!MakeDirs(buf,true))
- {
- Skins.Message(mtError,tr("Creating directories failed!"));
- free(buf);
- delete list;
- return false;
- }
- if(MoveRename(item->recording->FileName(),buf,item->recording,Move)==false)
+ buf=ExchangeChars(buf,false);
+
+ if(strcmp(item->recording->Name(),buf))
{
free(buf);
- delete list;
- return false;
+ if(-1!=asprintf(&buf,"%s%s",NewName,item->recording->FileName()+strlen(OldName)))
+ {
+ if(!MakeDirs(buf,true))
+ {
+ Skins.Message(mtError,tr("Creating directories failed!"));
+ free(buf);
+ delete list;
+ return false;
+ }
+ if(MoveRename(item->recording->FileName(),buf,item->recording,Move)==false)
+ {
+ free(buf);
+ delete list;
+ return false;
+ }
+ }
+ buf=NULL;
}
+ free(buf);
}
- free(buf);
}
item=list->Next(item);
}
@@ -217,7 +229,7 @@ char *myRecListItem::StripEpisodeName(char *s)
}
else
*s1=(char)255;
-
+
if(s1 && s2 && !SortByName)
memmove(s1+1,s2,t-s2+1);
@@ -227,7 +239,7 @@ char *myRecListItem::StripEpisodeName(char *s)
int myRecListItem::Compare(const cListObject &ListObject)const
{
myRecListItem *item=(myRecListItem*)&ListObject;
-
+
char *s1=StripEpisodeName(strdup(filename+strlen(VideoDirectory)));
char *s2=StripEpisodeName(strdup(item->filename+strlen(VideoDirectory)));
@@ -236,10 +248,10 @@ int myRecListItem::Compare(const cListObject &ListObject)const
compare=strcasecmp(s2,s1);
else
compare=strcasecmp(s1,s2);
-
+
free(s1);
free(s2);
-
+
return compare;
}
@@ -256,7 +268,7 @@ WorkerThread::WorkerThread():cThread("extrecmenu worker thread")
cancelmove=cancelcut=false;
CutterQueue=new CutterList();
MoveBetweenFileSystemsList=new MoveList();
-
+
Start();
}
@@ -275,7 +287,7 @@ const char *WorkerThread::Working()
if(MoveBetweenFileSystemsList->First()!=NULL)
return tr("Move recordings in progress");
-
+
return NULL;
}
@@ -285,13 +297,21 @@ void WorkerThread::Action()
MoveListItem *moveitem=NULL;
SetPriority(19);
-
+
while(Running())
{
if((cutteritem=CutterQueue->First())!=NULL)
{
cutteritem->SetCutInProgress();
+#ifdef USE_VDR_CUTTER
+#if VDRVERSNUM > 10713
+ if(!CutRecording(cutteritem->FileName().c_str()))
+#else
+ if (!cCutter::Start(cutteritem->FileName().c_str()))
+ Skins.QueueMessage(mtError,tr("Can't start editing process!"));
+#endif
+#else
// create filename for edited recording, check for recordings with this name, if exists -> delete recording
// (based upon VDR's code (cutter.c))
cRecording rec(cutteritem->FileName().c_str());
@@ -316,8 +336,9 @@ void WorkerThread::Action()
}
else
Skins.QueueMessage(mtError,tr("Can't start editing process!"));
+#endif
CutterQueue->Del(cutteritem);
-
+
Recordings.ChangeState();
}
@@ -329,10 +350,10 @@ void WorkerThread::Action()
else
// error occured -> empty move queue
MoveBetweenFileSystemsList->Clear();
-
+
Recordings.ChangeState();
}
-
+
sleep(1);
}
}
@@ -362,12 +383,13 @@ void WorkerThread::CancelCut(string Path)
cancelcut=true;
else
CutterQueue->Del(item);
-
+
return;
}
}
}
+#ifndef USE_VDR_CUTTER
// this based mainly upon VDR's code (cutter.c)
void WorkerThread::Cut(string From,string To)
{
@@ -382,7 +404,7 @@ void WorkerThread::Cut(string From,string To)
bool lastmark=false,cutin=true;
off_t maxVideoFileSize=MEGABYTE(Setup.MaxVideoFileSize);
-#if VDRVERSNUM >= 10703
+#if VDRVERSNUM > 10713
bool isPesRecording;
uint16_t filenumber;
off_t fileoffset;
@@ -426,7 +448,6 @@ void WorkerThread::Cut(string From,string To)
}
#endif
-
if((mark=frommarks.First())!=NULL)
{
if(!(fromfile=fromfilename->Open()) || !(tofile=tofilename->Open()))
@@ -473,7 +494,7 @@ void WorkerThread::Cut(string From,string To)
error="fromfile";
break;
}
-#if VDRVERSNUM >= 10703
+#if VDRVERSNUM > 10713
if(picturetype)
#else
if(picturetype==I_FRAME)
@@ -494,7 +515,7 @@ void WorkerThread::Cut(string From,string To)
lastiframe=0;
if(cutin)
{
-#if VDRVERSNUM >= 10706
+#if VDRVERSNUM > 10713
if(isPesRecording)
cRemux::SetBrokenLink(buffer,length);
else
@@ -572,6 +593,7 @@ void WorkerThread::Cut(string From,string To)
delete fromindex;
delete toindex;
}
+#endif
bool WorkerThread::IsMoving(string Path)
{
@@ -596,7 +618,7 @@ void WorkerThread::CancelMove(string Path)
}
else
MoveBetweenFileSystemsList->Del(item);
-
+
return;
}
}
@@ -615,13 +637,13 @@ bool WorkerThread::Move(string From,string To)
Skins.QueueMessage(mtError,tr("Creating directories failed!"));
return false;
}
-
+
isyslog("[extrecmenu] moving '%s' to '%s'",From.c_str(),To.c_str());
-
+
DIR *dir=NULL;
struct dirent *entry;
int infile=-1,outfile=-1;
-
+
if((dir=opendir(From.c_str()))!=NULL)
{
bool ok=true;
@@ -631,7 +653,7 @@ bool WorkerThread::Move(string From,string To)
string from,to;
from=From+"/"+entry->d_name;
to=To+"/"+entry->d_name;
-
+
AssertFreeDiskSpace(-1);
struct stat st;
@@ -648,25 +670,25 @@ bool WorkerThread::Move(string From,string To)
while(sz_read>0 && (sz_read=read(infile,buf,BUFFERSIZE))>0)
{
AssertFreeDiskSpace(-1);
-
+
sz_write=0;
do
{
if(cancelmove || !Running())
{
cancelmove=false;
-
+
close(infile);
close(outfile);
closedir(dir);
-
+
isyslog("[extrecmenu] moving canceled");
-
+
RemoveVideoFile(To.c_str());
-
+
return true;
}
-
+
if((sz=write(outfile,buf+sz_write,sz_read-sz_write))<0)
{
close(infile);
@@ -680,7 +702,7 @@ bool WorkerThread::Move(string From,string To)
sz_write+=sz;
}
while(sz_write<sz_read);
-
+
if(mysetup.LimitBandwidth)
usleep(10);
}
diff --git a/tools.h b/tools.h
index 72babbe..3ca48f0 100644
--- a/tools.h
+++ b/tools.h
@@ -137,4 +137,7 @@ class Icons
static const char* New(){return IsUTF8?"\ue010":"\x90";}
static const char* Repititive_timer(){return IsUTF8?"\ue011":"\x91";}
static const char* Running(){return IsUTF8?"\ue012":"\x92";}
+ static const char* HDD(){return IsUTF8?"\ue01c":"\x9c";}
+ static const char* StarFull(){return IsUTF8?"\ue018":"\x98";}
+ static const char* StarHalf(){return IsUTF8?"\ue019":"\x99";}
};
diff --git a/ttf/VDRSymbolsSans-Bold.ttf b/ttf/VDRSymbolsSans-Bold.ttf
new file mode 100644
index 0000000..ba35311
--- /dev/null
+++ b/ttf/VDRSymbolsSans-Bold.ttf
Binary files differ
diff --git a/ttf/VDRSymbolsSans.ttf b/ttf/VDRSymbolsSans.ttf
index 3ee4853..7fa17a9 100644
--- a/ttf/VDRSymbolsSans.ttf
+++ b/ttf/VDRSymbolsSans.ttf
Binary files differ