Skip to content

arclite plugin #2670

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 40 commits into
base: master
Choose a base branch
from
Open

arclite plugin #2670

wants to merge 40 commits into from

Conversation

anta999
Copy link
Contributor

@anta999 anta999 commented Feb 16, 2025

Дабавлена поддержка p7zip.

Улучшена работа с вложеными tar архивами. Сжатие/Распаковка.

PS: Arclite может открывать block devices в /dev/ через 7zip
читает FAT NTFS EXT APFS, MBR/GPT/APM.

Изменения в Far2l:
PLugin AnalizeW + добавлены far2l api функции для arclite
FMSG_ASYNC - для выключения InterThreadCall delegate. В far2l использщуется свой critical secstion.
...

2025-03-22_12-03-44.mp4

@anta999
Copy link
Contributor Author

anta999 commented Feb 16, 2025

"Желающим протестировать нужно раскомментировать следующие строки в CMakeLists.txt:"

#if (NOT DEFINED ARCLITE OR ARCLITE)
#    message(STATUS "ARCLITE plugin enabled")
#    add_subdirectory (arclite)
#else()
#    message(STATUS "${ColorRed}ARCLITE plugin disabled due to ARCLITE=${ARCLITE}${ColorNormal}")
#    install(CODE "
#        execute_process(COMMAND ${CMAKE_COMMAND} -E rm -f ${CMAKE_INSTALL_PREFIX}/lib/far2l/Plugins/arclite/plug/arclite.far-plug-wide)
#        " COMPONENT system)
#endif()

@akruphi
Copy link
Contributor

akruphi commented Feb 16, 2025

Очень желательно все изменения плагиновых API сразу же этим же PR описывать в разделе Plugin API в https://github.com/elfmz/far2l/blob/master/HACKING.md Хоть кратко, хоть как, но главное каждое упомянуть, чтоб остальные знали где расхождения с прародительской энциклопедией.

Заодно посмотри - там по цветам похоже устаревшая информация после твоих прошлогодних изменений.

@unxed
Copy link
Contributor

unxed commented Feb 16, 2025

"Желающим протестировать нужно раскомментировать следующие строки в CMakeLists.txt:"

А multiarc при этом отключать нужно?

@anta999
Copy link
Contributor Author

anta999 commented Feb 16, 2025

"Желающим протестировать нужно раскомментировать следующие строки в CMakeLists.txt:"

А multiarc при этом отключать нужно?

Нет, можно не отключать

@akruphi
Copy link
Contributor

akruphi commented Feb 16, 2025

"Желающим протестировать нужно раскомментировать следующие строки в CMakeLists.txt:"

А multiarc при этом отключать нужно?

Нет, можно не отключать

Это из-за того, что плагины грузятся и затем процессятся по алфавиту и поэтому arclite первым получит запрашиваемое, а multiarc'у дойдут только, если arclite откажется?

@anta999
Copy link
Contributor Author

anta999 commented Feb 16, 2025

"Желающим протестировать нужно раскомментировать следующие строки в CMakeLists.txt:"

А multiarc при этом отключать нужно?

Нет, можно не отключать

Это из-за того, что плагины грузятся и затем процессятся по алфавиту и поэтому arclite первым получит запрашиваемое, а multiarc'у дойдут только, если arclite откажется?

Да. 😊

@shmuz
Copy link
Contributor

shmuz commented Feb 17, 2025

Это из-за того, что плагины грузятся и затем процессятся по алфавиту и поэтому arclite первым получит запрашиваемое, а multiarc'у дойдут только, если arclite откажется?

Это зависит от значения 3-х позиционной опции Opt.PluginConfirm.OpenFilePlugin.
Её можно изменять в диалоге "Plugins manager settings".

@anta999
Copy link
Contributor Author

anta999 commented Feb 17, 2025

Это из-за того, что плагины грузятся и затем процессятся по алфавиту и поэтому arclite первым получит запрашиваемое, а multiarc'у дойдут только, если arclite откажется?

Это зависит от значения 3-х позиционной опции Opt.PluginConfirm.OpenFilePlugin. Её можно изменять в диалоге "Plugins manager settings".

Это не удобно. Там должен стоять [?] В arclitye есть Exclude files matching masks: и formats в plugin configuration. Можно какие то файлы отдать multiarc., а жмешь CTRL + PgDw открывается выбор у меня.

@spvkgn
Copy link
Contributor

spvkgn commented Feb 18, 2025

/usr/lib/7zip/7z.so не находит без правки конфига. Не лучше будет сперва искать 7z.so устанавливаемый из пакета 7zip?

https://github.com/anta999/far2l/blob/5e8f1a6188b7c027fd69510b9690536d17c710da/arclite/archive.cpp#L713-L714
Наверное тут должен быть /usr/lib/7zip/?

@unxed
Copy link
Contributor

unxed commented Feb 18, 2025

Ещё просьба: читать заголовки zip (где имена файлов в архиве) самим, как в multiarc, а не средствами 7zip. А то там сейчас с OEM кодировкой шляпа

@spvkgn
Copy link
Contributor

spvkgn commented Feb 26, 2025

С последним коммитом падает на Alpine (musl)
crash.log.txt
far2l_std.txt

@unxed
Copy link
Contributor

unxed commented Apr 4, 2025

7z.so от старого p7zip будет игнорироваться, чтобы избежать падения

Можно сделать сами патчилки отдельными .so'шками, собирать обе (под оба варианта либы 7z) и применять соответствующую найденной либе

@akruphi
Copy link
Contributor

akruphi commented Apr 4, 2025

Зависимость полная: без 7z.so работать не будет, и файлы будут открываться через MultiArc.
7z.so от старого p7zip будет игнорироваться, чтобы избежать падения.
Для использования 7z.so от p7zip необходимо раскомментировать строку в файле headers.h: // #define Z7_USE_VIRTUAL_DESTRUCTOR_IN_IUNKNOWN 1
Тогда будет игнорироваться 7z.so от свежего 7zip без VIRTUAL DESTRUCTOR IN IUNKNOWN.
Патч скорее всего не прокатит если его активировать(но это не точно).
С новыми версиями должно быть все в порядке.

Т.е. при компиляции плагина жестко происходит увязка к нужному 7z.so даже просто на уровне использования без накладывания патчей? 😢

Это резко ограничивает юзабельность не только в случае far2l-portable, но и просто для тех кто не сам собирает, или наоборот имеет в системе несколько версий и скачет между p7zip и 7zip (пока это частая реальность - много кто использует старые LTS, а года через 2-3 наверно про p7zip можно будет забыть).

Пока выглядит как очень существенное ограничение не позволяющее сейчас arclite вывести из статуса стабильной alpha хотя бы в beta.

@unxed
Copy link
Contributor

unxed commented Apr 4, 2025

я же предложил решение выше

@akruphi
Copy link
Contributor

akruphi commented Apr 4, 2025

я же предложил решение выше

Если я правильно понял проблема даже не в патчах (которые отключаемые), а в том что при компиляции arclite сразу компилируется под определенный диапазон библиотек 7z.so и, чтобы он работал с другим диапазоном библиотек 7z.so сам arclite нужно полностью перекомпилировать.

@anta999
Copy link
Contributor Author

anta999 commented Apr 4, 2025

Если я правильно понял проблема даже не в патчах (которые отключаемые), а в том что при компиляции arclite сразу

Существует всего два типа: с виртуальным деструктором в базовом Unknown классе COM (обычно p7zip) и без него (7zip).
Нужно, чтобы наличие или отсутствие этого виртуального деструктора в COM совпадало с тем, как собран Arclite (с ним или без).
По умолчанию виртуальный деструктор отсутствует (как и в Windows-версии), что совместимо с обычным свежим 7zip.

Поэтому, если нужно использовать старый p7zip, придется либо пересобрать Arclite с опцией Z7_USE_VIRTUAL_DESTRUCTOR_IN_IUNKNOWN,
либо пересобрать p7zip без этого деструктора.
Лучше всего самостоятельно собрать 7z.so из свежего 7zip, если его нет в пакете.

Я не вижу смысла мудрить и дублировать весь код из-за старого p7zip, как и делать патч для их разных вариантов.
В крайнем случае, любой может собрать 7z.so и свежий 7zip или воспользоваться MultiArc.
Так что не вижу в этом никакой проблемы.

Самый лучший вариант — добавить сборку 7z.so опционально для Arclite в far2l.
Нужно узнать: Что думает @elfmz по этому поводу ?

@anta999
Copy link
Contributor Author

anta999 commented Apr 4, 2025

И это правильно, потому что начиная со следующего Ubuntu LTS он в самой либе будет. А «на сейчас» можно и вручную включить

Если использовать ANSI/OEM codepage из настроек - придется патчить.

@unxed
Copy link
Contributor

unxed commented May 13, 2025

@elfmz прокомментируйте, пожалуйста. Хочется, конечно, прогрессбар при распаковке. И отладочных инструментов из #2660 хочется тоже

@unxed
Copy link
Contributor

unxed commented May 24, 2025

20250525_001711

Люди расстраиваются, когда никакой реакции на большую и нужную многим проделанную работу

StandardFunctions.OwnerNameByID = farOwnerNameByID;
StandardFunctions.GroupNameByID = farGroupNameByID;
StandardFunctions.ReadLink = farReadLink;
StandardFunctions.sdc_lstat = farsdc_lstat;
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why not just directly use sdc_lstat? as other plugins do

@@ -153,16 +162,17 @@ enum FARMESSAGEFLAGS
FMSG_COLOURS = 0x00000040,
#endif // END FAR_USE_INTERNALS
FMSG_DISPLAYNOTIFY = 0x00000080,
FMSG_ASYNC = 0x00000100,
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If i understood correctly, this flags allows to create dialog bypassing synchronization, its not good idea as in a whole all that code is not designed to be thread safe
Why you needed this?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Да. Вот так она работает в фар3. Если это проблема надо будет переписать

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Убрал и то и другое.

@anta999 anta999 requested a review from elfmz June 1, 2025 07:37
@exkrexpexfex
Copy link
Contributor

На macOS работает, архивы открывает быстро многопоточно. Прошу замержить

@unxed
Copy link
Contributor

unxed commented Jun 15, 2025

Присоединяюсь к просьбе, попробую погонять, не понравится вернусь на мультиарк, поглядим. Второй так-то гибче, но я и не помню уже, с другой стороны, когда последний раз трогал в нём что-то.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants