aboutsummaryrefslogtreecommitdiff
path: root/audio/tuner
diff options
context:
space:
mode:
authorJohannes Schoepfer <slackbuilds@schoepfer.info>2024-07-19 23:37:29 +0000
committerWilly Sudiarto Raharjo <willysr@slackbuilds.org>2024-07-20 08:08:41 +0700
commitf4b74b0faba41fbab236b44a49c5e54af6ec43c5 (patch)
tree2f86f94cab71ee4514afd6216a02e60ca07b7746 /audio/tuner
parent207e261230fe11460335ed629d84d616884b22f5 (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.patch295
-rw-r--r--audio/tuner/tuner.SlackBuild8
-rw-r--r--audio/tuner/tuner.info8
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"