audio: Decode tags to unicode
This commit is contained in:
parent
8b543bad44
commit
df62997186
@ -47,8 +47,10 @@ gstreamer-GstTagList.html
|
||||
value = taglist.get_value_index(tag, i)
|
||||
|
||||
if isinstance(value, Gst.DateTime):
|
||||
result[tag].append(value.to_iso8601_string())
|
||||
if isinstance(value, (compat.string_types, bool, numbers.Number)):
|
||||
result[tag].append(value.to_iso8601_string().decode('utf-8'))
|
||||
elif isinstance(value, bytes):
|
||||
result[tag].append(value.decode('utf-8', 'replace'))
|
||||
elif isinstance(value, (compat.text_type, bool, numbers.Number)):
|
||||
result[tag].append(value)
|
||||
else:
|
||||
logger.log(
|
||||
|
||||
@ -1,12 +1,72 @@
|
||||
# encoding: utf-8
|
||||
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
import datetime
|
||||
import unittest
|
||||
|
||||
import gi
|
||||
gi.require_version('Gst', '1.0')
|
||||
from gi.repository import GObject, Gst
|
||||
|
||||
from mopidy import compat
|
||||
from mopidy.audio import tags
|
||||
from mopidy.models import Album, Artist, Track
|
||||
|
||||
|
||||
class TestConvertTaglist(object):
|
||||
|
||||
def make_taglist(self, tag, values):
|
||||
taglist = Gst.TagList.new_empty()
|
||||
|
||||
for value in values:
|
||||
if isinstance(value, Gst.DateTime):
|
||||
taglist.add_value(Gst.TagMergeMode.APPEND, tag, value)
|
||||
continue
|
||||
|
||||
gobject_value = GObject.Value()
|
||||
if isinstance(value, bytes):
|
||||
gobject_value.init(GObject.TYPE_STRING)
|
||||
gobject_value.set_string(value)
|
||||
elif isinstance(value, int):
|
||||
gobject_value.init(GObject.TYPE_UINT)
|
||||
gobject_value.set_uint(value)
|
||||
gobject_value.init(GObject.TYPE_VALUE)
|
||||
gobject_value.set_value(value)
|
||||
else:
|
||||
raise TypeError
|
||||
taglist.add_value(Gst.TagMergeMode.APPEND, tag, gobject_value)
|
||||
|
||||
return taglist
|
||||
|
||||
def test_date_time_tag(self):
|
||||
taglist = self.make_taglist(Gst.TAG_DATE_TIME, [
|
||||
Gst.DateTime.new_from_iso8601_string(b'2014-01-07')
|
||||
])
|
||||
|
||||
result = tags.convert_taglist(taglist)
|
||||
|
||||
assert isinstance(result[Gst.TAG_DATE_TIME][0], compat.text_type)
|
||||
assert result[Gst.TAG_DATE_TIME][0] == '2014-01-07'
|
||||
|
||||
def test_string_tag(self):
|
||||
taglist = self.make_taglist(Gst.TAG_ARTIST, [b'ABBA', b'ACDC'])
|
||||
|
||||
result = tags.convert_taglist(taglist)
|
||||
|
||||
assert isinstance(result[Gst.TAG_ARTIST][0], compat.text_type)
|
||||
assert result[Gst.TAG_ARTIST][0] == 'ABBA'
|
||||
assert isinstance(result[Gst.TAG_ARTIST][1], compat.text_type)
|
||||
assert result[Gst.TAG_ARTIST][1] == 'ACDC'
|
||||
|
||||
def test_integer_tag(self):
|
||||
taglist = self.make_taglist(Gst.TAG_BITRATE, [17])
|
||||
|
||||
result = tags.convert_taglist(taglist)
|
||||
|
||||
assert result[Gst.TAG_BITRATE][0] == 17
|
||||
|
||||
|
||||
# TODO: keep ids without name?
|
||||
# TODO: current test is trying to test everything at once with a complete tags
|
||||
# set, instead we might want to try with a minimal one making testing easier.
|
||||
|
||||
Loading…
Reference in New Issue
Block a user