X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fmovie-list-store.vala;h=f9a78ad1b07ed3d07895c71d38e479bc0ae04584;hb=356577fd2d7862cb2828be5b1a0c102a05c2255b;hp=b47fa20836f08fc659d7c33e6cb9d3e3b22fcbf3;hpb=9dfa698b63e25827bb1a55cb851fab423599c9a9;p=cinaest diff --git a/src/movie-list-store.vala b/src/movie-list-store.vala index b47fa20..f9a78ad 100644 --- a/src/movie-list-store.vala +++ b/src/movie-list-store.vala @@ -38,6 +38,7 @@ public class MovieListStore : ListStore, TreeModel { typeof (Movie) }; private Gdk.Pixbuf no_poster; + private MoviePoster.Factory poster_factory; public MovieSource source; private MovieFilter filter; public bool update_running { get; set; } @@ -48,6 +49,8 @@ public class MovieListStore : ListStore, TreeModel { no_poster = null; source = null; update_running = false; + + poster_factory = MoviePoster.Factory.get_instance (); } public void add (Movie movie, out TreeIter iter) { @@ -56,13 +59,30 @@ public class MovieListStore : ListStore, TreeModel { append (out iter1); base.set (iter1, 0, movie); - movie.notify.connect ((source, property) => { on_movie_changed(source); }); + movie.notify.connect (this.on_movie_changed); iter = iter1; } - private void on_movie_changed (GLib.Object source) { - Movie movie = (Movie) source; + public new bool remove (Movie movie) { + TreeIter iter; + + if (get_iter_from_movie (out iter, movie)) { + movie.notify.disconnect (this.on_movie_changed); + base.remove (iter); + + if (source.get_editable ()) { + source.delete_movie (movie); + } + + return true; + } + + return false; + } + + private void on_movie_changed (GLib.Object source, GLib.ParamSpec spec) { + var movie = (Movie) source; TreeIter iter; if (get_iter_from_movie (out iter, movie)) { @@ -71,6 +91,10 @@ public class MovieListStore : ListStore, TreeModel { } } + public bool get_editable () { + return source.get_editable (); + } + public bool get_iter_from_movie (out TreeIter iter, Movie movie_a) { if (get_iter_first (out iter)) { do { @@ -87,7 +111,7 @@ public class MovieListStore : ListStore, TreeModel { if (update_running) { stdout.printf ("aborting search ...\n"); cancellable.cancel (); - // poster_factory.clear_queue (); + poster_factory.clear_queue (); return false; } if (cancellable == null || cancellable.is_cancelled ()) @@ -130,8 +154,19 @@ public class MovieListStore : ListStore, TreeModel { return; add (movie, out iter); + try { + poster_factory.queue_thumbnail (movie, 64, 64, false, receive_poster_thumbnail); + } catch (Error e) { + warning ("Failed to queue poster request: %s\n", e.message); + } } + private void receive_poster_thumbnail (Gdk.Pixbuf pixbuf, Movie movie) { + var poster = new Poster (); + poster.thumbnail = pixbuf; + movie.poster = poster; + } + // Implement TreeModel interface public virtual GLib.Type get_column_type (int index_) { return_val_if_fail (index_ >= 0 && index_ < Columns.N_COLUMNS, 0);