diff options
-rw-r--r-- | gnu/local.mk | 1 | ||||
-rw-r--r-- | gnu/packages/gnome.scm | 65 | ||||
-rw-r--r-- | gnu/packages/patches/soundconverter-remove-gconf-dependency.patch | 83 |
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: |