mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-10-30 23:49:01 -05:00 
			
		
		
		
	service: time: Implement ToPosixTimeWithMyRule.
- Used by Pokemon Mystery Dungeon.
This commit is contained in:
		| @@ -1019,6 +1019,15 @@ ResultCode TimeZoneManager::ToPosixTime(const TimeZoneRule& rules, | |||||||
|     return RESULT_SUCCESS; |     return RESULT_SUCCESS; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | ResultCode TimeZoneManager::ToPosixTimeWithMyRule(const CalendarTime& calendar_time, | ||||||
|  |                                                   s64& posix_time) const { | ||||||
|  |     if (is_initialized) { | ||||||
|  |         return ToPosixTime(time_zone_rule, calendar_time, posix_time); | ||||||
|  |     } | ||||||
|  |     posix_time = 0; | ||||||
|  |     return ERROR_UNINITIALIZED_CLOCK; | ||||||
|  | } | ||||||
|  |  | ||||||
| ResultCode TimeZoneManager::GetDeviceLocationName(LocationName& value) const { | ResultCode TimeZoneManager::GetDeviceLocationName(LocationName& value) const { | ||||||
|     if (!is_initialized) { |     if (!is_initialized) { | ||||||
|         return ERROR_UNINITIALIZED_CLOCK; |         return ERROR_UNINITIALIZED_CLOCK; | ||||||
|   | |||||||
| @@ -39,6 +39,7 @@ public: | |||||||
|     ResultCode ParseTimeZoneRuleBinary(TimeZoneRule& rules, FileSys::VirtualFile& vfs_file) const; |     ResultCode ParseTimeZoneRuleBinary(TimeZoneRule& rules, FileSys::VirtualFile& vfs_file) const; | ||||||
|     ResultCode ToPosixTime(const TimeZoneRule& rules, const CalendarTime& calendar_time, |     ResultCode ToPosixTime(const TimeZoneRule& rules, const CalendarTime& calendar_time, | ||||||
|                            s64& posix_time) const; |                            s64& posix_time) const; | ||||||
|  |     ResultCode ToPosixTimeWithMyRule(const CalendarTime& calendar_time, s64& posix_time) const; | ||||||
|  |  | ||||||
| private: | private: | ||||||
|     bool is_initialized{}; |     bool is_initialized{}; | ||||||
|   | |||||||
| @@ -22,7 +22,7 @@ ITimeZoneService ::ITimeZoneService(TimeZone::TimeZoneContentManager& time_zone_ | |||||||
|         {100, &ITimeZoneService::ToCalendarTime, "ToCalendarTime"}, |         {100, &ITimeZoneService::ToCalendarTime, "ToCalendarTime"}, | ||||||
|         {101, &ITimeZoneService::ToCalendarTimeWithMyRule, "ToCalendarTimeWithMyRule"}, |         {101, &ITimeZoneService::ToCalendarTimeWithMyRule, "ToCalendarTimeWithMyRule"}, | ||||||
|         {201, &ITimeZoneService::ToPosixTime, "ToPosixTime"}, |         {201, &ITimeZoneService::ToPosixTime, "ToPosixTime"}, | ||||||
|         {202, nullptr, "ToPosixTimeWithMyRule"}, |         {202, &ITimeZoneService::ToPosixTimeWithMyRule, "ToPosixTimeWithMyRule"}, | ||||||
|     }; |     }; | ||||||
|     RegisterHandlers(functions); |     RegisterHandlers(functions); | ||||||
| } | } | ||||||
| @@ -145,4 +145,26 @@ void ITimeZoneService::ToPosixTime(Kernel::HLERequestContext& ctx) { | |||||||
|     ctx.WriteBuffer(&posix_time, sizeof(s64)); |     ctx.WriteBuffer(&posix_time, sizeof(s64)); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | void ITimeZoneService::ToPosixTimeWithMyRule(Kernel::HLERequestContext& ctx) { | ||||||
|  |     LOG_DEBUG(Service_Time, "called"); | ||||||
|  |  | ||||||
|  |     IPC::RequestParser rp{ctx}; | ||||||
|  |     const auto calendar_time{rp.PopRaw<TimeZone::CalendarTime>()}; | ||||||
|  |  | ||||||
|  |     s64 posix_time{}; | ||||||
|  |     if (const ResultCode result{ | ||||||
|  |             time_zone_content_manager.GetTimeZoneManager().ToPosixTimeWithMyRule(calendar_time, | ||||||
|  |                                                                                  posix_time)}; | ||||||
|  |         result != RESULT_SUCCESS) { | ||||||
|  |         IPC::ResponseBuilder rb{ctx, 2}; | ||||||
|  |         rb.Push(result); | ||||||
|  |         return; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     IPC::ResponseBuilder rb{ctx, 3}; | ||||||
|  |     rb.Push(RESULT_SUCCESS); | ||||||
|  |     rb.PushRaw<u32>(1); // Number of times we're returning | ||||||
|  |     ctx.WriteBuffer(&posix_time, sizeof(s64)); | ||||||
|  | } | ||||||
|  |  | ||||||
| } // namespace Service::Time | } // namespace Service::Time | ||||||
|   | |||||||
| @@ -22,6 +22,7 @@ private: | |||||||
|     void ToCalendarTime(Kernel::HLERequestContext& ctx); |     void ToCalendarTime(Kernel::HLERequestContext& ctx); | ||||||
|     void ToCalendarTimeWithMyRule(Kernel::HLERequestContext& ctx); |     void ToCalendarTimeWithMyRule(Kernel::HLERequestContext& ctx); | ||||||
|     void ToPosixTime(Kernel::HLERequestContext& ctx); |     void ToPosixTime(Kernel::HLERequestContext& ctx); | ||||||
|  |     void ToPosixTimeWithMyRule(Kernel::HLERequestContext& ctx); | ||||||
|  |  | ||||||
| private: | private: | ||||||
|     TimeZone::TimeZoneContentManager& time_zone_content_manager; |     TimeZone::TimeZoneContentManager& time_zone_content_manager; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 bunnei
					bunnei