View Issue Details

IDProjectCategoryView StatusLast Update
0000637Far ManagerPlugins API.Panelpublic2009-06-13 11:00
Reporterchupakabra Assigned Toalexy  
PrioritynormalSeverityminorReproducibilityalways
Status closedResolutionfixed 
Fixed in Version2.0 
Summary0000637: Проблемы плагинов с OPIF_REALNAMES
Description1. Поиск выводит результаты в неправильном виде. Можно увидеть на примере плагина NTFS File Information.
2. В flupdate.cpp видим такой код:
    if(Info.Flags & OPIF_REALNAMES)
    {
        ConvertNameToShort (CurListData->strName, CurListData->strShortName);
    }
Зачем он нужен? По-моему его надо убрать, т.к. он создает проблемы с производительностью.
3. Это нормально что Фар иногда использует текущий каталог Windows вместо OpenPluginInfo.CurDir? К примеру, если плагин не вызывает SetCurrentDirectory() при смене каталога (но при этом обновляет OpenPluginInfo.CurDir), то Far неправильно определяет путь к выделенному файлу.
TagsNo tags attached.
Build965

Activities

2008-11-22 14:57

 

flupdate.patch (671 bytes)   
Index: flupdate.cpp
===================================================================
--- flupdate.cpp	(revision 2106)
+++ flupdate.cpp	(working copy)
@@ -729,10 +729,6 @@
 
     //memset(CurListData,0,sizeof(*CurListData));
     PluginToFileListItem(CurPanelData,CurListData);
-    if(Info.Flags & OPIF_REALNAMES)
-    {
-        ConvertNameToShort (CurListData->strName, CurListData->strShortName);
-    }
     CurListData->Position=I;
     if ((Info.Flags & OPIF_USEHIGHLIGHTING) || (Info.Flags & OPIF_USEATTRHIGHLIGHTING))
       CtrlObject->HiFiles->GetHiColor(&CurPanelData->FindData,&CurListData->Colors,(Info.Flags&OPIF_USEATTRHIGHLIGHTING)!=0);
flupdate.patch (671 bytes)   

2008-11-22 14:57

 

findfile.patch (1,720 bytes)   
Index: findfile.cpp
===================================================================
--- findfile.cpp	(revision 2106)
+++ findfile.cpp	(working copy)
@@ -1638,8 +1638,7 @@
       string strFileName=FindList[FindExitIndex]->FindData.strFileName;
       Panel *FindPanel=CtrlObject->Cp()->ActivePanel;
 
-      if ((FindList[FindExitIndex]->ArcIndex != LIST_INDEX_NONE) &&
-          (!(ArcList[FindList[FindExitIndex]->ArcIndex]->Flags & OPIF_REALNAMES)))
+      if (FindList[FindExitIndex]->ArcIndex != LIST_INDEX_NONE)
       {
         HANDLE hPlugin = ArcList[FindList[FindExitIndex]->ArcIndex]->hPlugin;
         if (hPlugin == INVALID_HANDLE_VALUE)
@@ -2630,11 +2629,12 @@
   TRY {
 
     Sleep(200);
-    strPluginSearchPath=L"";
     HANDLE hPlugin=ArcList[FindFileArcIndex]->hPlugin;
     struct OpenPluginInfo Info;
     CtrlObject->Plugins.GetOpenPluginInfo(hPlugin,&Info);
     strSaveDir = Info.CurDir;
+    strPluginSearchPath=Info.CurDir;
+    if (!strPluginSearchPath.IsEmpty()) AddEndSlash(strPluginSearchPath);
     WaitForSingleObject(hPluginMutex,INFINITE);
     if (SearchMode==SEARCH_ROOT ||
         SearchMode==SEARCH_ALL ||
@@ -2718,16 +2718,10 @@
       string strFullName;
       if (StrCmp(strCurName,L".")==0 || TestParentFolderName(strCurName))
         continue;
-      if (Flags & OPIF_REALNAMES)
-      {
-        strFullName = strCurName;
-      }
-      else
-      {
-        strFullName = strPluginSearchPath;
-        strFullName += strCurName;
-      }
 
+      strFullName = strPluginSearchPath;
+      strFullName += strCurName;
+
       /* $ 30.09.2003 KM
         ���������� ���� �� �������� � ��������� �����
       */
findfile.patch (1,720 bytes)   

chupakabra

2008-11-22 15:03

developer   bugnote:0002025

flupdate.patch удаляет вызов ConvertNameToShort() т.к. этим должен заниматься плагин.
findfile.patch исправляет поиск в панели плагина.

alexy

2008-11-22 15:19

administrator   bugnote:0002026

Ты что то немного спешишь. При OPIF_REALNAMES у плагина как бы и не может быть current dir, все элементы панели должны содержать полный путь по другому это работать не может.

chupakabra

2008-11-22 15:28

developer   bugnote:0002027

Думаю надо поменять эту логику. Иначе как быть с плагинами типа NTFS File Information? Но я пока и не пытался править третий пункт, это патчи для первых двух.

alexy

2008-11-22 15:39

administrator   bugnote:0002028

REALNAMES был в общем придуман (я так догадываюсь) для TempPanel, а там есть просто мешанина любых файлов с любой папки, поэтому надо в имени файла содержать полный путь.
Баги 1 и 3 происходят с твоим плагинов скорее всего потому что ты полный путь не хранишь, а это уже типа твой баг. Храни полный путь в filename.
Пункт 2 надо подумать и понять зачем оно вообще было сделано так.

chupakabra

2008-11-22 15:53

developer   bugnote:0002029

Насчет 1 не согласен. Для чего Фар берет на себя задачи по вычислению короткого имени? По-моему этим должен сам плагин заниматься. В итоге получается так, что NTFS File Information генерирует листинг за 10 секунд, а Фар потом еще минуту сканирует диск в поисках этих коротких имен.

chupakabra

2008-11-22 15:54

developer   bugnote:0002030

Перепутал пункты 1 и 2.

alexy

2008-11-22 15:57

administrator   bugnote:0002031

Ты давай исправь у себя в плагине 1 и 3 а насчёт 2 надо думать, т.е. понятно что это convertname немного лишнее но надо всё таки узнать по какой причине оно там есть.

chupakabra

2008-11-22 16:02

developer   bugnote:0002032

Насчет хранения полного пути: в NTFS File Information есть режим, в котором на панели отображаются относительные пути (список файлов из текущего каталога и всех подкаталогов). Можно тут конечно полные пути отображать, но это будет очень некрасиво выглядеть в случае длинных путей.

chupakabra

2008-11-22 16:10

developer   bugnote:0002033

А почему ты вообще против изменения логики REALNAMES? TmpPanel и с новой логикой будет работать, я учитывал что CurDir может быть пустой. Есть какие-то еще плагины с REALNAMES?

chupakabra

2008-11-22 17:15

developer   bugnote:0002034

А это нормально что в плагиновском режиме просмотра панели OPIF_SHOWNAMESONLY не работает?

alexy

2008-11-22 17:30

administrator   bugnote:0002035

Без понятия, надо смотреть.

А насчёт realnames, если ты берёшся проверить все места в коде где юзается REALNAMES и сделать полный патч то для 1.80 твоё добавление к логике принимается.

chupakabra

2008-11-23 10:40

developer   bugnote:0002042

Last edited: 2008-11-23 10:42

Выяснилась еще одна проблема - если CurDir пустой и пользователь нажимает на .. то Фар просто сам закрывает плагин. В итоге непонятно как ходить по каталогам.

chupakabra

2009-03-25 10:52

developer   bugnote:0002823

Свежий патч всегда здесь: http://farplug.googlecode.com/svn/trunk/farpatch/far2.patch

alexy

2009-05-29 23:53

administrator   bugnote:0003370

965

Issue History

Date Modified Username Field Change
2008-11-17 20:07 chupakabra New Issue
2008-11-22 14:57 chupakabra File Added: flupdate.patch
2008-11-22 14:57 chupakabra File Added: findfile.patch
2008-11-22 15:03 chupakabra Note Added: 0002025
2008-11-22 15:19 alexy Note Added: 0002026
2008-11-22 15:19 alexy Status new => assigned
2008-11-22 15:19 alexy Assigned To => alexy
2008-11-22 15:28 chupakabra Note Added: 0002027
2008-11-22 15:39 alexy Note Added: 0002028
2008-11-22 15:53 chupakabra Note Added: 0002029
2008-11-22 15:54 chupakabra Note Added: 0002030
2008-11-22 15:57 alexy Note Added: 0002031
2008-11-22 16:02 chupakabra Note Added: 0002032
2008-11-22 16:10 chupakabra Note Added: 0002033
2008-11-22 17:15 chupakabra Note Added: 0002034
2008-11-22 17:30 alexy Note Added: 0002035
2008-11-23 10:40 chupakabra Note Added: 0002042
2008-11-23 10:42 chupakabra Note Edited: 0002042
2009-03-25 10:52 chupakabra Note Added: 0002823
2009-03-27 15:31 alexy Assigned To alexy =>
2009-03-27 15:31 alexy Status assigned => new
2009-05-29 23:30 alexy Status new => assigned
2009-05-29 23:30 alexy Assigned To => alexy
2009-05-29 23:53 alexy Note Added: 0003370
2009-05-29 23:53 alexy Status assigned => feedback
2009-06-13 11:00 alexy Build => 965
2009-06-13 11:00 alexy Status feedback => closed
2009-06-13 11:00 alexy Resolution open => fixed
2009-06-13 11:00 alexy Fixed in Version => 2.0