IMDb plugin: split MovieSource from Plugin and implement get_movies using SQLite
authorPhilipp Zabel <philipp.zabel@gmail.com>
Thu, 15 Oct 2009 13:32:34 +0000 (15:32 +0200)
committerPhilipp Zabel <philipp.zabel@gmail.com>
Mon, 2 Nov 2009 18:15:00 +0000 (19:15 +0100)
Makefile
src/plugins/imdb-plugin.vala

index 4e115be..4e70e7a 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -16,6 +16,7 @@ cinaest: ${cinaest_SOURCES}
        valac -o $@ ${cinaest_VALAFLAGS} ${cinaest_SOURCES}
 
 imdb_plugin_SOURCES = \
+       src/imdb/imdb-sqlite.vala \
        src/imdb/plaintext-downloader-interface.vala \
        src/movie.vala \
        src/plugin-interface.vala \
@@ -23,12 +24,13 @@ imdb_plugin_SOURCES = \
        src/plugins/imdb-plugin.vala
 
 imdb_plugin_CSOURCES = \
+       src/imdb/imdb-sqlite.c \
        src/plugins/imdb-download-dialog.c \
        src/plugins/imdb-plugin.c
 
-imdb_plugin_VALAFLAGS = --vapidir ./vapi --pkg dbus-glib-1 --pkg hildon-1
-imdb_plugin_CFLAGS = -shared -fPIC `pkg-config --cflags dbus-glib-1 hildon-1`
-imdb_plugin_LDADD = `pkg-config --libs dbus-glib-1 hildon-1`
+imdb_plugin_VALAFLAGS = --vapidir ./vapi --pkg dbus-glib-1 --pkg hildon-1 --pkg sqlite3
+imdb_plugin_CFLAGS = -shared -fPIC `pkg-config --cflags dbus-glib-1 hildon-1 sqlite3`
+imdb_plugin_LDADD = `pkg-config --libs dbus-glib-1 hildon-1 sqlite3`
 
 libimdb-plugin.so: ${imdb_plugin_SOURCES}
        valac -C ${imdb_plugin_VALAFLAGS} ${imdb_plugin_SOURCES}
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]