Use general_no_thumbnail instead of imageviewer_no_pic if the movie has no poster
[cinaest] / src / poster / movie-poster-factory.vala
index 4c74c00..df8f1c3 100644 (file)
@@ -33,12 +33,13 @@ namespace MoviePoster {
                construct {
                        try {
                                var conn = DBus.Bus.get (DBus.BusType.SESSION);
-                               server = conn.get_object ("org.maemo.movieposter.GoogleImages",
-                                                         "/org/maemo/movieposter/GoogleImages",
+                               server = conn.get_object ("org.maemo.movieposter.IMDb",
+                                                         "/org/maemo/movieposter/IMDb",
                                                          "org.maemo.movieposter.Provider");
                                server.Fetched.connect (this.on_poster_fetched);
+                               server.Failed.connect (this.on_poster_failed);
                        } catch (Error e) {
-                               warning ("Couldn't connect to Google image downloader: %s\n", e.message);
+                               warning ("Couldn't connect to IMDb poster downloader: %s\n", e.message);
                        }
                        gc = GConf.Client.get_default ();
 
@@ -64,18 +65,22 @@ namespace MoviePoster {
                public int queue (Movie movie, RequestCallback callback) throws Error {
                        string path = get_path (movie);
 
+                       foreach (Request request in requests)
+                               if (request.movie == movie)
+                                       return 0;
+
                        if (FileUtils.test (path, FileTest.IS_REGULAR)) {
                                // TODO: make this async?
-                               var pixbuf = new Gdk.Pixbuf.from_file_at_size (path, 268, 424);
+                               var pixbuf = new Gdk.Pixbuf.from_file_at_scale (path, 288, 400, true);
                                callback (pixbuf, movie);
                        } else if (server != null && download_posters) {
                                var request = new Request ();
 
-                               request.handle = server.Fetch (movie.title.down (), movie.year.to_string (), "movie");
+                               request.handle = server.Fetch (movie.title, movie.year.to_string (), "movie");
                                request.movie = movie;
                                request.callback = callback;
-                               request.width = 268;
-                               request.height = 424;
+                               request.width = 288;
+                               request.height = 400;
                                requests.append (request);
                        }
                        return 0;
@@ -84,14 +89,19 @@ namespace MoviePoster {
                public int queue_thumbnail (Movie movie, uint width, uint height, bool cropped, RequestCallback callback) throws Error {
                        string path = get_path_thumbnail (movie);
 
+                       foreach (Request request in requests)
+                               if (request.movie == movie)
+                                       return 0;
+
                        if (FileUtils.test (path, FileTest.IS_REGULAR)) {
                                // TODO: make this async?
-                               var pixbuf = new Gdk.Pixbuf.from_file_at_size (path, (int) width, (int) height);
+                               var pixbuf = new Gdk.Pixbuf.from_file_at_scale (path, (int) width, (int) height, true);
+
                                callback (pixbuf, movie);
                        } else if (server != null && download_posters) {
                                var request = new Request ();
 
-                               request.handle = server.FetchThumbnail (movie.title.down (), movie.year.to_string (), "movie");
+                               request.handle = server.FetchThumbnail (movie.title, movie.year.to_string (), "movie");
                                request.movie = movie;
                                request.callback = callback;
                                request.width = (int) width;
@@ -122,6 +132,20 @@ namespace MoviePoster {
                        }
                }
 
+               private void on_poster_failed (dynamic DBus.Object server, int handle) {
+                       Request request = null;
+                       foreach (Request r in requests) {
+                               if (r.handle == handle) {
+                                       request = r;
+                                       break;
+                               }
+                       }
+                       if (request == null)
+                               return;
+                       requests.remove (request);
+               //      request.callback (pixbuf, request.movie);
+               }
+
                public void join () {
                }