Implement social and group managers (#72)
This commit is contained in:
@@ -126,6 +126,8 @@ struct ClientRuntime {
|
||||
grid_manager: Mutex<Option<Arc<crate::grid_manager::GridManagerInner>>>,
|
||||
directory_manager: Mutex<Option<Arc<crate::directory_manager::DirectoryManagerInner>>>,
|
||||
interest_list_manager: Mutex<Option<Arc<crate::interest_list::InterestListManagerInner>>>,
|
||||
friends_manager: Mutex<Option<Arc<crate::friends_manager::FriendsManagerInner>>>,
|
||||
group_manager: Mutex<Option<Arc<crate::group_manager::GroupManagerInner>>>,
|
||||
appearance_manager: Mutex<Option<Arc<crate::appearance_manager::AppearanceManagerInner>>>,
|
||||
avatar_manager: Mutex<Option<Arc<crate::avatar_manager::AvatarManagerInner>>>,
|
||||
animesh_manager: Mutex<Option<Arc<crate::animesh_runtime::AnimeshManagerInner>>>,
|
||||
@@ -168,6 +170,8 @@ impl ClientRuntime {
|
||||
grid_manager: Mutex::new(None),
|
||||
directory_manager: Mutex::new(None),
|
||||
interest_list_manager: Mutex::new(None),
|
||||
friends_manager: Mutex::new(None),
|
||||
group_manager: Mutex::new(None),
|
||||
appearance_manager: Mutex::new(None),
|
||||
avatar_manager: Mutex::new(None),
|
||||
animesh_manager: Mutex::new(None),
|
||||
@@ -270,6 +274,14 @@ impl ClientRuntime {
|
||||
.lock()
|
||||
.unwrap_or_else(std::sync::PoisonError::into_inner)
|
||||
.take();
|
||||
self.friends_manager
|
||||
.lock()
|
||||
.unwrap_or_else(std::sync::PoisonError::into_inner)
|
||||
.take();
|
||||
self.group_manager
|
||||
.lock()
|
||||
.unwrap_or_else(std::sync::PoisonError::into_inner)
|
||||
.take();
|
||||
self.http_caps_client
|
||||
.lock()
|
||||
.unwrap_or_else(std::sync::PoisonError::into_inner)
|
||||
@@ -977,6 +989,82 @@ impl GridClient {
|
||||
.lock()
|
||||
.unwrap_or_else(std::sync::PoisonError::into_inner) = Some(value.inner);
|
||||
}
|
||||
pub(crate) fn cached_friends_manager_inner(
|
||||
&self,
|
||||
) -> Option<Arc<crate::friends_manager::FriendsManagerInner>> {
|
||||
self.runtime
|
||||
.friends_manager
|
||||
.lock()
|
||||
.unwrap_or_else(std::sync::PoisonError::into_inner)
|
||||
.clone()
|
||||
}
|
||||
pub(crate) fn install_friends_manager_inner(
|
||||
&self,
|
||||
candidate: Arc<crate::friends_manager::FriendsManagerInner>,
|
||||
) -> Arc<crate::friends_manager::FriendsManagerInner> {
|
||||
let mut cached = self
|
||||
.runtime
|
||||
.friends_manager
|
||||
.lock()
|
||||
.unwrap_or_else(std::sync::PoisonError::into_inner);
|
||||
if let Some(inner) = cached.as_ref() {
|
||||
return Arc::clone(inner);
|
||||
}
|
||||
*cached = Some(Arc::clone(&candidate));
|
||||
candidate
|
||||
}
|
||||
pub(crate) fn native_friends(&self) -> Result<crate::FriendsManager, crate::Error> {
|
||||
if let Some(inner) = self.cached_friends_manager_inner() {
|
||||
Ok(crate::FriendsManager { inner })
|
||||
} else {
|
||||
crate::friends_manager::FriendsManager::native_new(Arc::new(self.clone()))
|
||||
}
|
||||
}
|
||||
pub(crate) fn native_set_friends(&self, value: crate::FriendsManager) {
|
||||
*self
|
||||
.runtime
|
||||
.friends_manager
|
||||
.lock()
|
||||
.unwrap_or_else(std::sync::PoisonError::into_inner) = Some(value.inner);
|
||||
}
|
||||
pub(crate) fn cached_group_manager_inner(
|
||||
&self,
|
||||
) -> Option<Arc<crate::group_manager::GroupManagerInner>> {
|
||||
self.runtime
|
||||
.group_manager
|
||||
.lock()
|
||||
.unwrap_or_else(std::sync::PoisonError::into_inner)
|
||||
.clone()
|
||||
}
|
||||
pub(crate) fn install_group_manager_inner(
|
||||
&self,
|
||||
candidate: Arc<crate::group_manager::GroupManagerInner>,
|
||||
) -> Arc<crate::group_manager::GroupManagerInner> {
|
||||
let mut cached = self
|
||||
.runtime
|
||||
.group_manager
|
||||
.lock()
|
||||
.unwrap_or_else(std::sync::PoisonError::into_inner);
|
||||
if let Some(inner) = cached.as_ref() {
|
||||
return Arc::clone(inner);
|
||||
}
|
||||
*cached = Some(Arc::clone(&candidate));
|
||||
candidate
|
||||
}
|
||||
pub(crate) fn native_groups(&self) -> crate::GroupManager {
|
||||
if let Some(inner) = self.cached_group_manager_inner() {
|
||||
crate::GroupManager { inner }
|
||||
} else {
|
||||
crate::group_manager::GroupManager::native_new(Arc::new(self.clone()))
|
||||
}
|
||||
}
|
||||
pub(crate) fn native_set_groups(&self, value: crate::GroupManager) {
|
||||
*self
|
||||
.runtime
|
||||
.group_manager
|
||||
.lock()
|
||||
.unwrap_or_else(std::sync::PoisonError::into_inner) = Some(value.inner);
|
||||
}
|
||||
|
||||
pub(crate) fn native_set_caps_rate_limiter(
|
||||
&mut self,
|
||||
|
||||
Reference in New Issue
Block a user