|
|
@@ -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>>()};
|