gnu: Add soundconverter.

* 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.
This commit is contained in:
Christopher Baines 2018-10-14 21:17:28 +01:00
parent b5a927b3ba
commit 0d3f170864
No known key found for this signature in database
GPG key ID: 5E28A33B0B84F577
3 changed files with 149 additions and 0 deletions

View file

@ -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 \

View file

@ -7220,6 +7220,71 @@ (define-public sound-juicer
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

View file

@ -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: