From 962cc8ad57a7bc3620fdb38bef65b810d482f823 Mon Sep 17 00:00:00 2001 From: Casper Rogild Storm Date: Wed, 4 Oct 2023 22:01:25 +0200 Subject: [PATCH] ability to adjust server message styles --- config.yaml | 10 +++++++++ data/src/config.rs | 2 +- data/src/config/buffer.rs | 44 ++++++++++++++++++++++++++++++++----- data/src/history/manager.rs | 23 +++++++++++-------- src/buffer/scroll_view.rs | 12 +++++----- 5 files changed, 68 insertions(+), 23 deletions(-) diff --git a/config.yaml b/config.yaml index 8f463aba..ea6e6850 100644 --- a/config.yaml +++ b/config.yaml @@ -86,6 +86,16 @@ buffer: # - Supported values: ["join", "part", "quit"] hidden_server_messages: [] + # - Supported values: ["join", "part", "quit"] + server_messages: + join: + exclude: true + user_format: Short + part: + enabled: false + quit: + enabled: false + # Channel buffer settings channel: # User list settings diff --git a/data/src/config.rs b/data/src/config.rs index 1286e18e..831ece94 100644 --- a/data/src/config.rs +++ b/data/src/config.rs @@ -15,7 +15,7 @@ use crate::server::Map as ServerMap; use crate::theme::Palette; use crate::{environment, Theme}; -mod buffer; +pub mod buffer; pub mod channel; pub mod dashboard; mod keys; diff --git a/data/src/config/buffer.rs b/data/src/config/buffer.rs index 7652f2dd..69054734 100644 --- a/data/src/config/buffer.rs +++ b/data/src/config/buffer.rs @@ -1,11 +1,11 @@ -use std::collections::HashSet; - use chrono::{DateTime, Local, Utc}; use serde::Deserialize; use super::Channel; -use crate::buffer::{Color, InputVisibility, Nickname, Timestamp}; -use crate::message; +use crate::{ + buffer::{Color, InputVisibility, Nickname, Timestamp}, + message::source, +}; #[derive(Debug, Clone, Deserialize)] pub struct Buffer { @@ -18,7 +18,39 @@ pub struct Buffer { #[serde(default)] pub channel: Channel, #[serde(default)] - pub hidden_server_messages: HashSet, + pub server_messages: ServerMessages, +} + +#[derive(Debug, Clone, Default, Deserialize)] +pub struct ServerMessages { + pub join: ServerMessage, + pub part: ServerMessage, + pub quit: ServerMessage, +} + +impl ServerMessages { + pub fn get(&self, server: &source::Server) -> ServerMessage { + match server { + source::Server::Join => self.join, + source::Server::Part => self.part, + source::Server::Quit => self.quit, + } + } +} + +#[derive(Debug, Copy, Clone, Default, Deserialize)] +pub struct ServerMessage { + #[serde(default)] + pub exclude: bool, + #[serde(default)] + pub user_format: UserFormat, +} + +#[derive(Debug, Copy, Clone, Default, Deserialize)] +pub enum UserFormat { + Short, + #[default] + Full, } impl Default for Buffer { @@ -34,7 +66,7 @@ impl Default for Buffer { }, input_visibility: InputVisibility::default(), channel: Channel::default(), - hidden_server_messages: HashSet::default(), + server_messages: Default::default(), } } } diff --git a/data/src/history/manager.rs b/data/src/history/manager.rs index f1ae19e3..e78dbae7 100644 --- a/data/src/history/manager.rs +++ b/data/src/history/manager.rs @@ -5,6 +5,7 @@ use futures::{future, Future, FutureExt}; use itertools::Itertools; use tokio::time::Instant; +use crate::config::buffer::ServerMessages; use crate::history::{self, History}; use crate::message::{self, Limit}; use crate::time::Posix; @@ -187,13 +188,13 @@ impl Manager { server: &Server, channel: &str, limit: Option, - exclude: &HashSet, + server_messages: &ServerMessages, ) -> Option> { self.data.history_view( server, &history::Kind::Channel(channel.to_string()), limit, - exclude, + server_messages, ) } @@ -201,10 +202,10 @@ impl Manager { &self, server: &Server, limit: Option, - exclude: &HashSet, + server_messages: &ServerMessages, ) -> Option> { self.data - .history_view(server, &history::Kind::Server, limit, exclude) + .history_view(server, &history::Kind::Server, limit, server_messages) } pub fn get_query_messages( @@ -212,10 +213,14 @@ impl Manager { server: &Server, nick: &Nick, limit: Option, - exclude: &HashSet, + server_messages: &ServerMessages, ) -> Option> { - self.data - .history_view(server, &history::Kind::Query(nick.clone()), limit, exclude) + self.data.history_view( + server, + &history::Kind::Query(nick.clone()), + limit, + server_messages, + ) } pub fn get_unique_queries(&self, server: &Server) -> Vec<&Nick> { @@ -421,7 +426,7 @@ impl Data { server: &server::Server, kind: &history::Kind, limit: Option, - exclude: &HashSet, + server_messages: &ServerMessages, ) -> Option { let History::Full { messages, @@ -436,7 +441,7 @@ impl Data { .iter() .filter(|message| { if let message::Source::Server(Some(source)) = message.target.source() { - !exclude.contains(source) + !server_messages.get(source).exclude } else { true } diff --git a/src/buffer/scroll_view.rs b/src/buffer/scroll_view.rs index 1a96d6a5..f4d14956 100644 --- a/src/buffer/scroll_view.rs +++ b/src/buffer/scroll_view.rs @@ -45,22 +45,20 @@ pub fn view<'a>( old_messages, new_messages, }) = (match kind { - Kind::Server(server) => history.get_server_messages( - server, - Some(state.limit), - &config.buffer.hidden_server_messages, - ), + Kind::Server(server) => { + history.get_server_messages(server, Some(state.limit), &config.buffer.server_messages) + } Kind::Channel(server, channel) => history.get_channel_messages( server, channel, Some(state.limit), - &config.buffer.hidden_server_messages, + &config.buffer.server_messages, ), Kind::Query(server, user) => history.get_query_messages( server, user, Some(state.limit), - &config.buffer.hidden_server_messages, + &config.buffer.server_messages, ), }) else {