class CatalogSqlite : Object {
Database db;
+ SList<Movie> result;
+ int results_waiting;
public delegate void ReceiveMovieFunction (string title, int year, int rating, int genres);
}
public int add_movie (string table, Movie movie) {
- string sql = "INSERT INTO %s(Title, Year, Rating, Genres) VALUES (\"%s\", %d, %d, %d);".printf (table, movie.title, movie.year, movie.rating, movie.genres.field);
+ var sql = new StringBuilder ();
int rc;
+ sql.append_printf ("INSERT INTO %s(Title, Year, Rating, Genres", table);
+ if (table == "Watched")
+ sql.append_printf (", Date) VALUES (\"%s\", %d, %d, %d, %u);",
+ movie.title, movie.year, movie.rating, movie.genres.field, movie.julian_date);
+ else
+ sql.append_printf (") VALUES (\"%s\", %d, %d, %d);",
+ movie.title, movie.year, movie.rating, movie.genres.field);
- rc = db.exec (sql, callback, null);
+ rc = db.exec (sql.str, callback, null);
if (rc != Sqlite.OK) {
stderr.printf ("Failed to insert movie \"%s\" (%d): %d, %s\n", movie.title, movie.year, rc, db.errmsg ());
return 1;
return 1;
}
+ result = new SList<Movie> ();
+ results_waiting = 0;
+
do {
Idle.add (query.callback);
yield;
movie.title = stmt.column_text (0);
movie.rating = stmt.column_int (2);
movie.genres.field = stmt.column_int (3);
+ if (table == "Watched")
+ movie.julian_date = stmt.column_int (4);
// TODO - depending on settings, this could be something else, like director info or runtime
movie.secondary = movie.genres.to_string ();
- callback (movie);
+ result.append (movie);
+ if (++results_waiting >= 10) {
+ callback (result);
+ result = new SList<Movie> ();
+ results_waiting = 0;
+ }
}
} while (rc == Sqlite.ROW);
+ if (results_waiting > 0)
+ callback (result);
+ result = new SList<Movie> ();
+
db.progress_handler (0, null);
return 0;
}