diff --git a/pages/recordings.ecpp b/pages/recordings.ecpp index ef797f2..872179e 100644 --- a/pages/recordings.ecpp +++ b/pages/recordings.ecpp @@ -68,6 +68,9 @@ if (!sort.empty()) { if (sort == "date") currentSort = (currentSort == "datedesc") ? "dateasc" : "datedesc"; else if (sort == "datedesc" || sort == "dateasc") currentSort = sort; + else if (sort == "duration") + currentSort = (currentSort == "durationasc") ? "durationdesc" : "durationasc"; + else if (sort == "durationasc" || sort == "durationdesc") currentSort = sort; else if (sort == "name") currentSort = (currentSort == "nameasc") ? "namedesc" : "nameasc"; else if (sort == "nameasc" || sort == "namedesc") currentSort = sort; @@ -262,10 +265,11 @@ dsyslog("live, time recordings.ecpp: %f", timeNeeded.count()); bool reverse = false; eSortOrder sortOrder = eSortOrder::name; // default if (currentSort.compare(0, 4, "date" , 4) == 0) sortOrder = eSortOrder::date; +if (currentSort.compare(0, 8, "duration", 8) == 0) sortOrder = eSortOrder::duration; if (currentSort.compare(0, 6, "errors", 6) == 0) sortOrder = eSortOrder::errors; if (currentSort.compare(0, 8, "errorsdur", 8) == 0) sortOrder = eSortOrder::durationDeviation; if (currentSort.compare(0, 10, "duplicates", 10) == 0) sortOrder = eSortOrder::duplicatesLanguage; -if (currentSort == "datedesc" || currentSort == "namedesc") reverse = true; +if (currentSort == "datedesc" || currentSort == "durationdesc" || currentSort == "namedesc") reverse = true; // get rec item of this (current) dir RecordingsItemDirPtr recItemThisDir = *(static_cast((void *)iRecItem) ); RecordingsTreePtr recordingsTree = *(static_cast((void *)iRecordingsTree) ); @@ -499,6 +503,8 @@ recs[<$cSv(cToSvInt(rPtr->IdI()))$>]=[<$$ recording_item->c_str() $>] | &filter=&flat=<$currentFlat$>" <& setactive current="date" &> ><$ tr("Date") $> | +&filter=&flat=<$currentFlat$>" <& setactive current="duration" &> ><$ tr("Duration") $> +| ><$ tr("Duplicates") $> <%cpp> #if VDRVERSNUM >= 20505 diff --git a/recman.cpp b/recman.cpp index c21fdb7..94840de 100644 --- a/recman.cpp +++ b/recman.cpp @@ -354,6 +354,11 @@ namespace vdrlive { return (first->StartTime() < second->StartTime()); } + bool RecordingsItemPtrCompare::ByAscendingDuration(const RecordingsItemRecPtr & first, const RecordingsItemRecPtr & second) + { + return (first->Duration() < second->Duration()); + } + bool RecordingsItemPtrCompare::ByDuplicatesName(const RecordingsItemRecPtr & first, const RecordingsItemRecPtr & second) // return first < second { return first->orderDuplicates(second, false); @@ -422,6 +427,7 @@ namespace vdrlive { switch (sortOrder) { case eSortOrder::name: return &RecordingsItemPtrCompare::ByAscendingNameDescSort; case eSortOrder::date: return &RecordingsItemPtrCompare::ByAscendingDate; + case eSortOrder::duration: return &RecordingsItemPtrCompare::ByAscendingDuration; case eSortOrder::errors: return &RecordingsItemPtrCompare::ByDescendingRecordingErrors; case eSortOrder::durationDeviation: return &RecordingsItemPtrCompare::ByDescendingDurationDeviation; case eSortOrder::duplicatesLanguage: return &RecordingsItemPtrCompare::ByDuplicatesLanguage; diff --git a/recman.h b/recman.h index cd7476d..5399c0d 100644 --- a/recman.h +++ b/recman.h @@ -169,7 +169,16 @@ cToSvConcat & StringAppendFrameParams(cToSvConcat &s, const cRecording *re /** * Class containing possible recordings compare functions */ - enum class eSortOrder { name, date, errors, durationDeviation, duplicatesLanguage }; + enum class eSortOrder + { + name, + date, + duration, + errors, + durationDeviation, + duplicatesLanguage + }; + typedef bool (*tCompRec)(const RecordingsItemRecPtr &a, const RecordingsItemRecPtr &b); typedef bool (*tCompDir)(const RecordingsItemDirPtr &a, const RecordingsItemDirPtr &b); class RecordingsItemPtrCompare @@ -177,6 +186,7 @@ cToSvConcat & StringAppendFrameParams(cToSvConcat &s, const cRecording *re public: // recs static bool ByAscendingDate(const RecordingsItemRecPtr & first, const RecordingsItemRecPtr & second); + static bool ByAscendingDuration(const RecordingsItemRecPtr & first, const RecordingsItemRecPtr & second); static bool ByDuplicatesName(const RecordingsItemRecPtr & first, const RecordingsItemRecPtr & second); static bool ByDuplicates(const RecordingsItemRecPtr & first, const RecordingsItemRecPtr & second); static bool ByDuplicatesLanguage(const RecordingsItemRecPtr & first, const RecordingsItemRecPtr & second); @@ -338,6 +348,7 @@ cToSvConcat & StringAppendFrameParams(cToSvConcat &s, const cRecording *re const cSv scraperReleaseDate() const { return m_s_release_date; } const cTvMedia &scraperImage() const; int language() const { return m_language; } + int CompareL(const RecordingsItemRecPtr &second, int *numEqualChars=NULL) const; int CompareTexts(const RecordingsItemRecPtr &second, int *numEqualChars=NULL) const; int CompareStD(const RecordingsItemRecPtr &second, int *numEqualChars=NULL) const; bool orderDuplicates(const RecordingsItemRecPtr &second, bool alwaysShortText, bool lang = false) const;