Page 123 of 123

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

Posted: Mon 31 Aug, 2009 11:29
by Ariman
Тема для обсуждения плагина Observer.
Плагин предназначен только для распаковки файлов. Запаковка/редактирование архивов не планируется.

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

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

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

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


Сторонние модули:
Dir — поддержка вывода команд dir и ls в качестве виртуального архива. (на версии 1.10 работать не будет в связи с изменением API модулей)
Inno Setup - поддержка файлов Inno Setup (сделан на основе innounp).

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

Posted: Tue 10 Sep, 2019 22:35
by Yegor

Latest post of the previous page:

Здесь viewtopic.php?f=39&t=9765 отмеченно, что Observer нужен v1.11

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

Posted: Tue 10 Sep, 2019 23:00
by pukan1
Yegor wrote:
Tue 10 Sep, 2019 22:25
Скорее всего работает InnoUnp только с Observer v1.11, в 1.12 поменялся АПИ (если конечно назад не вернули или не поменяли еще раз).
Спасибо за предположение, но хотелось бы добиться работы InnoUnp именно в вышеуказанной конфигурации.

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

Posted: Tue 10 Sep, 2019 23:07
by Yegor
Для этого нужно InnoUnp немножко доделать (изменений АПИ немного). Просто "пересобрать" не получится.

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

Posted: Tue 10 Sep, 2019 23:42
by skipik
Всё верно. Модуль с новой версией не работает.
viewtopic.php?p=153123#p153123
Тут я спрашивал автора, он ответил, что обновит тогда, когда Observer 1.12 зафиналят.

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

Posted: Wed 11 Sep, 2019 20:48
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.

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

Posted: Wed 25 Sep, 2019 08:34
by SEt
Новый модуль для Observer 1.11, позволяющий нормально распаковывать .cab архивы, в том числе от Windows Update. Показывает настоящие файлы, а не полуфабрикаты "0", "1", "2", "_manifest_.cix.xml", как все остальные архиваторы.

observer_user.ini положить рядом с 4Observer.dll; объединить содержимое, если такой файл уже существует.
cab.so положить в modules.
cab.7z
(2.44 KiB) Downloaded 48 times

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

Posted: Thu 26 Sep, 2019 17:27
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 вызывается только раз с флагом "извлечь всё" и путём каталога для извлечения.

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

Posted: Sat 28 Sep, 2019 08:16
by Ariman
SEt wrote:
Thu 26 Sep, 2019 17:27
Мысли по поводу API модулей, раз уж версия 1.12 в процессе и предполагается всё равно ломать совместимость:
1) Комбинация задумывалась для поддержки AnalizeW. В OpenStorage файл открываем, но масимально быстро и без UI, чтобы передать дальше файл, если нам не подходит. А всё остальное делается уже в PrepareFiles после OpenW, вокруг вызова которой показывается сообщение, чтобы не создавалось впечатление, что процесс завис. PrepareFiles может вернуть FALSE, если архив битый, и мы сообщаем об этом пользователю, а не молча отправляем файлы дальше.
2) Это уже реализовано.
3) Фар не сообщает, всё надо извлекать или нет, приезжает просто список. И добавлять код, который будет проверять, а всё ли это или нет, я не вижу смысле. Если модуль извлекает из solid архивов, то он должен уметь продолжить с предыдущей позиции извлечение.

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

Posted: Sat 28 Sep, 2019 14:46
by SEt
1) Хотелось бы иметь возможность именно молча отправлять дальше в PrepareFiles. (Если архив не битый, но мы его не поддерживаем и узнали об этом позже OpenStorage.)
3) Shift+F2 по архиву сообщает, что надо извлечь всё, и хотелось бы этот флаг увидеть.

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

Posted: Sat 28 Sep, 2019 16:31
by Ariman
Изначально PrepareFiles вообще не было в природе. Это добавленный костыль, чтобы Analize не тупил. Многие модули его вообще не используют. По логике, если уж туда добрались, то поздняк метаться.
Есть какой-нибудь живой use-case для таких изменений? Я как бы не против изменений, но переделывать апи по принципу "чтоб было, вдруг пригодиться" желания нет. Если есть применение в живом модуле, то нет проблем, обсудим и поменяем. Если это просто теоретические изыскания, то могу записать в пожелания, но когда руки дойдут до реализации не могу сказать.

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

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

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

Edit: Если бы извлечение вызывалось не по одному файлу, а всем списком, то, возможно, и "извлечь всё" было бы быстрым, и частичное извлечение нескольких файлов ускорилось бы. С точки зрения cab.so это не отличается от "извлечь всё", а вот про другие модули не могу сказать.

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

Posted: Thu 03 Oct, 2019 11:01
by Ariman
SEt wrote:
Sun 29 Sep, 2019 01:57
Отваливаться с ошибкой не передавая файл дальше – недопустимо когда есть другие плагины умеющие тот же формат (arclite).
Т.е. модуль поддерживает не все файлы? И понять это может только на середине процесса?
SEt wrote:
Sun 29 Sep, 2019 01:57
Мне просто вспомнился попавшийся некоторое время назад инсталлятор (не помню, кто это был), где извлечение всего через Observer работало настолько медленно, что пришлось это прервать и запустить отдельный распаковщик с командой "распаковать всё", что отработало гораздо быстрее.
Это для InnoSetup-а который? На него обычно такие жалобы.

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

Posted: Thu 03 Oct, 2019 11:14
by HaRT
Ariman wrote:
Thu 03 Oct, 2019 11:01
Это для InnoSetup-а который? На него обычно такие жалобы.
Я в MSI нередко сталкиваюсь с субъективно неоправданно долгой распаковкой. Правда, строго обосновать, что скопом будет быстрее, не могу.

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

Posted: Thu 03 Oct, 2019 15:50
by SEt
Ariman wrote:
Thu 03 Oct, 2019 11:01
Т.е. модуль поддерживает не все файлы? И понять это может только на середине процесса?
Модуль просто стыкует Observer с внешним интерфейсом, так что что и когда может пойти не так от него не особо зависит. Но если что-то пойдёт не так, то мне хотелось бы, чтобы он тихо отвалился и передал файл дальше. В крайнем случае, громко отвалился, но всё равно передал файл дальше.
Ariman wrote:
Thu 03 Oct, 2019 11:01
Это для InnoSetup-а который? На него обычно такие жалобы.
Да, наверное, это был именно InnoSetup.

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

Posted: Sat 12 Oct, 2019 08:51
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 пока не поддерживается? Есть ли планы по добавлению такой поддержки?

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

Posted: Sun 13 Oct, 2019 14:01
by Ariman
ivank wrote:
Sat 12 Oct, 2019 08:51
Я правильно понимаю, что nsis-x64 пока не поддерживается? Есть ли планы по добавлению такой поддержки?
Observer использует код из 7zip-а, поэтому список поддерживаемых версий будет одинаковым. Если в 7zip чего добавят, то и тут появится. Планов самому ковыряться в формате пока нет.