From 4ea2cc3bd4a7d9b1c54a9d33e6a1cf82e7c8c21d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Frings-F=C3=BCrst?= Date: Wed, 23 Jul 2014 09:06:59 +0200 Subject: Imported Upstream version 0.18.1 --- src/library/OfflinePage.vala | 130 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 src/library/OfflinePage.vala (limited to 'src/library/OfflinePage.vala') diff --git a/src/library/OfflinePage.vala b/src/library/OfflinePage.vala new file mode 100644 index 0000000..cb6af2d --- /dev/null +++ b/src/library/OfflinePage.vala @@ -0,0 +1,130 @@ +/* Copyright 2010-2014 Yorba Foundation + * + * This software is licensed under the GNU Lesser General Public License + * (version 2.1 or later). See the COPYING file in this distribution. + */ + +public class OfflinePage : CheckerboardPage { + public const string NAME = _("Missing Files"); + + private class OfflineView : Thumbnail { + public OfflineView(MediaSource source) { + base (source); + + assert(source.is_offline()); + } + } + + private class OfflineSearchViewFilter : DefaultSearchViewFilter { + public override uint get_criteria() { + return SearchFilterCriteria.TEXT | SearchFilterCriteria.FLAG | + SearchFilterCriteria.MEDIA | SearchFilterCriteria.RATING; + } + } + + private OfflineSearchViewFilter search_filter = new OfflineSearchViewFilter(); + private MediaViewTracker tracker; + + public OfflinePage() { + base (NAME); + + init_item_context_menu("/OfflineContextMenu"); + init_toolbar("/OfflineToolbar"); + + tracker = new MediaViewTracker(get_view()); + + // monitor offline and initialize view with all items in it + LibraryPhoto.global.offline_contents_altered.connect(on_offline_contents_altered); + Video.global.offline_contents_altered.connect(on_offline_contents_altered); + + on_offline_contents_altered(LibraryPhoto.global.get_offline_bin_contents(), null); + on_offline_contents_altered(Video.global.get_offline_bin_contents(), null); + } + + ~OfflinePage() { + LibraryPhoto.global.offline_contents_altered.disconnect(on_offline_contents_altered); + Video.global.offline_contents_altered.disconnect(on_offline_contents_altered); + } + + protected override void init_collect_ui_filenames(Gee.List ui_filenames) { + base.init_collect_ui_filenames(ui_filenames); + + ui_filenames.add("offline.ui"); + } + + protected override Gtk.ActionEntry[] init_collect_action_entries() { + Gtk.ActionEntry[] actions = base.init_collect_action_entries(); + + Gtk.ActionEntry remove = { "RemoveFromLibrary", Gtk.Stock.REMOVE, TRANSLATABLE, "Delete", + TRANSLATABLE, on_remove_from_library }; + remove.label = Resources.REMOVE_FROM_LIBRARY_MENU; + remove.tooltip = Resources.DELETE_FROM_LIBRARY_TOOLTIP; + actions += remove; + + return actions; + } + + public override Core.ViewTracker? get_view_tracker() { + return tracker; + } + + protected override void update_actions(int selected_count, int count) { + set_action_sensitive("RemoveFromLibrary", selected_count > 0); + set_action_important("RemoveFromLibrary", true); + + base.update_actions(selected_count, count); + } + + private void on_offline_contents_altered(Gee.Collection? added, + Gee.Collection? removed) { + if (added != null) { + foreach (MediaSource source in added) + get_view().add(new OfflineView(source)); + } + + if (removed != null) { + Marker marker = get_view().start_marking(); + foreach (MediaSource source in removed) + marker.mark(get_view().get_view_for_source(source)); + get_view().remove_marked(marker); + } + } + + private void on_remove_from_library() { + Gee.Collection sources = + (Gee.Collection) get_view().get_selected_sources(); + if (sources.size == 0) + return; + + if (!remove_offline_dialog(AppWindow.get_instance(), sources.size)) + return; + + AppWindow.get_instance().set_busy_cursor(); + + ProgressDialog progress = null; + if (sources.size >= 20) + progress = new ProgressDialog(AppWindow.get_instance(), _("Deleting...")); + + Gee.ArrayList photos = new Gee.ArrayList(); + Gee.ArrayList