fixed small bug in movie view when no actors could be found in cast
[smewt:smewt.git] / smewt / media / movie / view_movie.tmpl
1 #set movie = $movie
2
3 <%
4 from collections import defaultdict
5 from smewt import SmewtUrl, Media
6 from smewt.media import Movie
7 from smewt.base.utils import pathToUrl, smewtDirectoryUrl, guessCountryCode, tolist
8 from smewt.base import SmewtException
9 import datetime, time
10
11 import_dir = smewtDirectoryUrl('smewt', 'media')
12 flags_dir = smewtDirectoryUrl('smewt', 'media', 'common', 'images', 'flags')
13
14 movieName = movie.title
15 poster = pathToUrl(movie.loresImage)
16
17 def getAll(prop):
18     return ', '.join(movie.get(prop) or [])
19
20 director = getAll('director')
21 writer = getAll('writer')
22 genres = getAll('genres')
23 englishSubsLink = SmewtUrl('action', 'getsubtitles', { 'title': movieName, 'language': 'en' })
24 frenchSubsLink = SmewtUrl('action', 'getsubtitles', { 'title': movieName, 'language': 'fr' })
25
26 playLink = None
27 files = []
28 subtitles = []
29
30 languageFiles = defaultdict(lambda: [])
31
32 for media in tolist(movie.get('files')):
33     files.append(media.filename)
34
35 for subtitle in tolist(movie.get('subtitles')):
36     for subfile in tolist(subtitle.files):
37         subtitleFilename = subfile.filename
38         mediaFilename = [ filename for filename in files if subtitleFilename.startswith(os.path.splitext(filename)[0]) ]
39         mediaFilename = mediaFilename[0] if mediaFilename else '' # FIXME: check len == 1 all the time
40
41         languageFiles[subtitle.language] += [ (mediaFilename, subtitleFilename) ]
42
43
44 # prepare link for playing movie without subtitles
45 nfile = 1
46 args = {}
47 for f in sorted(files):
48     args['filename%d' % nfile] = f
49     nfile += 1
50
51 if args:
52     playLink = SmewtUrl('action', 'play', args)
53
54
55 # prepare links for playing movie with subtitles
56 for lang, files in languageFiles.items():
57     nfile = 1
58     args = {}
59
60     for (mediaFilename, subtitleFilename) in sorted(files):
61         args['filename%d' % nfile] = mediaFilename
62         args['subtitle%d' % nfile] = subtitleFilename
63         nfile += 1
64
65     subtitles.append( {'languageImage': flags_dir + '/%s.png' % (lang,),
66                         'url': SmewtUrl('action', 'play', args)} )
67
68 subtitles.sort(key = lambda x: x['languageImage'])
69
70 def getComments(md):
71     results = []
72
73     for comment in tolist(md.get('comments')):
74         results += [ (comment.author,
75                       datetime.datetime.fromtimestamp(comment.date).ctime(),
76                       comment.text) ]
77
78     return sorted(results, key = lambda x: x[1])
79
80 comments = getComments(movie)
81
82 qtitle = movie.title.replace('\'', '\\\'')
83
84
85
86 %>
87
88 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
89 <html xmlns="http://www.w3.org/1999/xhtml">
90
91 <head>
92 <title>single movie display</title>
93 <script type="text/javascript" src="file://$(import_dir)/3rdparty/tabber.js"></script>
94 <link rel="stylesheet" href="file://$(import_dir)/movie/movies.css" type="text/css">
95
96   <script type="text/javascript" language="javascript" src="file://$(import_dir)/3rdparty/dataTables/media/js/jquery.js"></script>
97
98   <script type="text/javascript" charset="utf-8">
99   #raw
100
101     function addComment(form, id, url) {
102         mainWidget.addComment(url, 'Me', form[id].value);
103     }
104
105   #end raw
106   </script>
107
108 </head>
109
110 <body>
111
112 <img src="file://$poster" />
113
114 <div class="rightshifted">
115   <h1>$movieName</h1>
116
117 #if movieName != 'Unknown':
118   <!--
119   <a href="$englishSubsLink">Get missing English subtitles</a>
120   <a href="$frenchSubsLink">Get missing French subtitles</a>
121   -->
122   #if playLink:
123     <a href="$playLink">Play Movie</a>
124     #for s in subtitles
125        <a href="$s.url"><img src="file://$s.languageImage" /></a>
126     #end for
127   #end if
128 #end if
129 </div>
130
131 #if movieName == 'Unknown':
132 <p>&nbsp;</p>
133   #for f, url in [ (f, SmewtUrl('action', 'play', { 'filename1': f.filename })) for f in movie.get('files', []) ]:
134
135     <div class="singlefile"><a href="$url"><i>$f.filename</i></a></div>
136   #end for
137
138
139 #else
140
141 <div class="tabber">
142   <div class="tabbertab">
143     <h2>Overview</h2>
144     <p><b>year:</b> $movie.year</p>
145     <p><b>rating:</b> $movie.rating</p>
146     <p><b>director:</b> $director</p>
147     <p><b>writer:</b> $writer</p>
148     <p><b>genres:</b> $genres</p>
149     #if $movie.plot:
150       <p><b>plot:</b> $movie.plot[0]</p>
151       #if len($movie.plot) > 1:
152         <p><b>detailed plot:</b> $movie.plot[1]</p>
153       #end if
154     #end if
155   </div>
156
157   <div class="tabbertab">
158     <h2>Cast</h2>
159     #if 'cast' in movie
160       #for person_role in $movie.cast
161         <p>$person_role</p>
162       #end for
163     #end if
164     <p></p>
165   </div>
166
167   <div class="tabbertab">
168     <h2>Comments</h2>
169           #if $comments
170             #for author, atime, comment in $comments
171               <p>Comment by <b>$author</b> at $atime:<br/>
172               <div class="comment"><pre>$comment</pre></div> </p>
173             #end for
174           #else
175             <p><em>No Comments yet</em></p>
176           #end if
177
178           <form>
179           <textarea rows="4" columns="80" name="text"></textarea>
180           <button type="button" onClick="addComment(this.form, 'text', '$qtitle')">Post new comment</button>
181           </form>
182
183   </div>
184
185   <div class="tabbertab">
186     <h2>Files</h2>
187
188 <%
189 allfiles = tolist(movie.get('files'))
190 for sub in tolist(movie.get('subtitles')):
191   allfiles += tolist(sub.get('files'))
192
193 files = [ (f,
194          SmewtUrl('action', 'play', { 'filename1': f.filename }),
195          time.ctime(f.lastModified)) for f in allfiles ]
196 %>
197
198     #for f, url, mtime in files
199
200     <div class="singlefile">
201         <p><a href="$url">$f.filename</a></p>
202         #for k, v in f.items()
203           #if k == 'lastModified':
204             <p><b>last scanned on</b>: $mtime</p>
205           #elif k not in ('metadata', 'filename')
206             <p><b>$k</b>: $v</p>
207           #end if
208         #end for
209     </div>
210     #end for
211
212
213 </div>
214 #end if
215
216 </body>
217 </html>