1 class AMCImporter : Object {
2 public bool parse_file (string filename) {
6 doc = Xml.Parser.parse_file (filename);
8 parsed = parse_xml (doc);
14 public bool parse_xml (Xml.Doc *doc) {
17 root = doc->get_root_element ();
20 if (root->name != "AntMovieCatalog")
23 for (Xml.Node* catalog = root->children;
24 catalog != null; catalog = catalog->next) {
25 if (catalog->name == "text")
28 if (catalog->name != "Catalog") {
29 warning ("Unknown node '%s'\n", catalog->name);
33 parse_catalog (catalog);
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")
45 if (node->name == "Properties")
48 if (node->name != "Contents") {
49 warning ("Unknown node '%s'\n", node->name);
53 for (Xml.Node* movie = node->children;
54 movie != null; movie = movie->next) {
55 if (movie->name == "text")
58 if (movie->name != "Movie") {
59 warning ("Unknown node '%s'\n", movie->name);
68 private void parse_movie (Xml.Node *movie) {
73 print ("GENRES: %s\n", movie->get_prop ("Category"));
74 parse_genres (movie->get_prop ("Category"), out m.genres);
83 // m.runtime = movie->get_prop ("Length") * 60;
85 m.title = movie->get_prop ("OriginalTitle");
87 m.rating = movie->get_prop ("Rating").to_int () * 10;
91 m.year = movie->get_prop ("Year").to_int ();
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]);
102 public signal void movie_available (Movie movie);
105 class AMCExporter : Object {
106 public bool write_file (string filename, List<Movie> movies) {
107 Xml.TextWriter writer;
109 writer = new Xml.TextWriter.filename (filename);
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 ();
146 writer.end_element ();
147 writer.end_element ();
148 writer.end_element ();