Как Фар подсчитывает размер директорий на плагиновых панелях

Место, где разработчики плагинов могут поделиться своим опытом.
Post Reply
User avatar
igor
Posts: 27
Joined: Mon 29 Apr, 2013 08:22
Has thanked: 11 times
Been thanked: 1 time

Как Фар подсчитывает размер директорий на плагиновых панелях

Post by igor »

Ребят, если кто будет проходить мимо, нужен совет: не могу раскусить, каким образом фар показывает размер каталога под курсором на панели при нажатии F3? Уже не первый месяц пописываю плагин на плюсах, вроде потиху на все вопросы свои нашел ответы, этот пока понять не могу) У меня там находятся виртуальные каталоги (FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_VIRTUAL), может дело в том, что они ненастоящие и не имеют привязки к реальным файловым сущностям?
Shmuel
Posts: 6970
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 42 times
Been thanked: 562 times

Far & spotify: валидация идеи

Post by Shmuel »

igor wrote: Mon 24 Feb, 2025 21:43 каким образом фар показывает размер каталога под курсором на панели при нажатии F3
Если это каталог файловой системы, производится сканирование его и всех подкаталогов и соответственно подсчёт суммарного размера.
Если это каталог плагина, алгоритм примерно тот же, но данные запрашиваются у плагина вызовами SetDirectoryW и GetFindDataW.
User avatar
igor
Posts: 27
Joined: Mon 29 Apr, 2013 08:22
Has thanked: 11 times
Been thanked: 1 time

Far & spotify: валидация идеи

Post by igor »

Это было неожиданно, но, по ходу, теперь понятно. Спасибо большое, пошел дальше сражаться.
User avatar
igor
Posts: 27
Joined: Mon 29 Apr, 2013 08:22
Has thanked: 11 times
Been thanked: 1 time

Как Фар подсчитывает размер директорий на плагиновых панелях

Post by igor »

Теперь я понял, что значили эти слова в доках: "Плагин должен быть готов обрабатывать флаг OPM_FIND") Не погружаясь в вопрос, думал, что флаг целиком и полностью относится к окну поиска.

Для тех, кто будет искать ответ после меня: после нажатия F3 на панели ФАР вызывает функцию SetDirectoryW с флагами OPM_FIND & OPM_SILENT. И если функция вернет TRUE, то следом вызывается GetFindDataW с теми же флагами. Дальше ФАР вызовет опять SetDirectoryW для каждого вложенного каталога, пока они не закончатся, по пути собирая значения и суммируя из PluginPanelItem.FileSize из файловых энтри. Т.е. в доках имеется ввиду, что плагин должен уметь нормально обрабатывать именно это поведение; плюс, по всей видимости, аналогичное рекурсивное поведение при вызове окна поиска Alt+F7, туда я еще не добрался.

Разбираюсь с вопросом со вчера, могу еще не все нюансы знать, поправьте, если что.
Last edited by igor on Tue 25 Feb, 2025 13:16, edited 1 time in total.
Post Reply

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