diff --git a/src/actions.cpp b/src/actions.cpp index e6e4882b..5b393596 100644 --- a/src/actions.cpp +++ b/src/actions.cpp @@ -1204,6 +1204,22 @@ void SetCrossfade::run() } } +void SetVolume::run() +{ + using Global::wFooter; + + Statusbar::lock(); + Statusbar::put() << "Set volume to: "; + std::string strvolume = wFooter->getString(3); + Statusbar::unlock(); + int volume = boost::lexical_cast(strvolume); + if (volume >= 0 && volume <= 100) + { + if (Mpd.SetVolume(volume)) + Statusbar::msg("Volume set to %d%%", volume); + } +} + bool EditSong::canBeRun() const { # ifdef HAVE_TAGLIB_H @@ -2490,6 +2506,7 @@ void populateActions() insert_action(new Actions::ToggleConsume()); insert_action(new Actions::ToggleCrossfade()); insert_action(new Actions::SetCrossfade()); + insert_action(new Actions::SetVolume()); insert_action(new Actions::EditSong()); insert_action(new Actions::EditLibraryTag()); insert_action(new Actions::EditLibraryAlbum()); diff --git a/src/actions.h b/src/actions.h index 343b8338..882b668b 100644 --- a/src/actions.h +++ b/src/actions.h @@ -41,7 +41,7 @@ enum class Type ToggleLyricsFetcher, ToggleFetchingLyricsInBackground, TogglePlayingSongCentering, UpdateDatabase, JumpToPlayingSong, ToggleRepeat, Shuffle, ToggleRandom, StartSearching, SaveTagChanges, ToggleSingle, ToggleConsume, ToggleCrossfade, - SetCrossfade, EditSong, EditLibraryTag, EditLibraryAlbum, EditDirectoryName, + SetCrossfade, SetVolume, EditSong, EditLibraryTag, EditLibraryAlbum, EditDirectoryName, EditPlaylistName, EditLyrics, JumpToBrowser, JumpToMediaLibrary, JumpToPlaylistEditor, ToggleScreenLock, JumpToTagEditor, JumpToPositionInSong, ReverseSelection, RemoveSelection, SelectAlbum, AddSelectedItems, @@ -593,6 +593,14 @@ protected: virtual void run(); }; +struct SetVolume : public BaseAction +{ + SetVolume() : BaseAction(Type::SetVolume, "set_volume") { } + +protected: + virtual void run(); +}; + struct EditSong : public BaseAction { EditSong() : BaseAction(Type::EditSong, "edit_song") { } diff --git a/src/mpdpp.cpp b/src/mpdpp.cpp index fb0801dc..80dd66d2 100644 --- a/src/mpdpp.cpp +++ b/src/mpdpp.cpp @@ -799,14 +799,16 @@ void Connection::SetConsume(bool mode) } } -void Connection::SetVolume(unsigned vol) +bool Connection::SetVolume(unsigned vol) { if (!itsConnection || vol > 100) - return; + return false; assert(!isCommandsListEnabled); GoBusy(); - if (mpd_run_set_volume(itsConnection, vol) && !supportsIdle) + bool success = mpd_run_set_volume(itsConnection, vol); + if (success && !supportsIdle) UpdateStatus(); + return success; } std::string Connection::GetReplayGainMode() diff --git a/src/mpdpp.h b/src/mpdpp.h index f54b32bc..186f1219 100644 --- a/src/mpdpp.h +++ b/src/mpdpp.h @@ -187,7 +187,7 @@ public: void SetSingle(bool); void SetConsume(bool); void SetCrossfade(unsigned); - void SetVolume(unsigned); + bool SetVolume(unsigned); std::string GetReplayGainMode(); void SetReplayGainMode(ReplayGainMode);