mirror of
				https://git.suyu.dev/suyu/suyu.git
				synced 2025-11-04 12:34:39 +08:00 
			
		
		
		
	service: time: Implement ToPosixTimeWithMyRule.
- Used by Pokemon Mystery Dungeon.
This commit is contained in:
		
							parent
							
								
									89b326e396
								
							
						
					
					
						commit
						ed76c71319
					
				@ -1019,6 +1019,15 @@ ResultCode TimeZoneManager::ToPosixTime(const TimeZoneRule& rules,
 | 
			
		||||
    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 {
 | 
			
		||||
    if (!is_initialized) {
 | 
			
		||||
        return ERROR_UNINITIALIZED_CLOCK;
 | 
			
		||||
 | 
			
		||||
@ -39,6 +39,7 @@ public:
 | 
			
		||||
    ResultCode ParseTimeZoneRuleBinary(TimeZoneRule& rules, FileSys::VirtualFile& vfs_file) const;
 | 
			
		||||
    ResultCode ToPosixTime(const TimeZoneRule& rules, const CalendarTime& calendar_time,
 | 
			
		||||
                           s64& posix_time) const;
 | 
			
		||||
    ResultCode ToPosixTimeWithMyRule(const CalendarTime& calendar_time, s64& posix_time) const;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    bool is_initialized{};
 | 
			
		||||
 | 
			
		||||
@ -22,7 +22,7 @@ ITimeZoneService ::ITimeZoneService(TimeZone::TimeZoneContentManager& time_zone_
 | 
			
		||||
        {100, &ITimeZoneService::ToCalendarTime, "ToCalendarTime"},
 | 
			
		||||
        {101, &ITimeZoneService::ToCalendarTimeWithMyRule, "ToCalendarTimeWithMyRule"},
 | 
			
		||||
        {201, &ITimeZoneService::ToPosixTime, "ToPosixTime"},
 | 
			
		||||
        {202, nullptr, "ToPosixTimeWithMyRule"},
 | 
			
		||||
        {202, &ITimeZoneService::ToPosixTimeWithMyRule, "ToPosixTimeWithMyRule"},
 | 
			
		||||
    };
 | 
			
		||||
    RegisterHandlers(functions);
 | 
			
		||||
}
 | 
			
		||||
@ -145,4 +145,26 @@ void ITimeZoneService::ToPosixTime(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
    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
 | 
			
		||||
 | 
			
		||||
@ -22,6 +22,7 @@ private:
 | 
			
		||||
    void ToCalendarTime(Kernel::HLERequestContext& ctx);
 | 
			
		||||
    void ToCalendarTimeWithMyRule(Kernel::HLERequestContext& ctx);
 | 
			
		||||
    void ToPosixTime(Kernel::HLERequestContext& ctx);
 | 
			
		||||
    void ToPosixTimeWithMyRule(Kernel::HLERequestContext& ctx);
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    TimeZone::TimeZoneContentManager& time_zone_content_manager;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user