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)
+ }