From 13087f27d986ce6f669889e25ec0e2fe9d26e32f Mon Sep 17 00:00:00 2001
From: angelaschmid <angela.schmid@wolke7.net>
Date: Fri, 16 May 2014 10:22:50 +0200
Subject: [PATCH] Save volume only on TV Player exit

---
 mythtv/libs/libmyth/audio/volumebase.cpp | 7 +++++--
 mythtv/libs/libmyth/audio/volumebase.h   | 1 +
 mythtv/libs/libmythtv/audioplayer.cpp    | 8 ++++++++
 mythtv/libs/libmythtv/audioplayer.h      | 1 +
 mythtv/libs/libmythtv/mythplayer.h       | 1 +
 mythtv/libs/libmythtv/tv_play.cpp        | 6 ++++++
 6 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/mythtv/libs/libmyth/audio/volumebase.cpp b/mythtv/libs/libmyth/audio/volumebase.cpp
index ee4783f..dac39fc 100644
--- a/mythtv/libs/libmyth/audio/volumebase.cpp
+++ b/mythtv/libs/libmyth/audio/volumebase.cpp
@@ -38,10 +38,13 @@ void VolumeBase::SetCurrentVolume(int value)
 {
     volume = max(min(value, 100), 0);
     UpdateVolume();
+}
 
+void VolumeBase::SaveCurrentVolume(void)
+{
     QString controlLabel = gCoreContext->GetSetting("MixerControl", "PCM");
     controlLabel += "MixerVolume";
-    gCoreContext->SaveSetting(controlLabel, volume);    
+    gCoreContext->SaveSetting(controlLabel, GetCurrentVolume());
 }
 
 void VolumeBase::AdjustCurrentVolume(int change)
@@ -93,7 +96,7 @@ MuteState VolumeBase::NextMuteState(MuteState cur)
 void VolumeBase::UpdateVolume(void)
 {
     int new_volume = volume;
-    bool save = true;
+    bool save = false;
     if (current_mute_state == kMuteAll)
     {
         new_volume = 0;
diff --git a/mythtv/libs/libmyth/audio/volumebase.h b/mythtv/libs/libmyth/audio/volumebase.h
index 0d9a38f..73b1a34 100644
--- a/mythtv/libs/libmyth/audio/volumebase.h
+++ b/mythtv/libs/libmyth/audio/volumebase.h
@@ -20,6 +20,7 @@ class MPUBLIC VolumeBase
     bool SWVolume(void) const;
     virtual uint GetCurrentVolume(void) const;
     virtual void SetCurrentVolume(int value);
+    virtual void SaveCurrentVolume(void);
     virtual void AdjustCurrentVolume(int change);
     virtual void ToggleMute(void);
 
diff --git a/mythtv/libs/libmythtv/audioplayer.cpp b/mythtv/libs/libmythtv/audioplayer.cpp
index 2f4b46c..f8b074f 100644
--- a/mythtv/libs/libmythtv/audioplayer.cpp
+++ b/mythtv/libs/libmythtv/audioplayer.cpp
@@ -343,6 +343,14 @@ uint AudioPlayer::SetVolume(int newvolume)
     return GetVolume();
 }
 
+void AudioPlayer::SaveVolume(void)
+{
+    if (!m_audioOutput || m_no_audio_out)
+        return;
+    QMutexLocker lock(&m_lock);
+    m_audioOutput->SaveCurrentVolume();
+}
+
 int64_t AudioPlayer::GetAudioTime(void)
 {
     if (!m_audioOutput || m_no_audio_out)
diff --git a/mythtv/libs/libmythtv/audioplayer.h b/mythtv/libs/libmythtv/audioplayer.h
index eae034f..1efbf53 100644
--- a/mythtv/libs/libmythtv/audioplayer.h
+++ b/mythtv/libs/libmythtv/audioplayer.h
@@ -54,6 +54,7 @@ class MTV_PUBLIC AudioPlayer
     uint  GetVolume(void);
     uint  AdjustVolume(int change);
     uint  SetVolume(int newvolume);
+    void  SaveVolume(void);
     float GetStretchFactor(void) const { return m_stretchfactor; }
     void  SetStretchFactor(float factor);
     bool  IsUpmixing(void);
diff --git a/mythtv/libs/libmythtv/mythplayer.h b/mythtv/libs/libmythtv/mythplayer.h
index b34eba7..cc168f6 100644
--- a/mythtv/libs/libmythtv/mythplayer.h
+++ b/mythtv/libs/libmythtv/mythplayer.h
@@ -389,6 +389,7 @@ class MTV_PUBLIC MythPlayer
     // Audio Sets
     uint AdjustVolume(int change)           { return audio.AdjustVolume(change); }
     uint SetVolume(int newvolume)           { return audio.SetVolume(newvolume); }
+    void SaveVolume(void)                   { return audio.SaveVolume(); }
     bool SetMuted(bool mute)                { return audio.SetMuted(mute);       }
     MuteState SetMuteState(MuteState state) { return audio.SetMuteState(state);  }
     MuteState IncrMuteState(void)           { return audio.IncrMuteState();      }
diff --git a/mythtv/libs/libmythtv/tv_play.cpp b/mythtv/libs/libmythtv/tv_play.cpp
index f0fee85..67ce159 100755
--- a/mythtv/libs/libmythtv/tv_play.cpp
+++ b/mythtv/libs/libmythtv/tv_play.cpp
@@ -3298,6 +3298,12 @@ void TV::PrepareToExitPlayer(PlayerContext *ctx, int line, BookmarkAction bookma
         }
         if (db_auto_set_watched)
             ctx->player->SetWatched();
+
+        if (ctx->player->GetAudio()->ControlsVolume())
+        {
+            ctx->player->SaveVolume();
+        }
+
     }
     ctx->UnlockDeletePlayer(__FILE__, line);
 }
-- 
1.9.1

