8d1034b81590c5768c14d28f1a3ef461eeb32a95
[zukebox] / zukebox_server / src / bin / zukebox-server
1 #!/usr/bin/env python
2
3 import os
4 import sys
5 import socket
6 from brisa.core import config
7 from brisa.core import log
8 from brisa.core.system import daemonize
9 from brisa.utils import options
10
11 import zukebox_server
12 from zukebox_server.system import linux
13 from zukebox_server.server.zukebox_server import ZukeBoxServer
14
15 pjoin = os.path.join
16 pexists = os.path.exists
17
18 home_path = os.path.expanduser("~")
19 zb_base_path = pjoin(home_path, ".zukebox")
20 zb_database_path = pjoin(zb_base_path, "audio_library.db")
21 zb_module_path = zukebox_server.__path__[0]
22 zb_plugins_path = pjoin(zb_module_path, "plugins")
23
24 plugin_section = "zukebox_server_plugin-audio-library"
25
26 def get_zbus_service():
27     import dbus
28     bus = dbus.SessionBus()
29     bus_obj = bus.get_object("org.freedesktop.DBus",
30             "/org/freedesktop/DBus", introspect=False)
31     bus_iface = dbus.Interface(bus_obj, "org.freedesktop.DBus")
32     try:
33         reqname = bus_iface.RequestName("br.org.zagaia.ZukeBox",
34                                             dbus.UInt32(0))
35     except Exception, e:
36         log.error("error [%s] while getting the D-BUS service name for ZukeBox"\
37                 "exiting ...", e, exc_info=True)
38         sys.exit(1)
39     else:
40         if not reqname:
41             log.error("Unknow error while getting D-BUS service name")
42             sys.exit(1)
43 def config_dot_zb():
44     version = pjoin(zb_base_path, "version")
45     version_str = "0.1"
46
47     def init_dot_zb():
48         os.makedirs(zb_base_path, 0700)
49         open(version, "w").write(version_str)
50
51     if not pexists(zb_base_path):
52         init_dot_zb()
53         return
54
55 def setup_zukebox():
56     # ZBox Server
57     config.manager.set_parameter("zukebox_server", "name", "ZukeBox Server")
58     config.manager.set_parameter("zukebox_server", "owner", "zukebox-server")
59     config.manager.set_parameter("zukebox_server", "home", zb_module_path)
60     config.manager.set_parameter("zukebox_server", "plugins", zb_plugins_path)
61
62     # ZBox Plugins
63     config.manager.set_parameter(plugin_section, "owner",
64             "zukebox_server_plugin-audio_library")
65     config.manager.set_parameter(plugin_section, "database_location",
66             zb_database_path)
67     config.manager.set_parameter(plugin_section, "enable", True)
68
69     sp = linux.SystemProperties()
70     audio_folder = sp.DEFAULT_DIR_AUDIO
71
72     config.manager.set_parameter(plugin_section, "audio_folder", audio_folder)
73     config.manager.save()
74
75
76 def init_server():
77     log.info("ZukeBox Server starting....")
78     listen_url, daemon = options.parse_args("ZukeBox Server")
79     if daemon:
80         daemonize()
81     server_name = config.get_parameter("zukebox_server", "name")
82     zb_server = ZukeBoxServer(server_name, listen_url)
83     zb_server.start()
84
85 def main():
86     config_dot_zb()
87     setup_zukebox()
88     init_server()
89
90 if __name__ == '__main__':
91     main()