From ce979807bebce12903a1f902193bc4d5e54c8152 Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Thu, 5 Nov 2009 17:33:11 +0100 Subject: [PATCH] Add movie filter class --- Makefile.am | 6 +++++- src/imdb/imdb-sqlite.vala | 4 ++-- src/movie-filter.vala | 25 +++++++++++++++++++++++++ src/movie-list-store.vala | 10 +++++----- src/movie-list-window.vala | 6 +++++- src/plugin-interface.vala | 2 +- src/plugins/imdb-plugin.vala | 2 +- 7 files changed, 44 insertions(+), 11 deletions(-) create mode 100644 src/movie-filter.vala diff --git a/Makefile.am b/Makefile.am index 801e736..ace81c7 100644 --- a/Makefile.am +++ b/Makefile.am @@ -26,6 +26,7 @@ desktopentry_DATA = \ cinaest_SOURCES = \ src/main.c \ src/movie.c \ + src/movie-filter.c \ src/movie-list-menu.c \ src/movie-list-store.c \ src/movie-list-view.c \ @@ -36,6 +37,7 @@ cinaest_SOURCES = \ cinaest_VALASOURCES = \ src/main.vala \ src/movie.vala \ + src/movie-filter.vala \ src/movie-list-menu.vala \ src/movie-list-store.vala \ src/movie-list-view.vala \ @@ -63,6 +65,7 @@ libimdb_plugin_la_VALASOURCES = \ src/imdb/imdb-sqlite.vala \ src/imdb/plaintext-downloader-interface.vala \ src/movie.vala \ + src/movie-filter.vala \ src/plugin-interface.vala \ src/plugins/imdb-download-dialog.vala @@ -84,7 +87,8 @@ imdb_plaintext_downloader_VALASOURCES = \ src/imdb/imdb-plaintext-downloader.vala \ src/imdb/gzip-input-stream.vala \ src/imdb/imdb-sqlite.vala \ - src/imdb/plaintext-downloader-interface.vala + src/imdb/plaintext-downloader-interface.vala \ + src/movie-filter.vala imdb_plaintext_downloader_VALAFLAGS = --vapidir ./vapi \ --pkg dbus-glib-1 --pkg gio-2.0 --pkg sqlite3 --pkg zlib -X -lz diff --git a/src/imdb/imdb-sqlite.vala b/src/imdb/imdb-sqlite.vala index 4deb2e4..cbe8346 100644 --- a/src/imdb/imdb-sqlite.vala +++ b/src/imdb/imdb-sqlite.vala @@ -157,8 +157,8 @@ class IMDbSqlite : Object { return 0; } - public int query (string filter, ReceiveMovieFunction receive_movie) { - var sql = "SELECT Title, Year, Rating FROM Movies WHERE Title LIKE \"%s%%\" LIMIT 100;".printf (filter); + public int query (MovieFilter filter, ReceiveMovieFunction receive_movie) { + var sql = "SELECT Title, Year, Rating FROM Movies WHERE Title LIKE \"%s%%\" LIMIT 100;".printf (filter.title); Statement stmt; int rc; diff --git a/src/movie-filter.vala b/src/movie-filter.vala new file mode 100644 index 0000000..549c041 --- /dev/null +++ b/src/movie-filter.vala @@ -0,0 +1,25 @@ +/* This file is part of Cinaest. + * + * Copyright (C) 2009 Philipp Zabel + * + * Cinaest is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Cinaest is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Cinaest. If not, see . + */ + +public class MovieFilter { + public string title; + public int year_min; + public int year_max; + public int rating_min; + public int genres; +} diff --git a/src/movie-list-store.vala b/src/movie-list-store.vala index 3bfd156..e75894d 100644 --- a/src/movie-list-store.vala +++ b/src/movie-list-store.vala @@ -39,7 +39,7 @@ public class MovieListStore : ListStore, TreeModel { }; private Gdk.Pixbuf no_poster; public MovieSource source; - private string query; + private MovieFilter filter; public bool update_running { get; set; } construct { @@ -82,11 +82,11 @@ public class MovieListStore : ListStore, TreeModel { return false; } - public bool start_search (string _query) { + public bool start_search (MovieFilter _filter) { if (update_running) return false; - query = _query; + filter = _filter; try { Thread.create (search_thread, false); update_running = true; @@ -98,7 +98,7 @@ public class MovieListStore : ListStore, TreeModel { // Update thread private void* search_thread () { - stdout.printf ("search thread started: \"%s\"\n", query); + stdout.printf ("search thread started: \"%s\"\n", filter.title); Gdk.threads_enter (); clear (); @@ -106,7 +106,7 @@ public class MovieListStore : ListStore, TreeModel { if (source != null) // FIXME - arbitrary limit - source.get_movies (query, receive_movie, 100); + source.get_movies (filter, receive_movie, 100); Gdk.threads_enter (); update_running = false; diff --git a/src/movie-list-window.vala b/src/movie-list-window.vala index 9a31de7..0e15566 100644 --- a/src/movie-list-window.vala +++ b/src/movie-list-window.vala @@ -24,6 +24,7 @@ public class MovieListWindow : StackableWindow { private Toolbar search_bar; private uint source_id; private MovieListView movie_list; + private MovieFilter filter; private MovieListStore store; private Label no_movies; private bool search_bar_visible; @@ -81,6 +82,8 @@ public class MovieListWindow : StackableWindow { search_bar_visible = false; search_bar.hide (); movie_list.hide (); + + filter = new MovieFilter (); } public MovieSource source { @@ -122,7 +125,8 @@ public class MovieListWindow : StackableWindow { } private bool start_search () { - if (store.start_search (search_field.get_text ())) { + filter.title = search_field.get_text (); + if (store.start_search (filter)) { movie_list.show (); no_movies.hide (); } diff --git a/src/plugin-interface.vala b/src/plugin-interface.vala index acec3db..9fb48ad 100644 --- a/src/plugin-interface.vala +++ b/src/plugin-interface.vala @@ -25,7 +25,7 @@ public abstract class Plugin : Object { public abstract class MovieSource : Object { public delegate void ReceiveMovieFunction (Movie movie); - public abstract void get_movies (string filter, ReceiveMovieFunction callback, int limit); + public abstract void get_movies (MovieFilter filter, ReceiveMovieFunction callback, int limit); public abstract void add_movie (Movie movie); diff --git a/src/plugins/imdb-plugin.vala b/src/plugins/imdb-plugin.vala index cd045e8..c314c64 100644 --- a/src/plugins/imdb-plugin.vala +++ b/src/plugins/imdb-plugin.vala @@ -87,7 +87,7 @@ class IMDbPlugin : Plugin { class IMDBSource : MovieSource { MovieSource.ReceiveMovieFunction _get_callback; - public override void get_movies (string filter, MovieSource.ReceiveMovieFunction callback, int limit) { + public override void get_movies (MovieFilter filter, MovieSource.ReceiveMovieFunction callback, int limit) { var sqlite = new IMDbSqlite (Path.build_filename (Environment.get_user_cache_dir (), "cinaest", "imdb.db", null)); -- 1.7.9.5