Browse all music utility
[mussorgsky] / src / mussorgsky.py
1 #!/usr/bin/env python2.5
2 import hildon
3 import gtk, gobject
4 from tracker_backend import TrackerBackend
5 from edit_panel import MussorgskyEditPanel
6
7
8 class MussorgskyMainWindow (hildon.StackableWindow):
9
10     def __init__ (self):
11         hildon.StackableWindow.__init__ (self)
12         self.tracker = TrackerBackend ()
13         self.set_title ("Mussorgsky")
14         self.connect ("destroy", gtk.main_quit)
15         main_view_box = self.create_main_view ()
16         self.add (main_view_box)
17         self.update_values (None)
18         self.show_all ()
19         
20     def show_edit_panel (self, songs, albums, artists):
21         panel = MussorgskyEditPanel (songs, albums, artists)
22         panel.connect ("destroy", self.back_to_main_view)
23         panel.show_all ()
24
25     def back_to_main_view (self, widget):
26         print "Waiting to update"
27         gobject.timeout_add_seconds (3, self.update_values, None)
28
29     def artists_clicked (self, widget):
30         list_songs = self.tracker.get_songs_without_artist ()
31         list_albums = self.tracker.get_list_of_known_albums ()
32         list_artists = self.tracker.get_list_of_known_artists ()
33         self.show_edit_panel (list_songs, list_albums, list_artists)
34
35     def titles_clicked (self, widget):
36         list_songs = self.tracker.get_songs_without_title ()
37         list_albums = self.tracker.get_list_of_known_albums ()
38         list_artists = self.tracker.get_list_of_known_artists ()
39         self.show_edit_panel (list_songs, list_albums, list_artists)
40
41     def albums_clicked (self, widget):
42         list_songs = self.tracker.get_songs_without_album ()
43         list_albums = self.tracker.get_list_of_known_albums ()
44         list_artists = self.tracker.get_list_of_known_artists ()
45         self.show_edit_panel (list_songs, list_albums, list_artists)
46
47     def update_values (self, user_data):
48         print "Updating labels"
49         self.label_no_artist.set_text ("%s songs without artist" %
50                                        self.tracker.count_songs_wo_artist ())
51         self.label_no_title.set_text ("%s songs without title" %
52                                       self.tracker.count_songs_wo_title ())
53         self.label_no_album.set_text ("%s songs without album" %
54                                       self.tracker.count_songs_wo_album ())
55         return False
56
57     def browse_clicked (self, widget):
58         list_songs = self.tracker.get_all_songs ()
59         list_albums = self.tracker.get_list_of_known_albums ()
60         list_artists = self.tracker.get_list_of_known_artists ()
61         self.show_edit_panel (list_songs, list_albums, list_artists)
62
63     def create_main_view (self):
64         vbox = gtk.VBox ()
65
66         # Artist row
67         artist_row = gtk.HBox (homogeneous=True)
68         self.label_no_artist = gtk.Label ("")
69         artist_row.add (self.label_no_artist)
70         button_artists = gtk.Button ("Fix empty artists!")
71         button_artists.connect ("clicked", self.artists_clicked)
72         artist_row.add (button_artists)
73     
74         vbox.add (artist_row)
75
76         # Title row
77         title_row = gtk.HBox (homogeneous=True)
78         self.label_no_title = gtk.Label ("")
79         title_row.add (self.label_no_title)
80         button_titles = gtk.Button ("Fix empty titles!")
81         button_titles.connect ("clicked", self.titles_clicked)
82         title_row.add (button_titles)
83     
84         vbox.add (title_row)
85
86         # Album row
87         album_row = gtk.HBox (homogeneous=True)
88         self.label_no_album = gtk.Label ("")
89         album_row.add (self.label_no_album)
90         button_albums = gtk.Button ("Fix empty albums!")
91         button_albums.connect ("clicked", self.albums_clicked)
92         album_row.add (button_albums)
93
94         vbox.add (album_row)
95
96         # All songs row
97         all_songs_row = hildon.Button (hildon.BUTTON_STYLE_NORMAL, hildon.BUTTON_ARRANGEMENT_HORIZONTAL)
98         all_songs_row.set_title ("Browse the music collection")
99         all_songs_row.connect ("clicked", self.browse_clicked)
100         vbox.add (all_songs_row)
101
102         return vbox
103
104 if __name__ == "__main__":
105
106     try:
107         window = MussorgskyMainWindow ()
108         gtk.main ()
109     except Exception, e:
110         dialog = gtk.MessageDialog (None,
111                                     gtk.DIALOG_DESTROY_WITH_PARENT,
112                                     gtk.MESSAGE_ERROR,
113                                     gtk.BUTTONS_CLOSE,
114                                     "Error (%s)" % str(e));
115         dialog.run ()
116