diff options
| -rw-r--r-- | plugins/CryptoPP/src/version.h | 2 | ||||
| -rw-r--r-- | plugins/SeenPlugin/src/main.cpp | 32 | ||||
| -rw-r--r-- | plugins/SeenPlugin/src/utils.cpp | 42 | ||||
| -rw-r--r-- | plugins/SeenPlugin/src/version.h | 2 | 
4 files changed, 43 insertions, 35 deletions
diff --git a/plugins/CryptoPP/src/version.h b/plugins/CryptoPP/src/version.h index 59f24b02fd..8d7c950b88 100644 --- a/plugins/CryptoPP/src/version.h +++ b/plugins/CryptoPP/src/version.h @@ -1,7 +1,7 @@  #define __MAJOR_VERSION				1
  #define __MINOR_VERSION				0
  #define __RELEASE_NUM				4
 -#define __BUILD_NUM					4
 +#define __BUILD_NUM					5
  #define __FILEVERSION_STRING		__MAJOR_VERSION,__MINOR_VERSION,__RELEASE_NUM,__BUILD_NUM
  #define __TOSTRING(x)				#x
 diff --git a/plugins/SeenPlugin/src/main.cpp b/plugins/SeenPlugin/src/main.cpp index 101681cb66..650382c8b6 100644 --- a/plugins/SeenPlugin/src/main.cpp +++ b/plugins/SeenPlugin/src/main.cpp @@ -22,6 +22,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.  HINSTANCE hInstance;
  HANDLE ehmissed = NULL, ehuserinfo = NULL, ehmissed_proto = NULL;
 +HANDLE g_hShutdownEvent;
  int hLangpack;
 @@ -91,6 +92,23 @@ int MainInit(WPARAM wparam,LPARAM lparam)  	return 0;
  }
 +static int OnShutdown(WPARAM, LPARAM)
 +{
 +	SetEvent(g_hShutdownEvent);
 +	return 0;
 +}
 +
 +extern "C" __declspec(dllexport) int Load(void)
 +{
 +	mir_getLP(&pluginInfo);
 +
 +	g_hShutdownEvent = CreateEvent(0, TRUE, FALSE, 0); 
 +
 +	HookEvent(ME_SYSTEM_MODULESLOADED, MainInit);
 +	HookEvent(ME_SYSTEM_PRESHUTDOWN, OnShutdown);
 +	return 0;
 +}
 +
  extern "C" __declspec(dllexport) PLUGININFOEX * MirandaPluginInfoEx(DWORD mirandaVersion)
  {
  	return &pluginInfo;
 @@ -101,6 +119,7 @@ extern "C" __declspec(dllexport) int Unload(void)  	if (ehmissed)
  		UnhookEvent(ehmissed);
 +	CloseHandle(g_hShutdownEvent);
  	UninitMenuitem();
  	return 0;
  }
 @@ -110,16 +129,3 @@ BOOL WINAPI DllMain(HINSTANCE hinst, DWORD fdwReason, LPVOID lpvReserved)  	hInstance=hinst;
  	return 1;
  }
 -
 -extern "C" __declspec(dllexport) int Load(void)
 -{
 -
 -	mir_getLP(&pluginInfo);
 -	// this isn't required for most events
 -	// but the ME_USERINFO_INITIALISE
 -	// I decided to hook all events after
 -	// everything is loaded because it seems
 -	// to be safer in my opinion
 -	HookEvent(ME_SYSTEM_MODULESLOADED,MainInit);
 -	return 0;
 -}
\ No newline at end of file diff --git a/plugins/SeenPlugin/src/utils.cpp b/plugins/SeenPlugin/src/utils.cpp index 0fc11a7c90..8eb1f01f37 100644 --- a/plugins/SeenPlugin/src/utils.cpp +++ b/plugins/SeenPlugin/src/utils.cpp @@ -23,6 +23,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.  void FileWrite(HANDLE);
  void HistoryWrite(HANDLE hcontact);
 +extern HANDLE g_hShutdownEvent;
  char * courProtoName = 0;
  /*
 @@ -675,30 +676,31 @@ static void cleanThread(void *param)  {
  	logthread_info* infoParam = (logthread_info*)param;
 -	Sleep(10000); // I hope in 10 secons all logged-in contacts will be listed
 -
 -	HANDLE hcontact = db_find_first();
 -	while(hcontact != NULL) {
 -		char *contactProto = GetContactProto(hcontact);
 -		if (contactProto) {
 -			if ( !strncmp(infoParam->sProtoName, contactProto, MAXMODULELABELLENGTH)) {
 -				WORD oldStatus = db_get_w(hcontact,S_MOD,"StatusTriger",ID_STATUS_OFFLINE) | 0x8000;
 -				if (oldStatus > ID_STATUS_OFFLINE) {
 -					if (db_get_w(hcontact,contactProto,"Status",ID_STATUS_OFFLINE)==ID_STATUS_OFFLINE){
 -						db_set_w(hcontact,S_MOD,"OldStatus",(WORD)(oldStatus|0x8000));
 -						if (includeIdle)db_set_b(hcontact,S_MOD,"OldIdle",(BYTE)((oldStatus&0x8000)?0:1));
 -						db_set_w(hcontact,S_MOD,"StatusTriger",ID_STATUS_OFFLINE);
 +	// I hope in 10 secons all logged-in contacts will be listed
 +	if ( WaitForSingleObject(g_hShutdownEvent, 10000) == WAIT_TIMEOUT) {
 +		HANDLE hcontact = db_find_first();
 +		while(hcontact != NULL) {
 +			char *contactProto = GetContactProto(hcontact);
 +			if (contactProto) {
 +				if ( !strncmp(infoParam->sProtoName, contactProto, MAXMODULELABELLENGTH)) {
 +					WORD oldStatus = db_get_w(hcontact,S_MOD,"StatusTriger",ID_STATUS_OFFLINE) | 0x8000;
 +					if (oldStatus > ID_STATUS_OFFLINE) {
 +						if (db_get_w(hcontact,contactProto,"Status",ID_STATUS_OFFLINE)==ID_STATUS_OFFLINE){
 +							db_set_w(hcontact,S_MOD,"OldStatus",(WORD)(oldStatus|0x8000));
 +							if (includeIdle)db_set_b(hcontact,S_MOD,"OldIdle",(BYTE)((oldStatus&0x8000)?0:1));
 +							db_set_w(hcontact,S_MOD,"StatusTriger",ID_STATUS_OFFLINE);
 +						}
  					}
  				}
  			}
 +			hcontact = db_find_next(hcontact);
  		}
 -		hcontact = db_find_next(hcontact);
 -	}
 -	char *str = (char *)malloc(MAXMODULELABELLENGTH+9);
 -	mir_snprintf(str,MAXMODULELABELLENGTH+8,"OffTime-%s",infoParam->sProtoName);
 -	db_unset(NULL,S_MOD,str);
 -	free(str);
 +		char *str = (char *)malloc(MAXMODULELABELLENGTH+9);
 +		mir_snprintf(str,MAXMODULELABELLENGTH+8,"OffTime-%s",infoParam->sProtoName);
 +		db_unset(NULL,S_MOD,str);
 +		free(str);
 +	}
  	free(infoParam);
  }
 @@ -719,7 +721,7 @@ int ModeChange(WPARAM wparam,LPARAM lparam)  	if ((isetting>ID_STATUS_OFFLINE)&&((WORD)ack->hProcess<=ID_STATUS_OFFLINE)) {
  		//we have just loged-in
  		db_set_dw(NULL, "UserOnline", ack->szModule, GetTickCount());
 -		if (IsWatchedProtocol(ack->szModule)) {
 +		if (!Miranda_Terminated() && IsWatchedProtocol(ack->szModule)) {
  			logthread_info *info = (logthread_info *)malloc(sizeof(logthread_info));
  			strncpy(info->sProtoName,courProtoName,MAXMODULELABELLENGTH);
  			info->hContact = 0;
 diff --git a/plugins/SeenPlugin/src/version.h b/plugins/SeenPlugin/src/version.h index 3160733a93..62449330f6 100644 --- a/plugins/SeenPlugin/src/version.h +++ b/plugins/SeenPlugin/src/version.h @@ -22,7 +22,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.  #define __MAJOR_VERSION				5
  #define __MINOR_VERSION				0
  #define __RELEASE_NUM				4
 -#define __BUILD_NUM					7
 +#define __BUILD_NUM					8
  #define __FILEVERSION_STRING		__MAJOR_VERSION,__MINOR_VERSION,__RELEASE_NUM,__BUILD_NUM
  | 
