From 9f7cc319bfdac29b0f9feea053f29018a2022ff9 Mon Sep 17 00:00:00 2001 From: Henry Date: Fri, 17 Jul 2009 13:46:54 -0400 Subject: [PATCH] Updated the ZAudioLibrary class, insert of facade object, to acess the lightmediascanner's database --- .../src/plugins/audio_library/library.py | 98 ++++++++++++++------ 1 file changed, 72 insertions(+), 26 deletions(-) mode change 100644 => 100755 zukebox_server/src/plugins/audio_library/library.py diff --git a/zukebox_server/src/plugins/audio_library/library.py b/zukebox_server/src/plugins/audio_library/library.py old mode 100644 new mode 100755 index ee1f0bb..9f85861 --- a/zukebox_server/src/plugins/audio_library/library.py +++ b/zukebox_server/src/plugins/audio_library/library.py @@ -1,76 +1,122 @@ import os.path -from lightmediascanner import LightMediaScanner from brisa.core.plugin import PluginInterface from brisa.core.config import manager as mgr from brisa.core import webserver +from lightmediascanner import LightMediaScanner +from zukebox_server.src.plugins.audio_library.zfacade import ZFacade + plugin_section = "zukebox_server_plugin-audio-library" + +class AudioLibraryResource(webserver.CustomResource): + + def get_render(self, uri, request): + id = uri.split("/")[-1].split("-")[1] + path = self.facade.get_file_path(id) + if path: + return webserver.StaticFile(str(id), path) + else: + return None + class ZAudioLibrary(PluginInterface): """Audio Library enables sharing of locally stored audios """ - name = "audio_library" + name = "zukebox_audio_library" usage = mgr.get_parameter_bool(plugin_section, "enable") db_path = mgr.get_parameter(plugin_section, "database_location") - lms = None - audio_types = ["audio-dummy", "id3", "ogg", "pls", "m3u", "rm", "asf", "flac"] containers = {} containers_cb = {} + lms = None + audio_types = ["audio-dummy", "id3", "ogg", "pls", "m3u", "rm", "asf", "flac"] + facade=ZFacade(self.db_path, webserver) def load(self): self._load_config() - self.do_scan() - self._load_audio() + self._load_scanner() + + if self.usage_audio: + self._load_audio() + + def unload(self): + self.facade.exit() def publish(self, webserver): - webserver.add_resource(self.name, AudioLibraryResource()) + #facade=ZFacade(self.db_path, webserver) + webserver.add_resource(AudioLibraryResource(self.name)) def _load_config(self): - self.audio_folder = mgr.get_parameter(plugin_section, "audio_folder") - self.already_scanned = mgr.get_parameter_bool(plugin_section, ".scanned") + self.usage_audio = mgr.get_parameter_bool(plugin_section, + "enable_audio_listing") + self.audio_folders = mgr.get_parameter_as_list(plugin_section, + "audio_folders", + ":" ) + self.already_scanned = mgr.get_parameter_bool(plugin_section, + ".scanned") + if not self.already_scanned: mgr.set_parameter(plugin_section, ".scanned", True) mgr.save() - def do_scan(self): - self.lms = LightMediaScanner(self.db_path, self.audio_types, "utf8", - 3, 3) - self.lms.check(self.audio_folder) - self.lms.process(self.audio_folder) + def _load_scanner(self): + self.lms = LightMediaScanner(self.db_path) + + for parser in self.audio_types: + self.lms.parser_find_and_add(parser) def _load_audio(self): + if self.already_scanned: + self._check_audio_folder(self.audio_folders) + else: + self._process_audio_folder() + rp = self.plugin_manager.root_plugin audio_container = rp.get_container("Audio") + if not audio_container: audio_container = rp.add_container("Audio", 0) self.all_container = rp.add_container("All Audios", - audio_container.id, self) + audio_container.id, self) self.containers[self.all_container.id] = self.all_container + self.containers_cb[self.all_container.id] = self.facade.get_audio_all() + + playlist_container = rp.get_container('Playlists') - def process_audio_folder(self): + + def _process_audio_folder(self): if self.lms is not None: - self.lms.process(self.audio_folder) + for folder in self.audio_folders: + self.lms.process(folder) else: raise Exception("Could not process audio folder lms is None") - def check_audio_folder(self): + def _check_audio_folder(self): if self.lms is not None: - self.lms.check(self.audio_folder) + for folder in self.audio_folder: + self.lms.check(folder) else: raise Exception("Could not check audio folder lms is None") - def browse(self,id, browse_flag, filter, starting_index, requested_count, sort_criteria): + def browse(self,id, browse_flag, filter, starting_index, requested_count, + sort_criteria): if id in self.containers: if not self.containers[id].items: - # add the items from callback self.containers[id].items = self.containers_cb[id]() return self.containers[id].items + else: + return self._inner_browse(id) -class AudioLibraryResource(webserver.CustomResource): - def get_render(self, uri, request): - id = uri.split("/")[-1].split("-")[1] - #path = - return webserver.Data("", "") + + def _inner_browse(self, id): + namespace, id = id.split(':')[1].split('-') + if not namespace or not id: + return [] + + return {'audio': lambda id: self.facade.get_audio_item(id), + 'genre': lambda id: self.facade.get_audio_genre(id), + 'album': lambda id: self.facade.get_audio_album(id), + 'artist': lambda id: self.facade.get_audio_artist(id) + } -- 1.7.9.5