8 VERSION_STRING
='#!VcrIndex 1.1\n'
9 PREV_VERSION_STRING
='#!VcrIndex 1.0\n'
12 def __init__(self
, name
):
17 self
.basename
= os
.path
.basename(name
)
27 header
= fp
.readline()
28 if header
== PREV_VERSION_STRING
:
29 print 'Converting old-format database...'
30 data
= fp
.read(100000)
31 self
.movies
= eval(data
)
32 for m
in self
.movies
.keys():
45 if header
<> VERSION_STRING
:
46 print 'VcrIndex: incorrect version string:', header
49 data
= fp
.read(100000)
50 self
.movies
= eval(data
)
52 # Save database to given file (or same file as read from if no
59 raise error
, 'No filename given'
67 os
.rename(name
, bupname
)
71 data
= str(self
.movies
)
72 fp
.write(VERSION_STRING
)
78 # Get a list of movie names in tape order
80 def get_movienames(self
):
81 names
= self
.movies
.keys()
84 sorted.append(self
.movies
[name
]['-ALL-']['START'], name
)
87 for pos
, name
in sorted:
91 # Get a list of scene names in tape order
93 def get_scenenames(self
):
96 scenedict
= self
.movies
[self
.curmovie
]
97 names
= scenedict
.keys()
100 sorted.append(scenedict
[name
], name
)
103 for pos
, name
in sorted:
107 # Get a list of scene ids (format '00:02:32:12 name') in tape order
109 def get_sceneids(self
):
110 if not self
.curmovie
:
112 scenedict
= self
.movies
[self
.curmovie
]
113 names
= scenedict
.keys()
116 sorted.append(scenedict
[name
]['START'], name
)
119 for pos
, name
in sorted:
120 str = '%02d:%02d:%02d:%02d ' % pos
121 rv
.append(str + name
)
124 # Does a movie exist?
126 def movie_exists(self
, name
):
127 return self
.movies
.has_key(name
)
131 def movie_select(self
, name
):
132 if not self
.movies
.has_key(name
):
133 raise error
, 'No such movie: '+name
137 # Get movie dictionary, or raise an error if no current movie.
139 def _getmoviedict(self
):
140 if not self
.curmovie
:
141 raise error
, 'No current movie'
142 return self
.movies
[self
.curmovie
]
146 def movie_rename(self
, newname
):
147 scenedict
= self
._getmoviedict
()
148 if self
.movie_exists(newname
):
149 raise error
, 'Movie already exists: '+newname
150 del self
.movies
[self
.curmovie
]
151 self
.movies
[newname
] = scenedict
152 self
.curmovie
= newname
157 def movie_copy(self
, newname
):
158 scenedict
= self
._getmoviedict
()
159 if self
.movie_exists(newname
):
160 raise error
, 'Movie already exists: '+newname
162 for k
in scenedict
.keys():
163 olddata
= scenedict
[k
]
165 for i
in olddata
.keys():
166 newdata
[i
] = olddata
[i
]
168 self
.movies
[newname
] = newdict
169 self
.curmovie
= newname
174 def movie_delete(self
):
175 if not self
.curmovie
:
176 raise error
, 'No current movie'
177 del self
.movies
[self
.curmovie
]
182 # Create a new movie.
184 def movie_new(self
, name
, pos
):
185 if self
.movie_exists(name
):
186 raise error
, 'Movie already exists: '+name
189 newsdict
['START'] = pos
190 newdict
['-ALL-'] = newsdict
191 self
.movies
[name
] = newdict
196 # Does a scene exist?
198 def scene_exists(self
, name
):
199 scenedict
= self
._getmoviedict
()
200 return scenedict
.has_key(name
)
202 # Select a current scene.
204 def scene_select(self
, name
):
205 scenedict
= self
._getmoviedict
()
206 if not scenedict
.has_key(name
):
207 raise error
, 'No such scene: '+name
212 def scene_rename(self
, newname
):
213 scenedict
= self
._getmoviedict
()
214 if not self
.curscene
:
215 raise error
, 'No current scene'
216 if scenedict
.has_key(newname
):
217 raise error
, 'Scene already exists: '+newname
218 if self
.curscene
== '-ALL-':
219 raise error
, 'Cannot rename -ALL-'
220 scenedict
[newname
] = scenedict
[self
.curscene
]
221 del scenedict
[self
.curscene
]
222 self
.curscene
= newname
227 def scene_copy(self
, newname
):
228 scenedict
= self
._getmoviedict
()
229 if not self
.curscene
:
230 raise error
, 'No current scene'
231 if scenedict
.has_key(newname
):
232 raise error
, 'Scene already exists: '+newname
233 scenedict
[newname
] = scenedict
[self
.curscene
]
234 self
.curscene
= newname
239 def scene_delete(self
):
240 scenedict
= self
._getmoviedict
()
241 if not self
.curscene
:
242 raise error
, 'No current scene'
243 if self
.curscene
== '-ALL-':
244 raise error
, 'Cannot delete -ALL-'
245 del scenedict
[self
.curscene
]
251 def scene_new(self
, newname
, pos
):
252 scenedict
= self
._getmoviedict
()
253 if scenedict
.has_key(newname
):
254 raise error
, 'Scene already exists: '+newname
256 newdict
['START'] = pos
257 scenedict
[newname
] = newdict
258 self
.curscene
= newname
263 def _getscenedata(self
):
264 scenedict
= self
._getmoviedict
()
265 if not self
.curscene
:
266 raise error
, 'No current scene'
267 return scenedict
[self
.curscene
]
269 # Data manipulation routines.
272 return self
._getscenedata
()['START']
274 def pos_set(self
, pos
):
275 data
= self
._getscenedata
()
279 def comment_get(self
):
280 data
= self
._getscenedata
()
281 if data
.has_key('COMMENT'):
282 return data
['COMMENT']
286 def comment_set(self
, comment
):
287 data
= self
._getscenedata
()
288 data
['COMMENT'] = comment
291 # Get the scene id of the current scene.
293 def get_cursceneid(self
):
294 pos
= self
._getscenedata
()['START']
295 str = '%02d:%02d:%02d:%02d ' % pos
296 return str + self
.curscene
298 # Convert a scene id to a scene name.
300 def scene_id2name(self
, id):
301 pos
= string
.find(id, ' ')
303 raise error
, 'Not a scene id: '+id
306 # Select a scene given a position.
308 def pos_select(self
, pos
):
310 movies
= self
.get_movienames()
312 mpos
= self
.movies
[movie
]['-ALL-']['START']
317 raise error
, 'Scene before BOT'
319 self
.movie_select(prevmovie
)
320 scenes
= self
.get_scenenames()
321 scenedict
= self
._getmoviedict
()
324 if scenedict
[scene
]['START'] > pos
:
327 self
.scene_select(prevscene
)