1# -*- coding: UTF-8 -*-
2
3__revision__ = '$Id$'
4
5# Copyright (c) 2009 Michael Jahn
6#
7# This program is free software; you can redistribute it and/or modify
8# it under the terms of the GNU General Public License as published by
9# the Free Software Foundation; either version 2 of the License, or
10# (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15# GNU Library General Public License for more details.
16#
17# You should have received a copy of the GNU General Public License
18# along with this program; if not, write to the Free Software
19# 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
20
21# You may use and distribute this software under the terms of the
22# GNU General Public License, version 2 or later
23
24import xml.dom.minidom
25from plugins.export import XmlExportBase
26
27class ExportPlugin(XmlExportBase):
28    plugin_name         = "DVD Profiler XML Export"
29    plugin_description  = _("Full DVD Profiler XML Export V3 plugin")
30    plugin_author       = "Michael Jahn"
31    plugin_author_email = "griffith@griffith.cc"
32    plugin_version      = "1.0"
33
34    def __init__(self, database, locations, parent_window, search_conditions, config):
35        XmlExportBase.__init__(self, database, locations, parent_window, search_conditions, config)
36        self.config_section = 'export-dvdprofilerxml'
37        self.export_name    = 'DVD Profiler XML Export V3'
38        self.filename       = 'CollectionV3.xml'
39
40    def export_to_document(self, document, mainelement):
41        collelement = document.createElement('Collection')
42        document.appendChild(collelement)
43        comment = document.createComment('Griffith Export in DVD Profiler Collection Export Format V3')
44        document.insertBefore(comment, collelement)
45        XmlExportBase.export_to_document(self, document, collelement)
46
47    def process_movie(self, document, mainelement, movie, keys):
48        # create node
49        dvdelement = document.createElement('DVD')
50        mainelement.appendChild(dvdelement)
51        tmpelem = document.createElement('ProfileTimestamp')
52        dvdelement.appendChild(tmpelem)
53        tmpelem = document.createElement('ID')
54        dvdelement.appendChild(tmpelem)
55        tmpelem = document.createElement('UPC')
56        dvdelement.appendChild(tmpelem)
57        XmlExportBase.process_movie(self, document, dvdelement, movie, keys)
58
59    def process_movie_value(self, document, dvdelement, key, value):
60        if key == 'movies_number':
61            elem = document.createElement('CollectionNumber')
62            dvdelement.appendChild(elem)
63            t = document.createTextNode(value)
64            elem.appendChild(t)
65            tmpelem = document.createElement('CollectionType')
66            dvdelement.appendChild(tmpelem)
67            t = document.createTextNode('Owned')
68            tmpelem.appendChild(t)
69        elif key == 'movies_loaned':
70            loaninfoelem = document.createElement('LoanInfo')
71            dvdelement.appendChild(loaninfoelem)
72            loanedelem = document.createElement('Loaned')
73            loaninfoelem.appendChild(loanedelem)
74            t = document.createTextNode(value)
75            loanedelem.appendChild(t)
76        elif key == 'movies_seen':
77            pass
78        elif key == 'movies_rating':
79            reviewelem = document.createElement('Review')
80            dvdelement.appendChild(reviewelem)
81            reviewelem.setAttribute('Film', value)
82            reviewelem.setAttribute('Video', '0')
83            reviewelem.setAttribute('Audio', '0')
84            reviewelem.setAttribute('Extras', '0')
85        elif key == 'movies_color':             # SmallInteger
86            pass
87        elif key == 'movies_cond':              # SmallInteger
88            pass
89        elif key == 'movies_layers':            # SmallInteger
90            pass
91        elif key == 'movies_media_num':         # SmallInteger
92            pass
93        elif key == 'movies_runtime':           # Integer
94            elem = document.createElement('RunningTime')
95            dvdelement.appendChild(elem)
96            t = document.createTextNode(value)
97            elem.appendChild(t)
98        elif key == 'movies_year':              # year
99            elem = document.createElement('ProductionYear')
100            dvdelement.appendChild(elem)
101            t = document.createTextNode(value)
102            elem.appendChild(t)
103        elif key == 'movies_o_title':           # VARCHAR
104            elem = document.createElement('OriginalTitle')
105            dvdelement.appendChild(elem)
106            t = document.createTextNode(value)
107            elem.appendChild(t)
108        elif key == 'movies_title':             # VARCHAR
109            elem = document.createElement('Title')
110            dvdelement.appendChild(elem)
111            t = document.createTextNode(value)
112            elem.appendChild(t)
113        elif key == 'movies_director':          # VARCHAR
114            directors = value.split(',')
115            directorselem = document.createElement('Credits')
116            dvdelement.appendChild(directorselem)
117            for director in directors:
118                directorsplit = director.split(' ')
119                firstname = ''
120                lastname = ''
121                if len(directorsplit) > 1:
122                    firstname = directorsplit[0]
123                    directorsplit.pop(0)
124                    for directorname in directorsplit:
125                        lastname = lastname + directorname + ' '
126                directorelem = document.createElement('Credit')
127                directorselem.appendChild(directorelem)
128                directorelem.setAttribute('FirstName', firstname)
129                directorelem.setAttribute('LastName', lastname)
130                directorelem.setAttribute('BirthYear', '0')
131                directorelem.setAttribute('CreditType', 'Direction')
132                directorelem.setAttribute('CreditSubtype', 'Director')
133                directorelem.setAttribute('CreditedAs', '')
134        elif key == 'movies_o_site':            # VARCHAR
135            pass
136        elif key == 'movies_site':              # VARCHAR
137            pass
138        elif key == 'movies_trailer':           # VARCHAR
139            pass
140        elif key == 'movies_country':           # VARCHAR
141            elem = document.createElement('CountryOfOrigin')
142            dvdelement.appendChild(elem)
143            t = document.createTextNode(value)
144            elem.appendChild(t)
145        elif key == 'movies_genre':             # VARCHAR
146            genres = value.split(',')
147            genreselem = document.createElement('Genres')
148            dvdelement.appendChild(genreselem)
149            for genre in genres:
150                genreelem = document.createElement('Genre')
151                genreselem.appendChild(genreelem)
152                t = document.createTextNode(genre.strip())
153                genreelem.appendChild(t)
154        elif key == 'movies_region':            # SmallInteger
155            regionselem = document.createElement('Regions')
156            dvdelement.appendChild(regionselem)
157            regionelem = document.createElement('Region')
158            regionselem.appendChild(regionelem)
159            t = document.createTextNode(value)
160            regionelem.appendChild(t)
161        elif key == 'movies_image':             # VARCHAR
162            pass
163        elif key == 'movies_studio':            # VARCHAR
164            studios = value.split(',')
165            studioselem = document.createElement('Studios')
166            dvdelement.appendChild(studioselem)
167            for studio in studios:
168                studioelem = document.createElement('Studio')
169                studioselem.appendChild(studioelem)
170                t = document.createTextNode(studio.strip())
171                studioelem.appendChild(t)
172        elif key == 'movies_classification':    # VARCHAR
173            elem = document.createElement('Rating')
174            dvdelement.appendChild(elem)
175            t = document.createTextNode(value)
176            elem.appendChild(t)
177        elif key == 'movies_cast':              # VARCHAR
178            actors = value.split('\n')
179            actorselem = document.createElement('Actors')
180            dvdelement.appendChild(actorselem)
181            for actor in actors:
182                actorsplit = actor.split(_(' as '))
183                actornames = actorsplit[0].split(' ')
184                role = ''
185                firstname = ''
186                lastname = ''
187                if len(actorsplit) > 1:
188                    role = actorsplit[1]
189                if len(actornames) > 1:
190                    firstname = actornames[0]
191                    actornames.pop(0)
192                    for actorname in actornames:
193                        lastname = lastname + actorname + ' '
194                actorelem = document.createElement('Actor')
195                actorselem.appendChild(actorelem)
196                actorelem.setAttribute('FirstName', firstname)
197                actorelem.setAttribute('LastName', lastname)
198                actorelem.setAttribute('Role', role)
199                actorelem.setAttribute('BirthYear', '0')
200                actorelem.setAttribute('CreditedAs', '')
201                actorelem.setAttribute('Voice', 'False')
202                actorelem.setAttribute('Uncredited', 'False')
203                actorelem.setAttribute('MiddleName', '')
204        elif key == 'movies_plot':              # VARCHAR
205            elem = document.createElement('Overview')
206            dvdelement.appendChild(elem)
207            t = document.createTextNode(value)
208            elem.appendChild(t)
209        elif key == 'movies_notes':             # VARCHAR
210            elem = document.createElement('Notes')
211            dvdelement.appendChild(elem)
212            t = document.createTextNode(value)
213            elem.appendChild(t)
214
215    def process_tags(self, document, dvdelement, tagsquery):
216        tagselem = document.createElement('Tags')
217        dvdelement.appendChild(tagselem)
218        for tag in tagsquery.execute().fetchall():
219            value = self.convert_value(tag['name'])
220            tagelem = document.createElement('Tag')
221            tagselem.appendChild(tagelem)
222            tagelem.setAttribute('Name', value)
223            tagelem.setAttribute('FullName', value)
224