From 3f4b8991fea70f26d296817bc5f8b72a35098440 Mon Sep 17 00:00:00 2001 From: mataes2007 Date: Sun, 15 May 2011 07:43:27 +0000 Subject: ExternalAPI: update git-svn-id: http://miranda-plugins.googlecode.com/svn/trunk@93 e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb --- ExternalAPI/m_account.h | 239 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 239 insertions(+) create mode 100644 ExternalAPI/m_account.h (limited to 'ExternalAPI/m_account.h') diff --git a/ExternalAPI/m_account.h b/ExternalAPI/m_account.h new file mode 100644 index 0000000..2baadd2 --- /dev/null +++ b/ExternalAPI/m_account.h @@ -0,0 +1,239 @@ +/* + * This file defines all needed parameters for one account. + * Other plugin can use this (so YAMN does not check it and another plugin can inform YAMN about new mail e.g.), + * this can be usefull for plugins like Yahoo or MSN (Hotmail notify) + * + * (c) majvan 2002-2004 + */ + +#ifndef __ACCOUNT_H +#define __ACCOUNT_H + +#include +#include +#include "m_synchro.h" //include synchronizing objects. If you want to write protocol plugin, which works with YAMN accounts, it must use YAMN synchronizing objects + +// +//================================== OTHER DEFINITIONS ======================================== +// + +enum +{ +// Error codes returned from functions (services) working with account book files + EACC_SYSTEM=1, //use GetLastError() to retrieve detailed information about error + EACC_ALLOC, //problem with memory allocation + EACC_FILECOMPATIBILITY, //file is corrupted + EACC_ENDOFFILE, //unexpected end of file occured + EACC_FILEVERSION, //file should be YAMN book format, but newer version that expected + EACC_FILESIZE, //file has wrong size +}; + +enum +{ +// Status of account +// used in messages WM_YAMN_CHANGESTATUS +// used also in function GetStatus and SetStatus + ACC_IDLE=0, //account is IDLE (no work is performed with account) + ACC_FINDING, //DNS lookup for account + ACC_CONNECTING, //connecting in progress + ACC_LOGGING, //logging in progress + ACC_WORKING, //working + ACC_DISCONNECTING, //disconnecting from server +}; + +typedef struct CNotification +{ +//#define YAMN_NOTIFICATIONVERSION is not implemented, use YAMN_ACCOUNTVERSION instead + CNotification(): PopUpB(0), PopUpT(0), PopUpTime(0), App(NULL), AppParam(NULL), Sound(NULL), TrayIcon1(NULL), TrayIcon2(NULL) {} + +#define YAMN_ACC_SND 0x00000001 //Plays sound (1) +#define YAMN_ACC_MSG 0x00000002 //Shows dialog +#define YAMN_ACC_ICO 0x00000004 //Shows system tray icon (1) +#define YAMN_ACC_ICOB 0x00000008 //not used now, enables tray icon flashing (1) +#define YAMN_ACC_APP 0x00000010 //Runs application (1) +#define YAMN_ACC_POP 0x00000020 //Shows popup +#define YAMN_ACC_POPC 0x00000040 //Use custom colors in popup +#define YAMN_ACC_MSGP 0x00000080 //Persistant messgage. This means, when an situation occurs (e.g. new mail) and message is displayed, it is not destroyed when YAMN_ACC_MSG is not set +#define YAMN_ACC_KBN 0x00000100 //Use Keyboard notify +#define YAMN_ACC_CONT 0x00000200 //Use Contact notify +#define YAMN_ACC_CONTNICK 0x00000400 //Use Contact Nick replacement +#define YAMN_ACC_CONTNOEVENT 0x00000800 //Suppress event for this contact +//(1) - usable only in newmail notification + DWORD Flags; + + COLORREF PopUpB; + COLORREF PopUpT; + DWORD PopUpTime; + WCHAR *App; + WCHAR *AppParam; + +//These parameters are not stored in standard YAMN book file and therefore must be set by plugin + char *Sound; + HICON TrayIcon1; + HICON TrayIcon2; +} YAMN_NOTIFICATION,*PYAMN_NOTIFICATION; + +typedef struct CServer +{ + CServer(): Name(NULL),Login(NULL),Passwd(NULL) {} + + TCHAR *Name; + DWORD Port; + + TCHAR *Login; + +// Password encryption definitions +#define STARTCODEPSW 0x50 +#define ADDCODEPSW 0x0 + TCHAR *Passwd; + +} *PSERVER; + +// +//================================== ACCOUNT DEFINITION ================================== +// + +typedef struct CAccount +{ +#define YAMN_ACCOUNTFILEVERSION 2 //version of standard file format (YAMN book file format) +#define YAMN_ACCOUNTVERSION 3 +//If changes are made in this structure, version is changed. +//So then YAMN does not initialzie your structure, if version does not matches. + + BOOL AbleToWork; //This is set to TRUE by default. When it is needed to stop working on this account, YAMN sets this to zero. + + struct CYAMNProtoPlugin *Plugin; //free access, because this member should not be changed. The same as YAMN_PLUGIN structure + + TCHAR *Name; //access only through AccountAccessSO + +// DWORD Abilities; //access only through AccountAccessSO + + PSERVER Server; //access only through AccountAccessSO + + WORD Interval; //access only through AccountAccessSO + +// YAMN account flags (set by user) +#define YAMN_ACC_ENA 0x00000001 //Enables account. If account is disabled, no countdown is performed +#define YAMN_ACC_POPN 0x00000002 //Shows one popup per one new mail or for N mails +#define YAMN_ACC_APOP 0x00000004 //Use APOP authentication +#define YAMN_ACC_SSL23 0x00000008 //Use SSLv2,3 +#define YAMN_ACC_NOTLS 0x00000010 //Don't try StartTLS (STLS) even available +#define YAMN_ACC_BODY 0x00000020 //Always retrieve body of the message + DWORD Flags; //access only through AccountAccessSO + +// YAMN account flags (set by plugin) +#define YAMN_ACC_BROWSE 0x00000001 //Can browse mails. On this account we can run mailbrowser window +#define YAMN_ACC_POPUP 0x00000002 //Popups of new mail belonging to this account can be showed + DWORD AbilityFlags; + +// YAMN account status flags +#define YAMN_ACC_ST0 0x00000001 //Check (countdown) when Offline +#define YAMN_ACC_ST1 0x00000002 //Check (countdown) when Online +#define YAMN_ACC_ST2 0x00000004 //Check (countdown) when Away +#define YAMN_ACC_ST3 0x00000008 //Check (countdown) when N/A +#define YAMN_ACC_ST4 0x00000010 //Check (countdown) when Occupied +#define YAMN_ACC_ST5 0x00000020 //Check (countdown) when DND +#define YAMN_ACC_ST6 0x00000040 //Check (countdown) when Free for chat +#define YAMN_ACC_ST7 0x00000080 //Check (countdown) when Invisible +#define YAMN_ACC_ST8 0x00000100 //Check (countdown) when On the phone +#define YAMN_ACC_ST9 0x00000200 //Check (countdown) when Out to lunch +#define YAMN_ACC_STARTA 0x00010000 //Check on start anyway +#define YAMN_ACC_STARTS 0x00020000 //Check on start regarding to status setting +#define YAMN_ACC_FORCE 0x00040000 //Check when "check new mail" item pressed (it is called forced checking) + DWORD StatusFlags; //access only through AccountAccessSO + +// Plugin flags. Use this DWORD if you want YAMN to store it to YAMN book file. You can set here any value + DWORD PluginFlags; + + YAMN_NOTIFICATION NewMailN; //access only through AccountAccessSO + YAMN_NOTIFICATION NoNewMailN; //access only through AccountAccessSO + YAMN_NOTIFICATION BadConnectN; //access only through AccountAccessSO + + SYSTEMTIME LastChecked; //last check, access only through AccountAccessSO + SYSTEMTIME LastSChecked; //last check (successfull), access only through AccountAccessSO + SYSTEMTIME LastSynchronised; //last synchronisation (successfull), access only through AccountAccessSO + SYSTEMTIME LastMail; //last check when new mail detected, access only through AccountAccessSO + + char Status[255]; //access only through GetStatusFcn() and SetStatusFcn() functions + + DWORD TimeLeft; //access only through AccountAccessSO + + HANDLE Mails; //access only through MessagesAccessSO + +//Account members are mostly the same, but there can be protocol (POP3,IMAP...) special features. +//To use them, only inherit this class and add your own features. +//First idea was to add pointer to void, where plugin can store its own values. +//But this solution is better in my opinion. + +//This is event with counter. Event is signaled when no threads are using account (and will not be using) +//Very usefull for account delete operation + PSCOUNTER UsingThreads; + +//We have to achieve, that only one thread can write to account and more threads can read. +//Writing to account means that we change account parameters +//Reading from account meands we read account parameters +//Use WaitToRead(), ReadDone(), WaitToWrite(), WriteDone() synchronization functions +//For plugins, this is a pointer to void. It does not matter for plugin what is this variable for, +//because plugin works only with synchronization routines. And why is this void * ? It is because +//plugin does not need to include headers for SWMRG structures... + PSWMRG AccountAccessSO; + +//We have to achieve, that only one thread can write to account mails and more threads can read. +//While some thread writes mails, other thread can write to account. This can be small problem, but it never appears in YAMN. +//But you should think about this note if you want to add some features in the future +//Writing to messages means any changes to message queue or message data +//Reading from messages means reading message queue (browsing through all messages) or reading message data +//Use MsgsWaitToRead(),MsgsReadDone(),MsgsWaitToWrite(),MsgsWriteDone() synchronization functions + PSWMRG MessagesAccessSO; + +//For clist contact notification + HANDLE hContact; + BOOL isCounting; + + struct CAccount *Next; +} *HACCOUNT; + +// +//================================== FUNCTIONS DEFINITIONS ======================================== +// + +typedef void (WINAPI *YAMN_SETSTATUSFCN)(HACCOUNT,TCHAR *); +typedef void (WINAPI *YAMN_GETSTATUSFCN)(HACCOUNT,TCHAR *); + +// +//================================== QUICK FUNCTION CALL DEFINITIONS ======================================== +// + +//These are defininitions for YAMN exported functions. Your plugin can use them. +//pYAMNFcn is global variable, it is pointer to your structure containing YAMN functions. +//It is something similar like pluginLink variable in Miranda plugin. If you use +//this name of variable, you have already defined these functions and you can use them. +//It's similar to Miranda's CreateService function. + +//How to use YAMN functions: +//Create a structure containing pointer to functions you want to use in your plugin +//This structure can look something like this: +// +// struct +// { +// YAMN_SETSTATUSFCN SetStatusFcn; +// YAMN_GETSTATUSFCN GetStatusFcn; +// } *pYAMNFcn; +// +//then you have to fill this structure with pointers... +// +// pYAMNFcn->SetStatusFcn=(YAMN_SETSTATUSFCN)CallService(MS_YAMN_GETFCNPTR,(WPARAM)YAMN_SETSTATUSID,(LPARAM)0); +// pYAMNFcn->GetStatusFcn=(YAMN_GETSTATUSFCN)CallService(MS_YAMN_GETFCNPTR,(WPARAM)YAMN_GETSTATUSID,(LPARAM)0); +// +//and in your plugin just simply use e.g.: +// +// SetAccountStatus(ActualAccount,ACC_CONNECTING); //this command set account status to "connecting to server" +// + +#define YAMN_SETSTATUSID "YAMN/SetStatus" +#define YAMN_GETSTATUSID "YAMN/GetStatus" + +#define SetAccountStatus(x,y) pYAMNFcn->SetStatusFcn(x,y) +#define GetAccountStatus(x,y) pYAMNFcn->GetStatusFcn(x,y) + +#endif -- cgit v1.2.3