[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    playground/pim/mailody
From:       Tom Albers <tomalbers () kde ! nl>
Date:       2006-10-31 22:57:45
Message-ID: 1162335465.046565.27290.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 600822 by toma:

- When password is empty / wrong or when people dont want to use KWallet, present a nice dialog for them
- Composer refered to Settings, provide button in the dialog to go to the settings
- Disable password box in the Settings when KWallet is not activated
- Fill statusbar with info from the network status



 M  +0 -3      TODO  
 M  +35 -11    src/composer.cpp  
 M  +1 -0      src/composer.h  
 M  +64 -24    src/qmafetch.cpp  
 M  +6 -0      src/qmafetch.h  
 M  +7 -0      src/qmawidget.cpp  
 M  +1 -0      src/qmawidget.h  
 M  +8 -13     src/setupaccount.cpp  


--- trunk/playground/pim/mailody/TODO #600821:600822
@@ -10,9 +10,6 @@
 
 Settings:
 check capabilities
-after close we get a reconnect warning (missing abouttoclose call?)
-maybe thats only when tls is selected and there is no support?
-no valid password -> add button to settings
 
 ------------------------------------
 
--- trunk/playground/pim/mailody/src/composer.cpp #600821:600822
@@ -568,18 +568,25 @@
 
     while (smtp_server.isEmpty() || name.isEmpty() || email.isEmpty())
     {
-        KMessageBox::error(this, i18n("Settings are not complete, "
-                "complete them and try again..."));
+        int i = KMessageBox::warningContinueCancel(this,
+                                i18n("Settings are not complete, "
+                                     "complete them and try again..."),
+                                i18n("Could not send the message"),
+                                i18n("Settings"));
+        if (i == KMessageBox::Continue)
+        {
+            Setup setup(0,"Setup");
+            if (setup.exec() != QDialog::Accepted)
+                return;
 
-        Setup setup(0,"Setup");
-        if (setup.exec() != QDialog::Accepted)
-          return;
-
-        KConfig* config = kapp->config();
-        config->setGroup("General");
-        smtp_server = config->readEntry("smtpServer");
-        name = config->readEntry("fullName");
-        email = config->readEntry("emailAddress");
+            KConfig* config = kapp->config();
+            config->setGroup("General");
+            smtp_server = config->readEntry("smtpServer");
+            name = config->readEntry("fullName");
+            email = config->readEntry("emailAddress");
+        }
+        else
+            break;
     }
 
     m = new Message();
@@ -741,8 +748,25 @@
             SLOT(slotRead(const QString&)));
     connect(m_smtp, SIGNAL(connected()), SLOT(slotConnected()));
     m_smtp->reconnect();
+    connect(m_smtp, SIGNAL(error(const QString&)),
+            SLOT(slotError(const QString&)));
+
 }
 
+void Composer::slotError(const QString& error)
+{
+    // There is a 10% chance for a crash remaining here
+    // on a timeout error
+    // Thiago guarded for that for KDE 3.5.6 - comitted on 2006-10-29
+    if (m_smtp)
+    {
+        m_smtp->deleteLater();
+        m_smtp = 0;
+    }
+
+    KMessageBox::information(0,error);
+}
+
 void Composer::slotRead(const QString& dataIn)
 {
     //kdDebug() << "Received: " << dataIn.stripWhiteSpace()
--- trunk/playground/pim/mailody/src/composer.h #600821:600822
@@ -169,6 +169,7 @@
         void slotSend();
         void slotConnected();
         void slotRead(const QString&);
+        void slotError(const QString& error);
 };
 
 #endif // COMPOSER
--- trunk/playground/pim/mailody/src/qmafetch.cpp #600821:600822
@@ -26,11 +26,13 @@
 #include <kdebug.h>
 #include <kmessagebox.h>
 #include <klocale.h>
+#include <kpassdlg.h>
 #include <kwallet.h>
 using KWallet::Wallet;
 
 #include "db.h"
 #include "socketsafe.h"
+#include "setup.h"
 #include "qmafetch.h"
 
 QMAFetch *QMAFetch::m_instance = 0;
@@ -71,38 +73,57 @@
 
 void QMAFetch::slotLogin()
 {
+    emit status(i18n("Connected"));
     kapp->config()->setGroup("General");
     QString login = kapp->config()->readEntry("userName");
     QString pass;
 
     Wallet* wallet = Wallet::openWallet(Wallet::NetworkWallet());
-    if (!wallet)
+    if (wallet && wallet->isOpen() && wallet->hasFolder("mailody"))
     {
-        KMessageBox::error(0,i18n("Mailody could not access KWallet, "
-                "Mailody can not operate without it. Please activate it."));
-        exit(1);
-    }
-
-    if (wallet->isOpen() && wallet->hasFolder("mailody"))
-    {
         wallet->setFolder( "mailody" );
         wallet->readPassword("account1", pass);
     }
     delete wallet;
 
     if (pass.isEmpty())
+        manualAuth();
+    else
     {
-        m_imap->deleteLater();
-        m_imap = 0;
+        m_queue.prepend(Queue(Queue::Auth, "",
+                    "login \"" + login + "\" \"" + pass + "\""));
 
-        KMessageBox::information(0,i18n("Could not find a valid password in "
-                "the wallet, please go to the setup page"));
-        return;
+        emit status(i18n("Ready"));
+        m_readyToSend = true;
     }
+}
 
-    m_queue.prepend(Queue(Queue::Auth, "",
-                    "login \"" + login + "\" \"" + pass + "\""));
+void QMAFetch::manualAuth()
+{
+    kapp->config()->setGroup("General");
+    QString login = kapp->config()->readEntry("userName");
 
+    QCString password;
+    int result = KPasswordDialog::getPassword(password,
+                    i18n("Could not find a valid password, please enter it here"));
+    if (!password)
+    {
+        m_readyToSend = false;
+        if (m_imap)
+        {
+            m_imap->deleteLater();
+            m_imap=0;
+        }
+        emit status(i18n("Offline"));
+        return;
+    }
+    if (result == KPasswordDialog::Accepted)
+        m_queue.prepend(Queue(Queue::Auth, "",
+                        "login \"" + login + "\" \"" +
+                                QString(password) + "\""));
+    password.fill(0); // safe enough?
+    m_currentQueueItem=Queue();
+    emit status(i18n("Ready"));
     m_readyToSend = true;
 }
 
@@ -136,17 +157,34 @@
     else if (received.find("a02 NO") != -1 &&
              m_currentQueueItem.state() == Queue::Auth)
     {
+        m_currentQueueItem=Queue();
         m_readyToSend = false;
-        if (m_imap)
+
+        emit status(i18n("Offline"));
+        int i = KMessageBox::questionYesNoCancel(0,
+                i18n("The server refused the supplied username and password, "
+                     "do you want to go to the settings, re-enter it for one "
+                     "time or do nothing?"),
+                i18n("Could not log in"),
+                i18n("Settings"), i18n("Single Input"));
+        if (i == KMessageBox::Yes)
         {
-            m_imap->deleteLater();
-            m_imap=0;
+            Setup setup(0,"Setup");
+            if (setup.exec() != QDialog::Accepted)
+                return;
+            slotLogin();
         }
-
-        KMessageBox::information(0,i18n("The server refused the supplied "
-                "username and password."));
-        m_currentQueueItem=Queue();
-        return;
+        else if (i == KMessageBox::No)
+            manualAuth();
+        else
+        {
+            if (m_imap)
+            {
+                m_imap->deleteLater();
+                m_imap=0;
+            }
+            return;
+        }
     }
     else if (received.find("a02 NO") != -1 || received.find("a02 BAD") != -1)
     {
@@ -560,7 +598,7 @@
         // Priority; above the checkmail calls in the queue.
         m_queue.prepend(Queue(Queue::GetHeaders, mb,
                    "UID FETCH " + part
-                           + " (BODY.PEEK[HEADER.FIELDS (FROM TO CC SUBJECT DATE)])"));
+           + " (BODY.PEEK[HEADER.FIELDS (FROM TO CC SUBJECT DATE)])"));
     }
 }
 
@@ -599,6 +637,7 @@
         m_imap = 0;
     }
 
+    emit status(i18n("Offline"));
     KMessageBox::information(0,error);
 }
 
@@ -639,6 +678,7 @@
     connect(m_imap, SIGNAL(error(const QString&)),
             SLOT(slotError(const QString&)));
 
+    emit status(i18n("Connecting"));
     m_imap->reconnect();
 }
 #include "qmafetch.moc"
--- trunk/playground/pim/mailody/src/qmafetch.h #600821:600822
@@ -211,6 +211,11 @@
      */
     void unseenCount(const QString& mb, int amount);
 
+    /**
+     * Reports about the network status
+     */
+    void status(const QString&);
+
   private slots:
     void slotRead(const QString&);
     void slotError(const QString& error);
@@ -219,6 +224,7 @@
 
   private:
     static QMAFetch*   m_instance;
+    void manualAuth();
 };
 
 #endif // QMAFETCH_H
--- trunk/playground/pim/mailody/src/qmawidget.cpp #600821:600822
@@ -119,6 +119,8 @@
             SLOT(slotUpdateUnseenMessageCount(const QString&, int)));
     connect(d->connection, SIGNAL(allUidsKnown(const QString&)),
             SLOT(slotAllMessages(const QString&)));
+    connect(d->connection, SIGNAL(status(const QString&)),
+            SLOT(slotUpdateStatusBar(const QString&)));
 
     d->first = new QSplitter(this);
 
@@ -1285,6 +1287,11 @@
     checkMail();
 }
 
+void QMAWidget::slotUpdateStatusBar(const QString& text)
+{
+    statusBar()->changeItem(text,1);
+}
+
 void QMAWidget::slotQuit()
 {
     exit(0);
--- trunk/playground/pim/mailody/src/qmawidget.h #600821:600822
@@ -115,6 +115,7 @@
         void slotUser3();
         void slotUser4();
         void slotUser5();
+        void slotUpdateStatusBar(const QString&);
         void slotQuit();
 };
 
--- trunk/playground/pim/mailody/src/setupaccount.cpp #600821:600822
@@ -179,15 +179,8 @@
     config->sync();
 
     Wallet* wallet = Wallet::openWallet(Wallet::NetworkWallet());
-    if (!wallet)
+    if (wallet && wallet->isOpen())
     {
-        KMessageBox::error(0,i18n("Mailody could not access KWallet, "
-	     "Mailody can not operate without it. Please activate it."));
-        exit(1);
-    }
-
-    if (wallet->isOpen())
-    {
         if (!wallet->hasFolder("mailody"))
             wallet->createFolder( "mailody" );
 
@@ -220,12 +213,14 @@
     Wallet* wallet = Wallet::openWallet(Wallet::NetworkWallet());
     if (!wallet)
     {
-        KMessageBox::error(0,i18n("Mailody could not access KWallet, "
-             "Mailody can not operate without it. Please activate it."));
-        exit(1);
+        d->password->setEnabled(false);
+        KMessageBox::information(0,i18n("Mailody could not access KWallet, "
+            "if you want to store the password permanently then you have to "
+            "activate it. If you don't "
+            "want to use KWallet, check the box below en enjoy the dialogs."),
+            i18n("No KWallet"), "warning_kwallet_disabled");
     }
-
-    if (wallet->isOpen() && wallet->hasFolder("mailody"))
+    else if (wallet->isOpen() && wallet->hasFolder("mailody"))
     {
         wallet->setFolder( "mailody" );
         wallet->readPassword("account1", pass);
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic