def play(self): if not self.parsed: command = " ! ".join(self.command) debug("launching: '%s'" % command) try: self.pipeline = gst.parse_launch(command) bus = self.pipeline.get_bus() assert not self.connected_signals self.connected_signals = [] for name, signal, callback in self.signals: if name: element = self.pipeline.get_by_name(name) else: element = bus sid = element.connect(signal, callback) self.connected_signals.append((element, sid)) self.parsed = True except gobject.GError, e: show_error("GStreamer error when creating pipeline", str(e)) self.error = str(e) self.eos = True self.done() return bus.add_signal_watch() watch_id = bus.connect("message", self.on_message) self.watch_id = watch_id
def edit_record(self): try: record_id = self.records[self.listbox.index(self.listbox.curselection())].id except: show_error("please choose a record") return self.controller.show_frame("EditRecordPage", record_id)
def play(self): if not self.parsed: command = ' ! '.join(self.command) debug('launching: \'%s\'' % command) try: self.pipeline = gst.parse_launch(command) bus = self.pipeline.get_bus() assert not self.connected_signals self.connected_signals = [] for name, signal, callback in self.signals: if name: element = self.pipeline.get_by_name(name) else: element = bus sid = element.connect(signal, callback) self.connected_signals.append(( element, sid, )) self.parsed = True except gobject.GError, e: show_error('GStreamer error when creating pipeline', str(e)) self.error = str(e) self.eos = True self.done() return bus.add_signal_watch() watch_id = bus.connect('message', self.on_message) self.watch_id = watch_id
def connect(self): try: self.mydb = mysql.connector.connect(host="localhost", user="******", passwd="", database="android_records") except: show_error("Connection to Database failed") self.mycursor = self.mydb.cursor()
def delete_input(self): try: listbox_index = self.listbox.index(self.listbox.curselection()) except: show_error("please choose an element") return EditRecordPage.dao.connect() EditRecordPage.dao.delete_input(self.inputs[listbox_index].id) EditRecordPage.dao.close_connection() self.update_frame(self.target_record_id)
def delete_record(self): msg_box = messagebox.askyesno("", "Are you sure you want to delete the chosen record?") print(msg_box) if not msg_box : return RecordPage.dao.connect() try: RecordPage.dao.delete_record(self.records[self.listbox.index(self.listbox.curselection())].id) except: show_error("please choose a record") RecordPage.dao.close_connection() self.update_frame()
def install_plugin_cb(self, result): if result in (gst.pbutils.INSTALL_PLUGINS_SUCCESS, gst.pbutils.INSTALL_PLUGINS_PARTIAL_SUCCESS): gst.update_registry() self.restart() return if result == gst.pbutils.INSTALL_PLUGINS_USER_ABORT: self.error = _("Plugin installation aborted.") global user_canceled_codec_installation user_canceled_codec_installation = True self.done() return self.done() show_error("Error", "failed to install plugins: %s" % gobject.markup_escape_text(str(result)))
def start_record(self): try: self.smartphone = self.smartphones[self.listbox.index(self.listbox.curselection())] except: show_error("please choose a smartphone") return if self.smartphone.get_status() == "unauthorized": show_error("device unauthorized\nplease accept the RSA-key on the smartphone") return self.start_button.config(state=tk.DISABLED) self.stop_button.config(state=tk.NORMAL) self.listbox.config(state=tk.DISABLED) self.replay_button.config(state=tk.DISABLED) self.smartphone.start_record(self)
def install_plugin_cb(self, result): if result in (gst.pbutils.INSTALL_PLUGINS_SUCCESS, gst.pbutils.INSTALL_PLUGINS_PARTIAL_SUCCESS): gst.update_registry() self.restart() return if result == gst.pbutils.INSTALL_PLUGINS_USER_ABORT: self.error = _('Plugin installation aborted.') global user_canceled_codec_installation user_canceled_codec_installation = True self.done() return self.done() show_error('Error', 'failed to install plugin!')
def init(self): self.encoders = { 'audio/x-vorbis': self.add_oggvorbis_encoder, 'audio/x-flac': self.add_flac_encoder, 'audio/x-wav': self.add_wav_encoder, 'audio/mpeg': self.add_mp3_encoder, 'audio/x-m4a': self.add_aac_encoder, 'audio/ogg; codecs=opus': self.add_opus_encoder, 'gst-profile': self.add_audio_profile, } self.add_command('audiorate') self.add_command('audioconvert') self.add_command('audioresample') # audio resampling support if self.output_resample: self.add_command('audio/x-raw-int,rate=%d' % self.resample_rate) self.add_command('audioconvert') self.add_command('audioresample') if self.force_mono: self.add_command('audio/x-raw-int,channels=1') self.add_command('audioconvert') encoder = self.encoders[self.output_type]() if not encoder: # TODO: is this used ? # TODO: add proper error management when an encoder cannot be created show_error(_('Error', "Cannot create a decoder for \'%s\' format.") % self.output_type) return self.add_command(encoder) uri = gnomevfs.URI(self.output_filename) dirname = uri.parent if dirname and not gnomevfs.exists(dirname): log('Creating folder: \'%s\'' % dirname) if not vfs_makedirs(str(dirname)): show_error('Error', _("Cannot create \'%s\' folder.") % dirname) return self.add_command('%s location="%s"' % ( gstreamer_sink, encode_filename(self.output_filename))) if self.overwrite and vfs_exists(self.output_filename): log('overwriting \'%s\'' % beautify_uri(self.output_filename)) vfs_unlink(self.output_filename)
def init(self): self.encoders = { 'audio/x-vorbis': self.add_oggvorbis_encoder, 'audio/x-flac': self.add_flac_encoder, 'audio/x-wav': self.add_wav_encoder, 'audio/mpeg': self.add_mp3_encoder, 'audio/x-m4a': self.add_aac_encoder, 'audio/ogg; codecs=opus': self.add_opus_encoder, 'gst-profile': self.add_audio_profile, } self.add_command('audiorate tolerance=10000000') self.add_command('audioconvert') self.add_command('audioresample') # audio resampling support if self.output_resample: self.add_command('audio/x-raw-int,rate=%d' % self.resample_rate) self.add_command('audioconvert') self.add_command('audioresample') if self.force_mono: self.add_command('audio/x-raw-int,channels=1') self.add_command('audioconvert') encoder = self.encoders[self.output_type]() if not encoder: # TODO: is this used ? # TODO: add proper error management when an encoder cannot be created show_error( _('Error', "Cannot create a decoder for \'%s\' format.") % self.output_type) return self.add_command(encoder) uri = gnomevfs.URI(self.output_filename) dirname = uri.parent if dirname and not gnomevfs.exists(dirname): log('Creating folder: \'%s\'' % dirname) if not vfs_makedirs(str(dirname)): show_error('Error', _("Cannot create \'%s\' folder.") % dirname) return self.add_command( '%s location="%s"' % (gstreamer_sink, encode_filename(self.output_filename)))
def choose_record(self): try: target_input = self.inputs[self.listbox.index(self.listbox.curselection())] except: show_error("please choose an element") return self.window = tk.Toplevel(self) listbox = tk.Listbox(self.window) listbox.pack() RecordPage.dao.connect() records = RecordPage.dao.get_records() RecordPage.dao.close_connection() i = 1 for record in records: listbox.insert(tk.END, str(i) + ". " + record.title) i += 1 btn = tk.Button(self.window, text="Integrate", command=lambda: self.integrate_record(records[listbox.index(listbox.curselection())],target_input)) btn.pack()
def update_frame(self, optional): self.target_record_id = optional self.listbox.delete(0, tk.END) EditRecordPage.dao.connect() self.inputs = EditRecordPage.dao.get_inputs(self.target_record_id) EditRecordPage.dao.close_connection() if len(self.inputs) == 0: show_error("no elements left, record was deleted") EditRecordPage.dao.connect() EditRecordPage.dao.delete_record(self.target_record_id) EditRecordPage.dao.close_connection() self.controller.show_frame("RecordPage") return i = 1 for input in self.inputs: self.listbox.insert(tk.END, str(i) + ". Delay: " + str(input.delay)) i += 1
def install_plugin_cb(self, result): if result in (gst.pbutils.INSTALL_PLUGINS_SUCCESS, gst.pbutils.INSTALL_PLUGINS_PARTIAL_SUCCESS): gst.update_registry() self.parsed = False self.duration = None self.finished() vfs_unlink(self.output_filename) self.play() return self.done() if result == gst.pbutils.INSTALL_PLUGINS_USER_ABORT: dialog = gtk.MessageDialog(parent=None, flags=gtk.DIALOG_MODAL, type=gtk.MESSAGE_INFO, buttons=gtk.BUTTONS_OK, message_format='Plugin installation aborted.') dialog.run() dialog.hide() return show_error('Error', 'failed to install plugins: %s' % gobject.markup_escape_text(str(result)))
def vfs_rename(original, newname): """Rename a gnomevfs file""" uri = gnomevfs.URI(newname) dirname = uri.parent if dirname and not gnomevfs.exists(dirname): log('Creating folder: \'%s\'' % dirname) if not vfs_makedirs(str(dirname)): show_error(_('Cannot create folder!'), unquote_filename(dirname.path)) return 'cannot-create-folder' try: gnomevfs.xfer_uri(gnomevfs.URI(original), uri, gnomevfs.XFER_REMOVESOURCE, gnomevfs.XFER_ERROR_MODE_ABORT, gnomevfs.XFER_OVERWRITE_MODE_ABORT ) except Exception as error: # TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. # or an option to stop all processing. show_error(_('Error while renaming file!'), '%s: %s' % (beautify_uri(newname), error)) return 'cannot-rename-file'
def choose_record(self): try: smartphone = self.smartphones[self.listbox.index(self.listbox.curselection())] except: show_error("please choose a smartphone") return if smartphone.get_status() == "unauthorized": show_error("device unauthorized\nplease accept the RSA-key on the smartphone") return self.window = tk.Toplevel(self) listbox = tk.Listbox(self.window) listbox.pack() RecordPage.dao.connect() records = RecordPage.dao.get_records() RecordPage.dao.close_connection() i = 1 for record in records: listbox.insert(tk.END, str(i) + ". " + record.title) i += 1 btn = tk.Button(self.window, text="Replay", command=lambda: self.replay_record(records[listbox.index(listbox.curselection())], smartphone)) btn.pack()
def vfs_rename(original, newname): """Rename a gnomevfs file""" uri = gnomevfs.URI(newname) dirname = uri.parent if dirname and not gnomevfs.exists(dirname): log('Creating folder: \'%s\'' % dirname) if not vfs_makedirs(str(dirname)): show_error(_('Cannot create folder!'), unquote_filename(dirname.path)) return 'cannot-create-folder' try: gnomevfs.xfer_uri(gnomevfs.URI(original), uri, gnomevfs.XFER_REMOVESOURCE, gnomevfs.XFER_ERROR_MODE_ABORT, gnomevfs.XFER_OVERWRITE_MODE_ABORT) except Exception as error: # TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. # or an option to stop all processing. show_error(_('Error while renaming file!'), '%s: %s' % (beautify_uri(newname), error)) return 'cannot-rename-file'
def edit_delay(self): try: listbox_index = self.listbox.index(self.listbox.curselection()) except: show_error("please choose an element") return try: new_delay = int(self.delay_input.get()) except: show_error("please enter a numeric value") return if new_delay > 60000: show_error("new delay is to hight\nmust be <=60000") return else: EditRecordPage.dao.connect() EditRecordPage.dao.update_input_delay(self.inputs[listbox_index].id, new_delay) EditRecordPage.dao.close_connection() self.update_frame(self.target_record_id) self.delay_input.delete(0, tk.END)
def safe_record(self): record_title = self.record_title_input.get() if record_title == "": show_error("Record title to short") return elif len(record_title) > 100: show_error("Record title to long\nmax character: 100") return RecordPage.dao.connect() is_available = RecordPage.dao.is_record_title_available(record_title) RecordPage.dao.close_connection() if not is_available: show_error("title is already taken") return self.window.destroy() self.smartphone.stop_record(record_title) self.stop_button.config(state=tk.DISABLED) self.start_button.config(state=tk.NORMAL) self.listbox.config(state=tk.NORMAL) self.replay_button.config(state=tk.NORMAL)
def on_error(self, err): # pass show_error("<b>%s</b>" % _("GStreamer Error:"), "%s\n<i>(%s)</i>" % (err, self.sound_file.filename_for_display))
def add(self, sound_file): output_filename = self.window.prefs.generate_filename(sound_file) path = urlparse(output_filename) [2] path = unquote_filename(path) exists = True try: gnomevfs.get_file_info(gnomevfs.URI((output_filename))) except gnomevfs.NotFoundError: exists = False except gnomevfs.AccessDeniedError: self.error_count += 1 msg = _('Access denied: \'%s\'' % output_filename) log(msg) show_error(msg, '') raise ConverterQueueError() return except: self.error_count += 1 msg = 'Invalid URI: \'%s\'' % output_filename log(msg) show_error(msg, '') raise ConverterQueueError() return # do not overwrite source file !! if output_filename == sound_file.uri: self.error_count += 1 show_error(_('Cannot overwrite source file(s)!'), '') raise ConverterQueueCanceled() if exists: if self.overwrite_action is not None: result = self.overwrite_action else: dialog = self.window.existsdialog dpath = os.path.basename(path) dpath = gobject.markup_escape_text(dpath) msg = \ _('The output file <i>%s</i>\n exists already.\n '\ 'Do you want to skip the file, overwrite it or'\ ' cancel the conversion?\n') % dpath dialog.message.set_markup(msg) dialog.set_transient_for(self.window.widget) if self.overwrite_action is not None: dialog.apply_to_all.set_active(True) else: dialog.apply_to_all.set_active(False) result = dialog.run() dialog.hide() if dialog.apply_to_all.get_active(): if result == 1 or result == 0: self.overwrite_action = result if result == 1: # overwrite try: vfs_unlink(output_filename) except gnomevfs.NotFoundError: pass elif result == 0: # skip file return else: # cancel operation raise ConverterQueueCanceled() c = Converter(sound_file, output_filename, self.window.prefs.get_string('output-mime-type'), self.window.prefs.get_int('delete-original'), self.window.prefs.get_int('output-resample'), self.window.prefs.get_int('resample-rate'), self.window.prefs.get_int('force-mono'), ) c.set_vorbis_quality(self.window.prefs.get_float('vorbis-quality')) c.set_aac_quality(self.window.prefs.get_int('aac-quality')) c.set_flac_compression(self.window.prefs.get_int('flac-compression')) c.set_wav_sample_width(self.window.prefs.get_int('wav-sample-width')) c.set_audio_profile(self.window.prefs.get_string('audio-profile')) quality = { 'cbr': 'mp3-cbr-quality', 'abr': 'mp3-abr-quality', 'vbr': 'mp3-vbr-quality' } mode = self.window.prefs.get_string('mp3-mode') c.set_mp3_mode(mode) c.set_mp3_quality(self.window.prefs.get_int(quality[mode])) c.init() c.add_listener('finished', self.on_task_finished) self.add_task(c)
def on_error(self, err): #pass self.error = err show_error('<b>%s</b>' % _('GStreamer Error:'), '%s\n<i>(%s)</i>' % (err, self.sound_file.filename_for_display))
def on_error(self, err): #pass self.error = err show_error( '<b>%s</b>' % _('GStreamer Error:'), '%s\n<i>(%s)</i>' % (err, self.sound_file.filename_for_display))