def install(self): """ Install missing plugins """ try: context = GstPbutils.InstallPluginsContext.new() try: context.set_desktop_id('lollypop.desktop') except: pass # Not supported by Ubuntu VIVID details = [] for message in self._messages: detail = \ GstPbutils.missing_plugin_message_get_installer_detail( message) details.append(detail) GstPbutils.install_plugins_async( details, context, self._null) if Lp.notify is not None: GLib.timeout_add( 10000, Lp.notify.send, _("Restart lollypop after installing codecs")) except Exception as e: print("Codecs::__init__(): %s" % e)
def on_gst_element(self, bus, message): if GstPbutils.is_missing_plugin_message(message): if GstPbutils.install_plugins_supported(): details = GstPbutils.missing_plugin_message_get_installer_detail(message) GstPbutils.install_plugins_async([details,], None, self.on_gst_plugin_installed, None) else: self.error_dialog(_("Missing codec"), None, submsg=_("GStreamer is missing a plugin and it could not be automatically installed. Either manually install it or try another quality setting."))
def on_message(self, bus, message): mtype = message.type # print(mtype) if mtype == Gst.MessageType.ERROR: print("we got an error, life is shit") err, debug = message.parse_error() print(err) print(debug) Gst.debug_bin_to_dot_file (self.pipeline, \ Gst.DebugGraphDetails.ALL, 'transmageddon-debug-graph') #self.emit('got-error', err.message) elif mtype == Gst.MessageType.ELEMENT: if GstPbutils.is_missing_plugin_message(message): print("missing something") if self.missingplugin == False: #don't think this is correct if more than one plugin installed self.missingplugin = message GstPbutils.missing_plugin_message_get_description(message) GstPbutils.missing_plugin_message_get_installer_detail( message) self.uridecoder.set_state(Gst.State.NULL) self.emit('missing-plugin') elif mtype == Gst.MessageType.ASYNC_DONE: self.emit('ready-for-querying') elif mtype == Gst.MessageType.EOS: self.usedstreamids = [] #removing multipass cache file when done if (self.streamdata['multipass'] != 0) and (self.streamdata['passcounter'] != self.streamdata['multipass']): if os.access(self.cachefile, os.F_OK): os.remove(self.cachefile) os.remove(self.cachefile + '.mbtree') # print(self.streamdata['passcounter']) self.emit('got-eos') self.pipeline.set_state(Gst.State.NULL) elif mtype == Gst.MessageType.APPLICATION: self.pipeline.set_state(Gst.State.NULL) self.pipeline.remove(self.uridecoder) return True
def _on_element(self, bus, message): if GstPbutils.is_missing_plugin_message(message): if GstPbutils.install_plugins_supported(): details = ( GstPbutils.missing_plugin_message_get_installer_detail( message)) GstPbutils.install_plugins_async( [details], None, self._plugin_installation_complete, None) else: self.emit("error", "Missing codec", "GStreamer is missing a plugin and it could not be " "automatically installed. Either manually install " "it or try another quality setting.", False)
def __getMissingElement(self, message, window_id = 0): if gst.pygst_version < (0, 10, 10): print _("This version of gstreamer can't handle missing elements") return self.errors.append(str(message.structure["type"])) self.errors.append(str(message.structure["detail"])) self.errors.append(str(message.structure["name"])) detail = pbutils.missing_plugin_message_get_installer_detail(message) context = pbutils.InstallPluginsContext() if window_id: context.set_x_id(window_id) msg = pbutils.install_plugins_async([detail], context,self.__pbutils_plugin_installed_cb)
def __message(self, bus, message, librarian): if message.type == Gst.MessageType.EOS: print_d("Stream EOS") if not self._in_gapless_transition: self._source.next_ended() self._end(False) elif message.type == Gst.MessageType.TAG: self.__tag(message.parse_tag(), librarian) elif message.type == Gst.MessageType.ERROR: err, debug = message.parse_error() err = str(err).decode(const.ENCODING, 'replace') self._error(err) elif message.type == Gst.MessageType.STREAM_START: if self._in_gapless_transition: print_d("Stream changed") self._end(False) elif message.type == Gst.MessageType.ASYNC_DONE: if self._active_seeks: song, pos = self._active_seeks.pop(0) if song is self.song: self.emit("seek", song, pos) elif message.type == Gst.MessageType.ELEMENT: message_name = message.get_structure().get_name() if message_name == "missing-plugin": self.stop() details = \ GstPbutils.missing_plugin_message_get_installer_detail( message) if details is not None: message = (_( "No GStreamer element found to handle the following " "media format: %(format_details)r") % {"format_details": details}) print_w(message) context = GstPbutils.InstallPluginsContext.new() # TODO: track success def install_done_cb(*args): Gst.update_registry() res = GstPbutils.install_plugins_async( [details], context, install_done_cb, None) print_d("Gstreamer plugin install result: %r" % res) if res in (GstPbutils.InstallPluginsReturn.HELPER_MISSING, GstPbutils.InstallPluginsReturn.INTERNAL_FAILURE): self._error(message) return True
def on_message(self, bus, message): mtype = message.type # print(mtype) if mtype == Gst.MessageType.ERROR: print("we got an error, life is shit") err, debug = message.parse_error() print(err) print(debug) Gst.debug_bin_to_dot_file(self.pipeline, Gst.DebugGraphDetails.ALL, "transmageddon-debug-graph") # self.emit('got-error', err.message) elif mtype == Gst.MessageType.ELEMENT: if GstPbutils.is_missing_plugin_message(message): print("missing something") if self.missingplugin == False: # don't think this is correct if more than one plugin installed self.missingplugin = message GstPbutils.missing_plugin_message_get_description(message) GstPbutils.missing_plugin_message_get_installer_detail(message) self.uridecoder.set_state(Gst.State.NULL) self.emit("missing-plugin") elif mtype == Gst.MessageType.ASYNC_DONE: self.emit("ready-for-querying") elif mtype == Gst.MessageType.EOS: self.usedstreamids = [] # removing multipass cache file when done if (self.streamdata["multipass"] != 0) and (self.streamdata["passcounter"] != self.streamdata["multipass"]): if os.access(self.cachefile, os.F_OK): os.remove(self.cachefile) os.remove(self.cachefile + ".mbtree") # print(self.streamdata['passcounter']) self.emit("got-eos") self.pipeline.set_state(Gst.State.NULL) elif mtype == Gst.MessageType.APPLICATION: self.pipeline.set_state(Gst.State.NULL) self.pipeline.remove(self.uridecoder) return True
def __getMissingElement(self, message, window_id=0): if gst.pygst_version < (0, 10, 10): print _("This version of gstreamer can't handle missing elements") return self.errors.append(str(message.structure["type"])) self.errors.append(str(message.structure["detail"])) self.errors.append(str(message.structure["name"])) detail = pbutils.missing_plugin_message_get_installer_detail(message) context = pbutils.InstallPluginsContext() if window_id: context.set_x_id(window_id) msg = pbutils.install_plugins_async([detail], context, self.__pbutils_plugin_installed_cb)
def __handle_plugin_missing_message(message, engine): desc = GstPbutils.missing_plugin_message_get_description(message) installer_details = GstPbutils.missing_plugin_message_get_installer_detail(message) LOGGER.warning("A plugin for %s is missing, stopping playback", desc) user_message = _( "A GStreamer 1.x plugin for %s is missing. " "Without this software installed, Exaile will not be able to play the current file. " "Please install the required software on your computer. See %s for details." ) % (desc, MISSING_PLUGIN_URL) # TODO make URL clickable by utilizing xlgui.widgets.dialogs.MessageBar engine.stop() __notify_user_on_error(user_message, engine) if GstPbutils.install_plugins_supported(): if __run_installer_helper(installer_details): return LOGGER.warning("Installation of GStreamer plugins not supported on this platform.")
def __handle_plugin_missing_message(message, engine): desc = GstPbutils.missing_plugin_message_get_description(message) installer_details = GstPbutils.missing_plugin_message_get_installer_detail(message) LOGGER.warn("A plugin for %s is missing, stopping playback", desc) user_message = _( "A GStreamer 1.x plugin for %s is missing. " "Without this software installed, Exaile will not be able to play the current file. " "Please install the required software on your computer. See %s for details." ) % (desc, MISSING_PLUGIN_URL) # TODO make URL clickable by utilizing xlgui.widgets.dialogs.MessageBar engine.stop() __notify_user_on_error(user_message, engine) if GstPbutils.install_plugins_supported(): if __run_installer_helper(installer_details): return LOGGER.warn("Installation of GStreamer plugins not supported on this platform.")
def _start_plugin_installation(self, missing_plugin_messages, confirm_search): install_ctx = GstPbutils.InstallPluginsContext.new() if self._gst_plugins_base_check_version(1, 5, 0): install_ctx.set_desktop_id('org.gnome.Music.desktop') install_ctx.set_confirm_search(confirm_search) startup_id = '_TIME%u' % Gtk.get_current_event_time() install_ctx.set_startup_notification_id(startup_id) installer_details = [] for message in missing_plugin_messages: installer_detail = GstPbutils.missing_plugin_message_get_installer_detail(message) installer_details.append(installer_detail) def on_install_done(res): # We get the callback too soon, before the installation has # actually finished. Do nothing for now. pass GstPbutils.install_plugins_async(installer_details, install_ctx, on_install_done)
def _start_plugin_installation(self, missing_plugin_messages, confirm_search): install_ctx = GstPbutils.InstallPluginsContext.new() if self._gst_plugins_base_check_version(1, 5, 0): install_ctx.set_desktop_id('gnome-music.desktop') install_ctx.set_confirm_search(confirm_search) startup_id = '_TIME%u' % Gtk.get_current_event_time() install_ctx.set_startup_notification_id(startup_id) installer_details = [] for message in missing_plugin_messages: installer_detail = GstPbutils.missing_plugin_message_get_installer_detail(message) installer_details.append(installer_detail) def on_install_done(res): # We get the callback too soon, before the installation has # actually finished. Do nothing for now. pass GstPbutils.install_plugins_async(installer_details, install_ctx, on_install_done)
def install(self): """ Install missing plugins """ if not GstPbutils.install_plugins_supported(): return try: context = GstPbutils.InstallPluginsContext.new() try: context.set_desktop_id('org.gnome.Lollypop.desktop') except: pass # Not supported by Ubuntu VIVID details = [] for message in self._messages: detail = \ GstPbutils.missing_plugin_message_get_installer_detail( message) details.append(detail) GstPbutils.install_plugins_async(details, context, self.__null) except Exception as e: print("Codecs::__init__(): %s" % e)
def install(self): """ Install missing plugins """ try: context = GstPbutils.InstallPluginsContext.new() try: context.set_desktop_id('lollypop.desktop') except: pass # Not supported by Ubuntu VIVID details = [] for message in self._messages: detail = \ GstPbutils.missing_plugin_message_get_installer_detail( message) details.append(detail) GstPbutils.install_plugins_async( details, context, self._null) except Exception as e: print("Codecs::__init__(): %s" % e)