Movie list menu: store the movie source
[cinaest] / src / plugins / catalog-plugin.vala
index 8f72985..831914c 100644 (file)
@@ -55,7 +55,7 @@ class CatalogPlugin : Plugin {
                source = new CatalogSource ("Loaned", _("Loaned movies"), _("Movies loaned to friends"), sqlite, !("Loaned" in hidden_sources));
                sources.append (source);
 
-               source = new CatalogSource ("Watched", _("Watched movies"), _("Watched / rated movies"), sqlite, !("Watched" in hidden_sources));
+               source = new WatchedSource (sqlite, !("Watched" in hidden_sources));
                sources.append (source);
 
                source = new CatalogSource ("Watchlist", _("Watchlist"), _("Movies of interest"), sqlite, !("Watchlist" in hidden_sources));
@@ -84,7 +84,7 @@ class CatalogPlugin : Plugin {
                int i = 0;
                var available_sources = new List<MovieSource> ();
                foreach (CatalogSource s in sources) {
-                       if (!s.contains (movie)) {
+                       if (!s.contains (movie) && s.table != "Watched") {
                                available_sources.append ((MovieSource) s);
                                i++;
                        }
@@ -130,31 +130,6 @@ class CatalogPlugin : Plugin {
                                        var banner = (Banner) Banner.show_information_with_markup (window, null, _("'%s' added to list of loaned movies").printf (movie.title, source.get_name ()));
                                        banner.set_timeout (1500);
                                }
-                       } else if (source.table == "Watched") {
-                               var dialog = new Gtk.Dialog ();
-                               dialog.set_title (_("Add to watched movies"));
-
-                               var rating = new RatingWidget ();
-                               var date = new Hildon.DateButton (SizeType.FINGER_HEIGHT, ButtonArrangement.VERTICAL);
-                               date.set_title (_("Watched on"));
-                               date.set_alignment (0.0f, 0.5f, 1.0f, 1.0f);
-
-                               content = (Gtk.VBox) dialog.get_content_area ();
-                               content.pack_start (rating, true, false, 0);
-                               content.pack_start (date, true, false, 0);
-
-                               dialog.add_button (_("Done"), Gtk.ResponseType.OK);
-                               dialog.show_all ();
-                               res = dialog.run ();
-                               dialog.destroy ();
-                               if (res == Gtk.ResponseType.OK) {
-                                       if (rating.get_rating () > 0)
-                                               movie.rating = 10 * rating.get_rating ();
-                                       source.add_movie (movie);
-
-                                       var banner = (Banner) Banner.show_information_with_markup (window, null, _("'%s' added to list of watched movies").printf (movie.title, source.get_name ()));
-                                       banner.set_timeout (1500);
-                               }
                        } else {
                                source.add_movie (movie);
 
@@ -298,9 +273,9 @@ class CatalogPlugin : Plugin {
 
 class CatalogSource : MovieSource {
        internal string table;
-       private string name;
-       private string description;
-       private CatalogSqlite sqlite;
+       internal string name;
+       internal string description;
+       internal CatalogSqlite sqlite;
 
        public CatalogSource (string _table, string _name, string _description, CatalogSqlite _sqlite, bool _active) {
                GLib.Object (active: _active);
@@ -342,6 +317,25 @@ class CatalogSource : MovieSource {
        }
 }
 
+class WatchedSource : CatalogSource {
+       public WatchedSource (CatalogSqlite _sqlite, bool _active) {
+               GLib.Object (active: _active);
+               table = "Watched";
+               name = _("Watched movies");
+               description = _("Watched / rated movies");
+               sqlite = _sqlite;
+       }
+
+       public override async int get_movies (MovieFilter filter, MovieSource.ReceiveMovieFunction callback, int limit, Cancellable? cancellable) {
+               int n = yield sqlite.query (table, filter, callback, limit, cancellable);
+               return n;
+       }
+
+       public override SourceFlags get_flags () {
+               return SourceFlags.EDITABLE | SourceFlags.RATING;
+       }
+}
+
 [ModuleInit]
 public Type register_plugin (TypeModule module) {
        // types are registered automatically