Skip to content

Commit e66d5c8

Browse files
refactor: move out reaction list to own file
1 parent 330c075 commit e66d5c8

File tree

3 files changed

+72
-68
lines changed

3 files changed

+72
-68
lines changed

src/discord/src/message/mod.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::message::reaction::DiscordReactionList;
1+
use crate::message::reaction_list::DiscordReactionList;
22
use crate::snowflake::Snowflake;
33
use author::{DiscordMessageAuthor, DisplayName};
44
use chrono::{DateTime, Utc};
@@ -12,6 +12,7 @@ use serenity::all::Nonce;
1212
pub mod author;
1313
pub mod content;
1414
pub mod reaction;
15+
pub mod reaction_list;
1516

1617
#[derive(Clone, Debug)]
1718
pub struct DiscordMessage {

src/discord/src/message/reaction.rs

Lines changed: 1 addition & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use gpui::Rgba;
2-
use scope_chat::reaction::{MessageReaction, MessageReactionType, ReactionEmoji, ReactionList, ReactionOperation};
2+
use scope_chat::reaction::{MessageReaction, MessageReactionType, ReactionEmoji};
33
use serenity::all::ReactionType;
44
use MessageReactionType::Burst;
55
use scope_chat::reaction::MessageReactionType::Normal;
@@ -138,72 +138,6 @@ impl MessageReaction for DiscordMessageReaction {
138138
}
139139
}
140140

141-
#[derive(Clone, Debug, Default)]
142-
pub struct DiscordReactionList {
143-
reactions: Vec<DiscordMessageReaction>,
144-
}
145-
146-
impl DiscordReactionList {
147-
pub fn new(reactions: Vec<DiscordMessageReaction>) -> Self {
148-
DiscordReactionList { reactions }
149-
}
150-
}
151-
152-
impl ReactionList for DiscordReactionList {
153-
fn get_reactions(&self) -> &Vec<impl MessageReaction> {
154-
&self.reactions
155-
}
156-
157-
fn get_reaction(&self, emoji: &ReactionEmoji) -> Option<&impl MessageReaction> {
158-
self.reactions.iter().find(|reaction| reaction.get_emoji() == *emoji)
159-
}
160-
161-
fn increment(&mut self, emoji: &ReactionEmoji, kind: MessageReactionType, user_is_self: bool, by: isize) {
162-
if let Some(reaction) = self.reactions.iter_mut().find(|reaction| reaction.get_emoji() == *emoji) {
163-
reaction.increment(kind, user_is_self, by);
164-
if reaction.get_count(None) == 0 {
165-
self.reactions.retain(|reaction| reaction.get_emoji() != *emoji);
166-
}
167-
} else if by > 0 {
168-
let mut reaction = DiscordMessageReaction {
169-
data: ReactionData::Local {
170-
count_normal: 0,
171-
count_burst: 0,
172-
me: None,
173-
emoji: emoji.clone(),
174-
burst_colours: vec![],
175-
},
176-
};
177-
178-
reaction.increment(kind, user_is_self, by);
179-
self.reactions.push(reaction);
180-
}
181-
}
182-
183-
fn apply(&mut self, operation: ReactionOperation) {
184-
match operation {
185-
ReactionOperation::Add(emoji, ty) => {
186-
self.increment(&emoji, ty, false, 1);
187-
}
188-
ReactionOperation::AddSelf(emoji, ty) => {
189-
self.increment(&emoji, ty, true, 1);
190-
}
191-
ReactionOperation::Remove(emoji) => {
192-
self.increment(&emoji, Normal, false, -1);
193-
}
194-
ReactionOperation::RemoveSelf(emoji) => {
195-
self.increment(&emoji, Normal, true, -1);
196-
}
197-
ReactionOperation::RemoveAll => {
198-
self.reactions.clear();
199-
}
200-
ReactionOperation::RemoveEmoji(emoji) => {
201-
self.reactions.retain(|reaction| reaction.get_emoji() != emoji);
202-
}
203-
}
204-
}
205-
}
206-
207141
pub fn discord_reaction_to_emoji(reaction: &serenity::all::ReactionType) -> ReactionEmoji {
208142
match reaction {
209143
ReactionType::Custom { animated, id, name } => ReactionEmoji::Custom {
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
use crate::message::reaction::{DiscordMessageReaction, ReactionData};
2+
use scope_chat::reaction::MessageReactionType::Normal;
3+
use scope_chat::reaction::{MessageReaction, MessageReactionType, ReactionEmoji, ReactionList, ReactionOperation};
4+
5+
#[derive(Clone, Debug, Default)]
6+
pub struct DiscordReactionList {
7+
reactions: Vec<DiscordMessageReaction>,
8+
}
9+
10+
impl DiscordReactionList {
11+
pub fn new(reactions: Vec<DiscordMessageReaction>) -> Self {
12+
DiscordReactionList { reactions }
13+
}
14+
}
15+
16+
impl ReactionList for DiscordReactionList {
17+
fn get_reactions(&self) -> &Vec<impl MessageReaction> {
18+
&self.reactions
19+
}
20+
21+
fn get_reaction(&self, emoji: &ReactionEmoji) -> Option<&impl MessageReaction> {
22+
self.reactions.iter().find(|reaction| reaction.get_emoji() == *emoji)
23+
}
24+
25+
fn increment(&mut self, emoji: &ReactionEmoji, kind: MessageReactionType, user_is_self: bool, by: isize) {
26+
if let Some(reaction) = self.reactions.iter_mut().find(|reaction| reaction.get_emoji() == *emoji) {
27+
reaction.increment(kind, user_is_self, by);
28+
if reaction.get_count(None) == 0 {
29+
self.reactions.retain(|reaction| reaction.get_emoji() != *emoji);
30+
}
31+
} else if by > 0 {
32+
let mut reaction = DiscordMessageReaction {
33+
data: ReactionData::Local {
34+
count_normal: 0,
35+
count_burst: 0,
36+
me: None,
37+
emoji: emoji.clone(),
38+
burst_colours: vec![],
39+
},
40+
};
41+
42+
reaction.increment(kind, user_is_self, by);
43+
self.reactions.push(reaction);
44+
}
45+
}
46+
47+
fn apply(&mut self, operation: ReactionOperation) {
48+
match operation {
49+
ReactionOperation::Add(emoji, ty) => {
50+
self.increment(&emoji, ty, false, 1);
51+
}
52+
ReactionOperation::AddSelf(emoji, ty) => {
53+
self.increment(&emoji, ty, true, 1);
54+
}
55+
ReactionOperation::Remove(emoji) => {
56+
self.increment(&emoji, Normal, false, -1);
57+
}
58+
ReactionOperation::RemoveSelf(emoji) => {
59+
self.increment(&emoji, Normal, true, -1);
60+
}
61+
ReactionOperation::RemoveAll => {
62+
self.reactions.clear();
63+
}
64+
ReactionOperation::RemoveEmoji(emoji) => {
65+
self.reactions.retain(|reaction| reaction.get_emoji() != emoji);
66+
}
67+
}
68+
}
69+
}

0 commit comments

Comments
 (0)