@@ -270,7 +270,7 @@ pub struct TimelineSub {
|
|||||||
state: SubState,
|
state: SubState,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug, Clone)]
|
||||||
enum SubState {
|
enum SubState {
|
||||||
NoSub {
|
NoSub {
|
||||||
dependers: usize,
|
dependers: usize,
|
||||||
@@ -300,6 +300,7 @@ impl Default for TimelineSub {
|
|||||||
|
|
||||||
impl TimelineSub {
|
impl TimelineSub {
|
||||||
pub fn try_add_local(&mut self, ndb: &Ndb, filter: &[Filter]) {
|
pub fn try_add_local(&mut self, ndb: &Ndb, filter: &[Filter]) {
|
||||||
|
let before = self.state.clone();
|
||||||
match &mut self.state {
|
match &mut self.state {
|
||||||
SubState::NoSub { dependers } => {
|
SubState::NoSub { dependers } => {
|
||||||
let Some(sub) = ndb_sub(ndb, filter, "") else {
|
let Some(sub) = ndb_sub(ndb, filter, "") else {
|
||||||
@@ -333,9 +334,15 @@ impl TimelineSub {
|
|||||||
dependers: _,
|
dependers: _,
|
||||||
} => {}
|
} => {}
|
||||||
}
|
}
|
||||||
|
tracing::info!(
|
||||||
|
"TimelineSub::try_add_local: {:?} => {:?}",
|
||||||
|
before,
|
||||||
|
self.state
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn force_add_remote(&mut self, subid: String) {
|
pub fn force_add_remote(&mut self, subid: String) {
|
||||||
|
let before = self.state.clone();
|
||||||
match &mut self.state {
|
match &mut self.state {
|
||||||
SubState::NoSub { dependers } => {
|
SubState::NoSub { dependers } => {
|
||||||
self.state = SubState::RemoteOnly {
|
self.state = SubState::RemoteOnly {
|
||||||
@@ -361,9 +368,15 @@ impl TimelineSub {
|
|||||||
dependers: _,
|
dependers: _,
|
||||||
} => {}
|
} => {}
|
||||||
}
|
}
|
||||||
|
tracing::info!(
|
||||||
|
"TimelineSub::force_add_remote: {:?} => {:?}",
|
||||||
|
before,
|
||||||
|
self.state
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn try_add_remote(&mut self, pool: &mut RelayPool, filter: &Vec<Filter>) {
|
pub fn try_add_remote(&mut self, pool: &mut RelayPool, filter: &Vec<Filter>) {
|
||||||
|
let before = self.state.clone();
|
||||||
match &mut self.state {
|
match &mut self.state {
|
||||||
SubState::NoSub { dependers } => {
|
SubState::NoSub { dependers } => {
|
||||||
let subid = subscriptions::new_sub_id();
|
let subid = subscriptions::new_sub_id();
|
||||||
@@ -395,9 +408,15 @@ impl TimelineSub {
|
|||||||
dependers: _,
|
dependers: _,
|
||||||
} => {}
|
} => {}
|
||||||
}
|
}
|
||||||
|
tracing::info!(
|
||||||
|
"TimelineSub::try_add_remote: {:?} => {:?}",
|
||||||
|
before,
|
||||||
|
self.state
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn increment(&mut self) {
|
pub fn increment(&mut self) {
|
||||||
|
let before = self.state.clone();
|
||||||
match &mut self.state {
|
match &mut self.state {
|
||||||
SubState::NoSub { dependers } => {
|
SubState::NoSub { dependers } => {
|
||||||
*dependers += 1;
|
*dependers += 1;
|
||||||
@@ -421,6 +440,8 @@ impl TimelineSub {
|
|||||||
*dependers += 1;
|
*dependers += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tracing::info!("TimelineSub::increment: {:?} => {:?}", before, self.state);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_local(&self) -> Option<Subscription> {
|
pub fn get_local(&self) -> Option<Subscription> {
|
||||||
@@ -442,54 +463,60 @@ impl TimelineSub {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn unsubscribe_or_decrement(&mut self, ndb: &mut Ndb, pool: &mut RelayPool) {
|
pub fn unsubscribe_or_decrement(&mut self, ndb: &mut Ndb, pool: &mut RelayPool) {
|
||||||
match &mut self.state {
|
let before = self.state.clone();
|
||||||
SubState::NoSub { dependers } => {
|
's: {
|
||||||
*dependers -= 1;
|
match &mut self.state {
|
||||||
}
|
SubState::NoSub { dependers } => {
|
||||||
SubState::LocalOnly { local, dependers } => {
|
|
||||||
if *dependers > 1 {
|
|
||||||
*dependers -= 1;
|
*dependers -= 1;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
SubState::LocalOnly { local, dependers } => {
|
||||||
if let Err(e) = ndb.unsubscribe(*local) {
|
if *dependers > 1 {
|
||||||
tracing::error!("Could not unsub ndb: {e}");
|
*dependers -= 1;
|
||||||
return;
|
break 's;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.state = SubState::NoSub { dependers: 0 };
|
if let Err(e) = ndb.unsubscribe(*local) {
|
||||||
}
|
tracing::error!("Could not unsub ndb: {e}");
|
||||||
SubState::RemoteOnly { remote, dependers } => {
|
break 's;
|
||||||
if *dependers > 1 {
|
}
|
||||||
*dependers -= 1;
|
|
||||||
return;
|
self.state = SubState::NoSub { dependers: 0 };
|
||||||
}
|
}
|
||||||
|
SubState::RemoteOnly { remote, dependers } => {
|
||||||
pool.unsubscribe(remote.to_owned());
|
if *dependers > 1 {
|
||||||
|
*dependers -= 1;
|
||||||
self.state = SubState::NoSub { dependers: 0 };
|
break 's;
|
||||||
}
|
}
|
||||||
SubState::Unified { unified, dependers } => {
|
|
||||||
if *dependers > 1 {
|
pool.unsubscribe(remote.to_owned());
|
||||||
*dependers -= 1;
|
|
||||||
return;
|
self.state = SubState::NoSub { dependers: 0 };
|
||||||
}
|
}
|
||||||
|
SubState::Unified { unified, dependers } => {
|
||||||
pool.unsubscribe(unified.remote.to_owned());
|
if *dependers > 1 {
|
||||||
|
*dependers -= 1;
|
||||||
if let Err(e) = ndb.unsubscribe(unified.local) {
|
break 's;
|
||||||
tracing::error!("could not unsub ndb: {e}");
|
}
|
||||||
self.state = SubState::LocalOnly {
|
|
||||||
local: unified.local,
|
pool.unsubscribe(unified.remote.to_owned());
|
||||||
dependers: *dependers,
|
|
||||||
|
if let Err(e) = ndb.unsubscribe(unified.local) {
|
||||||
|
tracing::error!("could not unsub ndb: {e}");
|
||||||
|
self.state = SubState::LocalOnly {
|
||||||
|
local: unified.local,
|
||||||
|
dependers: *dependers,
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
self.state = SubState::NoSub { dependers: 0 };
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
self.state = SubState::NoSub {
|
|
||||||
dependers: *dependers,
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
tracing::info!(
|
||||||
|
"TimelineSub::unsubscribe_or_decrement: {:?} => {:?}",
|
||||||
|
before,
|
||||||
|
self.state
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_filter(&self) -> Option<&Vec<Filter>> {
|
pub fn get_filter(&self) -> Option<&Vec<Filter>> {
|
||||||
|
|||||||
Reference in New Issue
Block a user