Plugin:AVS/ru: Difference between revisions

From Miranda NG
Plugin:AVS/ru
Jump to navigation Jump to search
(Created page with "Если у контакта есть аватар, сервис $MS_AV_GETAVATARBITMAP возвращает указатель на запись в кэше. Сервис М...")
(Created page with "При смене аватара плагин запускает событие, передавая хэндл контакта в wParam и структуру данных с...")
Line 10: Line 10:
Если у контакта есть аватар, сервис MS_AV_GETAVATARBITMAP возвращает указатель на запись в кэше. Сервис МОЖЕТ вернуть 0, если доступный аватар отсутствует. Это не значит, что аватара нет вообще, а значит лишь то, что аватар ещё не готов к использованию. Когда кто-то вызывает сервис, запрашивающий аватар, плагин поппытается получить аватар (если это возможно) и, как только аватар готов к использованию, уведомить всех подписчиков через перехватываемое событие. Если аватар уже находится в кэше, возвращается кэшированная запись.
Если у контакта есть аватар, сервис MS_AV_GETAVATARBITMAP возвращает указатель на запись в кэше. Сервис МОЖЕТ вернуть 0, если доступный аватар отсутствует. Это не значит, что аватара нет вообще, а значит лишь то, что аватар ещё не готов к использованию. Когда кто-то вызывает сервис, запрашивающий аватар, плагин поппытается получить аватар (если это возможно) и, как только аватар готов к использованию, уведомить всех подписчиков через перехватываемое событие. Если аватар уже находится в кэше, возвращается кэшированная запись.


Whenever an avatar changes, the plugin fires an event, passing the contacts handle in wParam and a data structure with the avatar information in lParam. Plugins which use the bitmap handles returned by MS_AV_GETAVATARBITMAP MUST subscribe to ME_AV_AVATARCHANGED, because the original bitmap handle may become invalid when the avatar changes.
При смене аватара плагин запускает событие, передавая хэндл контакта в wParam и структуру данных с информацией об аватаре в lParam. Плагины, использующие хэндлы растровых изображений, возвращаемые MS_AV_GETAVATARBITMAP, ДОЛЖНЫ подписываться на ME_AV_AVATARCHANGED, поскольку исходный хэндл может стать недействительным при смене аватара.


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".
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:33, 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, поскольку исходный хэндл может стать недействительным при смене аватара.

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".

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

#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;
        ...
        ...                
}