diff options
Diffstat (limited to 'MySpace/server_con.cpp')
-rw-r--r-- | MySpace/server_con.cpp | 83 |
1 files changed, 57 insertions, 26 deletions
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);
|