mirror of
https://github.com/KytyPS5/KytyPS5.git
synced 2026-10-19 18:36:53 +02:00
launcher: Add game size column
This commit is contained in:
@@ -218,6 +218,11 @@
|
||||
<string>Firmware Version</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Size</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Path</string>
|
||||
|
||||
@@ -5,12 +5,15 @@
|
||||
#include <QApplication>
|
||||
#include <QComboBox>
|
||||
#include <QDir>
|
||||
#include <QDirIterator>
|
||||
#include <QFileInfo>
|
||||
#include <QFont>
|
||||
#include <QFutureWatcher>
|
||||
#include <QHBoxLayout>
|
||||
#include <QIcon>
|
||||
#include <QLabel>
|
||||
#include <QLineEdit>
|
||||
#include <QLocale>
|
||||
#include <QSize>
|
||||
#include <QStringList>
|
||||
#include <QStyle>
|
||||
@@ -18,6 +21,7 @@
|
||||
#include <QVersionNumber>
|
||||
#include <QWheelEvent>
|
||||
#include <QWidget>
|
||||
#include <QtConcurrentRun>
|
||||
|
||||
namespace {
|
||||
|
||||
@@ -26,6 +30,7 @@ enum Column {
|
||||
SerialColumn,
|
||||
GameVersionColumn,
|
||||
FirmwareVersionColumn,
|
||||
SizeColumn,
|
||||
PathColumn,
|
||||
StatusColumn,
|
||||
CommentsColumn,
|
||||
@@ -155,6 +160,34 @@ ConfigurationItem::ConfigurationItem(std::unique_ptr<Configuration> info, QTreeW
|
||||
|
||||
Update();
|
||||
SetRunning(false);
|
||||
|
||||
setData(SizeColumn, Qt::UserRole, qint64(-1));
|
||||
setText(SizeColumn, QStringLiteral("\u2014"));
|
||||
auto* watcher = new QFutureWatcher<qint64>(this);
|
||||
connect(watcher, &QFutureWatcher<qint64>::finished, this, [this, watcher]() {
|
||||
const auto bytes = watcher->result();
|
||||
setData(SizeColumn, Qt::UserRole, bytes);
|
||||
if (bytes >= 0) {
|
||||
setText(SizeColumn,
|
||||
QLocale().formattedDataSize(bytes, 2, QLocale::DataSizeTraditionalFormat));
|
||||
}
|
||||
watcher->deleteLater();
|
||||
});
|
||||
watcher->setFuture(QtConcurrent::run([path = m_info->basedir]() -> qint64 {
|
||||
if (path.isEmpty() || !QDir(path).exists()) {
|
||||
return -1;
|
||||
}
|
||||
qint64 bytes = 0;
|
||||
QDirIterator files(path, QDir::Files | QDir::Hidden | QDir::System | QDir::NoSymLinks,
|
||||
QDirIterator::Subdirectories);
|
||||
while (files.hasNext()) {
|
||||
files.next();
|
||||
if (files.fileInfo().isFile()) {
|
||||
bytes += files.fileInfo().size();
|
||||
}
|
||||
}
|
||||
return bytes;
|
||||
}));
|
||||
}
|
||||
|
||||
ConfigurationItem::~ConfigurationItem() = default;
|
||||
@@ -193,6 +226,9 @@ bool ConfigurationItem::operator<(const QTreeWidgetItem& other) const {
|
||||
const int column = treeWidget() != nullptr ? treeWidget()->sortColumn() : NameColumn;
|
||||
switch (column) {
|
||||
case NameColumn: return GetSortText(*m_info) < GetSortText(*other_item->m_info);
|
||||
case SizeColumn:
|
||||
return data(SizeColumn, Qt::UserRole).toLongLong() <
|
||||
other.data(SizeColumn, Qt::UserRole).toLongLong();
|
||||
case StatusColumn:
|
||||
return GetStatusText(m_info->game_status) <
|
||||
GetStatusText(other_item->m_info->game_status);
|
||||
|
||||
@@ -61,9 +61,10 @@ constexpr int GAME_NAME_COLUMN = 0;
|
||||
constexpr int GAME_SERIAL_COLUMN = 1;
|
||||
constexpr int GAME_VERSION_COLUMN = 2;
|
||||
constexpr int GAME_FIRMWARE_VERSION_COLUMN = 3;
|
||||
constexpr int GAME_PATH_COLUMN = 4;
|
||||
constexpr int GAME_STATUS_COLUMN = 5;
|
||||
constexpr int GAME_COMMENT_COLUMN = 6;
|
||||
constexpr int GAME_SIZE_COLUMN = 4;
|
||||
constexpr int GAME_PATH_COLUMN = 5;
|
||||
constexpr int GAME_STATUS_COLUMN = 6;
|
||||
constexpr int GAME_COMMENT_COLUMN = 7;
|
||||
|
||||
static QString NormalizeGameDirectory(const QString& dir) {
|
||||
const auto trimmed = dir.trimmed();
|
||||
@@ -217,6 +218,7 @@ ConfigurationListWidget::ConfigurationListWidget(QWidget* parent)
|
||||
m_ui->cfgs_list->setColumnWidth(GAME_SERIAL_COLUMN, 110);
|
||||
m_ui->cfgs_list->setColumnWidth(GAME_VERSION_COLUMN, 120);
|
||||
m_ui->cfgs_list->setColumnWidth(GAME_FIRMWARE_VERSION_COLUMN, 150);
|
||||
m_ui->cfgs_list->setColumnWidth(GAME_SIZE_COLUMN, 100);
|
||||
m_ui->cfgs_list->setColumnWidth(GAME_PATH_COLUMN, 320);
|
||||
m_ui->cfgs_list->setColumnWidth(GAME_STATUS_COLUMN, 150);
|
||||
m_ui->cfgs_list->setColumnWidth(GAME_COMMENT_COLUMN, 240);
|
||||
|
||||
Reference in New Issue
Block a user