From 4908affbfceee55d09426b7cab94d155d36d0d90 Mon Sep 17 00:00:00 2001 From: Tannin Date: Fri, 18 Dec 2015 20:28:03 +0100 Subject: fixed display of savegame widget in case parsing fails --- src/savegame.h | 8 ++++---- src/savegamegamebryo.cpp | 22 +++++++++++++++++++--- src/savegamegamebyro.h | 2 +- 3 files changed, 24 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/savegame.h b/src/savegame.h index d1bf4691..e7220fcc 100644 --- a/src/savegame.h +++ b/src/savegame.h @@ -106,10 +106,10 @@ public: protected: QString m_FileName; - QString m_PCName; - unsigned short m_PCLevel; - QString m_PCLocation; - unsigned long m_SaveNumber; + QString m_PCName { "N/A" }; + unsigned short m_PCLevel { 0 }; + QString m_PCLocation { "N/A" }; + unsigned long m_SaveNumber { 0 }; SYSTEMTIME m_CreationTime; QImage m_Screenshot; diff --git a/src/savegamegamebryo.cpp b/src/savegamegamebryo.cpp index 7aa6cdfc..3fc96bef 100644 --- a/src/savegamegamebryo.cpp +++ b/src/savegamegamebryo.cpp @@ -32,13 +32,29 @@ SaveGameGamebryo::SaveGameGamebryo(QObject *parent, const QString &fileName, IPl : SaveGame(parent, fileName, game) , m_Plugins() { - SaveGameInfo const *info = game->feature(); + // ensure creation time is set to a valid, preferrably even a reasonable value + memset(&m_CreationTime, 0, sizeof(SYSTEMTIME)); + HANDLE fileHandle = CreateFileW(fileName.toStdWString().c_str(), + GENERIC_READ, + FILE_SHARE_READ | FILE_SHARE_WRITE, + nullptr, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, + nullptr); + if (fileHandle != INVALID_HANDLE_VALUE) { + FILETIME creationTime; + if (GetFileTime(fileHandle, &creationTime, nullptr, nullptr)) { + FileTimeToSystemTime(&creationTime, &m_CreationTime); + } + } + + const SaveGameInfo *info = game->feature(); if (info != nullptr) { - ISaveGame const *save = info->getSaveGameInfo(fileName); + const ISaveGame *save = info->getSaveGameInfo(fileName); m_Save = save; //Kludgery - GamebryoSaveGame const *s = dynamic_cast(save); + const GamebryoSaveGame *s = dynamic_cast(save); m_PCName = s->getPCName(); m_PCLevel = s->getPCLevel(); m_PCLocation = s->getPCLocation(); diff --git a/src/savegamegamebyro.h b/src/savegamegamebyro.h index b7a5ba12..5ac62848 100644 --- a/src/savegamegamebyro.h +++ b/src/savegamegamebyro.h @@ -70,7 +70,7 @@ private: QStringList m_Plugins; //Note: This isn't owned by us so safe to copy - MOBase::ISaveGame const *m_Save; + const MOBase::ISaveGame *m_Save; }; -- cgit v1.3.1