Предлагается добавить два новых события при поиске в панели плагина: 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, а при сохранении на потом до результатов поиска - другое, которое будет использоваться при работе с результатами).
Добавить два новых события при поиске в панели плагина
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: Добавить два новых события при поиске в панели плагина
А кто тебе сказал, что поиск ведется не по "*.*"? Тогда все равно "может понадобится хранить огромное число объектов". Где критерий, когда допустимо сохранять объекты, а когда нет?. Причем, на этапе начала поиска ни фар, ни плагин не смогут спрогнозировать количество найденного.
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: Добавить два новых события при поиске в панели плагина
Если поиск идет по *, то это дело юзера, что он просит, то и получает. Если это затягивается, то он может и прервать.
Но если он ищет не по *, а конкретное, а это начинает занимать время и ресурсы, то это непорядок. И это можно улучшить.
Но если он ищет не по *, а конкретное, а это начинает занимать время и ресурсы, то это непорядок. И это можно улучшить.
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: Добавить два новых события при поиске в панели плагина
Я снимаю предложение, если этот тикет будет принят к реализации (необходимость просто отпадет):
http://bugs.farmanager.com/view.php?id=1699
http://bugs.farmanager.com/view.php?id=1699