Updated components/misc/timeconvert.hpp to fix the Android build.

crashfix_debugdraw
Project579 3 years ago
parent 5446571aec
commit 35fe214588

@ -7,6 +7,7 @@
#include <components/misc/strings/format.hpp> #include <components/misc/strings/format.hpp>
#include <components/misc/strings/lower.hpp> #include <components/misc/strings/lower.hpp>
#include <components/esm3/esmreader.hpp> #include <components/esm3/esmreader.hpp>
#include <components/misc/timeconvert.hpp>
@ -990,7 +991,7 @@ std::time_t MwIniImporter::lastWriteTime(const std::filesystem::path& filename,
if (std::filesystem::exists(filename)) if (std::filesystem::exists(filename))
{ {
std::filesystem::path resolved = std::filesystem::canonical(filename); std::filesystem::path resolved = std::filesystem::canonical(filename);
writeTime = std::chrono::system_clock::to_time_t (Misc::clockCast<std::chrono::system_clock::time_point> (std::filesystem::last_write_time (resolved)));; writeTime = Misc::to_time_t(std::filesystem::last_write_time (resolved));
// print timestamp // print timestamp
const int size=1024; const int size=1024;

@ -47,13 +47,13 @@ private:
OpenMW application stack assumes UTF-8 encoding, therefore this OpenMW application stack assumes UTF-8 encoding, therefore this
conversion. conversion.
For std::filesystem::path::imbue see components/files/windowspath.cpp For boost::filesystem::path::imbue see components/files/windowspath.cpp
*/ */
int wmain(int argc, wchar_t *wargv[]) { int wmain(int argc, wchar_t *wargv[]) {
utf8argv converter(argc, wargv); utf8argv converter(argc, wargv);
char **argv = converter.get(); char **argv = converter.get();
// TODO(Project579): Temporarly disabled until a good solution is found (no solution might actually be needed) // TODO(Project579): Temporarly disabled until a good solution is found (no solution might actually be needed)
//std::filesystem::path::imbue(boost::locale::generator().generate("")); //boost::filesystem::path::imbue(boost::locale::generator().generate(""));
#endif #endif
try try

@ -8,8 +8,8 @@
#include "adjusterwidget.hpp" #include "adjusterwidget.hpp"
#ifndef CS_QT_BOOST_FILESYSTEM_PATH_DECLARED #ifndef CS_QT_STD_FILESYSTEM_PATH_DECLARED
#define CS_QT_BOOST_FILESYSTEM_PATH_DECLARED #define CS_QT_STD_FILESYSTEM_PATH_DECLARED
Q_DECLARE_METATYPE (std::filesystem::path) Q_DECLARE_METATYPE (std::filesystem::path)
#endif #endif

@ -6,8 +6,8 @@
#include <filesystem> #include <filesystem>
#ifndef CS_QT_BOOST_FILESYSTEM_PATH_DECLARED #ifndef CS_QT_STD_FILESYSTEM_PATH_DECLARED
#define CS_QT_BOOST_FILESYSTEM_PATH_DECLARED #define CS_QT_STD_FILESYSTEM_PATH_DECLARED
Q_DECLARE_METATYPE (std::filesystem::path) Q_DECLARE_METATYPE (std::filesystem::path)
#endif #endif

@ -3,9 +3,7 @@
#include <QWidget> #include <QWidget>
#ifndef Q_MOC_RUN
#include <filesystem> #include <filesystem>
#endif
class QPushButton; class QPushButton;
class QListWidget; class QListWidget;

@ -20,6 +20,7 @@
#include <components/settings/settings.hpp> #include <components/settings/settings.hpp>
#include <components/files/memorystream.hpp> #include <components/files/memorystream.hpp>
#include <components/misc/timeconvert.hpp>
#include <components/esm3/loadclas.hpp> #include <components/esm3/loadclas.hpp>
@ -403,7 +404,7 @@ namespace MWGui
throw std::runtime_error("Can't find selected slot"); throw std::runtime_error("Can't find selected slot");
std::stringstream text; std::stringstream text;
time_t time = mCurrentSlot->mTimeStamp; time_t time = Misc::to_time_t(mCurrentSlot->mTimeStamp);
struct tm* timeinfo; struct tm* timeinfo;
timeinfo = localtime(&time); timeinfo = localtime(&time);

@ -8,7 +8,6 @@
#include <components/esm/defs.hpp> #include <components/esm/defs.hpp>
#include <components/esm3/esmreader.hpp> #include <components/esm3/esmreader.hpp>
#include <components/misc/utf8stream.hpp> #include <components/misc/utf8stream.hpp>
#include <components/misc/timeconvert.hpp>
#include <components/misc/strings/algorithm.hpp> #include <components/misc/strings/algorithm.hpp>
@ -31,7 +30,7 @@ void MWState::Character::addSlot (const std::filesystem::path& path, const std::
{ {
Slot slot; Slot slot;
slot.mPath = path; slot.mPath = path;
slot.mTimeStamp = std::chrono::system_clock::to_time_t (Misc::clockCast<std::chrono::system_clock::time_point> (std::filesystem::last_write_time (path))); slot.mTimeStamp = std::filesystem::last_write_time (path);
ESM::ESMReader reader; ESM::ESMReader reader;
reader.open (slot.mPath.string()); reader.open (slot.mPath.string());
@ -78,7 +77,7 @@ void MWState::Character::addSlot (const ESM::SavedGame& profile)
} }
slot.mProfile = profile; slot.mProfile = profile;
slot.mTimeStamp = std::time (nullptr); slot.mTimeStamp = std::filesystem::file_time_type ();
mSlots.push_back (slot); mSlots.push_back (slot);
} }
@ -156,7 +155,7 @@ const MWState::Slot *MWState::Character::updateSlot (const Slot *slot, const ESM
Slot newSlot = *slot; Slot newSlot = *slot;
newSlot.mProfile = profile; newSlot.mProfile = profile;
newSlot.mTimeStamp = std::time (nullptr); newSlot.mTimeStamp = std::filesystem::file_time_type ();
mSlots.erase (mSlots.begin()+index); mSlots.erase (mSlots.begin()+index);

@ -11,7 +11,7 @@ namespace MWState
{ {
std::filesystem::path mPath; std::filesystem::path mPath;
ESM::SavedGame mProfile; ESM::SavedGame mProfile;
std::time_t mTimeStamp; std::filesystem::file_time_type mTimeStamp;
}; };
bool operator< (const Slot& left, const Slot& right); bool operator< (const Slot& left, const Slot& right);

@ -173,7 +173,7 @@ bool Config::GameSettings::writeFile(QTextStream &stream)
while (i.hasPrevious()) { while (i.hasPrevious()) {
i.previous(); i.previous();
// path lines (e.g. 'data=...') need quotes and ampersands escaping to match how std::filesystem::path uses boost::io::quoted // path lines (e.g. 'data=...') need quotes and ampersands escaping to match how boost::filesystem::path uses boost::io::quoted
if (i.key() == QLatin1String("data") if (i.key() == QLatin1String("data")
|| i.key() == QLatin1String("data-local") || i.key() == QLatin1String("data-local")
|| i.key() == QLatin1String("resources") || i.key() == QLatin1String("resources")

@ -427,7 +427,7 @@ void parseConfig(std::istream& stream, bpo::variables_map& variables, const bpo:
std::istream& operator>> (std::istream& istream, MaybeQuotedPath& MaybeQuotedPath) std::istream& operator>> (std::istream& istream, MaybeQuotedPath& MaybeQuotedPath)
{ {
// If the stream starts with a double quote, read from stream using std::filesystem::path rules, then discard anything remaining. // If the stream starts with a double quote, read from stream using boost::filesystem::path rules, then discard anything remaining.
// This prevents boost::program_options getting upset that we've not consumed the whole stream. // This prevents boost::program_options getting upset that we've not consumed the whole stream.
// If it doesn't start with a double quote, read the whole thing verbatim // If it doesn't start with a double quote, read the whole thing verbatim
if (istream.peek() == '"') if (istream.peek() == '"')

@ -38,10 +38,10 @@ WindowsPath::WindowsPath(const std::string& application_name)
with UTF-8 encoding (generated for empty name from boost::locale) with UTF-8 encoding (generated for empty name from boost::locale)
to handle Unicode in platform-agnostic way using std::string. to handle Unicode in platform-agnostic way using std::string.
See std::filesystem and boost::locale reference for details. See boost::filesystem and boost::locale reference for details.
*/ */
// TODO(Project579): Temporarly disabled until a good solution is found (no solution might actually be needed) // TODO(Project579): Temporarly disabled until a good solution is found (no solution might actually be needed)
//std::filesystem::path::imbue(boost::locale::generator().generate("")); //boost::filesystem::path::imbue(boost::locale::generator().generate(""));
std::filesystem::path localPath = getLocalPath(); std::filesystem::path localPath = getLocalPath();
if (!SetCurrentDirectoryA(localPath.string().c_str())) if (!SetCurrentDirectoryA(localPath.string().c_str()))
@ -111,7 +111,7 @@ std::filesystem::path WindowsPath::getCachePath() const
std::filesystem::path WindowsPath::getInstallPath() const std::filesystem::path WindowsPath::getInstallPath() const
{ {
std::filesystem::path installPath(""); std::filesystem::path installPath();
HKEY hKey; HKEY hKey;

@ -1,16 +1,17 @@
#ifndef OPENMW_COMPONENTS_MISC_TIMECONVERT_H #ifndef OPENMW_COMPONENTS_MISC_TIMECONVERT_H
#define OPENMW_COMPONENTS_MISC_TIMECONVERT_H #define OPENMW_COMPONENTS_MISC_TIMECONVERT_H
#include <ctime>
#include <chrono>
namespace Misc namespace Misc
{ {
// Very ugly hack to go from std::chrono::file_clock to any other clock, can be replaced with better solution in C++20 template <typename TP>
// https://stackoverflow.com/questions/35282308/convert-between-c11-clocks inline std::time_t to_time_t(TP tp)
template <typename DstTimePointT, typename SrcTimePointT, typename DstClockT = typename DstTimePointT::clock, typename SrcClockT = typename SrcTimePointT::clock>
inline DstTimePointT clockCast (const SrcTimePointT tp)
{ {
const auto src_now = SrcClockT::now(); using namespace std::chrono;
const auto dst_now = DstClockT::now(); auto sctp = time_point_cast<system_clock::duration>(tp - TP::clock::now() + system_clock::now());
return dst_now + (tp - src_now); return system_clock::to_time_t(sctp);
} }
} // namespace Misc } // namespace Misc

Loading…
Cancel
Save