View Issue Details

IDProjectCategoryView StatusLast Update
0001699Far ManagerPlugins API.Panelpublic2011-12-25 16:48
ReporterNightRoman Assigned To 
PrioritynormalSeverityblockReproducibilityalways
Status newResolutionopen 
Product Version2.0 
Summary0001699: Облегчить использование UserData для хранения данных панельным плагинам
DescriptionМеханизм GetFindData/FreeFindData хорош, но обладает небольшим изъяном, который сильно осложняет использование UserData для хранения данных в панельных плагинах.

Хотелось бы, чтобы FreeFindData вызывался тогда, когда Фар уже не будет работать с этими данными, например, посылать их в GetFiles, PutFiles и т.п. Сейчас это не так. Фар вызвал GetFindData, скопировал данные к себе, вызвал FreeFindData. Потом может выполнять всякие операции, в том числе и поиск по вложенным папкам виртуальной ФС, и при этом помнить данные из стартовой папки поиска. Поиск заканчивается возвратом в стартовую папку (SetDirectory), но GetFindData Фар не вызывает, а использует данные, которые помнит. И для которых он уже вызвал FreeFindData у плагина.

Почему это неудобно для плагина. Плагин не может эффективно использовать UserData файлов, как идентификатор внутреннего ресурса, прикрепленного к файлу.

Если бы было так, как предлагается, все было бы грамотно и просто: в GetFindData плагин выделил ресурсы, прикрепил их к UserData. Пока Фар работает с этими данными и запрашивает дополнительные подробности у плагина (GetFiles и т.п.), эти UserData - валидные ресурсы, плагин по ним доступается к своим живым мета-данным файлов. Когда Фар вызывает FreeFindData, плагин освобождает все ресурсы, ассоциированные с UserData.

Но сейчас это не так. Плагин не может прикрепить ресурс к UserData и освободить его при FreeFindData, потому что работа с этими данными не закончена после вызова FreeFindData. Фар будет засылать эти данные в плагин. Хранить приходится как-то еще, выкручиваться. Это более-менее проходит при простой навигации по виртуальной ФС. Но с поиском, особенно вложенным, и с просмотром результатов во вьюере или редакторе выкрутасы уже такой сложности надо придумывать, что нередко проще отказаться от поиска в панелях плагина вообще.

(Хоть это к делу и не относится напрямую, я так и сделал в своих панелях в PSF, отказался от поиска. А хотелось бы по данным провайдеров PowerShell поискать, но чтобы без лишних выкрутасов с мета-данными виртуальных файлов)

Форум:
http://forum.farmanager.com/viewtopic.php?f=8&t=6176
TagsNo tags attached.
Build

Activities

Maximus

2011-04-24 13:52

reporter   bugnote:0006838

Кстати, на счет поиска в панелях плагинов. Очень не хватает возможности выкинуть результаты найденного в TempPanel. Приходится в каждом плагине лепить свой движок поиска, что как-то некошерно.
Понятно, что плагин "TempPanel" напрямую использовать нельзя (скорее всего закроется исходный плагин, в котором искали, что не есть хорошо), но тем не менее.
Как вариант, если плагин экспортирует _свою_ SetFindListW - то звать именно ее, а не "дефолтный" плагин временной панели.

Есть еще один нюанс - плагинов, по которым можно искать - дофига, и если каждый из них предоставит SetFindListW - фар (вроде бы) будет предлагать меню выбора плагина при обычном поиске в файловой панели. Так что нужен флажок типа "PIF_ONLYSELFFINDLIST".

alexy

2011-04-24 13:58

administrator   bugnote:0006839

это ни как не относится к данному тикету.

alexy

2011-12-25 15:58

administrator   bugnote:0008250

А PPIF_USERDATA не помогает?

NightRoman

2011-12-25 16:48

reporter   bugnote:0008251

Нет. То же самое спросил zg, смотри обсуждение по ссылке. В итоге zg сформулировал это так:
"
поступило предложение выкинуть PPIF_USERDATA, и в PluginPanelItem добавить FARAPIFREE FreeUserData. фар ничего себе копировать не будет а при освобождении будет дёргаться FreeUserData.
"

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

Issue History

Date Modified Username Field Change
2011-02-03 05:25 NightRoman New Issue
2011-04-24 13:52 Maximus Note Added: 0006838
2011-04-24 13:58 alexy Note Added: 0006839
2011-12-25 15:58 alexy Note Added: 0008250
2011-12-25 16:48 NightRoman Note Added: 0008251