forked from spacebar/rust-nex
(skip ci) start friends from scratch (DO NOT USE THIS COMMIT)
This commit is contained in:
parent
7441342c5f
commit
7c10abe3e4
1 changed files with 21 additions and 225 deletions
|
|
@ -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 {
|
impl FriendsWiiU for FriendsUser {
|
||||||
async fn update_and_get_all_information(
|
async fn update_and_get_all_information(
|
||||||
&self,
|
&self,
|
||||||
info: NNAInfo,
|
info: NNAInfo,
|
||||||
presence: NintendoPresenceV2,
|
presence: NintendoPresenceV2,
|
||||||
_date_time: KerberosDateTime,
|
date_time: KerberosDateTime,
|
||||||
) -> Result<
|
) -> Result<
|
||||||
(
|
(
|
||||||
PrincipalPreference,
|
PrincipalPreference,
|
||||||
|
|
@ -134,213 +117,7 @@ impl FriendsWiiU for FriendsUser {
|
||||||
),
|
),
|
||||||
ErrorCode,
|
ErrorCode,
|
||||||
> {
|
> {
|
||||||
println!("updating own data");
|
todo!()
|
||||||
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<PersistentNotification>,
|
|
||||||
) -> Result<(), ErrorCode> {
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn check_setting_status(&self) -> Result<u8, ErrorCode> {
|
|
||||||
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(())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn add_friend(&self, friend: PID) -> Result<(FriendRequest, FriendInfo), ErrorCode> {
|
async fn add_friend(&self, friend: PID) -> Result<(FriendRequest, FriendInfo), ErrorCode> {
|
||||||
|
|
@ -402,6 +179,10 @@ impl FriendsWiiU for FriendsUser {
|
||||||
todo!()
|
todo!()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn update_presence(&self, presence: NintendoPresenceV2) -> Result<(), ErrorCode> {
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
|
|
||||||
async fn update_mii(&self, presence: MiiV2) -> Result<KerberosDateTime, ErrorCode> {
|
async fn update_mii(&self, presence: MiiV2) -> Result<KerberosDateTime, ErrorCode> {
|
||||||
todo!()
|
todo!()
|
||||||
}
|
}
|
||||||
|
|
@ -410,10 +191,25 @@ impl FriendsWiiU for FriendsUser {
|
||||||
todo!()
|
todo!()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn update_preference(&self, preference: PrincipalPreference) -> Result<(), ErrorCode> {
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
|
|
||||||
async fn get_basic_info(&self, pids: Vec<PID>) -> Result<Vec<PrincipalBasicInfo>, ErrorCode> {
|
async fn get_basic_info(&self, pids: Vec<PID>) -> Result<Vec<PrincipalBasicInfo>, ErrorCode> {
|
||||||
todo!()
|
todo!()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn delete_persistent_notification(
|
||||||
|
&self,
|
||||||
|
notifs: Vec<PersistentNotification>,
|
||||||
|
) -> Result<(), ErrorCode> {
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn check_setting_status(&self) -> Result<u8, ErrorCode> {
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
|
|
||||||
async fn get_request_block_settings(
|
async fn get_request_block_settings(
|
||||||
&self,
|
&self,
|
||||||
unk: Vec<u32>,
|
unk: Vec<u32>,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue