Add channel note indicator and clear changed status

This commit is contained in:
Mikayla 2023-10-01 19:53:32 -07:00
parent 9ba975d6ad
commit e0ff7ba180
No known key found for this signature in database
6 changed files with 119 additions and 11 deletions

View file

@ -43,7 +43,7 @@ pub type ChannelData = (Channel, ChannelPath);
pub struct Channel {
pub id: ChannelId,
pub name: String,
pub has_changed: bool,
pub has_note_changed: bool,
}
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Serialize, Deserialize)]
@ -200,19 +200,27 @@ impl ChannelStore {
) -> Task<Result<ModelHandle<ChannelBuffer>>> {
let client = self.client.clone();
let user_store = self.user_store.clone();
self.open_channel_resource(
let open_channel_buffer = self.open_channel_resource(
channel_id,
|this| &mut this.opened_buffers,
|channel, cx| ChannelBuffer::new(channel, client, user_store, cx),
cx,
)
);
cx.spawn(|this, mut cx| async move {
let buffer = open_channel_buffer.await?;
this.update(&mut cx, |this, cx| {
this.channel_index.clear_note_changed(channel_id);
cx.notify();
});
Ok(buffer)
})
}
pub fn has_channel_buffer_changed(&self, channel_id: ChannelId) -> Option<bool> {
self.channel_index
.by_id()
.get(&channel_id)
.map(|channel| channel.has_changed)
.map(|channel| channel.has_note_changed)
}
pub fn open_channel_chat(
@ -787,7 +795,7 @@ impl ChannelStore {
Arc::new(Channel {
id: channel.id,
name: channel.name,
has_changed: false,
has_note_changed: false,
}),
),
}
@ -825,7 +833,7 @@ impl ChannelStore {
}
for id_changed in payload.notes_changed {
index.has_changed(id_changed);
index.note_changed(id_changed);
}
for edge in payload.insert_edge {

View file

@ -38,6 +38,12 @@ impl ChannelIndex {
channels_by_id: &mut self.channels_by_id,
}
}
pub fn clear_note_changed(&mut self, channel_id: ChannelId) {
if let Some(channel) = self.channels_by_id.get_mut(&channel_id) {
Arc::make_mut(channel).has_note_changed = false;
}
}
}
impl Deref for ChannelIndex {
@ -76,9 +82,9 @@ impl<'a> ChannelPathsInsertGuard<'a> {
}
}
pub fn has_changed(&mut self, channel_id: ChannelId) {
pub fn note_changed(&mut self, channel_id: ChannelId) {
if let Some(channel) = self.channels_by_id.get_mut(&channel_id) {
Arc::make_mut(channel).has_changed = true;
Arc::make_mut(channel).has_note_changed = true;
}
}
@ -91,7 +97,7 @@ impl<'a> ChannelPathsInsertGuard<'a> {
Arc::new(Channel {
id: channel_proto.id,
name: channel_proto.name,
has_changed: false,
has_note_changed: false,
}),
);
self.insert_root(channel_proto.id);