mirror of
https://codeberg.org/guix/guix.git
synced 2026-01-25 03:55:08 -06:00
gnu: komikku: Update to 1.99.0.
* gnu/packages/patches/komikku-python-3.11-compat.patch: Delete file. * gnu/local.mk (dist_patch_DATA): Adjust accordingly. * gnu/packages/gnome-circle.scm (komikku): Update to 1.99.0. [source]: Drop patches. [inputs]: Add python-pyjwt and python-pypdf.
This commit is contained in:
parent
0e83d5e352
commit
77843783e1
4 changed files with 5 additions and 423 deletions
|
|
@ -1677,8 +1677,6 @@ dist_patch_DATA = \
|
|||
%D%/packages/patches/jsonnet-include-cstdint-for-gcc-13-builds.patch \
|
||||
%D%/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch \
|
||||
%D%/packages/patches/julia-Use-MPFR-4.2.patch \
|
||||
%D%/packages/patches/komikku-python-3.11-compat.patch \
|
||||
%D%/packages/patches/komikku-future-servers-compat.patch \
|
||||
%D%/packages/patches/libcall-ui-make-it-installable.patch \
|
||||
%D%/packages/patches/libcamera-ipa_manager-disable-signature-verification.patch \
|
||||
%D%/packages/patches/libconfuse-CVE-2022-40320.patch \
|
||||
|
|
|
|||
|
|
@ -49,6 +49,7 @@
|
|||
#:use-module (gnu packages haskell-xyz)
|
||||
#:use-module (gnu packages linux)
|
||||
#:use-module (gnu packages password-utils)
|
||||
#:use-module (gnu packages pdf)
|
||||
#:use-module (gnu packages pkg-config)
|
||||
#:use-module (gnu packages protobuf)
|
||||
#:use-module (gnu packages python)
|
||||
|
|
@ -445,7 +446,7 @@ and a high score table.")
|
|||
(define-public komikku
|
||||
(package
|
||||
(name "komikku")
|
||||
(version "1.72.0")
|
||||
(version "1.99.0")
|
||||
(source
|
||||
(origin
|
||||
(method git-fetch)
|
||||
|
|
@ -455,9 +456,7 @@ and a high score table.")
|
|||
(file-name (git-file-name name version))
|
||||
(sha256
|
||||
(base32
|
||||
"13mz3ijrmfh002pw977mzdnilgkfl0knr3xrxr0zdicx8nf7inr9"))
|
||||
(patches (search-patches "komikku-python-3.11-compat.patch"
|
||||
"komikku-future-servers-compat.patch"))))
|
||||
"1did8rh3aw6d3g1myavsma986rwashw09g3m442lv8fzmdiw18r4"))))
|
||||
(build-system meson-build-system)
|
||||
(arguments
|
||||
(list
|
||||
|
|
@ -517,6 +516,8 @@ and a high score table.")
|
|||
python-pure-protobuf
|
||||
python-pycairo
|
||||
python-pygobject
|
||||
python-pyjwt
|
||||
python-pypdf
|
||||
python-rarfile
|
||||
python-requests
|
||||
python-unidecode
|
||||
|
|
|
|||
|
|
@ -1,360 +0,0 @@
|
|||
This patch is a partial combination of the following upstream patches to make
|
||||
Komikku compatible with servers >= 1.79.0.
|
||||
|
||||
https://codeberg.org/valos/Komikku/commit/311a8915d7fa80278979a6d80d75a5febef9f2c1
|
||||
https://codeberg.org/valos/Komikku/commit/6820caac4b1f3538b8ce6ed729c19c1f6f66ea7f
|
||||
|
||||
diff --git a/data/info.febvre.Komikku.gresource.xml.in b/data/info.febvre.Komikku.gresource.xml.in
|
||||
index 87fe29f..8dca096 100644
|
||||
--- a/data/info.febvre.Komikku.gresource.xml.in
|
||||
+++ b/data/info.febvre.Komikku.gresource.xml.in
|
||||
@@ -36,6 +36,9 @@
|
||||
<!-- CSS -->
|
||||
<file compressed="true" alias="style.css">css/style.css</file>
|
||||
|
||||
+ <!-- Fonts -->
|
||||
+ <file compressed="true" alias="text-image.otf">fonts/0xPropo-Medium.otf</file>
|
||||
+
|
||||
<!-- Icons -->
|
||||
<file compressed="true" preprocess="xml-stripblanks" alias="icons/scalable/apps/brush-symbolic.svg">icons/brush-symbolic.svg</file>
|
||||
<file compressed="true" preprocess="xml-stripblanks" alias="icons/scalable/apps/computer-fail-symbolic.svg">icons/computer-fail-symbolic.svg</file>
|
||||
diff --git a/komikku/servers/__init__.py b/komikku/servers/__init__.py
|
||||
index ab73cff..8482ab2 100644
|
||||
--- a/komikku/servers/__init__.py
|
||||
+++ b/komikku/servers/__init__.py
|
||||
@@ -44,6 +44,7 @@ LANGUAGES = dict(
|
||||
eo='Espéranto',
|
||||
es='Español',
|
||||
es_419='Español (Latinoamérica)',
|
||||
+ fa='فارسی',
|
||||
fr='Français',
|
||||
it='Italiano',
|
||||
nl='Nederlands',
|
||||
diff --git a/komikku/servers/existentialcomics/__init__.py b/komikku/servers/existentialcomics/__init__.py
|
||||
index 1ecb85f..f1747bd 100644
|
||||
--- a/komikku/servers/existentialcomics/__init__.py
|
||||
+++ b/komikku/servers/existentialcomics/__init__.py
|
||||
@@ -8,6 +8,7 @@ import textwrap
|
||||
|
||||
from komikku.servers import Server
|
||||
from komikku.servers import USER_AGENT
|
||||
+from komikku.servers.utils import TextImage
|
||||
from komikku.utils import get_buffer_mime_type
|
||||
|
||||
|
||||
@@ -105,24 +106,26 @@ class Existentialcomics(Server):
|
||||
"""
|
||||
if page.get('slug'):
|
||||
r = self.session_get(self.image_url.format(page['slug']))
|
||||
+ if r.status_code != 200:
|
||||
+ return None
|
||||
+
|
||||
+ mime_type = get_buffer_mime_type(r.content)
|
||||
+ if not mime_type.startswith('image'):
|
||||
+ return None
|
||||
+
|
||||
name = page['slug']
|
||||
+ content = r.content
|
||||
else:
|
||||
- r = self.session_get(
|
||||
- 'https://fakeimg.pl/1500x2126/ffffff/000000/',
|
||||
- params=dict(
|
||||
- text='\n'.join(textwrap.wrap(page['text'], 25)),
|
||||
- font_size=64,
|
||||
- font='museo'
|
||||
- )
|
||||
- )
|
||||
- name = '{0}-alt-text.png'.format(page['name'])
|
||||
+ text = '\n'.join(textwrap.wrap(page['text'], 25))
|
||||
+ image = TextImage(text)
|
||||
|
||||
- mime_type = get_buffer_mime_type(r.content)
|
||||
- if not mime_type.startswith('image'):
|
||||
- return None
|
||||
+ mime_type = image.mime_type
|
||||
+ name = f'{page["name"]}-alt-text.{image.format}'
|
||||
+ print(name)
|
||||
+ content = image.content
|
||||
|
||||
return dict(
|
||||
- buffer=r.content,
|
||||
+ buffer=content,
|
||||
mime_type=mime_type,
|
||||
name=name,
|
||||
)
|
||||
diff --git a/komikku/servers/fosscomics/__init__.py b/komikku/servers/fosscomics/__init__.py
|
||||
index f77e13d..a3097e5 100644
|
||||
--- a/komikku/servers/fosscomics/__init__.py
|
||||
+++ b/komikku/servers/fosscomics/__init__.py
|
||||
@@ -11,6 +11,7 @@ import requests
|
||||
from komikku.servers import Server
|
||||
from komikku.servers import USER_AGENT
|
||||
from komikku.servers.utils import convert_date_string
|
||||
+from komikku.servers.utils import TextImage
|
||||
from komikku.utils import get_buffer_mime_type
|
||||
|
||||
|
||||
@@ -122,27 +123,25 @@ class Fosscomics(Server):
|
||||
|
||||
if page.get('image'):
|
||||
r = self.session_get(self.image_url.format(chapter_slug, page['image']))
|
||||
- name = f'{chapter_num:02d}_{page["index"]:02d}.png' # noqa: E231
|
||||
- else:
|
||||
- r = self.session_get(
|
||||
- 'https://fakeimg.pl/1500x2126/ffffff/000000/',
|
||||
- params=dict(
|
||||
- text='\n'.join(textwrap.wrap(page['text'], 40)),
|
||||
- font_size=64,
|
||||
- font='museo'
|
||||
- )
|
||||
- )
|
||||
- name = f'{chapter_num:02d}_{page["index"]:02d}_text_{page["subindex"]:02d}.png' # noqa: E231
|
||||
+ if r.status_code != 200:
|
||||
+ return None
|
||||
|
||||
- if r.status_code != 200:
|
||||
- return None
|
||||
+ mime_type = get_buffer_mime_type(r.content)
|
||||
+ if not mime_type.startswith('image'):
|
||||
+ return None
|
||||
|
||||
- mime_type = get_buffer_mime_type(r.content)
|
||||
- if not mime_type.startswith('image'):
|
||||
- return None
|
||||
+ name = f'{chapter_num:02d}_{page["index"]:02d}.{mime_type.split("/")[-1]}' # noqa: E231
|
||||
+ content = r.content
|
||||
+ else:
|
||||
+ text = '\n'.join(textwrap.wrap(page['text'], 25))
|
||||
+ image = TextImage(text)
|
||||
+
|
||||
+ mime_type = image.mime_type
|
||||
+ name = f'{chapter_num:02d}_{page["index"]:02d}_text_{page["subindex"]:02d}.{image.format}' # noqa: E231
|
||||
+ content = image.content
|
||||
|
||||
return dict(
|
||||
- buffer=r.content,
|
||||
+ buffer=content,
|
||||
mime_type=mime_type,
|
||||
name=name,
|
||||
)
|
||||
diff --git a/komikku/servers/grisebouille/__init__.py b/komikku/servers/grisebouille/__init__.py
|
||||
index 49aa539..211fbb9 100644
|
||||
--- a/komikku/servers/grisebouille/__init__.py
|
||||
+++ b/komikku/servers/grisebouille/__init__.py
|
||||
@@ -9,6 +9,7 @@ import textwrap
|
||||
from komikku.servers import Server
|
||||
from komikku.servers import USER_AGENT
|
||||
from komikku.servers.utils import convert_date_string
|
||||
+from komikku.servers.utils import TextImage
|
||||
from komikku.utils import get_buffer_mime_type
|
||||
|
||||
|
||||
@@ -123,27 +124,22 @@ class Grisebouille(Server):
|
||||
if r.status_code != 200:
|
||||
return None
|
||||
|
||||
- name = page['image'].split('/')[-1]
|
||||
- else:
|
||||
- r = self.session_get(
|
||||
- 'https://fakeimg.pl/1500x2126/ffffff/000000/',
|
||||
- params=dict(
|
||||
- text='\n'.join(textwrap.wrap(page['text'], 25)),
|
||||
- font_size=64,
|
||||
- font='museo',
|
||||
- )
|
||||
- )
|
||||
- if r.status_code != 200:
|
||||
+ mime_type = get_buffer_mime_type(r.content)
|
||||
+ if not mime_type.startswith('image'):
|
||||
return None
|
||||
|
||||
- name = 'txt_{0:03d}.png'.format(page['index'])
|
||||
+ name = page['image'].split('/')[-1]
|
||||
+ content = r.content
|
||||
+ else:
|
||||
+ text = '\n'.join(textwrap.wrap(page['text'], 25))
|
||||
+ image = TextImage(text)
|
||||
|
||||
- mime_type = get_buffer_mime_type(r.content)
|
||||
- if not mime_type.startswith('image'):
|
||||
- return None
|
||||
+ mime_type = image.mime_type
|
||||
+ name = f'txt_{page["index"]:03d}.{image.format}' # noqa: E231
|
||||
+ content = image.content
|
||||
|
||||
return dict(
|
||||
- buffer=r.content,
|
||||
+ buffer=content,
|
||||
mime_type=mime_type,
|
||||
name=name,
|
||||
)
|
||||
diff --git a/komikku/servers/multi/hiveworks/__init__.py b/komikku/servers/multi/hiveworks/__init__.py
|
||||
index a0bb405..ec9d955 100644
|
||||
--- a/komikku/servers/multi/hiveworks/__init__.py
|
||||
+++ b/komikku/servers/multi/hiveworks/__init__.py
|
||||
@@ -17,6 +17,7 @@ import textwrap
|
||||
from komikku.servers import Server
|
||||
from komikku.servers import USER_AGENT
|
||||
from komikku.servers.utils import convert_date_string
|
||||
+from komikku.servers.utils import TextImage
|
||||
from komikku.utils import get_buffer_mime_type
|
||||
|
||||
|
||||
@@ -112,27 +113,25 @@ class Hiveworks(Server):
|
||||
"""Returns chapter page scan (image) content"""
|
||||
if page.get('image'):
|
||||
r = self.session_get(self.image_url.format(page['image']))
|
||||
+ if r.status_code != 200:
|
||||
+ return None
|
||||
+
|
||||
+ mime_type = get_buffer_mime_type(r.content)
|
||||
+ if not mime_type.startswith('image'):
|
||||
+ return None
|
||||
+
|
||||
name = page['image']
|
||||
+ content = r.content
|
||||
else:
|
||||
- r = self.session_get(
|
||||
- 'https://fakeimg.pl/1500x2126/ffffff/000000/',
|
||||
- params=dict(
|
||||
- text='\n'.join(textwrap.wrap(page['text'], 25)),
|
||||
- font_size=64,
|
||||
- font='museo'
|
||||
- )
|
||||
- )
|
||||
- name = '{0}-alt-text.png'.format(chapter_slug)
|
||||
-
|
||||
- if r.status_code != 200:
|
||||
- return None
|
||||
+ text = '\n'.join(textwrap.wrap(page['text'], 25))
|
||||
+ image = TextImage(text)
|
||||
|
||||
- mime_type = get_buffer_mime_type(r.content)
|
||||
- if not mime_type.startswith('image'):
|
||||
- return None
|
||||
+ mime_type = image.mime_type
|
||||
+ name = f'{chapter_slug}-alt-text.{image.format}'
|
||||
+ content = image.content
|
||||
|
||||
return dict(
|
||||
- buffer=r.content,
|
||||
+ buffer=content,
|
||||
mime_type=mime_type,
|
||||
name=name,
|
||||
)
|
||||
diff --git a/komikku/servers/utils.py b/komikku/servers/utils.py
|
||||
index cf898fc..9fb2139 100644
|
||||
--- a/komikku/servers/utils.py
|
||||
+++ b/komikku/servers/utils.py
|
||||
@@ -23,15 +23,54 @@ from bs4 import BeautifulSoup
|
||||
from bs4 import NavigableString
|
||||
import dateparser
|
||||
import emoji
|
||||
+from gi.repository import Gio
|
||||
from PIL import Image
|
||||
+from PIL import ImageDraw
|
||||
+from PIL import ImageFont
|
||||
import requests
|
||||
|
||||
from komikku.servers.loader import ServerFinder
|
||||
from komikku.utils import get_cached_logos_dir
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
+class TextImage:
|
||||
+ def __init__(self, text, width=1500, height=2126, bg_color='#fff', fg_color='#000', font_size=64, format='webp'):
|
||||
+ self.format = format
|
||||
+ self.image = Image.new('RGB', (width, height), bg_color)
|
||||
+
|
||||
+ if text is None:
|
||||
+ text = ''
|
||||
+
|
||||
+ rfont = Gio.resources_lookup_data('/info/febvre/Komikku/text-image.otf', Gio.ResourceLookupFlags.NONE)
|
||||
+ font = ImageFont.truetype(BytesIO(rfont.get_data()), font_size)
|
||||
+
|
||||
+ draw = ImageDraw.Draw(self.image)
|
||||
+ if '\n' in text:
|
||||
+ left, top, right, bottom = draw.multiline_textbbox((0, 0), text, font, font_size=font_size)
|
||||
+ else:
|
||||
+ left, top, right, bottom = draw.textbbox((0, 0), text, font, font_size=font_size)
|
||||
+
|
||||
+ text_width = right - left
|
||||
+ text_height = bottom - top
|
||||
+ text_coord = ((width - text_width) // 2, (height - text_height) // 2)
|
||||
+
|
||||
+ draw.multiline_text(text_coord, text, fill=fg_color, font=font, align='center')
|
||||
+ del draw
|
||||
+
|
||||
+ @property
|
||||
+ def content(self):
|
||||
+ buf = BytesIO()
|
||||
+ self.image.save(buf, self.format.upper())
|
||||
+
|
||||
+ return buf.getvalue()
|
||||
+
|
||||
+ @property
|
||||
+ def mime_type(self):
|
||||
+ return f'image/{self.format}'
|
||||
+
|
||||
+
|
||||
def convert_date_string(date_string, format=None, languages=None):
|
||||
"""
|
||||
Convert a date string into a date object
|
||||
diff --git a/komikku/servers/xkcd/__init__.py b/komikku/servers/xkcd/__init__.py
|
||||
index 3445884..0eaeb5e 100644
|
||||
--- a/komikku/servers/xkcd/__init__.py
|
||||
+++ b/komikku/servers/xkcd/__init__.py
|
||||
@@ -9,6 +9,7 @@ import textwrap
|
||||
from komikku.servers import Server
|
||||
from komikku.servers import USER_AGENT
|
||||
from komikku.servers.utils import convert_date_string
|
||||
+from komikku.servers.utils import TextImage
|
||||
from komikku.utils import get_buffer_mime_type
|
||||
|
||||
|
||||
@@ -108,27 +109,25 @@ class Xkcd(Server):
|
||||
"""
|
||||
if page.get('image'):
|
||||
r = self.session_get(self.image_url.format(page['image']))
|
||||
+ if r.status_code != 200:
|
||||
+ return None
|
||||
+
|
||||
+ mime_type = get_buffer_mime_type(r.content)
|
||||
+ if not mime_type.startswith('image'):
|
||||
+ return None
|
||||
+
|
||||
name = page['image']
|
||||
+ content = r.content
|
||||
else:
|
||||
- r = self.session_get(
|
||||
- 'https://fakeimg.pl/1500x2126/ffffff/000000/',
|
||||
- params=dict(
|
||||
- text='\n'.join(textwrap.wrap(page['text'], 25)),
|
||||
- font_size=64,
|
||||
- font='museo'
|
||||
- )
|
||||
- )
|
||||
- name = '{0}-alt-text.png'.format(chapter_slug)
|
||||
-
|
||||
- if r.status_code != 200:
|
||||
- return None
|
||||
+ text = '\n'.join(textwrap.wrap(page['text'], 25))
|
||||
+ image = TextImage(text)
|
||||
|
||||
- mime_type = get_buffer_mime_type(r.content)
|
||||
- if not mime_type.startswith('image'):
|
||||
- return None
|
||||
+ mime_type = image.mime_type
|
||||
+ name = f'{chapter_slug}-alt-text.{image.format}'
|
||||
+ content = image.content
|
||||
|
||||
return dict(
|
||||
- buffer=r.content,
|
||||
+ buffer=content,
|
||||
mime_type=mime_type,
|
||||
name=name,
|
||||
)
|
||||
--
|
||||
libgit2 1.5.2
|
||||
|
||||
|
|
@ -1,57 +0,0 @@
|
|||
This patch fixes quote nesting in format strings in a way that's compatible with
|
||||
Python 3.11. A larger cleanup patch [1] applies some of these hunks upstream.
|
||||
|
||||
[1] https://codeberg.org/valos/Komikku/commit/e76766c6012d9d5c18c2c3bbaa7dfc11a6ee2d77
|
||||
|
||||
diff --git a/komikku/card/tracking.py b/komikku/card/tracking.py
|
||||
index ce333780..76119e20 100644
|
||||
--- a/komikku/card/tracking.py
|
||||
+++ b/komikku/card/tracking.py
|
||||
@@ -279,7 +279,7 @@ class TrackerRow(Adw.ExpanderRow):
|
||||
self.set_expanded(True)
|
||||
self.set_arrow_visible(True)
|
||||
self.btn.set_visible(False)
|
||||
- self.action_row.set_title(f'<a href="{self.tracker.get_manga_url(data['id'])}">{html_escape(data["name"])}</a>')
|
||||
+ self.action_row.set_title(f'<a href="{self.tracker.get_manga_url(data["id"])}">{html_escape(data["name"])}</a>')
|
||||
|
||||
with self.chapters_progress_row.handler_block(self.num_chapter_changed_handler_id):
|
||||
adj = Gtk.Adjustment(
|
||||
--
|
||||
diff --git a/komikku/servers/mangalib/__init__.py b/komikku/servers/mangalib/__init__.py
|
||||
index b631f617..c48c1cf2 100644
|
||||
--- a/komikku/servers/mangalib/__init__.py
|
||||
+++ b/komikku/servers/mangalib/__init__.py
|
||||
@@ -124,9 +124,9 @@ class Mangalib(Server):
|
||||
for team in branch['teams']:
|
||||
scanlators.append(team['name'])
|
||||
|
||||
data['chapters'].append(dict(
|
||||
- slug=f'v{chapter['volume']}/c{chapter['number']}',
|
||||
+ slug=f'v{chapter["volume"]}/c{chapter["number"]}',
|
||||
title=f'Том {chapter["volume"]} Глава {chapter["number"]} - {chapter["name"]}',
|
||||
num=chapter['number'] if is_number(chapter['number']) else None,
|
||||
num_volume=chapter['volume'] if is_number(chapter['volume']) else None,
|
||||
date=convert_date_string(date, format='%Y-%m-%d') if date else None,
|
||||
diff --git a/komikku/servers/perfscan/__init__.py b/komikku/servers/perfscan/__init__.py
|
||||
index 8d77c131..ea9df5e4 100644
|
||||
--- a/komikku/servers/perfscan/__init__.py
|
||||
+++ b/komikku/servers/perfscan/__init__.py
|
||||
@@ -69,7 +69,7 @@ class Perfscan(Server):
|
||||
))
|
||||
|
||||
data['name'] = resp_data['title']
|
||||
- data['cover'] = f'{self.media_url}/{resp_data['cover']}'
|
||||
+ data['cover'] = f'{self.media_url}/{resp_data["cover"]}'
|
||||
|
||||
if resp_data.get('author'):
|
||||
data['authors'].append(resp_data['author'])
|
||||
@@ -95,7 +95,7 @@ class Perfscan(Server):
|
||||
for chapter in resp_data.get('Chapter'):
|
||||
title = chapter['title'].strip()
|
||||
if title in (None, '', '-'):
|
||||
- title = f'Chapitre {chapter['index']}'
|
||||
+ title = f'Chapitre {chapter["index"]}'
|
||||
|
||||
data['chapters'].append({
|
||||
'slug': chapter['id'],
|
||||
|
||||
Loading…
Add table
Reference in a new issue