Kanjut SHELL
Server IP : 172.16.15.8  /  Your IP : 18.119.19.205
Web Server : Apache
System : Linux zeus.vwu.edu 4.18.0-553.27.1.el8_10.x86_64 #1 SMP Wed Nov 6 14:29:02 UTC 2024 x86_64
User : apache ( 48)
PHP Version : 7.2.24
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON
Directory (0555) :  /tmp/../bin/

[  Home  ][  C0mmand  ][  Upload File  ]

Current File : //tmp/../bin/gnome-abrt
#!/usr/libexec/platform-python
# coding=UTF-8

## Copyright (C) 2012 ABRT team <abrt-devel-list@redhat.com>
## Copyright (C) 2001-2005 Red Hat, Inc.

## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.

## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.

## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA  02110-1335  USA

import os
import sys
import logging
import signal
import locale
from argparse import ArgumentParser
from gnome_abrt.wrappers import (show_events_list_dialog,
                                 can_connect_to_xserver)

if not can_connect_to_xserver():
    sys.stderr.write("Cannot connect to X server\n")
    sys.exit(1)

# pygobject
#pylint: disable=C0411, C0413
import gi
gi.require_version('Gtk', '3.0')
#pylint: disable=E0611, C0411, C0413
from gi.repository import Gtk
#pylint: disable=E0611, C0411, C0413
from gi.repository import GLib
#pylint: disable=E0611, C0411, C0413
from gi.repository import Gio

# gnome-abrt
#pylint: disable=C0413, C0412
import gnome_abrt
gnome_abrt.init()

#pylint: disable=C0413
import gnome_abrt.url
#pylint: disable=C0413
from gnome_abrt.views import OopsWindow
#pylint: disable=C0413
from gnome_abrt.controller import Controller
#pylint: disable=C0413
from gnome_abrt.signals import glib_sigchld_signal_handler
#pylint: disable=C0413
from gnome_abrt.problems import MultipleSources
#pylint: disable=C0413
from gnome_abrt.directory_problems import DirectoryProblemSource
#pylint: disable=C0413
from gnome_abrt.dbus_problems import (get_standard_problems_source,
                                      get_foreign_problems_source)
#pylint: disable=C0413
from gnome_abrt.errors import UnavailableSource
#pylint: disable=C0413
from gnome_abrt.l10n import _, C_
#pylint: disable=C0413
from gnome_abrt.config import get_configuration
#pylint: disable=C0413
from gnome_abrt.url.gliburltitle import (GetURLTitleSourcePool,
                                         GetURLTitleSourceCache)

# dbus
#pylint: disable=C0413
import dbus
#pylint: disable=C0413
import dbus.service
#pylint: disable=C0413
from dbus.mainloop.glib import DBusGMainLoop

GNOME_ABRT_APPLICATION_ID = 'org.freedesktop.GnomeAbrt'
GNOME_ABRT_INTERFACE = 'org.freedesktop.GnomeAbrt'
GNOME_ABRT_OBJECT_PATH = '/org/freedesktop/GnomeAbrt'
GNOME_ABRT_URL_POOL_CAPACITY = 10


# because of https://bugzilla.gnome.org/show_bug.cgi?id=682331
class GtkAppDBUSImpl:
    """A proxy for primary application
    """

    #pylint: disable=R0923
    class Service(dbus.service.Object):
        """DBus service sitting on session bus
        """

        def __init__(self, bus, bus_name, application):
            bus_name = dbus.service.BusName(bus_name, bus)
            dbus.service.Object.__init__(self, bus_name, GNOME_ABRT_OBJECT_PATH)
            self._app = application

        @dbus.service.method(dbus_interface=GNOME_ABRT_INTERFACE,
                             in_signature='as', out_signature='')
        def command_line(self, argv):
            """DBus service method accepting a new command line arguments
            """

            class Arguments:
                """Adapter for Gtk class
                """

                def __init__(self, argv):
                    self._argv = argv

                def get_arguments(self):
                    return self._argv

            args = Arguments([str(a) for a in argv])
            self._app._parse_command_line(self, args)


    def __init__(self, bus_name, application):
        self._app = application
        self.mainloop = DBusGMainLoop()

        self._primary_obj = None
        self._primary_iface = None
        self._service = None

        try:
            bus = dbus.SessionBus(mainloop=self.mainloop)
            if bus.name_has_owner(bus_name):
                self._primary_obj = bus.get_object(bus_name,
                                                   GNOME_ABRT_OBJECT_PATH)
            else:
                self._service = GtkAppDBUSImpl.Service(bus, bus_name, self._app)
        except dbus.exceptions.DBusException as ex:
            logging.warning("Can't initialize gnome-abrt's DBus services: {0}"
                    .format(ex))
            self._primary_obj = None
            self._service = None

    def is_remote(self):
        """Application is remote if connection to primary application succeeded
        """

        return self._primary_obj is not None


    def send_command_line(self, argv):
        """Sends command line arguments to the primary application.
           Raises RuntimeError if an instance is not remote.
        """

        if not self.is_remote():
            raise RuntimeError("Can't send command-line message because "
                               "instance is not a remote application")

        try:
            if not self._primary_iface:
                self._primary_iface = dbus.Interface(self._primary_obj,
                        GNOME_ABRT_INTERFACE)

            if not argv:
                argv = dbus.Array([], signature='s')

            self._primary_iface.command_line(argv)
            return True
        except dbus.exceptions.DBusException as ex:
            logging.debug("Can't send command line over DBus: {0}"
                    .format(ex))
            return False

class OopsApplication(Gtk.Application):

    def __init__(self):
        Gtk.Application.__init__(self)

        self._dbus_srv = GtkAppDBUSImpl(GNOME_ABRT_APPLICATION_ID, self)
        self.connect("command-line", self._parse_command_line)
        self.set_flags(Gio.ApplicationFlags.HANDLES_COMMAND_LINE)
        self.gcontext = None
        self.all_sources = None
        self._url_pool = GetURLTitleSourcePool(GNOME_ABRT_URL_POOL_CAPACITY)
        self._url_cache = GetURLTitleSourceCache(self._url_pool)
        #gnome_abrt.url.set_async_worker(self._url_cache.get_url_title_async)
        # Disable because of https://bugzilla.redhat.com/show_bug.cgi?id=959811
        gnome_abrt.url.set_async_worker(lambda *args: None)
        self.gnome_settings = None

    def _bind_to_gsettings(self, conf):
        def set_time_format(conf, gsettings):
            clck_fmt = None
            try:
                clck_fmt = gsettings.get_value('clock-format').get_string()
            # What exception types is less general?
            #pylint: disable=W0703
            except Exception as ex:
                logging.exception(ex)
                return

            if clck_fmt == '24h':
                conf['T_FMT'] = '%k:%M'
                conf['D_T_FMT'] = '%Y-%m-%d %k:%M'
            else:
                conf['T_FMT'] = '%l:%M %p'
                conf['D_T_FMT'] = '%Y-%m-%d %l:%M %p'

        def settings_changed(settings, key, conf):
            if key == 'clock-format':
                set_time_format(conf, settings)

        if self.gnome_settings is None:
            self.gnome_settings = Gio.Settings(
                    schema='org.gnome.desktop.interface')
            self.gnome_settings.connect(
                    'changed', settings_changed, conf)

        conf.add_option('T_FMT',
                default_value=locale.nl_langinfo(locale.T_FMT))
        conf.add_option('D_T_FMT',
                default_value=locale.nl_langinfo(locale.D_T_FMT))
        set_time_format(conf, self.gnome_settings)

    #pylint: disable=W0613
    def _parse_command_line(self, sender, gcmdargs):
        argv = gcmdargs.get_arguments()

        if self._dbus_srv.is_remote():
            if self._dbus_srv.send_command_line(argv):
                return 0

        if argv:
            conf = get_configuration()
            conf['problemid'] = argv[0]

        self.activate()
        return 0

    #pylint: disable=W0221
    def do_activate(self):
        try:
            windows = self.get_windows()
            if windows:
                windows[0].present()
            else:
                conf = get_configuration()
                conf.add_option("all_problems", default_value=False)
                self._bind_to_gsettings(conf)

                sources = []
                try:
                    sources.append(
                          get_standard_problems_source(self._dbus_srv.mainloop))
                except UnavailableSource as ex:
                    logging.warning(str(ex))

                self.gcontext = GLib.main_context_default()
                try:
                    path = os.path.join(GLib.get_user_cache_dir(), "abrt/spool")
                    dps = DirectoryProblemSource(path, context=self.gcontext)
                    sources.append(dps)
                except UnavailableSource:
                    logging.warning(str(ex))

                if not sources:
                    raise UnavailableSource(None, None,
                            message="No available problem source.")

                # pylint: disable=W0105
                '''
                This is a trick to make xgettext think we are C language
                and emit the translators comment correctly.  It's a bug
                in xgettext that it recognizes Python files only after
                their .py extension, there is no way to force the format.
                See: bugs.launchpad.net/intltool/+bug/377872
                // Translators: a list header, "My" is a shortcut for "My bugs"
                _("My")
                '''
                self.all_sources = [(_("My"), MultipleSources(sources))]

                try:
                    # pylint: disable=W0105
                    '''
                    The same trick as above:
                    // Translators: a list header, a shortcut for "System
                    // bugs". In this context "System" may be an adjective
                    // or a genitive noun, as required by your language.
                    C_("bugs", "System")
                    '''
                    self.all_sources.append((C_("bugs", "System"),
                                get_foreign_problems_source()))
                except UnavailableSource as ex:
                    logging.warning(str(ex))

                controller = Controller(self.all_sources,
                                        glib_sigchld_signal_handler)
                main_window = OopsWindow(self, self.all_sources, controller)
                main_window.show_all()
                self.add_window(main_window)
        #pylint: disable=W0703
        except Exception as ex:
            logging.exception(ex)
            sys.exit(1)

    #pylint: disable=W0221
    def do_startup(self):
        Gtk.Application.do_startup(self)

        menu = Gio.Menu()
        menu.append(_("_Preferences"), "app.preferences")

        sub_menu = Gio.Menu()
        sub_menu.append(_("_About"), "app.about")
        sub_menu.append(_("_Quit"), "app.quit")
        menu.append_section(None, sub_menu)

        action = Gio.SimpleAction.new("preferences", None)
        action.connect("activate", self.on_action_prefrences)
        self.add_action(action)

        action = Gio.SimpleAction.new("about", None)
        action.connect("activate", self.on_action_about)
        self.add_action(action)

        action = Gio.SimpleAction.new("quit", None)
        action.connect("activate", self.on_action_quit)
        self.add_action(action)
        self.add_accelerator("<Control>q", "app.quit")

        self.set_app_menu(menu)

    #pylint: disable=W0613
    def on_action_prefrences(self, action, parameter):
        windows = self.get_windows()
        if windows:
            show_events_list_dialog(windows[0])
        else:
            show_events_list_dialog()

    #pylint: disable=W0613
    def on_action_about(self, action, parameter):
        #pylint: disable=E1120
        dialog = Gtk.AboutDialog.new()
        dialog.set_icon_name("abrt")
        dialog.set_version(gnome_abrt.VERSION)
        dialog.set_logo_icon_name("abrt")
        dialog.set_program_name(_("Problem Reporting"))
        dialog.set_copyright("Copyright © 2012 Red Hat, Inc")
        dialog.set_license(
    "This program is free software; you can redistribut"
    "e it and/or modify it under the terms of the GNU General Public License "
    "as published by the Free Software Foundation; either version 2 of the Li"
    "cense, or (at your option) any later version.\n\nThis program is distrib"
    "uted in the hope that it will be useful, but WITHOUT ANY WARRANTY; witho"
    "ut even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICU"
    "LAR PURPOSE.  See the GNU General Public License for more details.\n\nYo"
    "u should have received a copy of the GNU General Public License along wi"
    "th this program.  If not, see <http://www.gnu.org/licenses/>.")
        dialog.set_wrap_license(True)
        dialog.set_website("https://github.com/abrt/gnome-abrt")
        dialog.set_authors(["aboobed <0otibi0@gmail.com>",
                            "Allan Day <allanpday@gmail.com>",
                            "Bastien Nocera <hadess@hadess.net>",
                            "Chris Lockfort <clockfort@csh.rit.edu>",
                            "Daniel Aleksandersen <code@daniel.priv.no>",
                            "Denys Vlasenko <dvlasenk@redhat.com>",
                            "Elad Alfassa <elad@fedoraproject.org>",
                            "Francesco Frassinelli <fraph24@gmail.com>",
                            "Jakub Filák <filak.jakub@gmail.com>",
                            "Jiri Moskovčák <moskovcak@gmail.com>",
                            "Martin Milata <mmilata@redhat.com>",
                            "Matěj Habrnál <mhabrnal@redhat.com>",
                            "Marek Bryša <marek.brysa@gmail.com>",
                            "Michael Catanzaro <mcatanzaro@gnome.org>",
                            "Michal Toman <michal.toman@gmail.com>",
                            "Rafał Lużyński <digitalfreak@lingonborough.com>",
                            "Richard Marko <rmarko@fedoraproject.org>"])
        #dialog.set_artists(artists)
        #dialog.set_translator_credits(_("translator-credits"))

        windows = self.get_windows()
        if windows:
            dialog.set_transient_for(windows[0])

        dialog.run()
        dialog.destroy()

    #pylint: disable=W0613
    def on_action_quit(self, action, parameter):
        self.quit()

if __name__ == "__main__":
    signal.signal(signal.SIGINT, lambda signum, frame: sys.exit(1))

    CMDARGS = ArgumentParser(
            description=_('View and report application crashes'))
    # pylint: disable=W0105
    '''
    Again a trick to make xgettext think we are C language and emit the
    translators comment correctly.
    See: bugs.launchpad.net/intltool/+bug/377872
    // Translators: This is a description of --verbose command line option
    // displayed when a user runs: `gnome-abrt --help'
    _("Be verbose")
    '''
    CMDARGS.add_argument('-v', '--verbose', action='count',
            help=_('Be verbose'))
    # pylint: disable=W0105
    '''
    // Translators: This is a description of --problem command line option
    // displayed when a user runs: `gnome-abrt --help'
    _("Selected problem ID")
    '''
    CMDARGS.add_argument('-p', '--problem',
            help=_('Selected problem ID'))

    OPTIONS = CMDARGS.parse_args()

    if OPTIONS.verbose is not None:
        logging.getLogger().setLevel(logging.DEBUG)

    VARS = vars(OPTIONS)

    CONF = get_configuration()
    # TODO : mark this option as hidden or something like that
    CONF.add_option('problemid', default_value=None)

    APP_CMDLINE = []
    if 'problem' in VARS:
        APP_CMDLINE.append(VARS['problem'])

    EXIT_CODE = 1
    APP = OopsApplication()
    try:
        EXIT_CODE = APP.run(APP_CMDLINE)
    except UnavailableSource as ex:
        logging.error(ex)

    sys.exit(EXIT_CODE)

Stv3n404 - 2023