diff --git a/rnex-core/src/nex/friends_handler.rs b/rnex-core/src/nex/friends_handler.rs index 1312ab6..2a44702 100644 --- a/rnex-core/src/nex/friends_handler.rs +++ b/rnex-core/src/nex/friends_handler.rs @@ -97,29 +97,12 @@ impl FriendsManager { } } -pub fn friend_info_from_user(data: &UserData) -> FriendInfo { - FriendInfo { - data: Data {}, - nna_info: data.info.clone(), - presence: data.presence.clone(), - comment: Comment { - data: Data {}, - unk: 0, - message: "haii =w=".to_string(), - last_changed: KerberosDateTime::now(), - }, - became_friends: KerberosDateTime::now(), - last_online: KerberosDateTime::now(), - unk: 0, - } -} - impl FriendsWiiU for FriendsUser { async fn update_and_get_all_information( &self, info: NNAInfo, presence: NintendoPresenceV2, - _date_time: KerberosDateTime, + date_time: KerberosDateTime, ) -> Result< ( PrincipalPreference, @@ -134,213 +117,7 @@ impl FriendsWiiU for FriendsUser { ), ErrorCode, > { - println!("updating own data"); - let mut data = self.data.write().await; - *data = Some(UserData { info, presence }); - let self_fr_info = friend_info_from_user(data.as_ref().unwrap()); - let Ok(any_self_fr_info) = Any::new(&self_fr_info) else { - return Err(ErrorCode::RendezVous_ControlScriptFailure); - }; - let Ok(any_self_presence) = Any::new(&self_fr_info.presence) else { - return Err(ErrorCode::RendezVous_ControlScriptFailure); - }; - drop(data); - - let mut fr_list = vec![FriendInfo { - data: Data{}, - became_friends: KerberosDateTime::now(), - comment: Comment { - data: Data{}, - last_changed: KerberosDateTime::now(), - message: "I'm just a dummy account :3".to_string(), - unk: 0, - }, - last_online: KerberosDateTime::now(), - nna_info: NNAInfo { - data: Data{}, - principal_basic_info: PrincipalBasicInfo { - data: Data{}, - pid: 101, - nnid: "dummy:3".to_string(), - mii: MiiV2{ - data: Data{}, - date_time: KerberosDateTime::now(), - name: "TheDummy".to_string(), - mii_data: hex::decode("030000402bd7c32986a771f2dc6b35e31da15e37ff7c0000391e6f006f006d0069000000000000000000000000004040001065033568641e2013661a611821640f0000290052485000000000000000000000000000000000000000000000e838").unwrap(), - unk: 0, - unk2: 0, - }, - unk: 0 - }, - unk: 0, - unk2: 0 - }, - presence: NintendoPresenceV2{ - data: Data{}, - changed_flags: 0, - message: "".to_string(), - app_data: vec![], - game_key: GameKey{ - data: Data{}, - tid: 0x00050002101ce400, - version: 0x0 - }, - game_server_id: 0, - is_online: true, - gid: 0, - pid: 101, - unk: 0, - unk2: 0, - unk3: 0, - unk4: 0, - unk5: 0, - unk6: 0, - unk7: 0 - }, - unk: 0 - }]; - - println!("acquiring user and current friends locks"); - let users = self.fm.users.read().await; - if users.iter().filter(|u| u.upgrade().is_some()).count() >= 100 { - return Err(ErrorCode::RendezVous_ConnectionFailure); - } - println!("started summing users"); - for u in users.deref().iter().filter_map(|u| u.upgrade()) { - let data = u.data.read().await; - let Some(inner_data) = data.as_ref() else { - continue; - }; - fr_list.push(friend_info_from_user(&inner_data)); - drop(data); - - let mut curr_friends = self.current_friends.write().await; - curr_friends.push(u.pid); - drop(curr_friends); - - let mut fr = u.current_friends.write().await; - if !fr.contains(&self.pid) { - fr.push(self.pid); - drop(fr); - let data = any_self_fr_info.clone(); - let u = u.clone(); - let sender = self.pid; - spawn(async move { - u.remote - .process_nintendo_notification_event_1(NintendoNotificationEvent { - event_type: 30, - sender, - data, - }) - .await; - }); - } else { - let data = any_self_presence.clone(); - let u = u.clone(); - let sender = self.pid; - spawn(async move { - u.remote - .process_nintendo_notification_event_2(NintendoNotificationEvent { - event_type: 24, - sender, - data, - }) - .await; - }); - drop(fr); - } - } - println!("finished summing users"); - drop(users); - - println!("adding self to users"); - let mut users = self.fm.users.write().await; - users.push(self.this.clone()); - drop(users); - - println!("done..."); - Ok(( - PrincipalPreference { - data: Data {}, - block_friend_request: false, - show_online: false, - show_playing_title: false, - }, - Comment { - data: Data {}, - last_changed: KerberosDateTime::now(), - message: "".to_string(), - unk: 0, - }, - fr_list, - vec![], - vec![], - vec![], - false, - vec![], - false, - )) - } - - async fn update_presence(&self, presence: NintendoPresenceV2) -> Result<(), ErrorCode> { - info!("user updated presence: {:?}", presence); - let mut data = self.data.write().await; - let Some(inner_data) = data.as_mut() else { - log::error!("unable to get presence data"); - return Err(ErrorCode::RendezVous_PermissionDenied); - }; - inner_data.presence = presence; - let Ok(any_self_fr_info) = Any::new(&inner_data.presence) else { - log::error!("unable to create presence any data holder"); - return Err(ErrorCode::RendezVous_ControlScriptFailure); - }; - drop(data); - - let users = self.fm.users.read().await; - for u in users.deref().iter().filter_map(|u| u.upgrade()) { - info!("sending presence update"); - u.remote - .process_nintendo_notification_event_2(NintendoNotificationEvent { - event_type: 24, - sender: self.pid, - data: any_self_fr_info.clone(), - }) - .await; - } - drop(users); - - Ok(()) - } - - async fn delete_persistent_notification( - &self, - _notifs: Vec, - ) -> Result<(), ErrorCode> { - Ok(()) - } - - async fn check_setting_status(&self) -> Result { - Ok(0xFF) - } - - async fn update_preference(&self, preference: PrincipalPreference) -> Result<(), ErrorCode> { - info!("user updated preference: {:?}", preference); - let any_presence: Any = Any::new(&preference).expect("out of memory"); - - let users = self.fm.users.read().await; - for u in users.deref().iter().filter_map(|u| u.upgrade()) { - info!("sending preference update"); - u.remote - .process_nintendo_notification_event_2(NintendoNotificationEvent { - event_type: 23, - sender: self.pid, - data: any_presence.clone(), - }) - .await; - } - drop(users); - - Ok(()) + todo!() } async fn add_friend(&self, friend: PID) -> Result<(FriendRequest, FriendInfo), ErrorCode> { @@ -402,6 +179,10 @@ impl FriendsWiiU for FriendsUser { todo!() } + async fn update_presence(&self, presence: NintendoPresenceV2) -> Result<(), ErrorCode> { + todo!() + } + async fn update_mii(&self, presence: MiiV2) -> Result { todo!() } @@ -410,10 +191,25 @@ impl FriendsWiiU for FriendsUser { todo!() } + async fn update_preference(&self, preference: PrincipalPreference) -> Result<(), ErrorCode> { + todo!() + } + async fn get_basic_info(&self, pids: Vec) -> Result, ErrorCode> { todo!() } + async fn delete_persistent_notification( + &self, + notifs: Vec, + ) -> Result<(), ErrorCode> { + todo!() + } + + async fn check_setting_status(&self) -> Result { + todo!() + } + async fn get_request_block_settings( &self, unk: Vec,