8173c0d445bf2a2385ea091ce1be3a5bd729e708
[cinaest] / src / plugins / imdb-download-dialog.vala
1 /* This file is part of Cinaest.
2  *
3  * Copyright (C) 2009 Philipp Zabel
4  *
5  * Cinaest is free software: you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation, either version 3 of the License, or
8  * (at your option) any later version.
9  *
10  * Cinaest is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with Cinaest. If not, see <http://www.gnu.org/licenses/>.
17  */
18
19 using Gtk;
20 using Hildon;
21
22 class IMDbDownloadDialog : Note {
23         private bool plots;
24
25         public IMDbDownloadDialog (Gtk.Window window, bool _plots) {
26                 transient_parent = window;
27                 plots = _plots;
28         }
29
30         construct {
31                 note_type = NoteType.PROGRESSBAR;
32                 progressbar = new ProgressBar ();
33         }
34
35         public new void run (dynamic DBus.Object server, string mirror) {
36                 int res;
37                 try {
38                         server.Progress += this.on_progress;
39                         server.DescriptionChanged += this.on_description_changed;
40
41                         int flags = IMDbDownloader.MOVIES | IMDbDownloader.GENRES | IMDbDownloader.RATINGS | IMDbDownloader.AKAS;
42                         if (plots)
43                                 flags |= IMDbDownloader.PLOTS;
44
45                         server.download (mirror, flags);
46                 } catch (DBus.Error e) {
47                         warning ("Failed to invoke IMDb downloader: %s", e.message);
48                 }
49
50                 show_all ();
51
52                 res = base.run ();
53                 if (res == ResponseType.CANCEL)
54                         server.cancel ();
55         }
56
57         private void on_progress (dynamic DBus.Object server, int percent) {
58                 if (percent < 100) {
59                         progressbar.set_fraction (0.01 * percent);
60                 } else {
61                         close ();
62                 }
63         }
64
65         private void on_description_changed (dynamic DBus.Object server, string _description) {
66                 description = _description;
67         }
68 }