typeof (Movie)
};
private Gdk.Pixbuf no_poster;
+ private MoviePoster.Factory poster_factory;
public MovieSource source;
private MovieFilter filter;
public bool update_running { get; set; }
private Cancellable cancellable;
+ public signal void search_finished (int movies);
+
construct {
set_column_types (base_type);
no_poster = null;
source = null;
update_running = false;
+
+ poster_factory = MoviePoster.Factory.get_instance ();
}
public void add (Movie movie, out TreeIter iter) {
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)) {
}
}
+ 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 {
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 ())
clear ();
- if (source != null)
+ if (source != null) {
// FIXME - arbitrary limit
- yield source.get_movies (filter, receive_movie, 100, cancellable);
+ int n = yield source.get_movies (filter, receive_movie, 100, cancellable);
+ search_finished (n);
+ }
update_running = false;
if (cancellable.is_cancelled ()) {
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);