diff options
-rw-r--r-- | pages/Makefile | 2 | ||||
-rw-r--r-- | pages/edit_recording.ecpp | 162 | ||||
-rw-r--r-- | pages/edit_user.ecpp | 6 | ||||
-rw-r--r-- | pages/recordings.ecpp | 34 | ||||
-rw-r--r-- | po/ca_ES.po | 48 | ||||
-rw-r--r-- | po/cs_CZ.po | 48 | ||||
-rw-r--r-- | po/da_DK.po | 48 | ||||
-rw-r--r-- | po/de_DE.po | 49 | ||||
-rw-r--r-- | po/el_GR.po | 48 | ||||
-rw-r--r-- | po/es_ES.po | 48 | ||||
-rw-r--r-- | po/et_EE.po | 48 | ||||
-rw-r--r-- | po/fi_FI.po | 48 | ||||
-rw-r--r-- | po/fr_FR.po | 48 | ||||
-rw-r--r-- | po/hr_HR.po | 48 | ||||
-rw-r--r-- | po/hu_HU.po | 48 | ||||
-rw-r--r-- | po/it_IT.po | 48 | ||||
-rw-r--r-- | po/lt_LT.po | 48 | ||||
-rw-r--r-- | po/nl_NL.po | 48 | ||||
-rw-r--r-- | po/nn_NO.po | 48 | ||||
-rw-r--r-- | po/pl_PL.po | 48 | ||||
-rw-r--r-- | po/pt_PT.po | 48 | ||||
-rw-r--r-- | po/ro_RO.po | 48 | ||||
-rw-r--r-- | po/ru_RU.po | 48 | ||||
-rw-r--r-- | po/sl_SI.po | 48 | ||||
-rw-r--r-- | po/sv_SE.po | 48 | ||||
-rw-r--r-- | po/tr_TR.po | 48 | ||||
-rw-r--r-- | recman.cpp | 144 | ||||
-rw-r--r-- | recman.h | 73 | ||||
-rw-r--r-- | tools.cpp | 169 | ||||
-rw-r--r-- | tools.h | 6 | ||||
-rw-r--r-- | users.h | 3 |
31 files changed, 1380 insertions, 276 deletions
diff --git a/pages/Makefile b/pages/Makefile index c70ecb6..f4f1583 100644 --- a/pages/Makefile +++ b/pages/Makefile @@ -20,7 +20,7 @@ OBJS = menu.o recordings.o schedule.o multischedule.o screenshot.o \ searchepg.o login.o ibox.o xmlresponse.o play_recording.o \ pause_recording.o stop_recording.o ffw_recording.o \ rwd_recording.o setup.o content.o epginfo.o timerconflicts.o \ - recstream.o users.o edit_user.o + recstream.o users.o edit_user.o edit_recording.o ### Default rules: diff --git a/pages/edit_recording.ecpp b/pages/edit_recording.ecpp new file mode 100644 index 0000000..a6862ba --- /dev/null +++ b/pages/edit_recording.ecpp @@ -0,0 +1,162 @@ +<%pre> +#include <vdr/recording.h> +#include <vdr/config.h> +#include <vdr/i18n.h> +#include "exception.h" +#include "tools.h" +#include "epg_events.h" +#include "recman.h" +#include "setup.h" +#include "i18n.h" +#include "livefeatures.h" +#include "users.h" + +using namespace std; +using namespace vdrlive; + +</%pre> +<%args> + // input parameters + string recid; + string async; + // form parameters + string name = ""; + string directory = ""; + string deletions[]; +</%args> +<%session scope="global"> +bool logged_in(false); +string edit_rec_referer; +</%session> +<%request scope="page"> +const cRecording* recording; +</%request> +<%include>page_init.eh</%include> +<%cpp> + if (!logged_in && LiveSetup().UseAuth()) return reply.redirect("login.html"); + + if (!cUser::CurrentUserHasRightTo(UR_EDITRECS)) + throw HtmlError( tr("Sorry, no permission. Please contact your administrator!") ); + + bool ajaxReq = !async.empty() && (lexical_cast<int>(async) != 0); + + string message; + + recording = NULL; + if (!recid.empty()) { + recording = LiveRecordingsManager()->GetByMd5Hash(recid); + if (!recording) + throw HtmlError(tr("Couldn't find recording. Maybe you mistyped your request?")); + } + + if (request.getMethod() == "POST") { + if (name.empty()) + message = tr("Please set a name for the recording!"); + else if (recording) { + for (deletions_type::const_iterator it = deletions.begin(); it != deletions.end(); ++it) { + if (*it == "resume") + LiveRecordingsManager()->DeleteResume(recording); + else if (*it == "marks") + LiveRecordingsManager()->DeleteMarks(recording); + } + deletions.clear(); + string filename = directory.empty() ? name : StringReplace(directory, "/", "~") + "~" + name; + if (LiveRecordingsManager()->RenameRecording(recording, FileSystemExchangeChars(filename, true))) + return reply.redirect(!edit_rec_referer.empty() ? edit_rec_referer : "recordings.html"); + else + message = tr("Cannot rename or move the recording."); + } + } + + if (message.empty()) + edit_rec_referer = request.getHeader("Referer:", "recordings.html"); + + if (recording) { + string path = recording->Name(); + size_t found = path.find_last_of("~"); + + if (found != string::npos) { + directory = StringReplace(path.substr(0, found), "~", "/"); + name = path.substr(found + 1); + } + else { + directory = ""; + name = path; + } + } +</%cpp> +<& pageelems.doc_type &> +<html> + <head> + <title>VDR Live - <$ tr("Edit recording") $></title> +<%cpp> + if (!ajaxReq) { +</%cpp> + <& pageelems.stylesheets &> + <& pageelems.ajax_js &> +<%cpp> + } +</%cpp> + </head> + <body> +<%cpp> + if (!ajaxReq) { +</%cpp> + <& pageelems.logo &> + <& menu active=("recordings") &> +<%cpp> + } +</%cpp> + <div class="inhalt"> + <form method="post" name="edit_recording" id="<$ recid $>" action="edit_recording.ecpp"> + <input type="hidden" name="recid" value="<$ recid $>"/> + <table class="formular" cellpadding="0" cellspacing="0"> + <tr class="head"> + <td class="toprow leftcol rightcol" colspan="2"><div class="boxheader"><div><div class="caption"><$ tr("Edit recording") $></div></div></div></td> + </tr> + <tr> + <td class="label leftcol"><div class="withmargin"><$ tr("Name") $>:</div></td> + <td class="rightcol"><input type="text" name="name" value="<$ name $>" size="80"/></td> + </tr> + <tr> + <td class="label leftcol"><div class="withmargin"><$ tr("Directory") $>:</div></td> + <td class="rightcol"> + <select name="directory" size="1" id="directory" style="margin-top: 5px"> +<%cpp> + DirectoryListPtr dirList(LiveRecordingsManager()->GetDirectoryList()); + DirectoryList::DirVecType::const_iterator dir; + + for (dir = dirList->begin(); dir != dirList->end(); ++dir) { +</%cpp> + <option value="<$ *dir $>"<$ (*dir == directory) ? "selected=\"selected\"" : "" $>><$ *dir $></option> +<%cpp> + } +</%cpp> + </select> + </td> + </tr> + <tr> + <td class="label leftcol"><div class="withmargin"><$ tr("Delete resume information") $>:</div></td> + <td class="rightcol"><input type="checkbox" name="deletions" value="resume"/></td> + </tr> + <tr> + <td class="label leftcol"><div class="withmargin"><$ tr("Delete marks information") $>:</div></td> + <td class="rightcol"><input type="checkbox" name="deletions" value="marks"/></td> + </tr> + <tr> + <td class="buttonpanel leftcol rightcol bottomrow" colspan="2"> + <div class="withmargin"> + <button class="green" type="submit"><$ tr("Save") $></button> + <button class="red" type="button" onclick="history.back()"><$ tr("Cancel") $></button> + </div> + </td> + </tr> + </table> + </form> + <div style="color: red; margin: 0 auto;"> + <$ message $> + </div> + </div> + </body> +</html> +<%include>page_exit.eh</%include> diff --git a/pages/edit_user.ecpp b/pages/edit_user.ecpp index 2ae510a..e1d977c 100644 --- a/pages/edit_user.ecpp +++ b/pages/edit_user.ecpp @@ -24,6 +24,7 @@ using namespace vdrlive; bool ur_switchchnl = false; bool ur_addstimers = false; bool ur_delstimers = false; + bool ur_editrecs = false; </%args> <%session scope="global"> bool logged_in(false); @@ -65,6 +66,7 @@ cUser* editUser; if (ur_switchchnl) editUser->SetRight(UR_SWITCHCHNL); if (ur_addstimers) editUser->SetRight(UR_EDITSTIMERS); if (ur_delstimers) editUser->SetRight(UR_DELSTIMERS); + if (ur_editrecs) editUser->SetRight(UR_EDITRECS); Users.Save(); @@ -89,6 +91,7 @@ cUser* editUser; ur_switchchnl = User->HasRightTo(UR_SWITCHCHNL); ur_addstimers = User->HasRightTo(UR_EDITSTIMERS); ur_delstimers = User->HasRightTo(UR_DELSTIMERS); + ur_editrecs = User->HasRightTo(UR_EDITRECS); editUser = User; } else @@ -102,6 +105,7 @@ cUser* editUser; ur_switchchnl = true; ur_addstimers = true; ur_delstimers = true; + ur_editrecs = true; } </%cpp> <& pageelems.doc_type &> @@ -158,6 +162,8 @@ cUser* editUser; <%cpp> } </%cpp> + <input type="checkbox" name="ur_editrecs" value="1" <{ CHECKIF(ur_editrecs) }> /> + <label for="ur_editrecs"><$ tr("Edit recordings") $></label><br> </td> </tr> <tr> diff --git a/pages/recordings.ecpp b/pages/recordings.ecpp index b5272b9..b6630d1 100644 --- a/pages/recordings.ecpp +++ b/pages/recordings.ecpp @@ -24,6 +24,7 @@ using namespace std; <%args> string todel; string diskinfo; + string deletions[]; </%args> <%session scope="global"> bool logged_in(false); @@ -37,14 +38,20 @@ if (!logged_in && LiveSetup().UseAuth()) return reply.redirect("login.html"); pageTitle = tr("Recordings"); +deleteResult = ""; if (!todel.empty()) { - RemoveRecordingTask task(todel); + deletions.push_back(todel); +} +for (deletions_type::const_iterator it = deletions.begin(); it != deletions.end(); ++it) { + RemoveRecordingTask task(*it); LiveTaskManager().Execute(task); if (!task.Result()) - deleteResult = string() + tr("ERROR:") + " " + task.Error(); + deleteResult += string() + tr("ERROR:") + " " + task.Error() + "<br/>"; else - deleteResult = string() + tr("Deleted recording:") + " " + StringReplace(task.RecName(), "~", "/"); + deleteResult += string() + tr("Deleted recording:") + " " + StringReplace(task.RecName(), "~", "/") + "<br/>"; } +deletions.clear(); + int FreeMB, UsedMB; int Percent = VideoDiskSpace(&FreeMB, &UsedMB); int Minutes = int(double(FreeMB) / MB_PER_MINUTE); @@ -82,11 +89,14 @@ if (! deleteResult.empty()) { <%cpp> } else { </%cpp> + <form method="post" name="recordings" action="recordings.ecpp"> <div class="recordings"> <ul class="recordingslist" style="display: block;"> <& recordings.recordings_item &> </ul> </div> + <div class="withmargin"><button class="red" type="submit"><$ tr("Delete selected") $></button></div> + </form> <%cpp> } </%cpp> @@ -165,6 +175,16 @@ for (iter = recordingsTree->begin(path); iter != end; ++iter) { <# ---------------------------------------------------------------------- #> +<%def edit_rec> +<%args> + string id; +</%args> +<%cpp> { </%cpp><a href="edit_recording.html?recid=<$ id $>"><img src="<$ LiveSetup().GetThemedLink("img", "edit.png") $>" alt="" <& tooltip.hint text=(tr("Edit recording")) &> /></a><%cpp> } </%cpp> +</%def> + +<# ---------------------------------------------------------------------- #> + + <%def rec_tools> <%args> string id; @@ -173,6 +193,7 @@ for (iter = recordingsTree->begin(path); iter != end; ++iter) { <& pageelems.ajax_action_href action="play_recording" param=(id) tip=(tr("play this recording.")) image="play.png" alt="" &> <& pageelems.vlc_stream_recording recid=(id) &> <& pageelems.imdb_info_href title=(title) &> +<& recordings.edit_rec id=(id) &> <& recordings.del_rec id=(id) &> </%def> @@ -226,7 +247,7 @@ for (iter = recordingsTree->begin(path); iter != end; ++iter) { char const * recFormatStr( tr("%a %x %X") ); </%cpp> <div class="recording_item"> - <div class="recording_imgs"><%cpp> reply.out() << StringRepeat(level + 1, "<img src=\"img/transparent.png\" alt=\"\" width=\"16px\" height=\"16px\" />"); </%cpp><%cpp> if (!archived.empty()) { </%cpp><img src="<$ LiveSetup().GetThemedLink("img", "on_dvd.png") $>" alt="on_dvd" <& tooltip.hint text=(archived) &> /><%cpp> } else { </%cpp><img src="<$ LiveSetup().GetThemedLink("img", "movie.png") $>" alt="movie" /><%cpp> } </%cpp></div> + <div class="recording_imgs"><%cpp> reply.out() << StringRepeat(level + 1, "<img src=\"img/transparent.png\" alt=\"\" width=\"16px\" height=\"16px\" />"); </%cpp><%cpp> if (!archived.empty()) { </%cpp><img src="<$ LiveSetup().GetThemedLink("img", "on_dvd.png") $>" alt="on_dvd" <& tooltip.hint text=(archived) &> /><%cpp> } else { </%cpp><input type="checkbox" name="deletions" value="<$ id $>" /><%cpp> } </%cpp></div> <div class="recording_spec"> <div class="recording_day"><$ FormatDateTime(recFormatStr, startTime) $></div> <div class="recording_duration"><$ duration $></div> @@ -246,9 +267,6 @@ for (iter = recordingsTree->begin(path); iter != end; ++iter) { <%cpp> } </%cpp> - <!-- not supported yet ... - <img src="<$ LiveSetup().GetThemedLink("img", "edit.png") $>" alt="" /> - --> </div> <%cpp> if (! archived.empty()) { @@ -263,5 +281,5 @@ for (iter = recordingsTree->begin(path); iter != end; ++iter) { <# ---------------------------------------------------------------------- #> <%def delete_error> -<%cpp> { </%cpp><$ deleteResult $><%cpp> } </%cpp> +<%cpp> { reply.out() << deleteResult; } </%cpp> </%def> diff --git a/po/ca_ES.po b/po/ca_ES.po index 3833a40..40d3f67 100644 --- a/po/ca_ES.po +++ b/po/ca_ES.po @@ -132,6 +132,36 @@ msgstr "" msgid "Sorry, no permission. Please contact your administrator!" msgstr "" +msgid "Couldn't find recording. Maybe you mistyped your request?" +msgstr "" + +msgid "Please set a name for the recording!" +msgstr "" + +msgid "Cannot rename or move the recording." +msgstr "" + +msgid "Edit recording" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Directory" +msgstr "" + +msgid "Delete resume information" +msgstr "" + +msgid "Delete marks information" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Cancel" +msgstr "" + msgid "Couldn't find searchtimer. Maybe you mistyped your request?" msgstr "" @@ -301,9 +331,6 @@ msgstr "" msgid "Series recording" msgstr "" -msgid "Directory" -msgstr "" - msgid "Delete recordings after ... days" msgstr "" @@ -355,12 +382,6 @@ msgstr "" msgid "Test" msgstr "" -msgid "Save" -msgstr "" - -msgid "Cancel" -msgstr "" - msgid "Couldn't find timer. Maybe you mistyped your request?" msgstr "" @@ -388,9 +409,6 @@ msgstr "" msgid "New user" msgstr "" -msgid "Name" -msgstr "" - msgid "Password" msgstr "" @@ -424,6 +442,9 @@ msgstr "" msgid "Delete search timers" msgstr "" +msgid "Edit recordings" +msgstr "" + msgid "Electronic program guide information" msgstr "" @@ -676,6 +697,9 @@ msgstr "" msgid "No recordings found" msgstr "" +msgid "Delete selected" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "" diff --git a/po/cs_CZ.po b/po/cs_CZ.po index 0df69ad..c4d7d07 100644 --- a/po/cs_CZ.po +++ b/po/cs_CZ.po @@ -130,6 +130,36 @@ msgstr "" msgid "Sorry, no permission. Please contact your administrator!" msgstr "" +msgid "Couldn't find recording. Maybe you mistyped your request?" +msgstr "" + +msgid "Please set a name for the recording!" +msgstr "" + +msgid "Cannot rename or move the recording." +msgstr "" + +msgid "Edit recording" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Directory" +msgstr "" + +msgid "Delete resume information" +msgstr "" + +msgid "Delete marks information" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Cancel" +msgstr "" + msgid "Couldn't find searchtimer. Maybe you mistyped your request?" msgstr "" @@ -299,9 +329,6 @@ msgstr "" msgid "Series recording" msgstr "" -msgid "Directory" -msgstr "" - msgid "Delete recordings after ... days" msgstr "" @@ -353,12 +380,6 @@ msgstr "" msgid "Test" msgstr "" -msgid "Save" -msgstr "" - -msgid "Cancel" -msgstr "" - msgid "Couldn't find timer. Maybe you mistyped your request?" msgstr "" @@ -386,9 +407,6 @@ msgstr "" msgid "New user" msgstr "" -msgid "Name" -msgstr "" - msgid "Password" msgstr "" @@ -422,6 +440,9 @@ msgstr "" msgid "Delete search timers" msgstr "" +msgid "Edit recordings" +msgstr "" + msgid "Electronic program guide information" msgstr "" @@ -674,6 +695,9 @@ msgstr "" msgid "No recordings found" msgstr "" +msgid "Delete selected" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "" diff --git a/po/da_DK.po b/po/da_DK.po index eda9629..12476c5 100644 --- a/po/da_DK.po +++ b/po/da_DK.po @@ -130,6 +130,36 @@ msgstr "" msgid "Sorry, no permission. Please contact your administrator!" msgstr "" +msgid "Couldn't find recording. Maybe you mistyped your request?" +msgstr "" + +msgid "Please set a name for the recording!" +msgstr "" + +msgid "Cannot rename or move the recording." +msgstr "" + +msgid "Edit recording" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Directory" +msgstr "" + +msgid "Delete resume information" +msgstr "" + +msgid "Delete marks information" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Cancel" +msgstr "" + msgid "Couldn't find searchtimer. Maybe you mistyped your request?" msgstr "" @@ -299,9 +329,6 @@ msgstr "" msgid "Series recording" msgstr "" -msgid "Directory" -msgstr "" - msgid "Delete recordings after ... days" msgstr "" @@ -353,12 +380,6 @@ msgstr "" msgid "Test" msgstr "" -msgid "Save" -msgstr "" - -msgid "Cancel" -msgstr "" - msgid "Couldn't find timer. Maybe you mistyped your request?" msgstr "" @@ -386,9 +407,6 @@ msgstr "" msgid "New user" msgstr "" -msgid "Name" -msgstr "" - msgid "Password" msgstr "" @@ -422,6 +440,9 @@ msgstr "" msgid "Delete search timers" msgstr "" +msgid "Edit recordings" +msgstr "" + msgid "Electronic program guide information" msgstr "" @@ -674,6 +695,9 @@ msgstr "" msgid "No recordings found" msgstr "" +msgid "Delete selected" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "" diff --git a/po/de_DE.po b/po/de_DE.po index 3bd2c24..22f91be 100644 --- a/po/de_DE.po +++ b/po/de_DE.po @@ -132,6 +132,36 @@ msgstr "Zugriff auf die Kanäle wurde verweigert. Bitte später versuchen." msgid "Sorry, no permission. Please contact your administrator!" msgstr "Leider nicht erlaubt. Bitte kontaktieren Sie Ihren Administrator!" +msgid "Couldn't find recording. Maybe you mistyped your request?" +msgstr "" + +msgid "Please set a name for the recording!" +msgstr "" + +msgid "Cannot rename or move the recording." +msgstr "" + +msgid "Edit recording" +msgstr "" + +msgid "Name" +msgstr "Name" + +msgid "Directory" +msgstr "Verzeichnis" + +msgid "Delete resume information" +msgstr "" + +msgid "Delete marks information" +msgstr "" + +msgid "Save" +msgstr "Speichern" + +msgid "Cancel" +msgstr "Abbrechen" + msgid "Couldn't find searchtimer. Maybe you mistyped your request?" msgstr "Keinen Suchtimer gefunden. Möglicherweise ein Tippfehler in der Anfrage?" @@ -301,9 +331,6 @@ msgstr "Nur umschalten" msgid "Series recording" msgstr "Serienaufnahme" -msgid "Directory" -msgstr "Verzeichnis" - msgid "Delete recordings after ... days" msgstr "Aufn. nach ... Tagen löschen" @@ -355,12 +382,6 @@ msgstr "Umschalten ... Minuten vor Start" msgid "Test" msgstr "Testen" -msgid "Save" -msgstr "Speichern" - -msgid "Cancel" -msgstr "Abbrechen" - msgid "Couldn't find timer. Maybe you mistyped your request?" msgstr "Konnte Timer nicht finden. Evtl. fehlerhafte Anforderung?" @@ -388,9 +409,6 @@ msgstr "Benutzer bearbeiten" msgid "New user" msgstr "Neuen Benutzer anlegen" -msgid "Name" -msgstr "Name" - msgid "Password" msgstr "Passwort" @@ -424,6 +442,9 @@ msgstr "Suchtimer hinzufügen oder ändern" msgid "Delete search timers" msgstr "Suchtimer löschen" +msgid "Edit recordings" +msgstr "" + msgid "Electronic program guide information" msgstr "Elektronische Programminformation" @@ -676,6 +697,9 @@ msgstr "Liste der Aufnahmen" msgid "No recordings found" msgstr "Keine Aufnahmen vorhanden" +msgid "Delete selected" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "Diese Aufnahme von der Festplatte löschen!" @@ -891,4 +915,3 @@ msgstr "" msgid "No EPG information available" msgstr "Keine EPG Daten vorhanden" - diff --git a/po/el_GR.po b/po/el_GR.po index 948cace..73f2bbf 100644 --- a/po/el_GR.po +++ b/po/el_GR.po @@ -130,6 +130,36 @@ msgstr "" msgid "Sorry, no permission. Please contact your administrator!" msgstr "" +msgid "Couldn't find recording. Maybe you mistyped your request?" +msgstr "" + +msgid "Please set a name for the recording!" +msgstr "" + +msgid "Cannot rename or move the recording." +msgstr "" + +msgid "Edit recording" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Directory" +msgstr "" + +msgid "Delete resume information" +msgstr "" + +msgid "Delete marks information" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Cancel" +msgstr "" + msgid "Couldn't find searchtimer. Maybe you mistyped your request?" msgstr "" @@ -299,9 +329,6 @@ msgstr "" msgid "Series recording" msgstr "" -msgid "Directory" -msgstr "" - msgid "Delete recordings after ... days" msgstr "" @@ -353,12 +380,6 @@ msgstr "" msgid "Test" msgstr "" -msgid "Save" -msgstr "" - -msgid "Cancel" -msgstr "" - msgid "Couldn't find timer. Maybe you mistyped your request?" msgstr "" @@ -386,9 +407,6 @@ msgstr "" msgid "New user" msgstr "" -msgid "Name" -msgstr "" - msgid "Password" msgstr "" @@ -422,6 +440,9 @@ msgstr "" msgid "Delete search timers" msgstr "" +msgid "Edit recordings" +msgstr "" + msgid "Electronic program guide information" msgstr "" @@ -674,6 +695,9 @@ msgstr "" msgid "No recordings found" msgstr "" +msgid "Delete selected" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "" diff --git a/po/es_ES.po b/po/es_ES.po index 8c94267..ca5e239 100644 --- a/po/es_ES.po +++ b/po/es_ES.po @@ -130,6 +130,36 @@ msgstr "" msgid "Sorry, no permission. Please contact your administrator!" msgstr "" +msgid "Couldn't find recording. Maybe you mistyped your request?" +msgstr "" + +msgid "Please set a name for the recording!" +msgstr "" + +msgid "Cannot rename or move the recording." +msgstr "" + +msgid "Edit recording" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Directory" +msgstr "" + +msgid "Delete resume information" +msgstr "" + +msgid "Delete marks information" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Cancel" +msgstr "" + msgid "Couldn't find searchtimer. Maybe you mistyped your request?" msgstr "" @@ -299,9 +329,6 @@ msgstr "" msgid "Series recording" msgstr "" -msgid "Directory" -msgstr "" - msgid "Delete recordings after ... days" msgstr "" @@ -353,12 +380,6 @@ msgstr "" msgid "Test" msgstr "" -msgid "Save" -msgstr "" - -msgid "Cancel" -msgstr "" - msgid "Couldn't find timer. Maybe you mistyped your request?" msgstr "" @@ -386,9 +407,6 @@ msgstr "" msgid "New user" msgstr "" -msgid "Name" -msgstr "" - msgid "Password" msgstr "" @@ -422,6 +440,9 @@ msgstr "" msgid "Delete search timers" msgstr "" +msgid "Edit recordings" +msgstr "" + msgid "Electronic program guide information" msgstr "" @@ -674,6 +695,9 @@ msgstr "" msgid "No recordings found" msgstr "" +msgid "Delete selected" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "" diff --git a/po/et_EE.po b/po/et_EE.po index 8969d1e..2d72264 100644 --- a/po/et_EE.po +++ b/po/et_EE.po @@ -130,6 +130,36 @@ msgstr "" msgid "Sorry, no permission. Please contact your administrator!" msgstr "" +msgid "Couldn't find recording. Maybe you mistyped your request?" +msgstr "" + +msgid "Please set a name for the recording!" +msgstr "" + +msgid "Cannot rename or move the recording." +msgstr "" + +msgid "Edit recording" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Directory" +msgstr "" + +msgid "Delete resume information" +msgstr "" + +msgid "Delete marks information" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Cancel" +msgstr "" + msgid "Couldn't find searchtimer. Maybe you mistyped your request?" msgstr "" @@ -299,9 +329,6 @@ msgstr "" msgid "Series recording" msgstr "" -msgid "Directory" -msgstr "" - msgid "Delete recordings after ... days" msgstr "" @@ -353,12 +380,6 @@ msgstr "" msgid "Test" msgstr "" -msgid "Save" -msgstr "" - -msgid "Cancel" -msgstr "" - msgid "Couldn't find timer. Maybe you mistyped your request?" msgstr "" @@ -386,9 +407,6 @@ msgstr "" msgid "New user" msgstr "" -msgid "Name" -msgstr "" - msgid "Password" msgstr "" @@ -422,6 +440,9 @@ msgstr "" msgid "Delete search timers" msgstr "" +msgid "Edit recordings" +msgstr "" + msgid "Electronic program guide information" msgstr "" @@ -674,6 +695,9 @@ msgstr "" msgid "No recordings found" msgstr "" +msgid "Delete selected" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "" diff --git a/po/fi_FI.po b/po/fi_FI.po index c3ec1e7..8da804a 100644 --- a/po/fi_FI.po +++ b/po/fi_FI.po @@ -130,6 +130,36 @@ msgstr "Kanavien käyttäminen epäonnistui! Yritä myöhemmin uudelleen." msgid "Sorry, no permission. Please contact your administrator!" msgstr "Ei käyttöoikeutta. Ota yhteyttä ylläpitäjään!" +msgid "Couldn't find recording. Maybe you mistyped your request?" +msgstr "Tallennetta ei löydy. Kirjoititko varmasti oikein?" + +msgid "Please set a name for the recording!" +msgstr "Aseta nimi tallenteelle!" + +msgid "Cannot rename or move the recording." +msgstr "Tallenteen uudelleen nimeäminen tai siirto epäonnistui!" + +msgid "Edit recording" +msgstr "Muokkaa tallennetta" + +msgid "Name" +msgstr "Nimi" + +msgid "Directory" +msgstr "Hakemisto" + +msgid "Delete resume information" +msgstr "Poista paluutiedot" + +msgid "Delete marks information" +msgstr "Poista merkinnät" + +msgid "Save" +msgstr "Tallenna" + +msgid "Cancel" +msgstr "Peru" + msgid "Couldn't find searchtimer. Maybe you mistyped your request?" msgstr "Hakuajastimia ei löydetä! Onko pyyntö oikein kirjoitettu?" @@ -299,9 +329,6 @@ msgstr "Kanavanvaihto" msgid "Series recording" msgstr "Sarjatallennus" -msgid "Directory" -msgstr "Hakemisto" - msgid "Delete recordings after ... days" msgstr "Poista tallenteet ... päivän jälkeen" @@ -353,12 +380,6 @@ msgstr "Vaihda ... minuuttia ennen alkua" msgid "Test" msgstr "Testaa" -msgid "Save" -msgstr "Tallenna" - -msgid "Cancel" -msgstr "Peru" - msgid "Couldn't find timer. Maybe you mistyped your request?" msgstr "Ajastinta ei löydy. Kirjoititko varmasti oikein?" @@ -386,9 +407,6 @@ msgstr "Muokkaa käyttäjää" msgid "New user" msgstr "Luo uusi käyttäjä" -msgid "Name" -msgstr "Nimi" - msgid "Password" msgstr "Salasana" @@ -422,6 +440,9 @@ msgstr "Lisää/muokkaa hakuajastimia" msgid "Delete search timers" msgstr "Poista hakuajastimia" +msgid "Edit recordings" +msgstr "Muokkaa tallenteita" + msgid "Electronic program guide information" msgstr "Ohjelmaoppaan tiedot" @@ -674,6 +695,9 @@ msgstr "Tallennelistaus" msgid "No recordings found" msgstr "Tallenteita ei löydy" +msgid "Delete selected" +msgstr "Poista valitut" + msgid "Delete this recording from hard disc!" msgstr "Poista tallenne kovalevyltä!" diff --git a/po/fr_FR.po b/po/fr_FR.po index e875bd5..82f3e08 100644 --- a/po/fr_FR.po +++ b/po/fr_FR.po @@ -136,6 +136,36 @@ msgstr "Impossible d'avoir accès à des chaînes, réessayer ultérieurement." msgid "Sorry, no permission. Please contact your administrator!" msgstr "" +msgid "Couldn't find recording. Maybe you mistyped your request?" +msgstr "" + +msgid "Please set a name for the recording!" +msgstr "" + +msgid "Cannot rename or move the recording." +msgstr "" + +msgid "Edit recording" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Directory" +msgstr "Dossier" + +msgid "Delete resume information" +msgstr "" + +msgid "Delete marks information" +msgstr "" + +msgid "Save" +msgstr "Sauvegarde" + +msgid "Cancel" +msgstr "Interrompre" + msgid "Couldn't find searchtimer. Maybe you mistyped your request?" msgstr "Impossible de trouver la programmation de recherche. Peut-être que votre demande de fautes de frappe?" @@ -305,9 +335,6 @@ msgstr "Seulement changer de chaine" msgid "Series recording" msgstr "Enregistrement de série" -msgid "Directory" -msgstr "Dossier" - msgid "Delete recordings after ... days" msgstr "Effacer l'enregistrement après ... jours" @@ -359,12 +386,6 @@ msgstr "Changer ... minutes avant le début" msgid "Test" msgstr "Tester" -msgid "Save" -msgstr "Sauvegarde" - -msgid "Cancel" -msgstr "Interrompre" - msgid "Couldn't find timer. Maybe you mistyped your request?" msgstr "N'a pas pu trouver la programmation. Peut-être vous avez une erreur dans votre requête?" @@ -395,9 +416,6 @@ msgstr "Editer la programmation" msgid "New user" msgstr "Nouvelle programmation" -msgid "Name" -msgstr "" - msgid "Password" msgstr "Mot de passe" @@ -441,6 +459,9 @@ msgstr "Editer l'expression de recherche" msgid "Delete search timers" msgstr "Effacer la programmation de recherche" +msgid "Edit recordings" +msgstr "" + msgid "Electronic program guide information" msgstr "Guide électronique d'information des programmes EPG" @@ -695,6 +716,9 @@ msgstr "Liste des enregistrements" msgid "No recordings found" msgstr "Pas d'enregistrement" +msgid "Delete selected" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "" diff --git a/po/hr_HR.po b/po/hr_HR.po index 394579d..c3446b9 100644 --- a/po/hr_HR.po +++ b/po/hr_HR.po @@ -131,6 +131,36 @@ msgstr "" msgid "Sorry, no permission. Please contact your administrator!" msgstr "" +msgid "Couldn't find recording. Maybe you mistyped your request?" +msgstr "" + +msgid "Please set a name for the recording!" +msgstr "" + +msgid "Cannot rename or move the recording." +msgstr "" + +msgid "Edit recording" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Directory" +msgstr "" + +msgid "Delete resume information" +msgstr "" + +msgid "Delete marks information" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Cancel" +msgstr "" + msgid "Couldn't find searchtimer. Maybe you mistyped your request?" msgstr "" @@ -300,9 +330,6 @@ msgstr "" msgid "Series recording" msgstr "" -msgid "Directory" -msgstr "" - msgid "Delete recordings after ... days" msgstr "" @@ -354,12 +381,6 @@ msgstr "" msgid "Test" msgstr "" -msgid "Save" -msgstr "" - -msgid "Cancel" -msgstr "" - msgid "Couldn't find timer. Maybe you mistyped your request?" msgstr "" @@ -387,9 +408,6 @@ msgstr "" msgid "New user" msgstr "" -msgid "Name" -msgstr "" - msgid "Password" msgstr "" @@ -423,6 +441,9 @@ msgstr "" msgid "Delete search timers" msgstr "" +msgid "Edit recordings" +msgstr "" + msgid "Electronic program guide information" msgstr "" @@ -675,6 +696,9 @@ msgstr "" msgid "No recordings found" msgstr "" +msgid "Delete selected" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "" diff --git a/po/hu_HU.po b/po/hu_HU.po index 9e22a49..a04971c 100644 --- a/po/hu_HU.po +++ b/po/hu_HU.po @@ -131,6 +131,36 @@ msgstr "" msgid "Sorry, no permission. Please contact your administrator!" msgstr "" +msgid "Couldn't find recording. Maybe you mistyped your request?" +msgstr "" + +msgid "Please set a name for the recording!" +msgstr "" + +msgid "Cannot rename or move the recording." +msgstr "" + +msgid "Edit recording" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Directory" +msgstr "" + +msgid "Delete resume information" +msgstr "" + +msgid "Delete marks information" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Cancel" +msgstr "" + msgid "Couldn't find searchtimer. Maybe you mistyped your request?" msgstr "" @@ -300,9 +330,6 @@ msgstr "" msgid "Series recording" msgstr "" -msgid "Directory" -msgstr "" - msgid "Delete recordings after ... days" msgstr "" @@ -354,12 +381,6 @@ msgstr "" msgid "Test" msgstr "" -msgid "Save" -msgstr "" - -msgid "Cancel" -msgstr "" - msgid "Couldn't find timer. Maybe you mistyped your request?" msgstr "" @@ -387,9 +408,6 @@ msgstr "" msgid "New user" msgstr "" -msgid "Name" -msgstr "" - msgid "Password" msgstr "" @@ -423,6 +441,9 @@ msgstr "" msgid "Delete search timers" msgstr "" +msgid "Edit recordings" +msgstr "" + msgid "Electronic program guide information" msgstr "" @@ -675,6 +696,9 @@ msgstr "" msgid "No recordings found" msgstr "" +msgid "Delete selected" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "" diff --git a/po/it_IT.po b/po/it_IT.po index a3623e5..f9b098c 100644 --- a/po/it_IT.po +++ b/po/it_IT.po @@ -136,6 +136,36 @@ msgstr "Impossibile avere accesso ai canali, riprova più tardi." msgid "Sorry, no permission. Please contact your administrator!" msgstr "Spiacenti, senza permessi. Per favore contatta l'amministratore!" +msgid "Couldn't find recording. Maybe you mistyped your request?" +msgstr "" + +msgid "Please set a name for the recording!" +msgstr "" + +msgid "Cannot rename or move the recording." +msgstr "" + +msgid "Edit recording" +msgstr "" + +msgid "Name" +msgstr "Nome" + +msgid "Directory" +msgstr "Directory" + +msgid "Delete resume information" +msgstr "" + +msgid "Delete marks information" +msgstr "" + +msgid "Save" +msgstr "Salva" + +msgid "Cancel" +msgstr "Annulla" + msgid "Couldn't find searchtimer. Maybe you mistyped your request?" msgstr "Impossibile trovare timer ricerca. Hai digitato correttamente la richiesta?" @@ -305,9 +335,6 @@ msgstr "Cambia soltanto" msgid "Series recording" msgstr "Registrazione serie" -msgid "Directory" -msgstr "Directory" - msgid "Delete recordings after ... days" msgstr "Elimina registrazioni dopo ... giorni" @@ -359,12 +386,6 @@ msgstr "Cambia ... minuti prima dell'inizio" msgid "Test" msgstr "Prova" -msgid "Save" -msgstr "Salva" - -msgid "Cancel" -msgstr "Annulla" - msgid "Couldn't find timer. Maybe you mistyped your request?" msgstr "Impossibile trovare timer. Hai digitato correttamente la richiesta?" @@ -392,9 +413,6 @@ msgstr "Modifica utente" msgid "New user" msgstr "Nuovo utente" -msgid "Name" -msgstr "Nome" - msgid "Password" msgstr "Password" @@ -428,6 +446,9 @@ msgstr "Aggiungi o modifica timer di ricerca" msgid "Delete search timers" msgstr "Elimina timer di ricerca" +msgid "Edit recordings" +msgstr "" + msgid "Electronic program guide information" msgstr "Info Guida Elettronica Programmi (EPG)" @@ -680,6 +701,9 @@ msgstr "Elenco registrazioni" msgid "No recordings found" msgstr "Nessuna registrazione trovata" +msgid "Delete selected" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "Elimina questa registrazione dal disco fisso!" diff --git a/po/lt_LT.po b/po/lt_LT.po index 37363f3..377e0ee 100644 --- a/po/lt_LT.po +++ b/po/lt_LT.po @@ -131,6 +131,36 @@ msgstr "Neprieina prie kanalų, pabandykit vÄ—liau." msgid "Sorry, no permission. Please contact your administrator!" msgstr "Atleiskit, bet jÅ«s neturite užtektinai teisių. Susisiekite su sistemos administratoriumi!" +msgid "Couldn't find recording. Maybe you mistyped your request?" +msgstr "" + +msgid "Please set a name for the recording!" +msgstr "" + +msgid "Cannot rename or move the recording." +msgstr "" + +msgid "Edit recording" +msgstr "" + +msgid "Name" +msgstr "Vardas" + +msgid "Directory" +msgstr "Katalogas" + +msgid "Delete resume information" +msgstr "" + +msgid "Delete marks information" +msgstr "" + +msgid "Save" +msgstr "IÅ¡saugoti" + +msgid "Cancel" +msgstr "Atmesti" + msgid "Couldn't find searchtimer. Maybe you mistyped your request?" msgstr "Nerandamas paieÅ¡kos laikmatis. Gal pateikÄ—te netiksliÄ… užklausÄ…?" @@ -300,9 +330,6 @@ msgstr "Tik pereina" msgid "Series recording" msgstr "Ä®raÅ¡ai" -msgid "Directory" -msgstr "Katalogas" - msgid "Delete recordings after ... days" msgstr "IÅ¡trinti įraÅ¡us po ... dienų" @@ -354,12 +381,6 @@ msgstr "Ä®jungti ... minutÄ—mis anksÄiau prieÅ¡ pradedant įraÅ¡Ä…" msgid "Test" msgstr "Pabandyti" -msgid "Save" -msgstr "IÅ¡saugoti" - -msgid "Cancel" -msgstr "Atmesti" - msgid "Couldn't find timer. Maybe you mistyped your request?" msgstr "Toks laikmatis nerastas. Gal įvedÄ—te klaidingÄ… paieÅ¡kos frazÄ™?" @@ -387,9 +408,6 @@ msgstr "Koreguoti vartotojÄ…" msgid "New user" msgstr "Naujas vartotojas" -msgid "Name" -msgstr "Vardas" - msgid "Password" msgstr "Slapyvardis" @@ -423,6 +441,9 @@ msgstr "PridÄ—ti arba koreguoti paieÅ¡kos laikmaÄius" msgid "Delete search timers" msgstr "IÅ¡trinti paieÅ¡kos laikmaÄius" +msgid "Edit recordings" +msgstr "" + msgid "Electronic program guide information" msgstr "Elektroninis programų gidas" @@ -675,6 +696,9 @@ msgstr "Ä®rašų sÄ…raÅ¡as" msgid "No recordings found" msgstr "Ä®rašų nÄ—ra" +msgid "Delete selected" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "IÅ¡trinti šį įraÅ¡Ä… iÅ¡ disko!" diff --git a/po/nl_NL.po b/po/nl_NL.po index af1b1f3..9257518 100644 --- a/po/nl_NL.po +++ b/po/nl_NL.po @@ -136,6 +136,36 @@ msgstr "" msgid "Sorry, no permission. Please contact your administrator!" msgstr "" +msgid "Couldn't find recording. Maybe you mistyped your request?" +msgstr "" + +msgid "Please set a name for the recording!" +msgstr "" + +msgid "Cannot rename or move the recording." +msgstr "" + +msgid "Edit recording" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Directory" +msgstr "Directory" + +msgid "Delete resume information" +msgstr "" + +msgid "Delete marks information" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Cancel" +msgstr "" + msgid "Couldn't find searchtimer. Maybe you mistyped your request?" msgstr "" @@ -305,9 +335,6 @@ msgstr "" msgid "Series recording" msgstr "Serie's opnemen" -msgid "Directory" -msgstr "Directory" - msgid "Delete recordings after ... days" msgstr "" @@ -359,12 +386,6 @@ msgstr "" msgid "Test" msgstr "" -msgid "Save" -msgstr "" - -msgid "Cancel" -msgstr "" - msgid "Couldn't find timer. Maybe you mistyped your request?" msgstr "" @@ -393,9 +414,6 @@ msgstr "Serie's opnemen" msgid "New user" msgstr "" -msgid "Name" -msgstr "" - msgid "Password" msgstr "" @@ -438,6 +456,9 @@ msgstr "Gebruik als zoek timer" msgid "Delete search timers" msgstr "Serie's opnemen" +msgid "Edit recordings" +msgstr "" + msgid "Electronic program guide information" msgstr "" @@ -691,6 +712,9 @@ msgstr "" msgid "No recordings found" msgstr "" +msgid "Delete selected" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "" diff --git a/po/nn_NO.po b/po/nn_NO.po index 6bd33ed..be3fe5e 100644 --- a/po/nn_NO.po +++ b/po/nn_NO.po @@ -131,6 +131,36 @@ msgstr "" msgid "Sorry, no permission. Please contact your administrator!" msgstr "" +msgid "Couldn't find recording. Maybe you mistyped your request?" +msgstr "" + +msgid "Please set a name for the recording!" +msgstr "" + +msgid "Cannot rename or move the recording." +msgstr "" + +msgid "Edit recording" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Directory" +msgstr "" + +msgid "Delete resume information" +msgstr "" + +msgid "Delete marks information" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Cancel" +msgstr "" + msgid "Couldn't find searchtimer. Maybe you mistyped your request?" msgstr "" @@ -300,9 +330,6 @@ msgstr "" msgid "Series recording" msgstr "" -msgid "Directory" -msgstr "" - msgid "Delete recordings after ... days" msgstr "" @@ -354,12 +381,6 @@ msgstr "" msgid "Test" msgstr "" -msgid "Save" -msgstr "" - -msgid "Cancel" -msgstr "" - msgid "Couldn't find timer. Maybe you mistyped your request?" msgstr "" @@ -387,9 +408,6 @@ msgstr "" msgid "New user" msgstr "" -msgid "Name" -msgstr "" - msgid "Password" msgstr "" @@ -423,6 +441,9 @@ msgstr "" msgid "Delete search timers" msgstr "" +msgid "Edit recordings" +msgstr "" + msgid "Electronic program guide information" msgstr "" @@ -675,6 +696,9 @@ msgstr "" msgid "No recordings found" msgstr "" +msgid "Delete selected" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "" diff --git a/po/pl_PL.po b/po/pl_PL.po index 507e3c9..aae24b7 100644 --- a/po/pl_PL.po +++ b/po/pl_PL.po @@ -130,6 +130,36 @@ msgstr "" msgid "Sorry, no permission. Please contact your administrator!" msgstr "" +msgid "Couldn't find recording. Maybe you mistyped your request?" +msgstr "" + +msgid "Please set a name for the recording!" +msgstr "" + +msgid "Cannot rename or move the recording." +msgstr "" + +msgid "Edit recording" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Directory" +msgstr "" + +msgid "Delete resume information" +msgstr "" + +msgid "Delete marks information" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Cancel" +msgstr "" + msgid "Couldn't find searchtimer. Maybe you mistyped your request?" msgstr "" @@ -299,9 +329,6 @@ msgstr "" msgid "Series recording" msgstr "" -msgid "Directory" -msgstr "" - msgid "Delete recordings after ... days" msgstr "" @@ -353,12 +380,6 @@ msgstr "" msgid "Test" msgstr "" -msgid "Save" -msgstr "" - -msgid "Cancel" -msgstr "" - msgid "Couldn't find timer. Maybe you mistyped your request?" msgstr "" @@ -386,9 +407,6 @@ msgstr "" msgid "New user" msgstr "" -msgid "Name" -msgstr "" - msgid "Password" msgstr "" @@ -422,6 +440,9 @@ msgstr "" msgid "Delete search timers" msgstr "" +msgid "Edit recordings" +msgstr "" + msgid "Electronic program guide information" msgstr "" @@ -674,6 +695,9 @@ msgstr "" msgid "No recordings found" msgstr "" +msgid "Delete selected" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "" diff --git a/po/pt_PT.po b/po/pt_PT.po index e45a915..4d23aca 100644 --- a/po/pt_PT.po +++ b/po/pt_PT.po @@ -130,6 +130,36 @@ msgstr "" msgid "Sorry, no permission. Please contact your administrator!" msgstr "" +msgid "Couldn't find recording. Maybe you mistyped your request?" +msgstr "" + +msgid "Please set a name for the recording!" +msgstr "" + +msgid "Cannot rename or move the recording." +msgstr "" + +msgid "Edit recording" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Directory" +msgstr "" + +msgid "Delete resume information" +msgstr "" + +msgid "Delete marks information" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Cancel" +msgstr "" + msgid "Couldn't find searchtimer. Maybe you mistyped your request?" msgstr "" @@ -299,9 +329,6 @@ msgstr "" msgid "Series recording" msgstr "" -msgid "Directory" -msgstr "" - msgid "Delete recordings after ... days" msgstr "" @@ -353,12 +380,6 @@ msgstr "" msgid "Test" msgstr "" -msgid "Save" -msgstr "" - -msgid "Cancel" -msgstr "" - msgid "Couldn't find timer. Maybe you mistyped your request?" msgstr "" @@ -386,9 +407,6 @@ msgstr "" msgid "New user" msgstr "" -msgid "Name" -msgstr "" - msgid "Password" msgstr "" @@ -422,6 +440,9 @@ msgstr "" msgid "Delete search timers" msgstr "" +msgid "Edit recordings" +msgstr "" + msgid "Electronic program guide information" msgstr "" @@ -674,6 +695,9 @@ msgstr "" msgid "No recordings found" msgstr "" +msgid "Delete selected" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "" diff --git a/po/ro_RO.po b/po/ro_RO.po index deb06e4..be02c5c 100644 --- a/po/ro_RO.po +++ b/po/ro_RO.po @@ -131,6 +131,36 @@ msgstr "" msgid "Sorry, no permission. Please contact your administrator!" msgstr "" +msgid "Couldn't find recording. Maybe you mistyped your request?" +msgstr "" + +msgid "Please set a name for the recording!" +msgstr "" + +msgid "Cannot rename or move the recording." +msgstr "" + +msgid "Edit recording" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Directory" +msgstr "" + +msgid "Delete resume information" +msgstr "" + +msgid "Delete marks information" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Cancel" +msgstr "" + msgid "Couldn't find searchtimer. Maybe you mistyped your request?" msgstr "" @@ -300,9 +330,6 @@ msgstr "" msgid "Series recording" msgstr "" -msgid "Directory" -msgstr "" - msgid "Delete recordings after ... days" msgstr "" @@ -354,12 +381,6 @@ msgstr "" msgid "Test" msgstr "" -msgid "Save" -msgstr "" - -msgid "Cancel" -msgstr "" - msgid "Couldn't find timer. Maybe you mistyped your request?" msgstr "" @@ -387,9 +408,6 @@ msgstr "" msgid "New user" msgstr "" -msgid "Name" -msgstr "" - msgid "Password" msgstr "" @@ -423,6 +441,9 @@ msgstr "" msgid "Delete search timers" msgstr "" +msgid "Edit recordings" +msgstr "" + msgid "Electronic program guide information" msgstr "" @@ -675,6 +696,9 @@ msgstr "" msgid "No recordings found" msgstr "" +msgid "Delete selected" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "" diff --git a/po/ru_RU.po b/po/ru_RU.po index 8fe10cf..a32c64a 100644 --- a/po/ru_RU.po +++ b/po/ru_RU.po @@ -130,6 +130,36 @@ msgstr "" msgid "Sorry, no permission. Please contact your administrator!" msgstr "" +msgid "Couldn't find recording. Maybe you mistyped your request?" +msgstr "" + +msgid "Please set a name for the recording!" +msgstr "" + +msgid "Cannot rename or move the recording." +msgstr "" + +msgid "Edit recording" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Directory" +msgstr "" + +msgid "Delete resume information" +msgstr "" + +msgid "Delete marks information" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Cancel" +msgstr "" + msgid "Couldn't find searchtimer. Maybe you mistyped your request?" msgstr "" @@ -299,9 +329,6 @@ msgstr "" msgid "Series recording" msgstr "" -msgid "Directory" -msgstr "" - msgid "Delete recordings after ... days" msgstr "" @@ -353,12 +380,6 @@ msgstr "" msgid "Test" msgstr "" -msgid "Save" -msgstr "" - -msgid "Cancel" -msgstr "" - msgid "Couldn't find timer. Maybe you mistyped your request?" msgstr "" @@ -386,9 +407,6 @@ msgstr "" msgid "New user" msgstr "" -msgid "Name" -msgstr "" - msgid "Password" msgstr "" @@ -422,6 +440,9 @@ msgstr "" msgid "Delete search timers" msgstr "" +msgid "Edit recordings" +msgstr "" + msgid "Electronic program guide information" msgstr "" @@ -674,6 +695,9 @@ msgstr "" msgid "No recordings found" msgstr "" +msgid "Delete selected" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "" diff --git a/po/sl_SI.po b/po/sl_SI.po index 8428983..01f8687 100644 --- a/po/sl_SI.po +++ b/po/sl_SI.po @@ -131,6 +131,36 @@ msgstr "" msgid "Sorry, no permission. Please contact your administrator!" msgstr "" +msgid "Couldn't find recording. Maybe you mistyped your request?" +msgstr "" + +msgid "Please set a name for the recording!" +msgstr "" + +msgid "Cannot rename or move the recording." +msgstr "" + +msgid "Edit recording" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Directory" +msgstr "" + +msgid "Delete resume information" +msgstr "" + +msgid "Delete marks information" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Cancel" +msgstr "" + msgid "Couldn't find searchtimer. Maybe you mistyped your request?" msgstr "" @@ -300,9 +330,6 @@ msgstr "" msgid "Series recording" msgstr "" -msgid "Directory" -msgstr "" - msgid "Delete recordings after ... days" msgstr "" @@ -354,12 +381,6 @@ msgstr "" msgid "Test" msgstr "" -msgid "Save" -msgstr "" - -msgid "Cancel" -msgstr "" - msgid "Couldn't find timer. Maybe you mistyped your request?" msgstr "" @@ -387,9 +408,6 @@ msgstr "" msgid "New user" msgstr "" -msgid "Name" -msgstr "" - msgid "Password" msgstr "" @@ -423,6 +441,9 @@ msgstr "" msgid "Delete search timers" msgstr "" +msgid "Edit recordings" +msgstr "" + msgid "Electronic program guide information" msgstr "" @@ -675,6 +696,9 @@ msgstr "" msgid "No recordings found" msgstr "" +msgid "Delete selected" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "" diff --git a/po/sv_SE.po b/po/sv_SE.po index e57739e..14d3ac1 100644 --- a/po/sv_SE.po +++ b/po/sv_SE.po @@ -131,6 +131,36 @@ msgstr "" msgid "Sorry, no permission. Please contact your administrator!" msgstr "" +msgid "Couldn't find recording. Maybe you mistyped your request?" +msgstr "" + +msgid "Please set a name for the recording!" +msgstr "" + +msgid "Cannot rename or move the recording." +msgstr "" + +msgid "Edit recording" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Directory" +msgstr "" + +msgid "Delete resume information" +msgstr "" + +msgid "Delete marks information" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Cancel" +msgstr "" + msgid "Couldn't find searchtimer. Maybe you mistyped your request?" msgstr "" @@ -300,9 +330,6 @@ msgstr "" msgid "Series recording" msgstr "" -msgid "Directory" -msgstr "" - msgid "Delete recordings after ... days" msgstr "" @@ -354,12 +381,6 @@ msgstr "" msgid "Test" msgstr "" -msgid "Save" -msgstr "" - -msgid "Cancel" -msgstr "" - msgid "Couldn't find timer. Maybe you mistyped your request?" msgstr "" @@ -387,9 +408,6 @@ msgstr "" msgid "New user" msgstr "" -msgid "Name" -msgstr "" - msgid "Password" msgstr "" @@ -423,6 +441,9 @@ msgstr "" msgid "Delete search timers" msgstr "" +msgid "Edit recordings" +msgstr "" + msgid "Electronic program guide information" msgstr "" @@ -675,6 +696,9 @@ msgstr "" msgid "No recordings found" msgstr "" +msgid "Delete selected" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "" diff --git a/po/tr_TR.po b/po/tr_TR.po index fd49593..a13eef9 100644 --- a/po/tr_TR.po +++ b/po/tr_TR.po @@ -131,6 +131,36 @@ msgstr "" msgid "Sorry, no permission. Please contact your administrator!" msgstr "" +msgid "Couldn't find recording. Maybe you mistyped your request?" +msgstr "" + +msgid "Please set a name for the recording!" +msgstr "" + +msgid "Cannot rename or move the recording." +msgstr "" + +msgid "Edit recording" +msgstr "" + +msgid "Name" +msgstr "" + +msgid "Directory" +msgstr "" + +msgid "Delete resume information" +msgstr "" + +msgid "Delete marks information" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Cancel" +msgstr "" + msgid "Couldn't find searchtimer. Maybe you mistyped your request?" msgstr "" @@ -300,9 +330,6 @@ msgstr "" msgid "Series recording" msgstr "" -msgid "Directory" -msgstr "" - msgid "Delete recordings after ... days" msgstr "" @@ -354,12 +381,6 @@ msgstr "" msgid "Test" msgstr "" -msgid "Save" -msgstr "" - -msgid "Cancel" -msgstr "" - msgid "Couldn't find timer. Maybe you mistyped your request?" msgstr "" @@ -387,9 +408,6 @@ msgstr "" msgid "New user" msgstr "" -msgid "Name" -msgstr "" - msgid "Password" msgstr "" @@ -423,6 +441,9 @@ msgstr "" msgid "Delete search timers" msgstr "" +msgid "Edit recordings" +msgstr "" + msgid "Electronic program guide information" msgstr "" @@ -675,6 +696,9 @@ msgstr "" msgid "No recordings found" msgstr "" +msgid "Delete selected" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "" @@ -25,6 +25,7 @@ namespace vdrlive { weak_ptr< RecordingsManager > RecordingsManager::m_recMan; shared_ptr< RecordingsTree > RecordingsManager::m_recTree; shared_ptr< RecordingsList > RecordingsManager::m_recList; + shared_ptr< DirectoryList > RecordingsManager::m_recDirs; int RecordingsManager::m_recordingsState = 0; // The RecordingsManager holds a VDR lock on the @@ -75,6 +76,15 @@ namespace vdrlive { return RecordingsListPtr(recMan, shared_ptr< RecordingsList >(new RecordingsList(m_recList, ascending))); } + DirectoryListPtr RecordingsManager::GetDirectoryList() const + { + RecordingsManagerPtr recMan = EnsureValidData(); + if (!recMan) { + return DirectoryListPtr(recMan, shared_ptr< DirectoryList >()); + } + return DirectoryListPtr(recMan, m_recDirs); + } + string RecordingsManager::Md5Hash(cRecording const * recording) const { return "recording_" + MD5Hash(recording->FileName()); @@ -91,6 +101,60 @@ namespace vdrlive { return 0; } + bool RecordingsManager::RenameRecording(cRecording const * recording, string const & name) const + { + if (!recording) + return false; + + string oldname = recording->FileName(); + size_t found = oldname.find_last_of("/"); + + if (found == string::npos) + return false; + + string newname = string(VideoDirectory) + "/" + name + oldname.substr(found); + + if (!MoveDirectory(oldname.c_str(), newname.c_str())) { + esyslog("[LIVE]: renaming failed from '%s' to '%s'", oldname.c_str(), newname.c_str()); + return false; + } + + Recordings.DelByName(oldname.c_str()); + Recordings.AddByName(newname.c_str()); + cRecordingUserCommand::InvokeCommand(*cString::sprintf("rename \"%s\"", *strescape(oldname.c_str(), "\\\"$'")), newname.c_str()); + + return true; + } + + void RecordingsManager::DeleteResume(cRecording const * recording) const + { + if (!recording) + return; + + //dsyslog("[LIVE]: deleting resume '%s'", recording->Name()); + cResumeFile ResumeFile(recording->FileName(), recording->IsPesRecording()); + ResumeFile.Delete(); + } + + void RecordingsManager::DeleteMarks(cRecording const * recording) const + { + if (!recording) + return; + + //dsyslog("[LIVE]: deleting marks '%s'", recording->Name()); + cMarks marks; + marks.Load(recording->FileName()); + if (marks.Count()) { + cMark *mark = marks.First(); + while (mark) { + cMark *nextmark = marks.Next(mark); + marks.Del(mark); + mark = nextmark; + } + marks.Save(); + } + } + void RecordingsManager::DeleteRecording(cRecording const * recording) const { if (!recording) @@ -184,10 +248,11 @@ namespace vdrlive { // StateChanged must be executed every time, so not part of // the short cut evaluation in the if statement below. bool stateChanged = Recordings.StateChanged(m_recordingsState); - if (stateChanged || (!m_recTree) || (!m_recList)) { + if (stateChanged || (!m_recTree) || (!m_recList) || (!m_recDirs)) { if (stateChanged) { m_recTree.reset(); m_recList.reset(); + m_recDirs.reset(); } if (stateChanged || !m_recTree) { m_recTree = shared_ptr< RecordingsTree >(new RecordingsTree(recMan)); @@ -203,6 +268,14 @@ namespace vdrlive { esyslog("[LIVE]: creation of recordings list failed!"); return RecordingsManagerPtr(); } + if (stateChanged || !m_recDirs) { + m_recDirs = shared_ptr< DirectoryList >(new DirectoryList(recMan)); + } + if (!m_recDirs) { + esyslog("[LIVE]: creation of directory list failed!"); + return RecordingsManagerPtr(); + } + } return recMan; } @@ -523,6 +596,75 @@ namespace vdrlive { /** + * Implementation of class DirectoryList: + */ + DirectoryList::DirectoryList(RecordingsManagerPtr recManPtr) : + m_pDirVec(new DirVecType()) + { + if (!m_pDirVec) { + return; + } + + m_pDirVec->push_back(""); // always add root directory +#if APIVERSNUM >= 10712 + for (cNestedItem* item = Folders.First(); item; item = Folders.Next(item)) { // add folders.conf entries + InjectFoldersConf(item); + } +#endif + for (cRecording* recording = Recordings.First(); recording; recording = Recordings.Next(recording)) { + string name = recording->Name(); + size_t found = name.find_last_of("~"); + + if (found != string::npos) { + m_pDirVec->push_back(StringReplace(name.substr(0, found), "~", "/")); + } + } + m_pDirVec->sort(); + m_pDirVec->unique(); + } + + DirectoryList::~DirectoryList() + { + if (m_pDirVec) { + delete m_pDirVec, m_pDirVec = 0; + } + } + +#if APIVERSNUM >= 10712 + void DirectoryList::InjectFoldersConf(cNestedItem * folder, string parent) + { + if (!folder) { + return; + } + + string dir = string((parent.size() == 0) ? "" : parent + "/") + folder->Text(); + m_pDirVec->push_back(StringReplace(dir, "_", " ")); + + if (!folder->SubItems()) { + return; + } + + for(cNestedItem* item = folder->SubItems()->First(); item; item = folder->SubItems()->Next(item)) { + InjectFoldersConf(item, dir); + } + } +#endif + + /** + * Implementation of class DirectoryListPtr: + */ + DirectoryListPtr::DirectoryListPtr(RecordingsManagerPtr recManPtr, shared_ptr< DirectoryList > recDirs) : + shared_ptr< DirectoryList >(recDirs), + m_recManPtr(recManPtr) + { + } + + DirectoryListPtr::~DirectoryListPtr() + { + } + + + /** * Implementation of function LiveRecordingsManager: */ RecordingsManagerPtr LiveRecordingsManager() @@ -4,6 +4,7 @@ #include <ctime> #include <map> #include <vector> +#include <list> #include <vdr/recording.h> #include "stdext.h" @@ -21,6 +22,8 @@ namespace vdrlive { class RecordingsTreePtr; class RecordingsList; class RecordingsListPtr; + class DirectoryList; + class DirectoryListPtr; class RecordingsItem; typedef std::tr1::shared_ptr< RecordingsManager > RecordingsManagerPtr; @@ -57,6 +60,12 @@ namespace vdrlive { RecordingsListPtr GetRecordingsList(time_t begin, time_t end, bool ascending = true) const; /** + * Returns a shared pointer to a fully populated + * directory list. + */ + DirectoryListPtr GetDirectoryList() const; + + /** * generates a Md5 hash from a cRecording entry. It can be used * to reidentify a recording. */ @@ -69,6 +78,24 @@ namespace vdrlive { cRecording const* GetByMd5Hash(std::string const & hash) const; /** + * Rename a recording with the given hash according to + * VDRs recording mechanisms. + */ + bool RenameRecording(cRecording const * recording, std::string const & name) const; + + /** + * Delete recording resume with the given hash according to + * VDRs recording mechanisms. + */ + void DeleteResume(cRecording const * recording) const; + + /** + * Delete recording marks with the given hash according to + * VDRs recording mechanisms. + */ + void DeleteMarks(cRecording const * recording) const; + + /** * Delete a recording with the given hash according to * VDRs recording deletion mechanisms. */ @@ -97,6 +124,7 @@ namespace vdrlive { static std::tr1::weak_ptr< RecordingsManager > m_recMan; static std::tr1::shared_ptr< RecordingsTree > m_recTree; static std::tr1::shared_ptr< RecordingsList > m_recList; + static std::tr1::shared_ptr< DirectoryList > m_recDirs; static int m_recordingsState; cThreadLock m_recordingsLock; @@ -310,6 +338,51 @@ namespace vdrlive { /** + * The recording directory list contains all real directory entries. + */ + class DirectoryList + { + friend class RecordingsManager; + + private: + DirectoryList(RecordingsManagerPtr recManPtr); +#if APIVERSNUM >= 10712 + void InjectFoldersConf(cNestedItem * folder, std::string parent = ""); +#endif + public: + typedef std::list< std::string > DirVecType; + + virtual ~DirectoryList(); + + DirVecType::const_iterator begin() const { return m_pDirVec->begin(); } + DirVecType::const_iterator end() const { return m_pDirVec->end(); } + DirVecType::size_type size() const { return m_pDirVec->size(); } + + private: + DirVecType *m_pDirVec; + }; + + + /** + * A smart pointer to a directory list. As long as an instance of this + * exists the recordings are locked in the vdr. + */ + class DirectoryListPtr : public std::tr1::shared_ptr< DirectoryList > + { + friend class RecordingsManager; + + private: + DirectoryListPtr(RecordingsManagerPtr recManPtr, std::tr1::shared_ptr< DirectoryList > recDirs); + + public: + virtual ~DirectoryListPtr(); + + private: + RecordingsManagerPtr m_recManPtr; + }; + + + /** * return singleton instance of RecordingsManager as a shared Pointer. * This ensures that after last use of the RecordingsManager it is * deleted. After deletion of the original RecordingsManager a repeated @@ -5,6 +5,7 @@ #include <tnt/htmlescostream.h> #include <tnt/httprequest.h> #include <tnt/httpreply.h> +#include <vdr/recording.h> #include "exception.h" #include "live.h" #include "setup.h" @@ -312,5 +313,173 @@ namespace vdrlive { return decoded; } + std::string FileSystemExchangeChars(std::string const & s, bool ToFileSystem) + { + char *str = strdup(s.c_str()); + str = ExchangeChars(str, ToFileSystem); + std::string data = str; + if (str) { + free(str); + } + return data; + } + + bool MoveDirectory(std::string const & sourceDir, std::string const & targetDir) + { + const char* delim = "/"; + std::string source = sourceDir; + std::string target = targetDir; + + // add missing directory delimiters + if (source.compare(source.size() - 1, 1, delim) != 0) { + source += "/"; + } + if (target.compare(target.size() - 1, 1, delim) != 0) { + target += "/"; + } + + if (source != target) { + // validate target directory + if (target.find(source) != std::string::npos) { + esyslog("[LIVE]: cannot move under sub-directory\n"); + return false; + } + RemoveFileOrDir(target.c_str()); + if (!MakeDirs(target.c_str(), true)) { + esyslog("[LIVE]: cannot create directory %s", target.c_str()); + return false; + } + + struct stat st1, st2; + stat(source.c_str(), &st1); + stat(target.c_str(),&st2); + if (st1.st_dev == st2.st_dev) { + if (!RenameVideoFile(source.c_str(), target.c_str())) { + esyslog("[LIVE]: rename failed from %s to %s", source.c_str(), target.c_str()); + return false; + } + } + else { + int required = DirSizeMB(source.c_str()); + int available = FreeDiskSpaceMB(target.c_str()); + + // validate free space + if (required < available) { + cReadDir d(source.c_str()); + struct dirent *e; + bool success = true; + + // allocate copying buffer + const int len = 1024 * 1024; + char *buffer = MALLOC(char, len); + if (!buffer) { + esyslog("[LIVE]: cannot allocate renaming buffer"); + return false; + } + + // loop through all files, but skip all subdirectories + while ((e = d.Next()) != NULL) { + // skip generic entries + if (strcmp(e->d_name, ".") && strcmp(e->d_name, "..") && strcmp(e->d_name, "lost+found")) { + string sourceFile = source + e->d_name; + string targetFile = target + e->d_name; + + // copy only regular files + if (!stat(sourceFile.c_str(), &st1) && S_ISREG(st1.st_mode)) { + int r = -1, w = -1; + cUnbufferedFile *inputFile = cUnbufferedFile::Create(sourceFile.c_str(), O_RDONLY | O_LARGEFILE); + cUnbufferedFile *outputFile = cUnbufferedFile::Create(targetFile.c_str(), O_RDWR | O_CREAT | O_LARGEFILE); + + // validate files + if (!inputFile || !outputFile) { + esyslog("[LIVE]: cannot open file %s or %s", sourceFile.c_str(), targetFile.c_str()); + success = false; + break; + } + + // do actual copy + dsyslog("[LIVE]: copying %s to %s", sourceFile.c_str(), targetFile.c_str()); + do { + r = inputFile->Read(buffer, len); + if (r > 0) + w = outputFile->Write(buffer, r); + else + w = 0; + } while (r > 0 && w > 0); + DELETENULL(inputFile); + DELETENULL(outputFile); + + // validate result + if (r < 0 || w < 0) { + success = false; + break; + } + } + } + } + + // release allocated buffer + free(buffer); + + // delete all created target files and directories + if (!success) { + size_t found = target.find_last_of(delim); + if (found != std::string::npos) { + target = target.substr(0, found); + } + if (!RemoveFileOrDir(target.c_str(), true)) { + esyslog("[LIVE]: cannot remove target %s", target.c_str()); + } + found = target.find_last_of(delim); + if (found != std::string::npos) { + target = target.substr(0, found); + } + if (!RemoveEmptyDirectories(target.c_str(), true)) { + esyslog("[LIVE]: cannot remove target directory %s", target.c_str()); + } + esyslog("[LIVE]: copying failed"); + return false; + } + else if (!RemoveFileOrDir(source.c_str(), true)) { // delete source files + esyslog("[LIVE]: cannot remove source directory %s", source.c_str()); + return false; + } + + // delete all empty source directories + size_t found = source.find_last_of(delim); + if (found != std::string::npos) { + source = source.substr(0, found); + while (source != VideoDirectory) { + found = source.find_last_of(delim); + if (found == std::string::npos) + break; + source = source.substr(0, found); + if (!RemoveEmptyDirectories(source.c_str(), true)) + break; + } + } + } + else { + esyslog("[LIVE]: renaming requires %dMB - only %dMB available", required, available); + // delete all created empty target directories + size_t found = target.find_last_of(delim); + if (found != std::string::npos) { + target = target.substr(0, found); + while (target != VideoDirectory) { + found = target.find_last_of(delim); + if (found == std::string::npos) + break; + target = target.substr(0, found); + if (!RemoveEmptyDirectories(target.c_str(), true)) + break; + } + } + return false; + } + } + } + + return true; + } } // namespace vdrlive @@ -11,6 +11,8 @@ #include <vector> #include <vdr/channels.h> #include <vdr/thread.h> +#include <vdr/videodir.h> +#include <vdr/tools.h> std::istream& operator>>( std::istream& is, tChannelID& ret ); @@ -57,6 +59,10 @@ namespace vdrlive { std::string EncodeDomId(std::string const & toEncode, char const * from = ".-:", char const * to = "pmc"); std::string DecodeDomId(std::string const & toDecode, char const * from = "pmc", char const * to = ".-:"); + std::string FileSystemExchangeChars(std::string const & s, bool ToFileSystem); + + bool MoveDirectory(std::string const & sourceDir, std::string const & targetDir); + struct bad_lexical_cast: std::runtime_error { bad_lexical_cast(): std::runtime_error( "bad lexical cast" ) {} @@ -19,7 +19,8 @@ enum eUserRights UR_STARTREPLAY, UR_SWITCHCHNL, UR_EDITSTIMERS, - UR_DELSTIMERS + UR_DELSTIMERS, + UR_EDITRECS }; // --- cUser -------------------------------------------------------- |