Skip to content

Commit f3b0b1c

Browse files
authored
Merge pull request #2115 from luca020400/luca/context
Internal buffers summer cleanup
2 parents 0836340 + d54b472 commit f3b0b1c

4 files changed

Lines changed: 347 additions & 203 deletions

File tree

data/src/buffer.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,18 @@ pub enum Upstream {
2727
Query(Server, target::Query),
2828
}
2929

30+
impl From<Upstream> for Buffer {
31+
fn from(upstream: Upstream) -> Self {
32+
Self::Upstream(upstream)
33+
}
34+
}
35+
36+
impl From<Internal> for Buffer {
37+
fn from(internal: Internal) -> Self {
38+
Self::Internal(internal)
39+
}
40+
}
41+
3042
#[derive(
3143
Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, strum::Display,
3244
)]

src/screen/dashboard.rs

Lines changed: 78 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -646,7 +646,7 @@ impl Dashboard {
646646
}
647647
sidebar::Event::New(buffer) => (
648648
self.open_buffer(
649-
data::Buffer::Upstream(buffer),
649+
buffer,
650650
BufferAction::NewPane,
651651
clients,
652652
config,
@@ -655,7 +655,7 @@ impl Dashboard {
655655
),
656656
sidebar::Event::Popout(buffer) => (
657657
self.open_buffer(
658-
data::Buffer::Upstream(buffer),
658+
buffer,
659659
BufferAction::NewWindow,
660660
clients,
661661
config,
@@ -667,7 +667,7 @@ impl Dashboard {
667667
}
668668
sidebar::Event::Replace(buffer) => (
669669
self.open_buffer(
670-
data::Buffer::Upstream(buffer),
670+
buffer,
671671
BufferAction::ReplacePane,
672672
clients,
673673
config,
@@ -701,10 +701,6 @@ impl Dashboard {
701701
sidebar::Event::Leave(buffer) => {
702702
self.leave_buffer(clients, config, buffer)
703703
}
704-
sidebar::Event::ToggleInternalBuffer(buffer) => (
705-
self.toggle_internal_buffer(clients, config, buffer),
706-
None,
707-
),
708704
sidebar::Event::ToggleCommandBar => (
709705
self.toggle_command_bar(
710706
servers,
@@ -749,9 +745,7 @@ impl Dashboard {
749745
(Task::none(), None)
750746
}
751747
sidebar::Event::MarkAsRead(buffer) => {
752-
if let Some(kind) = history::Kind::from_buffer(
753-
data::Buffer::Upstream(buffer),
754-
) {
748+
if let Some(kind) = history::Kind::from_buffer(buffer) {
755749
mark_as_read(
756750
kind,
757751
&mut self.history,
@@ -1327,20 +1321,23 @@ impl Dashboard {
13271321
return (task, None);
13281322
}
13291323
CycleNextUnreadBuffer => {
1330-
let all_buffers =
1331-
all_buffers_with_has_unread(clients, &self.history);
1332-
let open_upstream_buffers = open_upstream_buffers(self);
1324+
let all_buffers = all_buffers_with_has_unread(
1325+
config,
1326+
clients,
1327+
&self.history,
1328+
);
1329+
let open_buffers = open_buffers(self);
13331330

13341331
if let Some((_, _, state)) = self.get_focused_mut()
13351332
&& let Some(buffer) = cycle_next_unread_buffer(
1336-
state.buffer.upstream(),
1333+
state.buffer.data().as_ref(),
13371334
all_buffers,
1338-
&open_upstream_buffers,
1335+
&open_buffers,
13391336
)
13401337
{
13411338
return (
13421339
self.open_buffer(
1343-
data::Buffer::Upstream(buffer.clone()),
1340+
buffer.clone(),
13441341
BufferAction::ReplacePane,
13451342
clients,
13461343
config,
@@ -1350,20 +1347,23 @@ impl Dashboard {
13501347
}
13511348
}
13521349
CyclePreviousUnreadBuffer => {
1353-
let all_buffers =
1354-
all_buffers_with_has_unread(clients, &self.history);
1355-
let open_upstream_buffers = open_upstream_buffers(self);
1350+
let all_buffers = all_buffers_with_has_unread(
1351+
config,
1352+
clients,
1353+
&self.history,
1354+
);
1355+
let open_buffers = open_buffers(self);
13561356

13571357
if let Some((_, _, state)) = self.get_focused_mut()
13581358
&& let Some(buffer) = cycle_previous_unread_buffer(
1359-
state.buffer.upstream(),
1359+
state.buffer.data().as_ref(),
13601360
all_buffers,
1361-
&open_upstream_buffers,
1361+
&open_buffers,
13621362
)
13631363
{
13641364
return (
13651365
self.open_buffer(
1366-
data::Buffer::Upstream(buffer.clone()),
1366+
buffer.clone(),
13671367
BufferAction::ReplacePane,
13681368
clients,
13691369
config,
@@ -2769,7 +2769,7 @@ impl Dashboard {
27692769
}
27702770
command_bar::Buffer::Replace(buffer) => (
27712771
self.open_buffer(
2772-
data::Buffer::Upstream(buffer),
2772+
buffer,
27732773
BufferAction::ReplacePane,
27742774
clients,
27752775
config,
@@ -2782,9 +2782,6 @@ impl Dashboard {
27822782
command_bar::Buffer::Merge => {
27832783
(self.merge_pane(clients, config), None)
27842784
}
2785-
command_bar::Buffer::ToggleInternal(buffer) => {
2786-
(self.toggle_internal_buffer(clients, config, buffer), None)
2787-
}
27882785
},
27892786
command_bar::Command::Configuration(command) => match command {
27902787
command_bar::Configuration::OpenConfigDirectory => {
@@ -2901,7 +2898,7 @@ impl Dashboard {
29012898
self.close_pane(clients, config, window, pane)
29022899
} else {
29032900
self.open_buffer(
2904-
data::Buffer::Internal(buffer),
2901+
buffer.into(),
29052902
config.actions.buffer.local,
29062903
clients,
29072904
config,
@@ -5174,38 +5171,55 @@ fn all_upstream_buffers(
51745171
}
51755172

51765173
fn all_buffers_with_has_unread(
5174+
config: &Config,
51775175
clients: &client::Map,
51785176
history: &history::Manager,
5179-
) -> Vec<(buffer::Upstream, bool)> {
5180-
clients
5181-
.connected_servers()
5182-
.flat_map(|server| {
5183-
std::iter::once((
5184-
buffer::Upstream::Server(server.clone()),
5185-
history.has_unread(&history::Kind::Server(server.clone())),
5186-
))
5187-
.chain(clients.get_channels(server).map(|channel| {
5188-
(
5189-
buffer::Upstream::Channel(server.clone(), channel.clone()),
5190-
history.has_unread(&history::Kind::Channel(
5191-
server.clone(),
5192-
channel.clone(),
5193-
)),
5194-
)
5195-
}))
5196-
.chain(
5197-
history.get_unique_queries(server).into_iter().map(|nick| {
5198-
(
5199-
buffer::Upstream::Query(server.clone(), nick.clone()),
5200-
history.has_unread(&history::Kind::Query(
5201-
server.clone(),
5202-
nick.clone(),
5203-
)),
5204-
)
5205-
}),
5177+
) -> Vec<(data::Buffer, bool)> {
5178+
let upstream_buffers = clients.connected_servers().flat_map(|server| {
5179+
std::iter::once((
5180+
buffer::Upstream::Server(server.clone()).into(),
5181+
history.has_unread(&history::Kind::Server(server.clone())),
5182+
))
5183+
.chain(clients.get_channels(server).map(|channel| {
5184+
(
5185+
buffer::Upstream::Channel(server.clone(), channel.clone())
5186+
.into(),
5187+
history.has_unread(&history::Kind::Channel(
5188+
server.clone(),
5189+
channel.clone(),
5190+
)),
52065191
)
5207-
})
5208-
.collect()
5192+
}))
5193+
.chain(history.get_unique_queries(server).into_iter().map(|nick| {
5194+
(
5195+
buffer::Upstream::Query(server.clone(), nick.clone()).into(),
5196+
history.has_unread(&history::Kind::Query(
5197+
server.clone(),
5198+
nick.clone(),
5199+
)),
5200+
)
5201+
}))
5202+
});
5203+
5204+
let internal_buffers = config
5205+
.sidebar
5206+
.internal_buffers
5207+
.buffers
5208+
.iter()
5209+
.map(|&kind| data::Buffer::Internal(kind.into()))
5210+
.map(|buffer| {
5211+
if let Some(kind) = history::Kind::from_buffer(buffer.clone()) {
5212+
(buffer, history.has_unread(&kind))
5213+
} else {
5214+
(buffer, false)
5215+
}
5216+
});
5217+
5218+
if config.sidebar.internal_buffers.is_before_servers() {
5219+
internal_buffers.chain(upstream_buffers).collect()
5220+
} else {
5221+
upstream_buffers.chain(internal_buffers).collect()
5222+
}
52095223
}
52105224

52115225
fn open_buffers(dashboard: &Dashboard) -> Vec<data::Buffer> {
@@ -5271,10 +5285,10 @@ fn cycle_previous_buffer(
52715285
}
52725286

52735287
fn cycle_next_unread_buffer(
5274-
current: Option<&buffer::Upstream>,
5275-
mut all: Vec<(buffer::Upstream, bool)>,
5276-
opened: &[buffer::Upstream],
5277-
) -> Option<buffer::Upstream> {
5288+
current: Option<&data::Buffer>,
5289+
mut all: Vec<(data::Buffer, bool)>,
5290+
opened: &[data::Buffer],
5291+
) -> Option<data::Buffer> {
52785292
all.retain(|(buffer, _)| {
52795293
Some(buffer) == current || !opened.contains(buffer)
52805294
});
@@ -5299,10 +5313,10 @@ fn cycle_next_unread_buffer(
52995313
}
53005314

53015315
fn cycle_previous_unread_buffer(
5302-
current: Option<&buffer::Upstream>,
5303-
mut all: Vec<(buffer::Upstream, bool)>,
5304-
opened: &[buffer::Upstream],
5305-
) -> Option<buffer::Upstream> {
5316+
current: Option<&data::Buffer>,
5317+
mut all: Vec<(data::Buffer, bool)>,
5318+
opened: &[data::Buffer],
5319+
) -> Option<data::Buffer> {
53065320
all.retain(|(buffer, _)| {
53075321
Some(buffer) == current || !opened.contains(buffer)
53085322
});

src/screen/dashboard/command_bar.rs

Lines changed: 31 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -169,10 +169,9 @@ pub enum Buffer {
169169
NewHorizontal,
170170
NewVertical,
171171
Close,
172-
Replace(buffer::Upstream),
172+
Replace(data::Buffer),
173173
Popout,
174174
Merge,
175-
ToggleInternal(buffer::Internal),
176175
}
177176

178177
#[derive(Debug, Clone)]
@@ -295,7 +294,7 @@ impl Buffer {
295294
buffer::Internal::ALL
296295
.iter()
297296
.cloned()
298-
.map(Buffer::ToggleInternal),
297+
.map(|buffer| Buffer::Replace(buffer.into())),
299298
);
300299

301300
list.push(Buffer::Close);
@@ -312,7 +311,12 @@ impl Buffer {
312311
list.push(Buffer::Merge);
313312
}
314313

315-
list.extend(buffers.iter().cloned().map(Buffer::Replace));
314+
list.extend(
315+
buffers
316+
.iter()
317+
.cloned()
318+
.map(|buffer| Buffer::Replace(buffer.into())),
319+
);
316320

317321
list
318322
}
@@ -402,26 +406,30 @@ impl std::fmt::Display for Buffer {
402406
Buffer::Close => write!(f, "Close buffer"),
403407
Buffer::Popout => write!(f, "Pop out buffer"),
404408
Buffer::Merge => write!(f, "Merge buffer"),
405-
Buffer::ToggleInternal(internal) => match internal {
406-
buffer::Internal::FileTransfers => {
407-
write!(f, "Open file transfers")
408-
}
409-
buffer::Internal::Logs => write!(f, "Open logs"),
410-
buffer::Internal::Highlights => write!(f, "Open highlights"),
411-
buffer::Internal::ChannelDiscovery(_) => {
412-
write!(f, "Open Channel discovery")
413-
}
414-
},
415409
Buffer::Replace(buffer) => match buffer {
416-
buffer::Upstream::Server(server) => {
417-
write!(f, "Open server {server}")
418-
}
419-
buffer::Upstream::Channel(server, channel) => {
420-
write!(f, "Open {channel} on {server}")
421-
}
422-
buffer::Upstream::Query(server, nick) => {
423-
write!(f, "Open query with {nick} on {server}")
424-
}
410+
data::Buffer::Internal(internal) => match internal {
411+
buffer::Internal::FileTransfers => {
412+
write!(f, "Open file transfers")
413+
}
414+
buffer::Internal::Logs => write!(f, "Open logs"),
415+
buffer::Internal::Highlights => {
416+
write!(f, "Open highlights")
417+
}
418+
buffer::Internal::ChannelDiscovery(_) => {
419+
write!(f, "Open channel discovery")
420+
}
421+
},
422+
data::Buffer::Upstream(upstream) => match upstream {
423+
buffer::Upstream::Server(server) => {
424+
write!(f, "Open server {server}")
425+
}
426+
buffer::Upstream::Channel(server, channel) => {
427+
write!(f, "Open {channel} on {server}")
428+
}
429+
buffer::Upstream::Query(server, nick) => {
430+
write!(f, "Open query with {nick} on {server}")
431+
}
432+
},
425433
},
426434
}
427435
}

0 commit comments

Comments
 (0)