3 from lightmediascanner import LightMediaScanner
5 from brisa.core.plugin import PluginInterface
6 from brisa.core.config import manager as mgr
7 from brisa.core import webserver
9 plugin_section = "zukebox_server_plugin-audio-library"
10 class ZAudioLibrary(PluginInterface):
11 """Audio Library enables sharing of locally stored audios
14 name = "audio_library"
15 usage = mgr.get_parameter_bool(plugin_section, "enable")
16 db_path = mgr.get_parameter(plugin_section, "database_location")
18 audio_types = ["audio-dummy", "id3", "ogg", "pls", "m3u", "rm", "asf", "flac"]
27 def publish(self, webserver):
28 webserver.add_resource(self.name, AudioLibraryResource())
30 def _load_config(self):
31 self.audio_folder = mgr.get_parameter(plugin_section, "audio_folder")
32 self.already_scanned = mgr.get_parameter_bool(plugin_section, ".scanned")
33 if not self.already_scanned:
34 mgr.set_parameter(plugin_section, ".scanned", True)
38 self.lms = LightMediaScanner(self.db_path, self.audio_types, "utf8",
40 self.lms.check(self.audio_folder)
41 self.lms.process(self.audio_folder)
43 def _load_audio(self):
44 rp = self.plugin_manager.root_plugin
45 audio_container = rp.get_container("Audio")
46 if not audio_container:
47 audio_container = rp.add_container("Audio", 0)
49 self.all_container = rp.add_container("All Audios",
50 audio_container.id, self)
51 self.containers[self.all_container.id] = self.all_container
53 def process_audio_folder(self):
54 if self.lms is not None:
55 self.lms.process(self.audio_folder)
57 raise Exception("Could not process audio folder lms is None")
59 def check_audio_folder(self):
60 if self.lms is not None:
61 self.lms.check(self.audio_folder)
63 raise Exception("Could not check audio folder lms is None")
65 def browse(self,id, browse_flag, filter, starting_index, requested_count, sort_criteria):
66 if id in self.containers:
67 if not self.containers[id].items:
68 # add the items from callback
69 self.containers[id].items = self.containers_cb[id]()
70 return self.containers[id].items
72 class AudioLibraryResource(webserver.CustomResource):
73 def get_render(self, uri, request):
74 id = uri.split("/")[-1].split("-")[1]
76 return webserver.Data("", "")