Русский > Разработчикам
Разработка плагинов (вопросы)
Resha:
Вопросы по плагинам (не скрипатм ;-) ):
1. Можно ли в плагине получить какую-то информация из карточки фильма?
Ситуация: одним плагном получил дату релиза, скажем, "февраль 2000". В базу заношу "01.02.2000". Затем прохожу вторым плагином (по другому сайту) и там дата "08 февраля 2000". И вот тут хотелось бы проверить, что если в карточке стоит дата с днём "01", то взять новую.
Также неплохо было бы знать информацию о количестве скриншотов, чтоб плагин не добавлял лишние.
2. Получил список ссылок (10 шт). Но программа выбрала сама одну и начала загружать. Предполагаю, что программа сама делает какие-то проверки (понятно одна из них: КоличествоСсылок = 1). Нет ли там проверки по точному совпадению (без учета регистра) названия фильма? Если есть, то можно ли её из где-либо (желательно из плагина) отключить?
3. Есть пользовательское поле типа "Memo". Можно в него плагином ДОБАВЛЯТЬ информацию?
Пример: Поле называется "Дополнительные ресурсы". Один плагин нашёл на сайте чего-то - записал в поле, второй нашёл - ДОПИСАЛ в это поле.
nostra:
--- Цитировать ---Можно ли в плагине получить какую-то информация из карточки фильма?
--- Конец цитаты ---
Конечно, любую информацию можно получить. Для этого нужно получить адрес ф-ции для получения значений вот так:
--- Код: ---...
type
TPluginGetValueCallback = function (const AValue : Integer; const IsCustom : Boolean) : PWideChar;
...
var
GetValue, GetParentValue : TPluginGetValueCallback;
...
procedure SetValueCallback(AValueCallback, AParentValueCallback : TPluginGetValueCallback); stdcall;
begin
GetValue := AValueCallback;
GetParentValue := AParentValueCallback;
end;
...
exports
...
SetValueCallback;
--- Конец кода ---
Теперь можно вызывать ф-цию GetValue для получения значения из актуальной записи или GetParentValue для получения значения из записи сериала из-под єпизода.
--- Цитировать ---Нет ли там проверки по точному совпадению (без учета регистра) названия фильма? Если есть, то можно ли её из где-либо (желательно из плагина) отключить?
--- Конец цитаты ---
Есть. Отключить нельзя. Зачем нужна проверка с учётом регистра?
--- Цитировать ---Есть пользовательское поле типа "Memo". Можно в него плагином ДОБАВЛЯТЬ информацию?
Пример: Поле называется "Дополнительные ресурсы". Один плагин нашёл на сайте чего-то - записал в поле, второй нашёл - ДОПИСАЛ в это поле.
--- Конец цитаты ---
Можно ;) Вот этот код нужен для получения списка имеющихся польз. полей и соответсвенно определения номера поля для использования в ф-ции GetValue:
.
--- Код: ---..
type
TWideArray = array of WideString;
TIntArray = array of Integer;
var
CustomFieldNames : TWideArray;
CustomFieldIDs : TIntArray;
...
function ExplodeCustomFields(AText : PWideChar; var Fields : TWideArray; var Indexes : TIntArray) : Integer; overload;
var
I : Integer;
S : WideString;
IsField, Done : Boolean;
begin
Result := 0;
SetLength(Fields, Result);
SetLength(Indexes, Result);
if AText = nil then
Exit;
I := 0;
Done := (AText[I] = #8) AND (AText[I + 1] = #0);
IsField := True;
while not Done do begin
S := '';
while AText[I] <> #0 do begin
S := S + AText[I];
Inc(I);
end;
if IsField then begin
Inc(Result);
SetLength(Fields, Result);
SetLength(Indexes, Result);
end;
if IsField then
Fields[Result - 1] := S
else
Indexes[Result - 1] := StrToIntDef(S, 0);
IsField := not IsField;
Inc(I);
if (AText[I] = #8) AND (AText[I + 1] = #0) then
Done := True;
end;
end;
...
procedure SetCustomFields(CustomFields : PWideChar); stdcall;
begin
ExplodeCustomFields(CustomFields, CustomFieldNames, CustomFieldIDs);
end;
...
exports
...
SetCustomFields;
--- Конец кода ---
Имея значения поля добавляем к нему новые данные и передаём программе в виде XML:
--- Код: ---<custom>
<customid>CustomFieldIDs[FieldIndex]</customid>
<value>New field value</value>
</custom>
--- Конец кода ---
Resha:
--- Цитата: nostra от 20 Февраля 2009, 00:52:13 ---
--- Цитировать ---Нет ли там проверки по точному совпадению (без учета регистра) названия фильма? Если есть, то можно ли её из где-либо (желательно из плагина) отключить?
--- Конец цитаты ---
Есть. Отключить нельзя. Зачем нужна проверка с учётом регистра?
--- Конец цитаты ---
Уже и не надо, да и дело не в регистре (см. объяснение ниже). Буквально тока шо решил проблему по другому.
Объянсю ради интереса:
Есть три игры "Postal 2", "Postal 2: Share the Pain" и "Postal 2: Штопор Жж0т" (аналогию можно провести с фильмами Матрица, ...). Первые две игры затягивались отлично без вопроса сама выбирала ссылку по точному совпадению названия, а с третьей возникла проблема.
В базу я её занёс как "Postal 2: Штопор Жжёт". Из-за одной буквы плагин не находил ссылок вообще. А когда в карточке убрал всё после двоеточия, то программа подхватила, не спрашивая, мне инфу по первой игре.
Решил проблему так: если не находит "Postal 2: Штопор Жжёт", то плагин обрезает строку поиска до первого пробела (ну или плюса в строке поиска) "Postal 2" ищет инфу, а т.к. в карточке по прежнему стоит "Postal 2: Штопор Жжёт", то теперь відаёт список для выбора ;-)
По остальному спасибо буду разбираться
Reset:
Подскажите, пожалуйста, как можно эффективно отлаживать плагины?
Вопрос заключается в следующем. Я написал часть плагина и успешно его откомпилировал. Могу ли я проверить правильность функционирования плагина без программы (вероятно, нет)? Если могу, то как? А если не могу, то могу ли я не перезапускать программу при обновлении плагина? Если да, то как?
nostra:
Отлаживать как обычно в дебагере.
--- Цитировать ---Могу ли я проверить правильность функционирования плагина без программы (вероятно, нет)?
--- Конец цитаты ---
Нет
--- Цитировать ---А если не могу, то могу ли я не перезапускать программу при обновлении плагина? Если да, то как?
--- Конец цитаты ---
Скорее всего не получится плагин откопилировать т.к. он подгружен. Тут ничего не поделаешь. На самом деле эта проблема довольно странная т.к. я подгружаю плагины только по мере надобности, но после многих тестов выяснилось, что это Firebird их занимает :o Зачем, почему и как от этого избавиться не понятно.
Навигация
Перейти к полной версии