diff options
Diffstat (limited to 'MySpace/proto.cpp')
-rw-r--r-- | MySpace/proto.cpp | 48 |
1 files changed, 39 insertions, 9 deletions
diff --git a/MySpace/proto.cpp b/MySpace/proto.cpp index 48d65ad..0cdf64d 100644 --- a/MySpace/proto.cpp +++ b/MySpace/proto.cpp @@ -332,23 +332,53 @@ int SendTyping(WPARAM wParam, LPARAM lParam) { return 0;
}
+bool FileExists(char *filename) {
+ HANDLE hFile = CreateFileA(filename, 0, 0, 0, OPEN_EXISTING, 0, 0);
+ if(hFile != INVALID_HANDLE_VALUE) {
+ CloseHandle(hFile);
+ return true;
+ }
+}
+
int GetAvatarInfo(WPARAM wParam,LPARAM lParam) {
if (DBGetContactSettingByte(0, MODULE, "EnableAvatars", 1) == 0)
return GAIR_NOAVATAR;
PROTO_AVATAR_INFORMATION* AI = ( PROTO_AVATAR_INFORMATION* )lParam;
- DBVARIANT dbv;
- if(!DBGetContactSetting(AI->hContact, MODULE, "AvatarFilename", &dbv)) {
- strncpy(AI->filename, dbv.pszVal, sizeof(AI->filename));
- DBFreeVariant(&dbv);
- return GAIR_SUCCESS;
- } else if((wParam && GAIF_FORCE) != 0 && status > ID_STATUS_OFFLINE && !DBGetContactSetting(AI->hContact, MODULE, "ImageURL", &dbv)) {
- DownloadAvatar(AI->hContact, dbv.pszVal);
+ int ret = GAIR_NOAVATAR;
+ DBVARIANT dbv, dbv2;
+
+ bool url_exists = (DBGetContactSetting(AI->hContact, MODULE, "ImageURL", &dbv) == 0);
+ if(!url_exists) {
DBFreeVariant(&dbv);
- return GAIR_WAITFOR;
- } else
return GAIR_NOAVATAR;
+ }
+
+ bool online = (status > ID_STATUS_OFFLINE);
+ bool force = ((wParam & GAIF_FORCE) != 0);
+ bool file_exists = (DBGetContactSetting(AI->hContact, MODULE, "AvatarFilename", &dbv2) == 0) && FileExists(dbv2.pszVal);
+
+ if(force && online) {
+ if(file_exists) {
+ DeleteFileA(dbv2.pszVal);
+ DBDeleteContactSetting(0, MODULE, "AvatarFilename");
+ }
+ DownloadAvatar(AI->hContact, dbv.pszVal);
+ ret = GAIR_WAITFOR;
+ } else if(file_exists) {
+ strncpy(AI->filename, dbv2.pszVal, sizeof(AI->filename));
+ ret = GAIR_SUCCESS;
+ } else if(online) {
+ DownloadAvatar(AI->hContact, dbv.pszVal);
+ ret = GAIR_WAITFOR;
+ } else {
+ ret = GAIR_NOAVATAR;
+ }
+
+ DBFreeVariant(&dbv);
+ if(file_exists) DBFreeVariant(&dbv2);
+ return ret;
}
|