Jump to content
Alloder.pro: about Allods with love
Search In
  • More options...
Find results that contain...
Find results in...

New program for writers

We turn from quantity to quality and tell you how we will supplement the Allods Team program with rewards in rubles.

More

The new Updater

Let us to introduce the new addon updater software and to share the details

Read more

Alloder 2.0

We have started the process of project evolve, and this relates not only, and not even primarily of the site's view

Read more

Работа с почтой


zhem4ag
 Share

Recommended Posts

Недавно захотел написать свой аддон и для начала хотел поработать с почтой, но столкнулся со следующей проблемой.

Мне нужно было узнать число писем в почтовом ящике и для этого я написал следующее:

Code:

Global("wtMainPanel", nil)

Global("wtText", nil)

Global("mailIds", {})

function RegEvents() 

common.RegisterEventHandler(OnMailboxActivated, "EVENT_MAILBOX_ACTIVATED")

end

function RegWidgets()

wtMainPanel = mainForm:GetChildChecked("MainPanel", false)

wtText = wtMainPanel:GetChildChecked("Text", false)

end

function OnMailboxActivated()

mailIds = mailBox.RequestMailIds()

local mailCount = GetTableSize(mailIds)

wtText:SetVal("value", common.FormatInt(mailCount, "%d"))

end

function Init()

RegEvents()

RegWidgets()

end

Init()

В результате на экране я увидел 0, хотя в почте есть письма, правда они все были открыты.

Или функция RequestMailIds() возвращает только Id непрочитанных писем?

Если так, то как можно узнать список Id всех писем в почтовом ящике?

Link to comment
Share on other sites

Вроде, всё написано правильно.

Функция mailBox.RequestMailIds() используется в аддонах AutoDeleteMail и AucEDSman именно для получения количества писем.

Может быть, какая-то другая ошибка произошла, может, что-нибудь есть в логе Mods.txt?

Кстати, эта функция, "при необходимости" запрашивает данные с сервера:

Quote:
Выдает текущий известный список писем. При необходимости отсылается запрос на обновление списка. При необходимости отсылается запрос на обновление списка.

В аддоне AutoDeleteMail, она, для верности, окружена проверкой на mailBox.IsReady():

Code:
if mailBox.IsReady() then

mailTempList = mailBox.RequestMailIds()

end

Link to comment
Share on other sites

Не понимаю я чего-то. В теории всё должно работать. Дополнил функцию:

Code:

function OnMailboxActivated()

LogInfo("mailStart...")

if mailBox.IsActive() then

mailIds = mailBox.RequestMailIds()

end

local mailCount = GetTableSize(mailIds)

LogInfo("mailCount = ", mailCount)

wtText:SetVal("value", common.FormatInt(mailCount, "%d"))

end

И на экране я вижу 0 и в mods.txt не вижу ошибок, только то что я хотел вывести:

Code:

Info: addon Test: mailStart...

Info: addon Test: mailCount = 0

После всего этого, используя аддон AucEDSman, забираю все деньги из почты. Правда не всё сразу, а поочереди из каждого письма. Но он хоть как-то работает. А у меня-то говорит, что почта вообще пуста.

Есть идеи?

Link to comment
Share on other sites

Возможно, в этом коде где-то закралась ошибка, незаметная глазу. В таких случаях, иногда, проще переписать кусочек кода заново, чем искать в нём эту ошибку.

Если не поможет, то можно пробовать миксовать код рабочего аддона с нерабочим. Буквально, взять какой-нибудь AucEDSman или AutoDeleteMail, и постепенно превращать его в свой аддон, проверяя на каждом шаге, работает ли он. До тех пор, пока он не превратится в твой аддон, только рабочий. Затем, если будет всё ещё неясно, в чём разница между рабочей и нерабочей версиями аддона - сравнить их в WinMerge.

Link to comment
Share on other sites

  • 2 weeks later...

нет - код нормальный но логика ненормальная

дело в том что в такой системе как клиент-сервер все надо строить на событиях - а событие OnMailboxActivated() - не дает факта о том что получен список.

короче говоря - окно почты хоть и открыто, но список писем еще не получен

попробуйте эти события:

EVENT_MAILS_CHANGED

EVENT_MAILBOX_CHANGED

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

By using our site you agree to the Terms of Use