Библиотека Флибуста (Flibusta) 7z + FLibrary + inpx - 01.09.2025 [FB2]

Страницы :   Пред.  1, 2, 3, 4 ... 11, 12, 13  След.
Ответить
 

totnin

Стаж: 10 лет 5 месяцев

Сообщений: 72


totnin · 12-Фев-25 15:44 (7 месяцев назад, ред. 12-Фев-25 15:44)

HeimdallrNSK писал(а):
Моё творчество. Категорически против видеть жанры "Альтернативная медицина"
Сплиттер упирается в титл радиобаттона
Ладно там альтернативщики, среди них ебанутых "одаренных" хватает, но Астрология - это ж наука о звездах)
И да, я это..по делу...тут, значится, удаляю я книги из жанров/поджанров, причем целиком, а запись то остается...ну, то есть книг нет (я надеюсь), а запись о жанре есть...как бы так сделать, что если в жанре 0 книг (удалены), то и жанра самого нет (удален - записи о нем нет)..

П.С. Радиобатон - гыыыыы))
П.С.С. Тут бы еще это, хотя уже и вряд ли, инструкцию бы в деталях, как прикреплять конвертеры сторонние - куда чего нажимать, куда и что прописывать. Без акцента на самих конвертерах, но с акцентом на то, что, куда, и как - люди разные, кто-то совсем далек от этого (как я), а продукт то хороший, хочется пользоваться и балдеть. Спасибо.
П.С.С.С. О, и еще бы "Сборщик" написать, ну, который картинки, обложки и fb2 в архивах собирает в одно целое, типа как было. Ну, фб2кат разбирает, а вот это вот собирало бы..ну, мало ли, там..для мобильной версии, например...
[Профиль]  [ЛС] 

HeimdallrNSK

Top Bonus 06* 50TB

Стаж: 15 лет 3 месяца

Сообщений: 295

HeimdallrNSK · 12-Фев-25 16:36 (спустя 52 мин., ред. 12-Фев-25 16:36)

totnin писал(а):
87387398... но Астрология - это ж наука о звездах)
Нет. Это астрономия - наука о звёздах. А астрология - разновидность гадательной магии.
Цитата:
И да, я это..по делу...тут, значится, удаляю я книги из жанров/поджанров, причем целиком, а запись то остается...ну, то есть книг нет (я надеюсь), а запись о жанре есть...как бы так сделать, что если в жанре 0 книг (удалены), то и жанра самого нет (удален - записи о нем нет)..
скрытый текст
Так и должно работать. Скорее всего жанры не вычищены в ноль, это легко проверить, выбрав в навигации раздел "Жанры". На картинке вижу нажатый радиобатон "Полное совпадение". Т.е. если книжка входит в жанр "Фанфик" и, например, в неотмеченный "Юмор", то она не удалится. Чтобы удалилось независимо от нахождения в других жанрах, надо выбирать "Частичное совпадение".
Цитата:
П.С.С. Тут бы еще это, хотя уже и вряд ли, инструкцию бы в деталях, как прикреплять конвертеры сторонние - куда чего нажимать, куда и что прописывать. Без акцента на самих конвертерах, но с акцентом на то, что, куда, и как - люди разные, кто-то совсем далек от этого
Для прикручивания внешнего конвертера нужно настроить по скрипту на каждый желаемый формат. Как именно - зависит от выбранного конвертера. Типичный скрипт состоит из двух шагов (команд)
1. Создать папку, в которой хотим поиметь сконвертированную книгу.
2. Вызвать конвертер с потребными ему ключами командной строки.
настройка скриптов
Можно продолжить, и добавить ещё команд, типа архивации полученного, отправки на email, ...
В параметрах команд можно (и нужно) использовать макросы, список макросов можно посмотреть в контекстном меню строки аргументов
макросы
Если используете обычную (непортабельную) версию, то можете внести в реестр это:
ключ реестра для конвертера в mobi
Код:

Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\SOFTWARE\HomeCompa\Flibrary\Scripts\10c7abd2-8320-45ae-9655-fc5e68e186d2]
"Name"="Convert to mobi"
"Number"=dword:00000001
"Type"="ExportToDevice"
[HKEY_CURRENT_USER\SOFTWARE\HomeCompa\Flibrary\Scripts\10c7abd2-8320-45ae-9655-fc5e68e186d2\5e1463b3-ca88-4e5d-99ca-a3b7e9aedec2]
"Command"="mkdir"
"Arguments"="\"%user_destination_folder%/%author%/[%series%]\""
"Number"=dword:00000001
"Type"="System"
[HKEY_CURRENT_USER\SOFTWARE\HomeCompa\Flibrary\Scripts\10c7abd2-8320-45ae-9655-fc5e68e186d2\c3d467f1-6162-496c-939f-3d8b5428be37]
"Command"="D:\\programs\\MyHomeLib\\converters\\fb2mobi\\fb2mobi.exe"
"Arguments"="\"%source_file%\" \"%user_destination_folder%/%author%/[%series%/[%seq_number%-]]%title%.mobi\""
"Number"=dword:00000002
"Type"="LaunchApp"
Тогда у вас в программе (после её перезапуска, конечно) появится настроенный как на картинке выше скрипт, а в контекстном меню книг в подменю "Экспорт" добавится пункт "Convert to mobi". Изучите получившееся, поменяйте на то, что надо. Извините, но по минимуму разобраться придётся, sad but true.
Цитата:
О, и еще бы "Сборщик" написать, ну, который картинки, обложки и fb2 в архивах собирает в одно целое, типа как было. Ну, фб2кат разбирает, а вот это вот собирало бы..ну, мало ли, там..для мобильной версии, например...
Вот это уже вряд ли ))
[Профиль]  [ЛС] 

РАДУГА ДЭШ

Стаж: 11 лет 7 месяцев

Сообщений: 17

РАДУГА ДЭШ · 15-Фев-25 06:13 (спустя 2 дня 13 часов)

Вопрос - в чем отличие этой раздачи от той, которая весит почти пол терабайта?
Я вижу, что количество книг вроде бы одинаковое, поэтому стало интересно - почему раздача такая легкая в сравнении с оригиналом?
[Профиль]  [ЛС] 

HeimdallrNSK

Top Bonus 06* 50TB

Стаж: 15 лет 3 месяца

Сообщений: 295

HeimdallrNSK · 15-Фев-25 08:25 (спустя 2 часа 12 мин., ред. 15-Фев-25 14:12)

РАДУГА ДЭШ писал(а):
87399783Вопрос - в чем отличие этой раздачи от той, которая весит почти пол терабайта?
Я вижу, что количество книг вроде бы одинаковое, поэтому стало интересно - почему раздача такая легкая в сравнении с оригиналом?
Уменьшение размера достигнуто так:
1. Книги пережаты более эффективным алгоритмом архивации
2. Обложки и иллюстрации извлечены из книг, декодированы из base64
3. Картинки перекодированы с ограничением размеров
Бонус - картинки можно вообще не скачивать, тогда размер ещё пополам.
Эта раздача сделана и обновляется на основании той самой полутерабайтной, т.е. содержимое этих раздач почти идентично. Различия: в этой раздаче исправлена нарушенная xml-структура некоторых (увы, далеко не всех) книг, файлы нулевой длины выброшены, битые картинки или починены, или удалены. Ещё отличие, которое для некоторых может быть критичным - многие иллюстрации меньше размерами и хуже качеством, чем в оригинале.
[Профиль]  [ЛС] 

totnin

Стаж: 10 лет 5 месяцев

Сообщений: 72


totnin · 15-Фев-25 15:19 (спустя 6 часов, ред. 15-Фев-25 19:45)

еще стоило бы добавить: Возможность удаления дублей, удаления книг на других языках, отличных от основного, удаления жанров и поджанров, что значительно повышает моральное удовлетворение - твоя раздача чиста, а так же значительно уменьшает размер и без того маленькой и компактной раздачи - чистка от дублей и удаленных книг, а так же книг на языках, отличных от русского, уменьшает раздачу на 200 000 книг, и на 40 гб.
Вычищение раздачи доступно с версии FLibrary 1.8.0. - в комментариях есть ссылка.
[Профиль]  [ЛС] 

HeimdallrNSK

Top Bonus 06* 50TB

Стаж: 15 лет 3 месяца

Сообщений: 295

HeimdallrNSK · 15-Фев-25 18:49 (спустя 3 часа)

totnin писал(а):
87401810Странную фигню заметил: Если открыть списком, потом деревом, опять списком и опять деревом, прога начинает накапливать записи?
скрытый текст
Похоже на баг. Заведёте багрепорт?
[Профиль]  [ЛС] 

totnin

Стаж: 10 лет 5 месяцев

Сообщений: 72


totnin · 15-Фев-25 20:09 (спустя 1 час 19 мин., ред. 16-Фев-25 15:44)

HeimdallrNSK писал(а):
Заведёте багрепорт?
Да, если что, то да.. Сюда больше не пишу.
это не баг, но размышление: Еще бы добавить возможность удаления / вычищение по размеру - в раздаче около 60 000 файлов размером до 50кб - в основной своей массе это 1 -2 -10 -20 страничные говнонечто, типа наметок на рассказы и прочий шлак. Видел файл размером 1кб, в котором было две строчки "Харасмент - это плохо? - Да"... и вот это вот считается Книгой, и входит в общее число книг, обманывая пользователей своим мнимым количеством..
[Профиль]  [ЛС] 

HeimdallrNSK

Top Bonus 06* 50TB

Стаж: 15 лет 3 месяца

Сообщений: 295

HeimdallrNSK · 16-Фев-25 15:00 (спустя 18 часов, ред. 16-Фев-25 15:00)

totnin писал(а):
87403145
HeimdallrNSK писал(а):
Заведёте багрепорт?
Да
Буду благодарен
Цитата:
Сюда больше не пишу.
Пишите на здоровье. Но с явным багом лучше сразу в трекер.
Цитата:
это не баг, но размышление: Еще бы добавить возможность удаления / вычищение по размеру
Это не размышление, но фичереквест: Есть же механизм зачистки коллекции, отчего бы не добавить туда новый критерий "По размеру файла"? Делайте тикет.
ПС Баг починен, фичереквест реализован. Уважаемому totnin, как не поленившемуся написать в трекер, предоставлена персональная сборка FLibrary 1.8.1, в соответствии с обещанным на предыдущей странице.
[Профиль]  [ЛС] 

totnin

Стаж: 10 лет 5 месяцев

Сообщений: 72


totnin · 16-Фев-25 17:02 (спустя 2 часа 1 мин., ред. 16-Фев-25 17:44)

HeimdallrNSK писал(а):
Премногоуважаемому чОрному Властелину Сего Рукава Галактики, Светлоликому Повелителю Грома и Молний, ну, заодно и дождя, totnin персональная сборка FLibrary 1.8.1
[Профиль]  [ЛС] 

РАДУГА ДЭШ

Стаж: 11 лет 7 месяцев

Сообщений: 17

РАДУГА ДЭШ · 17-Фев-25 19:33 (спустя 1 день 2 часа, ред. 17-Фев-25 19:33)

HeimdallrNSK писал(а):
87399994
РАДУГА ДЭШ писал(а):
87399783Вопрос - в чем отличие этой раздачи от той, которая весит почти пол терабайта?
Я вижу, что количество книг вроде бы одинаковое, поэтому стало интересно - почему раздача такая легкая в сравнении с оригиналом?
Уменьшение размера достигнуто так:
1. Книги пережаты более эффективным алгоритмом архивации
2. Обложки и иллюстрации извлечены из книг, декодированы из base64
3. Картинки перекодированы с ограничением размеров
Бонус - картинки можно вообще не скачивать, тогда размер ещё пополам.
Эта раздача сделана и обновляется на основании той самой полутерабайтной, т.е. содержимое этих раздач почти идентично. Различия: в этой раздаче исправлена нарушенная xml-структура некоторых (увы, далеко не всех) книг, файлы нулевой длины выброшены, битые картинки или починены, или удалены. Ещё отличие, которое для некоторых может быть критичным - многие иллюстрации меньше размерами и хуже качеством, чем в оригинале.
JОкей, спасибо) Теперь понял)
Хм, скачал сейчас и кажется что книг там меньше чем о оригинале) Например, я начал искать Гарри Поттер и меоды рационального мышления - и не нашел(
При этом в оригинальной полутерабайтной раздаче это было.
В общем, я не говорю, что раздача плохая - она действительно хороша и весьма оптимизированна, но, кажется, некоторых книг может не хватать
[Профиль]  [ЛС] 

totnin

Стаж: 10 лет 5 месяцев

Сообщений: 72


totnin · 17-Фев-25 23:19 (спустя 3 часа, ред. 18-Фев-25 10:11)

РАДУГА ДЭШ писал(а):
но, кажется, некоторых книг может не хватать
Может вы по жанрам чего "вычищали"? На официальной Флибусте "Гарри Поттер и методы..." пересекается по жанрам "Фанфик"... А у нас тут был с автором раздачи диспут на тему удаления жанров, и фанфик как раз таки там упоминался...может вы как-то на автомате?) Если что, у меня указанных вами книг так же нет, но у меня жанр "Фанфик" вырезан целиком)
[Профиль]  [ЛС] 

HeimdallrNSK

Top Bonus 06* 50TB

Стаж: 15 лет 3 месяца

Сообщений: 295

HeimdallrNSK · 18-Фев-25 15:44 (спустя 16 часов)

РАДУГА ДЭШ писал(а):
87408902Хм, скачал сейчас и кажется что книг там меньше чем о оригинале) Например, я начал искать Гарри Поттер и меоды рационального мышления - и не нашел(
есть
Цитата:
кажется, некоторых книг может не хватать
Очень маловероятно.
Если не трудно, расскажите как вы искали эту книгу, пожалуйста. Возможно, вам помешал баг в программе или неочевидная её функциональность? Верю, совместными усилиями мы сможем сделать программу лучше.
[Профиль]  [ЛС] 

Счастье_есть

Стаж: 12 лет 3 месяца

Сообщений: 114

Счастье_есть · 20-Фев-25 20:59 (спустя 2 дня 5 часов)

Большое спасибо за сотни сэкономленных Гб!
FLibrary удачно запустилась под wine и работает исправно, только раскладка отказывается переключаться почему-то.
[Профиль]  [ЛС] 

РАДУГА ДЭШ

Стаж: 11 лет 7 месяцев

Сообщений: 17

РАДУГА ДЭШ · 21-Фев-25 04:29 (спустя 7 часов, ред. 21-Фев-25 04:29)

HeimdallrNSK писал(а):
87416022
РАДУГА ДЭШ писал(а):
87408902Хм, скачал сейчас и кажется что книг там меньше чем о оригинале) Например, я начал искать Гарри Поттер и меоды рационального мышления - и не нашел(
есть
Цитата:
кажется, некоторых книг может не хватать
Очень маловероятно.
Если не трудно, расскажите как вы искали эту книгу, пожалуйста. Возможно, вам помешал баг в программе или неочевидная её функциональность? Верю, совместными усилиями мы сможем сделать программу лучше.
Я просто искал в разделе "серии" -
вот картинка (она работает, но черт знает почему предпрасмотра нет. Просто жмякните на знак):

как видите, обычный гаррик отобразился как надо, но "методов" нет :<
Для меня мечта - чтобы был нормальный поиск по ИМЕНИ книги, типа гугла. Это было бы великолепно))
В "оригинальной" раздаче также есть проблема с поиском - он находится непойми где, но всё же пока работает)
В общем, было бы круто иметь увесистый и такой заметный поиск, чтобы даже дуракам в виде меня было понятно как им пользоваться))
Если вы сделаете что-то подобное, я вас расцелую)
HeimdallrNSK писал(а):
87416022
РАДУГА ДЭШ писал(а):
87408902Хм, скачал сейчас и кажется что книг там меньше чем о оригинале) Например, я начал искать Гарри Поттер и меоды рационального мышления - и не нашел(
есть
Цитата:
кажется, некоторых книг может не хватать
Очень маловероятно.
Если не трудно, расскажите как вы искали эту книгу, пожалуйста. Возможно, вам помешал баг в программе или неочевидная её функциональность? Верю, совместными усилиями мы сможем сделать программу лучше.
[Профиль]  [ЛС] 

HeimdallrNSK

Top Bonus 06* 50TB

Стаж: 15 лет 3 месяца

Сообщений: 295

HeimdallrNSK · 21-Фев-25 13:41 (спустя 9 часов, ред. 21-Фев-25 13:41)

РАДУГА ДЭШ писал(а):
чтобы был нормальный поиск по ИМЕНИ книги, типа гугла
В общем, было бы круто иметь увесистый и такой заметный поиск, чтобы даже дуракам в виде меня было понятно как им пользоваться))
Вкрячить полноценный поисковый движок в десктопное приложение... ну не знаю, наверно не осилю.
Цитата:
Если вы сделаете что-то подобное, я вас расцелую)
Но заманчиво, черт побери


Ребята, а у кого-нибудь ещё в колонках рейтинга показываются квадраты вместо звёздочек? И, если да, то что-нибудь меняется, если поменять шрифт?
Как поменять шрифт
[Профиль]  [ЛС] 

РАДУГА ДЭШ

Стаж: 11 лет 7 месяцев

Сообщений: 17

РАДУГА ДЭШ · 22-Фев-25 04:37 (спустя 14 часов)

HeimdallrNSK писал(а):
87428353
РАДУГА ДЭШ писал(а):
чтобы был нормальный поиск по ИМЕНИ книги, типа гугла
В общем, было бы круто иметь увесистый и такой заметный поиск, чтобы даже дуракам в виде меня было понятно как им пользоваться))
Вкрячить полноценный поисковый движок в десктопное приложение... ну не знаю, наверно не осилю.
Цитата:
Если вы сделаете что-то подобное, я вас расцелую)
Но заманчиво, черт побери


Ребята, а у кого-нибудь ещё в колонках рейтинга показываются квадраты вместо звёздочек? И, если да, то что-нибудь меняется, если поменять шрифт?
Как поменять шрифт
Хехе))
Попробуй посомтреть у нейросети шаблоны или примеры - я обычно так делаю, если что-то новое надо делать)
А, ну да, я тоже программист - но упоротый)
Я думаю звездачки\квадраты могут зависить от операционной системы)
[Профиль]  [ЛС] 

HeimdallrNSK

Top Bonus 06* 50TB

Стаж: 15 лет 3 месяца

Сообщений: 295

HeimdallrNSK · 22-Фев-25 13:54 (спустя 9 часов, ред. 22-Фев-25 20:18)

РАДУГА ДЭШ писал(а):
87431425Попробуй посомтреть у нейросети шаблоны или примеры
Я отсталый от жизни, не умею. И не только в этом - оказывается, у sqlite давно есть FTS искаропки. Посмотрю что за зверь, может даже и прикручу.
ЗЫ Зверь прикольный, прикрутил. Может, даже сам буду пользоваться поиском. Пожалуй, ради такого дела мажорный номер двину, скоро будет готов FLibrary 2.0. Всем, кто требовал поиск, спасибо.
Цитата:
Я думаю звездачки\квадраты могут зависить от операционной системы)
Ого! У тебя не винда чтоли? Неужто в wine запускаешь?
[Профиль]  [ЛС] 

totnin

Стаж: 10 лет 5 месяцев

Сообщений: 72


totnin · 22-Фев-25 17:20 (спустя 3 часа, ред. 22-Фев-25 22:15)

Друзья, нисколько не посягая на данную раздачу(а во многом и благодаря ей), но лишь дополняя ее, предлагаю вам fb2image compressor. Прога "вскрывает" fb2, находит обложки и картинки, пережимает их по указанным вами параметрам и запаковывает обратно в fb2, уменьшая размер на некоторых файлах (при максимальном сжатии) в 5 раз =) На настройках "по умолчанию" большие архивы "уменьшаются" в 2 - 3 раза.
---------------------------------------------------Fb2ImageCompressor_V_3.0-------------------------------------------------
Обновил программу. Версия 3.0. Теперь с проверкой на альфа-канал.
Работает с папками, с подпапками, с "голыми" fb2 или в архивах Zip. Если отмечен чекбокс "с заменой файлов", новые, после обработки, заменяют старые. Если чекбокс не отмечен, то рядом создается папка Compressed, куда складывается все ваше добро.
Примерный алгоритм: в Flibrary отметили книги - экспорт в Zip архиве - запустили fb2compressor - отметили чекбоксы (черно-белая обложка, после обработки, уменьшает размер файла примерно на 1/8 размера (в среднем)) - выбрали папку.
На здоровье! Автору раздачи респект и уважуха!) Подтолкнул к новым мыслям, к новым открытиям!)
скрытый текст
import os
import base64
import patoolib
import zipfile
from PIL import Image, ImageFile
from io import BytesIO
import xml.etree.ElementTree as ET
from tkinter import Tk, Button, Label, filedialog, messagebox, Text, Scale, VERTICAL, END, Frame, Checkbutton, IntVar, font, ttk
import threading
import queue
import sys
# Разрешаем загрузку обрезанных изображений
ImageFile.LOAD_TRUNCATED_IMAGES = True
# Очередь для логов
log_queue = queue.Queue()
def log_message(message):
"""Добавляет сообщение в очередь логов."""
log_queue.put(message)
def compress_image(image_data, quality, grayscale=True):
"""Сжимает изображение."""
try:
img = Image.open(BytesIO(image_data))
if grayscale:
img = img.convert('L')
# Проверяем, есть ли альфа-канал
if img.mode in ['RGBA', 'LA']:
# Если есть альфа-канал, сохраняем в PNG с оптимизацией
output = BytesIO()
img.save(output, format="PNG", optimize=True) # Оптимизация PNG
return output.getvalue()
else:
# Если альфа-канала нет, сохраняем в JPEG
if img.mode in ['RGBA', 'P']:
img = img.convert('RGB')
output = BytesIO()
img.save(output, format="JPEG", quality=quality)
return output.getvalue()
except Exception as e:
log_message(f"Ошибка при сжатии изображения: {e}")
return None
def process_fb2(file_path, output_folder, cover_quality, image_quality, replace_original, grayscale):
"""Обрабатывает FB2-файл."""
try:
namespaces = {
'fb2': 'http://www.gribuser.ru/xml/fictionbook/2.0',
'xlink': 'http://www.w3.org/1999/xlink'
}
ET.register_namespace('', namespaces['fb2'])
ET.register_namespace('xlink', namespaces['xlink'])
# Чтение файла с указанием кодировки utf-8
with open(file_path, 'r', encoding='utf-8') as file:
tree = ET.parse(file)
root = tree.getroot()
for cover in root.findall(".//fb2:coverpage", namespaces=namespaces):
log_message(f"Найдена обложка в файле {file_path}")
for image in cover.findall(".//fb2:image", namespaces=namespaces):
href = image.get(f"{{{namespaces['xlink']}}}href")
if href and href.startswith('#'):
binary_id = href[1:]
binary = root.find(f".//fb2:binary[@id='{binary_id}']", namespaces=namespaces)
if binary is not None:
try:
log_message(f"Обработка обложки с ID {binary_id} в файле {file_path}")
image_data = base64.b64decode(binary.text)
img = Image.open(BytesIO(image_data))
if img.format not in ['JPEG', 'JPG']:
output = BytesIO()
img.convert('RGB').save(output, format="JPEG", quality=cover_quality)
image_data = output.getvalue()
compressed_data = compress_image(image_data, cover_quality, grayscale)
if compressed_data:
binary.text = base64.b64encode(compressed_data).decode("utf-8")
log_message(f"Обложка сжата и заменена в файле {file_path}")
except Exception as e:
log_message(f"Ошибка при обработке обложки в файле {file_path}: {e}")
else:
log_message(f"Бинарный объект для обложки не найден в файле {file_path}")
else:
log_message(f"Ссылка на обложку не найдена в файле {file_path}")
else:
log_message(f"Тег <image> в обложке не найден в файле {file_path}")
else:
log_message(f"Тег <coverpage> не найден в файле {file_path}")
for binary in root.findall(".//fb2:binary", namespaces=namespaces):
if binary.get('id') and not binary.get('id').startswith('cover'):
try:
image_data = base64.b64decode(binary.text)
compressed_data = compress_image(image_data, image_quality, grayscale)
if compressed_data:
binary.text = base64.b64encode(compressed_data).decode("utf-8")
except Exception as e:
log_message(f"Ошибка при обработке изображения в файле {file_path}: {e}")
if replace_original:
output_path = file_path
else:
output_path = os.path.join(output_folder, os.path.basename(file_path))
# Запись файла с указанием кодировки utf-8
with open(output_path, 'w', encoding='utf-8') as file:
tree.write(file, encoding='unicode', xml_declaration=True)
log_message(f"Файл {file_path} успешно обработан и сохранен в {output_path}")
except Exception as e:
log_message(f"Ошибка при обработке файла {file_path}: {e}")
def process_zip(zip_path, output_folder, cover_quality, image_quality, replace_original, grayscale):
"""Обрабатывает ZIP-архив."""
try:
# Временная папка для распаковки
temp_folder = os.path.join(output_folder, "temp")
os.makedirs(temp_folder, exist_ok=True)
# Распаковка архива с помощью patool
patoolib.extract_archive(zip_path, outdir=temp_folder)
# Обработка FB2-файлов в архиве
for root_dir, _, files in os.walk(temp_folder):
for file_name in files:
if file_name.endswith(".fb2"):
file_path = os.path.join(root_dir, file_name)
process_fb2(file_path, temp_folder, cover_quality, image_quality, replace_original, grayscale)
# Определяем путь для нового архива
if replace_original:
new_zip_path = zip_path
else:
new_zip_path = os.path.join(output_folder, os.path.basename(zip_path))
# Запаковываем архив обратно с максимальным сжатием
with zipfile.ZipFile(new_zip_path, 'w', compression=zipfile.ZIP_DEFLATED, compresslevel=9) as new_zip_ref:
for root_dir, _, files in os.walk(temp_folder):
for file_name in files:
file_path = os.path.join(root_dir, file_name)
arcname = os.path.relpath(file_path, temp_folder)
new_zip_ref.write(file_path, arcname)
# Удаляем временную папку
for root_dir, _, files in os.walk(temp_folder, topdown=False):
for file_name in files:
os.remove(os.path.join(root_dir, file_name))
os.rmdir(root_dir)
log_message(f"Архив {zip_path} успешно обработан и сохранен в {new_zip_path}")
except Exception as e:
log_message(f"Ошибка при обработке архива {zip_path}: {e}")
def process_folder(folder, cover_quality, image_quality, replace_original, grayscale, progress_bar):
"""Обрабатывает все FB2-файлы и ZIP-архивы в папке и подпапках."""
output_folder = folder if replace_original else os.path.join(folder, "Compressed_FB2")
if not replace_original:
os.makedirs(output_folder, exist_ok=True)
total_files = 0
processed_files = 0
# Считаем общее количество файлов
for root_dir, _, files in os.walk(folder):
for file_name in files:
if file_name.endswith(".fb2") or file_name.endswith(".zip"):
total_files += 1
# Обрабатываем файлы
for root_dir, _, files in os.walk(folder):
for file_name in files:
if file_name.endswith(".fb2"):
file_path = os.path.join(root_dir, file_name)
process_fb2(file_path, output_folder, cover_quality, image_quality, replace_original, grayscale)
processed_files += 1
progress = int((processed_files / total_files) * 100)
progress_bar['value'] = progress
root.update_idletasks()
log_message(f"Обработано {processed_files}/{total_files} файлов")
elif file_name.endswith(".zip"):
file_path = os.path.join(root_dir, file_name)
process_zip(file_path, output_folder, cover_quality, image_quality, replace_original, grayscale)
processed_files += 1
progress = int((processed_files / total_files) * 100)
progress_bar['value'] = progress
root.update_idletasks()
log_message(f"Обработано {processed_files}/{total_files} файлов")
log_message("Обработка завершена!")
progress_bar['value'] = 100
def select_folder(cover_quality, image_quality, replace_original, grayscale, progress_bar):
"""Выбор папки с FB2-файлами и ZIP-архивами."""
folder = filedialog.askdirectory()
if folder:
progress_bar['value'] = 0
threading.Thread(target=process_folder, args=(folder, cover_quality, image_quality, replace_original, grayscale, progress_bar), daemon=True).start()
def update_logs(log_text):
"""Обновляет окно логов."""
while True:
try:
message = log_queue.get_nowait()
log_text.insert(END, message + "\n")
log_text.see(END)
except queue.Empty:
break
log_text.after(100, update_logs, log_text)
# Убираем шелл-окно на фоне
if sys.platform == "win32":
import ctypes
ctypes.windll.user32.ShowWindow(ctypes.windll.kernel32.GetConsoleWindow(), 0)
# GUI
root = Tk()
root.title("Сжатие FB2")
root.geometry("600x900")
root.configure(bg="#f0f0f0")
# Настройка шрифтов
custom_font = font.Font(family="Sylfaen", size=12)
# Фрейм для настроек сжатия
settings_frame = Frame(root, bg="#f0f0f0")
settings_frame.pack(pady=20)
# Слайдер для настройки сжатия обложек
Label(settings_frame, text="Сжатие обложек (0-10):", bg="#f0f0f0", font=custom_font).pack()
cover_scale = Scale(settings_frame, from_=0, to=10, orient=VERTICAL, bg="#ffffff", font=custom_font)
cover_scale.set(0) # По умолчанию: без сжатия
cover_scale.pack(side="left", padx=20)
# Слайдер для настройки сжатия картинок
Label(settings_frame, text="Сжатие картинок (0-10):", bg="#f0f0f0", font=custom_font).pack()
image_scale = Scale(settings_frame, from_=0, to=10, orient=VERTICAL, bg="#ffffff", font=custom_font)
image_scale.set(0) # По умолчанию: без сжатия
image_scale.pack(side="left", padx=20)
# Чекбокс для замены файлов на месте
replace_var = IntVar()
replace_checkbox = Checkbutton(root, text="Заменить оригинальные файлы", variable=replace_var, bg="#f0f0f0", font=custom_font)
replace_checkbox.pack(pady=10)
# Чекбокс для черно-белого режима
grayscale_var = IntVar()
grayscale_checkbox = Checkbutton(root, text="Сделать картинку черно-белой", variable=grayscale_var, bg="#f0f0f0", font=custom_font)
grayscale_checkbox.pack(pady=10)
# Кнопка выбора папки
Button(root, text="Выбрать папку", command=lambda: select_folder(10 - cover_scale.get(), 10 - image_scale.get(), replace_var.get(), grayscale_var.get(), progress_bar), bg="#4CAF50", fg="white", font=custom_font).pack(pady=20)
# Окно логов
log_text = Text(root, wrap="word", height=20, width=70, bg="#ffffff", fg="#000000", font=custom_font)
log_text.pack(pady=10)
# Прогресс-бар
progress_bar = ttk.Progressbar(root, orient="horizontal", length=500, mode="determinate")
progress_bar.pack(pady=10)
# Запуск обновления логов
log_text.after(100, update_logs, log_text)
root.mainloop()
[Профиль]  [ЛС] 

HeimdallrNSK

Top Bonus 06* 50TB

Стаж: 15 лет 3 месяца

Сообщений: 295

HeimdallrNSK · 22-Фев-25 20:43 (спустя 3 часа, ред. 22-Фев-25 20:43)

totnin писал(а):
87434035Прога "вскрывает" fb2, находит обложки и картинки, пережимает их по указанным вами параметрам и запаковывает обратно в fb2, уменьшая размер на некоторых файлах (при максимальном сжатии) в 5 раз =) На настройках "по умолчанию" большие архивы "уменьшаются" в 2 - 3 раза.
Дружище, а не допустил ли ты той же ошибки, что и я поначалу? Я не очень врубаюсь в этот язык, на котором ты пишешь, и буду рад ошибиться, тогда поправь меня, но ты там вроде всё в jpeg топчешь, нет? Если да, то это фиаско, в книжках полно картинок с альфаканалом, который jpeg'ом не поддерживается. Результат порадует лишь Каземира нашего Севериновича. Для картинок с прозрачностью потребен png, и тут начинаются ньюансы.
[Профиль]  [ЛС] 

РАДУГА ДЭШ

Стаж: 11 лет 7 месяцев

Сообщений: 17

РАДУГА ДЭШ · 22-Фев-25 21:03 (спустя 19 мин.)

HeimdallrNSK писал(а):
87431698
РАДУГА ДЭШ писал(а):
87431425Попробуй посомтреть у нейросети шаблоны или примеры
Я отсталый от жизни, не умею. И не только в этом - оказывается, у sqlite давно есть FTS искаропки. Посмотрю что за зверь, может даже и прикручу.
ЗЫ Зверь прикольный, прикрутил. Может, даже сам буду пользоваться поиском. Пожалуй, ради такого дела мажорный номер двину, скоро будет готов FLibrary 2.0. Всем, кто требовал поиск, спасибо.
Цитата:
Я думаю звездачки\квадраты могут зависить от операционной системы)
Ого! У тебя не винда чтоли? Неужто в wine запускаешь?
О, да, ты меня раскусил) Сижу вот с Манжары и через Вино открываю всё что можно...
Так что, сам понимаешь, это немного влияет на отображаемость)
Но, в целом, всё робит исправно и даже багов не наблюдается)
По поводу поиска на гите - жду с предвкушением!))
[Профиль]  [ЛС] 

totnin

Стаж: 10 лет 5 месяцев

Сообщений: 72


totnin · 22-Фев-25 22:12 (спустя 1 час 9 мин., ред. 22-Фев-25 22:24)

HeimdallrNSK писал(а):
Для картинок с прозрачностью потребен png,
Спасибо, бро, исправил. Теперь с проверкой на альфа-канал. Оптимизация будет, но "так себе"... Думаю инкапсулировать PNGQuant - преобразует изображения в 8-ми битные, там уже и "степень пожатия" 60-80 процентов...посмотрим)
[Профиль]  [ЛС] 

HeimdallrNSK

Top Bonus 06* 50TB

Стаж: 15 лет 3 месяца

Сообщений: 295

HeimdallrNSK · 23-Фев-25 08:35 (спустя 10 часов, ред. 23-Фев-25 08:35)

totnin писал(а):
87435373
HeimdallrNSK писал(а):
Для картинок с прозрачностью потребен png,
Думаю инкапсулировать PNGQuant
Да, я так и сделал. Сначала прикрутил вызов exe-шника на каждую картинку и офигел от того, как потекла память - преобразование исходной раздачи пришлось производить в два приёма, т.к. где-то на половине процесса утекали все мои 64Г оперативы, и прога падала с bad_alloc'ом. Потом таки собрал dll-ку, и заюзал API квантизатора напрямую. Так работает норм. Если пойдёшь этим путём, и будет лень возиться с rust'ом, можешь взять imagequant.dll из бинарей FLibrary. Потом я вспомнил, что c++-реализация алгоритма квантизации у меня валяется в загашнике, притыреная с прошлой работы, но уже поздно, хотя можно было бы пободаться на предмет того, кто круче жмёт... Но тут совсем копейки, скорее всего. Лучше покурить в сторону использования другой реализации libpng. Или вообще топтать в другой формат с поддержкой альфы, типа webp или heif, но для твоих целей это не подойдёт.
РАДУГА ДЭШ писал(а):
Так что, сам понимаешь, это немного влияет на отображаемость)
Сделал секретную настройку
[Профиль]  [ЛС] 

totnin

Стаж: 10 лет 5 месяцев

Сообщений: 72


totnin · 23-Фев-25 09:22 (спустя 46 мин.)

HeimdallrNSK писал(а):
Да, я так и сделал.
Прикольно) Но, думаю, хватит. Спасибо, что напомнил насчет альфа-канала..а то делал для себя, потом плакал бы)
[Профиль]  [ЛС] 

HeimdallrNSK

Top Bonus 06* 50TB

Стаж: 15 лет 3 месяца

Сообщений: 295

HeimdallrNSK · 23-Фев-25 16:20 (спустя 6 часов, ред. 23-Фев-25 17:53)

Зарелизился FLibrary 2.0.0
А есть кто-нибудь, кому нужен msi-инсталлятор? А то я немножко утомился его поддерживать. Может, выкинуть его на мороз?
[Профиль]  [ЛС] 

totnin

Стаж: 10 лет 5 месяцев

Сообщений: 72


totnin · 23-Фев-25 16:37 (спустя 17 мин., ред. 23-Фев-25 21:55)

HeimdallrNSK писал(а):
[Профиль]  [ЛС] 

РАДУГА ДЭШ

Стаж: 11 лет 7 месяцев

Сообщений: 17

РАДУГА ДЭШ · 24-Фев-25 05:59 (спустя 13 часов)

HeimdallrNSK писал(а):
87437975Зарелизился FLibrary 2.0.0
А есть кто-нибудь, кому нужен msi-инсталлятор? А то я немножко утомился его поддерживать. Может, выкинуть его на мороз?
Фиг знает)
Лично я всегда любил портативные версии, по понятным причинам)
Так что, кстати, я оказался приятно удивлен наличием оной у тебя)
[Профиль]  [ЛС] 

HeimdallrNSK

Top Bonus 06* 50TB

Стаж: 15 лет 3 месяца

Сообщений: 295

HeimdallrNSK · 24-Фев-25 10:07 (спустя 4 часа, ред. 24-Фев-25 10:07)

РАДУГА ДЭШ писал(а):
87441213Лично я всегда любил портативные версии, по понятным причинам)
Так что, кстати, я оказался приятно удивлен наличием оной у тебя)
Я б не заморачивался этим зоопарком, но на инсталлеры, собранные самым годным InnoSetup'ом, некоторые антивирусы агрятся. У них ИИ не в меру умный, а вопросики ко мне потом.
virustotal report
Отчёт на любой FLibrary_setup_x.y.z.exe

На msi и portable всегда отчёты зелёные
[Профиль]  [ЛС] 

totnin

Стаж: 10 лет 5 месяцев

Сообщений: 72


totnin · 24-Фев-25 14:32 (спустя 4 часа, ред. 24-Фев-25 14:32)

По ощущениям 1.8.2 - эталон. На 2.0.1 не работает инъекция %%%
Где бы разжиться 1.8.2 портабельной?) И успокоиться...и чтобы в сеть не лезла за обновлениями
[Профиль]  [ЛС] 

HeimdallrNSK

Top Bonus 06* 50TB

Стаж: 15 лет 3 месяца

Сообщений: 295

HeimdallrNSK · 24-Фев-25 15:52 (спустя 1 час 19 мин.)

totnin писал(а):
87442432По ощущениям 1.8.2 - эталон. На 2.0.1 не работает инъекция %%%
Где бы разжиться 1.8.2 портабельной?) И успокоиться...и чтобы в сеть не лезла за обновлениями
Да, инъекция больше не работает, поиск по заголовкам книг теперь не select ... from ... where title like ?. Юзается мощный и модный FTS5. Вообще-то за допущенную возможность sql-инъекций в приличных домах больно бьют, иногда ногами.
Чтобы сборка превратилась в тыкву портабельную, просто положи к бинарям файл installer_mode с одним волшебным словом portable внутри. Если боишься опечататься - скачай последнюю портабельную версию и возьми файл оттуда.
Возможность отключить проверку обновления на старте заведу в виде настройки, сделаю тебе бэкпорт.
А для маньяков-психопатов сделаю штатную возможность вытянуть все книги, хоть это и грех.
[Профиль]  [ЛС] 

totnin

Стаж: 10 лет 5 месяцев

Сообщений: 72


totnin · 24-Фев-25 17:44 (спустя 1 час 51 мин., ред. 24-Фев-25 18:08)

HeimdallrNSK писал(а):
положи к бинарям файл installer_mode с одним волшебным словом portable внутри
Все работает, благодарю!!
HeimdallrNSK писал(а):
сделаю тебе бэкпорт.

Спасибо за "обновленную версию"!!!!
И тут слегка подправленный, на мой незамутненный взгляд, шаблон для экспорта книг
%user_destination_folder%/%author%/%author_last_fm%-%title%-[%seq_number%].%file_ext%
Распаковывает: Папка (ФИО автора) - Фамилия И.О. - Название - Номер серии
[Профиль]  [ЛС] 
 
Ответить
Loading...
Error