Page 1 of 5

Маски файлов в API

Posted: Thu 01 Mar, 2012 10:10
by Shmuel
changelog wrote:drkns 24.02.2012 14:27:51 +0200 - build 2488
1. Новая сущность: "группы масок файлов" (Options - Groups of file masks).
Произвольное количество масок файлов можно объединить в группу и присвоить ей имя.
В дальнейшем имя группы, заключенное в угловые скобки ("<имя>"), может использоваться везде, где могут использоваться сами маски.
Хотелось бы, чтоб плагины могли пользоваться функционалом фаровской маски файла в полном объёме (а не усечённом, как в ProcessName). Поскольку в Фаре всё это уже есть и используется из разных мест кода, то дать это ещё и плагинам не должно быть сложно.

Re: Маски файлов

Posted: Thu 01 Mar, 2012 18:36
by Shmuel
Помимо того, что это довольно мощный и полезный функционал, предоставление его плагинам обеспечит для пользователя везде одинаковый синтаксис масок. Например, для плагина LuaFAR Search пришлось написать свою ф-цию. Совпадение с синтаксисом фаровских масок получилось на уровне порядка 95%, что в общем-то устраивало. Но вот теперь, с появлением именованных групп и выражений - уже облом, так как их надо брать из Фара, а не делать свои.
Ну в общем - надеюсь.

Re: Маски файлов

Posted: Thu 01 Mar, 2012 19:27
by NightRoman
+1.

Мне то же самое пришлось в свое время написать в Фарнете. Тоже где-то примерно совпадает, но не на 100%. И тоже теперь облом (либо нужен АПИ получения груп этих масок, но это, имхо, извращение - в Фаре-то все уже есть, плагинам не следует изобретать велик).

Re: Маски файлов

Posted: Thu 01 Mar, 2012 19:40
by DrKnS

Re: Маски файлов

Posted: Thu 01 Mar, 2012 22:48
by Shmuel
DrKnS wrote:
Поигрался.
1. Общая просьба: патчи прикладывать как файлы, так как движок форума заменяет табы на спейсы и удаляет последний перевод строки.
2. Пропатченная функция прошла все мои тесты, так что уже хорошо.
3. На некоторых масках вылезает следующее:

Code: Select all

╔════════════ Warning ═════════════╗
║ File-mask string contains errors ║
╟──────────────────────────────────╢
║              { OK }              ║
╚══════════════════════════════════╝
Для плагинов это плохо. Плагин сам должен решать когда и какие сообщения выводить на экран. Я бы предложил добавить третье значение кода возврата (можно сделать enum для этого), то-есть примерно так:

Code: Select all

enum ProcessNameReturn {
    PNR_NOMATCH=0,
    PNR_MATCH=1,
    PNR_BADMASK=2
};
В дополнение к "троичному" коду возврата, можно добавить флаг, разрешающий/подавляющий вывод сообщений.

Re: Маски файлов

Posted: Thu 01 Mar, 2012 23:32
by DrKnS
А плагину точно необходимо знать, что фару маска пришлась не по нраву? Раньше вроде жили без этого как-то.

Re: Маски файлов

Posted: Thu 01 Mar, 2012 23:44
by Shmuel
Плагину может и не обязательно, а вот для пользователя это не одно и то же - не зря же "Find File" выводит это сообщение при ошибочной маске. То-есть сообщение-то полезное при обычной пользовательской работе, а вот при автоматическом тестировании оно просто подвешивает тесты, требуя ручного вмешательства.

Re: Маски файлов

Posted: Fri 02 Mar, 2012 06:24
by NightRoman
Пока это было внутри Фара, это нормально, что диалог ошибки был забит в ф-ю. Но раз это становится АПИ, то диалог надо либо убрать (но тогда в Фаре использовать оберточную ф-ю, которая показывает диалог при ошибке), это наиболее грамотный вариант. Либо иметь возможность подавлять диалог. Менее красиво, но достаточно.

(В Фаре еще есть АПИ, который показывает диалоги при ошибках, жаловался давно, но не убедил. Если есть интерес, могу попробовать вспомнить, где это было).

Re: Маски файлов

Posted: Fri 02 Mar, 2012 08:13
by Shmuel
Спасибо за 2513. Но... Неужели дополнительный код возврата (пусть даже без enum) может кому-то помешать? То, что раньше жили без этого - не аргумент, раньше жили и без телефонов, и без нового API.

Если проще - сейчас у плагинов отобрали как встроенное сообщение об ошибке в маске, так и возможность самому плагину это сообщение вывести.

Re: Маски файлов

Posted: Fri 02 Mar, 2012 08:29
by NightRoman
Или такая задача плагина - нужно просто проверить маски, то есть допускается, что есть невалидные, но сама такая ситуация - валидная. Только вызывающий АПИ может знать нужен диалог или нет, и какое сообщение, да.

ИМХО, диалоги об ошибках из АПИ надо устранять и заменять на возврат флага или кода ошибок. Для сравнения - в Win32 АПИ где-нибудь диалоги об ошибках есть?

Re: Маски файлов

Posted: Fri 02 Mar, 2012 08:31
by DrKnS
Мне не сильно нравится новый код возврата тем, что ProcessName как бы BOOL, и если кто-то в коде делал так:

Code: Select all

if(fsf.processname(blabla))
{
   MyHadronCollider->Collapse();
}
- то условие тихо и незаметно сработает и для PNR_BADMASK тоже.

Можете считать паранойей, да.

Re: Маски файлов

Posted: Fri 02 Mar, 2012 08:34
by NightRoman
Это не проблема. Просто нужна новая ф-я с новой сигнатурой и документацией. Можно и не ломать, иметь 2 ф-ии, одну как было и одну продвинутую.

Re: Маски файлов

Posted: Fri 02 Mar, 2012 08:36
by DrKnS
NightRoman wrote:Для сравнения - в Win32 АПИ где-нибудь диалоги об ошибках есть?
Могу из фара SetErrorMode(SEM_FAILCRITICALERRORS|SEM_NOOPENFILEERRORBOX) убрать, сам посмотришь. :ha:

Re: Маски файлов

Posted: Fri 02 Mar, 2012 08:39
by NightRoman
NightRoman wrote:Это не проблема. Просто нужна новая ф-я с новой сигнатурой и документацией. Можно и не ломать, иметь 2 ф-ии, одну как было и одну продвинутую.
Может даже лучше структуру в качестве параметра использовать. На случай расширений АПИ. Функция полезная и не такая тривиальная, может, еще что будет с ней развиваться в будущем.

Re: Маски файлов

Posted: Fri 02 Mar, 2012 08:47
by NightRoman
DrKnS wrote:Могу из фара SetErrorMode(SEM_FAILCRITICALERRORS|SEM_NOOPENFILEERRORBOX) убрать, сам посмотришь. :ha:
То есть вин апи позволяет подавить диалоги об ошибках? О том и речь. И что характерно, Фар, как пользователь этого АПИ, их подавляет. Но своим пользователям такую услугу не везде дает.

Если диалоги опциональны в дополнение к кодам ошибок, то нет проблем, пусть будут. Но в Фар апи (кое где) эти диалоги просто вбиты.