From a607373ced73fc636760f5a51e0874b1c82f0e71 Mon Sep 17 00:00:00 2001 From: Anceph Date: Wed, 24 Jun 2026 00:23:31 +0300 Subject: [PATCH] Added the option to sort instances by total playtime (#5701) Signed-off-by: Anceph --- launcher/ui/instanceview/InstanceProxyModel.cpp | 6 ++++++ launcher/ui/pages/global/LauncherPage.cpp | 10 +++++++++- launcher/ui/pages/global/LauncherPage.ui | 11 +++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/launcher/ui/instanceview/InstanceProxyModel.cpp b/launcher/ui/instanceview/InstanceProxyModel.cpp index ab6bef696..ea3a2b0fd 100644 --- a/launcher/ui/instanceview/InstanceProxyModel.cpp +++ b/launcher/ui/instanceview/InstanceProxyModel.cpp @@ -62,6 +62,12 @@ bool InstanceProxyModel::subSortLessThan(const QModelIndex& left, const QModelIn QString sortMode = APPLICATION->settings()->get("InstSortMode").toString(); if (sortMode == "LastLaunch") { return pdataLeft->lastLaunch() > pdataRight->lastLaunch(); + } else if (sortMode == "Playtime") { + if (pdataLeft->totalTimePlayed() == pdataRight->totalTimePlayed()) { + // fallback to name sorting if playtime is equal + return m_naturalSort.compare(pdataLeft->name(), pdataRight->name()) < 0; + } + return pdataLeft->totalTimePlayed() > pdataRight->totalTimePlayed(); } else { return m_naturalSort.compare(pdataLeft->name(), pdataRight->name()) < 0; } diff --git a/launcher/ui/pages/global/LauncherPage.cpp b/launcher/ui/pages/global/LauncherPage.cpp index 6276d3be6..1e1fed8f8 100644 --- a/launcher/ui/pages/global/LauncherPage.cpp +++ b/launcher/ui/pages/global/LauncherPage.cpp @@ -62,7 +62,9 @@ enum InstSortMode { // Sort alphabetically by name. Sort_Name, // Sort by which instance was launched most recently. - Sort_LastLaunch + Sort_LastLaunch, + // Sort by which instance has the most playtime. + Sort_Playtime, }; LauncherPage::LauncherPage(QWidget* parent) : QWidget(parent), ui(new Ui::LauncherPage) @@ -71,6 +73,7 @@ LauncherPage::LauncherPage(QWidget* parent) : QWidget(parent), ui(new Ui::Launch ui->sortingModeGroup->setId(ui->sortByNameBtn, Sort_Name); ui->sortingModeGroup->setId(ui->sortLastLaunchedBtn, Sort_LastLaunch); + ui->sortingModeGroup->setId(ui->sortByPlaytimeBtn, Sort_Playtime); loadSettings(); @@ -227,6 +230,9 @@ void LauncherPage::applySettings() case Sort_LastLaunch: s->set("InstSortMode", "LastLaunch"); break; + case Sort_Playtime: + s->set("InstSortMode", "Playtime"); + break; case Sort_Name: default: s->set("InstSortMode", "Name"); @@ -282,6 +288,8 @@ void LauncherPage::loadSettings() QString sortMode = s->get("InstSortMode").toString(); if (sortMode == "LastLaunch") { ui->sortLastLaunchedBtn->setChecked(true); + } else if (sortMode == "Playtime"){ + ui->sortByPlaytimeBtn->setChecked(true); } else { ui->sortByNameBtn->setChecked(true); } diff --git a/launcher/ui/pages/global/LauncherPage.ui b/launcher/ui/pages/global/LauncherPage.ui index 2fb2dfa26..de3b1f029 100644 --- a/launcher/ui/pages/global/LauncherPage.ui +++ b/launcher/ui/pages/global/LauncherPage.ui @@ -83,6 +83,16 @@ + + + + By &playtime + + + sortingModeGroup + + + @@ -675,6 +685,7 @@ scrollArea sortByNameBtn sortLastLaunchedBtn + sortByPlaytimeBtn askToRenameDirBtn alwaysRenameDirBtn neverRenameDirBtn