summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/enums/resources/notifytypes.h1
-rw-r--r--src/gui/windows/mailviewwindow.cpp36
-rw-r--r--src/gui/windows/mailviewwindow.h6
-rw-r--r--src/gui/windows/mailwindow.cpp11
-rw-r--r--src/gui/windows/mailwindow.h2
-rw-r--r--src/net/eathena/mail2recv.cpp27
-rw-r--r--src/resources/notifications.h4
7 files changed, 79 insertions, 8 deletions
diff --git a/src/enums/resources/notifytypes.h b/src/enums/resources/notifytypes.h
index 643aaf2d1..6513c4f4f 100644
--- a/src/enums/resources/notifytypes.h
+++ b/src/enums/resources/notifytypes.h
@@ -244,6 +244,7 @@ namespace NotifyTypes
MAIL_SEND_COUNT_ERROR,
MAIL_SEND_ITEM_ERROR,
MAIL_SEND_RECEIVER_ERROR,
+ MAIL_GET_ATTACH_FULL_ERROR,
TYPE_END
};
diff --git a/src/gui/windows/mailviewwindow.cpp b/src/gui/windows/mailviewwindow.cpp
index 56367ef78..b250fad43 100644
--- a/src/gui/windows/mailviewwindow.cpp
+++ b/src/gui/windows/mailviewwindow.cpp
@@ -23,6 +23,7 @@
#include "configuration.h"
#include "settings.h"
+#include "net/mail2handler.h"
#include "net/mailhandler.h"
#include "gui/mailmessage.h"
@@ -54,7 +55,7 @@
MailViewWindow *mailViewWindow = nullptr;
-MailViewWindow::MailViewWindow(const MailMessage *const message,
+MailViewWindow::MailViewWindow(MailMessage *const message,
const int itemsCount) :
// TRANSLATORS: mail view window name
Window(_("View mail"), Modal_false, nullptr, "mailview.xml"),
@@ -128,7 +129,7 @@ MailViewWindow::MailViewWindow(const MailMessage *const message,
mGetMoneyButton = new Button(this,
// TRANSLATORS: mail view attached money button
_("Get money"),
- "attach", this);
+ "money", this);
placer(0, n++, mGetMoneyButton);
}
placer(0, n++, mGetAttachButton);
@@ -170,8 +171,23 @@ void MailViewWindow::action(const ActionEvent &event)
}
else if (eventId == "attach")
{
- if (mGetAttachButton != nullptr)
+ if (mUseMail2)
+ {
+ mail2Handler->requestItems(mailWindow->getOpenType(),
+ mMessage->id);
+ }
+ else
+ {
mailHandler->getAttach(mMessage->id);
+ }
+ }
+ else if (eventId == "money")
+ {
+ if (mUseMail2)
+ {
+ mail2Handler->requestMoney(mailWindow->getOpenType(),
+ mMessage->id);
+ }
}
else if (eventId == "next")
{
@@ -221,3 +237,17 @@ void MailViewWindow::updateItems()
mItemContainer->updateMatrix();
updateAttachButton();
}
+
+void MailViewWindow::removeItems(const int64_t mailId)
+{
+ if (mailId != mMessage->id)
+ return;
+ mInventory->clear();
+ mMessage->type = static_cast<MailMessageType::Type>(
+ CAST_S32(mMessage->type) | CAST_S32(MailMessageType::Item));
+ mMessage->type = static_cast<MailMessageType::Type>(
+ CAST_S32(mMessage->type) ^ CAST_S32(MailMessageType::Item));
+ updateAttachButton();
+ if (mailWindow)
+ mailWindow->refreshMailNames();
+}
diff --git a/src/gui/windows/mailviewwindow.h b/src/gui/windows/mailviewwindow.h
index 524c029d4..13ad25676 100644
--- a/src/gui/windows/mailviewwindow.h
+++ b/src/gui/windows/mailviewwindow.h
@@ -38,7 +38,7 @@ class MailViewWindow final : public Window,
public ActionListener
{
public:
- MailViewWindow(const MailMessage *const message,
+ MailViewWindow(MailMessage *const message,
const int itemsCount) A_NONNULL(2);
A_DELETE_COPY(MailViewWindow)
@@ -51,10 +51,12 @@ class MailViewWindow final : public Window,
void updateItems();
+ void removeItems(const int64_t mailId);
+
private:
void updateAttachButton();
- const MailMessage *mMessage;
+ MailMessage *mMessage;
Button *mGetAttachButton;
Button *mGetMoneyButton;
Button *mCloseButton;
diff --git a/src/gui/windows/mailwindow.cpp b/src/gui/windows/mailwindow.cpp
index 18371b7ad..5536aecbc 100644
--- a/src/gui/windows/mailwindow.cpp
+++ b/src/gui/windows/mailwindow.cpp
@@ -375,3 +375,14 @@ void MailWindow::setLastPage()
mLastPage = true;
mReturnButton->setEnabled(false);
}
+
+void MailWindow::refreshMailNames()
+{
+ mMailModel->clear();
+ FOR_EACH (STD_VECTOR<MailMessage*>::iterator, it, mMessages)
+ {
+ MailMessage *message = *it;
+ if (message != nullptr)
+ mMailModel->add(getMailHeader(message));
+ }
+}
diff --git a/src/gui/windows/mailwindow.h b/src/gui/windows/mailwindow.h
index 1639dfed0..6a310fb37 100644
--- a/src/gui/windows/mailwindow.h
+++ b/src/gui/windows/mailwindow.h
@@ -80,6 +80,8 @@ class MailWindow final : public Window,
void setLastPage();
+ void refreshMailNames();
+
private:
void refreshMails();
diff --git a/src/net/eathena/mail2recv.cpp b/src/net/eathena/mail2recv.cpp
index 1cb2a7f58..392e679d6 100644
--- a/src/net/eathena/mail2recv.cpp
+++ b/src/net/eathena/mail2recv.cpp
@@ -467,10 +467,31 @@ void Mail2Recv::processRequestMoney(Net::MessageIn &msg)
void Mail2Recv::processRequestItems(Net::MessageIn &msg)
{
- UNIMPLEMENTEDPACKET;
- msg.readInt64("mail id");
+ const int64_t mailId = msg.readInt64("mail id");
msg.readUInt8("open type");
- msg.readUInt8("result");
+ const int res = msg.readUInt8("result");
+ switch (res)
+ {
+ case 0:
+ NotifyManager::notify(
+ NotifyTypes::MAIL_GET_ATTACH_OK);
+ if (mailViewWindow)
+ mailViewWindow->removeItems(mailId);
+ break;
+ case 1:
+ NotifyManager::notify(
+ NotifyTypes::MAIL_GET_ATTACH_ERROR);
+ break;
+ case 2:
+ NotifyManager::notify(
+ NotifyTypes::MAIL_GET_ATTACH_FULL_ERROR);
+ break;
+ default:
+ UNIMPLEMENTEDPACKETFIELD(res);
+ NotifyManager::notify(
+ NotifyTypes::MAIL_GET_ATTACH_ERROR);
+ break;
+ }
}
} // namespace EAthena
diff --git a/src/resources/notifications.h b/src/resources/notifications.h
index a5b7a725f..08526bb81 100644
--- a/src/resources/notifications.h
+++ b/src/resources/notifications.h
@@ -893,6 +893,10 @@ namespace NotifyManager
// TRANSLATORS: notification message
N_("Mail send failed. Receiver name wrong or not checked."),
NotifyFlags::EMPTY},
+ {"mail get attach full error",
+ // TRANSLATORS: notification message
+ N_("Error on getting attach. No space or weight too high."),
+ NotifyFlags::EMPTY},
};
} // namespace NotifyManager
#endif // RESOURCES_NOTIFICATIONS_H