Added the method for browse in containers
[zukebox] / zukebox_server / src / plugins / audio_library / library.py
1
2 import os.path
3 from lightmediascanner import LightMediaScanner
4
5 from brisa.core.plugin import PluginInterface
6 from brisa.core.config import manager as mgr
7 from brisa.core import webserver
8
9 plugin_section = "zukebox_server_plugin-audio-library"
10 class ZAudioLibrary(PluginInterface):
11     """Audio Library enables sharing of locally stored audios
12     
13     """
14     name = "audio_library"
15     usage = mgr.get_parameter_bool(plugin_section, "enable")
16     db_path = mgr.get_parameter(plugin_section, "database_location")
17     lms = None
18     audio_types = ["audio-dummy", "id3", "ogg", "pls", "m3u", "rm", "asf", "flac"]
19     containers = {}
20     containers_cb = {}
21
22     def load(self):
23         self._load_config()
24         self._load_scanner()
25         self._load_audio()
26
27     def publish(self, webserver):
28         webserver.add_resource(self.name, AudioLibraryResource())
29
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)
35             mgr.save()
36
37     def _load_scanner(self):
38         self.lms = LightMediaScanner(self.db_path, self.audio_types, "utf8",
39                 3, 3)
40         self.lms.check(self.audio_folder)
41         self.lms.process(self.audio_folder)
42
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)
48
49         self.all_container = rp.add_container("All Audios",
50                 audio_container.id, self)
51         self.containers[self.all_container.id] = self.all_container
52
53     def process_audio_folder(self):
54         self.lms.process(self.audio_folder)
55
56     def check_audio_folder(self):
57         self.lms.check(self.audio_folder)
58
59     def browse(self,id, browse_flag, filter, starting_index, requested_count, sort_criteria):
60         if id in self.containers:
61             if not self.containers[id].items:
62                 # add the items from callback
63                 self.containers[id].items = self.containers_cb[id]()
64             return self.containers[id].items
65
66 class AudioLibraryResource(webserver.CustomResource):
67     def get_render(self, uri, request):
68         id = uri.split("/")[-1].split("-")[1]
69         #path = 
70         return webserver.Data("", "")