aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gnu/local.mk1
-rw-r--r--gnu/packages/gnome.scm65
-rw-r--r--gnu/packages/patches/soundconverter-remove-gconf-dependency.patch83
3 files changed, 149 insertions, 0 deletions
diff --git a/gnu/local.mk b/gnu/local.mk
index 402505e229..71aa115621 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1150,6 +1150,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..7b04716fa2 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 "Convert between audio formats with a graphical interface")
+ (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: