[Kernel] Fixed issue with WINE crash while opening played titles or achievements tab
This commit is contained in:
committed by
Radosław Gliński
parent
703531d541
commit
2e9c459846
@@ -89,13 +89,15 @@ struct NtSystemClock {
|
|||||||
return sys_time{cdp.time_since_epoch()};
|
return sys_time{cdp.time_since_epoch()};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO(Gliniak): Disable until WINE will implement tzdb.
|
||||||
|
/*
|
||||||
template <Domain domain_fresh_ = domain_>
|
template <Domain domain_fresh_ = domain_>
|
||||||
static constexpr std::enable_if_t<
|
static constexpr std::enable_if_t<
|
||||||
domain_fresh_ == Domain::Host,
|
domain_fresh_ == Domain::Host,
|
||||||
std::chrono::local_time<std::chrono::system_clock::duration>>
|
std::chrono::local_time<std::chrono::system_clock::duration>>
|
||||||
to_local(const time_point& tp) {
|
to_local(const time_point& tp) {
|
||||||
return std::chrono::current_zone()->to_local(to_sys(tp));
|
return std::chrono::current_zone()->to_local(to_sys(tp));
|
||||||
}
|
}*/
|
||||||
|
|
||||||
template <Domain domain_fresh_ = domain_>
|
template <Domain domain_fresh_ = domain_>
|
||||||
static constexpr std::enable_if_t<domain_fresh_ == Domain::Host, time_point>
|
static constexpr std::enable_if_t<domain_fresh_ == Domain::Host, time_point>
|
||||||
|
|||||||
@@ -103,21 +103,21 @@ xe::ui::ImmediateTexture* GameAchievementsUI::GetIcon(
|
|||||||
std::string GameAchievementsUI::GetUnlockedTime(
|
std::string GameAchievementsUI::GetUnlockedTime(
|
||||||
const Achievement& achievement_entry) const {
|
const Achievement& achievement_entry) const {
|
||||||
if (achievement_entry.IsUnlockedOnline()) {
|
if (achievement_entry.IsUnlockedOnline()) {
|
||||||
const auto unlock_time = chrono::WinSystemClock::to_local(
|
const auto unlock_time =
|
||||||
achievement_entry.unlock_time.to_time_point());
|
std::chrono::system_clock::to_time_t(chrono::WinSystemClock::to_sys(
|
||||||
|
achievement_entry.unlock_time.to_time_point()));
|
||||||
|
|
||||||
return fmt::format(
|
return fmt::format("Unlocked: {:%Y-%m-%d %H:%M}",
|
||||||
"Unlocked: {:%Y-%m-%d %H:%M}",
|
fmt::localtime(unlock_time));
|
||||||
std::chrono::system_clock::time_point(unlock_time.time_since_epoch()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (achievement_entry.unlock_time.is_valid()) {
|
if (achievement_entry.unlock_time.is_valid()) {
|
||||||
const auto unlock_time = chrono::WinSystemClock::to_local(
|
const auto unlock_time =
|
||||||
achievement_entry.unlock_time.to_time_point());
|
std::chrono::system_clock::to_time_t(chrono::WinSystemClock::to_sys(
|
||||||
|
achievement_entry.unlock_time.to_time_point()));
|
||||||
|
|
||||||
return fmt::format(
|
return fmt::format("Unlocked: Offline ({:%Y-%m-%d %H:%M})",
|
||||||
"Unlocked: Offline ({:%Y-%m-%d %H:%M})",
|
fmt::localtime(unlock_time));
|
||||||
std::chrono::system_clock::time_point(unlock_time.time_since_epoch()));
|
|
||||||
}
|
}
|
||||||
return fmt::format("Unlocked: Offline");
|
return fmt::format("Unlocked: Offline");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -86,8 +86,9 @@ void TitleListUI::DrawTitleEntry(ImGuiIO& io, TitleInfo& entry) {
|
|||||||
if (entry.WasTitlePlayed()) {
|
if (entry.WasTitlePlayed()) {
|
||||||
ImGui::TextUnformatted(
|
ImGui::TextUnformatted(
|
||||||
fmt::format("Last played: {:%Y-%m-%d %H:%M}",
|
fmt::format("Last played: {:%Y-%m-%d %H:%M}",
|
||||||
std::chrono::system_clock::time_point(
|
fmt::localtime(std::chrono::system_clock::to_time_t(
|
||||||
entry.last_played.time_since_epoch()))
|
std::chrono::system_clock::time_point(
|
||||||
|
entry.last_played.time_since_epoch()))))
|
||||||
.c_str());
|
.c_str());
|
||||||
} else {
|
} else {
|
||||||
ImGui::TextUnformatted("Last played: Unknown");
|
ImGui::TextUnformatted("Last played: Unknown");
|
||||||
|
|||||||
@@ -235,8 +235,8 @@ std::optional<TitleInfo> UserTracker::GetUserTitleInfo(
|
|||||||
info.icon = game_gpd->second.GetImage(kXdbfIdTitle);
|
info.icon = game_gpd->second.GetImage(kXdbfIdTitle);
|
||||||
|
|
||||||
if (title_data->last_played.is_valid()) {
|
if (title_data->last_played.is_valid()) {
|
||||||
info.last_played = chrono::WinSystemClock::to_local(
|
info.last_played =
|
||||||
title_data->last_played.to_time_point());
|
chrono::WinSystemClock::to_sys(title_data->last_played.to_time_point());
|
||||||
}
|
}
|
||||||
|
|
||||||
return info;
|
return info;
|
||||||
@@ -270,7 +270,7 @@ std::vector<TitleInfo> UserTracker::GetPlayedTitles(uint64_t xuid) const {
|
|||||||
info.title_name = user->dashboard_gpd_.GetTitleName(title_data->title_id);
|
info.title_name = user->dashboard_gpd_.GetTitleName(title_data->title_id);
|
||||||
|
|
||||||
if (title_data->last_played.is_valid()) {
|
if (title_data->last_played.is_valid()) {
|
||||||
info.last_played = chrono::WinSystemClock::to_local(
|
info.last_played = chrono::WinSystemClock::to_sys(
|
||||||
title_data->last_played.to_time_point());
|
title_data->last_played.to_time_point());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ struct TitleInfo {
|
|||||||
X_XDBF_AVATARAWARDS_COUNTER all_avatar_awards;
|
X_XDBF_AVATARAWARDS_COUNTER all_avatar_awards;
|
||||||
X_XDBF_AVATARAWARDS_COUNTER male_avatar_awards;
|
X_XDBF_AVATARAWARDS_COUNTER male_avatar_awards;
|
||||||
X_XDBF_AVATARAWARDS_COUNTER female_avatar_awards;
|
X_XDBF_AVATARAWARDS_COUNTER female_avatar_awards;
|
||||||
std::chrono::local_time<std::chrono::system_clock::duration> last_played;
|
std::chrono::sys_time<std::chrono::system_clock::duration> last_played;
|
||||||
|
|
||||||
std::span<const uint8_t> icon;
|
std::span<const uint8_t> icon;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user