local: Switch to using updater from extensions

This commit is contained in:
Thomas Adamcik 2013-07-05 12:28:11 +02:00
parent dfcb49a8ba
commit c2cc9f027c
4 changed files with 26 additions and 21 deletions

View File

@ -96,15 +96,7 @@ class BaseLibraryProvider(object):
class BaseLibraryUpdateProvider(object):
"""
:param backend: backend the controller is a part of
:type backend: :class:`mopidy.backends.base.Backend`
"""
pykka_traversable = True
def __init__(self, backend):
self.backend = backend
uri_schemes = []
def load(self):
"""Loads the library and returns all tracks in it.

View File

@ -8,7 +8,7 @@ import pykka
from mopidy.backends import base
from mopidy.utils import encoding, path
from .library import LocalLibraryProvider, LocalLibraryUpdateProvider
from .library import LocalLibraryProvider
from .playlists import LocalPlaylistsProvider
logger = logging.getLogger('mopidy.backends.local')
@ -23,7 +23,6 @@ class LocalBackend(pykka.ThreadingActor, base.Backend):
self.check_dirs_and_files()
self.library = LocalLibraryProvider(backend=self)
self.updater = LocalLibraryUpdateProvider(backend=self)
self.playback = base.BasePlaybackProvider(audio=audio, backend=self)
self.playlists = LocalPlaylistsProvider(backend=self)

View File

@ -135,11 +135,12 @@ class LocalLibraryProvider(base.BaseLibraryProvider):
# TODO: rename and move to tagcache extension.
class LocalLibraryUpdateProvider(base.BaseLibraryProvider):
def __init__(self, *args, **kwargs):
super(LocalLibraryUpdateProvider, self).__init__(*args, **kwargs)
uri_schemes = ['file']
def __init__(self, config):
self._tracks = {}
self._media_dir = self.backend.config['local']['media_dir']
self._tag_cache_file = self.backend.config['local']['tag_cache_file']
self._media_dir = config['local']['media_dir']
self._tag_cache_file = config['local']['tag_cache_file']
def load(self):
tracks = parse_mpd_tag_cache(self._tag_cache_file, self._media_dir)
@ -156,6 +157,8 @@ class LocalLibraryUpdateProvider(base.BaseLibraryProvider):
def commit(self):
directory, basename = os.path.split(self._tag_cache_file)
# TODO: cleanup directory/basename.* files.
tmp = tempfile.NamedTemporaryFile(
prefix=basename + '.', dir=directory, delete=False)

View File

@ -45,9 +45,9 @@ def main():
log.setup_root_logger()
log.setup_console_logging(logging_config, args.verbosity_level)
extensions = dict((e.ext_name, e) for e in ext.load_extensions())
extensions = ext.load_extensions()
config, errors = config_lib.load(
config_files, extensions.values(), config_overrides)
config_files, extensions, config_overrides)
log.setup_log_levels(config)
if not config['local']['media_dir']:
@ -56,10 +56,21 @@ def main():
# TODO: missing config error checking and other default setup code.
audio = dummy_audio.DummyAudio()
local_backend_classes = extensions['local'].get_backend_classes()
local_backend = local_backend_classes[0](config, audio)
local_updater = local_backend.updater
updaters = {}
for e in extensions:
for updater_class in e.get_library_updaters():
if updater_class and 'file' in updater_class.uri_schemes:
updaters[e.ext_name] = updater_class
if not updaters:
logging.error('No usable updaters found.')
return
elif len(updaters) > 1:
names = ', '.join(updaters.keys())
logging.error('More than one updater found. Provided by: %s', names)
return
local_updater = updaters.values()[0](config) # TODO: switch to actor?
media_dir = config['local']['media_dir']