Observer — распаковка файлов из различных контейнеров

Здесь можно обсудить ваш любимый плагин.
Ariman
Posts: 1351
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 15 times
Been thanked: 50 times
Contact:

Observer — распаковка файлов из различных контейнеров

Post by Ariman »

Тема для обсуждения плагина Observer.
Плагин предназначен только для распаковки файлов. Запаковка/редактирование архивов не планируется.

Хотелки/баги:

Известные проблемы:

Планируемые новые модули:

Если "ничего не работает", то прежде чем писать сюда:


Сторонние модули:
  • Dir — поддержка вывода команд dir и ls в качестве виртуального архива.
  • Inno Setup — поддержка файлов Inno Setup (сделан на основе innounp).
  • cab — распаковка нестандартных .cab архивов (Windows Update и др.)
Last edited by Ariman on Wed 04 May, 2022 14:36, edited 7 times in total.
Yegor
Posts: 1326
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 32 times
Been thanked: 61 times

Observer — распаковка файлов из различных контейнеров

Post by Yegor »

Latest post of the previous page:

Скорее всего работает InnoUnp только с Observer v1.11, в 1.12 поменялся АПИ (если конечно назад не вернули или не поменяли еще раз).
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин
pukan1
Posts: 35
Joined: Tue 27 Mar, 2007 15:30
Has thanked: 5 times
Been thanked: 2 times

Observer — распаковка файлов из различных контейнеров

Post by pukan1 »

HaRT wrote: Tue 10 Sep, 2019 22:19 А InnoUnp 0.49, собранный как exe-файл, ту инсталляшку распаковывает успешно?
Да.
Yegor
Posts: 1326
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 32 times
Been thanked: 61 times

Observer — распаковка файлов из различных контейнеров

Post by Yegor »

Здесь viewtopic.php?f=39&t=9765 отмеченно, что Observer нужен v1.11
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин
pukan1
Posts: 35
Joined: Tue 27 Mar, 2007 15:30
Has thanked: 5 times
Been thanked: 2 times

Observer — распаковка файлов из различных контейнеров

Post by pukan1 »

Yegor wrote: Tue 10 Sep, 2019 22:25 Скорее всего работает InnoUnp только с Observer v1.11, в 1.12 поменялся АПИ (если конечно назад не вернули или не поменяли еще раз).
Спасибо за предположение, но хотелось бы добиться работы InnoUnp именно в вышеуказанной конфигурации.
Yegor
Posts: 1326
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 32 times
Been thanked: 61 times

Observer — распаковка файлов из различных контейнеров

Post by Yegor »

Для этого нужно InnoUnp немножко доделать (изменений АПИ немного). Просто "пересобрать" не получится.
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин
skipik
Posts: 318
Joined: Wed 03 Jun, 2015 15:24
Has thanked: 67 times
Been thanked: 29 times

Observer — распаковка файлов из различных контейнеров

Post by skipik »

Всё верно. Модуль с новой версией не работает.
viewtopic.php?p=153123#p153123
Тут я спрашивал автора, он ответил, что обновит тогда, когда Observer 1.12 зафиналят.
pepak
Posts: 604
Joined: Sun 13 Jul, 2008 11:18
Has thanked: 17 times
Been thanked: 54 times

Observer — распаковка файлов из различных контейнеров

Post by pepak »

When Observer 1.12 is released, I will of course update the InnoUnp submodule to the new API. But I won't be doing that for development versions.
SEt
Posts: 526
Joined: Mon 21 Mar, 2005 10:22
Location: Питер
Been thanked: 46 times

Observer — распаковка файлов из различных контейнеров

Post by SEt »

Мысли по поводу API модулей, раз уж версия 1.12 в процессе и предполагается всё равно ломать совместимость:

1) Комбинация OpenStorage/PrepareFiles, видимо, задумывалась как OpenStorage – распознавание "архива", PrepareFiles – открытие. (Раз уж плагин любит открывать файлы как OpenStorage=>CloseStorage=>OpenStorage=>PrepareFiles=>...) Но идея не очень работает, так как если OpenStorage сказал, что файл подходит, а PrepareFiles вернул FALSE, то пользователю выдаётся сообщение об ошибке и файл не передаётся дальше в другие плагины Far'а. Так что приходится всё открытие делать в OpenStorage.

2) В OpenStorage полезно было бы дать небольшой кусок начала файла, чтобы модуль мог легко и быстро проверить тип файла по сигнатуре, если она есть для данного формата.

3) Полезно было бы иметь команду "извлечь всё" в какой-то форме, так как нередко извлечение всего за один шаг значительно быстрее извлечения по одному файлу (при непрерывном сжатии). Например, модуль имеет необязательный экспорт ExtractAll. Или так: модуль в LoadSubModule ставит флаг, что имеет режим "извлечь всё", и в таком случае ExtractItem вызывается только раз с флагом "извлечь всё" и путём каталога для извлечения.
Ariman
Posts: 1351
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 15 times
Been thanked: 50 times
Contact:

Observer — распаковка файлов из различных контейнеров

Post by Ariman »

SEt wrote: Thu 26 Sep, 2019 17:27 Мысли по поводу API модулей, раз уж версия 1.12 в процессе и предполагается всё равно ломать совместимость:
1) Комбинация задумывалась для поддержки AnalizeW. В OpenStorage файл открываем, но масимально быстро и без UI, чтобы передать дальше файл, если нам не подходит. А всё остальное делается уже в PrepareFiles после OpenW, вокруг вызова которой показывается сообщение, чтобы не создавалось впечатление, что процесс завис. PrepareFiles может вернуть FALSE, если архив битый, и мы сообщаем об этом пользователю, а не молча отправляем файлы дальше.
2) Это уже реализовано.
3) Фар не сообщает, всё надо извлекать или нет, приезжает просто список. И добавлять код, который будет проверять, а всё ли это или нет, я не вижу смысле. Если модуль извлекает из solid архивов, то он должен уметь продолжить с предыдущей позиции извлечение.
SEt
Posts: 526
Joined: Mon 21 Mar, 2005 10:22
Location: Питер
Been thanked: 46 times

Observer — распаковка файлов из различных контейнеров

Post by SEt »

1) Хотелось бы иметь возможность именно молча отправлять дальше в PrepareFiles. (Если архив не битый, но мы его не поддерживаем и узнали об этом позже OpenStorage.)
3) Shift+F2 по архиву сообщает, что надо извлечь всё, и хотелось бы этот флаг увидеть.
Ariman
Posts: 1351
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 15 times
Been thanked: 50 times
Contact:

Observer — распаковка файлов из различных контейнеров

Post by Ariman »

Изначально PrepareFiles вообще не было в природе. Это добавленный костыль, чтобы Analize не тупил. Многие модули его вообще не используют. По логике, если уж туда добрались, то поздняк метаться.
Есть какой-нибудь живой use-case для таких изменений? Я как бы не против изменений, но переделывать апи по принципу "чтоб было, вдруг пригодиться" желания нет. Если есть применение в живом модуле, то нет проблем, обсудим и поменяем. Если это просто теоретические изыскания, то могу записать в пожелания, но когда руки дойдут до реализации не могу сказать.
SEt
Posts: 526
Joined: Mon 21 Mar, 2005 10:22
Location: Питер
Been thanked: 46 times

Observer — распаковка файлов из различных контейнеров

Post by SEt »

Use-case: вышеприведённый модуль cab.so. Отваливаться с ошибкой не передавая файл дальше – недопустимо когда есть другие плагины умеющие тот же формат (arclite). Поэтому пришлось всё запихать в OpenStorage, хоть оно и вызывается 2 раза (и, соответственно, в 2 раза медленнее, чем могло бы быть).

Про "извлечь всё" также нет острой необходимости. Мне просто вспомнился попавшийся некоторое время назад инсталлятор (не помню, кто это был), где извлечение всего через Observer работало настолько медленно, что пришлось это прервать и запустить отдельный распаковщик с командой "распаковать всё", что отработало гораздо быстрее. С cab.so дела обстоят так: случайно взятый .cab на 100МБ из C:\Windows\Installer через текущий интерфейс Observer'а распаковывается за ~20сек, а через "извлечь всё" – за ~5сек.

Edit: Если бы извлечение вызывалось не по одному файлу, а всем списком, то, возможно, и "извлечь всё" было бы быстрым, и частичное извлечение нескольких файлов ускорилось бы. С точки зрения cab.so это не отличается от "извлечь всё", а вот про другие модули не могу сказать.
Last edited by SEt on Sun 29 Sep, 2019 02:05, edited 1 time in total.
Ariman
Posts: 1351
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 15 times
Been thanked: 50 times
Contact:

Observer — распаковка файлов из различных контейнеров

Post by Ariman »

SEt wrote: Sun 29 Sep, 2019 01:57 Отваливаться с ошибкой не передавая файл дальше – недопустимо когда есть другие плагины умеющие тот же формат (arclite).
Т.е. модуль поддерживает не все файлы? И понять это может только на середине процесса?
SEt wrote: Sun 29 Sep, 2019 01:57 Мне просто вспомнился попавшийся некоторое время назад инсталлятор (не помню, кто это был), где извлечение всего через Observer работало настолько медленно, что пришлось это прервать и запустить отдельный распаковщик с командой "распаковать всё", что отработало гораздо быстрее.
Это для InnoSetup-а который? На него обычно такие жалобы.
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Observer — распаковка файлов из различных контейнеров

Post by HaRT »

Ariman wrote: Thu 03 Oct, 2019 11:01 Это для InnoSetup-а который? На него обычно такие жалобы.
Я в MSI нередко сталкиваюсь с субъективно неоправданно долгой распаковкой. Правда, строго обосновать, что скопом будет быстрее, не могу.
Фар есть инструмент, а не нянька. © 2009 DrKnS
SEt
Posts: 526
Joined: Mon 21 Mar, 2005 10:22
Location: Питер
Been thanked: 46 times

Observer — распаковка файлов из различных контейнеров

Post by SEt »

Ariman wrote: Thu 03 Oct, 2019 11:01 Т.е. модуль поддерживает не все файлы? И понять это может только на середине процесса?
Модуль просто стыкует Observer с внешним интерфейсом, так что что и когда может пойти не так от него не особо зависит. Но если что-то пойдёт не так, то мне хотелось бы, чтобы он тихо отвалился и передал файл дальше. В крайнем случае, громко отвалился, но всё равно передал файл дальше.
Ariman wrote: Thu 03 Oct, 2019 11:01 Это для InnoSetup-а который? На него обычно такие жалобы.
Да, наверное, это был именно InnoSetup.
ivank
Posts: 151
Joined: Fri 08 Aug, 2008 16:14
Has thanked: 3 times
Been thanked: 4 times
Contact:

Observer — распаковка файлов из различных контейнеров

Post by ivank »

Ariman wrote: Mon 02 Oct, 2017 09:03Файл ... от юникодной версии nsis-а, а их текущий модуль не поддерживает.
Столкнулся с невозможноостью распаковать 64-битный nsis: https://sourceforge.net/projects/avidem ... mux/2.7.4/
avidemux_2.7.4_win32.exe - распаковывается нормально, Avidemux_2.7.5 VC++ 64bits .exe - не распаковывается.
Far30b5465.x64, Observer_x64_1.11.2, msvcp100.dll и msvcr100.dll - x64 10.0.30319.1.
7z тоже не может x64-версию распаковать.
Я правильно понимаю, что nsis-x64 пока не поддерживается? Есть ли планы по добавлению такой поддержки?
Post Reply

Return to “Обсуждение плагинов”