diff options
author | Johannes Schoepfer <slackbuilds@schoepfer.info> | 2024-07-19 23:37:29 +0000 |
---|---|---|
committer | Willy Sudiarto Raharjo <willysr@slackbuilds.org> | 2024-07-20 08:08:41 +0700 |
commit | f4b74b0faba41fbab236b44a49c5e54af6ec43c5 (patch) | |
tree | 2f86f94cab71ee4514afd6216a02e60ca07b7746 /audio/tuner | |
parent | 207e261230fe11460335ed629d84d616884b22f5 (diff) |
audio/tuner: Updated for version 1.5.2.
Signed-off-by: Andrew Clemons <andrew.clemons@gmail.com>
Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
Diffstat (limited to 'audio/tuner')
-rw-r--r-- | audio/tuner/649732e05a.patch | 295 | ||||
-rw-r--r-- | audio/tuner/tuner.SlackBuild | 8 | ||||
-rw-r--r-- | audio/tuner/tuner.info | 8 |
3 files changed, 305 insertions, 6 deletions
diff --git a/audio/tuner/649732e05a.patch b/audio/tuner/649732e05a.patch new file mode 100644 index 000000000000..aabd464bb20f --- /dev/null +++ b/audio/tuner/649732e05a.patch @@ -0,0 +1,295 @@ +From 649732e05a56f7b5c8b34875b3ed544319c45e3f Mon Sep 17 00:00:00 2001 +From: Louis Brauer <louis@openbooking.ch> +Date: Sat, 22 Jun 2024 23:22:57 +0200 +Subject: [PATCH] Upgrade to libsoup-3.0 + +--- + README.md | 4 +- + meson.build | 3 +- + src/Services/RadioBrowserDirectory.vala | 79 ++++++++++++++++--------- + src/Widgets/HeaderBar.vala | 44 ++++++++------ + src/Widgets/StationBox.vala | 56 ++++++++++-------- + 5 files changed, 110 insertions(+), 76 deletions(-) + +diff --git a/README.md b/README.md +index 8a20169..5d2cb66 100644 +--- a/README.md ++++ b/README.md +@@ -109,7 +109,7 @@ granite + gtk+-3.0 + gstreamer-1.0 + gstreamer-player-1.0 +-libsoup-2.4 ++libsoup-3.0 + json-glib-1.0 + libgee-0.8 + libgeoclue-2-0 +@@ -124,7 +124,7 @@ Make sure you have the dependencies installed: + + ```bash + sudo apt install git valac meson +-sudo apt install libgtk-3-dev libgee-0.8-dev libgranite-dev libgstreamer1.0-dev libgstreamer-plugins-bad1.0-dev libsoup2.4-dev libjson-glib-dev libgeoclue-2-dev libgeocode-glib-dev ++sudo apt install libgtk-3-dev libgee-0.8-dev libgranite-dev libgstreamer1.0-dev libgstreamer-plugins-bad1.0-dev libsoup3.0-dev libjson-glib-dev libgeoclue-2-dev libgeocode-glib-dev + ``` + + Then clone this repo and build it locally: +diff --git a/meson.build b/meson.build +index 63542fa..5aabe03 100644 +--- a/meson.build ++++ b/meson.build +@@ -47,7 +47,7 @@ dependencies = [ + dependency ('granite'), + dependency ('gstreamer-1.0'), + dependency ('gstreamer-player-1.0'), +- dependency ('libsoup-2.4'), ++ dependency ('libsoup-3.0'), + dependency ('json-glib-1.0'), + dependency ('libgeoclue-2.0'), + dependency ('geocode-glib-1.0') +@@ -69,4 +69,3 @@ subdir ('data') + subdir ('po') + + meson.add_install_script ('meson/post_install.py') +- +diff --git a/src/Services/RadioBrowserDirectory.vala b/src/Services/RadioBrowserDirectory.vala +index 9def43d..a7db9bb 100644 +--- a/src/Services/RadioBrowserDirectory.vala ++++ b/src/Services/RadioBrowserDirectory.vala +@@ -177,16 +177,26 @@ public class Client : Object { + debug (@"sending listening event for station $stationuuid"); + var resource = @"json/url/$stationuuid"; + var message = new Soup.Message ("GET", @"$current_server/$resource"); +- var response_code = _session.send_message (message); +- debug (@"response: $(response_code)"); ++ try { ++ var resp = _session.send (message); ++ resp.close (); ++ } catch(GLib.Error e) { ++ debug ("failed to track()"); ++ } ++ debug (@"response: $(message.status_code)"); + } + + public void vote (string stationuuid) { + debug (@"sending vote event for station $stationuuid"); + var resource = @"json/vote/$stationuuid)"; + var message = new Soup.Message ("GET", @"$current_server/$resource"); +- var response_code = _session.send_message (message); +- debug (@"response: $(response_code)"); ++ try { ++ var resp = _session.send (message); ++ resp.close (); ++ } catch(GLib.Error e) { ++ debug("failed to vote()"); ++ } ++ debug (@"response: $(message.status_code)"); + } + + public ArrayList<Station> get_stations (string resource) throws DataError { +@@ -195,21 +205,27 @@ public class Client : Object { + var message = new Soup.Message ("GET", @"$current_server/$resource"); + Json.Node rootnode; + +- var response_code = _session.send_message (message); +- debug (@"response from radio-browser.info: $response_code"); +- var body = (string) message.response_body.data; +- if (body == null) { +- throw new DataError.NO_CONNECTION (@"unable to read response"); +- } + try { +- rootnode = Json.from_string (body); +- } catch (Error e) { +- throw new DataError.PARSE_DATA (@"unable to parse JSON response: $(e.message)"); +- } +- var rootarray = rootnode.get_array (); ++ var response = _session.send (message); ++ warning (@"response from radio-browser.info: $(message.status_code)"); + +- var stations = jarray_to_stations (rootarray); +- return stations; ++ try { ++ var parser = new Json.Parser(); ++ parser.load_from_stream (response, null); ++ rootnode = parser.get_root(); ++ response.close (); ++ } catch (Error e) { ++ throw new DataError.PARSE_DATA (@"unable to parse JSON response: $(e.message)"); ++ } ++ var rootarray = rootnode.get_array (); ++ ++ var stations = jarray_to_stations (rootarray); ++ return stations; ++ } catch (GLib.Error e) { ++ warning (@"response from radio-browser.info: $(e.message)"); ++ } ++ ++ return new ArrayList<Station>(); + } + + public ArrayList<Station> search (SearchParams params, +@@ -266,20 +282,27 @@ public class Client : Object { + var message = new Soup.Message ("GET", @"$current_server/$resource"); + Json.Node rootnode; + +- var response_code = _session.send_message (message); +- debug (@"response from radio-browser.info: $response_code"); +- var body = (string) message.response_body.data; +- + try { +- rootnode = Json.from_string (body); +- } catch (Error e) { +- throw new DataError.PARSE_DATA (@"unable to parse JSON response: $(e.message)"); ++ var ip = _session.send (message); ++ debug (@"response from radio-browser.info: $(message.status_code)"); ++ ++ ++ try { ++ var parser = new Json.Parser(); ++ parser.load_from_stream (ip, null); ++ rootnode = parser.get_root (); ++ } catch (Error e) { ++ throw new DataError.PARSE_DATA (@"unable to parse JSON response: $(e.message)"); ++ } ++ var rootarray = rootnode.get_array (); ++ ++ var tags = jarray_to_tags (rootarray); ++ return tags; ++ } catch(GLib.Error e) { ++ debug("cannot get_tags()"); + } +- var rootarray = rootnode.get_array (); +- +- var tags = jarray_to_tags (rootarray); +- return tags; + ++ return new ArrayList<Tag>(); + } + + } +diff --git a/src/Widgets/HeaderBar.vala b/src/Widgets/HeaderBar.vala +index be2716b..3bd95d4 100644 +--- a/src/Widgets/HeaderBar.vala ++++ b/src/Widgets/HeaderBar.vala +@@ -184,26 +184,32 @@ public class Tuner.HeaderBar : Gtk.HeaderBar { + var session = new Soup.Session (); + var message = new Soup.Message ("GET", url); + +- session.queue_message (message, (sess, mess) => { +- if (mess.status_code != 200) { +- warning (@"Unexpected status code: $(mess.status_code), will not render $(url)"); +- return; ++ session.send_async.begin (message, 0, null, (sess, res) => { ++ try { ++ GLib.InputStream resp = session.send_async.end (res); ++ ++ if (message.status_code != 200) { ++ warning (@"Unexpected status code: $(message.status_code), will not render $(url)"); ++ return; ++ } ++ ++ // var data_stream = new MemoryInputStream.from_data (mess.response_body.data); ++ Gdk.Pixbuf pxbuf; ++ ++ try { ++ pxbuf = new Gdk.Pixbuf.from_stream_at_scale (resp, 48, 48, true, null); ++ favicon.set_from_pixbuf (pxbuf); ++ favicon.set_size_request (48, 48); ++ } catch (Error e) { ++ warning ("Couldn't render favicon: %s (%s)", ++ url ?? "unknown url", ++ e.message); ++ } ++ ++ resp.close (); ++ } catch (GLib.Error e) { ++ warning("load_favicon failed: $(e.message)"); + } +- +- var data_stream = new MemoryInputStream.from_data (mess.response_body.data); +- Gdk.Pixbuf pxbuf; +- +- try { +- pxbuf = new Gdk.Pixbuf.from_stream_at_scale (data_stream, 48, 48, true, null); +- } catch (Error e) { +- warning ("Couldn't render favicon: %s (%s)", +- url ?? "unknown url", +- e.message); +- return; +- } +- +- favicon.set_from_pixbuf (pxbuf); +- favicon.set_size_request (48, 48); + }); + } + +diff --git a/src/Widgets/StationBox.vala b/src/Widgets/StationBox.vala +index b76a105..a21bed4 100644 +--- a/src/Widgets/StationBox.vala ++++ b/src/Widgets/StationBox.vala +@@ -94,35 +94,41 @@ public class Tuner.StationBox : Tuner.WelcomeButton { + var session = new Soup.Session (); + var message = new Soup.Message ("GET", station.favicon_url); + +- session.queue_message (message, (sess, mess) => { +- if (mess.status_code != 200) { ++ session.send_async.begin (message, 0, null, (sess, res) => { ++ try { ++ GLib.InputStream data_stream = session.send_async.end (res); ++ ++ //set_favicon_from_stream (data_stream); ++ ++ var file = File.new_for_path (favicon_cache_file); ++ try { ++ var stream = file.create_readwrite (FileCreateFlags.PRIVATE); ++ stream.output_stream.splice (data_stream, 0); ++ stream.close (); ++ } catch (Error e) { ++ // File already created by another stationbox ++ // TODO: possible race condition ++ // TODO: Create stationboxes as singletons? ++ } ++ ++ try { ++ var favicon_stream = file.read (); ++ if (!set_favicon_from_stream (favicon_stream)) { ++ set_default_favicon (); ++ }; ++ } catch (Error e) { ++ warning (@"Error while reading icon file stream: $(e.message)"); ++ } ++ } catch (GLib.Error e) { ++ critical (@"unable to load favicon: $(e.message)"); ++ return; ++ } ++ ++ if (message.status_code != 200) { + //debug (@"Unexpected status code: $(mess.status_code), will not render $(station.favicon_url)"); + set_default_favicon (); + return; + } +- +- var data_stream = new MemoryInputStream.from_data (mess.response_body.data); +- //set_favicon_from_stream (data_stream); +- +- var file = File.new_for_path (favicon_cache_file); +- try { +- var stream = file.create_readwrite (FileCreateFlags.PRIVATE); +- stream.output_stream.splice (data_stream, 0); +- stream.close (); +- } catch (Error e) { +- // File already created by another stationbox +- // TODO: possible race condition +- // TODO: Create stationboxes as singletons? +- } +- +- try { +- var favicon_stream = file.read (); +- if (!set_favicon_from_stream (favicon_stream)) { +- set_default_favicon (); +- }; +- } catch (Error e) { +- warning (@"Error while reading icon file stream: $(e.message)"); +- } + }); + + } else { diff --git a/audio/tuner/tuner.SlackBuild b/audio/tuner/tuner.SlackBuild index 235bfc125236..17e44472babd 100644 --- a/audio/tuner/tuner.SlackBuild +++ b/audio/tuner/tuner.SlackBuild @@ -2,7 +2,7 @@ # Slackware build script for tuner -# Copyright 2023 Johannes Schoepfer, Germany +# Copyright 2023-2024 Johannes Schoepfer, Germany # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -25,7 +25,7 @@ cd $(dirname $0) ; CWD=$(pwd) PRGNAM=tuner -VERSION=${VERSION:-1.5.1} +VERSION=${VERSION:-1.5.2} BUILD=${BUILD:-1} TAG=${TAG:-_SBo} PKGTYPE=${PKGTYPE:-tgz} @@ -89,6 +89,10 @@ for src_nam in appdata.xml.in desktop.in gresource.xml gschema.xml; do mv data/$GITHUB_NAME.$PRGNAM.$src_nam data/$PRGNAM.$src_nam done +# don't use libsoup-3.0 for now, as it crashes when choosung a radio station +patch -p1 -R < $CWD/649732e05a.patch || true +sed -i "s/libsoup-3.0/libsoup-2.4/g" meson.build + mkdir build cd build CFLAGS="$SLKCFLAGS" \ diff --git a/audio/tuner/tuner.info b/audio/tuner/tuner.info index b1a81c33daba..7186e93bf08d 100644 --- a/audio/tuner/tuner.info +++ b/audio/tuner/tuner.info @@ -1,10 +1,10 @@ PRGNAM="tuner" -VERSION="1.5.1" +VERSION="1.5.2" HOMEPAGE="https://codeberg.org/tuner/tuner" -DOWNLOAD="https://github.com/louis77/tuner/archive/1.5.1/tuner-1.5.1.tar.gz" -MD5SUM="ee07ecb7d309e5c963dd550b593aa1ba" +DOWNLOAD="https://github.com/louis77/tuner/archive/1.5.2/tuner-1.5.2.tar.gz" +MD5SUM="2ce3e051256e63329628929113dca887" DOWNLOAD_x86_64="" MD5SUM_x86_64="" -REQUIRES="granite geoclue2 geocode-glib" +REQUIRES="granite" MAINTAINER="Johannes Schoepfer" EMAIL="slackbuilds@schoepfer.info" |