guix_mirror_bot pushed a commit to branch gnome-team
in repository guix.

commit f7c88da226dd30d20c37200451cf9d445c0649e4
Author: Liliana Marie Prikler <[email protected]>
AuthorDate: Thu Nov 20 21:29:08 2025 +0100

    gnu: komikku: Update to 1.87.0.
    
    * gnu/packages/patches/komikku-future-servers-compat.patch: Delete file.
    * gnu/packages/patches/komikku-python-3.11-compat.patch: Adjust.
    * gnu/packages/patches/komikku-fix-colorthief.patch: New file.
    * gnu/local.mk (dist_patch_DATA)
    * gnu/packages/gnome.scm (komikku): Update to 1.87.0
    [patches]: Remove “komikku-python-3.11-compat.patch”.
    Add “python-fix-colorthief.patch”.
---
 gnu/local.mk                                       |   2 +-
 gnu/packages/gnome.scm                             |   6 +-
 gnu/packages/patches/komikku-fix-colorthief.patch  |  23 ++
 .../patches/komikku-future-servers-compat.patch    | 360 ---------------------
 .../patches/komikku-python-3.11-compat.patch       |  37 ---
 5 files changed, 27 insertions(+), 401 deletions(-)

diff --git a/gnu/local.mk b/gnu/local.mk
index c7829ad4ff..97301f66d2 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1658,7 +1658,7 @@ dist_patch_DATA =                                         
\
   %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/komikku-fix-colorthief.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         \
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index c22abb297e..01ebfd43bf 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -13805,7 +13805,7 @@ profiler via Sysprof, debugging support, and more.")
 (define-public komikku
   (package
     (name "komikku")
-    (version "1.72.0")
+    (version "1.87.0")
     (source
      (origin
        (method git-fetch)
@@ -13815,9 +13815,9 @@ profiler via Sysprof, debugging support, and more.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "13mz3ijrmfh002pw977mzdnilgkfl0knr3xrxr0zdicx8nf7inr9"))
+         "0fsmhigvvr9fahvczbwc5lv7xcvl9px9c10dv8sqx5j9sr1fhlcq"))
        (patches (search-patches "komikku-python-3.11-compat.patch"
-                                "komikku-future-servers-compat.patch"))))
+                                "komikku-fix-colorthief.patch"))))
     (build-system meson-build-system)
     (arguments
      (list
diff --git a/gnu/packages/patches/komikku-fix-colorthief.patch 
b/gnu/packages/patches/komikku-fix-colorthief.patch
new file mode 100644
index 0000000000..68d29b94ec
--- /dev/null
+++ b/gnu/packages/patches/komikku-fix-colorthief.patch
@@ -0,0 +1,23 @@
+Upstream-Status: Absorbed (commit bb8b06debad74d45d703479a64d867d0986b687a, 
versions 1.90+)
+diff --git a/komikku/models/database/mangas.py 
b/komikku/models/database/mangas.py
+index 47651e2e..483f10cc 100644
+--- a/komikku/models/database/mangas.py
++++ b/komikku/models/database/mangas.py
+@@ -13,7 +13,7 @@ from pathlib import Path
+ import shutil
+ import time
+ 
+-from modern_colorthief import get_palette
++from colorthief import ColorThief
+ from PIL import Image
+ from PIL import ImageFilter
+ from PIL import ImageStat
+@@ -139,7 +139,7 @@ class Manga:
+                 if '@define-color' not in data:
+                     return data
+ 
+-        palette = get_palette(cover_path, color_count=2)
++        palette = ColorThief(cover_path).get_palette(color_count=2, 
quality=1)[:2]
+         if len(palette) != 2:
+             # Single color image?
+             return None
diff --git a/gnu/packages/patches/komikku-future-servers-compat.patch 
b/gnu/packages/patches/komikku-future-servers-compat.patch
deleted file mode 100644
index 2131e81830..0000000000
--- a/gnu/packages/patches/komikku-future-servers-compat.patch
+++ /dev/null
@@ -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
-
diff --git a/gnu/packages/patches/komikku-python-3.11-compat.patch 
b/gnu/packages/patches/komikku-python-3.11-compat.patch
index 927de1075e..677f151c9a 100644
--- a/gnu/packages/patches/komikku-python-3.11-compat.patch
+++ b/gnu/packages/patches/komikku-python-3.11-compat.patch
@@ -16,42 +16,5 @@ index ce333780..76119e20 100644
  
              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'],
 

Reply via email to