View Issue Details

IDProjectCategoryView StatusLast Update
0001628Double CommanderLogicpublic2017-12-22 02:58
Reportercordylus Assigned To 
PrioritynormalSeverityminorReproducibilityalways
Status newResolutionopen 
ProjectionnoneETAnone 
Product Version0.7.6 
Summary0001628: Выйдя из архива, в который зашел через результаты поиска по файлам в архивах, оказываешься не в той папке, не в папке с архивом
DescriptionА в последней открытой папке перед переходом к результату поиска.

Также после выхода переход назад (к предыдущему элементу истории) не работает, чтобы вернуться в архив - в историю он не попадает.
Steps To ReproduceНачать поиск любых файлов с включенным "Искать в архивах"
Тем временем перейти в другую папку или переключиться на другую панель
Перейти по результату в какой-то архив
Выйти из архива вверх, через ..
Additional InformationПохож на 0001400
TagsNo tags attached.
Fixed in Revision
Operating system
Widgetset
Architecture

Relationships

related to 0001400 resolvedAlexx2000 "Вверх" внутри архива ведёт не "вверх", а "назад", если архив был открыт в одной панели, а в другую перенесен через ctrl+стрелка 

Activities

cordylus

2017-12-22 00:53

developer   ~0002456

Это архитектурная недоработка, TFileView.ChangePathToParent вызывает TFileView.RemoveCurrentFileSource, который переходит не вверх, а назад по истории

И если для wfx-плагинов (FTP и т.п.) это нормально, т.к. у них не может быть родительской директории, то для архивов - некорректно.

Теоретически, конечно, можно добавить костылей, вставляющих нужные элементы истории, в TMainCommands.DoTransferPath для фикса 0001400 и в функцию открытия архива из поиска для 0001628.

Но правильно было бы как-то хранить положение в родительском архиве.

Эти данные уже есть в ParentFileSource и CurrentAddress (адрес архива в родительской ФС):

if (FileSource.ParentFileSource <> nil) and AllowChangingFileSource then
begin
  sPath := FileSource.CurrentAddress;
  AddFileSource(FileSource.ParentFileSource, ExtractFilePath(sPath));
  SetActiveFile(sPath);
  Exit;
end;

В данном случае архив не удаляется из истории, но можно и перенести код в RemoveCurrentFileSource так, чтобы удалялся.

Этот код хорошо работает, но не для временно распакованных архивов из архивов, где местоположение - временная ФС. И вот с этим нужно что-то сделать. Весь процесс создания такого архива можно отследить из TMainCommands.DoTransferPath, открыв ctrl+стрелкой архив из архива в другую панель.

Моё предложение - хранить как ParentFileSource ФС родительского архива вместо временного, а для временного выделить отдельный опциональный параметр. Вопрос только в том, не поломает ли это что-либо? Используется ли ParentFileSource для временного архива только чтобы держать ссылку или где-то еще используется для получения доступа к реальному файлу архива? Если на последнее - да, тогда лучше будет создать параметр типа OriginFileSource для хранения виртуальной родительской директории, а ParentFileSource уже не трогать.


Еще один отдельный момент - это то, что RemoveCurrentFileSource убирает сам архив из истории. Вероятно, это было сделано, чтобы очищать временно разархивированные подархивы, но если выходить не вверх через "..", а кнопкой перейти на другой диск, то архив/wfx останется в истории вместе со временной папкой на диске, если она была создана.

cordylus

2017-12-22 02:58

developer   ~0002460

Другой вариант реализации - добавить поля происхождения не в ArchiveFileSource, а в TempFileSource - записывать, из чего он создан, что он представляет.

Issue History

Date Modified Username Field Change
2016-11-25 10:01 cordylus New Issue
2017-12-22 00:53 cordylus Note Added: 0002456
2017-12-22 00:54 cordylus Relationship added related to 0001400
2017-12-22 02:58 cordylus Note Added: 0002460