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

Разработка Far.
Shmuel
Posts: 5235
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 152 times

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

Post by Shmuel » Thu 01 Mar, 2012 10:10

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

Shmuel
Posts: 5235
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 152 times

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

Post by Shmuel » Thu 01 Mar, 2012 18:36

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

User avatar
NightRoman
Posts: 5873
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 8 times
Been thanked: 9 times
Contact:

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

Post by NightRoman » Thu 01 Mar, 2012 19:27

+1.

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

User avatar
DrKnS
Posts: 4648
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 125 times
Contact:

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

Post by DrKnS » Thu 01 Mar, 2012 19:40


Shmuel
Posts: 5235
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 152 times

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

Post by Shmuel » Thu 01 Mar, 2012 22:48

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
};
В дополнение к "троичному" коду возврата, можно добавить флаг, разрешающий/подавляющий вывод сообщений.

User avatar
DrKnS
Posts: 4648
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 125 times
Contact:

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

Post by DrKnS » Thu 01 Mar, 2012 23:32

А плагину точно необходимо знать, что фару маска пришлась не по нраву? Раньше вроде жили без этого как-то.

Shmuel
Posts: 5235
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 152 times

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

Post by Shmuel » Thu 01 Mar, 2012 23:44

Плагину может и не обязательно, а вот для пользователя это не одно и то же - не зря же "Find File" выводит это сообщение при ошибочной маске. То-есть сообщение-то полезное при обычной пользовательской работе, а вот при автоматическом тестировании оно просто подвешивает тесты, требуя ручного вмешательства.

User avatar
NightRoman
Posts: 5873
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 8 times
Been thanked: 9 times
Contact:

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

Post by NightRoman » Fri 02 Mar, 2012 06:24

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

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

Shmuel
Posts: 5235
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 152 times

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

Post by Shmuel » Fri 02 Mar, 2012 08:13

Спасибо за 2513. Но... Неужели дополнительный код возврата (пусть даже без enum) может кому-то помешать? То, что раньше жили без этого - не аргумент, раньше жили и без телефонов, и без нового API.

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

User avatar
NightRoman
Posts: 5873
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 8 times
Been thanked: 9 times
Contact:

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

Post by NightRoman » Fri 02 Mar, 2012 08:29

Или такая задача плагина - нужно просто проверить маски, то есть допускается, что есть невалидные, но сама такая ситуация - валидная. Только вызывающий АПИ может знать нужен диалог или нет, и какое сообщение, да.

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

User avatar
DrKnS
Posts: 4648
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 125 times
Contact:

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

Post by DrKnS » Fri 02 Mar, 2012 08:31

Мне не сильно нравится новый код возврата тем, что ProcessName как бы BOOL, и если кто-то в коде делал так:

Code: Select all

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

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

User avatar
NightRoman
Posts: 5873
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 8 times
Been thanked: 9 times
Contact:

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

Post by NightRoman » Fri 02 Mar, 2012 08:34

Это не проблема. Просто нужна новая ф-я с новой сигнатурой и документацией. Можно и не ломать, иметь 2 ф-ии, одну как было и одну продвинутую.

User avatar
DrKnS
Posts: 4648
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 125 times
Contact:

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

Post by DrKnS » Fri 02 Mar, 2012 08:36

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

User avatar
NightRoman
Posts: 5873
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 8 times
Been thanked: 9 times
Contact:

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

Post by NightRoman » Fri 02 Mar, 2012 08:39

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

User avatar
NightRoman
Posts: 5873
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 8 times
Been thanked: 9 times
Contact:

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

Post by NightRoman » Fri 02 Mar, 2012 08:47

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

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

User avatar
NightRoman
Posts: 5873
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 8 times
Been thanked: 9 times
Contact:

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

Post by NightRoman » Fri 02 Mar, 2012 09:00

http://bugs.farmanager.com/view.php?id=1087
Еще про диалоги при ошибках в SetPanelDirectory. Не убедил. В итоге приходится самому до вызова проверять, что директория есть. В случае с хитрыми и длинными путями это еще и не так просто в Фарнет сделать. Нелепо это делать, а приходится, чтобы избегать диалога. (Авто-тесты не должны вставать из-за диалога, но это не единственная причина).

Post Reply

Return to “Development”