Czech translation update (via transifex.net)
[cinaest] / src / import-export-amc.vala
1 class AMCImporter : Object {
2         public bool parse_file (string filename) {
3                 Xml.Doc* doc;
4                 bool parsed = false;
5
6                 doc = Xml.Parser.parse_file (filename);
7                 if (doc != null)
8                         parsed = parse_xml (doc);
9
10                 delete doc;
11                 return parsed;
12         }
13
14         public bool parse_xml (Xml.Doc *doc) {
15                 Xml.Node* root;
16
17                 root = doc->get_root_element ();
18                 if (root == null)
19                         return false;
20                 if (root->name != "AntMovieCatalog")
21                         return false;
22
23                 for (Xml.Node* catalog = root->children;
24                      catalog != null; catalog = catalog->next) {
25                         if (catalog->name == "text")
26                                 continue;
27
28                         if (catalog->name != "Catalog") {
29                                 warning ("Unknown node '%s'\n", catalog->name);
30                                 continue;
31                         }
32
33                         parse_catalog (catalog);
34                 }
35
36                 return true;
37         }
38
39         private void parse_catalog (Xml.Node* catalog) {
40                 for (Xml.Node* node = catalog->children;
41                      node != null; node = node->next) {
42                         if (node->name == "text")
43                                 continue;
44
45                         if (node->name == "Properties")
46                                 continue;
47
48                         if (node->name != "Contents") {
49                                 warning ("Unknown node '%s'\n", node->name);
50                                 continue;
51                         }
52
53                         for (Xml.Node* movie = node->children;
54                              movie != null; movie = movie->next) {
55                                 if (movie->name == "text")
56                                         continue;
57
58                                 if (movie->name != "Movie") {
59                                         warning ("Unknown node '%s'\n", movie->name);
60                                         continue;
61                                 }
62
63                                 parse_movie (movie);
64                         }
65                 }
66         }
67
68         private void parse_movie (Xml.Node *movie) {
69                 var m = new Movie ();
70
71         //      Actors
72         //      AudioFormat
73 print ("GENRES: %s\n", movie->get_prop ("Category"));
74                 parse_genres (movie->get_prop ("Category"), out m.genres);
75         //      Checked
76         //      Comments
77         //      Country
78         //      Description
79         //      Director
80         //      Disks
81         //      FormattedTitle
82         //      Languages
83         //      m.runtime = movie->get_prop ("Length") * 60;
84         //      Number
85                 m.title = movie->get_prop ("OriginalTitle");
86         //      Picture
87                 m.rating = movie->get_prop ("Rating").to_int () * 10;
88         //      Subtitles
89         //      TranslatedTitle
90         //      VideoFormat
91                 m.year = movie->get_prop ("Year").to_int ();
92
93                 movie_available (m);
94         }
95
96         private void parse_genres (string genres_string, out Genres genres) {
97                 string[] genre = genres_string.replace (",", " ").replace("|", " ").split (" ");
98                 for (int i = 0; i < genre.length; i++)
99                         genres.field |= Genres.genre_bit (genre[i]);
100         }
101
102         public signal void movie_available (Movie movie);
103 }
104
105 class AMCExporter : Object {
106         public bool write_file (string filename, List<Movie> movies) {
107                 Xml.TextWriter writer;
108
109                 writer = new Xml.TextWriter.filename (filename);
110                 if (writer == null)
111                         return false;
112
113                 writer.start_document ("1.0", "iso-8859-1");
114                 writer.write_comment ("Cinaest Export in Ant Movie Catalog database format");
115                 writer.start_element ("AntMovieCatalog");
116                 writer.write_attribute ("Date", "now");
117                 writer.write_attribute ("Format", "35");
118                 writer.write_attribute ("Version", "3.5.1 (2007-09-22)");
119                         writer.start_element ("Catalog");
120                                 writer.write_element ("Properties", "");
121                                 writer.start_element ("Contents");
122                                 foreach (unowned Movie movie in movies) {
123                                         writer.start_element ("Movie");
124                                         writer.write_attribute ("Actors", "");
125                                         writer.write_attribute ("AudioFormat", "");
126                                         writer.write_attribute ("Category", movie.genres.to_string ());
127                                         writer.write_attribute ("Checked", "");
128                                         writer.write_attribute ("Comments", "");
129                                         writer.write_attribute ("Country", "");
130                                         writer.write_attribute ("Description", "");
131                                         writer.write_attribute ("Director", "");
132                                         writer.write_attribute ("Disks", "");
133                                         writer.write_attribute ("FormattedTitle", "");
134                                         writer.write_attribute ("Languages", "");
135                                         writer.write_attribute ("Length", ""); // (m.runtime + 30) / 60;
136                                         writer.write_attribute ("Number", "");
137                                         writer.write_attribute ("OriginalTitle", movie.title);
138                                         writer.write_attribute ("Picture", "");
139                                         writer.write_attribute ("Rating", (movie.rating / 10).to_string ());
140                                         writer.write_attribute ("Subtitles", "");
141                                         writer.write_attribute ("TranslatedTitle", "");
142                                         writer.write_attribute ("VideoFormat", "");
143                                         writer.write_attribute ("Year", (movie.year > 0) ? movie.year.to_string () : "");
144                                         writer.end_element ();
145                                 }
146                                 writer.end_element ();
147                         writer.end_element ();
148                 writer.end_element ();
149                 writer.flush ();
150                 return true;
151         }
152 }
153