View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0001628 | Double Commander | Logic | public | 2016-11-25 10:01 | 2017-12-22 02:58 |
Reporter | cordylus | Assigned To | |||
Priority | normal | Severity | minor | Reproducibility | always |
Status | new | Resolution | open | ||
Projection | none | ETA | none | ||
Product Version | 0.7.6 | ||||
Summary | 0001628: Выйдя из архива, в который зашел через результаты поиска по файлам в архивах, оказываешься не в той папке, не в папке с архивом | ||||
Description | А в последней открытой папке перед переходом к результату поиска. Также после выхода переход назад (к предыдущему элементу истории) не работает, чтобы вернуться в архив - в историю он не попадает. | ||||
Steps To Reproduce | Начать поиск любых файлов с включенным "Искать в архивах" Тем временем перейти в другую папку или переключиться на другую панель Перейти по результату в какой-то архив Выйти из архива вверх, через .. | ||||
Additional Information | Похож на 0001400 | ||||
Tags | No tags attached. | ||||
Fixed in Revision | |||||
Operating system | |||||
Widgetset | |||||
Architecture | |||||
|
Это архитектурная недоработка, 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 останется в истории вместе со временной папкой на диске, если она была создана. |
|
Другой вариант реализации - добавить поля происхождения не в ArchiveFileSource, а в TempFileSource - записывать, из чего он создан, что он представляет. |