@ -22,7 +22,7 @@ public:
{ 0 , nullptr , " GetCompletionEvent " } ,
{ 1 , nullptr , " Cancel " } ,
{ 10100 , nullptr , " GetFriendListIds " } ,
{ 10101 , nullptr , " GetFriendList " } ,
{ 10101 , & IFriendService : : GetFriendList , " GetFriendList " } ,
{ 10102 , nullptr , " UpdateFriendInfo " } ,
{ 10110 , nullptr , " GetFriendProfileImage " } ,
{ 10200 , nullptr , " SendFriendRequestForApplication " } ,
@ -99,6 +99,23 @@ public:
}
private :
enum class PresenceFilter : u32 {
None = 0 ,
Online = 1 ,
OnlinePlay = 2 ,
OnlineOrOnlinePlay = 3 ,
} ;
struct SizedFriendFilter {
PresenceFilter presence ;
u8 is_favorite ;
u8 same_app ;
u8 same_app_played ;
u8 arbitary_app_played ;
u64 group_id ;
} ;
static_assert ( sizeof ( SizedFriendFilter ) = = 0x10 , " SizedFriendFilter is an invalid size " ) ;
void DeclareCloseOnlinePlaySession ( Kernel : : HLERequestContext & ctx ) {
// Stub used by Splatoon 2
LOG_WARNING ( Service_ACC , " (STUBBED) called " ) ;
@ -112,6 +129,22 @@ private:
IPC : : ResponseBuilder rb { ctx , 2 } ;
rb . Push ( RESULT_SUCCESS ) ;
}
void GetFriendList ( Kernel : : HLERequestContext & ctx ) {
IPC : : RequestParser rp { ctx } ;
const auto friend_offset = rp . Pop < u32 > ( ) ;
const auto uuid = rp . PopRaw < Common : : UUID > ( ) ;
[[maybe_unused]] const auto filter = rp . PopRaw < SizedFriendFilter > ( ) ;
const auto pid = rp . Pop < u64 > ( ) ;
LOG_WARNING ( Service_ACC , " (STUBBED) called, offset={}, uuid={}, pid={} " , friend_offset ,
uuid . Format ( ) , pid ) ;
IPC : : ResponseBuilder rb { ctx , 3 } ;
rb . Push ( RESULT_SUCCESS ) ;
rb . Push < u32 > ( 0 ) ; // Friend count
// TODO(ogniK): Return a buffer of u64s which are the "NetworkServiceAccountId"
}
} ;
class INotificationService final : public ServiceFramework < INotificationService > {