Console version can now play songs
[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
13 class Refresher(object):
14     def __init__(self):
15         self.done = False
16         self.last_percent = 0
17         print "Preparing local database..."
18     def complete(self):
19         self.done = True
20     def progress(self, percent):
21         if percent - self.last_percent >= 5:
22             print "\r%d%%" % (percent),
23             self.last_percent = percent
24
25     def run(self):
26         refresh_dump(self.complete, self.progress, force=False)
27         while not self.done:
28             time.sleep(1)
29
30
31 def pprint(x):
32     import json
33     print json.dumps(x, sort_keys=True, indent=4)
34
35 class Console(object):
36     def run(self):
37         Refresher().run()
38
39         query = sys.argv[1]
40
41         queries = ['today',
42                    'tracks_this_month',
43                    'artist',
44                    'album',
45                    'play_track',
46                    'play_album']
47         if query in queries:
48             getattr(self, "query_"+query)()
49         else:
50             print "Valid queries: " + ", ".join(queries)
51
52     def query_today(self):
53         result = Queries.albums_today()
54         pprint(result)
55
56     def query_tracks_this_month(self):
57         result = Queries.tracks_this_month()
58         pprint(result)
59
60     def query_artist(self):
61         q = sys.argv[2]
62         db = LocalDB()
63         db.connect()
64         for artist in db.search_artists(q):
65             pprint(artist)
66
67     def query_album(self):
68         q = sys.argv[2]
69         db = LocalDB()
70         db.connect()
71         for album in db.search_albums(q):
72             print "%s: %s - %s" % (album['id'], album['artist'], album['name'])
73
74     def query_play_track(self):
75         trackid = int(sys.argv[2])
76         uri = Query.track_mp3(trackid)
77         items = [uri]
78         playlist = Playlist(items)
79         player = Player()
80         player.play(playlist)
81
82     def query_play_album(self):
83         albumid = int(sys.argv[2])
84         db = LocalDB()
85         db.connect()
86         album = None
87         for a in db.get_albums([albumid]):
88             album = a
89             break
90         if not album:
91             return
92         print "%s - %s" % (album['artist'], album['name'])
93         items = [Query.track_mp3(int(track['id'])) for track in album['tracks']]
94
95         playlist = Playlist(items)
96         player = Player()
97         player.play(playlist)
98
99         while player.playing():
100             time.sleep(1)
101
102 if __name__=="__main__":
103     main()