Skip to content
Snippets Groups Projects
Commit 2c3388b3 authored by Xavier Claessens's avatar Xavier Claessens Committed by Sjoerd Simons
Browse files

tracker: factor out a mixin to browse a grilo source

Reviewers: smcv, pwith

Differential Revision: https://phabricator.apertis.org/D544
parent c5147ece
No related branches found
No related tags found
No related merge requests found
# -*- coding: utf-8 -*-
# Copyright © 2015 Collabora Ltd.
#
# SPDX-License-Identifier: MPL-2.0
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
from gi.repository import Grl
from gi.repository import GrlPls
class GriloBrowserMixin:
def browse(self, source, prefix, pls=None):
self.source = source
self.prefix = 'file://%s/' % prefix
self.medias = {}
ops = self.source.supported_operations()
self.assertTrue((ops & Grl.SupportedOps.BROWSE) != 0)
self.__browse_recurse(None, pls)
return self.medias
def __browse_recurse(self, media, pls=None):
caps = self.source.get_caps(Grl.SupportedOps.BROWSE)
options = Grl.OperationOptions.new(caps)
options.set_resolution_flags(Grl.ResolutionFlags.IDLE_RELAY)
keys = [Grl.METADATA_KEY_TITLE,
Grl.METADATA_KEY_ALBUM,
Grl.METADATA_KEY_ARTIST,
Grl.METADATA_KEY_THUMBNAIL,
Grl.METADATA_KEY_URL,
Grl.METADATA_KEY_CHILDCOUNT]
if pls is not None:
medias = GrlPls.browse_sync(self.source, pls, keys, options, None)
else:
medias = self.source.browse_sync(media, keys, options)
for media in medias:
if isinstance(media, Grl.MediaBox):
self.__browse_recurse(media)
continue
url = media.get_url()
if url.startswith(self.prefix):
suffix = url[len(self.prefix):]
print("GriloBrowserMixin: add media", suffix)
self.medias[suffix] = media
......@@ -21,14 +21,16 @@ from gi.repository import Grl
sys.path.insert(0, os.path.join(os.path.dirname(__file__),
os.pardir, os.pardir))
from apertis_tests_lib.tracker import TrackerIndexerMixin
from apertis_tests_lib.grilo import GriloBrowserMixin
from apertis_tests_lib import ApertisTest
from apertis_tests_lib import LONG_JPEG_NAME
class TrackerTest(ApertisTest, TrackerIndexerMixin):
class TrackerTest(ApertisTest, TrackerIndexerMixin, GriloBrowserMixin):
def __init__(self, *args, **kwargs):
ApertisTest.__init__(self, *args, **kwargs)
TrackerIndexerMixin.__init__(self)
GriloBrowserMixin.__init__(self)
def setUp(self):
self.loop = GLib.MainLoop.new(None, False)
......@@ -162,51 +164,35 @@ class TrackerTest(ApertisTest, TrackerIndexerMixin):
self.assert_has_thumbnail('Pictures/collabora-logo-big.png')
self.assert_has_thumbnail('Videos/big_buck_bunny_smaller.ogv')
def grl_browse_source(self, source, media):
ops = source.supported_operations()
self.assertTrue((ops & Grl.SupportedOps.BROWSE) != 0)
caps = source.get_caps(Grl.SupportedOps.BROWSE)
options = Grl.OperationOptions.new(caps)
options.set_count(10)
options.set_resolution_flags(Grl.ResolutionFlags.IDLE_RELAY)
keys = [Grl.METADATA_KEY_TITLE,
Grl.METADATA_KEY_ALBUM,
Grl.METADATA_KEY_ARTIST,
Grl.METADATA_KEY_THUMBNAIL,
Grl.METADATA_KEY_URL,
Grl.METADATA_KEY_CHILDCOUNT]
medias = source.browse_sync(media, keys, options)
for media in medias:
if isinstance(media, Grl.MediaBox):
self.grl_browse_source(source, media)
continue
url = media.get_url()
prefix = 'file://' + self.homedir + '/'
if not url.startswith(prefix):
continue
filename = url[len(prefix):]
if filename in ['Music/generic.oga',
'Music/generic.mp3',
'Music/generic.flac',
'Music/generic-no-artwork.mp3']:
self.assertEqual(media.get_title(), 'GNOME Generic Sound')
self.assertEqual(media.get_artist(), 'Conrad Parker')
self.assertEqual(media.get_album(), 'GNOME Audio')
elif filename in ['Music/generic.wav',
'Pictures/' + LONG_JPEG_NAME,
'Pictures/collabora-logo-big.png',
'Videos/big_buck_bunny_smaller.ogv']:
title = filename.split('/')[1]
self.assertEqual(media.get_title(), title)
def grl_assert_common(self, medias, filename):
self.assertTrue(filename in medias)
media = medias[filename]
# 'file:///foo/generic.mp3' -> 'generic.mp3'
url = media.get_url()
title = url[url.rfind('/') + 1:]
self.assertEqual(media.get_title(), title)
def grl_assert_music(self, medias, filename):
self.assertTrue(filename in medias)
media = medias[filename]
self.assertTrue(isinstance(media, Grl.MediaAudio))
self.assertEqual(media.get_title(), 'GNOME Generic Sound')
self.assertEqual(media.get_artist(), 'Conrad Parker')
self.assertEqual(media.get_album(), 'GNOME Audio')
def grl_source_added_cb(self, registry, source):
self.grl_browse_source(source, None)
medias = self.browse(source, self.homedir)
self.grl_assert_music(medias, 'Music/generic.mp3')
self.grl_assert_music(medias, 'Music/generic.flac')
self.grl_assert_music(medias, 'Music/generic-no-artwork.mp3')
self.grl_assert_music(medias, 'Music/generic.oga')
self.grl_assert_common(medias, 'Music/generic.wav')
self.grl_assert_common(medias, 'Pictures/' + LONG_JPEG_NAME)
self.grl_assert_common(medias, 'Pictures/collabora-logo-big.png')
self.grl_assert_common(medias, 'Videos/big_buck_bunny_smaller.ogv')
self.loop.quit()
def tracker_grilo_tests(self):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment