Added get All option to the main UI
[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 from download_dialog import MussorgskyAlbumArtDownloadDialog
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.set_border_width (12)
15         self.connect ("destroy", gtk.main_quit)
16         main_view_box = self.create_main_view ()
17         self.add (main_view_box)
18         self.update_values (None)
19         self.show_all ()
20         
21     def show_edit_panel (self, songs, albums, artists):
22         panel = MussorgskyEditPanel (songs, albums, artists)
23         panel.connect ("destroy", self.back_to_main_view)
24         panel.show_all ()
25
26     def back_to_main_view (self, widget):
27         print "Waiting to update"
28         gobject.timeout_add_seconds (3, self.update_values, None)
29
30     def artists_clicked (self, widget):
31         list_songs = self.tracker.get_songs_without_artist ()
32         list_albums = self.tracker.get_list_of_known_albums ()
33         list_artists = self.tracker.get_list_of_known_artists ()
34         self.show_edit_panel (list_songs, list_albums, list_artists)
35
36     def titles_clicked (self, widget):
37         list_songs = self.tracker.get_songs_without_title ()
38         list_albums = self.tracker.get_list_of_known_albums ()
39         list_artists = self.tracker.get_list_of_known_artists ()
40         self.show_edit_panel (list_songs, list_albums, list_artists)
41
42     def albums_clicked (self, widget):
43         list_songs = self.tracker.get_songs_without_album ()
44         list_albums = self.tracker.get_list_of_known_albums ()
45         list_artists = self.tracker.get_list_of_known_artists ()
46         self.show_edit_panel (list_songs, list_albums, list_artists)
47
48     def update_values (self, user_data):
49         print "Updating labels"
50         self.label_no_artist.set_text ("%s songs without artist" %
51                                        self.tracker.count_songs_wo_artist ())
52         self.label_no_title.set_text ("%s songs without title" %
53                                       self.tracker.count_songs_wo_title ())
54         self.label_no_album.set_text ("%s songs without album" %
55                                       self.tracker.count_songs_wo_album ())
56         return False
57
58     def get_all_album_art (self, user_data):
59         print "Get all album art"
60         artist_album= self.tracker.get_all_pairs_artist_album ()
61         dialog = MussorgskyAlbumArtDownloadDialog (self)
62         dialog.show_all ()
63         dialog.do_the_job (artist_album)
64         
65     def browse_clicked (self, widget):
66         list_songs = self.tracker.get_all_songs ()
67         list_albums = self.tracker.get_list_of_known_albums ()
68         list_artists = self.tracker.get_list_of_known_artists ()
69         self.show_edit_panel (list_songs, list_albums, list_artists)
70
71     def create_main_view (self):
72         vbox = gtk.VBox (spacing=12)
73
74         # Artist row
75         artist_row = gtk.HBox (homogeneous=True)
76         self.label_no_artist = gtk.Label ("")
77         artist_row.add (self.label_no_artist)
78         button_artists = gtk.Button ("Fix empty artists!")
79         button_artists.connect ("clicked", self.artists_clicked)
80         artist_row.add (button_artists)
81     
82         vbox.add (artist_row)
83
84         # Title row
85         title_row = gtk.HBox (homogeneous=True)
86         self.label_no_title = gtk.Label ("")
87         title_row.add (self.label_no_title)
88         button_titles = gtk.Button ("Fix empty titles!")
89         button_titles.connect ("clicked", self.titles_clicked)
90         title_row.add (button_titles)
91     
92         vbox.add (title_row)
93
94         # Album row
95         album_row = gtk.HBox (homogeneous=True)
96         self.label_no_album = gtk.Label ("")
97         album_row.add (self.label_no_album)
98         button_albums = gtk.Button ("Fix empty albums!")
99         button_albums.connect ("clicked", self.albums_clicked)
100         album_row.add (button_albums)
101
102         vbox.add (album_row)
103
104         # All songs row
105         all_songs_row = gtk.HBox (homogeneous=True, spacing=12)
106         album_art = hildon.Button (hildon.BUTTON_STYLE_NORMAL,
107                                 hildon.BUTTON_ARRANGEMENT_HORIZONTAL)
108         album_art.set_title ("Get all album art")
109         album_art.connect ("clicked", self.get_all_album_art)
110         all_songs_row.add (album_art)
111
112         browse = hildon.Button (hildon.BUTTON_STYLE_NORMAL,
113                                 hildon.BUTTON_ARRANGEMENT_HORIZONTAL)
114         browse.set_title ("Browse the collection")
115         browse.connect ("clicked", self.browse_clicked)
116         all_songs_row.add (browse)
117
118         vbox.add (all_songs_row)
119
120         return vbox
121
122 if __name__ == "__main__":
123
124     try:
125         window = MussorgskyMainWindow ()
126         gtk.main ()
127     except Exception, e:
128         dialog = gtk.MessageDialog (None,
129                                     gtk.DIALOG_DESTROY_WITH_PARENT,
130                                     gtk.MESSAGE_ERROR,
131                                     gtk.BUTTONS_CLOSE,
132                                     "Error (%s)" % str(e));
133         dialog.run ()
134