mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-05-21 10:55:03 +00:00
Play Time (#1305)
* Play Time * SDL * QT * Sort / Formatting * Timer 1 minute * remove the seconds removes the seconds from the screen, but in the play_time.txt file it continues to record the seconds for better accuracy, and the screen is cleaner * fixes the invisible 0 * SDL . . . * Fix Timer
This commit is contained in:
parent
6fe26173dc
commit
d4eae28ce2
34 changed files with 303 additions and 7 deletions
|
@ -8,6 +8,7 @@
|
||||||
#include "common/logging/backend.h"
|
#include "common/logging/backend.h"
|
||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
#ifdef ENABLE_QT_GUI
|
#ifdef ENABLE_QT_GUI
|
||||||
|
#include <QtCore>
|
||||||
#include "common/memory_patcher.h"
|
#include "common/memory_patcher.h"
|
||||||
#endif
|
#endif
|
||||||
#include "common/assert.h"
|
#include "common/assert.h"
|
||||||
|
@ -79,6 +80,17 @@ Emulator::Emulator() {
|
||||||
|
|
||||||
// Load renderdoc module.
|
// Load renderdoc module.
|
||||||
VideoCore::LoadRenderDoc();
|
VideoCore::LoadRenderDoc();
|
||||||
|
|
||||||
|
// Start the timer (Play Time)
|
||||||
|
#ifdef ENABLE_QT_GUI
|
||||||
|
start_time = std::chrono::steady_clock::now();
|
||||||
|
const auto user_dir = Common::FS::GetUserPath(Common::FS::PathType::UserDir);
|
||||||
|
QString filePath = QString::fromStdString((user_dir / "play_time.txt").string());
|
||||||
|
QFile file(filePath);
|
||||||
|
if (!file.open(QIODevice::ReadWrite | QIODevice::Text)) {
|
||||||
|
LOG_INFO(Loader, "Error opening or creating play_time.txt");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
Emulator::~Emulator() {
|
Emulator::~Emulator() {
|
||||||
|
@ -122,6 +134,14 @@ void Emulator::Run(const std::filesystem::path& file) {
|
||||||
}
|
}
|
||||||
#ifdef ENABLE_QT_GUI
|
#ifdef ENABLE_QT_GUI
|
||||||
MemoryPatcher::g_game_serial = id;
|
MemoryPatcher::g_game_serial = id;
|
||||||
|
|
||||||
|
// Timer for 'Play Time'
|
||||||
|
QTimer* timer = new QTimer();
|
||||||
|
QObject::connect(timer, &QTimer::timeout, [this, id]() {
|
||||||
|
UpdatePlayTime(id);
|
||||||
|
start_time = std::chrono::steady_clock::now();
|
||||||
|
});
|
||||||
|
timer->start(60000); // 60000 ms = 1 minute
|
||||||
#endif
|
#endif
|
||||||
title = param_sfo->GetString("TITLE").value_or("Unknown title");
|
title = param_sfo->GetString("TITLE").value_or("Unknown title");
|
||||||
LOG_INFO(Loader, "Game id: {} Title: {}", id, title);
|
LOG_INFO(Loader, "Game id: {} Title: {}", id, title);
|
||||||
|
@ -228,6 +248,10 @@ void Emulator::Run(const std::filesystem::path& file) {
|
||||||
window->waitEvent();
|
window->waitEvent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef ENABLE_QT_GUI
|
||||||
|
UpdatePlayTime(id);
|
||||||
|
#endif
|
||||||
|
|
||||||
std::exit(0);
|
std::exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -269,4 +293,74 @@ void Emulator::LoadSystemModules(const std::filesystem::path& file) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef ENABLE_QT_GUI
|
||||||
|
void Emulator::UpdatePlayTime(const std::string& serial) {
|
||||||
|
const auto user_dir = Common::FS::GetUserPath(Common::FS::PathType::UserDir);
|
||||||
|
QString filePath = QString::fromStdString((user_dir / "play_time.txt").string());
|
||||||
|
|
||||||
|
QFile file(filePath);
|
||||||
|
if (!file.open(QIODevice::ReadWrite | QIODevice::Text)) {
|
||||||
|
LOG_INFO(Loader, "Error opening play_time.txt");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto end_time = std::chrono::steady_clock::now();
|
||||||
|
auto duration = std::chrono::duration_cast<std::chrono::seconds>(end_time - start_time);
|
||||||
|
int totalSeconds = duration.count();
|
||||||
|
|
||||||
|
QTextStream in(&file);
|
||||||
|
QStringList lines;
|
||||||
|
QString content;
|
||||||
|
while (!in.atEnd()) {
|
||||||
|
content += in.readLine() + "\n";
|
||||||
|
}
|
||||||
|
file.close();
|
||||||
|
|
||||||
|
QStringList existingLines = content.split('\n', Qt::SkipEmptyParts);
|
||||||
|
int accumulatedSeconds = 0;
|
||||||
|
bool found = false;
|
||||||
|
|
||||||
|
for (const QString& line : existingLines) {
|
||||||
|
QStringList parts = line.split(' ');
|
||||||
|
if (parts.size() == 2 && parts[0] == QString::fromStdString(serial)) {
|
||||||
|
QStringList timeParts = parts[1].split(':');
|
||||||
|
if (timeParts.size() == 3) {
|
||||||
|
int hours = timeParts[0].toInt();
|
||||||
|
int minutes = timeParts[1].toInt();
|
||||||
|
int seconds = timeParts[2].toInt();
|
||||||
|
accumulatedSeconds = hours * 3600 + minutes * 60 + seconds;
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
accumulatedSeconds += totalSeconds;
|
||||||
|
int hours = accumulatedSeconds / 3600;
|
||||||
|
int minutes = (accumulatedSeconds % 3600) / 60;
|
||||||
|
int seconds = accumulatedSeconds % 60;
|
||||||
|
QString playTimeSaved = QString::number(hours) + ":" +
|
||||||
|
QString::number(minutes).rightJustified(2, '0') + ":" +
|
||||||
|
QString::number(seconds).rightJustified(2, '0');
|
||||||
|
|
||||||
|
if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {
|
||||||
|
QTextStream out(&file);
|
||||||
|
bool lineUpdated = false;
|
||||||
|
|
||||||
|
for (const QString& line : existingLines) {
|
||||||
|
if (line.startsWith(QString::fromStdString(serial))) {
|
||||||
|
out << QString::fromStdString(serial) + " " + playTimeSaved + "\n";
|
||||||
|
lineUpdated = true;
|
||||||
|
} else {
|
||||||
|
out << line << "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!lineUpdated) {
|
||||||
|
out << QString::fromStdString(serial) + " " + playTimeSaved + "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
LOG_INFO(Loader, "Playing time for {}: {}", serial, playTimeSaved.toStdString());
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
} // namespace Core
|
} // namespace Core
|
||||||
|
|
|
@ -26,6 +26,7 @@ public:
|
||||||
~Emulator();
|
~Emulator();
|
||||||
|
|
||||||
void Run(const std::filesystem::path& file);
|
void Run(const std::filesystem::path& file);
|
||||||
|
void UpdatePlayTime(const std::string& serial);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void LoadSystemModules(const std::filesystem::path& file);
|
void LoadSystemModules(const std::filesystem::path& file);
|
||||||
|
@ -34,6 +35,7 @@ private:
|
||||||
Input::GameController* controller;
|
Input::GameController* controller;
|
||||||
Core::Linker* linker;
|
Core::Linker* linker;
|
||||||
std::unique_ptr<Frontend::WindowSDL> window;
|
std::unique_ptr<Frontend::WindowSDL> window;
|
||||||
|
std::chrono::steady_clock::time_point start_time;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Core
|
} // namespace Core
|
||||||
|
|
|
@ -60,6 +60,9 @@ public:
|
||||||
if (auto app_ver = psf.GetString("APP_VER"); app_ver.has_value()) {
|
if (auto app_ver = psf.GetString("APP_VER"); app_ver.has_value()) {
|
||||||
game.version = *app_ver;
|
game.version = *app_ver;
|
||||||
}
|
}
|
||||||
|
if (const auto play_time = psf.GetString("PLAY_TIME"); play_time.has_value()) {
|
||||||
|
game.play_time = *play_time;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return game;
|
return game;
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,16 +24,17 @@ GameListFrame::GameListFrame(std::shared_ptr<GameInfoClass> game_info_get, QWidg
|
||||||
this->horizontalHeader()->setSortIndicatorShown(true);
|
this->horizontalHeader()->setSortIndicatorShown(true);
|
||||||
this->horizontalHeader()->setStretchLastSection(true);
|
this->horizontalHeader()->setStretchLastSection(true);
|
||||||
this->setContextMenuPolicy(Qt::CustomContextMenu);
|
this->setContextMenuPolicy(Qt::CustomContextMenu);
|
||||||
this->setColumnCount(8);
|
this->setColumnCount(9);
|
||||||
this->setColumnWidth(1, 300); // Name
|
this->setColumnWidth(1, 300); // Name
|
||||||
this->setColumnWidth(2, 120); // Serial
|
this->setColumnWidth(2, 120); // Serial
|
||||||
this->setColumnWidth(3, 90); // Region
|
this->setColumnWidth(3, 90); // Region
|
||||||
this->setColumnWidth(4, 90); // Firmware
|
this->setColumnWidth(4, 90); // Firmware
|
||||||
this->setColumnWidth(5, 90); // Size
|
this->setColumnWidth(5, 90); // Size
|
||||||
this->setColumnWidth(6, 90); // Version
|
this->setColumnWidth(6, 90); // Version
|
||||||
|
this->setColumnWidth(7, 100); // Play Time
|
||||||
QStringList headers;
|
QStringList headers;
|
||||||
headers << tr("Icon") << tr("Name") << tr("Serial") << tr("Region") << tr("Firmware")
|
headers << tr("Icon") << tr("Name") << tr("Serial") << tr("Region") << tr("Firmware")
|
||||||
<< tr("Size") << tr("Version") << tr("Path");
|
<< tr("Size") << tr("Version") << tr("Play Time") << tr("Path");
|
||||||
this->setHorizontalHeaderLabels(headers);
|
this->setHorizontalHeaderLabels(headers);
|
||||||
this->horizontalHeader()->setSortIndicatorShown(true);
|
this->horizontalHeader()->setSortIndicatorShown(true);
|
||||||
this->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
|
this->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
|
||||||
|
@ -100,9 +101,37 @@ void GameListFrame::PopulateGameList() {
|
||||||
SetTableItem(i, 4, QString::fromStdString(m_game_info->m_games[i].fw));
|
SetTableItem(i, 4, QString::fromStdString(m_game_info->m_games[i].fw));
|
||||||
SetTableItem(i, 5, QString::fromStdString(m_game_info->m_games[i].size));
|
SetTableItem(i, 5, QString::fromStdString(m_game_info->m_games[i].size));
|
||||||
SetTableItem(i, 6, QString::fromStdString(m_game_info->m_games[i].version));
|
SetTableItem(i, 6, QString::fromStdString(m_game_info->m_games[i].version));
|
||||||
|
|
||||||
|
QString playTime = GetPlayTime(m_game_info->m_games[i].serial);
|
||||||
|
if (playTime.isEmpty()) {
|
||||||
|
m_game_info->m_games[i].play_time = "0:00:00";
|
||||||
|
SetTableItem(i, 7, "0");
|
||||||
|
} else {
|
||||||
|
QStringList timeParts = playTime.split(':');
|
||||||
|
int hours = timeParts[0].toInt();
|
||||||
|
int minutes = timeParts[1].toInt();
|
||||||
|
int seconds = timeParts[2].toInt();
|
||||||
|
|
||||||
|
QString formattedPlayTime;
|
||||||
|
if (hours > 0) {
|
||||||
|
formattedPlayTime += QString("%1h ").arg(hours);
|
||||||
|
}
|
||||||
|
if (minutes > 0) {
|
||||||
|
formattedPlayTime += QString("%1m ").arg(minutes);
|
||||||
|
}
|
||||||
|
|
||||||
|
formattedPlayTime = formattedPlayTime.trimmed();
|
||||||
|
m_game_info->m_games[i].play_time = playTime.toStdString();
|
||||||
|
if (formattedPlayTime.isEmpty()) {
|
||||||
|
SetTableItem(i, 7, "0");
|
||||||
|
} else {
|
||||||
|
SetTableItem(i, 7, formattedPlayTime);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
QString path;
|
QString path;
|
||||||
Common::FS::PathToQString(path, m_game_info->m_games[i].path);
|
Common::FS::PathToQString(path, m_game_info->m_games[i].path);
|
||||||
SetTableItem(i, 7, path);
|
SetTableItem(i, 8, path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -171,7 +200,7 @@ void GameListFrame::ResizeIcons(int iconSize) {
|
||||||
this->setItem(index, 0, iconItem);
|
this->setItem(index, 0, iconItem);
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
this->horizontalHeader()->setSectionResizeMode(7, QHeaderView::ResizeToContents);
|
this->horizontalHeader()->setSectionResizeMode(8, QHeaderView::ResizeToContents);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameListFrame::SetTableItem(int row, int column, QString itemStr) {
|
void GameListFrame::SetTableItem(int row, int column, QString itemStr) {
|
||||||
|
@ -224,3 +253,33 @@ void GameListFrame::SetRegionFlag(int row, int column, QString itemStr) {
|
||||||
this->setItem(row, column, item);
|
this->setItem(row, column, item);
|
||||||
this->setCellWidget(row, column, widget);
|
this->setCellWidget(row, column, widget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString GameListFrame::GetPlayTime(const std::string& serial) {
|
||||||
|
QString playTime;
|
||||||
|
const auto user_dir = Common::FS::GetUserPath(Common::FS::PathType::UserDir);
|
||||||
|
QString filePath = QString::fromStdString((user_dir / "play_time.txt").string());
|
||||||
|
|
||||||
|
QFile file(filePath);
|
||||||
|
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
||||||
|
return playTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (!file.atEnd()) {
|
||||||
|
QByteArray line = file.readLine();
|
||||||
|
QString lineStr = QString::fromUtf8(line).trimmed();
|
||||||
|
|
||||||
|
QStringList parts = lineStr.split(' ');
|
||||||
|
if (parts.size() >= 2) {
|
||||||
|
QString fileSerial = parts[0];
|
||||||
|
QString time = parts[1];
|
||||||
|
|
||||||
|
if (fileSerial == QString::fromStdString(serial)) {
|
||||||
|
playTime = time;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
file.close();
|
||||||
|
return playTime;
|
||||||
|
}
|
||||||
|
|
|
@ -29,6 +29,7 @@ public Q_SLOTS:
|
||||||
private:
|
private:
|
||||||
void SetTableItem(int row, int column, QString itemStr);
|
void SetTableItem(int row, int column, QString itemStr);
|
||||||
void SetRegionFlag(int row, int column, QString itemStr);
|
void SetRegionFlag(int row, int column, QString itemStr);
|
||||||
|
QString GetPlayTime(const std::string& serial);
|
||||||
QList<QAction*> m_columnActs;
|
QList<QAction*> m_columnActs;
|
||||||
GameInfoClass* game_inf_get = nullptr;
|
GameInfoClass* game_inf_get = nullptr;
|
||||||
bool ListSortedAsc = true;
|
bool ListSortedAsc = true;
|
||||||
|
@ -68,6 +69,8 @@ public:
|
||||||
case 6:
|
case 6:
|
||||||
return a.version < b.version;
|
return a.version < b.version;
|
||||||
case 7:
|
case 7:
|
||||||
|
return a.play_time < b.play_time;
|
||||||
|
case 8:
|
||||||
return a.path < b.path;
|
return a.path < b.path;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
|
@ -89,6 +92,8 @@ public:
|
||||||
case 6:
|
case 6:
|
||||||
return a.version > b.version;
|
return a.version > b.version;
|
||||||
case 7:
|
case 7:
|
||||||
|
return a.play_time > b.play_time;
|
||||||
|
case 8:
|
||||||
return a.path > b.path;
|
return a.path > b.path;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -19,6 +19,8 @@ struct GameInfo {
|
||||||
std::string version = "Unknown";
|
std::string version = "Unknown";
|
||||||
std::string region = "Unknown";
|
std::string region = "Unknown";
|
||||||
std::string fw = "Unknown";
|
std::string fw = "Unknown";
|
||||||
|
|
||||||
|
std::string play_time = "Unknown";
|
||||||
};
|
};
|
||||||
|
|
||||||
class GameListUtils {
|
class GameListUtils {
|
||||||
|
|
|
@ -58,6 +58,7 @@ bool MainWindow::Init() {
|
||||||
this->show();
|
this->show();
|
||||||
// load game list
|
// load game list
|
||||||
LoadGameLists();
|
LoadGameLists();
|
||||||
|
// Check for update
|
||||||
CheckUpdateMain(true);
|
CheckUpdateMain(true);
|
||||||
|
|
||||||
auto end = std::chrono::steady_clock::now();
|
auto end = std::chrono::steady_clock::now();
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>854</width>
|
<width>854</width>
|
||||||
<height>570</height>
|
<height>605</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
|
@ -71,7 +71,7 @@
|
||||||
</sizepolicy>
|
</sizepolicy>
|
||||||
</property>
|
</property>
|
||||||
<property name="currentIndex">
|
<property name="currentIndex">
|
||||||
<number>1</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="generalTab">
|
<widget class="QWidget" name="generalTab">
|
||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
|
|
|
@ -1111,6 +1111,11 @@
|
||||||
<source>Path</source>
|
<source>Path</source>
|
||||||
<translation>مسار</translation>
|
<translation>مسار</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../game_list_frame.cpp" line="38"/>
|
||||||
|
<source>Play Time</source>
|
||||||
|
<translation>وقت اللعب</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>CheckUpdate</name>
|
<name>CheckUpdate</name>
|
||||||
|
|
|
@ -1111,6 +1111,11 @@
|
||||||
<source>Path</source>
|
<source>Path</source>
|
||||||
<translation>Sti</translation>
|
<translation>Sti</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../game_list_frame.cpp" line="38"/>
|
||||||
|
<source>Play Time</source>
|
||||||
|
<translation>Spilletid</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>CheckUpdate</name>
|
<name>CheckUpdate</name>
|
||||||
|
|
|
@ -1111,6 +1111,11 @@
|
||||||
<source>Path</source>
|
<source>Path</source>
|
||||||
<translation>Pfad</translation>
|
<translation>Pfad</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../game_list_frame.cpp" line="38"/>
|
||||||
|
<source>Play Time</source>
|
||||||
|
<translation>Spielzeit</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>CheckUpdate</name>
|
<name>CheckUpdate</name>
|
||||||
|
|
|
@ -1111,6 +1111,11 @@
|
||||||
<source>Path</source>
|
<source>Path</source>
|
||||||
<translation>Διαδρομή</translation>
|
<translation>Διαδρομή</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../game_list_frame.cpp" line="38"/>
|
||||||
|
<source>Play Time</source>
|
||||||
|
<translation>Χρόνος παιχνιδιού</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>CheckUpdate</name>
|
<name>CheckUpdate</name>
|
||||||
|
|
|
@ -1146,6 +1146,11 @@
|
||||||
<source>Path</source>
|
<source>Path</source>
|
||||||
<translation>Path</translation>
|
<translation>Path</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../game_list_frame.cpp" line="38"/>
|
||||||
|
<source>Play Time</source>
|
||||||
|
<translation>Play Time</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>CheckUpdate</name>
|
<name>CheckUpdate</name>
|
||||||
|
|
|
@ -1111,6 +1111,11 @@
|
||||||
<source>Path</source>
|
<source>Path</source>
|
||||||
<translation>Ruta</translation>
|
<translation>Ruta</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../game_list_frame.cpp" line="38"/>
|
||||||
|
<source>Play Time</source>
|
||||||
|
<translation>Tiempo de Juego</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>CheckUpdate</name>
|
<name>CheckUpdate</name>
|
||||||
|
|
|
@ -1111,6 +1111,11 @@
|
||||||
<source>Path</source>
|
<source>Path</source>
|
||||||
<translation>مسیر</translation>
|
<translation>مسیر</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../game_list_frame.cpp" line="38"/>
|
||||||
|
<source>Play Time</source>
|
||||||
|
<translation>زمان بازی</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>CheckUpdate</name>
|
<name>CheckUpdate</name>
|
||||||
|
|
|
@ -1111,6 +1111,11 @@
|
||||||
<source>Path</source>
|
<source>Path</source>
|
||||||
<translation>Polku</translation>
|
<translation>Polku</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../game_list_frame.cpp" line="38"/>
|
||||||
|
<source>Play Time</source>
|
||||||
|
<translation>Peliaika</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>CheckUpdate</name>
|
<name>CheckUpdate</name>
|
||||||
|
|
|
@ -1111,6 +1111,11 @@
|
||||||
<source>Path</source>
|
<source>Path</source>
|
||||||
<translation>Répertoire</translation>
|
<translation>Répertoire</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../game_list_frame.cpp" line="38"/>
|
||||||
|
<source>Play Time</source>
|
||||||
|
<translation>Temps de jeu</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>CheckUpdate</name>
|
<name>CheckUpdate</name>
|
||||||
|
|
|
@ -1111,6 +1111,11 @@
|
||||||
<source>Path</source>
|
<source>Path</source>
|
||||||
<translation>Útvonal</translation>
|
<translation>Útvonal</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../game_list_frame.cpp" line="38"/>
|
||||||
|
<source>Play Time</source>
|
||||||
|
<translation>Játékidő</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>CheckUpdate</name>
|
<name>CheckUpdate</name>
|
||||||
|
|
|
@ -1111,6 +1111,11 @@
|
||||||
<source>Path</source>
|
<source>Path</source>
|
||||||
<translation>Jalur</translation>
|
<translation>Jalur</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../game_list_frame.cpp" line="38"/>
|
||||||
|
<source>Play Time</source>
|
||||||
|
<translation>Waktu Bermain</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>CheckUpdate</name>
|
<name>CheckUpdate</name>
|
||||||
|
|
|
@ -1111,6 +1111,11 @@
|
||||||
<source>Path</source>
|
<source>Path</source>
|
||||||
<translation>Percorso</translation>
|
<translation>Percorso</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../game_list_frame.cpp" line="38"/>
|
||||||
|
<source>Play Time</source>
|
||||||
|
<translation>Tempo di Gioco</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>CheckUpdate</name>
|
<name>CheckUpdate</name>
|
||||||
|
|
|
@ -1111,6 +1111,11 @@
|
||||||
<source>Path</source>
|
<source>Path</source>
|
||||||
<translation>パス</translation>
|
<translation>パス</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../game_list_frame.cpp" line="38"/>
|
||||||
|
<source>Play Time</source>
|
||||||
|
<translation>プレイ時間</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>CheckUpdate</name>
|
<name>CheckUpdate</name>
|
||||||
|
|
|
@ -1111,6 +1111,11 @@
|
||||||
<source>Path</source>
|
<source>Path</source>
|
||||||
<translation>Path</translation>
|
<translation>Path</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../game_list_frame.cpp" line="38"/>
|
||||||
|
<source>Play Time</source>
|
||||||
|
<translation>Play Time</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>CheckUpdate</name>
|
<name>CheckUpdate</name>
|
||||||
|
|
|
@ -1111,6 +1111,11 @@
|
||||||
<source>Path</source>
|
<source>Path</source>
|
||||||
<translation>Kelias</translation>
|
<translation>Kelias</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../game_list_frame.cpp" line="38"/>
|
||||||
|
<source>Play Time</source>
|
||||||
|
<translation>Žaidimo laikas</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>CheckUpdate</name>
|
<name>CheckUpdate</name>
|
||||||
|
|
|
@ -1111,6 +1111,11 @@
|
||||||
<source>Path</source>
|
<source>Path</source>
|
||||||
<translation>Sti</translation>
|
<translation>Sti</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../game_list_frame.cpp" line="38"/>
|
||||||
|
<source>Play Time</source>
|
||||||
|
<translation>Spilletid</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>CheckUpdate</name>
|
<name>CheckUpdate</name>
|
||||||
|
|
|
@ -1111,6 +1111,11 @@
|
||||||
<source>Path</source>
|
<source>Path</source>
|
||||||
<translation>Pad</translation>
|
<translation>Pad</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../game_list_frame.cpp" line="38"/>
|
||||||
|
<source>Play Time</source>
|
||||||
|
<translation>Speeltijd</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>CheckUpdate</name>
|
<name>CheckUpdate</name>
|
||||||
|
|
|
@ -1111,6 +1111,11 @@
|
||||||
<source>Path</source>
|
<source>Path</source>
|
||||||
<translation>Ścieżka</translation>
|
<translation>Ścieżka</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../game_list_frame.cpp" line="38"/>
|
||||||
|
<source>Play Time</source>
|
||||||
|
<translation>Czas gry</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>CheckUpdate</name>
|
<name>CheckUpdate</name>
|
||||||
|
|
|
@ -1111,6 +1111,11 @@
|
||||||
<source>Path</source>
|
<source>Path</source>
|
||||||
<translation>Diretório</translation>
|
<translation>Diretório</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../game_list_frame.cpp" line="38"/>
|
||||||
|
<source>Play Time</source>
|
||||||
|
<translation>Horas Jogadas</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>CheckUpdate</name>
|
<name>CheckUpdate</name>
|
||||||
|
|
|
@ -1111,6 +1111,11 @@
|
||||||
<source>Path</source>
|
<source>Path</source>
|
||||||
<translation>Drum</translation>
|
<translation>Drum</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../game_list_frame.cpp" line="38"/>
|
||||||
|
<source>Play Time</source>
|
||||||
|
<translation>Timp de Joacă</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>CheckUpdate</name>
|
<name>CheckUpdate</name>
|
||||||
|
|
|
@ -1111,6 +1111,11 @@
|
||||||
<source>Path</source>
|
<source>Path</source>
|
||||||
<translation>Путь</translation>
|
<translation>Путь</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../game_list_frame.cpp" line="38"/>
|
||||||
|
<source>Play Time</source>
|
||||||
|
<translation>Время Игры</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>CheckUpdate</name>
|
<name>CheckUpdate</name>
|
||||||
|
|
|
@ -1111,6 +1111,11 @@
|
||||||
<source>Path</source>
|
<source>Path</source>
|
||||||
<translation>Shtegu</translation>
|
<translation>Shtegu</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../game_list_frame.cpp" line="38"/>
|
||||||
|
<source>Play Time</source>
|
||||||
|
<translation>Kohë Lojë</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>CheckUpdate</name>
|
<name>CheckUpdate</name>
|
||||||
|
|
|
@ -1111,6 +1111,11 @@
|
||||||
<source>Path</source>
|
<source>Path</source>
|
||||||
<translation>Yol</translation>
|
<translation>Yol</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../game_list_frame.cpp" line="38"/>
|
||||||
|
<source>Play Time</source>
|
||||||
|
<translation>Oynama Süresi</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>CheckUpdate</name>
|
<name>CheckUpdate</name>
|
||||||
|
|
|
@ -1111,6 +1111,11 @@
|
||||||
<source>Path</source>
|
<source>Path</source>
|
||||||
<translation>Đường dẫn</translation>
|
<translation>Đường dẫn</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../game_list_frame.cpp" line="38"/>
|
||||||
|
<source>Play Time</source>
|
||||||
|
<translation>Thời gian chơi</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>CheckUpdate</name>
|
<name>CheckUpdate</name>
|
||||||
|
|
|
@ -1111,6 +1111,11 @@
|
||||||
<source>Path</source>
|
<source>Path</source>
|
||||||
<translation>路径</translation>
|
<translation>路径</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../game_list_frame.cpp" line="38"/>
|
||||||
|
<source>Play Time</source>
|
||||||
|
<translation>游戏时间</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>CheckUpdate</name>
|
<name>CheckUpdate</name>
|
||||||
|
|
|
@ -1111,6 +1111,11 @@
|
||||||
<source>Path</source>
|
<source>Path</source>
|
||||||
<translation>路徑</translation>
|
<translation>路徑</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../game_list_frame.cpp" line="38"/>
|
||||||
|
<source>Play Time</source>
|
||||||
|
<translation>遊玩時間</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>CheckUpdate</name>
|
<name>CheckUpdate</name>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue