diff options
-rw-r--r-- | pages/recordings.ecpp | 62 | ||||
-rw-r--r-- | po/ca_ES.po | 6 | ||||
-rw-r--r-- | po/cs_CZ.po | 6 | ||||
-rw-r--r-- | po/da_DK.po | 6 | ||||
-rw-r--r-- | po/de_DE.po | 6 | ||||
-rw-r--r-- | po/el_GR.po | 6 | ||||
-rw-r--r-- | po/es_ES.po | 6 | ||||
-rw-r--r-- | po/et_EE.po | 6 | ||||
-rw-r--r-- | po/fi_FI.po | 6 | ||||
-rw-r--r-- | po/fr_FR.po | 6 | ||||
-rw-r--r-- | po/hr_HR.po | 6 | ||||
-rw-r--r-- | po/hu_HU.po | 6 | ||||
-rw-r--r-- | po/it_IT.po | 6 | ||||
-rw-r--r-- | po/lt_LT.po | 6 | ||||
-rw-r--r-- | po/nl_NL.po | 6 | ||||
-rw-r--r-- | po/nn_NO.po | 6 | ||||
-rw-r--r-- | po/pl_PL.po | 6 | ||||
-rw-r--r-- | po/pt_PT.po | 6 | ||||
-rw-r--r-- | po/ro_RO.po | 6 | ||||
-rw-r--r-- | po/ru_RU.po | 6 | ||||
-rw-r--r-- | po/sl_SI.po | 6 | ||||
-rw-r--r-- | po/sv_SE.po | 6 | ||||
-rw-r--r-- | po/tr_TR.po | 6 | ||||
-rw-r--r-- | recman.cpp | 48 | ||||
-rw-r--r-- | recman.h | 11 | ||||
-rw-r--r-- | setup.cpp | 3 | ||||
-rw-r--r-- | setup.h | 3 |
27 files changed, 250 insertions, 9 deletions
diff --git a/pages/recordings.ecpp b/pages/recordings.ecpp index b6630d1..d213b54 100644 --- a/pages/recordings.ecpp +++ b/pages/recordings.ecpp @@ -22,6 +22,7 @@ using namespace std; </%pre> <%args> + string sort; string todel; string diskinfo; string deletions[]; @@ -30,12 +31,22 @@ using namespace std; bool logged_in(false); </%session> <%request scope="page"> + string currentSort; string deleteResult; </%request> <%include>page_init.eh</%include> <%cpp> if (!logged_in && LiveSetup().UseAuth()) return reply.redirect("login.html"); +currentSort = LiveSetup().GetLastSortingMode(); +if (!sort.empty()) { + if (sort == "date") + currentSort = (currentSort == "dateasc") ? "datedesc" : "dateasc"; + else if (sort == "name") + currentSort = (currentSort == "nameasc") ? "namedesc" : "nameasc"; + LiveSetup().SetLastSortingMode(currentSort); +} + pageTitle = tr("Recordings"); deleteResult = ""; @@ -70,13 +81,13 @@ diskinfo = cString::sprintf("%s %d%% - %2d:%02d %s", trVDR("Disk"), Percent, H <body> <& pageelems.logo &> <%cpp> -if (! deleteResult.empty()) { +if (!deleteResult.empty()) { </%cpp> <& menu active=("recordings") component=("recordings.delete_error") &> <%cpp> } else { </%cpp> - <& menu active=("recordings") &> + <& menu active=("recordings") component=("recordings.sort_options") &> <%cpp> } </%cpp> @@ -116,12 +127,21 @@ if (! deleteResult.empty()) { RecordingsTreePtr recordingsTree(LiveRecordingsManager()->GetRecordingsTree()); RecordingsMap::iterator iter; RecordingsMap::iterator end = recordingsTree->end(path); +list<RecordingsItemPtr> recItems; +list<RecordingsItemPtr>::iterator recIter; for (iter = recordingsTree->begin(path); iter != end; ++iter) { RecordingsItemPtr recItem = iter->second; - string folderimg("folder_closed.png"); - string collapseimg("plus.png"); if (recItem->IsDir()) { + recItems.push_back(recItem); + } +} +if (currentSort == "namedesc") + recItems.sort(RecordingsItemPtrCompare::ByDescendingName); +else + recItems.sort(RecordingsItemPtrCompare::ByAscendingName); +for (recIter = recItems.begin(); recIter != recItems.end(); ++recIter) { + RecordingsItemPtr recItem = *recIter; </%cpp> <li class="recording"> <& rec_item_dir name=(recItem->Name()) level=(level) &> @@ -141,14 +161,27 @@ for (iter = recordingsTree->begin(path); iter != end; ++iter) { <%cpp> callComp("recordings.recordings_item", request, reply, recItemParams); </%cpp> - </ul> + </ul> </li> <%cpp> - } } +recItems.clear(); for (iter = recordingsTree->begin(path); iter != end; ++iter) { RecordingsItemPtr recItem = iter->second; - if (!recItem->IsDir()) { + if (!recItem->IsDir()) { + recItems.push_back(recItem); + } +} +if (currentSort == "dateasc") + recItems.sort(RecordingsItemPtrCompare::ByAscendingDate); +else if (currentSort == "datedesc") + recItems.sort(RecordingsItemPtrCompare::ByDescendingDate); +else if (currentSort == "namedesc") + recItems.sort(RecordingsItemPtrCompare::ByDescendingName); +else + recItems.sort(RecordingsItemPtrCompare::ByAscendingName); +for (recIter = recItems.begin(); recIter != recItems.end(); ++recIter) { + RecordingsItemPtr recItem = *recIter; string day(FormatDateTime("%a,", recItem->StartTime())); string dayLen(lexical_cast<string, int>(day.length() - 1) + ".25em;"); string duration(LiveSetup().GetShowRecDuration() ? "(" + lexical_cast<string, int>(recItem->Duration()) + "')" : ""); @@ -157,15 +190,25 @@ for (iter = recordingsTree->begin(path); iter != end; ++iter) { </%cpp> <li class="recording"> <& rec_item_file name=(recItem->Name()) level=(level) id=(recItem->Id()) day=(day) dayLen=(dayLen) startTime=(recItem->StartTime()) duration=(duration) hint=(hint) shortDescr=(shortDescr) archived=(RecordingsManager::GetArchiveDescr(recItem->Recording())) &> - </li> + </li> <%cpp> - } } </%cpp> </%def> <# ---------------------------------------------------------------------- #> +<%def sort_options> +<%cpp> { </%cpp> +<a href="recordings.html?sort=name" alt="" /><$ tr("Sort by name") $></a> +<span class="sep">|</span> +<a href="recordings.html?sort=date" alt="" /><$ tr("Sort by date") $></a> +<br/> +<%cpp> } </%cpp> +</%def> + +<# ---------------------------------------------------------------------- #> + <%def del_rec> <%args> string id; @@ -281,5 +324,6 @@ for (iter = recordingsTree->begin(path); iter != end; ++iter) { <# ---------------------------------------------------------------------- #> <%def delete_error> +<& recordings.sort_options &> <%cpp> { reply.out() << deleteResult; } </%cpp> </%def> diff --git a/po/ca_ES.po b/po/ca_ES.po index 40d3f67..41a06bf 100644 --- a/po/ca_ES.po +++ b/po/ca_ES.po @@ -700,6 +700,12 @@ msgstr "" msgid "Delete selected" msgstr "" +msgid "Sort by name" +msgstr "" + +msgid "Sort by date" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "" diff --git a/po/cs_CZ.po b/po/cs_CZ.po index c4d7d07..fce915b 100644 --- a/po/cs_CZ.po +++ b/po/cs_CZ.po @@ -698,6 +698,12 @@ msgstr "" msgid "Delete selected" msgstr "" +msgid "Sort by name" +msgstr "" + +msgid "Sort by date" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "" diff --git a/po/da_DK.po b/po/da_DK.po index 12476c5..5b9cec4 100644 --- a/po/da_DK.po +++ b/po/da_DK.po @@ -698,6 +698,12 @@ msgstr "" msgid "Delete selected" msgstr "" +msgid "Sort by name" +msgstr "" + +msgid "Sort by date" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "" diff --git a/po/de_DE.po b/po/de_DE.po index 22f91be..786d18b 100644 --- a/po/de_DE.po +++ b/po/de_DE.po @@ -700,6 +700,12 @@ msgstr "Keine Aufnahmen vorhanden" msgid "Delete selected" msgstr "" +msgid "Sort by name" +msgstr "" + +msgid "Sort by date" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "Diese Aufnahme von der Festplatte löschen!" diff --git a/po/el_GR.po b/po/el_GR.po index 73f2bbf..5a307b2 100644 --- a/po/el_GR.po +++ b/po/el_GR.po @@ -698,6 +698,12 @@ msgstr "" msgid "Delete selected" msgstr "" +msgid "Sort by name" +msgstr "" + +msgid "Sort by date" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "" diff --git a/po/es_ES.po b/po/es_ES.po index ca5e239..5b84d12 100644 --- a/po/es_ES.po +++ b/po/es_ES.po @@ -698,6 +698,12 @@ msgstr "" msgid "Delete selected" msgstr "" +msgid "Sort by name" +msgstr "" + +msgid "Sort by date" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "" diff --git a/po/et_EE.po b/po/et_EE.po index 2d72264..098b55e 100644 --- a/po/et_EE.po +++ b/po/et_EE.po @@ -698,6 +698,12 @@ msgstr "" msgid "Delete selected" msgstr "" +msgid "Sort by name" +msgstr "" + +msgid "Sort by date" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "" diff --git a/po/fi_FI.po b/po/fi_FI.po index 8da804a..2b72a66 100644 --- a/po/fi_FI.po +++ b/po/fi_FI.po @@ -698,6 +698,12 @@ msgstr "Tallenteita ei löydy" msgid "Delete selected" msgstr "Poista valitut" +msgid "Sort by name" +msgstr "Järjestä nimen mukaan" + +msgid "Sort by date" +msgstr "Järjestä päivämäärän mukaan" + msgid "Delete this recording from hard disc!" msgstr "Poista tallenne kovalevyltä!" diff --git a/po/fr_FR.po b/po/fr_FR.po index 82f3e08..342d6ac 100644 --- a/po/fr_FR.po +++ b/po/fr_FR.po @@ -719,6 +719,12 @@ msgstr "Pas d'enregistrement" msgid "Delete selected" msgstr "" +msgid "Sort by name" +msgstr "" + +msgid "Sort by date" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "" diff --git a/po/hr_HR.po b/po/hr_HR.po index c3446b9..827da04 100644 --- a/po/hr_HR.po +++ b/po/hr_HR.po @@ -699,6 +699,12 @@ msgstr "" msgid "Delete selected" msgstr "" +msgid "Sort by name" +msgstr "" + +msgid "Sort by date" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "" diff --git a/po/hu_HU.po b/po/hu_HU.po index a04971c..4d15ae3 100644 --- a/po/hu_HU.po +++ b/po/hu_HU.po @@ -699,6 +699,12 @@ msgstr "" msgid "Delete selected" msgstr "" +msgid "Sort by name" +msgstr "" + +msgid "Sort by date" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "" diff --git a/po/it_IT.po b/po/it_IT.po index f9b098c..32295e4 100644 --- a/po/it_IT.po +++ b/po/it_IT.po @@ -704,6 +704,12 @@ msgstr "Nessuna registrazione trovata" msgid "Delete selected" msgstr "" +msgid "Sort by name" +msgstr "" + +msgid "Sort by date" +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 377e0ee..f5fecd9 100644 --- a/po/lt_LT.po +++ b/po/lt_LT.po @@ -699,6 +699,12 @@ msgstr "Ä®rašų nÄ—ra" msgid "Delete selected" msgstr "" +msgid "Sort by name" +msgstr "" + +msgid "Sort by date" +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 9257518..6ea7947 100644 --- a/po/nl_NL.po +++ b/po/nl_NL.po @@ -715,6 +715,12 @@ msgstr "" msgid "Delete selected" msgstr "" +msgid "Sort by name" +msgstr "" + +msgid "Sort by date" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "" diff --git a/po/nn_NO.po b/po/nn_NO.po index be3fe5e..51278a1 100644 --- a/po/nn_NO.po +++ b/po/nn_NO.po @@ -699,6 +699,12 @@ msgstr "" msgid "Delete selected" msgstr "" +msgid "Sort by name" +msgstr "" + +msgid "Sort by date" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "" diff --git a/po/pl_PL.po b/po/pl_PL.po index aae24b7..a61bd9b 100644 --- a/po/pl_PL.po +++ b/po/pl_PL.po @@ -698,6 +698,12 @@ msgstr "" msgid "Delete selected" msgstr "" +msgid "Sort by name" +msgstr "" + +msgid "Sort by date" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "" diff --git a/po/pt_PT.po b/po/pt_PT.po index 4d23aca..135d479 100644 --- a/po/pt_PT.po +++ b/po/pt_PT.po @@ -698,6 +698,12 @@ msgstr "" msgid "Delete selected" msgstr "" +msgid "Sort by name" +msgstr "" + +msgid "Sort by date" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "" diff --git a/po/ro_RO.po b/po/ro_RO.po index be02c5c..c0021ef 100644 --- a/po/ro_RO.po +++ b/po/ro_RO.po @@ -699,6 +699,12 @@ msgstr "" msgid "Delete selected" msgstr "" +msgid "Sort by name" +msgstr "" + +msgid "Sort by date" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "" diff --git a/po/ru_RU.po b/po/ru_RU.po index a32c64a..52e8e3c 100644 --- a/po/ru_RU.po +++ b/po/ru_RU.po @@ -698,6 +698,12 @@ msgstr "" msgid "Delete selected" msgstr "" +msgid "Sort by name" +msgstr "" + +msgid "Sort by date" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "" diff --git a/po/sl_SI.po b/po/sl_SI.po index 01f8687..08a3a2c 100644 --- a/po/sl_SI.po +++ b/po/sl_SI.po @@ -699,6 +699,12 @@ msgstr "" msgid "Delete selected" msgstr "" +msgid "Sort by name" +msgstr "" + +msgid "Sort by date" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "" diff --git a/po/sv_SE.po b/po/sv_SE.po index 14d3ac1..669d58f 100644 --- a/po/sv_SE.po +++ b/po/sv_SE.po @@ -699,6 +699,12 @@ msgstr "" msgid "Delete selected" msgstr "" +msgid "Sort by name" +msgstr "" + +msgid "Sort by date" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "" diff --git a/po/tr_TR.po b/po/tr_TR.po index a13eef9..cc63bfc 100644 --- a/po/tr_TR.po +++ b/po/tr_TR.po @@ -699,6 +699,12 @@ msgstr "" msgid "Delete selected" msgstr "" +msgid "Sort by name" +msgstr "" + +msgid "Sort by date" +msgstr "" + msgid "Delete this recording from hard disc!" msgstr "" @@ -282,6 +282,54 @@ namespace vdrlive { /** + * Implemetation of class RecordingsItemPtrCompare + */ + bool RecordingsItemPtrCompare::ByAscendingDate(RecordingsItemPtr & first, RecordingsItemPtr & second) + { + if (first->StartTime() < second->StartTime()) + return true; + return false; + } + + bool RecordingsItemPtrCompare::ByDescendingDate(RecordingsItemPtr & first, RecordingsItemPtr & second) + { + if (first->StartTime() < second->StartTime()) + return false; + return true; + } + + bool RecordingsItemPtrCompare::ByAscendingName(RecordingsItemPtr & first, RecordingsItemPtr & second) + { + unsigned int i = 0; + while (i < first->Name().length() && i < second->Name().length()) { + if (tolower((first->Name())[i]) < tolower((second->Name())[i])) + return true; + else if (tolower((first->Name())[i]) > tolower((second->Name())[i])) + return false; + ++i; + } + if (first->Name().length() < second->Name().length()) + return true; + return false; + } + + bool RecordingsItemPtrCompare::ByDescendingName(RecordingsItemPtr & first, RecordingsItemPtr & second) + { + unsigned int i = 0; + while (i < first->Name().length() && i < second->Name().length()) { + if (tolower((second->Name())[i]) < tolower((first->Name())[i])) + return true; + else if (tolower((second->Name())[i]) > tolower((first->Name())[i])) + return false; + ++i; + } + if (second->Name().length() < first->Name().length()) + return true; + return false; + } + + + /** * Implementation of class RecordingsItem: */ RecordingsItem::RecordingsItem(string const & name, RecordingsItemPtr parent) : @@ -130,6 +130,17 @@ namespace vdrlive { cThreadLock m_recordingsLock; }; + /** + * Class containing possible recordings compare functions + */ + class RecordingsItemPtrCompare + { + public: + static bool ByAscendingDate(RecordingsItemPtr & first, RecordingsItemPtr & second); + static bool ByDescendingDate(RecordingsItemPtr & first, RecordingsItemPtr & second); + static bool ByAscendingName(RecordingsItemPtr & first, RecordingsItemPtr & second); + static bool ByDescendingName(RecordingsItemPtr & first, RecordingsItemPtr & second); + }; /** * Base class for entries in recordings tree and recordings list. @@ -40,6 +40,7 @@ Setup::Setup(): m_scheduleDuration( "8" ), m_theme("marine"), m_lastwhatsonlistmode("detail"), + m_lastsortingmode("nameasc"), m_tntnetloglevel("WARN"), m_showRecDuration(1), m_showLogo(1), @@ -129,6 +130,7 @@ bool Setup::ParseSetupEntry( char const* name, char const* value ) else if ( strcmp( name, "Theme" ) == 0 ) m_theme = value; else if ( strcmp( name, "LocalNetMask" ) == 0 ) { m_localnetmask = value; } else if ( strcmp( name, "LastWhatsOnListMode" ) == 0 ) { m_lastwhatsonlistmode = value; } + else if ( strcmp( name, "LastSortingMode" ) == 0 ) { m_lastsortingmode = value; } else if ( strcmp( name, "ShowRecDuration" ) == 0 ) { m_showRecDuration = atoi(value); } else if ( strcmp( name, "ShowLogo" ) == 0 ) { m_showLogo = atoi(value); } else if ( strcmp( name, "UseAjax" ) == 0 ) { m_useAjax = atoi(value); } @@ -297,6 +299,7 @@ bool Setup::SaveSetup() liveplugin->SetupStore("StartPage", m_startscreen.c_str()); liveplugin->SetupStore("Theme", m_theme.c_str()); liveplugin->SetupStore("LastWhatsOnListMode", m_lastwhatsonlistmode.c_str()); + liveplugin->SetupStore("LastSortingMode", m_lastsortingmode.c_str()); liveplugin->SetupStore("ShowRecDuration", m_showRecDuration); liveplugin->SetupStore("ShowLogo", m_showLogo); liveplugin->SetupStore("UseAjax", m_useAjax); @@ -53,6 +53,7 @@ class Setup std::string const GetLocalNetMask() const { return m_localnetmask; }; bool GetIsLocalNet() const { return m_islocalnet; }; std::string const GetLastWhatsOnListMode() const { return m_lastwhatsonlistmode; } + std::string const GetLastSortingMode() const { return m_lastsortingmode; } std::string const GetTntnetLogLevel() const { return m_tntnetloglevel; } bool GetShowRecDuration() const { return m_showRecDuration != 0; } bool GetShowLogo() const { return m_showLogo != 0; } @@ -78,6 +79,7 @@ class Setup void SetLocalNetMask(std::string const & localnetmask) { m_localnetmask = localnetmask; } void SetIsLocalNet(bool islocalnet) { m_islocalnet = islocalnet; } void SetLastWhatsOnListMode(std::string const & mode) { m_lastwhatsonlistmode = mode; SaveSetup(); } + void SetLastSortingMode(std::string const & mode) { m_lastsortingmode = mode; SaveSetup(); } void SetShowRecDuration(bool show) { m_showRecDuration = show ? 1 : 0; } void SetShowLogo(bool show) { m_showLogo = show ? 1 : 0; } void SetUseAjax(bool use) { m_useAjax = use ? 1 : 0; } @@ -132,6 +134,7 @@ class Setup std::string m_localnetmask; bool m_islocalnet; std::string m_lastwhatsonlistmode; + std::string m_lastsortingmode; std::string m_tntnetloglevel; int m_showRecDuration; int m_showLogo; |