{ AdvancedAutoAway Plugin for Miranda-IM (www.miranda-im.org) KeepStatus Plugin for Miranda-IM (www.miranda-im.org) StartupStatus Plugin for Miranda-IM (www.miranda-im.org) Copyright 2003-2006 P. Boon This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. 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. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } {$IFNDEF M_STATUSPLUGINS} {$DEFINE M_STATUSPLUGINS} // -- common status -- (all three plugins) type PROTOCOLSETTINGEX = record cbSize :integer; szName :PAnsiChar; // pointer to protocol modulename szMsg :TChar; // pointer to the status message (may be NULL) status :word; // the status lastStatus:word; // last status tszAccName:TChar; end; const // wParam = PROTOCOLSETTINGEX*** (keep it like this for compatibility) // lParam = 0 // returns 0 on success MS_CS_SETSTATUSEX:PAnsiChar = 'CommonStatus/SetStatusEx'; // wParam = PROTOCOLSETTINGEX*** (keep it like this for compatibility) // lParam = timeout // returns hwnd MS_CS_SHOWCONFIRMDLGEX:PAnsiChar = 'CommonStatus/ShowConfirmDialogEx'; // wParam = 0 // lParam = 0 // returns the number of protocols registerd MS_CS_GETPROTOCOUNT:PAnsiChar = 'CommonStatus/GetProtocolCount'; // added dec '04 // wParam = PROTOCOLSETTINGEX*** (keep it like this for compatibility) // lParam = 0 ME_CS_STATUSCHANGEEX:PAnsiChar = 'CommonStatus/StatusChangeEx'; { // wParam = protoCount // lParam = 0 ME_CS_CSMODULELOADED:PAnsiChar = 'CommonStatus/CommonStatusLoaded'; } // -- startup status -- // wParam = profile number (set to -1 to get default profile) // lParam = PROTOCOLSETTINGEX*** (keep for... )(memory must be allocated protoCount*PROTOCOLSETTINGEX* and protoCount*PROTOCOLSETTINGEX) // szMsg member does not have to be freed // returns 0 on success MS_SS_GETPROFILE:PAnsiChar = 'StartupStatus/GetProfile'; // don't use this > jan '05, internal use only // wParam = profile number // lParam = 0 // return 0 on success MS_SS_LOADANDSETPROFILE:PAnsiChar = 'StartupStatus/LoadAndSetProfile'; // you can use this // wParam = int*, maybe NULL sets this int to the default profile number // lParam = 0 // returns profile count MS_SS_GETPROFILECOUNT:PAnsiChar = 'StartupStatus/GetProfileCount'; // wParam = profile number // lParam = AnsiChar* (must be allocated, size = 128) // returns 0 on success MS_SS_GETPROFILENAME:PAnsiChar = 'StartupStatus/GetProfileName'; // -- AdvancedAutoAway -- type STATES = [ ACTIVE, // user is active STATUS1_SET, // first status change happened STATUS2_SET, // second status change happened SET_ORGSTATUS, // user was active again, original status will be restored HIDDEN_ACTIVE, // user is active, but this is not shown to the outside world // STATUS1_SET2, // first status change happened, but user may be active ('on inactive only was disabled') // STATUS2_SET2 // second status change happened, but user may be active ('on inactive only was disabled') ]; type AUTOAWAYSETTING = record protocolSetting :^PROTOCOLSETTINGEX; originalStatusMode:int; // this is set only when going from ACTIVE to // STATUS1_SET (or to STATUS2_SET) // (note: this is therefore not always valid) oldState :STATES; // state before the call curState :STATES; // current state bstatusChanged :bool; // the status of the protocol will actually be changed // (note: unlike the name suggests, the status is // changed AFTER this hook is called) bManual :bool; // state changed becuase status was changed manually end; // wParam = 0; // lParam = AUTOAWAYSETTING* // Called when a protocol's state in AAA is changed this does NOT necessary means the status was changed // note: this hook is called for each protocol seperately const ME_AAA_STATECHANGED:PAnsiChar = 'AdvancedAutoAway/StateChanged'; { type AAAOPTPAGE = record cbSize :int; pszText :PAnsiChar; hInst :HINSTANCE; pfnDlgProc :DLGPROC; pszTemplate:PAnsiChar; end; const // lParam=(LPARAM)(AAAOPTPAGE)&aop MS_AAA_REGISTEROPTIONPAGE:PAnsiChar = 'AdvancedAutoAway/RegisterOptionPage'; } // -- KeepStatus -- KS_CONN_STATE_LOST = 1; // lParam = protocol KS_CONN_STATE_OTHERLOCATION = 2; // lParam = protocol KS_CONN_STATE_RETRY = 3; // lParam = nth retry KS_CONN_STATE_STOPPEDCHECKING = 4; // lParam = TRUE if success, FALSE if failed KS_CONN_STATE_LOGINERROR = 5; // lParam = protocol, only if selected in options KS_CONN_STATE_RETRYNOCONN = 6; // lParam = nth try, a connection attempt will not be made // wParam = one of above // lParam depends on wParam ME_KS_CONNECTIONEVENT:PAnsiChar = 'KeepStatus/ConnectionEvent'; // wParam = 0 // lParam = 0 // returns 0 on succes, nonzero on failure, probably keepstatus wasn't reconnecting MS_KS_STOPRECONNECTING:PAnsiChar = 'KeepStatus/StopReconnecting'; // wParam = TRUE to enable checking a protocol, FALSE to disable checking a protocol // lParam = protocol // return 0 on success, nonzero on failure, probably the protocol is 'hard' disabled or not found // note: you cannot enable a protocol that is disabled in the options screen, you can disable a protocol // if it's enabled in the option screen. MS_KS_ENABLEPROTOCOL:PAnsiChar = 'KeepStatus/EnableProtocol'; // wParam = 0 // lParam = protocol // returns TRUE if protocol is enabled for checked, FALSE otherwise MS_KS_ISPROTOCOLENABLED:PAnsiChar = 'KeepStatus/IsProtocolEnabled'; // Indicate the status will be changed which will not be regarded as a connection failure. // wParam = 0 // lParam = PROTOCOLSETTINGEX* of the new situation // returns 0 MS_KS_ANNOUNCESTATUSCHANGE:PAnsiChar = 'KeepStatus/AnnounceStatusChange'; function announce_status_change(szProto:PAnsiChar;newstatus:integer;szMsg:TChar):integer;// cdecl; var ps:PROTOCOLSETTINGEX; begin FillChar(ps,SizeOf(PROTOCOLSETTINGEX),0); ps.cbSize:=SizeOf(PROTOCOLSETTINGEX); if szProto<>NIL then ps.lastStatus:=CallProtoService(szProto, PS_GETSTATUS, 0, 0); else ps.lastStatus:=CallService(MS_CLIST_GETSTATUSMODE, 0, 0); ps.status:=newstatus; ps.szMsg :=szMsg; ps.szName:=szProto; result:=CallService(MS_KS_ANNOUNCESTATUSCHANGE, 0,dword(@ps)); end; {$ENDIF}