IMDb plaintext downloader: optionally download actors and actresses
[cinaest] / src / imdb / imdb-plaintext-downloader.vala
index 821c9a2..c073428 100644 (file)
@@ -72,23 +72,91 @@ class IMDbDownloadServer : Object, IMDbDownloader {
                        var movie_parser = new MovieLineParser (sqlite);
                        var genre_parser = new GenreLineParser (sqlite);
                        var rating_parser = new RatingLineParser (sqlite);
+                       var aka_parser = new AkaLineParser (sqlite);
+                       var plot_parser = new PlotLineParser (sqlite);
+                       var person_parser = new PersonParser (sqlite);
 
-                       var downloader = new IMDbFtpDownloader (cancellable);
-                       downloader.progress_changed.connect (on_progress_changed);
+                       var downloader = new FtpDownloader (cancellable);
+                       downloader.progress.connect (on_progress);
+
+                       var parser = new IMDbGzipParser (cancellable);
+                       parser.progress.connect (on_progress);
 
                        if (MOVIES in flags) {
                                description_changed ("Downloading movie list ...");
-                               downloader.download (url + "movies.list.gz", movie_parser);
+                               downloader.download (url + "movies.list.gz", Path.build_filename (cache_dir, "movies.list.gz"));
                        }
-                       percent_finished = 33;
+                       percent_finished = 10;
                        if (GENRES in flags) {
                                description_changed ("Downloading genre data ...");
-                               downloader.download (url + "genres.list.gz", genre_parser);
+                               downloader.download (url + "genres.list.gz", Path.build_filename (cache_dir, "genres.list.gz"));
                        }
-                       percent_finished = 66;
+                       percent_finished = 20;
                        if (RATINGS in flags) {
                                description_changed ("Downloading rating data ...");
-                               downloader.download (url + "ratings.list.gz", rating_parser);
+                               downloader.download (url + "ratings.list.gz", Path.build_filename (cache_dir, "ratings.list.gz"));
+                       }
+                       percent_finished = 30;
+                       if (AKAS in flags) {
+                               description_changed ("Downloading alternative titles ...");
+                               downloader.download (url + "aka-titles.list.gz", Path.build_filename (cache_dir, "aka-titles.list.gz"));
+                       }
+                       percent_finished = 40;
+                       if (PLOTS in flags) {
+                               description_changed ("Downloading plots ...");
+                               downloader.download (url + "plot.list.gz", Path.build_filename (cache_dir, "plot.list.gz"));
+                       }
+                       if (ACTORS in flags) {
+                               description_changed ("Downloading actors ...");
+                               downloader.download (url + "actors.list.gz", Path.build_filename (cache_dir, "actors.list.gz"));
+                               description_changed ("Downloading actresses ...");
+                               downloader.download (url + "actresses.list.gz", Path.build_filename (cache_dir, "actresses.list.gz"));
+                       }
+                       // composers
+                       // costume-designers
+                       if (DIRECTORS in flags) {
+                               description_changed ("Downloading directors ...");
+                               downloader.download (url + "directors.list.gz", Path.build_filename (cache_dir, "directors.list.gz"));
+                       }
+                       // editors
+                       // producers
+                       // production-designers
+                       if (WRITERS in flags) {
+                               description_changed ("Downloading writers ...");
+                               downloader.download (url + "writers.list.gz", Path.build_filename (cache_dir, "writers.list.gz"));
+                       }
+
+                       percent_finished = 50;
+                       if (MOVIES in flags) {
+                               description_changed ("Parsing movie list ...");
+                               parser.parse (Path.build_filename (cache_dir, "movies.list.gz"), movie_parser);
+                       }
+                       percent_finished = 60;
+                       if (GENRES in flags) {
+                               description_changed ("Parsing genre data ...");
+                               parser.parse (Path.build_filename (cache_dir, "genres.list.gz"), genre_parser);
+                       }
+                       percent_finished = 70;
+                       if (RATINGS in flags) {
+                               description_changed ("Parsing rating data ...");
+                               parser.parse (Path.build_filename (cache_dir, "ratings.list.gz"), rating_parser);
+                       }
+                       percent_finished = 80;
+                       if (AKAS in flags) {
+                               description_changed ("Parsing alternative titles ...");
+                               parser.parse (Path.build_filename (cache_dir, "aka-titles.list.gz"), aka_parser);
+                       }
+                       percent_finished = 90;
+                       if (PLOTS in flags) {
+                               description_changed ("Parsing plots ...");
+                               parser.parse (Path.build_filename (cache_dir, "plot.list.gz"), plot_parser);
+                       }
+                       if (ACTORS in flags) {
+                               description_changed ("Parsing actors ...");
+                               parser.parse (Path.build_filename (cache_dir, "actors.list.gz"), person_parser);
+                               person_parser.reset ();
+                               description_changed ("Parsing actresses ...");
+                               parser.parse (Path.build_filename (cache_dir, "actresses.list.gz"), person_parser);
                        }
                } catch (Error e2) {
                        if (e2 is IOError.CANCELLED)
@@ -98,6 +166,8 @@ class IMDbDownloadServer : Object, IMDbDownloader {
                }
 
                description_changed ("Creating indices ...");
+               if (AKAS in flags)
+                       sqlite.create_aka_index ();
                if (MOVIES in flags)
                        sqlite.create_votes_index ();
 
@@ -114,8 +184,13 @@ class IMDbDownloadServer : Object, IMDbDownloader {
                return null;
        }
 
-       private void on_progress_changed (int percent) {
-               progress (percent_finished + percent / 3);
+       private void on_progress (int dltotal, int dlnow) {
+               stdout.printf ("%d / %d\r", dlnow, dltotal);
+               if (dltotal > 0) {
+                       int p = percent_finished + 10*dlnow/dltotal;
+                       if (p < 100)
+                               progress (p);
+               }
        }
 
        private void timeout_quit () {