IMDb plugin: split MovieSource from Plugin and implement get_movies using SQLite
[cinaest] / src / plugins / imdb-plugin.vala
index fedd325..cd045e8 100644 (file)
@@ -21,6 +21,7 @@ using Hildon;
 
 class IMDbPlugin : Plugin {
        private dynamic DBus.Object server;
+       List<MovieSource> sources;
 
        public override void hello (Gtk.Window window) {
                string filename = Path.build_filename (Environment.get_user_cache_dir(),
@@ -37,12 +38,11 @@ class IMDbPlugin : Plugin {
                                download_imdb (window);
                        }
                }
-       }
 
-       public override void get_movies (string filter, Plugin.ReceiveMovieFunction callback, int limit) {
-       }
+               var source = new IMDBSource ();
 
-       public override void add_movie (Movie movie) {
+               sources = new List<MovieSource> ();
+               sources.append (source);
        }
 
        private void download_imdb (Gtk.Window window) {
@@ -79,6 +79,40 @@ class IMDbPlugin : Plugin {
                        download.destroy ();
                }
        }
+
+       public override unowned List<MovieSource> get_sources () {
+               return sources;
+       }
+}
+
+class IMDBSource : MovieSource {
+       MovieSource.ReceiveMovieFunction _get_callback;
+       public override void get_movies (string filter, MovieSource.ReceiveMovieFunction callback, int limit) {
+               var sqlite = new IMDbSqlite (Path.build_filename (Environment.get_user_cache_dir (),
+                                            "cinaest", "imdb.db", null));
+
+               _get_callback = callback;
+               sqlite.query (filter, receive_movie);
+       }
+
+       private void receive_movie (string title, int year, int rating) {
+               Movie movie = new Movie ();
+               movie.title = title;
+               movie.year = year;
+               movie.rating = rating;
+               _get_callback (movie);
+       }
+
+       public override void add_movie (Movie movie) {
+       }
+
+       public override unowned string get_name () {
+               return "IMDb";
+       }
+
+       public override unowned string get_description () {
+               return "Movies on IMDb";
+       }
 }
 
 [ModuleInit]