/*

MAgen.dll: Miranda plugin for mail.ru message exchange.

Copyright 2005-2010 Lenik.
Project home at http://www.lenik.ru/win32/magent
Author contact: lenik@lenik.ru

This program is free software.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

*/

unsigned long MRIM_NewMailGetNotifyByPopup(void)
{
if(DBGetContactSettingDword(NULL,ProtoName,DB_SETTING_NMPN,0) != 0)
    return(1);
return(0);
}

void MRIM_NewMailSetNotifyByPopup(unsigned long flag)
{
DBWriteContactSettingDword(NULL,ProtoName,DB_SETTING_NMPN,flag==0?0:1);
}

struct NewMailBoxMessagesThread_Data
    {
    unsigned long thid;
    MIRANDASYSTRAYNOTIFY tn;
    DBVARIANT dbv_login;
    unsigned char buffer[50];
    unsigned char buffer1[70];
    HANDLE hContact;
    DBEVENTINFO dbei;
    };

void NewMailBoxMessagesThread(struct NewMailBoxMessagesThread_Data *p)
{
unsigned long omppup = 0xFF;
unsigned long mppup = 0;
unsigned long popupflag = 0;
unsigned long messageflag = 0;

while(1)
    {
    Sleep(4000);
    if(DBGetContactSettingByte(NULL,ProtoName,DB_SETTING_NEWMAILNOTIFY,0) == 0)
        {
        popupflag = 0;
        messageflag = 0;
        continue;
        }
    mppup = MRIM_NewMailGetNotifyByPopup();
    if(mppup != omppup)
        {
        popupflag = 0;
        messageflag = 0;
        omppup = mppup;
        }
    if(popupflag != 0)popupflag--;
    if((messageflag != 0)&&(MRIM_NewMessagesCount == 0))messageflag = 0;
    if(MRIM_NewMessagesCount != 0)
        {
        sprintf(p->buffer,Translate("%lu New Messages"),MRIM_NewMessagesCount);
        strcpy(p->buffer1,Translate("Mailbox"));
        if(DBGetContactSetting(NULL,ProtoName,DB_SETTING_EMAIL,&(p->dbv_login)) == 0)
            {
            sprintf(p->buffer1,Translate("%s Mailbox"),p->dbv_login.pszVal);
            DBFreeVariant(&(p->dbv_login));
            }
        }
    if((mppup == 1)&&(ServiceExists(MS_CLIST_SYSTRAY_NOTIFY) != 0)&&(MRIM_NewMessagesCount != 0)&&(popupflag == 0))
        {
        p->tn.szProto = ProtoName;
        p->tn.cbSize = sizeof(p->tn);
        p->tn.szInfoTitle = p->buffer1;
        p->tn.szInfo = p->buffer;
        p->tn.dwInfoFlags = NIIF_INFO;
        p->tn.uTimeout = 3000; // 3 sec ?
        if(CallService(MS_CLIST_SYSTRAY_NOTIFY,0,(LPARAM)&(p->tn)) == 0)
            popupflag = 12;
        }
    if((mppup == 0)&&(MRIM_NewMessagesCount != 0)&&(messageflag == 0))
        {
        //MessageBox(NULL,p->buffer,p->buffer1,MB_OK);
        p->hContact = HContactFromEMail(p->buffer1,1,1);
        MRIM_SetMirandaStatus(p->buffer1,STATUS_ONLINE);
        p->dbei.cbSize = sizeof(p->dbei);
        p->dbei.szModule = ProtoName;
        p->dbei.timestamp = gettimestamp();
        p->dbei.flags = 0;
        p->dbei.eventType = EVENTTYPE_MESSAGE;
        p->dbei.cbBlob = strlen(p->buffer) + 1;
        p->dbei.pBlob = (PBYTE)p->buffer;
        if(CallService(MS_DB_EVENT_ADD,(WPARAM)(p->hContact),(LPARAM)&(p->dbei)) != NULL)
            messageflag = 1;
        }
    }
}
