Time Unlocked

This commit is contained in:
DanielSvoboda 2025-02-27 17:25:34 -03:00
parent 611a4a264a
commit a7f506fa93
2 changed files with 41 additions and 11 deletions

View File

@ -923,15 +923,16 @@ int PS4_SYSV_ABI sceNpTrophyUnlockTrophy(OrbisNpTrophyContext context, OrbisNpTr
node.attribute("unlockstate").set_value("true"); node.attribute("unlockstate").set_value("true");
} }
Rtc::OrbisRtcTick trophyTimestamp; auto trophyTimestamp = std::chrono::duration_cast<std::chrono::seconds>(
Rtc::sceRtcGetCurrentTick(&trophyTimestamp); std::chrono::system_clock::now().time_since_epoch())
.count();
if (node.attribute("timestamp").empty()) { if (node.attribute("timestamp").empty()) {
node.append_attribute("timestamp") = node.append_attribute("timestamp") =
std::to_string(trophyTimestamp.tick).c_str(); std::to_string(trophyTimestamp).c_str();
} else { } else {
node.attribute("timestamp") node.attribute("timestamp")
.set_value(std::to_string(trophyTimestamp.tick).c_str()); .set_value(std::to_string(trophyTimestamp).c_str());
} }
std::string trophy_icon_file = "TROP"; std::string trophy_icon_file = "TROP";
@ -955,15 +956,16 @@ int PS4_SYSV_ABI sceNpTrophyUnlockTrophy(OrbisNpTrophyContext context, OrbisNpTr
platinum_node.attribute("unlockstate").set_value("true"); platinum_node.attribute("unlockstate").set_value("true");
} }
Rtc::OrbisRtcTick trophyTimestamp; auto trophyTimestamp = std::chrono::duration_cast<std::chrono::seconds>(
Rtc::sceRtcGetCurrentTick(&trophyTimestamp); std::chrono::system_clock::now().time_since_epoch())
.count();
if (platinum_node.attribute("timestamp").empty()) { if (platinum_node.attribute("timestamp").empty()) {
platinum_node.append_attribute("timestamp") = platinum_node.append_attribute("timestamp") =
std::to_string(trophyTimestamp.tick).c_str(); std::to_string(trophyTimestamp).c_str();
} else { } else {
platinum_node.attribute("timestamp") platinum_node.attribute("timestamp")
.set_value(std::to_string(trophyTimestamp.tick).c_str()); .set_value(std::to_string(trophyTimestamp).c_str());
} }
int platinum_trophy_id = int platinum_trophy_id =

View File

@ -13,6 +13,10 @@ namespace fs = std::filesystem;
CMRC_DECLARE(res); CMRC_DECLARE(res);
// true: European format; false: American format
bool useEuropeanDateFormat = false;
// TODO : Use the interface language to set this value
void TrophyViewer::updateTrophyInfo() { void TrophyViewer::updateTrophyInfo() {
int total = 0; int total = 0;
int unlocked = 0; int unlocked = 0;
@ -110,7 +114,8 @@ TrophyViewer::TrophyViewer(QString trophyPath, QString gameTrpPath) : QMainWindo
<< "ID" << "ID"
<< "Hidden" << "Hidden"
<< "Type" << "Type"
<< "PID"; << "PID"
<< "Time Unlocked";
PopulateTrophyWidget(trophyPath); PopulateTrophyWidget(trophyPath);
QDockWidget* trophyInfoDock = new QDockWidget("", this); QDockWidget* trophyInfoDock = new QDockWidget("", this);
@ -197,6 +202,7 @@ void TrophyViewer::PopulateTrophyWidget(QString title) {
QStringList trpPid; QStringList trpPid;
QStringList trophyNames; QStringList trophyNames;
QStringList trophyDetails; QStringList trophyDetails;
QStringList trpTimeUnlocked;
QString xmlPath = trpDir + "/Xml/TROP.XML"; QString xmlPath = trpDir + "/Xml/TROP.XML";
QFile file(xmlPath); QFile file(xmlPath);
@ -213,14 +219,35 @@ void TrophyViewer::PopulateTrophyWidget(QString title) {
trpHidden.append(reader.attributes().value("hidden").toString()); trpHidden.append(reader.attributes().value("hidden").toString());
trpType.append(reader.attributes().value("ttype").toString()); trpType.append(reader.attributes().value("ttype").toString());
trpPid.append(reader.attributes().value("pid").toString()); trpPid.append(reader.attributes().value("pid").toString());
if (reader.attributes().hasAttribute("unlockstate")) { if (reader.attributes().hasAttribute("unlockstate")) {
if (reader.attributes().value("unlockstate").toString() == "true") { if (reader.attributes().value("unlockstate").toString() == "true") {
trpUnlocked.append("unlocked"); trpUnlocked.append("unlocked");
} else { } else {
trpUnlocked.append("locked"); trpUnlocked.append("locked");
} }
if (reader.attributes().hasAttribute("timestamp")) {
QString ts = reader.attributes().value("timestamp").toString();
if (ts.length() > 10)
trpTimeUnlocked.append("unknown");
else {
bool ok;
qint64 timestampInt = ts.toLongLong(&ok);
if (ok) {
QDateTime dt = QDateTime::fromSecsSinceEpoch(timestampInt);
QString format = useEuropeanDateFormat ? "dd/MM/yyyy HH:mm:ss"
: "MM/dd/yyyy HH:mm:ss";
trpTimeUnlocked.append(dt.toString(format));
} else {
trpTimeUnlocked.append("unknown");
}
}
} else {
trpTimeUnlocked.append("");
}
} else { } else {
trpUnlocked.append("locked"); trpUnlocked.append("locked");
trpTimeUnlocked.append("");
} }
} }
@ -234,7 +261,7 @@ void TrophyViewer::PopulateTrophyWidget(QString title) {
} }
QTableWidget* tableWidget = new QTableWidget(this); QTableWidget* tableWidget = new QTableWidget(this);
tableWidget->setShowGrid(false); tableWidget->setShowGrid(false);
tableWidget->setColumnCount(8); tableWidget->setColumnCount(9);
tableWidget->setHorizontalHeaderLabels(headers); tableWidget->setHorizontalHeaderLabels(headers);
tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
tableWidget->setSelectionMode(QAbstractItemView::SingleSelection); tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
@ -296,13 +323,14 @@ void TrophyViewer::PopulateTrophyWidget(QString title) {
SetTableItem(tableWidget, row, 4, trpId[row]); SetTableItem(tableWidget, row, 4, trpId[row]);
SetTableItem(tableWidget, row, 5, trpHidden[row]); SetTableItem(tableWidget, row, 5, trpHidden[row]);
SetTableItem(tableWidget, row, 7, trpPid[row]); SetTableItem(tableWidget, row, 7, trpPid[row]);
SetTableItem(tableWidget, row, 8, trpTimeUnlocked[row]);
} }
tableWidget->verticalHeader()->resizeSection(row, icon.height()); tableWidget->verticalHeader()->resizeSection(row, icon.height());
row++; row++;
} }
tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
int width = 16; int width = 16;
for (int i = 0; i < 8; i++) { for (int i = 0; i < 9; i++) {
width += tableWidget->horizontalHeader()->sectionSize(i); width += tableWidget->horizontalHeader()->sectionSize(i);
} }
tableWidget->resize(width, 720); tableWidget->resize(width, 720);