From c1a342fda340671550283e104b7e4d942745d9cb Mon Sep 17 00:00:00 2001 From: sje Date: Tue, 3 Jul 2007 08:14:13 +0000 Subject: better logic for avatar updates, save images to temp folder git-svn-id: https://server.scottellis.com.au/svn/mim_plugs@249 4f64403b-2f21-0410-a795-97e2b3489a10 --- MySpace/server_con.cpp | 83 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 57 insertions(+), 26 deletions(-) (limited to 'MySpace/server_con.cpp') diff --git a/MySpace/server_con.cpp b/MySpace/server_con.cpp index 5131655..47624ba 100644 --- a/MySpace/server_con.cpp +++ b/MySpace/server_con.cpp @@ -35,6 +35,13 @@ int signon_status = ID_STATUS_ONLINE; char signon_status_msg[512] = {0}; bool WriteData(char *fn, int fn_size, char *data, int data_size) { + char szTempPath[MAX_PATH], szTempFileName[MAX_PATH]; + + if (GetTempPathA(sizeof(szTempPath), szTempPath) <= 0) lstrcpyA( szTempPath, ".\\" ); + + mir_snprintf(szTempFileName, MAX_PATH, "%s%s", szTempPath, fn); + mir_snprintf(fn, fn_size, "%s", szTempFileName); + // prepend dir to filename & create dir? HANDLE hSaveFile = CreateFileA(fn, GENERIC_WRITE, FILE_SHARE_WRITE, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); if(hSaveFile == INVALID_HANDLE_VALUE) return false; @@ -42,7 +49,6 @@ bool WriteData(char *fn, int fn_size, char *data, int data_size) { unsigned long bytes_written = 0; bool ret = false; if(WriteFile(hSaveFile, data, data_size, &bytes_written, NULL) == TRUE) ret = true; - CloseHandle(hSaveFile); return ret; } @@ -553,17 +559,40 @@ void __cdecl ServerThreadFunc(void*) { } else if(strcmp(kv.first.text, "ImageURL") == 0) { DBVARIANT dbv; if(!DBGetContactSettingStringUtf(hContact, MODULE, "ImageURL", &dbv)) { - if(strcmp(kv.first.text, dbv.pszVal) != 0) { + if(strcmp(kv.second.text, dbv.pszVal) != 0) { // avatar changed - DBDeleteContactSetting(hContact, MODULE, "AvatarFilename"); - if(uid == my_uid) DBDeleteContactSetting(0, MODULE, "AvatarFilename"); + DBVARIANT dbv2; + if(!DBGetContactSettingStringUtf(hContact, MODULE, "AvatarFilename", &dbv2)) { + DeleteFileA(dbv2.pszVal); + DBFreeVariant(&dbv2); + DBDeleteContactSetting(hContact, MODULE, "AvatarFilename"); + } DBWriteContactSettingStringUtf(hContact, MODULE, kv.first.text, kv.second.text); - if(uid == my_uid) DBWriteContactSettingStringUtf(0, MODULE, kv.first.text, kv.second.text); + DownloadAvatar(hContact, kv.second.text); } DBFreeVariant(&dbv); }else { DBWriteContactSettingStringUtf(hContact, MODULE, kv.first.text, kv.second.text); - if(uid == my_uid) DBWriteContactSettingStringUtf(0, MODULE, kv.first.text, kv.second.text); + DownloadAvatar(hContact, kv.second.text); + } + if(uid == my_uid) { // same again for null hContact + if(!DBGetContactSettingStringUtf(0, MODULE, "ImageURL", &dbv)) { + if(strcmp(kv.second.text, dbv.pszVal) != 0) { + // avatar changed + DBVARIANT dbv2; + if(!DBGetContactSettingStringUtf(0, MODULE, "AvatarFilename", &dbv2)) { + DeleteFileA(dbv2.pszVal); + DBFreeVariant(&dbv2); + DBDeleteContactSetting(0, MODULE, "AvatarFilename"); + } + DBWriteContactSettingStringUtf(0, MODULE, kv.first.text, kv.second.text); + DownloadAvatar(0, kv.second.text); + } + DBFreeVariant(&dbv); + }else { + DBWriteContactSettingStringUtf(0, MODULE, kv.first.text, kv.second.text); + DownloadAvatar(0, kv.second.text); + } } } else { DBWriteContactSettingStringUtf(hContact, MODULE, kv.first.text, kv.second.text); @@ -889,27 +918,29 @@ void __cdecl sttDownloadAvatar(void *param) { int uid = DBGetContactSettingDword(info->hContact, MODULE, "UID", 0); char fn[MAX_PATH]; - char buff[128]; - mir_snprintf(fn, MAX_PATH, "%s_%s.%s", _itoa(uid, buff, 10), _itoa((int)time(0), buff, 10), ext); - - WriteData(fn, MAX_PATH, nlhrReply->pData, nlhrReply->dataLength); - - PROTO_AVATAR_INFORMATION AI = {0}; - AI.cbSize = sizeof(PROTO_AVATAR_INFORMATION); - AI.hContact = info->hContact; - strncpy(AI.filename, fn, MAX_PATH); - AI.format = - (stricmp(ext, ".png") ? PA_FORMAT_PNG : - (stricmp(ext, ".jpg") ? PA_FORMAT_JPEG : - (stricmp(ext, ".jpeg") ? PA_FORMAT_JPEG : - (stricmp(ext, ".gif") ? PA_FORMAT_GIF : - (stricmp(ext, ".swf") ? PA_FORMAT_SWF : PA_FORMAT_UNKNOWN))))); - - - CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM)nlhrReply); - ProtoBroadcastAck(MODULE,info->hContact,ACKTYPE_AVATAR,ACKRESULT_SUCCESS,(HANDLE) &AI, 0); + char buff[128], tbuff[128]; + mir_snprintf(fn, MAX_PATH, "%s_%s.%s", _itoa(uid, buff, 10), _itoa(GetTickCount(), tbuff, 10), ext); + + if(WriteData(fn, MAX_PATH, nlhrReply->pData, nlhrReply->dataLength)) { + CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM)nlhrReply); + DBWriteContactSettingStringUtf(info->hContact, MODULE, "AvatarFilename", fn); + + PROTO_AVATAR_INFORMATION AI = {0}; + AI.cbSize = sizeof(PROTO_AVATAR_INFORMATION); + AI.hContact = info->hContact; + strncpy(AI.filename, fn, MAX_PATH); + AI.format = + (stricmp(ext, ".png") ? PA_FORMAT_PNG : + (stricmp(ext, ".jpg") ? PA_FORMAT_JPEG : + (stricmp(ext, ".jpeg") ? PA_FORMAT_JPEG : + (stricmp(ext, ".gif") ? PA_FORMAT_GIF : + (stricmp(ext, ".swf") ? PA_FORMAT_SWF : PA_FORMAT_UNKNOWN))))); + + ProtoBroadcastAck(MODULE,info->hContact,ACKTYPE_AVATAR,ACKRESULT_SUCCESS,(HANDLE) &AI, 0); + } else + ProtoBroadcastAck(MODULE,info->hContact,ACKTYPE_AVATAR,ACKRESULT_FAILED, 0, 0); } else - ProtoBroadcastAck(MODULE,info->hContact,ACKTYPE_AVATAR,ACKRESULT_FAILED,0, 0); + ProtoBroadcastAck(MODULE,info->hContact,ACKTYPE_AVATAR,ACKRESULT_FAILED, 0, 0); free_and_exit: free(info->url); -- cgit v1.2.3