HasAction

Данная процедура вызывается в случае возникновения событий на связанной загрузке: её готовность, останов или запуск.

DWORD HasAction(
    LOADDATABLOCK* pLdb,
    HRESULT actCode,
    HRESULT(*lpQueryInterface)(REFIID iid, void *ppvObject)
);

Параметры

pLdb
[вх]
Указатель структуру LOADDATABLOCK загрузки, на которой возникло событие.
actCode
[вх]
Описатель события. Если SUCCESED - аналогичен полю state загрузки, если FAILED - код ошибки, state в таком случае можно узнать только из структуры.
Успешные actCode (они-же состояния):
STUSRWAIT
Состояние ожидания действий пользователя (-3)
STLOADOK
Загрузка успешно завершена (-2)
STUSRSTOP
Загрузка прервана пользователем (0)
STSETLOAD
Отдана команда начать эту загрузку (1)
STSETSTOP
Отдана команда прервать эту загрузку (не реализован, не посылается)
STDELETE Загрузка удаляется! (-1)
В ответ на это состояние плагин должен удалить все связанные с этой загрузкой данные, обнулить pAdv и вернуть 0, в противном случае HasAction() будет вызываться снова и снова.
lpQueryInterface
[вх] Указатель на точку входа процедуры запроса КОМ-подобных интерфейсов.

Возвращаемые значения

Код дальнейших действий.
Этот код представляет собой объединение четырёх однобайтных кодов:
Младший - 0, если изменение состояния не требуется или новое состояние:
STUSRWAIT
Перевести в состояние ожидания действий пользователя (-3)
STUSRSTOP
Не менять состояние (0)
STSETLOAD
Запустить загрузку (1)
STSETSTOP
Остановить, прервать загрузку (3)
STDELETE Удалить загрузку (-1)
Следующий - инфорежим:
IMCALLAGAIN
Запрос вызывать эту функцию ещё раз (для длительной обработки)(НЕ РЕАЛИЗОВАНА!)
IMINNFOOFF
Больше никогда не вызывать эту функцию (отключит эту загрузку от твоего плагина)
(также сделать это можно установив поле pldb->IDplugin в -1 или 0)
IMNODEFERR
Не выполнять внутреннюю, стандартную обработку ошибки (если actCode указал на возникновение ошибки и твой плагин сам лучше знает как её обработать)
Старшие два зарезервированы
В конечном счёте код возврата можно (и рекомендуется) формировать набором приведённых в таблицах выше констант, объединённых оператором "или".

Заметки

Ошибки: в случае кодов ошибок actCode представляет собой полноценных HRESULT, facility которого определяет источник ошибки:
FACILITY_WIN32 - ошибки ОС
FACILITY_CURL - коды ошибок согласно таблицы CURLE
FACILITY_CURLM - коды ошибок CURLME
Нулевой - коды ошибок протокола HTTP (HTTP Status Code).
На данный момент стандартный обработчик есть только при actCode == 0x80070050 - вызывается встроенный диалог выбора действий в ответ на наличие по указанному пути файла с таким именем. (во всех остальных случаях просто прерывание загрузки).
SUCCESED и FAILED - это стандартные макросы обработки значений HRESULT из документации КОМ. Тут имеется в виду что если эти макросы дают единичное значение для actCode значит actCode пребывает в этом состоянии.

НЕ стоит выполнять длительные операции, время на выполнение которых может составить единицы секунд. При необходимости подобного следует разбить такие операции на короткие фрагменты и завершать функцию эту с кодом IMCALLAGAIN до выполнения всех необходимых действий. В противном случае пользователь может решить что программа зависла т. к. эта функция (как и диалоговая процедура твоего плагина) вызывается в том-же потоке что и интерфейс пользователя.

Быстрая справка

ОС C поддержкой WinAPI v4
DLL 2fap.exe
Библиотека -
Заголовок plugincom-plugin.h

Смотри также

QueryInterface