| 358 | | print "Please be patient, the textbuffer slows on large/long files." |
|---|
| 359 | | for event, node in doc: |
|---|
| 360 | | if event=='START_ELEMENT' and node.nodeName=='import': |
|---|
| 361 | | doc.expandNode(node) |
|---|
| 362 | | self.pipeline.set_state(gst.STATE_NULL) |
|---|
| 363 | | self.current_file = node.getAttribute('src') |
|---|
| 364 | | self.playbin.props.uri = "file://" + self.current_file |
|---|
| 365 | | self.pipeline.set_state(gst.STATE_PAUSED); |
|---|
| 366 | | elif event=='START_ELEMENT' and node.nodeName=='clip': |
|---|
| 367 | | doc.expandNode(node) |
|---|
| 368 | | # load data |
|---|
| 369 | | start_time = node.getAttribute('start') |
|---|
| 370 | | end_time = node.getAttribute('end') |
|---|
| 371 | | track = node.getAttribute('track') |
|---|
| 372 | | title = node.getAttribute('title') |
|---|
| | 369 | file_imports = doc.getElementsByTagName('import') |
|---|
| | 370 | for node in file_imports: |
|---|
| | 371 | self.pipeline.set_state(gst.STATE_NULL) |
|---|
| | 372 | self.current_file = node.getAttribute('src') |
|---|
| | 373 | self.playbin.props.uri = "file://" + self.current_file |
|---|
| | 374 | self.pipeline.set_state(gst.STATE_PAUSED); |
|---|
| | 375 | self.pipeline_duration = 10 |
|---|
| | 376 | clips = doc.getElementsByTagName('clip') |
|---|
| | 377 | self.progress.props.fraction = 0 |
|---|
| | 378 | total_clips = len(clips) |
|---|
| | 379 | x=0 |
|---|
| | 380 | for node in clips: |
|---|
| | 381 | # load data |
|---|
| | 382 | start_time = node.getAttribute('start') |
|---|
| | 383 | end_time = node.getAttribute('end') |
|---|
| | 384 | track = node.getAttribute('track') |
|---|
| | 385 | title = node.getAttribute('title') |
|---|
| | 386 | |
|---|
| | 387 | #don't force child nodes :-) |
|---|
| | 388 | if node.getElementsByTagName('desc')[0].firstChild != None: |
|---|
| | 389 | desc = node.getElementsByTagName('desc')[0].firstChild.nodeValue |
|---|
| | 390 | |
|---|
| | 391 | #Make sure last_time has a record for the track. |
|---|
| | 392 | if not last_time.has_key(track): |
|---|
| | 393 | last_time[track]=None |
|---|
| 382 | | # If a gap exists between previous end and current start add a mark to end previous clip. |
|---|
| 383 | | if last_time[track] != start_time and last_time[track]!=None: |
|---|
| 384 | | if track.startswith('subtitle'): #FIXME not nice with multiple subtitle tracks. |
|---|
| 385 | | self.times["subtitle"].append(last_time[track]) |
|---|
| 386 | | else: |
|---|
| 387 | | self.times["chapter"].append(last_time[track]) |
|---|
| 388 | | mark = self.text.create_mark(last_time[track],self.text.get_end_iter(),True) |
|---|
| 389 | | mark.set_visible(self.visible_marks) |
|---|
| 390 | | ended_previous = True |
|---|
| 391 | | else: |
|---|
| 392 | | ended_previous = False |
|---|
| 393 | | |
|---|
| 394 | | # Add current entry. |
|---|
| 395 | | if desc != '': |
|---|
| 396 | | if track.startswith('subtitle') and not title==last_speaker: |
|---|
| 397 | | self.text.insert(self.text.get_end_iter(),"\n\n"+title+":\n") |
|---|
| 398 | | last_speaker = title |
|---|
| 399 | | elif track.startswith('subtitle'): |
|---|
| 400 | | #Handles spaces between clips. FIXME |
|---|
| 401 | | self.text.insert(self.text.get_end_iter()," ") |
|---|
| 402 | | else: |
|---|
| 403 | | self.text.insert(self.text.get_end_iter(),"\n\nChapter " + str(len(self.times["chapter"])+1) + ": ") |
|---|
| 404 | | |
|---|
| 405 | | #Create start mark. |
|---|
| 406 | | if track.startswith('subtitle'): |
|---|
| 407 | | self.times["subtitle"].append(start_time) |
|---|
| 408 | | self.last_type_def = title + ":" |
|---|
| 409 | | else: |
|---|
| 410 | | self.times["chapter"].append(start_time) |
|---|
| 411 | | self.last_type_def = ')' |
|---|
| 412 | | mark = self.text.create_mark(start_time,self.text.get_end_iter(),True) |
|---|
| 413 | | mark.set_visible(self.visible_marks) |
|---|
| 414 | | |
|---|
| 415 | | #Insert and tag speaker string. (will be invisible) |
|---|
| 416 | | self.text.insert_with_tags(self.text.get_end_iter(),title,self.tag_speaker) |
|---|
| 417 | | |
|---|
| 418 | | #Insert text. |
|---|
| 419 | | self.text.insert(self.text.get_end_iter(),desc.strip()) |
|---|
| 420 | | #Change mark gravity. |
|---|
| 421 | | ##Cannot change mark gravity? Whats with that? FIXME |
|---|
| 422 | | #Underline contents. |
|---|
| 423 | | clip_iter = self.text.get_iter_at_mark(mark) |
|---|
| 424 | | if not clip_iter.starts_word(): |
|---|
| 425 | | clip_iter.forward_word_end() |
|---|
| 426 | | clip_iter.backward_word_start() |
|---|
| 427 | | self.text.apply_tag(self.tag_clip,clip_iter,self.text.get_end_iter()) |
|---|
| 428 | | last_time[track] = end_time |
|---|
| 429 | | elif not ended_previous: |
|---|
| 430 | | if track.startswith('subtitle'): |
|---|
| 431 | | self.times["subtitle"].append(start_time) |
|---|
| 432 | | else: |
|---|
| 433 | | self.times["chapter"].append(start_time) |
|---|
| 434 | | mark = self.text.create_mark(start_time,self.text.get_end_iter(),True) |
|---|
| 435 | | mark.set_visible(self.visible_marks) |
|---|
| | 418 | #Create start mark. |
|---|
| | 419 | if track.startswith('subtitle'): |
|---|
| | 420 | self.times["subtitle"].append(start_time) |
|---|
| | 421 | self.last_type_def = title + ":" |
|---|
| | 422 | else: |
|---|
| | 423 | self.times["chapter"].append(start_time) |
|---|
| | 424 | self.last_type_def = ')' |
|---|
| | 425 | mark = self.text.create_mark(start_time,self.text.get_end_iter(),True) |
|---|
| | 426 | mark.set_visible(self.visible_marks) |
|---|
| | 427 | |
|---|
| | 428 | #Insert and tag speaker string. (will be invisible) |
|---|
| | 429 | self.text.insert_with_tags(self.text.get_end_iter(),title,self.tag_speaker) |
|---|
| | 430 | |
|---|
| | 431 | #Insert text. |
|---|
| | 432 | self.text.insert(self.text.get_end_iter(),desc.strip()) |
|---|
| | 433 | #Change mark gravity. |
|---|
| | 434 | ##Cannot change mark gravity? Whats with that? FIXME |
|---|
| | 435 | #Underline contents. |
|---|
| | 436 | clip_iter = self.text.get_iter_at_mark(mark) |
|---|
| | 437 | if not clip_iter.starts_word(): |
|---|
| | 438 | clip_iter.forward_word_end() |
|---|
| | 439 | clip_iter.backward_word_start() |
|---|
| | 440 | self.text.apply_tag(self.tag_clip,clip_iter,self.text.get_end_iter()) |
|---|
| | 441 | last_time[track] = end_time |
|---|
| | 442 | elif not ended_previous: |
|---|
| | 443 | if track.startswith('subtitle'): |
|---|
| | 444 | self.times["subtitle"].append(start_time) |
|---|
| | 445 | else: |
|---|
| | 446 | self.times["chapter"].append(start_time) |
|---|
| | 447 | mark = self.text.create_mark(start_time,self.text.get_end_iter(),True) |
|---|
| | 448 | mark.set_visible(self.visible_marks) |
|---|
| | 449 | x += 1 |
|---|
| | 450 | self.progress.props.fraction = x/total_clips |
|---|