* [bug#33042] [PATCH] gnu: Add soundconverter.
2018-10-14 20:18 [bug#33042] [PATCH] gnu: Add soundconverter Christopher Baines
@ 2018-10-16 16:43 ` Leo Famulari
2018-10-19 14:05 ` Christopher Baines
2018-10-19 13:43 ` Christopher Baines
1 sibling, 1 reply; 7+ messages in thread
From: Leo Famulari @ 2018-10-16 16:43 UTC (permalink / raw)
To: Christopher Baines; +Cc: 33042
[-- Attachment #1: Type: text/plain, Size: 2057 bytes --]
On Sun, Oct 14, 2018 at 09:18:10PM +0100, Christopher Baines wrote:
> * gnu/packages/gnome.scm (soundconverter): New variable.
Thanks, it's nice to have graphical programs for this sort of task :)
> + (patches
> + (list
> + (origin
> + (method url-fetch)
> + (uri (string-append
> + "https://salsa.debian.org/multimedia-team/soundconverter"
> + "/raw/master/debian/patches/"
> + "0002-Only-fetch-profiles-if-GConf-is-still-available.patch"))
> + (sha256
> + (base32
> + "00nxpbkz7ihzrbz91ms7bd2mjgyhkbxpaa8zxj4xnkv4pjmg61hh")))))))
I think it's better if we include this file in our source code, since
it's not very big and Debian's code infrastructure URLs seem to change
every few years. Also, the URL is not versioned, so maybe the patch
would change in the future.
> + (add-after 'unpack 'fix-POTFILES.in
> + (lambda _
> + (substitute* "po/POTFILES.in"
> + (("soundconverter/gconfstore\\.py") ""))))
Please add an explanatory comment for this.
> + (add-after 'install 'wrap-rhythmbox
> + (lambda* (#:key inputs outputs #:allow-other-keys)
> + (let ((out (assoc-ref outputs "out"))
> + (python-path (getenv "PYTHONPATH"))
> + (gi-typelib-path (getenv "GI_TYPELIB_PATH"))
> + (gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH")))
> + (wrap-program (string-append out "/bin/soundconverter")
> + `("PYTHONPATH" ":" prefix (,python-path))
> + `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))
> + `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))))
> + #t)))))
If possible, I think it's better to use the python-build-system's wrap
phase for PYTHONPATH. The hplip package has an example.
> + (synopsis "Audio file converter for the GNOME Desktop")
It works in i3, too :)
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 7+ messages in thread
* [bug#33042] [PATCH] gnu: Add soundconverter.
2018-10-14 20:18 [bug#33042] [PATCH] gnu: Add soundconverter Christopher Baines
2018-10-16 16:43 ` Leo Famulari
@ 2018-10-19 13:43 ` Christopher Baines
1 sibling, 0 replies; 7+ messages in thread
From: Christopher Baines @ 2018-10-19 13:43 UTC (permalink / raw)
To: 33042
* gnu/packages/gnome.scm (soundconverter): New variable.
* gnu/packages/patches/soundconverter-remove-gconf-dependency.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.
---
gnu/local.mk | 1 +
gnu/packages/gnome.scm | 65 +++++++++++++++
...undconverter-remove-gconf-dependency.patch | 83 +++++++++++++++++++
3 files changed, 149 insertions(+)
create mode 100644 gnu/packages/patches/soundconverter-remove-gconf-dependency.patch
diff --git a/gnu/local.mk b/gnu/local.mk
index af3773c893..6108ba8b82 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1146,6 +1146,7 @@ dist_patch_DATA = \
%D%/packages/patches/slim-reset.patch \
%D%/packages/patches/slim-login.patch \
%D%/packages/patches/sooperlooper-build-with-wx-30.patch \
+ %D%/packages/patches/soundconverter-remove-gconf-dependency.patch \
%D%/packages/patches/soundtouch-CVE-2018-14044-14045.patch \
%D%/packages/patches/soundtouch-CVE-2018-1000223.patch \
%D%/packages/patches/steghide-fixes.patch \
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index de938e4b14..2b75439a95 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -7220,6 +7220,71 @@ It supports ripping to any audio codec supported by a GStreamer plugin, such as
mp3, Ogg Vorbis and FLAC")
(license license:gpl2+)))
+(define-public soundconverter
+ (package
+ (name "soundconverter")
+ (version "3.0.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "https://launchpad.net/soundconverter/trunk/"
+ version "/+download/"
+ "soundconverter-" version ".tar.xz"))
+
+ (sha256
+ (base32
+ "1wrxf5py54xplrf97qp24pzbis0cvax5c6k0c7vr3z3ry8r7gd7c"))
+ (patches
+ (search-patches
+ "soundconverter-remove-gconf-dependency.patch"))))
+ (build-system glib-or-gtk-build-system)
+ (arguments
+ `(#:imported-modules ((guix build python-build-system)
+ (guix build glib-or-gtk-build-system)
+ ,@%gnu-build-system-modules)
+
+ #:modules ((guix build glib-or-gtk-build-system)
+ (guix build utils)
+ ((guix build gnu-build-system) #:prefix gnu:)
+ ((guix build python-build-system) #:prefix python:))
+
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'fix-POTFILES.in
+ (lambda _
+ (substitute* "po/POTFILES.in"
+ ;; This file doesn't exist, so without removing it, the 'check
+ ;; phase fails for the po directory
+ (("soundconverter/gconfstore\\.py") ""))))
+ (add-after 'install 'wrap-soundconverter-for-python
+ (assoc-ref python:%standard-phases 'wrap))
+ (add-after 'install 'wrap-soundconverter
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "out"))
+ (gi-typelib-path (getenv "GI_TYPELIB_PATH"))
+ (gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH")))
+ (wrap-program (string-append out "/bin/soundconverter")
+ `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))
+ `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))))
+ #t)))))
+ (native-inputs
+ `(("intltool" ,intltool)
+ ("pkg-config" ,pkg-config)
+ ("glib:bin" ,glib "bin")))
+ (inputs
+ `(("gtk+" ,gtk+)
+ ("python" ,python)
+ ("python-pygobject" ,python-pygobject)
+ ("gstreamer" ,gstreamer)
+ ("gst-plugins-base" ,gst-plugins-base)))
+ (home-page "http://soundconverter.org/")
+ (synopsis "Audio file converter for the GNOME Desktop")
+ (description
+ "SoundConverter supports converting between many audio formats including
+Opus, Ogg Vorbis, FLAC and more. It supports parallel conversion, and
+configurable file renaming. ")
+ (license license:gpl3)))
+
(define-public workrave
(let ((commit "v1_10_21"))
(package
diff --git a/gnu/packages/patches/soundconverter-remove-gconf-dependency.patch b/gnu/packages/patches/soundconverter-remove-gconf-dependency.patch
new file mode 100644
index 0000000000..f065b9a3d4
--- /dev/null
+++ b/gnu/packages/patches/soundconverter-remove-gconf-dependency.patch
@@ -0,0 +1,83 @@
+From: Sebastian Ramacher <sebastian@ramacher.at>
+Date: Fri, 6 Apr 2018 13:25:35 +0200
+Subject: Only fetch profiles if GConf is still available
+
+---
+ bin/soundconverter.py | 1 -
+ soundconverter/gstreamer.py | 44 ++++++++++++++++++++++++--------------------
+ 2 files changed, 24 insertions(+), 21 deletions(-)
+
+diff --git a/bin/soundconverter.py b/bin/soundconverter.py
+index 39055ce..5198443 100644
+--- a/bin/soundconverter.py
++++ b/bin/soundconverter.py
+@@ -66,7 +66,6 @@ def _check_libs():
+ import gi
+ gi.require_version('Gst', '1.0')
+ gi.require_version('Gtk', '3.0')
+- gi.require_version('GConf', '2.0')
+ from gi.repository import GObject
+ # force GIL creation - see https://bugzilla.gnome.org/show_bug.cgi?id=710447
+ import threading
+diff --git a/soundconverter/gstreamer.py b/soundconverter/gstreamer.py
+index 23aaa9b..211b052 100644
+--- a/soundconverter/gstreamer.py
++++ b/soundconverter/gstreamer.py
+@@ -25,7 +25,7 @@ from urllib.parse import urlparse
+ from gettext import gettext as _
+
+ import gi
+-from gi.repository import Gst, Gtk, GObject, GConf, Gio
++from gi.repository import Gst, Gtk, GObject, Gio
+
+ from soundconverter.fileoperations import vfs_encode_filename, file_encode_filename
+ from soundconverter.fileoperations import unquote_filename, vfs_makedirs, vfs_unlink
+@@ -66,25 +66,29 @@ _GCONF_PROFILE_LIST_PATH = "/system/gstreamer/1.0/audio/global/profile_list"
+ audio_profiles_list = []
+ audio_profiles_dict = {}
+
+-_GCONF = GConf.Client.get_default()
+-profiles = _GCONF.all_dirs(_GCONF_PROFILE_LIST_PATH)
+-for name in profiles:
+- if _GCONF.get_bool(_GCONF_PROFILE_PATH + name + "/active"):
+- # get profile
+- description = _GCONF.get_string(_GCONF_PROFILE_PATH + name + "/name")
+- extension = _GCONF.get_string(_GCONF_PROFILE_PATH + name + "/extension")
+- pipeline = _GCONF.get_string(_GCONF_PROFILE_PATH + name + "/pipeline")
+- # check profile validity
+- if not extension or not pipeline:
+- continue
+- if not description:
+- description = extension
+- if description in audio_profiles_dict:
+- continue
+- # store
+- profile = description, extension, pipeline
+- audio_profiles_list.append(profile)
+- audio_profiles_dict[description] = profile
++try:
++ from gi.repository import GConf
++ _GCONF = GConf.Client.get_default()
++ profiles = _GCONF.all_dirs(_GCONF_PROFILE_LIST_PATH)
++ for name in profiles:
++ if _GCONF.get_bool(_GCONF_PROFILE_PATH + name + "/active"):
++ # get profile
++ description = _GCONF.get_string(_GCONF_PROFILE_PATH + name + "/name")
++ extension = _GCONF.get_string(_GCONF_PROFILE_PATH + name + "/extension")
++ pipeline = _GCONF.get_string(_GCONF_PROFILE_PATH + name + "/pipeline")
++ # check profile validity
++ if not extension or not pipeline:
++ continue
++ if not description:
++ description = extension
++ if description in audio_profiles_dict:
++ continue
++ # store
++ profile = description, extension, pipeline
++ audio_profiles_list.append(profile)
++ audio_profiles_dict[description] = profile
++except ImportError:
++ pass
+
+ required_elements = ('decodebin', 'fakesink', 'audioconvert', 'typefind', 'audiorate')
+ for element in required_elements:
--
2.19.1
^ permalink raw reply related [flat|nested] 7+ messages in thread