|
|
|
@ -15,10 +15,10 @@ ITimeZoneService::ITimeZoneService(Core::System& system_, |
|
|
|
static const FunctionInfo functions[] = { |
|
|
|
{0, &ITimeZoneService::GetDeviceLocationName, "GetDeviceLocationName"}, |
|
|
|
{1, nullptr, "SetDeviceLocationName"}, |
|
|
|
{2, nullptr, "GetTotalLocationNameCount"}, |
|
|
|
{3, nullptr, "LoadLocationNameList"}, |
|
|
|
{2, &ITimeZoneService::GetTotalLocationNameCount, "GetTotalLocationNameCount"}, |
|
|
|
{3, &ITimeZoneService::LoadLocationNameList, "LoadLocationNameList"}, |
|
|
|
{4, &ITimeZoneService::LoadTimeZoneRule, "LoadTimeZoneRule"}, |
|
|
|
{5, nullptr, "GetTimeZoneRuleVersion"}, |
|
|
|
{5, &ITimeZoneService::GetTimeZoneRuleVersion, "GetTimeZoneRuleVersion"}, |
|
|
|
{6, nullptr, "GetDeviceLocationNameAndUpdatedTime"}, |
|
|
|
{100, &ITimeZoneService::ToCalendarTime, "ToCalendarTime"}, |
|
|
|
{101, &ITimeZoneService::ToCalendarTimeWithMyRule, "ToCalendarTimeWithMyRule"}, |
|
|
|
@ -45,6 +45,57 @@ void ITimeZoneService::GetDeviceLocationName(HLERequestContext& ctx) { |
|
|
|
rb.PushRaw(location_name); |
|
|
|
} |
|
|
|
|
|
|
|
void ITimeZoneService::GetTotalLocationNameCount(HLERequestContext& ctx) { |
|
|
|
LOG_DEBUG(Service_Time, "called"); |
|
|
|
|
|
|
|
s32 count{}; |
|
|
|
if (const Result result{ |
|
|
|
time_zone_content_manager.GetTimeZoneManager().GetTotalLocationNameCount(count)}; |
|
|
|
result != ResultSuccess) { |
|
|
|
IPC::ResponseBuilder rb{ctx, 2}; |
|
|
|
rb.Push(result); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
IPC::ResponseBuilder rb{ctx, 3}; |
|
|
|
rb.Push(ResultSuccess); |
|
|
|
rb.Push(count); |
|
|
|
} |
|
|
|
|
|
|
|
void ITimeZoneService::LoadLocationNameList(HLERequestContext& ctx) { |
|
|
|
LOG_DEBUG(Service_Time, "called"); |
|
|
|
|
|
|
|
std::vector<TimeZone::LocationName> location_names{}; |
|
|
|
if (const Result result{ |
|
|
|
time_zone_content_manager.GetTimeZoneManager().LoadLocationNameList(location_names)}; |
|
|
|
result != ResultSuccess) { |
|
|
|
IPC::ResponseBuilder rb{ctx, 2}; |
|
|
|
rb.Push(result); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
ctx.WriteBuffer(location_names); |
|
|
|
IPC::ResponseBuilder rb{ctx, 3}; |
|
|
|
rb.Push(ResultSuccess); |
|
|
|
rb.Push(static_cast<s32>(location_names.size())); |
|
|
|
} |
|
|
|
void ITimeZoneService::GetTimeZoneRuleVersion(HLERequestContext& ctx) { |
|
|
|
LOG_DEBUG(Service_Time, "called"); |
|
|
|
|
|
|
|
u128 rule_version{}; |
|
|
|
if (const Result result{ |
|
|
|
time_zone_content_manager.GetTimeZoneManager().GetTimeZoneRuleVersion(rule_version)}; |
|
|
|
result != ResultSuccess) { |
|
|
|
IPC::ResponseBuilder rb{ctx, 2}; |
|
|
|
rb.Push(result); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
IPC::ResponseBuilder rb{ctx, 6}; |
|
|
|
rb.Push(ResultSuccess); |
|
|
|
rb.PushRaw(rule_version); |
|
|
|
} |
|
|
|
|
|
|
|
void ITimeZoneService::LoadTimeZoneRule(HLERequestContext& ctx) { |
|
|
|
IPC::RequestParser rp{ctx}; |
|
|
|
const auto raw_location_name{rp.PopRaw<std::array<u8, 0x24>>()}; |
|
|
|
|