diff --git a/flatpak/cargo-sources.json b/flatpak/cargo-sources.json index 9ff0d58..2764156 100644 --- a/flatpak/cargo-sources.json +++ b/flatpak/cargo-sources.json @@ -1042,14 +1042,14 @@ { "type": "archive", "archive-type": "tar-gzip", - "url": "https://static.crates.io/crates/reset_daemon/reset_daemon-0.1.7.crate", - "sha256": "f7b48ba0698bdb4ead119140a557346907b40ae17cac324687a032b4d6ea9851", - "dest": "cargo/vendor/reset_daemon-0.1.7" + "url": "https://static.crates.io/crates/reset_daemon/reset_daemon-0.1.8.crate", + "sha256": "a861e230340e001757325a01fa33cfce9e29111f0228dd2abd1d62206f742803", + "dest": "cargo/vendor/reset_daemon-0.1.8" }, { "type": "inline", - "contents": "{\"package\": \"f7b48ba0698bdb4ead119140a557346907b40ae17cac324687a032b4d6ea9851\", \"files\": {}}", - "dest": "cargo/vendor/reset_daemon-0.1.7", + "contents": "{\"package\": \"a861e230340e001757325a01fa33cfce9e29111f0228dd2abd1d62206f742803\", \"files\": {}}", + "dest": "cargo/vendor/reset_daemon-0.1.8", "dest-filename": ".cargo-checksum.json" }, { diff --git a/src/components/input/outputStreamEntry.rs b/src/components/input/outputStreamEntry.rs index ac9025e..81846a2 100644 --- a/src/components/input/outputStreamEntry.rs +++ b/src/components/input/outputStreamEntry.rs @@ -1,5 +1,5 @@ use std::sync::Arc; -use std::time::Duration; +use std::time::{Duration, SystemTime}; use adw::glib; use adw::glib::Object; @@ -50,6 +50,15 @@ impl OutputStreamEntry { let stream = stream.unwrap(); let index = stream.index; let channels = stream.channels; + { + let mut time = imp.volumeTimeStamp.borrow_mut(); + if time.is_some() + && time.unwrap().elapsed().unwrap() < Duration::from_millis(50) + { + return Propagation::Proceed; + } + *time = Some(SystemTime::now()); + } set_outputstream_volume(value, index, channels); Propagation::Proceed }), @@ -127,39 +136,39 @@ impl OutputStreamEntry { fn set_outputstream_volume(value: f64, index: u32, channels: u16) -> bool { gio::spawn_blocking(move || { - let conn = Connection::new_session().unwrap(); - let proxy = conn.with_proxy( - "org.xetibo.ReSet", - "/org/xetibo/ReSet", - Duration::from_millis(1000), - ); - let _: Result<(), Error> = proxy.method_call( - "org.xetibo.ReSet", - "SetOutputStreamVolume", - (index, channels, value as u32), - ); - // if res.is_err() { - // return false; - // } - // res.unwrap().0 + let conn = Connection::new_session().unwrap(); + let proxy = conn.with_proxy( + "org.xetibo.ReSet", + "/org/xetibo/ReSet", + Duration::from_millis(1000), + ); + let _: Result<(), Error> = proxy.method_call( + "org.xetibo.ReSet", + "SetOutputStreamVolume", + (index, channels, value as u32), + ); + // if res.is_err() { + // return false; + // } + // res.unwrap().0 }); true } fn toggle_output_stream_mute(index: u32, muted: bool) -> bool { gio::spawn_blocking(move || { - let conn = Connection::new_session().unwrap(); - let proxy = conn.with_proxy( - "org.xetibo.ReSet", - "/org/xetibo/ReSet", - Duration::from_millis(1000), - ); - let _: Result<(), Error> = - proxy.method_call("org.xetibo.ReSet", "SetOutputStreamMute", (index, muted)); - // if res.is_err() { - // return false; - // } - // res.unwrap().0 + let conn = Connection::new_session().unwrap(); + let proxy = conn.with_proxy( + "org.xetibo.ReSet", + "/org/xetibo/ReSet", + Duration::from_millis(1000), + ); + let _: Result<(), Error> = + proxy.method_call("org.xetibo.ReSet", "SetOutputStreamMute", (index, muted)); + // if res.is_err() { + // return false; + // } + // res.unwrap().0 }); true } diff --git a/src/components/input/outputStreamEntryImpl.rs b/src/components/input/outputStreamEntryImpl.rs index 59122e8..3a3bed1 100644 --- a/src/components/input/outputStreamEntryImpl.rs +++ b/src/components/input/outputStreamEntryImpl.rs @@ -1,5 +1,6 @@ use std::cell::RefCell; use std::sync::Arc; +use std::time::SystemTime; use crate::components::input::outputStreamEntry; use gtk::subclass::prelude::*; @@ -24,6 +25,7 @@ pub struct OutputStreamEntry { pub resetVolumeMeter: TemplateChild, pub stream: Arc>, pub associatedSource: Arc>, + pub volumeTimeStamp: RefCell>, } #[glib::object_subclass] diff --git a/src/components/input/sourceBox.rs b/src/components/input/sourceBox.rs index 7e9e0de..cbb40c9 100644 --- a/src/components/input/sourceBox.rs +++ b/src/components/input/sourceBox.rs @@ -1,6 +1,6 @@ use std::sync::atomic::Ordering; use std::sync::Arc; -use std::time::Duration; +use std::time::{Duration, SystemTime}; use crate::components::base::listEntry::ListEntry; use crate::components::base::utils::{ @@ -151,6 +151,15 @@ pub fn populate_sources(input_box: Arc) { let source = imp.resetDefaultSource.borrow(); let index = source.index; let channels = source.channels; + { + let mut time = imp.volumeTimeStamp.borrow_mut(); + if time.is_some() + && time.unwrap().elapsed().unwrap() < Duration::from_millis(50) + { + return Propagation::Proceed; + } + *time = Some(SystemTime::now()); + } set_source_volume(value, index, channels); Propagation::Proceed }); diff --git a/src/components/input/sourceBoxImpl.rs b/src/components/input/sourceBoxImpl.rs index b141dd2..3c60b5d 100644 --- a/src/components/input/sourceBoxImpl.rs +++ b/src/components/input/sourceBoxImpl.rs @@ -1,6 +1,7 @@ use std::cell::RefCell; use std::collections::HashMap; use std::sync::{Arc, RwLock}; +use std::time::SystemTime; use crate::components::base::listEntry::ListEntry; use crate::components::input::sourceBox; @@ -43,6 +44,7 @@ pub struct SourceBox { // first u32 is the index of the source, the second the index in the model list and the third is // the full name pub resetSourceMap: Arc>>, + pub volumeTimeStamp: RefCell>, } #[glib::object_subclass] diff --git a/src/components/input/sourceEntry.rs b/src/components/input/sourceEntry.rs index 0e8a082..f8dd676 100644 --- a/src/components/input/sourceEntry.rs +++ b/src/components/input/sourceEntry.rs @@ -1,5 +1,5 @@ use std::sync::Arc; -use std::time::Duration; +use std::time::{Duration, SystemTime}; use adw::glib; use adw::glib::Object; @@ -44,6 +44,15 @@ impl SourceEntry { let source = imp.stream.borrow(); let index = source.index; let channels = source.channels; + { + let mut time = imp.volumeTimeStamp.borrow_mut(); + if time.is_some() + && time.unwrap().elapsed().unwrap() < Duration::from_millis(50) + { + return Propagation::Proceed; + } + *time = Some(SystemTime::now()); + } set_source_volume(value, index, channels); Propagation::Proceed }), @@ -83,21 +92,21 @@ impl SourceEntry { pub fn set_source_volume(value: f64, index: u32, channels: u16) -> bool { gio::spawn_blocking(move || { - let conn = Connection::new_session().unwrap(); - let proxy = conn.with_proxy( - "org.xetibo.ReSet", - "/org/xetibo/ReSet", - Duration::from_millis(1000), - ); - let _: Result<(), Error> = proxy.method_call( - "org.xetibo.ReSet", - "SetSourceVolume", - (index, channels, value as u32), - ); - // if res.is_err() { - // return false; - // } - // res.unwrap().0 + let conn = Connection::new_session().unwrap(); + let proxy = conn.with_proxy( + "org.xetibo.ReSet", + "/org/xetibo/ReSet", + Duration::from_millis(1000), + ); + let _: Result<(), Error> = proxy.method_call( + "org.xetibo.ReSet", + "SetSourceVolume", + (index, channels, value as u32), + ); + // if res.is_err() { + // return false; + // } + // res.unwrap().0 }); true } diff --git a/src/components/input/sourceEntryImpl.rs b/src/components/input/sourceEntryImpl.rs index 57c3e44..e838e5d 100644 --- a/src/components/input/sourceEntryImpl.rs +++ b/src/components/input/sourceEntryImpl.rs @@ -1,5 +1,6 @@ use std::cell::RefCell; use std::sync::Arc; +use std::time::SystemTime; use gtk::subclass::prelude::*; use gtk::{glib, Button, CompositeTemplate, Label, ProgressBar, Scale, CheckButton}; @@ -24,6 +25,7 @@ pub struct SourceEntry { #[template_child] pub resetVolumeMeter: TemplateChild, pub stream: Arc>, + pub volumeTimeStamp: RefCell>, } #[glib::object_subclass] diff --git a/src/components/output/inputStreamEntry.rs b/src/components/output/inputStreamEntry.rs index 5509048..3c80f5b 100644 --- a/src/components/output/inputStreamEntry.rs +++ b/src/components/output/inputStreamEntry.rs @@ -1,4 +1,3 @@ -use std::cell::RefCell; use std::sync::Arc; use std::time::{Duration, SystemTime}; @@ -9,8 +8,7 @@ use dbus::blocking::Connection; use dbus::Error; use glib::subclass::types::ObjectSubclassIsExt; use glib::{clone, Cast, Propagation}; -use gtk::prelude::ScaleExt; -use gtk::{gio, PositionType, StringObject}; +use gtk::{gio, StringObject}; use ReSet_Lib::audio::audio::InputStream; use super::inputStreamEntryImpl; diff --git a/src/components/output/sinkBox.rs b/src/components/output/sinkBox.rs index 55b5f72..35fe537 100644 --- a/src/components/output/sinkBox.rs +++ b/src/components/output/sinkBox.rs @@ -1,6 +1,6 @@ use std::sync::atomic::Ordering; use std::sync::Arc; -use std::time::Duration; +use std::time::{Duration, SystemTime}; use crate::components::base::listEntry::ListEntry; use crate::components::base::utils::{ @@ -159,6 +159,15 @@ pub fn populate_sinks(output_box: Arc) { let sink = imp.resetDefaultSink.borrow(); let index = sink.index; let channels = sink.channels; + { + let mut time = imp.volumeTimeStamp.borrow_mut(); + if time.is_some() + && time.unwrap().elapsed().unwrap() < Duration::from_millis(50) + { + return Propagation::Proceed; + } + *time = Some(SystemTime::now()); + } set_sink_volume(value, index, channels); Propagation::Proceed }); diff --git a/src/components/output/sinkBoxImpl.rs b/src/components/output/sinkBoxImpl.rs index d472158..783aba6 100644 --- a/src/components/output/sinkBoxImpl.rs +++ b/src/components/output/sinkBoxImpl.rs @@ -1,6 +1,7 @@ use std::cell::RefCell; use std::collections::HashMap; use std::sync::{Arc, RwLock}; +use std::time::SystemTime; use crate::components::base::listEntry::ListEntry; use crate::components::output::inputStreamEntry::InputStreamEntry; @@ -46,6 +47,7 @@ pub struct SinkBox { // the full name pub resetSinkMap: Arc>>, // pub : Arc>>, + pub volumeTimeStamp: RefCell>, } #[glib::object_subclass] diff --git a/src/components/output/sinkEntry.rs b/src/components/output/sinkEntry.rs index d49e5ac..592532a 100644 --- a/src/components/output/sinkEntry.rs +++ b/src/components/output/sinkEntry.rs @@ -1,5 +1,5 @@ use std::sync::Arc; -use std::time::Duration; +use std::time::{Duration, SystemTime}; use adw::glib; use adw::glib::Object; @@ -42,6 +42,13 @@ impl SinkEntry { let sink = imp.stream.borrow(); let index = sink.index; let channels = sink.channels; + { + let mut time = imp.volumeTimeStamp.borrow_mut(); + if time.is_some() && time.unwrap().elapsed().unwrap() < Duration::from_millis(50) { + return Propagation::Proceed; + } + *time = Some(SystemTime::now()); + } set_sink_volume(value, index, channels); Propagation::Proceed }), diff --git a/src/components/output/sinkEntryImpl.rs b/src/components/output/sinkEntryImpl.rs index 84b92dd..ce65020 100644 --- a/src/components/output/sinkEntryImpl.rs +++ b/src/components/output/sinkEntryImpl.rs @@ -1,5 +1,6 @@ use std::cell::RefCell; use std::sync::Arc; +use std::time::SystemTime; use crate::components::output::sinkEntry; use gtk::subclass::prelude::*; @@ -23,6 +24,7 @@ pub struct SinkEntry { #[template_child] pub resetVolumeMeter: TemplateChild, pub stream: Arc>, + pub volumeTimeStamp: RefCell>, } #[glib::object_subclass] diff --git a/src/resources/resetAudioInput.ui b/src/resources/resetAudioInput.ui index db18217..d8e51cc 100644 --- a/src/resources/resetAudioInput.ui +++ b/src/resources/resetAudioInput.ui @@ -92,6 +92,9 @@ True center bottom + + 100% + diff --git a/src/resources/resetAudioOutput.ui b/src/resources/resetAudioOutput.ui index b0c736f..1b01d0f 100644 --- a/src/resources/resetAudioOutput.ui +++ b/src/resources/resetAudioOutput.ui @@ -92,6 +92,9 @@ True center bottom + + 100% + diff --git a/src/resources/resetInputStreamEntry.ui b/src/resources/resetInputStreamEntry.ui index 925133c..3ea0fba 100644 --- a/src/resources/resetInputStreamEntry.ui +++ b/src/resources/resetInputStreamEntry.ui @@ -42,7 +42,7 @@ - 10000.0 + 2005.4016 2005.4016 100270.08 diff --git a/src/resources/resetOutputStreamEntry.ui b/src/resources/resetOutputStreamEntry.ui index 6fe5643..082b585 100644 --- a/src/resources/resetOutputStreamEntry.ui +++ b/src/resources/resetOutputStreamEntry.ui @@ -50,6 +50,9 @@ True center bottom + + 100% + diff --git a/src/resources/resetSinkEntry.ui b/src/resources/resetSinkEntry.ui index 9102f70..0d89cc5 100644 --- a/src/resources/resetSinkEntry.ui +++ b/src/resources/resetSinkEntry.ui @@ -50,6 +50,9 @@ True center bottom + + 100% + diff --git a/src/resources/resetSourceEntry.ui b/src/resources/resetSourceEntry.ui index 8fa52a2..21a8b82 100644 --- a/src/resources/resetSourceEntry.ui +++ b/src/resources/resetSourceEntry.ui @@ -50,6 +50,9 @@ True center bottom + + 100% + diff --git a/src/resources/resetUI.cmb b/src/resources/resetUI.cmb index afcce47..414033d 100644 --- a/src/resources/resetUI.cmb +++ b/src/resources/resetUI.cmb @@ -438,7 +438,7 @@ (7,9,"GtkScale","value-pos","bottom",None,None,None,None,None,None,None,None,None), (7,9,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None), (7,9,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None), - (7,10,"GtkAdjustment","page-increment","10000.0",None,None,None,None,None,None,None,None,None), + (7,10,"GtkAdjustment","page-increment","2005.4016",None,None,None,None,None,None,None,None,None), (7,10,"GtkAdjustment","step-increment","2005.4016",None,None,None,None,None,None,None,None,None), (7,10,"GtkAdjustment","upper","100270.08",None,None,None,None,None,None,None,None,None), (7,11,"GtkButton","icon-name","audio-volume-high-symbolic",None,None,None,None,None,None,None,None,None), @@ -800,11 +800,31 @@ (3,42,"GtkWidget",1,1,None,None,None,None,None,None), (3,42,"GtkWidget",2,2,None,1,None,None,None,None), (7,9,"GtkScale",1,1,None,None,None,None,None,None), - (7,9,"GtkScale",2,2,"100%",1,None,None,None,None) + (7,9,"GtkScale",2,2,"100%",1,None,None,None,None), + (8,99,"GtkScale",1,1,None,None,None,None,None,None), + (8,99,"GtkScale",2,2,"100%",1,None,None,None,None), + (12,25,"GtkScale",1,1,None,None,None,None,None,None), + (12,25,"GtkScale",2,2,"100%",1,None,None,None,None), + (13,17,"GtkScale",1,1,None,None,None,None,None,None), + (13,17,"GtkScale",2,2,"100%",1,None,None,None,None), + (18,7,"GtkScale",1,1,None,None,None,None,None,None), + (18,7,"GtkScale",2,2,"100%",1,None,None,None,None), + (19,7,"GtkScale",1,1,None,None,None,None,None,None), + (19,7,"GtkScale",2,2,"100%",1,None,None,None,None) (7,9,"GtkScale",2,2,"value","65536.0"), (3,42,"GtkWidget",2,2,"name","b"), - (7,9,"GtkScale",2,2,"position","bottom") + (7,9,"GtkScale",2,2,"position","bottom"), + (8,99,"GtkScale",2,2,"position","bottom"), + (8,99,"GtkScale",2,2,"value","65536.0"), + (12,25,"GtkScale",2,2,"value","65536.0"), + (12,25,"GtkScale",2,2,"position","bottom"), + (13,17,"GtkScale",2,2,"value","65536.0"), + (13,17,"GtkScale",2,2,"position","bottom"), + (18,7,"GtkScale",2,2,"position","bottom"), + (18,7,"GtkScale",2,2,"value","65536.0"), + (19,7,"GtkScale",2,2,"position","bottom"), + (19,7,"GtkScale",2,2,"value","65536.0")