View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0001087 | Far Manager | Plugins API.Panel | public | 2009-09-30 10:20 | 2018-04-28 19:09 |
Reporter | NightRoman | Assigned To | alexy | ||
Priority | normal | Severity | minor | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Product Version | 2.0 | ||||
Fixed in Version | 2.0 | ||||
Summary | 0001087: FCTL_SETPANELDIR не возвращает ошибку (0) для несуществующего пути, но дает нежелательный диалог | ||||
Description | 1) FCTL_SETPANELDIR не возвращает ошибку (0) для несуществующего пути. Таким образом, у плагинов либо нет шансов предпринять правильные действия в случае отказа, либо им всем самим надо делать такие проверки до вызова FCTL_SETPANELDIR. 2) На самом деле, есть еще один недостаток - если путь не существует, Фар выдает диалог с сообщением об этом. Может это дело вкуса, так вот на мой вкус такое поведени Фара идеологически неправильно - Фар не должен решать за плагины, как отрабатывать такую ситуацию и прерывать ли выполнение диалогом. Задача FCTL_SETPANELDIR - сделать дело и вернуть 1 или вернуть 0 при ошибке. Начало истории тут: http://bugs.farmanager.com/view.php?id=1078 | ||||
Tags | No tags attached. | ||||
Build | 1187 | ||||
|
Вот тут еще аргумент за то, что Фар не должен показывать диалог: http://forum.farmanager.com/viewtopic.php?f=8&t=4700 В двух словах: диалог может вклиниться в играющий макрос и изменить его поведение, результаты не очень предсказуемы и у плагина нет шансов на это повлиять, то есть "за последствия отвечает Фар". В зависимости от макроса "беда" может произойти еще до выхода из диалога, например, такое гипотетическое продолжение макроса: F11 <some-plugin-hotkey> <dangerous-operation-hotkey>: то есть "dangerous-operation" отработает не там, где планировалось, пока висит этот диалог. Плагин вызвавший FCTL_SETPANELDIR при этом бессилен, ему еще даже управление не вернулось после вызова. Если этого же диалога Фара нет, и вместо этого FCTL_SETPANELDIR вернет 0 для плагина, то у плагина есть все шансы разрулить ситуацию грамотно, то есть "за последствия отвечает плагин". |
|
Диалог показыватся должен, ибо он же показывается если сделать cd на кривой путь ручками. Но вот возвращать ошибку в случае не удачи надо конечно. |
|
cd на кривой путь ручками - это не АПИ, а UI, тут диалог об ошибке нормален. А в АПИ - ненормален совсем, может быть ОК, только если функа предоставляет опцию, показывать ли диалог, это только плугу решать. |
|
> cd на кривой путь ручками - это не АПИ, а UI, тут диалог об ошибке нормален. поясню, почему - потому что юзер знает, что этот диалог при сбое будет, и может свой макрос, писать соответственно. А когда работает плагин для каких-то делов - не поймешь, будет он вызывать FCTL_SETPANELDIR или не будет, может это вообще внутренне делается зачем-то. И если это делается много раз, то юзер опять же устанет закрывать этот диалог. |
|
fixed. 1186. проверь пожалуйста. |
|
А диалог убирать я не буду, я считаю что он уместен. Можешь открыть новый тикет в вишах по этой теме если хочешь. |
|
Может и ошибаюсь, но в 1186 работать не будет, так как 'SetCurDir' всегда возвращает TRUE: ============================================================ BOOL Panel::SetCurDir(const wchar_t *CurDir,int ClosePlugin) { if(StrCmpI(strCurDir,CurDir) || !TestCurrentDirectory(CurDir)) { strCurDir = CurDir; if(PanelMode!=PLUGIN_PANEL) PrepareDiskPath(strCurDir); } return TRUE; } ============================================================ |
|
А не он вызывается вообще. Я же сказал, проверяйте на реальном плагине. |
|
Не работает :( Вроде все как и было осталось. Хозяин-барин, нет вопросов. Но по мне этот диалог идеологически неверен. Плагин зовет FCTL_SETPANELDIR как часть какой-то другой операции, о которой просит юзер, может даже одной из нескольких операций. Сообщение Фара юзеру может вообще ни о чем ни говорить, какой путь не нашли? какая именно запрошенная операция не отработала? ХЗ. По нормальному - это плагин, кто должен вывести это сообщение, только оно уже более осмысленное из контекста - что именно в итоге не получилось сделать. Итого будет два диалога - Фара (абстрактное сообщение о сбое) и плагина (конкретно, что в итоге не получилось). Оно надо юзеру? Другая ситуация. Это может быть часть сценария, что Фар не сможет установить какой-то путь, и тогда плагин как ни в чем не бывало отрабатывает план Б. Может проверяет несколько раз даже. Зачем все эти диалоги юзеру видеть? Это может идти абсолютно нормальная работа и это никакие не ошибки. |
|
> Я же сказал, проверяйте на реальном плагине. Это как? Я вроде так и делаю. |
|
Или это сделано для панелей плагина? Хм. Я не об этом, а об обычных файловых панелях Фара. А в своих панелях я эту функу никогда и не использую, есть лучше способы переместится на другой путь (для меня лучше, во всяком случае). |
|
1187, вроде доделал. Roman: Не понял последнего вопроса, ты о чём? А диалог, он тока для реальных панелей покажется, не для плагиновых. |
|
1187. Теперь вроде работает. Спасибо. Подумай от отказе от диалога. Ну не должен АПИ решать за клиента: прерывать выполнение или нет, и с каким сообщением, если уж прерывать. |
Date Modified | Username | Field | Change |
---|---|---|---|
2009-09-30 10:20 | NightRoman | New Issue | |
2009-10-27 14:00 | NightRoman | Note Added: 0004354 | |
2009-10-27 14:16 | alexy | Note Added: 0004355 | |
2009-10-27 14:35 | NightRoman | Note Added: 0004356 | |
2009-10-27 14:40 | NightRoman | Note Added: 0004357 | |
2009-10-27 15:01 | alexy | Note Added: 0004359 | |
2009-10-27 15:01 | alexy | Assigned To | => alexy |
2009-10-27 15:01 | alexy | Status | new => feedback |
2009-10-27 15:03 | alexy | Note Added: 0004360 | |
2009-10-27 15:08 | Denis | Note Added: 0004361 | |
2009-10-27 15:26 | alexy | Note Added: 0004364 | |
2009-10-27 15:29 | NightRoman | Note Added: 0004365 | |
2009-10-27 15:30 | NightRoman | Note Added: 0004366 | |
2009-10-27 15:49 | NightRoman | Note Added: 0004367 | |
2009-10-27 16:08 | alexy | Note Added: 0004368 | |
2009-10-27 16:19 | NightRoman | Note Added: 0004369 | |
2009-10-27 16:24 | NightRoman | Status | feedback => resolved |
2009-10-27 16:34 | alexy | Build | => 1187 |
2009-10-27 16:34 | alexy | Status | resolved => closed |
2009-10-27 16:34 | alexy | Fixed in Version | => 2.0 |
2009-10-27 16:34 | alexy | Resolution | open => fixed |
2018-04-28 19:09 | DrKnS | Relationship added | related to 0003604 |