Skip to content

Commit ece9fbd

Browse files
committed
Rename enum to make it more clear and fix wrong match arms.
1 parent 196ef94 commit ece9fbd

File tree

5 files changed

+38
-32
lines changed

5 files changed

+38
-32
lines changed

src/backend/pwdeviceobject.rs

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,11 @@ use wp::{
1515

1616
use crate::macros::*;
1717
use once_cell::sync::{Lazy, OnceCell};
18+
use super::{PwRouteFilterModel, PwRouteObject, RouteDirection};
1819
use std::cell::{Cell, RefCell};
1920

20-
use super::PwRouteObject;
21-
use crate::backend::RouteDirection;
22-
use crate::backend::PwRouteFilterModel;
23-
2421
pub mod imp {
22+
2523
use super::*;
2624

2725
#[derive(Properties)]
@@ -110,8 +108,8 @@ pub mod imp {
110108
fn constructed(&self) {
111109
self.parent_constructed();
112110

113-
self.routemodel_input.set_model(Some(self.routemodel.clone()));
114-
self.routemodel_output.set_model(Some(self.routemodel.clone()));
111+
self.routemodel_input.set_model(Some(self.routemodel.as_ref()));
112+
self.routemodel_output.set_model(Some(self.routemodel.as_ref()));
115113

116114
let obj = self.obj();
117115

@@ -344,9 +342,14 @@ impl PwDeviceObject {
344342
RouteDirection::Output => self.set_route_index_output(modelindex),
345343
_ => unreachable!()
346344
}
347-
break;
348-
} else {
349-
pwvucontrol_critical!("Unable to get model index from route index in update_current_route_index_for_direction_sync");
345+
// match direction {
346+
// RouteDirection::Input => self.imp().route_index_input.set(modelindex),
347+
// RouteDirection::Output => self.imp().route_index_output.set(modelindex),
348+
// _ => unreachable!()
349+
// }
350+
// self.emit_by_name::<()>("post-update-route", &[]);
351+
// } else {
352+
pwvucontrol_critical!("{direction:?} Unable to get model index from route index in update_current_route_index_for_direction_sync");
350353
};
351354
}
352355
}
@@ -355,12 +358,19 @@ impl PwDeviceObject {
355358
fn get_model_index_from_route_index(&self, direction: RouteDirection, routeindex: i32) -> Option<u32> {
356359
let routemodel = self.get_route_model_for_direction(direction);
357360

358-
for a in routemodel.iter::<PwRouteObject>().enumerate() {
359-
if let Ok(b) = a.1 {
361+
pwvucontrol_info!("{direction:?} routemodel.n_items = {}, routeindex = {routeindex}", routemodel.n_items());
362+
for (i, x) in routemodel.iter::<PwRouteObject>().map_while(Result::ok).enumerate() {
363+
pwvucontrol_info!("{direction:?} #{i} item.index = {}, item.description = {}", x.index(), x.description());
364+
}
365+
366+
for (i, o) in routemodel.iter::<PwRouteObject>().enumerate() {
367+
if let Ok(obj) = o {
360368
//let b: PwRouteObject = b.downcast().expect("PwRouteObject");
361-
if b.index() == routeindex as u32 {
362-
return Some(a.0 as u32);
369+
if obj.index() as u32 == routeindex as u32 {
370+
return Some(i as u32);
363371
}
372+
} else {
373+
pwvucontrol_critical!("model mutated while iterating, returning None");
364374
}
365375
}
366376
None

src/backend/pwnodeobject.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ mod mixerapi;
2121
pub enum NodeType {
2222
#[default]
2323
Undefined,
24-
Input,
25-
Output,
24+
StreamInput,
25+
StreamOutput,
2626
Sink,
2727
Source,
2828
}
@@ -215,8 +215,8 @@ glib::wrapper! {
215215

216216
pub(crate) fn get_node_type_for_node(node: &wp::pw::Node) -> NodeType {
217217
match node.get_pw_property("media.class").as_deref() {
218-
Some("Stream/Output/Audio") => NodeType::Output,
219-
Some("Stream/Input/Audio") => NodeType::Input,
218+
Some("Stream/Output/Audio") => NodeType::StreamOutput,
219+
Some("Stream/Input/Audio") => NodeType::StreamInput,
220220
Some("Audio/Source") => NodeType::Source,
221221
Some("Audio/Sink") => NodeType::Sink,
222222
_ => NodeType::Undefined,
@@ -281,7 +281,7 @@ impl PwNodeObject {
281281

282282
fn update_icon_name(&self) {
283283
match self.nodetype() {
284-
NodeType::Input | NodeType::Output => {
284+
NodeType::StreamInput | NodeType::StreamOutput => {
285285
self.set_iconname("library-music-symbolic");
286286
let icon_props = ["media.icon-name", "window.icon-name", "application.icon-name"];
287287
for prop in icon_props {

src/backend/pwroutefiltermodel.rs

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,12 @@
11
// SPDX-License-Identifier: GPL-3.0-or-later
22

3-
use glib::{Properties, closure_local};
4-
use glib::subclass::prelude::*;
3+
use glib::{closure_local, subclass::prelude::*, Properties};
54
use gtk::{gio, prelude::*, subclass::prelude::*};
65
use std::cell::{Cell, RefCell};
76
use im_rc::Vector;
8-
use super::{PwRouteObject, RouteDirection};
7+
use super::{ParamAvailability, PwRouteObject, RouteDirection};
98

109
mod imp {
11-
12-
use crate::backend::ParamAvailability;
13-
1410
use super::*;
1511

1612
#[derive(Debug, Properties, Default)]
@@ -23,7 +19,7 @@ mod imp {
2319
pub(super) direction: Cell<RouteDirection>,
2420

2521
/// The model we are filtering.
26-
#[property(get, set = Self::set_model, nullable )]
22+
#[property(get, set = Self::set_model, nullable)]
2723
pub(super) model: RefCell<Option<gio::ListModel>>,
2824
}
2925

@@ -54,7 +50,7 @@ mod imp {
5450
}
5551

5652
impl PwRouteFilterModel {
57-
pub fn set_model(&self, new_model: Option<gio::ListModel>) {
53+
pub fn set_model(&self, new_model: Option<&gio::ListModel>) {
5854
let removed = self.filtered_model.borrow().len() as u32;
5955

6056
if let Some(new_model) = new_model {
@@ -63,7 +59,6 @@ mod imp {
6359

6460
let widget = self.obj();
6561
let handler = closure_local!(@watch widget => move |listmodel: &gio::ListModel, _position: u32, _removed: u32, _added: u32| {
66-
6762
let u: Vector<PwRouteObject> = listmodel.iter::<PwRouteObject>()
6863
.map_while(Result::ok)
6964
.filter(|routeobject| {
@@ -78,13 +73,14 @@ mod imp {
7873
filtered_model.append(u);
7974
filtered_model.len() as u32
8075
};
81-
widget.items_changed(0, removed, added)
76+
widget.items_changed(0, removed, added);
8277
});
8378
handler.invoke::<()>(&[&new_model, &0u32, &0u32, &0u32]);
8479
new_model.connect_closure("items-changed", true, handler);
8580

8681
self.model.replace(Some(new_model.clone().upcast()));
8782
} else {
83+
self.filtered_model.borrow_mut().clear();
8884
self.obj().items_changed(0, removed, 0);
8985
}
9086
}

src/ui/route_dropdown.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ mod imp {
5656

5757
let deviceobject = nodeobject.get_device().expect("device");
5858
match nodeobject.nodetype() {
59-
NodeType::Input => Some(deviceobject.route_index_input()),
60-
NodeType::Output => Some(deviceobject.route_index_output()),
59+
NodeType::Source => Some(deviceobject.route_index_input()),
60+
NodeType::Sink => Some(deviceobject.route_index_output()),
6161
_ => None
6262
}
6363
}

src/ui/window.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ mod imp {
110110

111111
let filter = gtk::CustomFilter::new(|x| {
112112
if let Some(o) = x.downcast_ref::<PwNodeObject>() {
113-
return o.nodetype() == NodeType::Output;
113+
return o.nodetype() == NodeType::StreamOutput;
114114
}
115115
false
116116
});
@@ -129,7 +129,7 @@ mod imp {
129129

130130
let filter = gtk::CustomFilter::new(|x| {
131131
if let Some(o) = x.downcast_ref::<PwNodeObject>() {
132-
return o.nodetype() == NodeType::Input;
132+
return o.nodetype() == NodeType::StreamInput;
133133
}
134134
false
135135
});

0 commit comments

Comments
 (0)