Добавить два новых события при поиске в панели плагина

Место, где разработчики плагинов могут поделиться своим опытом.
Post Reply
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Добавить два новых события при поиске в панели плагина

Post by NightRoman »

Предлагается добавить два новых события при поиске в панели плагина: FoundFile и FindCompleted.

Событие FoundFile вызывается Фаром во время поиска по виртуальной ФС плагина, чтобы оповестить плагин о найденном файле, то есть файле, который соответствует критериям поиска (только Фар знает об этом сейчас). Речь идет именно о поиске файлов (AltF7), а не сканировании для инфы (F3|CtrlQ).

Важный момент: событие вызывается после GetFindData и до FreeFindData. Таким образом плагин получает возможность сохранить свой оригинальный объект, соответствующий файлу, живым на потом, когда пользователь будет работать с результатами поиска. Обратная связь обычно делается через UserData, и в момент между GetFindData и FreeFindData это поле актуально.

Второе событие FindCompleted вызывается Фаром, когда он закрывает диалог результатов поиска. Плагин освобождает у себя все, что сам насохранял во время вызовов FoundFile.

===

Какие у меня затруднения с текущей реализацией. Обратная связь файл Фара -> оригинальный объект ФС делается через UserData. Но это поле я не могу использовать в результатах поиска, для этих файлов уже были вызваны FreeFindData. Теоретически я мог бы сохранить живыми вообще все файлы, просканированные Фаром, то есть игнорировать частично FreeFindData во время поиска. Но тогда: 1) может понадобится хранить огромное число объектов (плагин не знает, какие именно файлы "найдены" и будут в результатах), в то время как в результах поиска их может быть лишь небольшое число; 2) все равно не ясно, когда поиск уже совсем закончен, включая работу с результатами, чтобы я мог уже всю эту кучу данных освободить.

Предлагаемое изменение ничего не ломает. Это дополнительная фича, которой плагины могут пользоваться или нет на их усмотрение.

P.S.
И было бы вообще идеально, если бы в момент события FoundFile плагину было бы разрешено поменять UserData именно для копии этого файла, что Фар держит у себя (в контексте между GetFindData и FreeFindData это может быть одно и может быть удалено при стандартном FreeFindData, а при сохранении на потом до результатов поиска - другое, которое будет использоваться при работе с результатами).
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: Добавить два новых события при поиске в панели плагина

Post by Maximus5 »

А кто тебе сказал, что поиск ведется не по "*.*"? Тогда все равно "может понадобится хранить огромное число объектов". Где критерий, когда допустимо сохранять объекты, а когда нет?. Причем, на этапе начала поиска ни фар, ни плагин не смогут спрогнозировать количество найденного.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: Добавить два новых события при поиске в панели плагина

Post by NightRoman »

Если поиск идет по *, то это дело юзера, что он просит, то и получает. Если это затягивается, то он может и прервать.

Но если он ищет не по *, а конкретное, а это начинает занимать время и ресурсы, то это непорядок. И это можно улучшить.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: Добавить два новых события при поиске в панели плагина

Post by NightRoman »

Я снимаю предложение, если этот тикет будет принят к реализации (необходимость просто отпадет):
http://bugs.farmanager.com/view.php?id=1699
Post Reply

Return to “Разработка плагинов”