mirror of
https://github.com/Xetibo/ReSet.git
synced 2025-07-01 15:57:46 +02:00
fix some audio stuff
This commit is contained in:
parent
2e8c7eda33
commit
dd2856261b
10 changed files with 381 additions and 102 deletions
|
@ -434,3 +434,4 @@ fn stop_dbus_audio_listener(conn: Connection) {
|
|||
);
|
||||
let _: Result<(), Error> = proxy.method_call("org.xetibo.ReSet", "StopAudioListener", ());
|
||||
}
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@ use dbus::message::SignalArgs;
|
|||
use dbus::{Error, Path};
|
||||
use gtk::gio;
|
||||
use gtk::glib::Variant;
|
||||
use gtk::prelude::ActionableExt;
|
||||
use gtk::prelude::{ActionableExt, ListBoxRowExt};
|
||||
use ReSet_Lib::signals::{BluetoothDeviceAdded, BluetoothDeviceRemoved};
|
||||
|
||||
use crate::components::base::listEntry::ListEntry;
|
||||
|
@ -36,6 +36,7 @@ impl BluetoothBox {
|
|||
|
||||
pub fn setupCallbacks(&self) {
|
||||
let selfImp = self.imp();
|
||||
selfImp.resetVisibility.set_activatable(true);
|
||||
selfImp
|
||||
.resetVisibility
|
||||
.set_action_name(Some("navigation.push"));
|
||||
|
|
|
@ -5,6 +5,7 @@ use gtk::{glib, CompositeTemplate, ListBox, Switch};
|
|||
use std::cell::RefCell;
|
||||
use std::collections::HashMap;
|
||||
use std::sync::Arc;
|
||||
use adw::ActionRow;
|
||||
|
||||
use crate::components::base::listEntry::ListEntry;
|
||||
use crate::components::bluetooth::bluetoothBox;
|
||||
|
@ -21,7 +22,7 @@ pub struct BluetoothBox {
|
|||
#[template_child]
|
||||
pub resetBluetoothConnectedDevices: TemplateChild<ListBox>,
|
||||
#[template_child]
|
||||
pub resetVisibility: TemplateChild<ListEntry>,
|
||||
pub resetVisibility: TemplateChild<ActionRow>,
|
||||
#[template_child]
|
||||
pub resetBluetoothMainTab: TemplateChild<ListEntry>,
|
||||
pub availableDevices: RefCell<HashMap<Path<'static>, (Arc<BluetoothEntry>, Arc<ListEntry>)>>,
|
||||
|
|
|
@ -10,7 +10,7 @@ use dbus::message::SignalArgs;
|
|||
use glib::{Cast, clone, Propagation, Variant};
|
||||
use glib::subclass::prelude::ObjectSubclassIsExt;
|
||||
use gtk::{Align, gio, SignalListItemFactory, StringObject};
|
||||
use gtk::prelude::{ActionableExt, GObjectPropertyExpressionExt, WidgetExt, ListItemExt};
|
||||
use gtk::prelude::{ActionableExt, GObjectPropertyExpressionExt, ListItemExt, WidgetExt};
|
||||
use ReSet_Lib::audio::audio::{Card, OutputStream, Source};
|
||||
|
||||
use crate::components::base::cardEntry::CardEntry;
|
||||
|
@ -23,7 +23,7 @@ use crate::components::input::sourceBoxImpl;
|
|||
use crate::components::input::sourceEntry::set_source_volume;
|
||||
|
||||
use super::outputStreamEntry::OutputStreamEntry;
|
||||
use super::sourceEntry::{set_default_source, toggle_source_mute, SourceEntry};
|
||||
use super::sourceEntry::{set_default_source, SourceEntry, toggle_source_mute};
|
||||
|
||||
glib::wrapper! {
|
||||
pub struct SourceBox(ObjectSubclass<sourceBoxImpl::SourceBox>)
|
||||
|
@ -440,25 +440,27 @@ pub fn start_input_box_listener(conn: Connection, source_box: Arc<SourceBox>) ->
|
|||
glib::idle_add_once(move || {
|
||||
let output_box = source_box.clone();
|
||||
let output_box_imp = output_box.imp();
|
||||
let is_default = ir.source.name == default_source.name;
|
||||
let volume = ir.source.volume.first().unwrap_or_else(|| &(0 as u32));
|
||||
let fraction = (*volume as f64 / 655.36).round();
|
||||
let percentage = (fraction).to_string() + "%";
|
||||
let list = output_box_imp.resetSourceList.read().unwrap();
|
||||
let entry = list.get(&ir.source.index);
|
||||
if entry.is_none() {
|
||||
return;
|
||||
}
|
||||
let imp = entry.unwrap().1.imp();
|
||||
let is_default = ir.source.name == default_source.name;
|
||||
imp.resetSourceName
|
||||
.set_text(ir.source.alias.clone().as_str());
|
||||
let volume = ir.source.volume.first().unwrap_or_else(|| &(0 as u32));
|
||||
let fraction = (*volume as f64 / 655.36).round();
|
||||
let percentage = (fraction).to_string() + "%";
|
||||
imp.resetVolumePercentage.set_text(&percentage);
|
||||
imp.resetVolumeSlider.set_value(*volume as f64);
|
||||
if is_default {
|
||||
output_box_imp.resetVolumePercentage.set_text(&percentage);
|
||||
output_box_imp.resetVolumeSlider.set_value(*volume as f64);
|
||||
imp.resetSelectedSource.set_active(true);
|
||||
} else {
|
||||
imp.resetSelectedSource.set_active(false);
|
||||
}
|
||||
imp.resetSourceName.set_text(ir.source.alias.clone().as_str());
|
||||
imp.resetVolumePercentage.set_text(&percentage);
|
||||
imp.resetVolumeSlider.set_value(*volume as f64);
|
||||
|
||||
});
|
||||
});
|
||||
true
|
||||
|
|
|
@ -444,24 +444,27 @@ pub fn start_output_box_listener(conn: Connection, sink_box: Arc<SinkBox>) -> Co
|
|||
glib::idle_add_once(move || {
|
||||
let output_box = sink_box.clone();
|
||||
let output_box_imp = output_box.imp();
|
||||
let is_default = ir.sink.name == default_sink.name;
|
||||
let volume = ir.sink.volume.first().unwrap_or_else(|| &(0 as u32));
|
||||
let fraction = (*volume as f64 / 655.36).round();
|
||||
let percentage = (fraction).to_string() + "%";
|
||||
|
||||
let list = output_box_imp.resetSinkList.read().unwrap();
|
||||
let entry = list.get(&ir.sink.index);
|
||||
if entry.is_none() {
|
||||
return;
|
||||
}
|
||||
let imp = entry.unwrap().1.imp();
|
||||
let is_default = ir.sink.name == default_sink.name;
|
||||
imp.resetSinkName.set_text(ir.sink.alias.clone().as_str());
|
||||
let volume = ir.sink.volume.first().unwrap_or_else(|| &(0 as u32));
|
||||
let fraction = (*volume as f64 / 655.36).round();
|
||||
let percentage = (fraction).to_string() + "%";
|
||||
imp.resetVolumePercentage.set_text(&percentage);
|
||||
imp.resetVolumeSlider.set_value(*volume as f64);
|
||||
if is_default {
|
||||
output_box_imp.resetVolumePercentage.set_text(&percentage);
|
||||
output_box_imp.resetVolumeSlider.set_value(*volume as f64);
|
||||
imp.resetSelectedSink.set_active(true);
|
||||
} else {
|
||||
imp.resetSelectedSink.set_active(false);
|
||||
}
|
||||
imp.resetSinkName.set_text(ir.sink.alias.clone().as_str());
|
||||
imp.resetVolumePercentage.set_text(&percentage);
|
||||
imp.resetVolumeSlider.set_value(*volume as f64);
|
||||
});
|
||||
});
|
||||
true
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
use gtk::prelude::FrameExt;
|
||||
use std::sync::Arc;
|
||||
use std::sync::atomic::Ordering;
|
||||
|
||||
use crate::components::base::settingBox::SettingBox;
|
||||
use crate::components::base::utils::{start_audio_listener, Listeners};
|
||||
|
@ -89,6 +90,7 @@ pub const HANDLE_VOLUME_CLICK: fn(Arc<Listeners>, FlowBox) =
|
|||
listeners.stop_bluetooth_listener();
|
||||
let audioOutput = Arc::new(SinkBox::new());
|
||||
start_audio_listener(listeners.clone(), Some(audioOutput.clone()), None);
|
||||
while !listeners.pulse_listener.load(Ordering::SeqCst) {}
|
||||
populate_sinks(audioOutput.clone());
|
||||
let audioFrame = wrapInFrame(SettingBox::new(&*audioOutput));
|
||||
resetMain.remove_all();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue