Page 2 of 2

Re: Замена оверлейных иконок символами в отдельном колумне

Posted: Thu 08 Mar, 2012 22:21
by CyberShadow

Latest post of the previous page:

Да, для каждого файла нужно запросить иконку. MSDN рекомендует это делать асинхронно, но я так понимаю что FAR API это делать не позволяет.

Впрочем, если просто спрашивать у разных VCS статус как было предложено выше, думаю выйдет не лучше, так как у Tortoise* есть доработанные механизмы кеширования (этим занимаются процессы TSVNCache/TGitCache/TortoiseHgOverlayServer).

Re: Замена оверлейных иконок символами в отдельном колумне

Posted: Thu 08 Mar, 2012 22:48
by Maximus5
В bis я сделал опциональное чтение C0 только для видимых файлов. Это немного облегчает ситуацию. Но да, развить апи или таки сделать "менеджер C0 плагинов" не помешало бы

Re: Замена оверлейных иконок символами в отдельном колумне

Posted: Fri 09 Mar, 2012 08:07
by Max Rusov
Можно и асинхронно. Читать в отдельном потоке, обновлять по ACTL_Synchro...

Re: Замена оверлейных иконок символами в отдельном колумне

Posted: Fri 09 Mar, 2012 08:24
by CyberShadow
Синхронизация с главным покотом FAR это только часть проблемы. Остаются вопросы:

1) Можно передать новое значение колонки C0 FAR-у, когда оно будет знакомо?

Если нет, значит надо сохранить значение в памяти и попросить FAR спросить новые значения у плагина еще раз. Тогда остаются еще два вопроса:

2) Можно попросить FAR обновить панель, не перечитывая список файлов с диска?
3) Как правильно различить свежий запрос (при переходе в другую папку или нажатии на Ctrl+R) от повторного перезапроса для получения результата вычисленного в фоновом потоке?

Re: Замена оверлейных иконок символами в отдельном колумне

Posted: Fri 09 Mar, 2012 08:57
by Max Rusov
CyberShadow wrote:2) Можно попросить FAR обновить панель, не перечитывая список файлов с диска?
Теоретически - FCTL_REDRAWPANEL. Если не поможет, то пусть перечитывает (FCTL_UPDATEPANEL), какие проблемы?...
CyberShadow wrote:3) Как правильно различить свежий запрос (при переходе в другую папку или нажатии на Ctrl+R) от повторного перезапроса для получения результата вычисленного в фоновом потоке?
Вызовы FCTL_ скорее всего синхронны, т.ч. простго lock'а должно быть достаточно...

Re: Замена оверлейных иконок символами в отдельном колумне

Posted: Fri 09 Mar, 2012 09:09
by CyberShadow
Max Rusov wrote:Если не поможет, то пусть перечитывает (FCTL_UPDATEPANEL), какие проблемы?...
Допустим что входим в папку с 1000 файлов. Поток считывает по одной иконке и просит FAR обновить панель. Получается что FindFirstFile вызывается 1000 раз, а FindNextFile - около миллиона...

(Можно конечно группировать обновления с таймаутами итд, но это далеко не лучший вариант.)

Re: Замена оверлейных иконок символами в отдельном колумне

Posted: Fri 09 Mar, 2012 10:07
by Tim Sobolev
CyberShadow wrote:Впрочем, если просто спрашивать у разных VCS статус как было предложено выше, думаю выйдет не лучше, так как у Tortoise* есть доработанные механизмы кеширования (этим занимаются процессы TSVNCache/TGitCache/TortoiseHgOverlayServer).
Тут вот какое дело... Процесс этот у меня отключён (Status cache - Shell), но в проводнике всё работает намного быстрее.

Re: Замена оверлейных иконок символами в отдельном колумне

Posted: Fri 09 Mar, 2012 12:03
by Maximus5
Так ведь проводник считывает только видимые иконки :D

Re: Замена оверлейных иконок символами в отдельном колумне

Posted: Fri 09 Mar, 2012 23:56
by CyberShadow
Tim Sobolev wrote:Тут вот какое дело... Процесс этот у меня отключён (Status cache - Shell), но в проводнике всё работает намного быстрее.
Для иконок файлов этот процесс особо не нужен, а оверлеи над папками отображаются? Без кеширования непонятно как эффективно знать статус всех файлов в папке и всех подпапок.