From b5d1f8a8bad2e77b7d57476d1e17eb6aa9746352 Mon Sep 17 00:00:00 2001
From: Dominik Schmidt <dev@dominik-schmidt.de>
Date: Thu, 24 Jan 2013 01:30:49 +0100
Subject: [PATCH] Automatically fill in server name

---
 src/accounts/xmpp/XmppConfigWidget.cpp | 28 +++++++++++++++++++++++---
 src/accounts/xmpp/XmppConfigWidget.h   |  6 +++++-
 2 files changed, 30 insertions(+), 4 deletions(-)

diff --git a/src/accounts/xmpp/XmppConfigWidget.cpp b/src/accounts/xmpp/XmppConfigWidget.cpp
index 826cecf95..80640543b 100644
--- a/src/accounts/xmpp/XmppConfigWidget.cpp
+++ b/src/accounts/xmpp/XmppConfigWidget.cpp
@@ -42,13 +42,17 @@ XmppConfigWidget::XmppConfigWidget( XmppAccount* account, QWidget *parent ) :
 
     m_ui->xmppUsername->setText( account->credentials().contains( "username" ) ? account->credentials()[ "username" ].toString() : QString() );
     m_ui->xmppPassword->setText( account->credentials().contains( "password" ) ? account->credentials()[ "password" ].toString() : QString() );
-    m_ui->xmppServer->setText( account->configuration().contains( "server" ) ? account->configuration()[ "server" ].toString() : QString() );
     m_ui->xmppPort->setValue( account->configuration().contains( "port" ) ? account->configuration()[ "port" ].toInt() : 5222 );
     m_ui->xmppPublishTracksCheckbox->setChecked( account->configuration().contains( "publishtracks" ) ? account->configuration()[ "publishtracks" ].toBool() : true);
     m_ui->xmppEnforceSecureCheckbox->setChecked( account->configuration().contains( "enforcesecure" ) ? account->configuration()[ "enforcesecure" ].toBool() : false);
     m_ui->jidExistsLabel->hide();
 
+    m_ui->xmppServer->setText( account->configuration().contains( "server" ) ? account->configuration()[ "server" ].toString() : QString() );
+    m_serverWasEditedByUser = account->configuration().value( "serverWasEditedByUser", false ).toBool();
+
     connect( m_ui->xmppUsername, SIGNAL( textChanged( QString ) ), SLOT( onCheckJidExists( QString ) ) );
+    connect( m_ui->xmppUsername, SIGNAL( textChanged( QString ) ), SLOT( onUsernameEdited() ) );
+    connect( m_ui->xmppServer, SIGNAL( editingFinished() ), SLOT( onServerEdited() ) );
 }
 
 
@@ -65,11 +69,14 @@ XmppConfigWidget::saveConfig()
     credentials[ "password" ] = m_ui->xmppPassword->text().trimmed();
 
     QVariantHash configuration = m_account->configuration();
-    configuration[ "server" ] = m_ui->xmppServer->text().trimmed();
     configuration[ "port" ] = m_ui->xmppPort->text().trimmed();
     configuration[ "publishtracks"] = m_ui->xmppPublishTracksCheckbox->isChecked();
     configuration[ "enforcesecure"] = m_ui->xmppEnforceSecureCheckbox->isChecked();
 
+    configuration[ "server" ] = m_ui->xmppServer->text().trimmed();
+    configuration[ "serverWasEditedByUser" ] = m_serverWasEditedByUser;
+
+
     m_account->setAccountFriendlyName( m_ui->xmppUsername->text() );
     m_account->setCredentials( credentials );
     m_account->setConfiguration( configuration);
@@ -80,7 +87,7 @@ XmppConfigWidget::saveConfig()
 
 
 void
-XmppConfigWidget::onCheckJidExists( QString jid )
+XmppConfigWidget::onCheckJidExists( const QString &jid )
 {
     QList< Tomahawk::Accounts::Account* > accounts = Tomahawk::Accounts::AccountManager::instance()->accounts( Tomahawk::Accounts::SipType );
     foreach( Tomahawk::Accounts::Account* account, accounts )
@@ -109,6 +116,21 @@ XmppConfigWidget::onCheckJidExists( QString jid )
 }
 
 
+void
+XmppConfigWidget::onUsernameEdited()
+{
+    if( m_ui->xmppUsername->text().trimmed().split( '@' ).count() == 2 && !m_serverWasEditedByUser )
+        m_ui->xmppServer->setText( m_ui->xmppUsername->text().trimmed().split( '@' ).at( 1 ) );
+}
+
+
+void
+XmppConfigWidget::onServerEdited()
+{
+    m_serverWasEditedByUser = true;
+}
+
+
 }
 
 }
diff --git a/src/accounts/xmpp/XmppConfigWidget.h b/src/accounts/xmpp/XmppConfigWidget.h
index 25521b786..c16e3f6fa 100644
--- a/src/accounts/xmpp/XmppConfigWidget.h
+++ b/src/accounts/xmpp/XmppConfigWidget.h
@@ -53,12 +53,16 @@ signals:
     void dataError( bool exists );
 
 private slots:
-    void onCheckJidExists( QString jid );
+    void onCheckJidExists( const QString& jid );
+    void onUsernameEdited();
+    void onServerEdited();
 
 private:
     Ui::XmppConfigWidget *m_ui;
     XmppAccount *m_account;
 
+    bool m_serverWasEditedByUser;
+
     friend class GoogleWrapper; // So google wrapper can modify the labels and text
 };