88622eaa49704b8b6585afaf03239848d45cfbe6
[jamaendo] / jamaui / console.py
1 # console interface to jamaui/jamaendo
2
3 # debugging hack - add . to path
4 import os, sys
5 local_module_dir = os.path.join(os.path.dirname(sys.argv[0]), '..')
6 if os.path.isdir(local_module_dir):
7     sys.path.append(local_module_dir)
8
9 from jamaendo.api import LocalDB, Query, Queries, refresh_dump
10 from jamaui.player import Player, Playlist
11 import time
12 import gobject
13
14 gobject.threads_init()
15
16 class Refresher(object):
17     def __init__(self):
18         self.done = False
19         self.last_percent = 0
20         print "Preparing local database..."
21     def complete(self):
22         self.done = True
23     def progress(self, percent):
24         if percent - self.last_percent >= 5:
25             print "\r%d%%" % (percent),
26             self.last_percent = percent
27
28     def run(self):
29         refresh_dump(self.complete, self.progress, force=False)
30         while not self.done:
31             time.sleep(1)
32
33
34 def pprint(x):
35     import simplejson
36     print simplejson.dumps(x, sort_keys=True, indent=4)
37
38 class Console(object):
39     def run(self):
40         Refresher().run()
41
42         query = sys.argv[1]
43
44         queries = ['today',
45                    'tracks_this_month',
46                    'artist',
47                    'album',
48                    'play_track',
49                    'play_album']
50         if query in queries:
51             getattr(self, "query_"+query)()
52         else:
53             print "Valid queries: " + ", ".join(queries)
54
55     def query_today(self):
56         result = Queries.albums_today()
57         pprint(result)
58
59     def query_tracks_this_month(self):
60         result = Queries.tracks_this_month()
61         pprint(result)
62
63     def query_artist(self):
64         q = sys.argv[2]
65         db = LocalDB()
66         db.connect()
67         for artist in db.search_artists(q):
68             pprint(artist)
69
70     def query_album(self):
71         q = sys.argv[2]
72         db = LocalDB()
73         db.connect()
74         for album in db.search_albums(q):
75             print "%s: %s - %s" % (album['id'], album['artist'], album['name'])
76
77     def query_play_track(self):
78         trackid = int(sys.argv[2])
79         uri = Query.track_mp3(trackid)
80         playlist = Playlist([uri])
81         player = Player()
82         player.play(playlist)
83
84         while player.playing():
85             time.sleep(1)
86
87     def query_play_album(self):
88         albumid = int(sys.argv[2])
89         db = LocalDB()
90         db.connect()
91         album = None
92         for a in db.get_albums([albumid]):
93             album = a
94             break
95         if not album:
96             return
97         print "%s - %s" % (album['artist'], album['name'])
98
99         playlist = Playlist(album['tracks'])
100         player = Player()
101         player.play(playlist)
102
103         while player.playing():
104             try:
105                 time.sleep(1)
106             except KeyboardInterrupt:
107                 player.next()
108
109 if __name__=="__main__":
110     main()