@@ -850,35 +850,37 @@ set_default_run (WpCtl * self)
850
850
static gboolean
851
851
set_volume_parse_positional (gint argc , gchar * * argv , GError * * error )
852
852
{
853
+ g_autoptr (GRegex ) regex = NULL ;
854
+ g_autoptr (GMatchInfo ) info = NULL ;
855
+
853
856
if (argc < 4 ) {
854
857
g_set_error_literal (error , wpctl_error_domain_quark (), 0 ,
855
858
"ID and VOL[%][-/+] are required" );
856
859
return FALSE;
857
860
}
858
861
859
- GRegex * regex = g_regex_new ("^(\\d*\\.?\\d*)(%?)([-+]?)$" , 0 , 0 , NULL );
860
- GMatchInfo * info = NULL ;
862
+ regex = g_regex_new ("^(\\d*\\.?\\d*)(%?)([-+]?)$" , 0 , 0 , NULL );
861
863
862
864
if (g_regex_match (regex , argv [3 ], 0 , & info )) {
863
- cmdline .set_volume .volume = strtof (g_match_info_fetch (info , 1 ), NULL );
865
+ gchar * str = g_match_info_fetch (info , 1 );
866
+ cmdline .set_volume .volume = strtof (str , NULL );
864
867
cmdline .set_volume .type = 'a' ;
868
+ g_free (str );
865
869
866
- if (g_strcmp0 (g_match_info_fetch (info , 2 ), "%" ) == 0 ) {
867
- cmdline .set_volume .type = 'p' ;
868
- }
870
+ str = g_match_info_fetch (info , 2 );
871
+ if (g_strcmp0 (str , "%" ) == 0 )
872
+ cmdline .set_volume .volume /= 100 ;
873
+ g_free (str );
869
874
870
- if (g_strcmp0 (g_match_info_fetch (info , 3 ), "-" ) == 0 ) {
875
+ str = g_match_info_fetch (info , 3 );
876
+ if (g_strcmp0 (str , "-" ) == 0 ) {
871
877
cmdline .set_volume .volume = - (cmdline .set_volume .volume );
872
- if (cmdline .set_volume .type != 'p' ) {
873
- cmdline .set_volume .type = 's' ;
874
- }
875
- } else if (g_strcmp0 (g_match_info_fetch (info , 3 ), "+" ) == 0 && cmdline .set_volume .type != 'p' ) {
878
+ cmdline .set_volume .type = 's' ;
879
+ } else if (g_strcmp0 (str , "+" ) == 0 ) {
876
880
cmdline .set_volume .type = 's' ;
877
881
}
878
- g_match_info_free (info );
879
- g_regex_unref (regex );
882
+ g_free (str );
880
883
} else {
881
- g_regex_unref (regex );
882
884
g_set_error (error , wpctl_error_domain_quark (), 0 ,
883
885
"Invalid volume argument. See wpctl set-volume --help" );
884
886
return FALSE;
@@ -918,22 +920,17 @@ do_set_volume (WpCtl * self, WpPipewireObject *proxy)
918
920
id = atoi (str );
919
921
}
920
922
921
- g_signal_emit_by_name (mixer_api , "get-volume" , id , & variant );
922
- if (!variant ) {
923
- fprintf (stderr , "Node %d does not support volume\n" , id );
923
+ if (cmdline .set_volume .type == 's' ) {
924
+ g_signal_emit_by_name (mixer_api , "get-volume" , id , & variant );
925
+ if (!variant ) {
926
+ fprintf (stderr , "Node %d does not support volume\n" , id );
927
+ g_clear_pointer (& variant , g_variant_unref );
928
+ return FALSE;
929
+ }
930
+ g_variant_lookup (variant , "volume" , "d" , & curr_volume );
924
931
g_clear_pointer (& variant , g_variant_unref );
925
- return FALSE;
926
- }
927
- g_variant_lookup (variant , "volume" , "d" , & curr_volume );
928
- g_clear_pointer (& variant , g_variant_unref );
929
932
930
- if (cmdline .set_volume .type == 'a' ) {
931
- cmdline .set_volume .volume = cmdline .set_volume .volume ;
932
- } else if (cmdline .set_volume .type == 's' ) {
933
933
cmdline .set_volume .volume = (cmdline .set_volume .volume + curr_volume );
934
- } else if (cmdline .set_volume .type == 'p' ) {
935
- gfloat delta = (cmdline .set_volume .volume ) * (curr_volume );
936
- cmdline .set_volume .volume = (curr_volume + delta );
937
934
}
938
935
if (cmdline .set_volume .volume < 0 ) {
939
936
cmdline .set_volume .volume = 0.0 ;
0 commit comments