22275ffc3526da587014675319fa0404fe25f406
[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 album_art_panel import MussorgskyAlbumArtPanel
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 broken_files_clicked (self, widget):
31         list_songs = self.tracker.get_all_broken_songs ()
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 update_values (self, user_data):
37         print "Updating labels"
38         self.label_no_artist.set_text ("%s songs without artist" %
39                                        self.tracker.count_songs_wo_artist ())
40         self.label_no_title.set_text ("%s songs without title" %
41                                       self.tracker.count_songs_wo_title ())
42         self.label_no_album.set_text ("%s songs without album" %
43                                       self.tracker.count_songs_wo_album ())
44         return False
45
46     def browse_clicked (self, widget):
47         list_songs = self.tracker.get_all_songs ()
48         list_albums = self.tracker.get_list_of_known_albums ()
49         list_artists = self.tracker.get_list_of_known_artists ()
50         self.show_edit_panel (list_songs, list_albums, list_artists)
51
52     def album_art_clicked (self, widget):
53         artists_albums = self.tracker.get_all_pairs_artist_album ()
54         panel = MussorgskyAlbumArtPanel (artists_albums)
55         panel.show_all ()
56
57     def create_main_view (self):
58         vbox = gtk.VBox (spacing=12, homogeneous=False)
59
60         # Labels artist row
61         self.label_no_artist = gtk.Label ("")
62         vbox.add (self.label_no_artist)
63
64         self.label_no_title = gtk.Label ("")
65         vbox.add (self.label_no_title)
66
67         self.label_no_album = gtk.Label ("")
68         vbox.add (self.label_no_album)
69         
70         # Buttons
71         all_songs_row = gtk.HBox (homogeneous=True, spacing=12)
72
73         button_broken_files = gtk.Button ("Fix metadata!")
74         button_broken_files.connect ("clicked", self.broken_files_clicked)
75         all_songs_row.add (button_broken_files)
76         
77         browse = hildon.Button (hildon.BUTTON_STYLE_NORMAL,
78                                 hildon.BUTTON_ARRANGEMENT_HORIZONTAL)
79         browse.set_title ("Manage\ncollection")
80         browse.connect ("clicked", self.browse_clicked)
81         all_songs_row.add (browse)
82
83         album_art = hildon.Button (hildon.BUTTON_STYLE_NORMAL,
84                                    hildon.BUTTON_ARRANGEMENT_HORIZONTAL)
85         album_art.set_title ("Album art")
86         album_art.connect ("clicked", self.album_art_clicked)
87         all_songs_row.add (album_art)
88
89         vbox.add (all_songs_row)
90
91         return vbox
92
93
94     
95
96 if __name__ == "__main__":
97
98     try:
99         window = MussorgskyMainWindow ()
100         gtk.main ()
101     except Exception, e:
102         dialog = gtk.MessageDialog (None,
103                                     gtk.DIALOG_DESTROY_WITH_PARENT,
104                                     gtk.MESSAGE_ERROR,
105                                     gtk.BUTTONS_CLOSE,
106                                     "Error (%s)" % str(e));
107         dialog.run ()
108