/*

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.

*/

void MRIM_CList_SyncApparentModeToMiranda(HANDLE hContact,unsigned long mrimflags)
{
unsigned long oldflags;
unsigned long mode;
unsigned long oldMode;

oldMode = DBGetContactSettingWord(hContact,ProtoName,DB_SETTING_APPARENTMODE,0);
oldflags = DBGetContactSettingDword(hContact,ProtoName,DB_SETTING_FLAGS,0);
mode = 0;
if((mrimflags&CONTACT_FLAG_VISIBLE) == CONTACT_FLAG_VISIBLE)
    {
    mode |= ID_STATUS_ONLINE;
    }
if((mrimflags&CONTACT_FLAG_INVISIBLE) == CONTACT_FLAG_INVISIBLE)
    {
    mode |= ID_STATUS_OFFLINE;
    }
if(mode != oldMode)
    DBWriteContactSettingWord(hContact,ProtoName,DB_SETTING_APPARENTMODE,(WORD)mode);
if(mrimflags != oldflags)
    DBWriteContactSettingDword(hContact,ProtoName,DB_SETTING_FLAGS,(WORD)mrimflags);
}

int MRIM_SetApparentMode(WPARAM wParam,LPARAM lParam)
{
int retval = 1;
CCSDATA *ccs;
DBVARIANT v_email;
DBVARIANT v_name;
DBCONTACTGETSETTING cgs;
unsigned long num;
unsigned long flags;
int oldMode;

//MessageBox(NULL,"SetApparentMode()","Info",MB_OK);
if(lParam != NULL)
    {
    ccs = (CCSDATA*)lParam;
    if(ccs->hContact != NULL)
        {
        cgs.szModule = ProtoName;
        cgs.szSetting = DB_SETTING_EMAIL;
        cgs.pValue = &v_email;
        if(CallService(MS_DB_CONTACT_GETSETTING,(WPARAM)(ccs->hContact),(LPARAM)&cgs) == 0)
            {
            cgs.szModule = DB_SETTING_CLIST;
            cgs.szSetting = DB_SETTING_CLIST_MYHANDLE;
            cgs.pValue = &v_name;
            if(CallService(MS_DB_CONTACT_GETSETTING,(WPARAM)(ccs->hContact),(LPARAM)&cgs) == 0)
                {
                if((num=DBGetContactSettingDword((ccs->hContact),ProtoName,DB_SETTING_NUMBER,0)) != 0)
                    {
                    flags = DBGetContactSettingDword((ccs->hContact),ProtoName,DB_SETTING_FLAGS,0);
                    if((ccs->wParam == 0)||(ccs->wParam == ID_STATUS_ONLINE)||(ccs->wParam == ID_STATUS_OFFLINE))
                        {
                        oldMode = DBGetContactSettingWord(ccs->hContact,ProtoName,DB_SETTING_APPARENTMODE,0);
                        if((int)ccs->wParam != oldMode)
                            {
                            if(ccs->wParam == 0)
                                {
                                //MessageBox(NULL,"0","MRIM_SetApparentMode()",MB_OK);
                                if((flags&CONTACT_FLAG_VISIBLE) == CONTACT_FLAG_VISIBLE)
                                    {
                                    flags ^= CONTACT_FLAG_VISIBLE;
                                    }
                                if((flags&CONTACT_FLAG_INVISIBLE) == CONTACT_FLAG_INVISIBLE)
                                    {
                                    flags ^= CONTACT_FLAG_INVISIBLE;
                                    }
                                }
                            else if(ccs->wParam == ID_STATUS_ONLINE)
                                {
                                //MessageBox(NULL,"ID_STATUS_ONLINE","MRIM_SetApparentMode()",MB_OK);
                                flags |= CONTACT_FLAG_VISIBLE;
                                }
                            else if(ccs->wParam == ID_STATUS_OFFLINE)
                                {
                                //MessageBox(NULL,"ID_STATUS_OFFLINE","MRIM_SetApparentMode()",MB_OK);
                                flags |= CONTACT_FLAG_INVISIBLE;
                                }
                            if(MRIM_do_modify(num,v_email.pszVal,flags,0,v_name.pszVal) == 0)
                                {
                                DBWriteContactSettingWord(ccs->hContact,ProtoName,DB_SETTING_APPARENTMODE,(WORD)ccs->wParam);
                                retval = 0;
                                }
                            }
                        }
                    }
                DBFreeVariant(&v_name);
                }
            DBFreeVariant(&v_email);
            }
        }
    }
return(retval);
}
