Plugin:AVS/ru: Difference between revisions

From Miranda NG
Plugin:AVS/ru
Jump to navigation Jump to search
(Updating to match new version of source page)
(Created page with "Получение аватаров происходит в отдельном потоке с разумными паузами, чтобы не сработала защит...")
Line 14: Line 14:
</div>
</div>


Fetching avatars is done in a separate thread with reasonable delays to avoid getting into troubles with flood protection(s). Avatars are cached "in memory".
Получение аватаров происходит в отдельном потоке с разумными паузами, чтобы не сработала защита от флуда. Аватары кэшируются «в памяти».


== Пример использования ==
== Пример использования ==

Revision as of 18:35, 13 June 2021

Other languages:
Avatar service
Нет изображения
Имя файла AVS.dll
Авторы Nightwish, Pescuma
Скачать
Стабильная версия: 32-bit, 64-bit
Версия в разработке: 32-bit, 64-bit

Загружает и управляет аватарами для других плагинов.

О плагине

Это сервисный плагин. Он лишь предоставляет другим плагинам некоторые сервисы и события. Плагин загружает аватары по требованию и поддерживает внутренний кэш хэндлов. Кроме того, плагин прозрачно обрабатывает изменение аватаров и может уведомлять другие плагины об изменении аватара.

Как это работает

Если у контакта есть аватар, сервис MS_AV_GETAVATARBITMAP возвращает указатель на запись в кэше. Сервис МОЖЕТ вернуть 0, если доступный аватар отсутствует. Это не значит, что аватара нет вообще, а значит лишь то, что аватар ещё не готов к использованию. Когда кто-то вызывает сервис, запрашивающий аватар, плагин поппытается получить аватар (если это возможно) и, как только аватар готов к использованию, уведомить всех подписчиков через перехватываемое событие. Если аватар уже находится в кэше, возвращается кэшированная запись.

При смене аватара плагин запускает событие, передавая хэндл контакта в wParam и структуру данных с информацией об аватаре в lParam. Плагины, использующие хэндлы растровых изображений, возвращаемые MS_AV_GETAVATARBITMAP, ДОЛЖНЫ подписываться на ME_AV_AVATARCHANGED, поскольку исходный хэндл может стать недействительным при смене аватара.

Получение аватаров происходит в отдельном потоке с разумными паузами, чтобы не сработала защита от флуда. Аватары кэшируются «в памяти».

Пример использования

#include "m_avatars.h"

struct avatarCacheEntry *ace = 0;
HBITMAP hbmAvatar = 0;

ace = (struct avatarCacheEntry *)CallService(MS_AV_GETAVATARBITMAP, (WPARAM)hContact, 0);

/*
   now, check the return value. if it is 0, then the avatar is not yet ready or unavailble
   for that contact. if it was only "not ready", your plugin will be notified by the
   hookable event ME_AV_AVATARCHANGED
   
   if the return value is != 0, then it is a valid bitmap handle. DON'T DESTROY IT IN YOUR CODE
*/


/*
 * event function
 * initialise with:
 * HANDLE hEvent = HookEvent(ME_AV_AVATARCHANGED, AvatarChanged);
 */
 
static int AvatarChanged(WPARAM wParam, LPARAM lParam)
{
        struct avatarCacheEntry *ace = (struct avatarCacheEntry *)lParam;
        HANDLE hContact = (HANDLE)wParam;
        
        if(ace == NULL)
                return 0;
        if(ace->cbSize != sizeof(struct avatarCacheEntry))
                return 0;               // safety check(s)

        HBITMAP hbmAvatar = ace->hbmPic;
        ...
        ...                
}