From 3aab962a4cf073bb799664624d40d26125db4aa7 Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Fri, 5 May 2006 13:30:01 +0000 Subject: [PATCH] examples/remuxer.py (PlayerWindow.update_scale_cb): Fix a race condition getting the initial cutin time via inserting... Original commit message from CVS: 2006-05-05 Andy Wingo * examples/remuxer.py (PlayerWindow.update_scale_cb): Fix a race condition getting the initial cutin time via inserting whitespace. (all over): UI fixes to make Mike happy. --- ChangeLog | 6 +++- examples/remuxer.py | 94 +++++++++++++++++++++++++++++------------------------ 2 files changed, 56 insertions(+), 44 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2a16d2c..a81838b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,8 +1,12 @@ 2006-05-05 Andy Wingo + * examples/remuxer.py (PlayerWindow.update_scale_cb): Fix a race + condition getting the initial cutin time via inserting whitespace. + (all over): UI fixes to make Mike happy. + * examples/remuxer.py: Updates! Nothing gstreamery, it's all ui, so I won't bother you with the details. - + 2006-04-29 Edward Hervey * examples/gstfile.py: diff --git a/examples/remuxer.py b/examples/remuxer.py index 882750b..b95f14b 100644 --- a/examples/remuxer.py +++ b/examples/remuxer.py @@ -263,9 +263,9 @@ class ProgressDialog(gtk.Dialog): vbox.pack_start(progress, False) self.progresstext = label = gtk.Label('') + label.set_line_wrap(True) label.set_use_markup(True) label.set_alignment(0.0, 0.0) - label.set_selectable(True) label.show() vbox.pack_start(label) self.set_task(task) @@ -350,52 +350,53 @@ class Remuxer(gst.Pipeline): assert stop > start self.fromuri = fromuri - self.touri = touri + self.touri = None + self.start_time = start + self.stop_time = stop + + self.src = self.remuxbin = self.sink = None + self.resolution = UNKNOWN + + self.window = None + self.pdialog = None - self.src = gst.element_make_from_uri(gst.URI_SRC, fromuri) - self.remuxbin = RemuxBin(start, stop) - self.sink = gst.element_make_from_uri(gst.URI_SINK, touri) + self._query_id = -1 + + def do_setup_pipeline(self): + self.src = gst.element_make_from_uri(gst.URI_SRC, self.fromuri) + self.remuxbin = RemuxBin(self.start_time, self.stop_time) + self.sink = gst.element_make_from_uri(gst.URI_SINK, self.touri) self.resolution = UNKNOWN if gobject.signal_lookup('allow-overwrite', self.sink.__class__): - self.sink.connect('allow-overwrite', self._allow_overwrite) + self.sink.connect('allow-overwrite', lambda *x: True) self.add(self.src, self.remuxbin, self.sink) self.src.link(self.remuxbin) self.remuxbin.link(self.sink) - self.window = None - self.pdialog = None - - self.start_time = start - self.stop_time = stop - - self._query_id = -1 + def do_get_touri(self): + chooser = gtk.FileChooserDialog('Save as...', + self.window, + action=gtk.FILE_CHOOSER_ACTION_SAVE, + buttons=(gtk.STOCK_CANCEL, + CANCELLED, + gtk.STOCK_SAVE, + SUCCESS)) + chooser.set_uri(self.fromuri) # to select the folder + chooser.unselect_all() + chooser.set_do_overwrite_confirmation(True) + name = self.fromuri.split('/')[-1][:-4] + '-remuxed.ogg' + chooser.set_current_name(name) + resp = chooser.run() + uri = chooser.get_uri() + chooser.destroy() - def _allow_overwrite(self, sink, uri): - name = self.sink.get_uri() - name = (gst.uri_has_protocol(name, 'file') - and gst.uri_get_location(name) - or name) - m = gtk.MessageDialog(self.window, - gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT, - gtk.MESSAGE_QUESTION, - gtk.BUTTONS_NONE, - ("The file %s already exists. Would you " - "like to replace it?") % name) - b = gtk.Button(stock=gtk.STOCK_CANCEL) - b.show() - m.add_action_widget(b, CANCELLED) - b = gtk.Button('Replace') - b.show() - m.add_action_widget(b, SUCCESS) - txt = ('If you replace an existing file, its contents will be ' - 'overwritten.') - m.format_secondary_text(txt) - resp = m.run() - m.destroy() - return resp == SUCCESS + if resp == SUCCESS: + return uri + else: + return None def _start_queries(self): def do_query(): @@ -470,10 +471,14 @@ class Remuxer(gst.Pipeline): self.emit('done', response) def start(self, main_window): + self.window = main_window + self.touri = self.do_get_touri() + if not self.touri: + return False + self.do_setup_pipeline() bus = self.get_bus() bus.add_signal_watch() bus.connect('message', self._bus_watch) - self.window = main_window if self.window: # can be None if we are debugging... self.window.set_sensitive(False) @@ -485,12 +490,15 @@ class Remuxer(gst.Pipeline): self.pdialog.connect('response', lambda w, r: self.response(r)) self.set_state(gst.STATE_PAUSED) + return True def run(self, main_window): - self.start(main_window) - loop = gobject.MainLoop() - self.connect('done', lambda *x: gobject.idle_add(loop.quit)) - loop.run() + if self.start(main_window): + loop = gobject.MainLoop() + self.connect('done', lambda *x: gobject.idle_add(loop.quit)) + loop.run() + else: + self.resolution = CANCELLED return self.resolution class RemuxBin(gst.Bin): @@ -797,8 +805,8 @@ class PlayerWindow(gtk.Window): if self.p_position != gst.CLOCK_TIME_NONE: value = self.p_position * 100.0 / self.p_duration self.adjustment.set_value(value) - if not had_duration: - self.cutin.set_time(0) + if not had_duration: + self.cutin.set_time(0) return True def main(args): -- 2.7.4