View Issue Details

IDProjectCategoryView StatusLast Update
0001087Far ManagerPlugins API.Panelpublic2018-04-28 22:09
ReporterNightRomanAssigned Toalexy 
PrioritynormalSeverityminorReproducibilityalways
Status closedResolutionfixed 
Product Version2.0 
Target VersionFixed in Version2.0 
Summary0001087: FCTL_SETPANELDIR не возвращает ошибку (0) для несуществующего пути, но дает нежелательный диалог
Description1) FCTL_SETPANELDIR не возвращает ошибку (0) для несуществующего пути. Таким образом, у плагинов либо нет шансов предпринять правильные действия в случае отказа, либо им всем самим надо делать такие проверки до вызова FCTL_SETPANELDIR.
2) На самом деле, есть еще один недостаток - если путь не существует, Фар выдает диалог с сообщением об этом. Может это дело вкуса, так вот на мой вкус такое поведени Фара идеологически неправильно - Фар не должен решать за плагины, как отрабатывать такую ситуацию и прерывать ли выполнение диалогом. Задача FCTL_SETPANELDIR - сделать дело и вернуть 1 или вернуть 0 при ошибке.

Начало истории тут:
http://bugs.farmanager.com/view.php?id=1078
TagsNo tags attached.
Build1187

Relationships

related to 0003604 new Возможность блокировать сообщение об ошибке в функции panel.SetPanelDirectory 

Activities

NightRoman

2009-10-27 17:00

reporter   bugnote:0004354

Вот тут еще аргумент за то, что Фар не должен показывать диалог:
http://forum.farmanager.com/viewtopic.php?f=8&t=4700

В двух словах: диалог может вклиниться в играющий макрос и изменить его поведение, результаты не очень предсказуемы и у плагина нет шансов на это повлиять, то есть "за последствия отвечает Фар".

В зависимости от макроса "беда" может произойти еще до выхода из диалога, например, такое гипотетическое продолжение макроса: F11 <some-plugin-hotkey> <dangerous-operation-hotkey>: то есть "dangerous-operation" отработает не там, где планировалось, пока висит этот диалог. Плагин вызвавший FCTL_SETPANELDIR при этом бессилен, ему еще даже управление не вернулось после вызова.

Если этого же диалога Фара нет, и вместо этого FCTL_SETPANELDIR вернет 0 для плагина, то у плагина есть все шансы разрулить ситуацию грамотно, то есть "за последствия отвечает плагин".

alexy

2009-10-27 17:16

administrator   bugnote:0004355

Диалог показыватся должен, ибо он же показывается если сделать cd на кривой путь ручками. Но вот возвращать ошибку в случае не удачи надо конечно.

NightRoman

2009-10-27 17:35

reporter   bugnote:0004356

cd на кривой путь ручками - это не АПИ, а UI, тут диалог об ошибке нормален. А в АПИ - ненормален совсем, может быть ОК, только если функа предоставляет опцию, показывать ли диалог, это только плугу решать.

NightRoman

2009-10-27 17:40

reporter   bugnote:0004357

> cd на кривой путь ручками - это не АПИ, а UI, тут диалог об ошибке нормален.
поясню, почему - потому что юзер знает, что этот диалог при сбое будет, и может свой макрос, писать соответственно.

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

alexy

2009-10-27 18:01

administrator   bugnote:0004359

fixed. 1186. проверь пожалуйста.

alexy

2009-10-27 18:03

administrator   bugnote:0004360

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

Denis

2009-10-27 18:08

reporter   bugnote:0004361

Может и ошибаюсь, но в 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;
}
============================================================

alexy

2009-10-27 18:26

administrator   bugnote:0004364

А не он вызывается вообще. Я же сказал, проверяйте на реальном плагине.

NightRoman

2009-10-27 18:29

reporter   bugnote:0004365

Не работает :( Вроде все как и было осталось.

Хозяин-барин, нет вопросов. Но по мне этот диалог идеологически неверен. Плагин зовет FCTL_SETPANELDIR как часть какой-то другой операции, о которой просит юзер, может даже одной из нескольких операций. Сообщение Фара юзеру может вообще ни о чем ни говорить, какой путь не нашли? какая именно запрошенная операция не отработала? ХЗ. По нормальному - это плагин, кто должен вывести это сообщение, только оно уже более осмысленное из контекста - что именно в итоге не получилось сделать. Итого будет два диалога - Фара (абстрактное сообщение о сбое) и плагина (конкретно, что в итоге не получилось). Оно надо юзеру?

Другая ситуация. Это может быть часть сценария, что Фар не сможет установить какой-то путь, и тогда плагин как ни в чем не бывало отрабатывает план Б. Может проверяет несколько раз даже. Зачем все эти диалоги юзеру видеть? Это может идти абсолютно нормальная работа и это никакие не ошибки.

NightRoman

2009-10-27 18:30

reporter   bugnote:0004366

> Я же сказал, проверяйте на реальном плагине.
Это как? Я вроде так и делаю.

NightRoman

2009-10-27 18:49

reporter   bugnote:0004367

Или это сделано для панелей плагина? Хм. Я не об этом, а об обычных файловых панелях Фара. А в своих панелях я эту функу никогда и не использую, есть лучше способы переместится на другой путь (для меня лучше, во всяком случае).

alexy

2009-10-27 19:08

administrator   bugnote:0004368

1187, вроде доделал.

Roman:
Не понял последнего вопроса, ты о чём?

А диалог, он тока для реальных панелей покажется, не для плагиновых.

NightRoman

2009-10-27 19:19

reporter   bugnote:0004369

1187. Теперь вроде работает. Спасибо.

Подумай от отказе от диалога. Ну не должен АПИ решать за клиента: прерывать выполнение или нет, и с каким сообщением, если уж прерывать.

Issue History

Date Modified Username Field Change
2009-09-30 14:20 NightRoman New Issue
2009-10-27 17:00 NightRoman Note Added: 0004354
2009-10-27 17:16 alexy Note Added: 0004355
2009-10-27 17:35 NightRoman Note Added: 0004356
2009-10-27 17:40 NightRoman Note Added: 0004357
2009-10-27 18:01 alexy Note Added: 0004359
2009-10-27 18:01 alexy Assigned To => alexy
2009-10-27 18:01 alexy Status new => feedback
2009-10-27 18:03 alexy Note Added: 0004360
2009-10-27 18:08 Denis Note Added: 0004361
2009-10-27 18:26 alexy Note Added: 0004364
2009-10-27 18:29 NightRoman Note Added: 0004365
2009-10-27 18:30 NightRoman Note Added: 0004366
2009-10-27 18:49 NightRoman Note Added: 0004367
2009-10-27 19:08 alexy Note Added: 0004368
2009-10-27 19:19 NightRoman Note Added: 0004369
2009-10-27 19:24 NightRoman Status feedback => resolved
2009-10-27 19:34 alexy Build => 1187
2009-10-27 19:34 alexy Status resolved => closed
2009-10-27 19:34 alexy Fixed in Version => 2.0
2009-10-27 19:34 alexy Resolution open => fixed
2018-04-28 22:09 DrKnS Relationship added related to 0003604