From 651dee7fb3c45ed18c490dc039677daed1c33aa9 Mon Sep 17 00:00:00 2001
From: Andrei Karas <akaras@inbox.ru>
Date: Sat, 26 Aug 2017 02:00:31 +0300
Subject: Allow request to load old mail messages by pages.

---
 src/gui/windows/mailwindow.cpp | 36 +++++++++++++++++++++++++++++-------
 src/gui/windows/mailwindow.h   |  3 +++
 2 files changed, 32 insertions(+), 7 deletions(-)

(limited to 'src/gui')

diff --git a/src/gui/windows/mailwindow.cpp b/src/gui/windows/mailwindow.cpp
index f41017543..18371b7ad 100644
--- a/src/gui/windows/mailwindow.cpp
+++ b/src/gui/windows/mailwindow.cpp
@@ -72,11 +72,14 @@ MailWindow::MailWindow() :
     // TRANSLATORS: mail window button
     mDeleteButton(new Button(this, _("Delete"), "delete", this)),
     // TRANSLATORS: mail window button
-    mReturnButton(new Button(this, _("Return"), "return", this)),
+    mReturnButton(new Button(this,
+        settings.enableNewMailSystem ? _("Get old") : _("Return"),
+        "return", this)),
     // TRANSLATORS: mail window button
     mOpenButton(new Button(this, _("Open"), "open", this)),
     mOpenType(MailOpenType::Mail),
-    mUseMail2(settings.enableNewMailSystem)
+    mUseMail2(settings.enableNewMailSystem),
+    mLastPage(false)
 {
     setWindowName("Mail");
     setCloseButton(true);
@@ -158,11 +161,22 @@ void MailWindow::action(const ActionEvent &event)
     }
     else if (eventId == "return")
     {
-        const int sel = mListBox->getSelected();
-        if (sel < 0)
-            return;
-        const MailMessage *const mail = mMessages[sel];
-        mailHandler->returnMessage(mail->id);
+        if (mUseMail2)
+        {
+            const size_t idx = mMessages.size();
+            if (idx == 0)
+                mail2Handler->refreshMailList(MailOpenType::Mail, 0);
+            else
+                mail2Handler->nextPage(mOpenType, mMessages[idx - 1]->id);
+        }
+        else
+        {
+            const int sel = mListBox->getSelected();
+            if (sel < 0)
+                return;
+            const MailMessage *const mail = mMessages[sel];
+            mailHandler->returnMessage(mail->id);
+        }
     }
 }
 
@@ -330,6 +344,8 @@ void MailWindow::refreshMails()
     {
         clear();
         mail2Handler->refreshMailList(MailOpenType::Mail, 0);
+        mLastPage = false;
+        mReturnButton->setEnabled(true);
     }
     else
     {
@@ -353,3 +369,9 @@ MailMessage *MailWindow::findMail(const int64_t id)
         return (*it).second;
     return nullptr;
 }
+
+void MailWindow::setLastPage()
+{
+    mLastPage = true;
+    mReturnButton->setEnabled(false);
+}
diff --git a/src/gui/windows/mailwindow.h b/src/gui/windows/mailwindow.h
index 3c38e0329..1639dfed0 100644
--- a/src/gui/windows/mailwindow.h
+++ b/src/gui/windows/mailwindow.h
@@ -78,6 +78,8 @@ class MailWindow final : public Window,
         MailOpenTypeT getOpenType() const A_WARN_UNUSED
         { return mOpenType; }
 
+        void setLastPage();
+
     private:
         void refreshMails();
 
@@ -96,6 +98,7 @@ class MailWindow final : public Window,
         Button *mOpenButton;
         MailOpenTypeT mOpenType;
         bool mUseMail2;
+        bool mLastPage;
 };
 
 extern MailWindow *mailWindow;
-- 
cgit v1.2.3-70-g09d2