~pimvullers/beat-box/fix-983560

« back to all changes in this revision

Viewing changes to src/LibraryWindow.vala

  • Committer: sgringwe at gmail
  • Date: 2012-04-18 20:42:05 UTC
  • Revision ID: sgringwe@gmail.com-20120418204205-v1qcna51y2cbt9r9
*Abstracted ViewWrapper for different view types to spread out view-specific code
*Re-fixed libnotify closing/updating
*Put welcome screen in proper views rather than LW
*Fixed device add/removal

Show diffs side-by-side

added added

removed removed

Lines of Context:
35
35
        private BeatBox.MediaKeyListener mkl;
36
36
        public BeatBox.SearchSuggester search_suggester;
37
37
 
38
 
        private HashMap<int, Device> welcome_screen_keys;
39
 
 
40
38
        private bool queriedlastfm; // whether or not we have queried last fm for the current media info
41
39
        private bool media_considered_played; // whether or not we have updated last played and added to already played list
42
40
        private bool added_to_play_count; // whether or not we have added one to play count on playing media
49
47
 
50
48
        private VBox verticalBox;
51
49
        public Notebook mainViews { get; private set; }
52
 
        private Granite.Widgets.Welcome welcomeScreen;
53
50
        public DrawingArea videoArea  { get; private set; }
54
51
        public HPaned sourcesToMedias { get; private set; } //allows for draggable
55
52
        public HPaned mediasToInfo { get; private set; } // media info pane
98
95
                lm = new BeatBox.LibraryManager(settings, this, args);
99
96
 
100
97
                //various objects
101
 
                welcome_screen_keys = new HashMap<int, Device>();
102
98
                mkl = new MediaKeyListener(lm, this);
103
99
 
104
100
#if HAVE_INDICATE
123
119
                this.lm.medias_removed.connect(medias_removed);
124
120
                this.lm.media_played.connect(media_played);
125
121
                this.lm.playback_stopped.connect(playback_stopped);
126
 
                this.lm.device_manager.device_added.connect(device_added);
127
 
                this.lm.device_manager.device_removed.connect(device_removed);
128
122
 
129
123
                this.destroy.connect (on_quit);
130
124
 
180
174
                contentBox = new VBox(false, 0);
181
175
                mainViews = new Notebook ();
182
176
                videoArea = new DrawingArea();
183
 
                welcomeScreen = new Granite.Widgets.Welcome(_("Get Some Tunes"), _("BeatBox can't seem to find your music."));
184
177
 
185
178
                sideTree = new SideTreeView(lm, this);
186
179
                sideTreeScroll = new ScrolledWindow(null, null);
314
307
                topControls.insert(searchFieldBin, -1);
315
308
                topControls.insert(app.create_appmenu(settingsMenu), -1);
316
309
 
317
 
                contentBox.pack_start(welcomeScreen, true, true, 0);
318
 
 
319
 
                var music_folder_icon = Icons.MUSIC_FOLDER.render (IconSize.DIALOG, null);
320
 
                welcomeScreen.append_with_pixbuf(music_folder_icon, _("Locate"), _("Change your music folder."));
321
 
 
322
310
                // Hide notebook tabs and border
323
311
                mainViews.show_tabs = false;
324
312
                mainViews.show_border = false;
347
335
                }
348
336
 
349
337
                /* Connect events to functions */
350
 
                welcomeScreen.activated.connect(welcomeScreenActivated);
351
338
                previousButton.clicked.connect(previousClicked);
352
339
                playButton.clicked.connect(playClicked);
353
340
                nextButton.clicked.connect(nextClicked);
417
404
        {
418
405
                ViewWrapper view_wrapper;
419
406
                
420
 
                if(hint != ViewWrapper.Hint.SIMILAR)
 
407
                if(hint == ViewWrapper.Hint.MUSIC)
 
408
                        view_wrapper = new MusicViewWrapper(this, media, tvs, id);
 
409
                else if(hint == ViewWrapper.Hint.PODCAST)
 
410
                        view_wrapper = new PodcastViewWrapper(this, media, tvs, id);
 
411
                else if(hint == ViewWrapper.Hint.STATION)
 
412
                        view_wrapper = new StationViewWrapper(this, media, tvs, id);
 
413
                else if(hint == ViewWrapper.Hint.SIMILAR)
 
414
                        view_wrapper = new SimilarViewWrapper(this, media, tvs, id);
 
415
                else
421
416
                        view_wrapper = new ViewWrapper (this, media, tvs, id);
422
 
                else
423
 
                        view_wrapper = new SimilarViewWrapper(this, media, tvs, id);
424
417
 
425
418
                sideTree.add_item (view_wrapper, view_name);
426
419
 
591
584
         * This is handled more carefully inside each ViewWrapper object.
592
585
         */
593
586
        public void update_sensitivities() {
594
 
                // FIXME: TopDisplay's internal widgets and WelcomeScreen sensitivities shouldn't be set here
595
 
                
596
587
                if(!initializationFinished)
597
588
                        return;
598
589
 
599
590
                bool folderSet = (lm.settings.getMusicFolder() != "");
600
591
                bool haveMedias = lm.media_count() > 0;
601
 
                bool haveSongs = lm.song_ids().size > 0;
602
592
                bool doingOps = lm.doing_file_operations();
603
593
                bool mediaActive = lm.media_active;
604
594
                bool showMore = lm.settings.getMoreVisible();
605
595
 
606
596
                bool showingMediaList = (get_current_view_wrapper () is ViewWrapper);
607
597
                bool songsInList = showingMediaList ? (get_current_view_wrapper () as ViewWrapper).have_media : false;
608
 
                bool showingMusicList = sideTree.convertToChild(sideTree.getSelectedIter()) == sideTree.library_music_iter;
609
 
                bool showMainViews = (haveSongs || (haveMedias && !showingMusicList));
610
598
 
611
599
                fileSetMusicFolder.set_sensitive(!doingOps);
612
600
                fileImportMusic.set_sensitive(!doingOps && folderSet);
626
614
                previousButton.set_sensitive(mediaActive || songsInList);
627
615
                playButton.set_sensitive(mediaActive || songsInList);
628
616
                nextButton.set_sensitive(mediaActive || songsInList);
629
 
 
630
 
                mainViews.set_visible(true);
631
 
                welcomeScreen.set_visible(false); // FIXME
632
 
 
633
 
                welcomeScreen.set_item_sensitivity(0, !doingOps);
634
 
                foreach(int key in welcome_screen_keys.keys)
635
 
                        welcomeScreen.set_item_sensitivity(key, !doingOps);
636
 
 
637
 
                statusBar.set_visible(showMainViews && showingMediaList);
638
 
 
639
 
                infoPanel.set_visible(showMainViews && showMore && mediaActive);
640
 
                infoPanelChooser.set_visible(showMainViews && mediaActive);
 
617
                
 
618
                infoPanel.set_visible(songsInList && showMore && mediaActive);
 
619
                infoPanelChooser.set_visible(songsInList && mediaActive);
641
620
 
642
621
                // hide playlists when media list is empty
643
622
                sideTree.setVisibility(sideTree.playlists_iter, haveMedias);
986
965
        }
987
966
 
988
967
        /* this is after setting the music library */
989
 
        public virtual void musicAdded(LinkedList<string> not_imported) {
 
968
        public virtual void musicAdded(LinkedList<Media> new_medias, LinkedList<string> not_imported) {
990
969
 
991
970
                if(lm.media_active) {
992
971
                        updateInfoLabel();
1007
986
 
1008
987
                //now notify user
1009
988
                try {
1010
 
                        if (Notify.is_initted ()) {
 
989
                        if (Notify.is_initted () && new_medias.size > 0) {
1011
990
                                notification.close();
 
991
                                
1012
992
                                notification.update(_("Import Complete"), _("BeatBox has imported your library."), "beatbox");
1013
993
                                notification.set_image_from_pixbuf(Icons.BEATBOX.render (Gtk.IconSize.DIALOG));
 
994
                                
 
995
                                notification.show();
1014
996
                                notification.set_timeout (Notify.EXPIRES_DEFAULT);
1015
 
                                notification.set_urgency (Notify.Urgency.NORMAL);
1016
 
                                notification.show();
1017
997
                        }
1018
998
                }
1019
999
                catch(GLib.Error err) {
1164
1144
                statusBar.set_total_time (total_seconds);
1165
1145
        }
1166
1146
 
1167
 
        public void welcomeScreenActivated(int index) {
1168
 
                if(index == 0) {
1169
 
                        if(!lm.doing_file_operations()) {
1170
 
                                string folder = "";
1171
 
                                var file_chooser = new FileChooserDialog (_("Choose Music Folder"), this,
1172
 
                                                                                  FileChooserAction.SELECT_FOLDER,
1173
 
                                                                                  Gtk.Stock.CANCEL, ResponseType.CANCEL,
1174
 
                                                                                  Gtk.Stock.OPEN, ResponseType.ACCEPT);
1175
 
                                file_chooser.set_local_only(true);
1176
 
                                if (file_chooser.run () == ResponseType.ACCEPT) {
1177
 
                                        folder = file_chooser.get_filename();
1178
 
                                }
1179
 
                                file_chooser.destroy ();
1180
 
 
1181
 
                                if(folder != "" && (folder != settings.getMusicFolder() || lm.media_count() == 0)) {
1182
 
                                        setMusicFolder(folder);
1183
 
                                }
1184
 
                        }
1185
 
                }
1186
 
                else {
1187
 
                        if(lm.doing_file_operations())
1188
 
                                return;
1189
 
 
1190
 
                        Device d = welcome_screen_keys.get(index);
1191
 
 
1192
 
                        if(d.getContentType() == "cdrom") {
1193
 
                                sideTree.expandItem(sideTree.convertToFilter(sideTree.devices_iter), true);
1194
 
                                sideTree.setSelectedIter(sideTree.convertToFilter(sideTree.devices_cdrom_iter));
1195
 
                                sideTree.sideListSelectionChange();
1196
 
 
1197
 
                                var to_transfer = new LinkedList<int>();
1198
 
                                foreach(int i in d.get_medias())
1199
 
                                        to_transfer.add(i);
1200
 
 
1201
 
                                d.transfer_to_library(to_transfer);
1202
 
                        }
1203
 
                        else {
1204
 
                                // ask the user if they want to import medias from device that they don't have in their library (if any)
1205
 
                                if(lm.settings.getMusicFolder() != "") {
1206
 
                                        var externals = new LinkedList<int>();
1207
 
                                        foreach(var i in d.get_medias()) {
1208
 
                                                if(lm.media_from_id(i).isTemporary)
1209
 
                                                        externals.add(i);
1210
 
                                        }
1211
 
 
1212
 
                                        TransferFromDeviceDialog tfdd = new TransferFromDeviceDialog(this, d, externals);
1213
 
                                        tfdd.show();
1214
 
                                }
1215
 
                        }
1216
 
                }
1217
 
        }
1218
 
 
1219
1147
        void repeatChooserOptionChanged(int val) {
1220
1148
                if(val == 0)
1221
1149
                        lm.set_repeat_mode(LibraryManager.Repeat.OFF);
1296
1224
                dialog.run();
1297
1225
                dialog.destroy();
1298
1226
        }
1299
 
 
1300
 
        /* device stuff for welcome screen */
1301
 
        public void device_added(Device d) {
1302
 
                // add option to import in welcome screen
1303
 
                string secondary = (d.getContentType() == "cdrom") ? _("Import songs from audio CD") : _("Import media from device");
1304
 
                int key = welcomeScreen.append_with_image( new Image.from_gicon(d.get_icon(), Gtk.IconSize.DIALOG), d.getDisplayName(), secondary);
1305
 
                welcome_screen_keys.set(key, d);
1306
 
        }
1307
 
 
1308
 
        public void device_removed(Device d) {
1309
 
                // remove option to import from welcome screen
1310
 
                int key = 0;
1311
 
                foreach(int i in welcome_screen_keys.keys) {
1312
 
                        if(welcome_screen_keys.get(i) == d) {
1313
 
                                key = i;
1314
 
                                break;
1315
 
                        }
1316
 
                }
1317
 
 
1318
 
                if(key != 0) {
1319
 
                        welcome_screen_keys.unset(key);
1320
 
                        welcomeScreen.remove_item(key);
1321
 
                }
1322
 
        }
1323
1227
}
1324
1228