Русский > Разработчикам

Разработка плагинов (вопросы)

<< < (9/12) > >>

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 Зачем, почему и как от этого избавиться не понятно.

Навигация

[0] Главная страница сообщений

[#] Следующая страница

[*] Предыдущая страница

Перейти к полной версии