Автор Тема: Разработка плагинов  (Прочитано 13521 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн nostra

  • Администратор
  • *****
  • Сообщений: 2749
    • Personal Video Database
Разработка плагинов
« : 05 Декабря 2007, 02:54:22 »
Personal Video Database и все плагины существующие на данный момент написаны на Delphi. Весь код в этом документе представлен тоже на Delphi, но это не должно составить больших проблем перевести его на C++ или какой-нибудь другой язык.

Для того чтобы Вам было проще начать с созданием плагина, Вы можете загрузить несколько примеров разных типов плагинов. [Загрузить]
Чтобы скомпилировать примеры Вам понадобятся компоненты TntWare Components. Я предоставил одну из последних бесплатных версий этих компонентов для загрузки. [Загрузить]
« Последнее редактирование: 11 Июня 2008, 23:42:41 от nostra »
Мы уже работаем над постановлением по углублению конструктивных мер, принятых в результате консолидации

Оффлайн nostra

  • Администратор
  • *****
  • Сообщений: 2749
    • Personal Video Database
Re: Разработка плагинов
« Ответ #1 : 05 Декабря 2007, 03:01:16 »
Константы


Типы плагинов:

    PLUGIN_UNKNOWN = 0; //На практике - не используется
    PLUGIN_GENERAL = 1; //Не используется на данный момент
    PLUGIN_WEBIMPORT = 2; //Плагин импортирует информацию из интеренет
    PLUGIN_GENIMPORT = 3; //Плагин импортирует фильмы из других БД
    PLUGIN_WEBPICIMPORT = 4; //Плагин импортирует постеры из интернет
    PLUGIN_WEBCOVERIMPORT = 5; //Плагин импортирует обложки из интеренет
    PLUGIN_WEBPEOPLEIMPORT = 6; //Плагин импортирует информацию о людях из интернет
    PLUGIN_EXPORT = 7; //Экспорт


Резултаты работы ф-ций:

    PLUGIN_RESPONSE_ERROR = 0; //произошла ошибка
    PLUGIN_RESPONSE_OK = 1; //Всё нормально, не нужны ни какие дальнейшие действия
    PLUGIN_RESPONSE_LIST = 2; //Плагин создал список для выбора пользоватетелем
    PLUGIN_RESPONSE_DOWNLOAD = 3; //Программа должна сделать новый запрос серверу
    PLUGIN_RESPONSE_OKPHOTO = 4; //Используется при импорте информации о людях и сигнализирует, что должна быть загружена фотография


Типы URL-ов (возвращается ф-цией GetURL):

    WEB_URL_NONE = -1; //URL не нужен
    WEB_URL_SEARCH = 0; //NewURL это ссылка для поиска
    WEB_URL_DIRECT = 1; //NewURL это прямая ссылка на фильм


Типы обложек:

    ctFront = 0;
    ctCD = 1;


Типы данных:

    dtMovies = 0;
    dtActors = 1;



Формат XML для передачи данных фильма/персоны:

XML_MOVIE'movie';
XML_NUMBER'num';
XML_TITLE'title';
XML_ORIGTITLE'origtitle';
XML_AKA'aka';
XML_YEAR'year';
XML_GENRE'genre';
XML_COUNTRY'country';
XML_STUDIO'studio';
XML_RELEASE'release';
XML_MPAA'mpaa';
XML_LOCATION'location';
XML_CATEGORY'category';
XML_TAGLINE'tagline';
XML_DESCRIPTION'description';
XML_MEDIACOUNT'count';
XML_MEDIATYPE'type';
XML_RATING'rating';
XML_IMDBRATING'imdbrating';
XML_OTHERRATING'orating';
XML_OTHERNAME'orname';
XML_RIPTYPE'rip';
XML_DURATION'length';
XML_LANGUAGES'langs';
XML_TRANSLATION'translation';
XML_RESOLUTION'resolution';
XML_VIDEOCODEC'videocodec';
XML_VIDEOBITRATE'videobitrate';
XML_AUDIOCODEC'audiocodec';
XML_AUDIOBITRATE'audiobitrate';
XML_SIZE'size';
XML_URL'url';
XML_PATH'path';
XML_COMMENT'comment';
XML_DATE'dateadded';
XML_BARCODE'code';
XML_MEDIALABEL'label';
XML_LOAN'loan';
XML_SUBS'subs';
XML_FRAMERATE'framerate';
XML_LABEL'label';
XML_FEATURES'features';
XML_VIEWED'viewed';
XML_BOOKMARKED'bookmark';
XML_WISH'wish';
XML_EPISODES'episodes';
XML_SEASON'season';
XML_EPISODE'episode';
XML_EPNUM'epnum';
XML_CUSTOMVALUE'custom';
XML_CUSTOM'value';
XML_CUSTOMID'customid';
XML_LOANDATE'loandate';
XML_VIEWDATE'viewdate';
XML_TAGS'tags';
XML_AWARDS'awards';
XML_EVENT'event';
XML_RESULT'result';
XML_AWARD'award';
XML_AWARD_CAT'cat';
XML_LINKS'links';
XML_ACTORS'actors';
XML_DIRECTORS'directors';
XML_PRODUCERS'producers';
XML_COMPOSERS'composers';
XML_WRITERS'writers';
XML_CAREERTYPE'careertype';
XML_HUMAN'human';
XML_NAME'name';
XML_TRANSNAME'transname';
XML_ALTNAMES'altnames';
XML_BIRTHDAY'birthday';
XML_BIRTHPLACE'birthplace';
XML_BIO'bio';
XML_FILMOGRAPHY'filmography';
XML_TYPE'category';
XML_ROLE'role';
XML_DEATH'death';
XML_IMAGES'images';
XML_IMGTYPE'imgtype';
XML_IMGPATH'imgpath';
XML_IMGFORMAT'imgformat';
XML_IMGDATA'imgdata';
 
« Последнее редактирование: 02 Мая 2008, 20:18:27 от nostra »
Мы уже работаем над постановлением по углублению конструктивных мер, принятых в результате консолидации

Оффлайн nostra

  • Администратор
  • *****
  • Сообщений: 2749
    • Personal Video Database
Re: Разработка плагинов
« Ответ #2 : 05 Декабря 2007, 03:02:51 »
Типы


Типы используемые в импорте фильмов/людей (не из сети):

   TPluginImpGenMovieCallback = function (Movie : PWideChar) : BOOL;
  TPluginImpGenPersonCallback = function (Person : PWideChar) : BOOL;



Типы используемые в экспорте фильмов/людей (не из сети):

   TExpValueCallback = function (ValueIndex : Integer; IsCustomIndex : Boolean) : PWideChar;
  TExpNextCallback = function : BOOL;
« Последнее редактирование: 02 Мая 2008, 14:37:40 от nostra »
Мы уже работаем над постановлением по углублению конструктивных мер, принятых в результате консолидации

Оффлайн nostra

  • Администратор
  • *****
  • Сообщений: 2749
    • Personal Video Database
Re: Разработка плагинов
« Ответ #3 : 05 Декабря 2007, 03:09:32 »
Ф-ции общие для всех типов плагинов


function GetType : SHORT; stdcall;

Эта ф-ция должна присутствовать во всех плагинах и возвращать тип плагинов.


function GetName(const LangID : Integer) : PWideChar; stdcall;

    LangID - Выбранный на данный момент язык интерфейса


Эта ф-ция должна присутствовать во всех плагинах и возвращать название плагина.


function GetDescription(const LangID : Integer) : PWideChar; stdcall;

    LangID - Выбранный на данный момент язык интерфейса


Эта ф-ция должна присутствовать во всех плагинах и возвращать описание плагина.


function GetVersionSupported : DWORD; stdcall;

Эта ф-ция должна присутствовать во всех плагинах. Ф-ция должна возвращать минимальную версию Personal Video Database с которой она совместима. 0 - все версии.

Версии должны быть следующего формата:
001005000000 = 1005000 = "1.5.0.0"
000009000000 = 9000000 = "0.9.0.0"


function GetPluginVersion : PCHAR; stdcall;

Возвращает версию плагина. Эта ф-ция не должна обязательно присутствовать.


function CheckPVDVerion(const V : Integer) : BOOL; stdcall;

Эта ф-ция не обязательна. Personal Video Database передаёт версию программы в эту ф-ция. Ф-ция должна возвращать True если плагин совместим с переданой версией и False если нет.


function GetPluginLanguage : Integer; stdcall;

Должна возвращать язык плагина. Если она отсутствует, то предполагается, что язык - Английский.


function GetAbout(const LangID : Integer) : PWideChar; stdcall;

    LangID - Выбранный на данный момент язык интерфейса


Возвращает информацию о плагине. Ф-ция не обязательна.


function CanConfig : BOOL; stdcall;

Эта ф-ция должна возвращать True если плагин имеет настройки и False если нет.


function Configure(const LangID : Integer; AppHandle : HWND; CustomFields : PWideChar) : BOOL; stdcall;

    LangID - Выбранный на данный момент язык интерфейса
    AppHandle - Handle окна программы
    CustomFields - Список названий пользовательских полей (#0 - разделитель, #8#0 - конец списка)


Эта ф-ция вызывается когда пользователь хочет настроить плагин. Возвращайте True если настройка прошла без ошибок.

function BeginWork : Integer; stdcall;

Обязательная ф-ция. Вызывается вначале работы с плагином.

procedure EndWork; stdcall;

Обязательная ф-ция. Вызывается каждый раз, когда работа с плагином закончена.
« Последнее редактирование: 02 Мая 2008, 20:11:07 от nostra »
Мы уже работаем над постановлением по углублению конструктивных мер, принятых в результате консолидации

Оффлайн nostra

  • Администратор
  • *****
  • Сообщений: 2749
    • Personal Video Database
Re: Разработка плагинов
« Ответ #4 : 05 Декабря 2007, 03:14:16 »
Импорт из интернет (информация и постеры)




function GetURL(const isEpisode : Boolean; const CurrentURL : PCHAR; out NewURL : PCHAR) : Integer; stdcall;

    isEpisode - Ищет ли пользователь серию или фильм
    CurrentURL - адрес указаный в поле URL фильма
    NewURL - В эту переменную нужно передать новый адрес (для поиска (на пр. "http://imdb.com/find?s=tt&q=%s") или загрузки)


Обязательная ф-ция.


function GetCodePage : Cardinal; stdcall;

Ф-ция должна возвращать номер кодовой страницы нужной для формирования запросов HTTP.


function Parse(URL : PCHAR; Data : PWideChar) : SHORT; stdcall;

    URL - Адрес страницы в интернет
    Data - Ответ веб-сервера (обычно HTML), который должен быть обработан в плагине.


Ф-ция вызывается каждый раз когда Personal Video Database получает веб-страницу от сервера.


function GetResultsCount : Integer; stdcall;

Эта ф-ция вызывается если ф-ция Parse вернула PLUGIN_RESPONSE_LIST ранее. Нужно вернуть размер списка.


function GetSelection(const N : Integer; out Title, Title2 : PWideChar; out URL, Preview, Browse : PCHAR; out Year : Smallint) : BOOL; stdcall;

    N - Номер в списке
    Title, Title2, Year, URL, PreviewURL, BrowseURL - Определяют названия и год (если есть) для выбора и адресса.. PreviewURL используется только если импортируются постеры и имеется предпросмотр.


Ф-ция должна вернуть True, если всё прошло без ошибок и False в противном случае.


function GetMovie(const N : Integer; var AMovieInfo : PWideChar) : BOOL; stdcall;
function GetHuman(const N : Integer; var AHumanInfo : PWideChar) : Integer; stdcall;

    N - Номер фильма/человека в списке


Если пользователь выбрал фильм/человека из списка, то будет вызвана эта ф-ция для полученя данных. Данные должны быть переданы в виде XML. Формат XML описан выше.

Ф-ция должна вернуть True, если всё прошло без ошибок и False в противном случае. (фильмы)
Результат ф-ции PLUGIN_RESPONSE_ERROR .. PLUGIN_RESPONSE_OKPHOTO (люди)


procedure GetLoginInfo(out ScriptURL : PCHAR; out Params : PCHAR); stdcall;

    ScriptURL - Адрес скрипта для логина
    Params - Параметры для скрипта


Нужна только в том случае если нужна авторизация на веб странице.


function GetReferrer : PCHAR;

Имплементируйте эту ф-цию если веб сервис не работает со стандартным Refferer-ом.


function GetSelectTitle(const LangID : Integer) : PWideChar; stdcall;

    LangID - Выбранный на данный момент язык интерфейса


Имплементируйте эту ф-цию если хотите устанавливать текст заголовка окна выбора фильмов.
« Последнее редактирование: 02 Мая 2008, 14:53:46 от nostra »
Мы уже работаем над постановлением по углублению конструктивных мер, принятых в результате консолидации

Оффлайн nostra

  • Администратор
  • *****
  • Сообщений: 2749
    • Personal Video Database
Re: Разработка плагинов
« Ответ #5 : 05 Декабря 2007, 03:18:09 »
Плагины импорта данных из другиз баз


function GetFilter(AppHandle : HWND; const LangID : Integer; CustomFields : PWideChar) : PWideChar; stdcall

    AppHandle - Handle окна программы
    LangID - Выбранный на данный момент язык интерфейса
    CustomFields - Список названий пользовательских полей (#0 - разделитель, #8#0 - конец списка)


Ф-ция должна возвращать фильтр для диалога выбора файла для импорта.


procedure Parse(AppHandle : HWND; const LangID : Integer; FileName : PWideChar; MovieCallback : TPluginImpGenMovieCallback; HumanCallback : TPluginImpGenHumanCallback; CustomFields : PWideChar); stdcall;

    AppHandle - Handle окна программы
    LangID - Выбранный на данный момент язык интерфейса
    FileName - Имя файла
    MovieCallback - Callback процедура, которая должна быть вызвана из плагина для добавления фильма в базу.
    HumanCallback - Callback процедура, которая должна быть вызвана из плагина для добавления человека в базу.
    CustomFields - Список названий пользовательских полей (#0 - разделитель, #8#0 - конец списка)


Это обязательная ф-ция для этого типа плагинов. Она вызывается сразу после того, как польватель выбрал файл для импорта.
« Последнее редактирование: 02 Мая 2008, 17:08:46 от nostra »
Мы уже работаем над постановлением по углублению конструктивных мер, принятых в результате консолидации

Оффлайн nostra

  • Администратор
  • *****
  • Сообщений: 2749
    • Personal Video Database
Re: Разработка плагинов
« Ответ #6 : 05 Декабря 2007, 03:19:16 »
Импорт обложек из интернет


function GetURL(const CurrentURL : PCHAR; out NewURL : PCHAR; const ASearchText : PChar) : Integer; stdcall;

То же что и другая одноименной ф-ции для импорта информации, но с дополнительным параметром ASearchText, чтобы можно было подготовить запрос полностью в плагине (если нужно).


function GetCurrentType : SHORT; stdcall;

Возвращает тип обложки (TCoverType) над которой сейчас работает плагин.


procedure SetSelection(const AVal : Integer); stdcall;

Используется программой, чтобы сообщить плагины номер выбранного пользователем фильма из списка.
Мы уже работаем над постановлением по углублению конструктивных мер, принятых в результате консолидации