void-packages/srcpkgs/fontmanager/patches/soup3.patch

166 lines
7.8 KiB
Diff

From 5cbec5eab33f6e64c27ead07cdee0098431ad6b9 Mon Sep 17 00:00:00 2001
From: Jerry Casiano <JerryCasiano@gmail.com>
Date: Sun, 18 Feb 2024 16:48:25 -0500
Subject: [PATCH] - Switch to libsoup 3 - Closes #343
---
README.md | 4 +-
README.ro.md | 4 +-
build-aux/Makefile | 2 +-
debian/control | 4 +-
fedora/font-manager.spec | 8 ++--
meson.build | 4 +-
src/font-manager/web/google/GoogleFonts.vala | 44 +++++++++----------
src/font-manager/web/google/WebFont.vala | 45 +++++++++-----------
8 files changed, 54 insertions(+), 61 deletions(-)
diff --git a/build-aux/Makefile b/build-aux/Makefile
index 9a3ffcc8..de737d94 100644
--- a/build-aux/Makefile
+++ b/build-aux/Makefile
@@ -95,7 +95,7 @@ BUILD_DEPENDS = \
python3 \
python-gi-dev \
python3-nautilus \
- libsoup2.4-dev \
+ libsoup3.0-dev \
libwebkit2gtk-4.0-dev \
libnautilus-extension-dev \
libnemo-extension-dev \
diff --git a/meson.build b/meson.build
index 9a66f62e..00b9c45e 100644
--- a/meson.build
+++ b/meson.build
@@ -27,8 +27,8 @@ sqlite = dependency('sqlite3', version: '>= 3.8')
xml = dependency('libxml-2.0', version: '>= 2.9')
if get_option('webkit')
- soup = dependency('libsoup-2.4', version: '>= 2.62')
- webkit = dependency('webkit2gtk-4.0', version: '>= 2.24')
+ soup = dependency('libsoup-3.0', version: '>= 3.4')
+ webkit = dependency('webkit2gtk-4.1', version: '>= 2.42')
add_global_arguments('-D', 'HAVE_WEBKIT', language: 'vala')
endif
diff --git a/src/font-manager/web/google/GoogleFonts.vala b/src/font-manager/web/google/GoogleFonts.vala
index 4dc64fd9..c350cb40 100644
--- a/src/font-manager/web/google/GoogleFonts.vala
+++ b/src/font-manager/web/google/GoogleFonts.vala
@@ -179,35 +179,33 @@ namespace FontManager.GoogleFonts {
foreach (var entry in order) {
string filename = "gfc-%s.json".printf(entry);
var message = new Soup.Message(GET, WEBFONTS.printf(GFC_API_KEY, entry));
- if (session.send_message(message) == Soup.Status.OK) {
+ try {
+ Bytes? bytes = session.send_and_read(message, null);
+ assert(bytes != null);
string filepath = Path.build_filename(get_package_cache_directory(), filename);
- try {
- Bytes bytes = message.response_body.flatten().get_as_bytes();
- File cache_file = File.new_for_path(filepath);
- if (cache_file.query_exists())
- cache_file.delete();
- FileOutputStream stream = cache_file.create(FileCreateFlags.PRIVATE);
- stream.write_bytes_async.begin(bytes, Priority.DEFAULT, null, (obj, res) => {
- try {
- stream.write_bytes_async.end(res);
- stream.close();
- } catch (Error e) {
- warning("Failed to write data for : %s :: %i : %s", filename, e.code, e.message);
- return;
- }
- });
- } catch (Error e) {
- warning("Failed to write data for : %s :: %i : %s", filename, e.code, e.message);
- return;
- }
- Idle.add(update_font_list_cache.callback);
- yield;
- } else {
+ File cache_file = File.new_for_path(filepath);
+ if (cache_file.query_exists())
+ cache_file.delete();
+ FileOutputStream stream = cache_file.create(FileCreateFlags.PRIVATE);
+ stream.write_bytes_async.begin(bytes, Priority.DEFAULT, null, (obj, res) => {
+ try {
+ stream.write_bytes_async.end(res);
+ stream.close();
+ } catch (Error e) {
+ warning("Failed to write data for : %s :: %i : %s", filename, e.code, e.message);
+ return;
+ }
+ });
+ } catch (Error e) {
http_status = message.status_code;
status_message = message.reason_phrase;
warning("Failed to download data for : %s :: %i", filename, (int) message.status_code);
return;
}
+ http_status = message.status_code;
+ status_message = message.reason_phrase;
+ Idle.add(update_font_list_cache.callback);
+ yield;
}
}
diff --git a/src/font-manager/web/google/WebFont.vala b/src/font-manager/web/google/WebFont.vala
index d4f14941..d2b0e0ad 100644
--- a/src/font-manager/web/google/WebFont.vala
+++ b/src/font-manager/web/google/WebFont.vala
@@ -42,35 +42,30 @@ namespace FontManager.GoogleFonts {
string filename = font.get_filename();
string filepath = Path.build_filename(font_dir, filename);
var message = new Soup.Message(GET, font.url);
- if (session.send_message(message) == Soup.Status.OK) {
+ try {
+ Bytes? bytes = session.send_and_read(message, null);
+ assert(bytes != null);
+ File font_file = File.new_for_path(filepath);
+ // File.create errors out if file already exists regardless of flags
+ if (font_file.query_exists())
+ font_file.delete();
+ FileOutputStream stream = font_file.create(FileCreateFlags.PRIVATE);
try {
- Bytes bytes = message.response_body.flatten().get_as_bytes();
- File font_file = File.new_for_path(filepath);
- if (font_file.query_exists())
- font_file.delete();
- FileOutputStream stream = font_file.create(FileCreateFlags.PRIVATE);
- stream.write_bytes_async.begin(bytes, Priority.DEFAULT, null, (obj, res) => {
- try {
- stream.write_bytes_async.end(res);
- stream.close();
- } catch (Error e) {
- warning("Failed to write data for : %s :: %i : %s", filename, e.code, e.message);
- retval = false;
- return;
- }
- });
- if (!retval)
- return false;
+ stream.write_bytes(bytes);
+ stream.close();
} catch (Error e) {
- warning("Failed to write data for : %s :: %i : %s", filename, e.code, e.message);
- return false;
+ retval = false;
+ warning("Failed to write data to file : %s : %s", filepath, e.message);
}
- Idle.add(download_font_files.callback);
- yield;
- } else {
- warning("Failed to download data for : %s :: %i", filename, (int) message.status_code);
- return false;
+ } catch (Error e) {
+ retval = false;
+ warning("Failed to read data for : %s :: %i :: %s",
+ filename,
+ (int) message.status_code,
+ e.message);
}
+ Idle.add(download_font_files.callback);
+ yield;
}
return retval;
}