 |
Bolide Software Форум общения пользователей
|
|
|
| Нужен ли он? |
| Да |
|
100% |
[ 17 ] |
| Нет |
|
0% |
[ 0 ] |
|
| Всего проголосовало : 17 |
|
| Автор |
Сообщение |
iRo Пользователь
Зарегистрирован: 18.01.2010 Сообщения: 34
|
Добавлено: Ср Янв 20, 2010 11:14 am Заголовок сообщения: FAQ по написанию плагинов |
|
|
Всем привет.
поиском не нашел.
Попробую создать его с Вашей помощью)))
(только вчера купил лицензию и немного успел просмотреть API)
1. Нужно скачать архив с API для Borland Delphi - Delphi Plugin API v2.5 (01 Jul 2009)
2. Создать проект DLL и включить в него файл amm_pluginapi.pas
3. Библиотека должна содержать (и экспортировать) четыре функции
-GetName4: -возвращает название плагина
-GetVersion4: - возвращает версию плагина
-Init4: OwnerAPP := Owner; -дескриптор окна AMM
- последняя функция непосредственно запуск плагина из AMM.
она зависит от типа создаваемого плагина,
а. Плагин для обработки фильмов/имен - AMM_PluginStart4
б. Плагин для импорта информации о фильме - AMM_NewBasePluginStart4(OrigTitle:Pchar; tlength:Integer);
в. Плагин для импорта информации о людях - AMM_NewNamePluginStart4(OrigTitle:Pchar; tlength:Integer);
4. Для работы непосредственно с данными из AMM. нужно создать объект типа TMovieBase
| Код: | var
MovieBase: TMovieBase;
begin
MovieBase := TMovieBase.Create; |
список классов, полей и доступных функций,
а так же пример простого плагина - см. посте №2 от уважаемого z_a_s
Уважаемые знатоки!
Если не затруднит, помогите дописать!
PS или не нужная затея?
Последний раз редактировалось: iRo (Чт Янв 21, 2010 3:51 pm), всего редактировалось 1 раз |
|
| Вернуться к началу |
|
 |
z_a_s Опытный пользователь
Зарегистрирован: 21.01.2006 Сообщения: 511 Откуда: Волгоград
|
Добавлено: Ср Янв 20, 2010 5:42 pm Заголовок сообщения: |
|
|
По 3 пункту надо добавить, что существует три вида плагинов и в зависимости от этого одна функция будет меняться.
1. Плагин для обработки фильмов/имен - AMM_PluginStart4
2. Плагин для импорта информации о фильме - AMM_NewBasePluginStart4(OrigTitle:Pchar; tlength:Integer);
2. Плагин для импорта информации о людях - AMM_NewNamePluginStart4(OrigTitle:Pchar; tlength:Integer);
Теперь по остальным пунктам.
В API прописаны три основные класса TPerson, TMovie и TMovieBase
TPerson - Класс имен, не требует специального создания используется через TMovieBase.CurrentName
Доступные свойства:
NameID:Integer - ID персоны
Name:String - Имя
AltName:String - Альтернативное имя
BirthDay:String - День рождения
BirthPlace:String - Место рождения
BirthYear:Integer - Год рождения
BirthCountry:String - Страна рождения
Biography:String - Биография
Filmography:String - Фильмография
Comments:String - Комментарии
URL:String - Ссылка на страницу
Rating:Integer - Рейтинг
Доступные функции:
IsPicExists:Boolean; - Возвращает True если у персоны есть фото
GetPic(FName:String):Boolean; - Сохраняет фото персоны в файл
SetPic(FName:String):Boolean; - Вставить фото персоны из файла (корректно работает только с JPEG файлами)
DeletePic:Boolean; - Удалить фото персоны
TMovie - Класс фильмов, не требует специального создания используется через TMovieBase.CurrentMovie
Доступные свойства:
Title:String - Название фильма
OriginalTitle:String - Оригинальное название
Description:String - Описание
Genre:String - Жанры. В строке перечисляются все жанры через запятую
Year:String - Год выхода фильма
Resolution:String - Разрешение
Size:String - Размер файла
Duration:String - Длительность
Loan:String - Кому отдан
Director:String - Режиссер
VideoInfo:String - Информация о видео потоке. Выводиться в виде строки "Кодек~Частота кадров~Средний битрейт~Глубина цвета"
AudioInfo :String - информация о аудио потоке. Выводиться в виде строки "Кодек~Информация~Средний битрейт"
Actors:String - Актеры
MediaType:String - Тип носителя
MediaCount:Integer - Количество носителей
MediaLocation:String - Местонахождение
Rating:Integer - Рейтинг фильма
MovieNum:Integer - Номер фильма
Comments:String - Комментарии
MediaLabel:String - Метка носителя
Subtitles:String - Субтитры
AspectRatio:String - Формат экрана
URL:String - Ссылка на страницу фильма
LocalPath:String - Локальный путь
Country: String - Страна
MPAA: String - Рейтинг МЗАА
ID: Integer - ID фильма
Wishlist: Boolean - Желаемый
Seen: Boolean - Просмотренный
Studio: String - Студии
Barcode: String - Штрих-Код
Scenario: String - Сценарист
TrailerLink: String - Ссылка на трейлер
Price: Single - Цена
UDFieldsCount:Integer - Количество пользовательских полей
ScreenshotsCount:Integer - Количество скриншотов
EpisodesCount:Integer - Количество эпизодов
PersonalMarks: String - Личные отметки пользователя
Доступные функции:
IsCoverExists:Boolean; - Возвращает True если у фильма есть постер
GetScreenshot(FName:String; ScreenIndex:Integer):Boolean; - Сохраняет скриншот в файл
GetCoverImage(FName:String):Boolean; - Сохраняет постер в файл
SetCoverImage(FName:String):Boolean; - Вставить постер из файла (корректно работает только с JPEG файлами)
SetScreenshot(FName:String):Integer; - Вставить скриншот из файла (корректно работает только с JPEG файлами)
DeleteScreenshot(ScreenIndex:Integer):Boolean; - Удалить скриншот
DeleteCover:Boolean; - Удалить постер
GetUDFieldValue(Index:Integer):String; - Получить значение пользовательского поля
GetUDFieldName(Index:Integer):String; - Получить имя пользовательского поля
SetUDFieldValue(Index:Integer; UDValue:String):Integer; - Установить значение пользовательского поля
EpisodeAdd(SeasonNum, EpisodeNum:Integer; Title, Description, URL, AirDate:String):Integer; - Добавить эпизод
EpisodeDelete(EpIndex:Integer):Boolean; - Удалить эпизод
EpisodeGetSeasonNum(EpIndex:Integer):Integer; - Получить номер сезона
EpisodeGetEpisodeNum(EpIndex:Integer):Integer; - Получить номер эпизода
EpisodeGetTitle(EpIndex:Integer):String; - Получить название эпизода
EpisodeGetDescription(EpIndex:Integer):String; - Получить описание эпизода
EpisodeGetURL(EpIndex:Integer):String; - Получить ссылку на страницу эпизода
EpisodeGetAirDate(EpIndex:Integer):String; - Получить дату выхода эпизода
EpisodeSetSeasonNum(EpIndex, SeasonNum:Integer); - Установить номер сезона
EpisodeSetEpisodeNum(EpIndex, EpisodeNum:Integer); - Установить номер эпизода
EpisodeSetTitle(EpIndex:Integer; Title:String); - Установить название эпизода
EpisodeSetDescription(EpIndex:Integer; Description:String); - Установить описание эпизода
EpisodeSetURL(EpIndex:Integer; URL:String); - Установить ссылку на страницу эпизода
EpisodeSetAirDate(EpIndex:Integer; AirDate:String); - Установить дату выхода эпизода
SaveMovieCardImage(FName:String;w,h:Integer):Boolean; - сохранить как изображение (JPG, PNG или BMP) вид карточки выбранного фильма с текущим шаблоном.
TMovieBase - Основной класс
Доступные свойства:
CurrentMovie:TMovie; - Доступ к текущему фильму
CurrentName:TPerson; - Доступ к текущему имени
GetAllPersonalMarks:String - Список личных отметок
GenreList:TStringList; - Список жанров
MovieCount:Integer - Количество фильмов в списке (если есть фильтрация то выводится именно количество отфильтрованных фильмов)
Filename:String - Имя файла открытой базы
Доступные функции:
//для работы с фильмами
AddMovie; - Добавить фильм
SaveMovie:Integer; - Сохранить текущий фильм
EditMovie; - Редактировать текущий фильм
DeleteMovie; - Удалить текущий фильм
First; - Выбрать первый фильм в списке
Last; - Выбрать последний фильм в списке
Next; - Следующий фильм
Prior; - Предыдущий фильм
Compress; - Сжать базу
GetGenreList:Boolean; - Получить список жанров
LocateMovieID(IDValue:Integer):Boolean; - Найти фильм по ID
SetSQLFilter(FilterStr:String):Boolean; - Установить SQL фильтр
ExecSQL(SQLStr:String):Boolean; - Выполнить SQL
//для работы с персонами
AddName; - добавить имя
SaveName:Integer; - Сохранить имя
EditName; - Редактировать текущее имя
DeleteName; - Удалить имя
FirstName; - Выбрать первое в списке имя
LastName; - Выбрать последнее в списке имя
NextName; - Следующие имя
PriorName; - Предыдущее имя
LocateNameID(IDValue:Integer):Boolean; - Найти имя по ID
GetNameCount:Integer; - Получить количество имен в списке
//Функции работающие только в плагине импорта информации о фильме
GetGetURL(URL:String):String; - Загружает html страницу с указанного адреса
GetPostURL(URL, Params:String):String; - Передача параметров при помощи POST метода
GetCoverFromURL(URL:String):Boolean; - Загрузить постер по ссылке
GetScreenFromURL(URL:String):Boolean; - Загрузить скриншот по ссылке
SelectTheMovie(MovieList:String):Integer; - Выводит список фильмов для выбора нужного
//Функции работающие только в плагине импорта информации о персоне
NameGetURL(URL:String):String; - Загружает html страницу с указанного адреса
NamePostURL(URL, Params:String):String; - Передача параметров при помощи POST метода
GetNamePicFromURL(URL:String):Boolean; - Загрузить фото по ссылке
SelectTheName(NameList:String):Integer; - Выводит список имен для выбора нужного
Ну и на последок пример простого плагина который перенумеровывает фильмы
| Код: | library Test;
uses
amm_pluginapi,
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, IniFiles;
{$R *.res}
function GetVersion4: Integer; far;
begin
Result := 1;
end;
function GetName4: Pchar; far;
begin
Result := 'Test';
end;
procedure AMM_PluginStart4; far;
var
MovieBase: TMovieBase;
x, i: Integer;
begin
MovieBase := TMovieBase.Create;
x := MovieBase.MovieCount;
MovieBase.First;
for i := 1 to x do
begin
MovieBase.EditMovie;
MovieBase.CurrentMovie.MovieNum := i;
MovieBase.SaveMovie;
MovieBase.Next;
end;
MovieBase.Free;
end;
procedure Init4(Owner: Integer); far;
begin
OwnerAPP := Owner;
end;
exports
GetName4, AMM_PluginStart4, Init4, GetVersion4;
begin
end. |
Последний раз редактировалось: z_a_s (Пн Мар 22, 2010 10:16 am), всего редактировалось 1 раз |
|
| Вернуться к началу |
|
 |
iRo Пользователь
Зарегистрирован: 18.01.2010 Сообщения: 34
|
Добавлено: Чт Янв 21, 2010 3:30 pm Заголовок сообщения: |
|
|
вот спасибо!!!
сейчас попробую вставить в FAQ нужные шаги..
ойойойойойойоойойой.....
а где функция - сделать экспорт используя шаблон?????
мне именно эта функция то и нужна (((( |
|
| Вернуться к началу |
|
 |
z_a_s Опытный пользователь
Зарегистрирован: 21.01.2006 Сообщения: 511 Откуда: Волгоград
|
Добавлено: Чт Янв 21, 2010 3:38 pm Заголовок сообщения: |
|
|
| iRo писал(а): | ойойойойойойоойойой.....
а где функция - сделать экспорт используя шаблон?????
мне именно эта функция то и нужна (((( |
Такой функции нет, надо писать самому
В соседней теме DenKa выложил исходники своего плагина для медиа-плейера WD TV, можно его взять за основу. |
|
| Вернуться к началу |
|
 |
iRo Пользователь
Зарегистрирован: 18.01.2010 Сообщения: 34
|
Добавлено: Чт Янв 21, 2010 3:53 pm Заголовок сообщения: |
|
|
| z_a_s писал(а): | | iRo писал(а): | ойойойойойойоойойой.....
а где функция - сделать экспорт используя шаблон?????
мне именно эта функция то и нужна (((( |
Такой функции нет, надо писать самому
В соседней теме DenKa выложил исходники своего плагина для медиа-плейера WD TV, можно его взять за основу. |
уже пытаюсь скачать)))
вот только фиг скачаешь с рапиды  |
|
| Вернуться к началу |
|
 |
z_a_s Опытный пользователь
Зарегистрирован: 21.01.2006 Сообщения: 511 Откуда: Волгоград
|
Добавлено: Чт Янв 21, 2010 3:57 pm Заголовок сообщения: |
|
|
| iRo писал(а): | уже пытаюсь скачать)))
вот только фиг скачаешь с рапиды  |
Закинул архив на bolidesoft |
|
| Вернуться к началу |
|
 |
UncleVader Пользователь
Зарегистрирован: 22.01.2010 Сообщения: 1
|
Добавлено: Пт Янв 22, 2010 6:19 am Заголовок сообщения: Вопрос по API |
|
|
Хочу пробежаться циклом по всем фильмам, при этом не хочу чтобы обновлялось основное окно в целях ускорения. За это, я так понимаю, отвечают процедуры
| Код: |
procedure RefreshOff; //disables refreshing of the movie details area
procedure RefreshOn; //enables refreshing of the movie details area |
из amm_pluginapi.pas. Но после вызова RefreshOff не обновляется не только основное окно, но и данные класса MovieBase. Или баг API или я чегото недопер... |
|
| Вернуться к началу |
|
 |
iRo Пользователь
Зарегистрирован: 18.01.2010 Сообщения: 34
|
Добавлено: Пн Фев 22, 2010 10:50 pm Заголовок сообщения: |
|
|
Добавилась функция SaveMovieCardImage
2 z_a_s добавь плз в свой пост.
PS я так и не разобрался как с ее помощью получить нужные две картинки для Dune.
Напишите плз описание и пример использования для Dune! |
|
| Вернуться к началу |
|
 |
bolide Site Admin
Зарегистрирован: 21.01.2006 Сообщения: 747
|
Добавлено: Пт Фев 26, 2010 8:42 pm Заголовок сообщения: Re: Вопрос по API |
|
|
| UncleVader писал(а): | | Но после вызова RefreshOff не обновляется не только основное окно, но и данные класса MovieBase. Или баг API или я чегото недопер... |
Данные класса MovieBase заполняются вызовом функции EditMovie |
|
| Вернуться к началу |
|
 |
bolide Site Admin
Зарегистрирован: 21.01.2006 Сообщения: 747
|
Добавлено: Пт Фев 26, 2010 8:47 pm Заголовок сообщения: |
|
|
| iRo писал(а): |
PS я так и не разобрался как с ее помощью получить нужные две картинки для Dune.
Напишите плз описание и пример использования для Dune! |
SaveMovieCardImage просто рендерит текущий HTML шаблон для текущего фильма в картинку с заданными координатами.
Для Dune надо генерировать картинку с разрешением 1920x1080
Для получения картинки с постером надо использовать другую функцию, GetCoverImage. Она сохранит постер в JPEG формате в том разрешении, в котором она хранится в базе. Для Дюны её еще ресайзить надо.
А чем встроенный функционал для Dune не устраивает? |
|
| Вернуться к началу |
|
 |
iRo Пользователь
Зарегистрирован: 18.01.2010 Сообщения: 34
|
Добавлено: Пн Мар 01, 2010 7:30 am Заголовок сообщения: |
|
|
| bolide писал(а): | | iRo писал(а): |
PS я так и не разобрался как с ее помощью получить нужные две картинки для Dune.
Напишите плз описание и пример использования для Dune! |
SaveMovieCardImage просто рендерит текущий HTML шаблон для текущего фильма в картинку с заданными координатами.
Для Dune надо генерировать картинку с разрешением 1920x1080
Для получения картинки с постером надо использовать другую функцию, GetCoverImage. Она сохранит постер в JPEG формате в том разрешении, в котором она хранится в базе. Для Дюны её еще ресайзить надо.
А чем встроенный функционал для Dune не устраивает? |
в принцепи всем устраивает.
только очень нужно подправить:
1. пути до фильмов так:
у меня несколько дисков и в корне каждого лежит dunefolder с указанием названия hd1, hd1 и т.д.
эти названия я занес в АММ в местонахождения.
все фильмы (источники в смысле) лежат в корне дисков /.video/...
в качестве пути прописываю название местонахождения+файл/папка
получается например такая ссылка на фильм-
media_url = hd1://.video/DISTRICT_9
и теперь куда бы я ни положил папку с описанием фильма (хоть в корен, хоть в категорию "фантастика") я всегда смогу запустить просмотр))))
а в Вашем варианте, у меня всегда пути вида "дофига слешей с точками" (((
и что самое главное - если фильм блюрей, то АММ указывает на конкретный файл *.m2ts
а в дюне нужно указывать папку фильма (Film/BDMV, AACS, CERTIFICATE - указывать папку Film)!!!!!
ну и очень хочется немного подправить описание. точнее изменить порядок строк. например поднять выше строку "слоган", а то он иногда идет после отзывов.
ну и если текст не помещается на экране, то обрезать до близжайшей точки.
может можно сделать плагин для Вашей функции вывода?
например сделаю dll с функциями
EditURL(var value:string) string // передаем ссылку на фильм, возвращает нужный для записи в dunefolder
EditOpis(var value:string) string // передаем описание фильма, возвращает отредактированное по желанию пользователя
EditComments(var value:string) string // передаем коментарий фильма, возвращает отредактированный по желанию пользователя
вот если бы Вы добавили поддержку такого плагина - то избавились бы от многочисленных просьб сделать так то и так то)))
тогда каждый сможет сделать именно так как он хочет!
Что скажите? |
|
| Вернуться к началу |
|
 |
newminer Пользователь
Зарегистрирован: 28.10.2009 Сообщения: 17
|
Добавлено: Пт Мар 12, 2010 12:18 pm Заголовок сообщения: |
|
|
Вопрос к знатокам:
У меня имеется 5 пользовательских полей: 4 флажка (они, очевидно, не учитываются совсем) и 1 текстовое поле.
Следующий код выдает стабильно 0.
| Код: |
db:=TMovieBase.Create;
db.First;
for i:=1 to db.MovieCount do begin
db.EditMovie;
ShowMessage(IntToStr(db.CurrentMovie.UDFieldsCount));
db.SaveMovie;
db.Next;
end;
|
В чем причина? |
|
| Вернуться к началу |
|
 |
bolide Site Admin
Зарегистрирован: 21.01.2006 Сообщения: 747
|
Добавлено: Вт Мар 16, 2010 2:56 pm Заголовок сообщения: |
|
|
| iRo писал(а): |
1. пути до фильмов так:
у меня несколько дисков и в корне каждого лежит dunefolder с указанием названия hd1, hd1 и т.д.
эти названия я занес в АММ в местонахождения.
все фильмы (источники в смысле) лежат в корне дисков /.video/...
в качестве пути прописываю название местонахождения+файл/папка
получается например такая ссылка на фильм-
media_url = hd1://.video/DISTRICT_9
и теперь куда бы я ни положил папку с описанием фильма (хоть в корен, хоть в категорию "фантастика") я всегда смогу запустить просмотр))))
|
тоже думаю доработать в этом направлении. Только названия дисков думаю брать из поля "метка диска".
| iRo писал(а): |
а в Вашем варианте, у меня всегда пути вида "дофига слешей с точками" (((
и что самое главное - если фильм блюрей, то АММ указывает на конкретный файл *.m2ts
а в дюне нужно указывать папку фильма (Film/BDMV, AACS, CERTIFICATE - указывать папку Film)!!!!!
|
Если в пути к m2ts файлу встречается BDMV, то программа считает это блюреем и ссылку ставит на папку, если BDMV нет, считает это отдельным файлом и ставит, соответственно, ссылку на файл
| iRo писал(а): |
ну и очень хочется немного подправить описание. точнее изменить порядок строк. например поднять выше строку "слоган", а то он иногда идет после отзывов.
ну и если текст не помещается на экране, то обрезать до близжайшей точки.
|
так весь вид правится в используемом HTML шаблоне...
| iRo писал(а): |
может можно сделать плагин для Вашей функции вывода?
например сделаю dll с функциями
EditURL(var value:string) string // передаем ссылку на фильм, возвращает нужный для записи в dunefolder
EditOpis(var value:string) string // передаем описание фильма, возвращает отредактированное по желанию пользователя
EditComments(var value:string) string // передаем коментарий фильма, возвращает отредактированный по желанию пользователя
|
честно говоря, не понял смысл этих функций  |
|
| Вернуться к началу |
|
 |
bolide Site Admin
Зарегистрирован: 21.01.2006 Сообщения: 747
|
Добавлено: Вт Мар 16, 2010 3:04 pm Заголовок сообщения: |
|
|
| newminer писал(а): |
В чем причина? |
Когда-то поменялась работа с пользовательскими полями внутри программы, а функции для PluginAPI обновить забыл
Еще может быть такое, что возвращается не общее число полей, а число заполненных пользовательских полей для текущего фильма. Но не уверен, буду проверять.
Исправлю, если найду ошибки, плюс добавлю функции для обращения к пользовательским отметкам - в текущей версии PluginAPI их нет |
|
| Вернуться к началу |
|
 |
iRo Пользователь
Зарегистрирован: 18.01.2010 Сообщения: 34
|
Добавлено: Вт Мар 16, 2010 3:16 pm Заголовок сообщения: |
|
|
| bolide писал(а): |
тоже думаю доработать в этом направлении. Только названия дисков думаю брать из поля "метка диска".
|
ну все таки невсегда совпадает метка диска и то что указанно в dune_folder.txt
у меня например разные они )))
| bolide писал(а): |
Если в пути к m2ts файлу встречается BDMV, то программа считает это блюреем и ссылку ставит на папку, если BDMV нет, считает это отдельным файлом и ставит, соответственно, ссылку на файл
|
С этим уже разобрался, все супер спасибо.
только вот зачем же название папки формировать из название + (год) ???
может сделаете галочку "добавлять год к названию" ??? очень просим)))
| bolide писал(а): |
так весь вид правится в используемом HTML шаблоне...
|
Вот интересно, а как же так сделать шаблон, что бы он строки местами менял?
ведь все эти данные записываются в два места - "Описание" и "Комментарий"
а если мне нужно в "Описании" поменять местами строчки например? к шаблону еще и java писать? (кстати а можно?)
если бы шаблоны на php писались, то тут уж все было бы просто.
| bolide писал(а): |
| iRo писал(а): |
может можно сделать плагин для Вашей функции вывода?
например сделаю dll с функциями
EditURL(var value:string) string // передаем ссылку на фильм, возвращает нужный для записи в dunefolder
EditOpis(var value:string) string // передаем описание фильма, возвращает отредактированное по желанию пользователя
EditComments(var value:string) string // передаем коментарий фильма, возвращает отредактированный по желанию пользователя
|
честно говоря, не понял смысл этих функций  |
так вот и смысл такой - хочется что то подкорректировать под себя лично - сварганил функцию и все.
а так получается выход один - бить Вам челом, и сидеть ждать.
все же если будет свободно пару минут, сделайте, ведь это не сложно...
PS с возвращением. давно на форуме не появлялись, я уж и не надеялся на ответ)))
в отпуске надеюсь время провели? |
|
| Вернуться к началу |
|
 |
|
Powered by phpBB © 2001, 2005 phpBB Group
|