From 38461ed821c9c615bb3c058932a0fc86ceec60e6 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sun, 25 Nov 2018 08:21:31 -0800 Subject: [PATCH] UI: Allow sorting saves by date too. --- UI/SavedataScreen.cpp | 26 ++++++++++++++++++++++++++ UI/SavedataScreen.h | 2 ++ 2 files changed, 28 insertions(+) diff --git a/UI/SavedataScreen.cpp b/UI/SavedataScreen.cpp index f8e49d8a2d..a017aa540d 100644 --- a/UI/SavedataScreen.cpp +++ b/UI/SavedataScreen.cpp @@ -323,6 +323,8 @@ void SavedataBrowser::SetSortOption(SavedataSortOption opt) { gl->SetCompare(&ByFilename, &SortDone); } else if (sortOption_ == SavedataSortOption::SIZE) { gl->SetCompare(&BySize, &SortDone); + } else if (sortOption_ == SavedataSortOption::DATE) { + gl->SetCompare(&ByDate, &SortDone); } } } @@ -345,6 +347,29 @@ bool SavedataBrowser::BySize(const UI::View *v1, const UI::View *v2) { return g1info->gameSize > g2info->gameSize; } +bool SavedataBrowser::ByDate(const UI::View *v1, const UI::View *v2) { + const SavedataButton *b1 = static_cast(v1); + const SavedataButton *b2 = static_cast(v2); + + auto getDateSeconds = [&](const SavedataButton *b) { + std::shared_ptr ginfo = g_gameInfoCache->GetInfo(nullptr, b->GamePath(), 0); + tm datetm; + bool success; + if (ginfo && ginfo->fileType == IdentifiedFileType::PSP_SAVEDATA_DIRECTORY) { + success = File::GetModifTime(b->GamePath() + "/PARAM.SFO", datetm); + } else { + success = File::GetModifTime(b->GamePath(), datetm); + } + + if (success) { + return mktime(&datetm); + } + return (time_t)0; + }; + + return getDateSeconds(b1) > getDateSeconds(b2); +} + bool SavedataBrowser::SortDone() { PrioritizedWorkQueue *wq = g_gameInfoCache->WorkQueue(); return wq->Done(); @@ -454,6 +479,7 @@ void SavedataScreen::CreateViews() { ChoiceStrip *sortStrip = new ChoiceStrip(ORIENT_HORIZONTAL, new AnchorLayoutParams(NONE, 0, 0, NONE)); sortStrip->AddChoice(sa->T("Filename")); sortStrip->AddChoice(sa->T("Size")); + sortStrip->AddChoice(sa->T("Date")); sortStrip->SetSelection((int)sortOption_); sortStrip->OnChoice.Handle(this, &SavedataScreen::OnSortClick); diff --git a/UI/SavedataScreen.h b/UI/SavedataScreen.h index 0ab3e6ed56..49da370483 100644 --- a/UI/SavedataScreen.h +++ b/UI/SavedataScreen.h @@ -29,6 +29,7 @@ enum class SavedataSortOption { FILENAME, SIZE, + DATE, }; class SavedataBrowser : public UI::LinearLayout { @@ -42,6 +43,7 @@ public: private: static bool ByFilename(const UI::View *, const UI::View *); static bool BySize(const UI::View *, const UI::View *); + static bool ByDate(const UI::View *, const UI::View *); static bool SortDone(); void Refresh();