settings: fix ringtones button and stop when changing account

Change-Id: I3489bf37ee14dd86cc3195aff442dcb2ce3a1200
Tuleap: #339
diff --git a/accountdetails.cpp b/accountdetails.cpp
index 850d632..29ddbbe 100644
--- a/accountdetails.cpp
+++ b/accountdetails.cpp
@@ -52,6 +52,20 @@
     connect(ui->lrcfg_tlsCaListCertificate, SIGNAL(clicked(bool)), this, SLOT(onCertButtonClicked()));
     connect(ui->lrcfg_tlsCertificate, SIGNAL(clicked(bool)), this, SLOT(onCertButtonClicked()));
     connect(ui->lrcfg_tlsPrivateKeyCertificate, SIGNAL(clicked(bool)), this, SLOT(onCertButtonClicked()));
+
+    connect(&RingtoneModel::instance(),
+            &RingtoneModel::dataChanged,
+            [=](const QModelIndex& topLeft, const QModelIndex& bottomRight) {
+        Q_UNUSED(topLeft)
+        Q_UNUSED(bottomRight)
+        if (not currentAccount_)
+            return;
+        if (RingtoneModel::instance().isPlaying())
+            ui->playButton->setText(tr("Pause"));
+        else
+            ui->playButton->setText(tr("Play"));
+
+    });
 }
 
 AccountDetails::~AccountDetails()
@@ -63,7 +77,8 @@
 AccountDetails::setAccount(Account* currentAccount) {
 
     if (currentAccount_) {
-        currentAccount_->performAction(Account::EditAction::SAVE);
+        stopRingtone();
+        save();
     }
 
     currentAccount_ = currentAccount;
@@ -227,3 +242,12 @@
     RingtoneModel::instance().play(RingtoneModel::instance().index(
                                        ui->ringtonesBox->currentIndex(), 0));
 }
+
+void
+AccountDetails::stopRingtone() {
+    if (not currentAccount_)
+        return;
+    auto idx = RingtoneModel::instance().selectionModel(currentAccount_)->currentIndex();
+    if (RingtoneModel::instance().isPlaying())
+        RingtoneModel::instance().play(idx);
+}