1 |
commit: a4bd9f0033575b1314cce0576a639be4a17eb870 |
2 |
Author: Louis Sautier <sbraz <AT> gentoo <DOT> org> |
3 |
AuthorDate: Sun May 24 15:08:35 2020 +0000 |
4 |
Commit: Louis Sautier <sbraz <AT> gentoo <DOT> org> |
5 |
CommitDate: Sun May 24 15:44:24 2020 +0000 |
6 |
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=a4bd9f00 |
7 |
|
8 |
media-video/gaupol: mention required GST plugins in postinst |
9 |
|
10 |
Also backport a patch to fix audio tracks order. |
11 |
|
12 |
Closes: https://bugs.gentoo.org/638052 |
13 |
Package-Manager: Portage-2.3.99, Repoman-2.3.22 |
14 |
Signed-off-by: Louis Sautier <sbraz <AT> gentoo.org> |
15 |
|
16 |
.../files/gaupol-1.8-fix-audio-tracks-order.patch | 174 +++++++++++++++++++++ |
17 |
.../{gaupol-1.8.ebuild => gaupol-1.8-r1.ebuild} | 6 +- |
18 |
2 files changed, 179 insertions(+), 1 deletion(-) |
19 |
|
20 |
diff --git a/media-video/gaupol/files/gaupol-1.8-fix-audio-tracks-order.patch b/media-video/gaupol/files/gaupol-1.8-fix-audio-tracks-order.patch |
21 |
new file mode 100644 |
22 |
index 00000000000..3f554c4ef33 |
23 |
--- /dev/null |
24 |
+++ b/media-video/gaupol/files/gaupol-1.8-fix-audio-tracks-order.patch |
25 |
@@ -0,0 +1,174 @@ |
26 |
+From e26cfcfe002c87a39eac63bbaa5ad0d4d69c95a4 Mon Sep 17 00:00:00 2001 |
27 |
+From: Quentin Gliosca <quentin.gliosca@×××××.com> |
28 |
+Date: Tue, 12 May 2020 16:48:31 +0200 |
29 |
+Subject: [PATCH 1/3] Fix the order of languages in audio track selection |
30 |
+ |
31 |
+Fix #129 |
32 |
+--- |
33 |
+ gaupol/player.py | 7 ++++++- |
34 |
+ 1 file changed, 6 insertions(+), 1 deletion(-) |
35 |
+ |
36 |
+diff --git a/gaupol/player.py b/gaupol/player.py |
37 |
+index 836abea2..c266e0b9 100644 |
38 |
+--- a/gaupol/player.py |
39 |
++++ b/gaupol/player.py |
40 |
+@@ -118,7 +118,8 @@ def _ensure_default_segment(self): |
41 |
+ |
42 |
+ def get_audio_languages(self): |
43 |
+ """Return a sequence of audio languages or ``None``.""" |
44 |
+- return tuple(x.get_language() for x in self._info.get_audio_streams()) |
45 |
++ return tuple(self._playbin.emit("get-audio-tags", i).get_string("language-code")[1] |
46 |
++ for i in range(self._playbin.props.n_audio)) |
47 |
+ |
48 |
+ def get_duration(self, mode=None): |
49 |
+ """Return duration of video stream or ``None``.""" |
50 |
+@@ -356,6 +357,10 @@ def set_uri(self, uri): |
51 |
+ dialog.add_button(_("_OK"), Gtk.ResponseType.OK) |
52 |
+ dialog.set_default_response(Gtk.ResponseType.OK) |
53 |
+ gaupol.util.flash_dialog(dialog) |
54 |
++ else: |
55 |
++ # Make stream tags available from _playbin |
56 |
++ self._playbin.set_state(Gst.State.PAUSED) |
57 |
++ self._playbin.get_state(Gst.CLOCK_TIME_NONE) |
58 |
+ |
59 |
+ def stop(self): |
60 |
+ """Stop.""" |
61 |
+ |
62 |
+From 9ace4fefe5d246c5588538a715a185c796e218ef Mon Sep 17 00:00:00 2001 |
63 |
+From: Quentin Gliosca <quentin.gliosca@×××××.com> |
64 |
+Date: Tue, 12 May 2020 17:27:35 +0200 |
65 |
+Subject: [PATCH 2/3] Improve names of audio tracks in menu |
66 |
+ |
67 |
+--- |
68 |
+ gaupol/agents/video.py | 18 ++++++++++++++---- |
69 |
+ gaupol/player.py | 20 ++++++++++++++++---- |
70 |
+ 2 files changed, 30 insertions(+), 8 deletions(-) |
71 |
+ |
72 |
+diff --git a/gaupol/agents/video.py b/gaupol/agents/video.py |
73 |
+index d434255a..0f6b935c 100644 |
74 |
+--- a/gaupol/agents/video.py |
75 |
++++ b/gaupol/agents/video.py |
76 |
+@@ -27,7 +27,11 @@ |
77 |
+ from gi.repository import Gtk |
78 |
+ |
79 |
+ with aeidon.util.silent(Exception): |
80 |
++ from gi import require_version |
81 |
++ require_version('GstTag', '1.0') |
82 |
+ from gi.repository import Gst |
83 |
++ from gi.repository import GstTag |
84 |
++ |
85 |
+ |
86 |
+ |
87 |
+ class VideoAgent(aeidon.Delegate): |
88 |
+@@ -348,11 +352,17 @@ def _update_languages_menu(self): |
89 |
+ """Update the audio language selection menu.""" |
90 |
+ menu = self.get_menubar_section("audio-languages-placeholder") |
91 |
+ menu.remove_all() |
92 |
+- languages = self.player.get_audio_languages() |
93 |
+- for i, language in enumerate(languages): |
94 |
+- language = language or _("Undefined") |
95 |
++ tracks = self.player.get_audio_infos() |
96 |
++ for i, track in enumerate(tracks): |
97 |
++ title = track.title or "{} {}".format(_("Track"), i + 1) |
98 |
++ lang = None |
99 |
++ if track.language_code is not None: |
100 |
++ lang = GstTag.tag_get_language_name(track.language_code) |
101 |
++ if lang is None: |
102 |
++ lang = track.language_name |
103 |
++ name = title if lang is None else "{} - [{}]".format(title, lang.title()) |
104 |
+ action = "win.set-audio-language::{:d}".format(i) |
105 |
+- menu.append(language, action) |
106 |
++ menu.append(name, action) |
107 |
+ if i == self.player.audio_track: |
108 |
+ action = self.get_action("set-audio-language") |
109 |
+ action.set_state(str(i)) |
110 |
+diff --git a/gaupol/player.py b/gaupol/player.py |
111 |
+index c266e0b9..ee1e96dc 100644 |
112 |
+--- a/gaupol/player.py |
113 |
++++ b/gaupol/player.py |
114 |
+@@ -21,6 +21,7 @@ |
115 |
+ import gaupol |
116 |
+ import time |
117 |
+ |
118 |
++from collections import namedtuple |
119 |
+ from aeidon.i18n import _ |
120 |
+ from gi.repository import GLib |
121 |
+ from gi.repository import Gtk |
122 |
+@@ -56,6 +57,8 @@ class VideoPlayer(aeidon.Observable): |
123 |
+ |
124 |
+ signals = ("state-changed",) |
125 |
+ |
126 |
++ TrackInfo = namedtuple("TrackInfo", ["title", "language_code", "language_name"]) |
127 |
++ |
128 |
+ def __init__(self): |
129 |
+ """Initialize a :class:`VideoPlayer` instance.""" |
130 |
+ aeidon.Observable.__init__(self) |
131 |
+@@ -116,10 +119,19 @@ def _ensure_default_segment(self): |
132 |
+ self._playbin.seek_simple(Gst.Format.TIME, seek_flags, pos) |
133 |
+ self._in_default_segment = True |
134 |
+ |
135 |
+- def get_audio_languages(self): |
136 |
+- """Return a sequence of audio languages or ``None``.""" |
137 |
+- return tuple(self._playbin.emit("get-audio-tags", i).get_string("language-code")[1] |
138 |
+- for i in range(self._playbin.props.n_audio)) |
139 |
++ def get_audio_infos(self): |
140 |
++ """Return a sequence of audio track infos.""" |
141 |
++ return tuple( |
142 |
++ self._make_track_infos(self._playbin.emit("get-audio-tags", i)) |
143 |
++ for i in range(self._playbin.props.n_audio) |
144 |
++ ) |
145 |
++ |
146 |
++ def _make_track_infos(self, tags): |
147 |
++ return self.TrackInfo( |
148 |
++ tags.get_string("title")[1], |
149 |
++ tags.get_string("language-code")[1], |
150 |
++ tags.get_string("language-name")[1] |
151 |
++ ) |
152 |
+ |
153 |
+ def get_duration(self, mode=None): |
154 |
+ """Return duration of video stream or ``None``.""" |
155 |
+ |
156 |
+From f50b4e54dc9aa84fc1b3eb403d680b8a0be77dc3 Mon Sep 17 00:00:00 2001 |
157 |
+From: Quentin Gliosca <quentin.gliosca@×××××.com> |
158 |
+Date: Wed, 13 May 2020 07:29:27 +0200 |
159 |
+Subject: [PATCH 3/3] Cosmetic changes |
160 |
+ |
161 |
+--- |
162 |
+ gaupol/__init__.py | 1 + |
163 |
+ gaupol/agents/video.py | 4 +--- |
164 |
+ 2 files changed, 2 insertions(+), 3 deletions(-) |
165 |
+ |
166 |
+diff --git a/gaupol/__init__.py b/gaupol/__init__.py |
167 |
+index f7a9663d..fc02287b 100644 |
168 |
+--- a/gaupol/__init__.py |
169 |
++++ b/gaupol/__init__.py |
170 |
+@@ -44,6 +44,7 @@ |
171 |
+ "Gst": "1.0", |
172 |
+ "GstPbutils": "1.0", |
173 |
+ "GstVideo": "1.0", |
174 |
++ "GstTag": "1.0", |
175 |
+ }.items(): |
176 |
+ with aeidon.util.silent(Exception): |
177 |
+ gi.require_version(module, version) |
178 |
+diff --git a/gaupol/agents/video.py b/gaupol/agents/video.py |
179 |
+index 0f6b935c..3c9e3113 100644 |
180 |
+--- a/gaupol/agents/video.py |
181 |
++++ b/gaupol/agents/video.py |
182 |
+@@ -27,8 +27,6 @@ |
183 |
+ from gi.repository import Gtk |
184 |
+ |
185 |
+ with aeidon.util.silent(Exception): |
186 |
+- from gi import require_version |
187 |
+- require_version('GstTag', '1.0') |
188 |
+ from gi.repository import Gst |
189 |
+ from gi.repository import GstTag |
190 |
+ |
191 |
+@@ -354,7 +352,7 @@ def _update_languages_menu(self): |
192 |
+ menu.remove_all() |
193 |
+ tracks = self.player.get_audio_infos() |
194 |
+ for i, track in enumerate(tracks): |
195 |
+- title = track.title or "{} {}".format(_("Track"), i + 1) |
196 |
++ title = track.title or _("Track {:d}").format(i + 1) |
197 |
+ lang = None |
198 |
+ if track.language_code is not None: |
199 |
+ lang = GstTag.tag_get_language_name(track.language_code) |
200 |
|
201 |
diff --git a/media-video/gaupol/gaupol-1.8.ebuild b/media-video/gaupol/gaupol-1.8-r1.ebuild |
202 |
similarity index 87% |
203 |
rename from media-video/gaupol/gaupol-1.8.ebuild |
204 |
rename to media-video/gaupol/gaupol-1.8-r1.ebuild |
205 |
index 9fa5bf5a0ca..33dec788257 100644 |
206 |
--- a/media-video/gaupol/gaupol-1.8.ebuild |
207 |
+++ b/media-video/gaupol/gaupol-1.8-r1.ebuild |
208 |
@@ -37,6 +37,8 @@ DEPEND=" |
209 |
|
210 |
DOCS=( AUTHORS.md NEWS.md TODO.md README.md README.aeidon.md ) |
211 |
|
212 |
+PATCHES=( "${FILESDIR}/${P}-fix-audio-tracks-order.patch" ) |
213 |
+ |
214 |
python_test() { |
215 |
virtx pytest -vv |
216 |
} |
217 |
@@ -45,7 +47,9 @@ pkg_postinst() { |
218 |
xdg_desktop_database_update |
219 |
xdg_icon_cache_update |
220 |
if [[ -z ${REPLACING_VERSIONS} ]]; then |
221 |
- elog "Previewing support requires MPV, MPlayer or VLC." |
222 |
+ elog "The integrated video player requires media-plugins/gst-plugins-gtk." |
223 |
+ elog "" |
224 |
+ elog "External video previewing support requires MPV, MPlayer or VLC." |
225 |
if use spell; then |
226 |
elog "" |
227 |
elog "Spell-checking requires a dictionary, any of app-dicts/myspell-*" |