mirror of
https://github.com/spice2x/spice2x.github.io.git
synced 2026-08-04 15:50:42 -07:00
e3d63c65c1
## Link to GitHub Issue, if one exists n/a ## Description of change Use fmt library for formatting time Round down sub-second units so that the FPS counter only updates once per second (instead of Time and Uptime ticking independently) clean up usage of `localtime` in `logging.cpp`
84 lines
3.0 KiB
C++
84 lines
3.0 KiB
C++
#include <atomic>
|
|
#include <chrono>
|
|
#include <future>
|
|
|
|
#include "logging.h"
|
|
#include "build/defs.h"
|
|
#include "hooks/graphics/graphics.h"
|
|
|
|
std::string_view log_get_datetime() {
|
|
return log_get_datetime(time(nullptr));
|
|
}
|
|
|
|
std::string_view log_get_datetime(std::time_t now) {
|
|
static thread_local char buf[64];
|
|
|
|
std::tm local_tm{};
|
|
localtime_s(&local_tm, &now);
|
|
strftime(buf, sizeof(buf), "[%Y/%m/%d %X]", &local_tm);
|
|
|
|
return buf;
|
|
}
|
|
|
|
static void show_popup(const std::string text) {
|
|
static std::once_flag shown;
|
|
std::call_once(shown, [text]() {
|
|
|
|
// minimize all windows
|
|
// only needed because in multi-monitor full screen games, MessageBox fails to show above the game
|
|
for (auto &hwnd : GRAPHICS_WINDOWS) {
|
|
ShowWindow(hwnd, SW_FORCEMINIMIZE);
|
|
}
|
|
|
|
// schedule a worker to terminate the game in 30 seconds in case user can't dismiss UI
|
|
std::atomic_bool cancel_popup = false;
|
|
auto worker = std::async(std::launch::async, [&cancel_popup]{
|
|
for (int ms = 300; ms > 0; ms--) {
|
|
std::this_thread::sleep_for(std::chrono::milliseconds(100));
|
|
if (cancel_popup) {
|
|
return;
|
|
}
|
|
}
|
|
launcher::stop_subsystems();
|
|
launcher::kill();
|
|
std::terminate();
|
|
});
|
|
|
|
// MessageBox will block until user presses OK
|
|
const std::string title = "spice2x (" + to_string(VERSION_STRING_CFG) + ")";
|
|
MessageBox(
|
|
nullptr,
|
|
text.c_str(),
|
|
title.c_str(),
|
|
MB_OK | MB_ICONERROR | MB_TASKMODAL | MB_SETFOREGROUND | MB_TOPMOST);
|
|
|
|
// cancel the worker since the user acknowledged the popup
|
|
cancel_popup = true;
|
|
});
|
|
}
|
|
|
|
void show_popup_for_crash() {
|
|
std::string text;
|
|
text += "Game has crashed.\n\n";
|
|
text += "Check log.txt and look for error messages near the end of file.\n\n";
|
|
text += "Unsure what to do next?\n";
|
|
text += " * update spice2x to the latest version\n";
|
|
text += " * check the FAQ on spice2x github wiki\n";
|
|
text += " * do NOT screenshot this, instead, share log.txt with someone and ask for help\n\n";
|
|
text += "Press Enter, Esc, Alt+F4, or click OK to exit. Otherwise, game will close in 30 seconds.";
|
|
show_popup(text);
|
|
}
|
|
|
|
void show_popup_for_fatal_error(std::string message) {
|
|
std::string text;
|
|
text += "A fatal error was encountered. For details, check log.txt.\n\n";
|
|
text += "----------------------------------------------------------\n";
|
|
text += message;
|
|
text += "----------------------------------------------------------\n\n";
|
|
text += "Unsure what to do next?\n";
|
|
text += " * update spice2x to the latest version\n";
|
|
text += " * check the FAQ on spice2x github wiki\n";
|
|
text += " * do NOT screenshot this, instead, share log.txt with someone and ask for help\n\n";
|
|
text += "Press Enter, Esc, Alt+F4, or click OK to exit. Otherwise, game will close in 30 seconds.";
|
|
show_popup(text);
|
|
} |