diff options
| author | Jiri Moskovcak <jmoskovc@redhat.com> | 2010-01-18 16:31:03 +0100 |
|---|---|---|
| committer | Jiri Moskovcak <jmoskovc@redhat.com> | 2010-01-18 16:31:03 +0100 |
| commit | b8ef905c6455ef98cd7fa488de7d602a70bd57dc (patch) | |
| tree | 8d99e35017aa08773a8ee63487a67bac983bd6f7 | |
| parent | 675ef3624349fbfbe165913270f24a947e0cb8d0 (diff) | |
| parent | 3cd4d651565e4afcc3c72bd32bb9ce2285b5c93d (diff) | |
| download | abrt-b8ef905c6455ef98cd7fa488de7d602a70bd57dc.tar.gz abrt-b8ef905c6455ef98cd7fa488de7d602a70bd57dc.tar.xz abrt-b8ef905c6455ef98cd7fa488de7d602a70bd57dc.zip | |
conflict
| -rw-r--r-- | lib/Plugins/KerneloopsScanner.cpp | 2 | ||||
| -rw-r--r-- | po/es.po | 97 | ||||
| -rw-r--r-- | po/fr.po | 335 | ||||
| -rw-r--r-- | po/he.po | 90 | ||||
| -rw-r--r-- | po/nl.po | 90 | ||||
| -rw-r--r-- | po/pl.po | 90 | ||||
| -rwxr-xr-x | scripts/abrt-bz-stats | 79 | ||||
| -rw-r--r-- | src/CLI/dbus.cpp | 6 | ||||
| -rw-r--r-- | src/CLI/dbus.h | 6 | ||||
| -rw-r--r-- | src/Daemon/CommLayerServerDBus.cpp | 10 | ||||
| -rw-r--r-- | src/Daemon/Daemon.cpp | 3 | ||||
| -rw-r--r-- | src/Daemon/PluginManager.cpp | 96 | ||||
| -rw-r--r-- | src/Daemon/PluginManager.h | 13 | ||||
| -rw-r--r-- | src/Gui/ABRTExceptions.py | 2 | ||||
| -rw-r--r-- | src/Gui/ABRTPlugin.py | 12 | ||||
| -rw-r--r-- | src/Gui/CCDBusBackend.py | 24 | ||||
| -rw-r--r-- | src/Gui/CCDumpList.py | 2 | ||||
| -rw-r--r-- | src/Gui/CCMainWindow.py | 57 | ||||
| -rw-r--r-- | src/Gui/CCReporterDialog.py | 2 | ||||
| -rw-r--r-- | src/Gui/CC_gui_functions.py | 20 | ||||
| -rw-r--r-- | src/Gui/ConfBackend.py | 152 | ||||
| -rw-r--r-- | src/Gui/PluginList.py | 22 | ||||
| -rw-r--r-- | src/Gui/PluginSettingsUI.py | 2 | ||||
| -rw-r--r-- | src/Gui/PluginsSettingsDialog.py | 17 | ||||
| -rw-r--r-- | src/Gui/SettingsDialog.py | 2 | ||||
| -rw-r--r-- | src/Gui/abrt_utils.py | 43 | ||||
| -rw-r--r-- | src/Hooks/abrt_exception_handler.py.in | 2 |
27 files changed, 776 insertions, 500 deletions
diff --git a/lib/Plugins/KerneloopsScanner.cpp b/lib/Plugins/KerneloopsScanner.cpp index f338aac..1bb45ab 100644 --- a/lib/Plugins/KerneloopsScanner.cpp +++ b/lib/Plugins/KerneloopsScanner.cpp @@ -122,7 +122,7 @@ int CKerneloopsScanner::ScanDmesg() int cnt_FoundOopses; char *buffer; - int pagesz = sysconf(_SC_PAGESIZE); + long pagesz = sysconf(_SC_PAGESIZE); buffer = (char*)xzalloc(pagesz + 1); @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: abrt.master.es\n" "Report-Msgid-Bugs-To: jmoskovc@redhat.com\n" -"POT-Creation-Date: 2009-12-15 10:52+0000\n" -"PO-Revision-Date: 2009-12-15 11:51-0300\n" -"Last-Translator: Héctor Daniel Cabrera <logan@fedoraproject.org>\n" +"POT-Creation-Date: 2010-01-15 11:23+0000\n" +"PO-Revision-Date: 2010-01-15 10:06-0300\n" +"Last-Translator: Claudio Rodrigo Pereyra Diaz <claudio@pereyradiaz.com.ar>\n" "Language-Team: Fedora Spanish <fedora-trans-es@redhat.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -28,26 +28,26 @@ msgstr "Otro cliente ya está siendo ejecutado, intentando despertarlo." msgid "Got unexpected data from daemon (is the database properly updated?)." msgstr "Se obtienen datos inesperados desde el demonio (¿está la Base de Datos correctamente actualizada?)" -#: ../src/Gui/ABRTPlugin.py:55 +#: ../src/Gui/ABRTPlugin.py:56 +msgid "Not loaded plugins" +msgstr "Complementos no cargados" + +#: ../src/Gui/ABRTPlugin.py:57 msgid "Analyzer plugins" msgstr "Complementos analizadores" -#: ../src/Gui/ABRTPlugin.py:56 +#: ../src/Gui/ABRTPlugin.py:58 msgid "Action plugins" msgstr "Complementos de acción" -#: ../src/Gui/ABRTPlugin.py:57 +#: ../src/Gui/ABRTPlugin.py:59 msgid "Reporter plugins" msgstr "Complementos de informes" -#: ../src/Gui/ABRTPlugin.py:58 +#: ../src/Gui/ABRTPlugin.py:60 msgid "Database plugins" msgstr "Complementos de Bases de Datos" -#: ../src/Gui/ABRTPlugin.py:97 -msgid "Plugin name is not set, can't load its settings" -msgstr "No se puso el nombre del complemento, no se puede cargar su configuración" - #: ../src/Gui/CCDBusBackend.py:74 #: ../src/Gui/CCDBusBackend.py:97 msgid "Can't connect to system dbus" @@ -134,31 +134,31 @@ msgstr "Ay_uda" # Revisar si hay que traducir. # Ver como referencia los botones gtk que no habia que traducirlos #. add pixbuff separatelly -#: ../src/Gui/CCMainWindow.py:71 +#: ../src/Gui/CCMainWindow.py:77 msgid "Icon" msgstr "Icono" -#: ../src/Gui/CCMainWindow.py:79 +#: ../src/Gui/CCMainWindow.py:85 msgid "Package" msgstr "Paquete" -#: ../src/Gui/CCMainWindow.py:80 +#: ../src/Gui/CCMainWindow.py:86 msgid "Application" msgstr "Aplicación" -#: ../src/Gui/CCMainWindow.py:81 +#: ../src/Gui/CCMainWindow.py:87 msgid "Date" msgstr "Fecha" -#: ../src/Gui/CCMainWindow.py:82 +#: ../src/Gui/CCMainWindow.py:88 msgid "Crash count" msgstr "Cantidad de caídas" -#: ../src/Gui/CCMainWindow.py:83 +#: ../src/Gui/CCMainWindow.py:89 msgid "User" msgstr "Usuario" -#: ../src/Gui/CCMainWindow.py:149 +#: ../src/Gui/CCMainWindow.py:157 #, python-format msgid "" "Can't show the settings dialog\n" @@ -167,7 +167,7 @@ msgstr "" "No se puede mostrar el diálogo de configuración\n" "%s" -#: ../src/Gui/CCMainWindow.py:160 +#: ../src/Gui/CCMainWindow.py:168 #, python-format msgid "" "Unable to finish current task!\n" @@ -177,7 +177,7 @@ msgstr "" "%s" #. there is something wrong with the daemon if we cant get the dumplist -#: ../src/Gui/CCMainWindow.py:184 +#: ../src/Gui/CCMainWindow.py:195 #, python-format msgid "" "Error while loading the dumplist.\n" @@ -186,15 +186,15 @@ msgstr "" "Error intentando cargar la lista de volcado.\n" "%s" -#: ../src/Gui/CCMainWindow.py:221 +#: ../src/Gui/CCMainWindow.py:232 msgid "<b>This crash has been reported:</b>\n" msgstr "<b> Esta caída ha sido reportada:</b>\n" -#: ../src/Gui/CCMainWindow.py:231 +#: ../src/Gui/CCMainWindow.py:242 msgid "<b>Not reported!</b>" msgstr "<b>¡No informado!</b>" -#: ../src/Gui/CCMainWindow.py:280 +#: ../src/Gui/CCMainWindow.py:291 msgid "" "Unable to get report!\n" "Debuginfo is missing?" @@ -202,7 +202,7 @@ msgstr "" "Incapaz de conseguir el informe!\n" "¿Falta la información de la depuración?" -#: ../src/Gui/CCMainWindow.py:299 +#: ../src/Gui/CCMainWindow.py:314 #, python-format msgid "" "Reporting failed!\n" @@ -211,8 +211,8 @@ msgstr "" "¡El informe falló!\n" "%s" -#: ../src/Gui/CCMainWindow.py:318 -#: ../src/Gui/CCMainWindow.py:345 +#: ../src/Gui/CCMainWindow.py:333 +#: ../src/Gui/CCMainWindow.py:360 #, python-format msgid "Error getting the report: %s" msgstr "Error al obtener el informe: %s" @@ -435,45 +435,45 @@ msgstr "Ha sido detectado una caída en el paquete %s." msgid "ABRT service is not running" msgstr "El servicio ABRT no se está ejecutando" -#: ../src/Applet/CCApplet.cpp:196 +#: ../src/Applet/CCApplet.cpp:200 msgid "Warning" msgstr "Aviso" -#: ../src/Daemon/Daemon.cpp:473 +#: ../src/Daemon/Daemon.cpp:474 msgid "Report size exceeded the quota. Please check system's MaxCrashReportsSize value in abrt.conf." msgstr "El tamaño del informe excede la cuota. Por favor, verifique el valor de MaxCrashReportsSize del sistema en abrt.conf." -#: ../lib/Plugins/Bugzilla.cpp:202 +#: ../lib/Plugins/Bugzilla.cpp:265 #, c-format msgid "Bug is already reported: %i" msgstr "El error ya ha sido informado: %i" -#: ../lib/Plugins/Bugzilla.cpp:264 +#: ../lib/Plugins/Bugzilla.cpp:341 #, c-format msgid "New bug id: %i" msgstr "Nuevo id del error: %i" -#: ../lib/Plugins/Bugzilla.cpp:359 +#: ../lib/Plugins/Bugzilla.cpp:442 msgid "Checking for duplicates..." msgstr "Chequeando si hay duplicados..." -#: ../lib/Plugins/Bugzilla.cpp:362 +#: ../lib/Plugins/Bugzilla.cpp:445 msgid "Logging into bugzilla..." msgstr "Ingresando a bugzilla..." -#: ../lib/Plugins/Bugzilla.cpp:366 +#: ../lib/Plugins/Bugzilla.cpp:449 msgid "Empty login and password. Please check Bugzilla.conf" msgstr "Usuario y contraseña vacios. Por favor compruebe el archivo Bugzilla.conf" -#: ../lib/Plugins/Bugzilla.cpp:372 +#: ../lib/Plugins/Bugzilla.cpp:455 msgid "Checking CC..." msgstr "Chequeando CC..." -#: ../lib/Plugins/Bugzilla.cpp:381 +#: ../lib/Plugins/Bugzilla.cpp:464 msgid "Creating new bug..." msgstr "Creando un nuevo informe..." -#: ../lib/Plugins/Bugzilla.cpp:385 +#: ../lib/Plugins/Bugzilla.cpp:468 msgid "Logging out..." msgstr "Saliendo..." @@ -481,23 +481,23 @@ msgstr "Saliendo..." msgid "Getting local universal unique identification" msgstr "Obteniendo la identificación única universal local" -#: ../lib/Plugins/CCpp.cpp:254 +#: ../lib/Plugins/CCpp.cpp:257 msgid "Generating backtrace" msgstr "Generando seguimiento..." -#: ../lib/Plugins/CCpp.cpp:372 +#: ../lib/Plugins/CCpp.cpp:376 msgid "Starting debuginfo installation" msgstr "Iniciando la instalación de la información de depuración" -#: ../lib/Plugins/CCpp.cpp:524 +#: ../lib/Plugins/CCpp.cpp:527 msgid "Getting local universal unique identification..." msgstr "Obteniendo la identificación única universal local..." -#: ../lib/Plugins/CCpp.cpp:543 +#: ../lib/Plugins/CCpp.cpp:546 msgid "Getting global universal unique identification..." msgstr "Obteniendo la identificación única universal global..." -#: ../lib/Plugins/CCpp.cpp:685 +#: ../lib/Plugins/CCpp.cpp:725 msgid "Skipping debuginfo installation" msgstr "Omita la instalación de la información de depuración" @@ -511,7 +511,7 @@ msgid "Writing report to '%s'" msgstr "Escribiendo reporte en '%s'" #: ../lib/Plugins/FileTransfer.cpp:63 -#: ../lib/Plugins/FileTransfer.cpp:385 +#: ../lib/Plugins/FileTransfer.cpp:372 msgid "FileTransfer: URL not specified" msgstr "Transferencia de archivo: URL no especificada" @@ -520,16 +520,16 @@ msgstr "Transferencia de archivo: URL no especificada" msgid "Sending archive %s to %s" msgstr "Enviando archivo %s a %s" -#: ../lib/Plugins/FileTransfer.cpp:310 +#: ../lib/Plugins/FileTransfer.cpp:296 msgid "File Transfer: Creating a report..." msgstr "Transferencia de archivo: Creando un informe..." -#: ../lib/Plugins/FileTransfer.cpp:335 +#: ../lib/Plugins/FileTransfer.cpp:322 #, c-format msgid "Can't create and send an archive: %s" msgstr "No se puede crear y enviar un archivo: %s" -#: ../lib/Plugins/FileTransfer.cpp:360 +#: ../lib/Plugins/FileTransfer.cpp:347 #, c-format msgid "Can't create and send an archive %s" msgstr "No se puede crear y enviar un archivo %s" @@ -538,7 +538,7 @@ msgstr "No se puede crear y enviar un archivo %s" msgid "Creating kernel oops crash reports..." msgstr "Creando un informe de cuelgue de kernel oops..." -#: ../lib/Plugins/Mailx.cpp:164 +#: ../lib/Plugins/Mailx.cpp:147 msgid "Sending an email..." msgstr "Enviando un correo..." @@ -551,10 +551,13 @@ msgstr "Ejecutando complemento SOSreport..." msgid "running sosreport: %s" msgstr "ejecutando sosreport: %s" -#: ../lib/Plugins/SOSreport.cpp:95 +#: ../lib/Plugins/SOSreport.cpp:97 msgid "done running sosreport" msgstr "Sosreport corriendo" +#~ msgid "Plugin name is not set, can't load its settings" +#~ msgstr "" +#~ "No se puso el nombre del complemento, no se puede cargar su configuración" #~ msgid "Searching for debug-info packages..." #~ msgstr "Buscando paquetes de información del depurador..." #~ msgid "Downloading and installing debug-info packages..." @@ -2,17 +2,18 @@ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # -#: ../src/Gui/CCReporterDialog.py:196 +#: ../src/Gui/CCReporterDialog.py:208 # Sam Friedmann <sam.friedmann@redhat.com>, 2009. # ratal <aymeric.rateau@gmail.com>, 2009. +# Aymeric Rateau <aymeric.rateau@gmail.com>, 2010. msgid "" msgstr "" "Project-Id-Version: abrt.master.fr\n" "Report-Msgid-Bugs-To: jmoskovc@redhat.com\n" -"POT-Creation-Date: 2009-11-23 08:40+0000\n" -"PO-Revision-Date: 2009-11-29 20:10+0900\n" -"Last-Translator: ratal <aymeric.rateau@gmail.com>\n" -"Language-Team: Français <fedora-trans-fr@redhat.com>\n" +"POT-Creation-Date: 2010-01-08 15:37+0000\n" +"PO-Revision-Date: 2010-01-14 21:10+0100\n" +"Last-Translator: Aymeric Rateau <aymeric.rateau@gmail.com>\n" +"Language-Team: French <fedora-trans-fr@redhat.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -46,7 +47,7 @@ msgid "Database plugins" msgstr "Extensions de base de données" #: ../src/Gui/ABRTPlugin.py:97 -msgid "Plugin name is not set, can't load it's settings" +msgid "Plugin name is not set, can't load its settings" msgstr "" "Le nom de l'extension n'est pas défini, chargement de sa configuration " "impossible" @@ -55,59 +56,55 @@ msgstr "" msgid "Can't connect to system dbus" msgstr "Connexion au système dbus impossible" -#: ../src/Gui/CCDBusBackend.py:100 ../src/Gui/CCDBusBackend.py:103 +#: ../src/Gui/CCDBusBackend.py:104 ../src/Gui/CCDBusBackend.py:107 msgid "Please check if abrt daemon is running" msgstr "Veuillez vérifier que le démon abrt est en cours d'exécution." -#: ../src/Gui/CCDBusBackend.py:155 +#: ../src/Gui/CCDBusBackend.py:159 msgid "" -"Daemon did't return valid report info\n" +"Daemon didn't return valid report info\n" "Debuginfo is missing?" msgstr "" "Le démon n'a pas retourné d'informations valides\n" "Debuginfo est manquant ?" -#: ../src/Gui/ccgui.glade.h:1 ../src/Gui/report.glade.h:1 -msgid " " -msgstr " " - -#: ../src/Gui/ccgui.glade.h:2 +#: ../src/Gui/ccgui.glade.h:1 msgid "(C) 2009 Red Hat, Inc." msgstr "(C) 2009 Red Hat, Inc." -#: ../src/Gui/ccgui.glade.h:3 ../src/Gui/CCMainWindow.py:246 -msgid "<b>Not reported!</b>" -msgstr "<b>Non signalé !</b>" - -#: ../src/Gui/ccgui.glade.h:4 -msgid "<span color=\"white\">Description</span>" -msgstr "<span color=\"white\">Description</span>" - -#: ../src/Gui/ccgui.glade.h:5 +#: ../src/Gui/ccgui.glade.h:2 msgid "About ABRT" msgstr "À propos d'ABRT" -#: ../src/Gui/ccgui.glade.h:6 ../src/Gui/abrt.desktop.in.h:1 +#: ../src/Gui/ccgui.glade.h:3 ../src/Gui/abrt.desktop.in.h:1 msgid "Automatic Bug Reporting Tool" msgstr "Automatic Bug Reporting Tool" -#: ../src/Gui/ccgui.glade.h:7 +#: ../src/Gui/ccgui.glade.h:4 msgid "Delete" msgstr "Supprimer" -#: ../src/Gui/ccgui.glade.h:8 +#: ../src/Gui/ccgui.glade.h:5 +msgid "Details" +msgstr "Détails" + +#: ../src/Gui/ccgui.glade.h:6 +msgid "Not Reported" +msgstr "Non signalé" + +#: ../src/Gui/ccgui.glade.h:7 msgid "Please wait.." msgstr "Veuillez patienter..." -#: ../src/Gui/ccgui.glade.h:9 +#: ../src/Gui/ccgui.glade.h:8 msgid "Plugins" msgstr "Extensions" -#: ../src/Gui/ccgui.glade.h:10 ../src/Gui/report.glade.h:4 +#: ../src/Gui/ccgui.glade.h:9 ../src/Gui/report.glade.h:6 msgid "Report" msgstr "Rapport" -#: ../src/Gui/ccgui.glade.h:11 +#: ../src/Gui/ccgui.glade.h:10 msgid "" "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 " @@ -135,48 +132,44 @@ msgstr "" "Vous devriez avoir reçu une copie de la Licence Publique Générale GNU avec " "ce logiciel. Si ce n'est pas le cas, voir <http://www.gnu.org/licenses/>." -#: ../src/Gui/ccgui.glade.h:16 -msgid "Working..." -msgstr "Traitement en cours..." - -#: ../src/Gui/ccgui.glade.h:17 +#: ../src/Gui/ccgui.glade.h:15 msgid "_Edit" msgstr "_Édition" -#: ../src/Gui/ccgui.glade.h:18 +#: ../src/Gui/ccgui.glade.h:16 msgid "_File" msgstr "_Fichier" -#: ../src/Gui/ccgui.glade.h:19 +#: ../src/Gui/ccgui.glade.h:17 msgid "_Help" msgstr "_Aide" #. add pixbuff separatelly -#: ../src/Gui/CCMainWindow.py:80 +#: ../src/Gui/CCMainWindow.py:76 msgid "Icon" msgstr "Icône" -#: ../src/Gui/CCMainWindow.py:88 +#: ../src/Gui/CCMainWindow.py:84 msgid "Package" msgstr "Paquet" -#: ../src/Gui/CCMainWindow.py:89 +#: ../src/Gui/CCMainWindow.py:85 msgid "Application" msgstr "Application" -#: ../src/Gui/CCMainWindow.py:90 +#: ../src/Gui/CCMainWindow.py:86 msgid "Date" msgstr "Date" -#: ../src/Gui/CCMainWindow.py:91 +#: ../src/Gui/CCMainWindow.py:87 msgid "Crash count" msgstr "Décompte d'incidents" -#: ../src/Gui/CCMainWindow.py:93 +#: ../src/Gui/CCMainWindow.py:88 msgid "User" msgstr "Utilisateur" -#: ../src/Gui/CCMainWindow.py:160 +#: ../src/Gui/CCMainWindow.py:156 #, python-format msgid "" "Can't show the settings dialog\n" @@ -185,7 +178,7 @@ msgstr "" "Affichage de l'interface de configuration impossible\n" "%s" -#: ../src/Gui/CCMainWindow.py:181 +#: ../src/Gui/CCMainWindow.py:167 #, python-format msgid "" "Unable to finish current task!\n" @@ -194,23 +187,25 @@ msgstr "" "Impossible de terminer la tâche actuelle !\n" "%s" -#: ../src/Gui/CCMainWindow.py:198 +#. there is something wrong with the daemon if we cant get the dumplist +#: ../src/Gui/CCMainWindow.py:194 #, python-format msgid "" -"Error while loading the dumplist, please check if abrt daemon is running\n" -" %s" +"Error while loading the dumplist.\n" +"%s" msgstr "" -"Erreur lors du chargement de dumplist, veuillez vérifier que le démon abrt " -"est bien en cours d'exécution\n" +"Erreur lors du chargement de dumplist.\n" " %s" -#: ../src/Gui/CCMainWindow.py:238 -msgid "<b>This crash has been reported, you can find the report(s) at:</b>\n" -msgstr "" -"<b>Cet incident a été signalé, vous pourrez trouver ce(s) rapport(s) à :</" -"b>\n" +#: ../src/Gui/CCMainWindow.py:231 +msgid "<b>This crash has been reported:</b>\n" +msgstr "<b>Cet incident a été signalé :</b>\n" + +#: ../src/Gui/CCMainWindow.py:241 +msgid "<b>Not reported!</b>" +msgstr "<b>Non signalé !</b>" -#: ../src/Gui/CCMainWindow.py:298 +#: ../src/Gui/CCMainWindow.py:290 msgid "" "Unable to get report!\n" "Debuginfo is missing?" @@ -218,7 +213,7 @@ msgstr "" "Impossible de trouver le rapport !\n" "Debuginfo est manquant ?" -#: ../src/Gui/CCMainWindow.py:318 +#: ../src/Gui/CCMainWindow.py:309 #, python-format msgid "" "Reporting failed!\n" @@ -227,43 +222,52 @@ msgstr "" "Échec de la création de rapports !\n" "%s" -#: ../src/Gui/CCMainWindow.py:337 ../src/Gui/CCMainWindow.py:364 +#: ../src/Gui/CCMainWindow.py:328 ../src/Gui/CCMainWindow.py:355 #, python-format msgid "Error getting the report: %s" msgstr "Erreur lors de l'obtention du rapport : %s" -#: ../src/Gui/CCReporterDialog.py:182 +#: ../src/Gui/CCReporterDialog.py:136 +#, python-format +msgid "" +"Can't save plugin settings:\n" +" %s" +msgstr "" +"Imposible d'enregistrer la configuration de l'extension :\n" +" %s" + +#: ../src/Gui/CCReporterDialog.py:194 msgid "Brief description how to reproduce this or what you did..." msgstr "" "Brève description de la procédure à suivre pour reproduire ceci, ou de ce " "que vous avez fait..." -#: ../src/Gui/CCReporterDialog.py:224 +#: ../src/Gui/CCReporterDialog.py:239 #, python-format msgid "" "Reporting disabled because the backtrace is unusable.\n" -"Please try to install debuginfo manually using command:<span color=\"blue\"> " -"debuginfo-install %s </span>\n" +"Please try to install debuginfo manually using command: <b>debuginfo-install " +"%s</b> \n" "then use Refresh button to regenerate the backtrace." msgstr "" "Envoi du rapport désactivé car le backtrace est inutilisable.\n" -"Veuillez installer debuginfo en utilisant la commande :<span color=\"blue\"> " -"debuginfo-install %s </span>\n" +"Veuillez installer debuginfo en utilisant la commande : <b> " +"debuginfo-install %s </b>\n" "puis utilisez le bouton de rafraichissement pour régénérer le backtrace." -#: ../src/Gui/CCReporterDialog.py:226 -msgid "The bactrace is unusable, you can't report this!" +#: ../src/Gui/CCReporterDialog.py:241 +msgid "The backtrace is unusable, you can't report this!" msgstr "Le backtrace est inutilisable, vous ne pouvez pas signaler ce bogue." -#: ../src/Gui/CCReporterDialog.py:232 +#: ../src/Gui/CCReporterDialog.py:246 msgid "" -"The bactrace is incomplete, please make sure you provide good steps to " +"The backtrace is incomplete, please make sure you provide good steps to " "reproduce." msgstr "" "Le backtrace est incomplet, veuillez vous assurer de fournir les étapes pour " "reproduire le bogue." -#: ../src/Gui/CCReporterDialog.py:280 +#: ../src/Gui/CCReporterDialog.py:296 #, python-format msgid "" "<b>WARNING</b>, you're about to send data which might contain sensitive " @@ -274,14 +278,14 @@ msgstr "" "des informations confidentielles.\n" "Voulez-vous vraiment envoyer <b>%s</b> ?\n" -#: ../src/Gui/dialogs.glade.h:1 +#: ../src/Gui/dialogs.glade.h:1 ../src/Gui/report.glade.h:5 +msgid "Log" +msgstr "Log" + +#: ../src/Gui/dialogs.glade.h:2 msgid "Report done" msgstr "Rapport créé" -#: ../src/Gui/dialogs.glade.h:2 ../src/Gui/settings.glade.h:27 -msgid "gtk-ok" -msgstr "gtk-ok" - #: ../src/Gui/PluginSettingsUI.py:18 msgid "Can't find PluginDialog widget in UI description!" msgstr "" @@ -302,15 +306,23 @@ msgstr "la boite combinée n'est pas implémentée" msgid "Nothing to hydrate!" msgstr "Aucune donnée à afficher !" +#: ../src/Gui/report.glade.h:1 +msgid " " +msgstr " " + #: ../src/Gui/report.glade.h:2 -msgid "Comment" -msgstr "Commenter" +msgid "<b>Comment</b>" +msgstr "<b>Commenter</b>" #: ../src/Gui/report.glade.h:3 -msgid "How to reproduce (in a few simple steps)" -msgstr "Comment reproduire (en quelques étapes simples)" +msgid "<b>Following items will be sent</b>" +msgstr "<b>Les points suivants seront envoyés</b>" + +#: ../src/Gui/report.glade.h:4 +msgid "<b>How to reproduce (in a few simple steps)</b>" +msgstr "<b>Comment reproduire (en quelques étapes simples)</b>" -#: ../src/Gui/report.glade.h:5 +#: ../src/Gui/report.glade.h:7 msgid "Send" msgstr "Envoyer" @@ -322,11 +334,11 @@ msgstr "<b>Sélectionnez l'extension</b>" msgid "<b>Select database backend</b>" msgstr "<b>Sélectionnez le moteur de base de données</b>" -#: ../src/Gui/SettingsDialog.py:165 +#: ../src/Gui/SettingsDialog.py:166 msgid "Remove this job" msgstr "Supprimer ce travail" -#: ../src/Gui/SettingsDialog.py:208 +#: ../src/Gui/SettingsDialog.py:210 msgid "Remove this action" msgstr "Supprimer cette action" @@ -339,104 +351,92 @@ msgid "<b>Associated action</b>" msgstr "<b>Action associée</b>" #: ../src/Gui/settings.glade.h:3 +msgid "<b>Plugin details</b>" +msgstr "<b>Détails de l'extension</b>" + +#: ../src/Gui/settings.glade.h:4 msgid "<b>Plugin</b>" msgstr "<b>Extension</b>" -#: ../src/Gui/settings.glade.h:4 +#: ../src/Gui/settings.glade.h:5 msgid "<b>Time (or period)</b>" msgstr "<b>Durée (ou période)</b>" -#: ../src/Gui/settings.glade.h:5 +#: ../src/Gui/settings.glade.h:6 msgid "Analyzers, Actions, Reporters" msgstr "Analyseurs, actions, rapporteurs" -#: ../src/Gui/settings.glade.h:6 +#: ../src/Gui/settings.glade.h:7 msgid "Author:" msgstr "Auteur :" -#: ../src/Gui/settings.glade.h:7 +#: ../src/Gui/settings.glade.h:8 msgid "Blacklisted packages: " msgstr "Paquets sur liste noire : " -#: ../src/Gui/settings.glade.h:8 +#: ../src/Gui/settings.glade.h:9 msgid "C_onfigure plugin" msgstr "C_onfiguration de l'extension" -#: ../src/Gui/settings.glade.h:9 +#: ../src/Gui/settings.glade.h:10 msgid "Check package GPG signature" msgstr "Vérification de la signature GPG du paquet" -#: ../src/Gui/settings.glade.h:10 +#: ../src/Gui/settings.glade.h:11 msgid "Common" msgstr "Commun" -#: ../src/Gui/settings.glade.h:11 +#: ../src/Gui/settings.glade.h:12 msgid "Cron" msgstr "Cron" -#: ../src/Gui/settings.glade.h:12 +#: ../src/Gui/settings.glade.h:13 msgid "Database backend: " msgstr "Moteur de base de données : " -#: ../src/Gui/settings.glade.h:13 -msgid "Edit blacklisted packages" -msgstr "Édition des paquets sur liste noire" - #: ../src/Gui/settings.glade.h:14 +msgid "Description:" +msgstr "Description :" + +#: ../src/Gui/settings.glade.h:15 msgid "GPG Keys" msgstr "Clés GPG" -#: ../src/Gui/settings.glade.h:15 +#: ../src/Gui/settings.glade.h:16 msgid "GPG keys: " msgstr "Clés GPG :" -#: ../src/Gui/settings.glade.h:16 +#: ../src/Gui/settings.glade.h:17 msgid "Global Settings" msgstr "Paramètres globaux" -#: ../src/Gui/settings.glade.h:17 +#: ../src/Gui/settings.glade.h:18 msgid "Max coredump storage size(MB):" msgstr "Taille de stockage coredump maximal (en Mo) :" -#: ../src/Gui/settings.glade.h:18 -msgid "Nothing selected" -msgstr "Aucune sélection" - #: ../src/Gui/settings.glade.h:19 -msgid "Plugin Details" -msgstr "Détails de l'extension" +msgid "Name:" +msgstr "Nom :" #: ../src/Gui/settings.glade.h:20 msgid "Settings" msgstr "Paramètres" #: ../src/Gui/settings.glade.h:21 -msgid "This function is not implemented yet!" -msgstr "Cette fonction n'est pas encore implémentée !" - -#: ../src/Gui/settings.glade.h:22 msgid "Version:" msgstr "Version :" -#: ../src/Gui/settings.glade.h:23 +#: ../src/Gui/settings.glade.h:22 msgid "Web Site:" msgstr "Site web :" -#: ../src/Gui/settings.glade.h:24 -msgid "gtk-add" -msgstr "gtk-add" - -#: ../src/Gui/settings.glade.h:25 +#: ../src/Gui/settings.glade.h:23 msgid "gtk-cancel" msgstr "gtk-cancel" -#: ../src/Gui/settings.glade.h:26 -msgid "gtk-close" -msgstr "gtk-close" - -#: ../src/Gui/settings.glade.h:28 -msgid "gtk-remove" -msgstr "gtk-remove" +#: ../src/Gui/settings.glade.h:24 +msgid "gtk-ok" +msgstr "gtk-ok" #: ../src/Gui/abrt.desktop.in.h:2 msgid "View and report application crashes" @@ -447,15 +447,15 @@ msgstr "Visualiser et signaler les plantages de l'application" msgid "A crash in package %s has been detected" msgstr "Un incident a été détecté dans le paquet %s" -#: ../src/Applet/Applet.cpp:253 +#: ../src/Applet/Applet.cpp:254 msgid "ABRT service is not running" msgstr "Le service ABRT n'est pas en cours d'exécution" -#: ../src/Applet/CCApplet.cpp:196 +#: ../src/Applet/CCApplet.cpp:204 msgid "Warning" msgstr "Avertissement" -#: ../src/Daemon/Daemon.cpp:520 +#: ../src/Daemon/Daemon.cpp:478 msgid "" "Report size exceeded the quota. Please check system's MaxCrashReportsSize " "value in abrt.conf." @@ -463,11 +463,13 @@ msgstr "" "La taille du rapport dépasse le quota. Veuillez vérifier la valeur " "MaxCrashReportsSize du système dans abrt.conf." -#: ../lib/Plugins/Bugzilla.cpp:202, c-format +#: ../lib/Plugins/Bugzilla.cpp:202 +#, c-format msgid "Bug is already reported: %i" msgstr "Le bogue est déjà signalé : %i" -#: ../lib/Plugins/Bugzilla.cpp:264, c-format +#: ../lib/Plugins/Bugzilla.cpp:264 +#, c-format msgid "New bug id: %i" msgstr "Nouvel ID de bogue : %i" @@ -499,31 +501,23 @@ msgstr "Déconnexion..." msgid "Getting local universal unique identification" msgstr "Obtention de l'UUID locale" -#: ../lib/Plugins/CCpp.cpp:257 -msgid "Getting backtrace..." -msgstr "Obtention du parcours arrière..." - -#: ../lib/Plugins/CCpp.cpp:566 ../lib/Plugins/CCpp.cpp:693 -msgid "Searching for debug-info packages..." -msgstr "Recherche de paquets debug-info..." +#: ../lib/Plugins/CCpp.cpp:258 +msgid "Generating backtrace" +msgstr "Génération du parcours arrière..." -#: ../lib/Plugins/CCpp.cpp:628 ../lib/Plugins/CCpp.cpp:727 -msgid "Downloading and installing debug-info packages..." -msgstr "Téléchargement et installation des paquets debug-info..." +#: ../lib/Plugins/CCpp.cpp:377 +msgid "Starting debuginfo installation" +msgstr "Démarrage de l'installation de debuginfo" -#: ../lib/Plugins/CCpp.cpp:832 +#: ../lib/Plugins/CCpp.cpp:527 msgid "Getting local universal unique identification..." msgstr "Obtention de l'UUID locale..." -#: ../lib/Plugins/CCpp.cpp:851 +#: ../lib/Plugins/CCpp.cpp:546 msgid "Getting global universal unique identification..." msgstr "Obtention de l'UUID globale..." -#: ../lib/Plugins/CCpp.cpp:896 -msgid "Starting report creation..." -msgstr "Lancement de la création de rapport..." - -#: ../lib/Plugins/CCpp.cpp:929 +#: ../lib/Plugins/CCpp.cpp:702 msgid "Skipping debuginfo installation" msgstr "Ignorer l'installation de debug-info" @@ -531,27 +525,31 @@ msgstr "Ignorer l'installation de debug-info" msgid "Creating and submitting a report..." msgstr "Création et envoi d'un rapport..." -#: ../lib/Plugins/Logger.cpp:65 -msgid "Creating a report..." -msgstr "Création d'un rapport..." +#: ../lib/Plugins/Logger.cpp:82 +#, c-format +msgid "Writing report to '%s'" +msgstr "Écriture du rapport à « %s »" -#: ../lib/Plugins/FileTransfer.cpp:63 ../lib/Plugins/FileTransfer.cpp:384 +#: ../lib/Plugins/FileTransfer.cpp:63 ../lib/Plugins/FileTransfer.cpp:381 msgid "FileTransfer: URL not specified" msgstr "Transfert de fichier : URL non spécifié" -#: ../lib/Plugins/FileTransfer.cpp:67, c-format +#: ../lib/Plugins/FileTransfer.cpp:67 +#, c-format msgid "Sending archive %s to %s" msgstr "Envoi de l'archive %s vers %s" -#: ../lib/Plugins/FileTransfer.cpp:309 +#: ../lib/Plugins/FileTransfer.cpp:306 msgid "File Transfer: Creating a report..." msgstr "Transfert de fichier : Création d'un rapport" -#: ../lib/Plugins/FileTransfer.cpp:334, c-format +#: ../lib/Plugins/FileTransfer.cpp:331 +#, c-format msgid "Can't create and send an archive: %s" msgstr "Impossible de créer et d'envoyer une archive : %s" -#: ../lib/Plugins/FileTransfer.cpp:359, c-format +#: ../lib/Plugins/FileTransfer.cpp:356 +#, c-format msgid "Can't create and send an archive %s" msgstr "Impossible de créer et d'envoyer une archive %s" @@ -567,7 +565,8 @@ msgstr "Envoi d'un email..." msgid "Executing SOSreport plugin..." msgstr "Exécution de l'extension SOSreport..." -#: ../lib/Plugins/SOSreport.cpp:91, c-format +#: ../lib/Plugins/SOSreport.cpp:91 +#, c-format msgid "running sosreport: %s" msgstr "exécution de sosreport : %s" @@ -575,6 +574,42 @@ msgstr "exécution de sosreport : %s" msgid "done running sosreport" msgstr "exécution de sosreport terminée" +#~ msgid "<span color=\"white\">Description</span>" +#~ msgstr "<span color=\"white\">Description</span>" + +#~ msgid "Working..." +#~ msgstr "Traitement en cours..." + +#~ msgid "Edit blacklisted packages" +#~ msgstr "Édition des paquets sur liste noire" + +#~ msgid "Nothing selected" +#~ msgstr "Aucune sélection" + +#~ msgid "This function is not implemented yet!" +#~ msgstr "Cette fonction n'est pas encore implémentée !" + +#~ msgid "gtk-add" +#~ msgstr "gtk-add" + +#~ msgid "gtk-close" +#~ msgstr "gtk-close" + +#~ msgid "gtk-remove" +#~ msgstr "gtk-remove" + +#~ msgid "Searching for debug-info packages..." +#~ msgstr "Recherche de paquets debug-info..." + +#~ msgid "Downloading and installing debug-info packages..." +#~ msgstr "Téléchargement et installation des paquets debug-info..." + +#~ msgid "Starting report creation..." +#~ msgstr "Lancement de la création de rapport..." + +#~ msgid "Creating a report..." +#~ msgstr "Création d'un rapport..." + #~ msgid "Can't get username for uid %s" #~ msgstr "Impossible d'obtenir le nom d'utilisateur pour l'uid %s" @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: ABRT\n" "Report-Msgid-Bugs-To: jmoskovc@redhat.com\n" -"POT-Creation-Date: 2009-12-17 10:27+0000\n" +"POT-Creation-Date: 2010-01-18 09:58+0000\n" "PO-Revision-Date: \n" "Last-Translator: Elad <el.il@doom.co.il>\n" "Language-Team: Hebrew <fedora-he-list@redhat.com>\n" @@ -21,26 +21,26 @@ msgstr "לקוח אחר כבר רץ, מנסה להעיר אותו." msgid "Got unexpected data from daemon (is the database properly updated?)." msgstr "מידע לא צפוי הוחזר מתהליך הרקע (האם מסד הנתונים מעודכן כראוי?)" -#: ../src/Gui/ABRTPlugin.py:55 +#: ../src/Gui/ABRTPlugin.py:56 +msgid "Not loaded plugins" +msgstr "תוספים לא טעונים" + +#: ../src/Gui/ABRTPlugin.py:57 msgid "Analyzer plugins" msgstr "תוספי ניתוח" -#: ../src/Gui/ABRTPlugin.py:56 +#: ../src/Gui/ABRTPlugin.py:58 msgid "Action plugins" msgstr "תוספי פעולות" -#: ../src/Gui/ABRTPlugin.py:57 +#: ../src/Gui/ABRTPlugin.py:59 msgid "Reporter plugins" msgstr "תוספי דיווח" -#: ../src/Gui/ABRTPlugin.py:58 +#: ../src/Gui/ABRTPlugin.py:60 msgid "Database plugins" msgstr "תוספי מסד-נתונים" -#: ../src/Gui/ABRTPlugin.py:97 -msgid "Plugin name is not set, can't load its settings" -msgstr "שם התוסף לא הוגדר, לא ניתן לטעון את ההגדרות שלו" - #: ../src/Gui/CCDBusBackend.py:74 #: ../src/Gui/CCDBusBackend.py:97 msgid "Can't connect to system dbus" @@ -124,31 +124,31 @@ msgid "_Help" msgstr "ע_זרה" #. add pixbuff separatelly -#: ../src/Gui/CCMainWindow.py:71 +#: ../src/Gui/CCMainWindow.py:77 msgid "Icon" msgstr "סמל" -#: ../src/Gui/CCMainWindow.py:79 +#: ../src/Gui/CCMainWindow.py:85 msgid "Package" msgstr "חבילה" -#: ../src/Gui/CCMainWindow.py:80 +#: ../src/Gui/CCMainWindow.py:86 msgid "Application" msgstr "יישום" -#: ../src/Gui/CCMainWindow.py:81 +#: ../src/Gui/CCMainWindow.py:87 msgid "Date" msgstr "תאריך" -#: ../src/Gui/CCMainWindow.py:82 +#: ../src/Gui/CCMainWindow.py:88 msgid "Crash count" msgstr "מספר קריסות" -#: ../src/Gui/CCMainWindow.py:83 +#: ../src/Gui/CCMainWindow.py:89 msgid "User" msgstr "משתמש" -#: ../src/Gui/CCMainWindow.py:149 +#: ../src/Gui/CCMainWindow.py:157 #, python-format msgid "" "Can't show the settings dialog\n" @@ -157,7 +157,7 @@ msgstr "" "לא ניתן להציג את חלון ההגדרות\n" "%s" -#: ../src/Gui/CCMainWindow.py:160 +#: ../src/Gui/CCMainWindow.py:168 #, python-format msgid "" "Unable to finish current task!\n" @@ -167,7 +167,7 @@ msgstr "" "%s" #. there is something wrong with the daemon if we cant get the dumplist -#: ../src/Gui/CCMainWindow.py:187 +#: ../src/Gui/CCMainWindow.py:195 #, python-format msgid "" "Error while loading the dumplist.\n" @@ -176,15 +176,15 @@ msgstr "" "שגיאה במהלך טעינת dumplist.\n" "%s" -#: ../src/Gui/CCMainWindow.py:224 +#: ../src/Gui/CCMainWindow.py:232 msgid "<b>This crash has been reported:</b>\n" msgstr "<b>הקריסה הזאת דווחה:</b>\n" -#: ../src/Gui/CCMainWindow.py:234 +#: ../src/Gui/CCMainWindow.py:244 msgid "<b>Not reported!</b>" msgstr "<b>לא דווח!</b>" -#: ../src/Gui/CCMainWindow.py:283 +#: ../src/Gui/CCMainWindow.py:293 msgid "" "Unable to get report!\n" "Debuginfo is missing?" @@ -192,7 +192,7 @@ msgstr "" "לא ניתן להשיג דיווח\n" "מידע ניפוי שגיאות חסר?" -#: ../src/Gui/CCMainWindow.py:302 +#: ../src/Gui/CCMainWindow.py:319 #, python-format msgid "" "Reporting failed!\n" @@ -201,8 +201,8 @@ msgstr "" "הדיווח נכשל!\n" "%s" -#: ../src/Gui/CCMainWindow.py:321 -#: ../src/Gui/CCMainWindow.py:348 +#: ../src/Gui/CCMainWindow.py:338 +#: ../src/Gui/CCMainWindow.py:365 #, python-format msgid "Error getting the report: %s" msgstr "שגיאה בקבלת הדיווח: %s" @@ -424,45 +424,45 @@ msgstr "קריסה בחבילה %s התגלתה" msgid "ABRT service is not running" msgstr "שירות ABRT לא פועל" -#: ../src/Applet/CCApplet.cpp:196 +#: ../src/Applet/CCApplet.cpp:200 msgid "Warning" msgstr "אזהרה" -#: ../src/Daemon/Daemon.cpp:473 +#: ../src/Daemon/Daemon.cpp:474 msgid "Report size exceeded the quota. Please check system's MaxCrashReportsSize value in abrt.conf." msgstr "גודל הדיווח חרג מהמכסה. אנא בדוק את ערך ההגדרה MaxCrashReportsSize בקובץ abrt.conf" -#: ../lib/Plugins/Bugzilla.cpp:202 +#: ../lib/Plugins/Bugzilla.cpp:265 #, c-format msgid "Bug is already reported: %i" msgstr "הבאג דווח בעבר: %i" -#: ../lib/Plugins/Bugzilla.cpp:264 +#: ../lib/Plugins/Bugzilla.cpp:341 #, c-format msgid "New bug id: %i" msgstr "מזהה באג חדש: %i" -#: ../lib/Plugins/Bugzilla.cpp:359 +#: ../lib/Plugins/Bugzilla.cpp:442 msgid "Checking for duplicates..." msgstr "מחפש כפילויות..." -#: ../lib/Plugins/Bugzilla.cpp:362 +#: ../lib/Plugins/Bugzilla.cpp:445 msgid "Logging into bugzilla..." msgstr "מתחבר לבאגזילה..." -#: ../lib/Plugins/Bugzilla.cpp:366 +#: ../lib/Plugins/Bugzilla.cpp:449 msgid "Empty login and password. Please check Bugzilla.conf" msgstr "שם משתמש וסיסמה ריקים. אנא בדוק את הקובץ bugzilla.conf" -#: ../lib/Plugins/Bugzilla.cpp:372 +#: ../lib/Plugins/Bugzilla.cpp:455 msgid "Checking CC..." msgstr "בודק שדה CC..." -#: ../lib/Plugins/Bugzilla.cpp:381 +#: ../lib/Plugins/Bugzilla.cpp:464 msgid "Creating new bug..." msgstr "יוצר באג חדש..." -#: ../lib/Plugins/Bugzilla.cpp:385 +#: ../lib/Plugins/Bugzilla.cpp:468 msgid "Logging out..." msgstr "מתנתק..." @@ -474,19 +474,19 @@ msgstr "מקבל זהות מקומית ייחודית" msgid "Generating backtrace" msgstr "יוצר מידע קריסה" -#: ../lib/Plugins/CCpp.cpp:375 +#: ../lib/Plugins/CCpp.cpp:376 msgid "Starting debuginfo installation" msgstr "מתחיל התקנת מידע ניפוי שגיאות" -#: ../lib/Plugins/CCpp.cpp:525 +#: ../lib/Plugins/CCpp.cpp:527 msgid "Getting local universal unique identification..." msgstr "מקבל זהות מקומית ייחודית..." -#: ../lib/Plugins/CCpp.cpp:544 +#: ../lib/Plugins/CCpp.cpp:546 msgid "Getting global universal unique identification..." msgstr "מקבל זהות גלובלית ייחודית..." -#: ../lib/Plugins/CCpp.cpp:686 +#: ../lib/Plugins/CCpp.cpp:725 msgid "Skipping debuginfo installation" msgstr "מדלג על התקנת מידע ניפוי שגיאות" @@ -500,7 +500,7 @@ msgid "Writing report to '%s'" msgstr "כותב דיווח ל'%s'" #: ../lib/Plugins/FileTransfer.cpp:63 -#: ../lib/Plugins/FileTransfer.cpp:381 +#: ../lib/Plugins/FileTransfer.cpp:372 msgid "FileTransfer: URL not specified" msgstr "העברת קובץ: כתובת לא צוינה" @@ -509,16 +509,16 @@ msgstr "העברת קובץ: כתובת לא צוינה" msgid "Sending archive %s to %s" msgstr "שולח ארכיון %s ל-%s" -#: ../lib/Plugins/FileTransfer.cpp:306 +#: ../lib/Plugins/FileTransfer.cpp:296 msgid "File Transfer: Creating a report..." msgstr "העברת קובץ: יוצר דיווח..." -#: ../lib/Plugins/FileTransfer.cpp:331 +#: ../lib/Plugins/FileTransfer.cpp:322 #, c-format msgid "Can't create and send an archive: %s" msgstr "לא יכול ליצור ולשלוח ארכיון: %s" -#: ../lib/Plugins/FileTransfer.cpp:356 +#: ../lib/Plugins/FileTransfer.cpp:347 #, c-format msgid "Can't create and send an archive %s" msgstr "לא יכול ליצור ולשלוח ארכיון %s" @@ -527,7 +527,7 @@ msgstr "לא יכול ליצור ולשלוח ארכיון %s" msgid "Creating kernel oops crash reports..." msgstr "יוצר דיווחי קריסה של kernel oops..." -#: ../lib/Plugins/Mailx.cpp:164 +#: ../lib/Plugins/Mailx.cpp:147 msgid "Sending an email..." msgstr "שולח דוא\"ל" @@ -540,10 +540,12 @@ msgstr "מריץ את תוסף SOSreport..." msgid "running sosreport: %s" msgstr "מריץ sosreport: %s" -#: ../lib/Plugins/SOSreport.cpp:95 +#: ../lib/Plugins/SOSreport.cpp:97 msgid "done running sosreport" msgstr "הרצת sosreport הסתיימה" +#~ msgid "Plugin name is not set, can't load its settings" +#~ msgstr "שם התוסף לא הוגדר, לא ניתן לטעון את ההגדרות שלו" #~ msgid "Searching for debug-info packages..." #~ msgstr "מחפש חבילות debug-info..." #~ msgid "Downloading and installing debug-info packages..." @@ -6,14 +6,14 @@ # # Geert Warrink <geert.warrink@onsnet.nu>, 2009. # Richard van der Luit <nippur@fedoraproject.org>, 2009. -# Geert Warrink <geert.warrink@onsnet.nu>, 2009. +# Geert Warrink <geert.warrink@onsnet.nu>, 2009, 2010. #: ../src/Gui/CCReporterDialog.py:208 msgid "" msgstr "" "Project-Id-Version: abrt.master\n" "Report-Msgid-Bugs-To: jmoskovc@redhat.com\n" -"POT-Creation-Date: 2009-12-15 16:54+0000\n" -"PO-Revision-Date: 2009-12-15 18:05+0100\n" +"POT-Creation-Date: 2010-01-14 15:35+0000\n" +"PO-Revision-Date: 2010-01-14 17:50+0100\n" "Last-Translator: Geert Warrink <geert.warrink@onsnet.nu>\n" "Language-Team: nl <fedora-trans-list@redhat.com>\n" "MIME-Version: 1.0\n" @@ -31,23 +31,27 @@ msgid "Got unexpected data from daemon (is the database properly updated?)." msgstr "" "Kreeg niet verwachte data van daemon (is de database correct vernieuwd?)." -#: ../src/Gui/ABRTPlugin.py:55 +#: ../src/Gui/ABRTPlugin.py:56 +msgid "Not loaded plugins" +msgstr "Niet geladen plugins" + +#: ../src/Gui/ABRTPlugin.py:57 msgid "Analyzer plugins" msgstr "Analyse plugins" -#: ../src/Gui/ABRTPlugin.py:56 +#: ../src/Gui/ABRTPlugin.py:58 msgid "Action plugins" msgstr "Actie plugins" -#: ../src/Gui/ABRTPlugin.py:57 +#: ../src/Gui/ABRTPlugin.py:59 msgid "Reporter plugins" msgstr "Rapporteer plugins" -#: ../src/Gui/ABRTPlugin.py:58 +#: ../src/Gui/ABRTPlugin.py:60 msgid "Database plugins" msgstr "Databse plugins" -#: ../src/Gui/ABRTPlugin.py:97 +#: ../src/Gui/ABRTPlugin.py:99 msgid "Plugin name is not set, can't load its settings" msgstr "Plugin naam is niet ingesteld, kan zijn instellingen niet laden" @@ -144,31 +148,31 @@ msgid "_Help" msgstr "_Hulp" #. add pixbuff separatelly -#: ../src/Gui/CCMainWindow.py:71 +#: ../src/Gui/CCMainWindow.py:76 msgid "Icon" msgstr "Icoon" -#: ../src/Gui/CCMainWindow.py:79 +#: ../src/Gui/CCMainWindow.py:84 msgid "Package" msgstr "Pakket" -#: ../src/Gui/CCMainWindow.py:80 +#: ../src/Gui/CCMainWindow.py:85 msgid "Application" msgstr "Toepassing" -#: ../src/Gui/CCMainWindow.py:81 +#: ../src/Gui/CCMainWindow.py:86 msgid "Date" msgstr "Datum" -#: ../src/Gui/CCMainWindow.py:82 +#: ../src/Gui/CCMainWindow.py:87 msgid "Crash count" msgstr "Crash count" -#: ../src/Gui/CCMainWindow.py:83 +#: ../src/Gui/CCMainWindow.py:88 msgid "User" msgstr "Gebruiker" -#: ../src/Gui/CCMainWindow.py:149 +#: ../src/Gui/CCMainWindow.py:156 #, python-format msgid "" "Can't show the settings dialog\n" @@ -177,7 +181,7 @@ msgstr "" "Kan de instellingen dialoog niet tonen\n" "%s" -#: ../src/Gui/CCMainWindow.py:160 +#: ../src/Gui/CCMainWindow.py:167 #, python-format msgid "" "Unable to finish current task!\n" @@ -187,7 +191,7 @@ msgstr "" "%s" #. there is something wrong with the daemon if we cant get the dumplist -#: ../src/Gui/CCMainWindow.py:187 +#: ../src/Gui/CCMainWindow.py:194 #, python-format msgid "" "Error while loading the dumplist.\n" @@ -196,15 +200,15 @@ msgstr "" "Fout tijdens het laden van de dumplijst.\n" "%s" -#: ../src/Gui/CCMainWindow.py:224 +#: ../src/Gui/CCMainWindow.py:231 msgid "<b>This crash has been reported:</b>\n" msgstr "<b>Deze crash is gerapporteerd:</b>\n" -#: ../src/Gui/CCMainWindow.py:234 +#: ../src/Gui/CCMainWindow.py:241 msgid "<b>Not reported!</b>" msgstr "<b>Niet gerapporteerd!</b>" -#: ../src/Gui/CCMainWindow.py:283 +#: ../src/Gui/CCMainWindow.py:290 msgid "" "Unable to get report!\n" "Debuginfo is missing?" @@ -212,7 +216,7 @@ msgstr "" "Kan geen rapport krijgen!\n" "Mist debuginfo?" -#: ../src/Gui/CCMainWindow.py:302 +#: ../src/Gui/CCMainWindow.py:309 #, python-format msgid "" "Reporting failed!\n" @@ -221,7 +225,7 @@ msgstr "" "Rapporteren mislukte!\n" "%s" -#: ../src/Gui/CCMainWindow.py:321 ../src/Gui/CCMainWindow.py:348 +#: ../src/Gui/CCMainWindow.py:328 ../src/Gui/CCMainWindow.py:355 #, python-format msgid "Error getting the report: %s" msgstr "Fout tijdens het verkrijgen van het rapport: %s" @@ -446,11 +450,11 @@ msgstr "Een crash in pakket %s is ontdekt" msgid "ABRT service is not running" msgstr "ABRT service draait niet" -#: ../src/Applet/CCApplet.cpp:196 +#: ../src/Applet/CCApplet.cpp:200 msgid "Warning" msgstr "Waarschuwing" -#: ../src/Daemon/Daemon.cpp:473 +#: ../src/Daemon/Daemon.cpp:474 msgid "" "Report size exceeded the quota. Please check system's MaxCrashReportsSize " "value in abrt.conf." @@ -458,37 +462,37 @@ msgstr "" "Rapport grootte overschreed quota. Controleer a.u.b. MaxCrashReportsSize " "waarde van het systeem in abrt.conf." -#: ../lib/Plugins/Bugzilla.cpp:202 +#: ../lib/Plugins/Bugzilla.cpp:265 #, c-format msgid "Bug is already reported: %i" msgstr "Bug is al aangemeld: %i" -#: ../lib/Plugins/Bugzilla.cpp:264 +#: ../lib/Plugins/Bugzilla.cpp:341 #, c-format msgid "New bug id: %i" msgstr "Nieuwe bug id: %i" -#: ../lib/Plugins/Bugzilla.cpp:359 +#: ../lib/Plugins/Bugzilla.cpp:442 msgid "Checking for duplicates..." msgstr "Controleren voor dubbele..." -#: ../lib/Plugins/Bugzilla.cpp:362 +#: ../lib/Plugins/Bugzilla.cpp:445 msgid "Logging into bugzilla..." msgstr "Inloggen bij bugzilla..." -#: ../lib/Plugins/Bugzilla.cpp:366 +#: ../lib/Plugins/Bugzilla.cpp:449 msgid "Empty login and password. Please check Bugzilla.conf" msgstr "Leeg login en wachtwoord. Check a.u.b. Bugzilla.conf" -#: ../lib/Plugins/Bugzilla.cpp:372 +#: ../lib/Plugins/Bugzilla.cpp:455 msgid "Checking CC..." msgstr "Controleren van CC..." -#: ../lib/Plugins/Bugzilla.cpp:381 +#: ../lib/Plugins/Bugzilla.cpp:464 msgid "Creating new bug..." msgstr "Nieuwe bug aanmaken..." -#: ../lib/Plugins/Bugzilla.cpp:385 +#: ../lib/Plugins/Bugzilla.cpp:468 msgid "Logging out..." msgstr "Uitloggen..." @@ -496,23 +500,23 @@ msgstr "Uitloggen..." msgid "Getting local universal unique identification" msgstr "Verkrijgen van locale universele unieke identificatie" -#: ../lib/Plugins/CCpp.cpp:254 +#: ../lib/Plugins/CCpp.cpp:257 msgid "Generating backtrace" msgstr "Aangemaakte backtrace" -#: ../lib/Plugins/CCpp.cpp:372 +#: ../lib/Plugins/CCpp.cpp:376 msgid "Starting debuginfo installation" msgstr "Start debuginfo installatie" -#: ../lib/Plugins/CCpp.cpp:522 +#: ../lib/Plugins/CCpp.cpp:527 msgid "Getting local universal unique identification..." msgstr "Verkrijgen van locale universele unieke identificatie..." -#: ../lib/Plugins/CCpp.cpp:541 +#: ../lib/Plugins/CCpp.cpp:546 msgid "Getting global universal unique identification..." msgstr "Verkrijgen van golbale universele unieke identificatie..." -#: ../lib/Plugins/CCpp.cpp:683 +#: ../lib/Plugins/CCpp.cpp:725 msgid "Skipping debuginfo installation" msgstr "Sla debuginfo installatie over" @@ -525,7 +529,7 @@ msgstr "Aanmaken en indienen van rapport..." msgid "Writing report to '%s'" msgstr "Rapport schrijven naar: '%s'" -#: ../lib/Plugins/FileTransfer.cpp:63 ../lib/Plugins/FileTransfer.cpp:385 +#: ../lib/Plugins/FileTransfer.cpp:63 ../lib/Plugins/FileTransfer.cpp:372 msgid "FileTransfer: URL not specified" msgstr "Bestandsoverdracht: URL niet opgegeven" @@ -534,16 +538,16 @@ msgstr "Bestandsoverdracht: URL niet opgegeven" msgid "Sending archive %s to %s" msgstr "Versturen van archief %s naar %s" -#: ../lib/Plugins/FileTransfer.cpp:310 +#: ../lib/Plugins/FileTransfer.cpp:296 msgid "File Transfer: Creating a report..." msgstr "Bestandsoverdracht: Een rapport maken..." -#: ../lib/Plugins/FileTransfer.cpp:335 +#: ../lib/Plugins/FileTransfer.cpp:322 #, c-format msgid "Can't create and send an archive: %s" msgstr "Kan geen archief maken en versturen: %s" -#: ../lib/Plugins/FileTransfer.cpp:360 +#: ../lib/Plugins/FileTransfer.cpp:347 #, c-format msgid "Can't create and send an archive %s" msgstr "Kan archief %s niet aanmaken en versturen" @@ -552,7 +556,7 @@ msgstr "Kan archief %s niet aanmaken en versturen" msgid "Creating kernel oops crash reports..." msgstr "Aanmaken van kernel oops crash rapporten..." -#: ../lib/Plugins/Mailx.cpp:164 +#: ../lib/Plugins/Mailx.cpp:147 msgid "Sending an email..." msgstr "Versturen van email..." @@ -565,7 +569,7 @@ msgstr "Uitvoeren van SOSreport plugin..." msgid "running sosreport: %s" msgstr "sosreport draaien: %s" -#: ../lib/Plugins/SOSreport.cpp:95 +#: ../lib/Plugins/SOSreport.cpp:97 msgid "done running sosreport" msgstr "klaar met het draaien van sosreport" @@ -7,10 +7,10 @@ msgid "" msgstr "" "Project-Id-Version: pl\n" "Report-Msgid-Bugs-To: jmoskovc@redhat.com\n" -"POT-Creation-Date: 2009-12-19 09:12+0000\n" -"PO-Revision-Date: 2009-12-19 10:37+0100\n" +"POT-Creation-Date: 2010-01-14 20:43+0000\n" +"PO-Revision-Date: 2010-01-14 22:51+0100\n" "Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n" -"Language-Team: Polish <fedora-trans-pl@redhat.com>\n" +"Language-Team: Polish <trans-pl@lists.fedoraproject.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -25,26 +25,26 @@ msgstr "" "Otrzymano nieoczekiwane dane od demona (czy baza danych została właściwie " "zaktualizowana?)." -#: ../src/Gui/ABRTPlugin.py:55 +#: ../src/Gui/ABRTPlugin.py:56 +msgid "Not loaded plugins" +msgstr "Nie wczytano wtyczek" + +#: ../src/Gui/ABRTPlugin.py:57 msgid "Analyzer plugins" msgstr "Wtyczki analizy" -#: ../src/Gui/ABRTPlugin.py:56 +#: ../src/Gui/ABRTPlugin.py:58 msgid "Action plugins" msgstr "Wtyczki działań" -#: ../src/Gui/ABRTPlugin.py:57 +#: ../src/Gui/ABRTPlugin.py:59 msgid "Reporter plugins" msgstr "Wtyczki zgłaszania" -#: ../src/Gui/ABRTPlugin.py:58 +#: ../src/Gui/ABRTPlugin.py:60 msgid "Database plugins" msgstr "Wtyczki baz danych" -#: ../src/Gui/ABRTPlugin.py:97 -msgid "Plugin name is not set, can't load its settings" -msgstr "Nie ustawiono nazwy wtyczki, nie można wczytać jej ustawień" - #: ../src/Gui/CCDBusBackend.py:74 ../src/Gui/CCDBusBackend.py:97 msgid "Can't connect to system dbus" msgstr "Nie można połączyć się z systemową magistralą D-Bus" @@ -140,31 +140,31 @@ msgid "_Help" msgstr "Pomo_c" #. add pixbuff separatelly -#: ../src/Gui/CCMainWindow.py:71 +#: ../src/Gui/CCMainWindow.py:77 msgid "Icon" msgstr "Ikona" -#: ../src/Gui/CCMainWindow.py:79 +#: ../src/Gui/CCMainWindow.py:85 msgid "Package" msgstr "Pakiet" -#: ../src/Gui/CCMainWindow.py:80 +#: ../src/Gui/CCMainWindow.py:86 msgid "Application" msgstr "Aplikacja" -#: ../src/Gui/CCMainWindow.py:81 +#: ../src/Gui/CCMainWindow.py:87 msgid "Date" msgstr "Data" -#: ../src/Gui/CCMainWindow.py:82 +#: ../src/Gui/CCMainWindow.py:88 msgid "Crash count" msgstr "Liczba awarii" -#: ../src/Gui/CCMainWindow.py:83 +#: ../src/Gui/CCMainWindow.py:89 msgid "User" msgstr "Użytkownik" -#: ../src/Gui/CCMainWindow.py:149 +#: ../src/Gui/CCMainWindow.py:157 #, python-format msgid "" "Can't show the settings dialog\n" @@ -173,7 +173,7 @@ msgstr "" "Nie można wyświetlić okna dialogowego ustawień\n" "%s" -#: ../src/Gui/CCMainWindow.py:160 +#: ../src/Gui/CCMainWindow.py:168 #, python-format msgid "" "Unable to finish current task!\n" @@ -183,7 +183,7 @@ msgstr "" "%s" #. there is something wrong with the daemon if we cant get the dumplist -#: ../src/Gui/CCMainWindow.py:187 +#: ../src/Gui/CCMainWindow.py:195 #, python-format msgid "" "Error while loading the dumplist.\n" @@ -192,15 +192,15 @@ msgstr "" "Błąd podczas wczytywania listy zrzutów.\n" "%s" -#: ../src/Gui/CCMainWindow.py:224 +#: ../src/Gui/CCMainWindow.py:232 msgid "<b>This crash has been reported:</b>\n" msgstr "<b>Ta awaria została zgłoszona:</b>\n" -#: ../src/Gui/CCMainWindow.py:234 +#: ../src/Gui/CCMainWindow.py:242 msgid "<b>Not reported!</b>" msgstr "<b>Nie zgłoszono.</b>" -#: ../src/Gui/CCMainWindow.py:283 +#: ../src/Gui/CCMainWindow.py:291 msgid "" "Unable to get report!\n" "Debuginfo is missing?" @@ -208,7 +208,7 @@ msgstr "" "Nie można uzyskać raportu.\n" "Brak pakietów debuginfo?" -#: ../src/Gui/CCMainWindow.py:302 +#: ../src/Gui/CCMainWindow.py:310 #, python-format msgid "" "Reporting failed!\n" @@ -217,7 +217,7 @@ msgstr "" "Zgłoszenie nie powiodło się.\n" "%s" -#: ../src/Gui/CCMainWindow.py:321 ../src/Gui/CCMainWindow.py:348 +#: ../src/Gui/CCMainWindow.py:329 ../src/Gui/CCMainWindow.py:356 #, python-format msgid "Error getting the report: %s" msgstr "Błąd podczas uzyskiwania raportu: %s" @@ -447,11 +447,11 @@ msgstr "Wykryto awarię pakietu %s" msgid "ABRT service is not running" msgstr "Usługa ABRT nie jest uruchomiona" -#: ../src/Applet/CCApplet.cpp:196 +#: ../src/Applet/CCApplet.cpp:200 msgid "Warning" msgstr "Ostrzeżenie" -#: ../src/Daemon/Daemon.cpp:478 +#: ../src/Daemon/Daemon.cpp:474 msgid "" "Report size exceeded the quota. Please check system's MaxCrashReportsSize " "value in abrt.conf." @@ -459,37 +459,37 @@ msgstr "" "Wielkość raportu przekroczyła dozwolone ograniczenie. Proszę sprawdzić " "wartość zmiennej MaxCrashReportsSize w pliku abrt.conf" -#: ../lib/Plugins/Bugzilla.cpp:202 +#: ../lib/Plugins/Bugzilla.cpp:265 #, c-format msgid "Bug is already reported: %i" msgstr "Błąd został już wcześniej zgłoszony: %i" -#: ../lib/Plugins/Bugzilla.cpp:264 +#: ../lib/Plugins/Bugzilla.cpp:341 #, c-format msgid "New bug id: %i" msgstr "Identyfikator nowego błędu: %i" -#: ../lib/Plugins/Bugzilla.cpp:359 +#: ../lib/Plugins/Bugzilla.cpp:442 msgid "Checking for duplicates..." msgstr "Sprawdzanie duplikatów..." -#: ../lib/Plugins/Bugzilla.cpp:362 +#: ../lib/Plugins/Bugzilla.cpp:445 msgid "Logging into bugzilla..." msgstr "Logowanie do Bugzilli..." -#: ../lib/Plugins/Bugzilla.cpp:366 +#: ../lib/Plugins/Bugzilla.cpp:449 msgid "Empty login and password. Please check Bugzilla.conf" msgstr "Pola login i hasło są puste. Proszę sprawdzić plik Bugzilla.conf" -#: ../lib/Plugins/Bugzilla.cpp:372 +#: ../lib/Plugins/Bugzilla.cpp:455 msgid "Checking CC..." msgstr "Sprawdzanie listy CC..." -#: ../lib/Plugins/Bugzilla.cpp:381 +#: ../lib/Plugins/Bugzilla.cpp:464 msgid "Creating new bug..." msgstr "Dodawanie nowego błędu..." -#: ../lib/Plugins/Bugzilla.cpp:385 +#: ../lib/Plugins/Bugzilla.cpp:468 msgid "Logging out..." msgstr "Wylogowywanie..." @@ -501,19 +501,19 @@ msgstr "Uzyskiwanie lokalnego uniwersalnego, unikalnego identyfikatora" msgid "Generating backtrace" msgstr "Tworzenie wyjątku" -#: ../lib/Plugins/CCpp.cpp:375 +#: ../lib/Plugins/CCpp.cpp:376 msgid "Starting debuginfo installation" msgstr "Uruchamianie instalacji pakietów debuginfo" -#: ../lib/Plugins/CCpp.cpp:525 +#: ../lib/Plugins/CCpp.cpp:527 msgid "Getting local universal unique identification..." msgstr "Uzyskiwanie lokalnego uniwersalnego, unikalnego identyfikatora..." -#: ../lib/Plugins/CCpp.cpp:544 +#: ../lib/Plugins/CCpp.cpp:546 msgid "Getting global universal unique identification..." msgstr "Uzyskiwanie globalnego uniwersalnego, unikalnego identyfikatora..." -#: ../lib/Plugins/CCpp.cpp:687 +#: ../lib/Plugins/CCpp.cpp:725 msgid "Skipping debuginfo installation" msgstr "Pomijanie instalacji pakietu debuginfo" @@ -526,7 +526,7 @@ msgstr "Tworzenie i wysyłanie raportu..." msgid "Writing report to '%s'" msgstr "Zapisywanie raportu do \"%s\"" -#: ../lib/Plugins/FileTransfer.cpp:63 ../lib/Plugins/FileTransfer.cpp:381 +#: ../lib/Plugins/FileTransfer.cpp:63 ../lib/Plugins/FileTransfer.cpp:372 msgid "FileTransfer: URL not specified" msgstr "Wtyczka przesyłania plików: nie podano adresu URL" @@ -535,16 +535,16 @@ msgstr "Wtyczka przesyłania plików: nie podano adresu URL" msgid "Sending archive %s to %s" msgstr "Wysyłanie archiwum %s do %s" -#: ../lib/Plugins/FileTransfer.cpp:306 +#: ../lib/Plugins/FileTransfer.cpp:296 msgid "File Transfer: Creating a report..." msgstr "Wtyczka przesyłania plików: tworzenie raportu..." -#: ../lib/Plugins/FileTransfer.cpp:331 +#: ../lib/Plugins/FileTransfer.cpp:322 #, c-format msgid "Can't create and send an archive: %s" msgstr "Nie można utworzyć i wysłać archiwum: %s" -#: ../lib/Plugins/FileTransfer.cpp:356 +#: ../lib/Plugins/FileTransfer.cpp:347 #, c-format msgid "Can't create and send an archive %s" msgstr "Nie można utworzyć i wysłać archiwum %s" @@ -553,7 +553,7 @@ msgstr "Nie można utworzyć i wysłać archiwum %s" msgid "Creating kernel oops crash reports..." msgstr "Tworzenie raportów awarii \"kernel oops\"" -#: ../lib/Plugins/Mailx.cpp:164 +#: ../lib/Plugins/Mailx.cpp:147 msgid "Sending an email..." msgstr "Wysłanie wiadomości e-mail..." @@ -566,6 +566,6 @@ msgstr "Wykonywanie wtyczki SOSreport..." msgid "running sosreport: %s" msgstr "wykonywanie sosreport: %s" -#: ../lib/Plugins/SOSreport.cpp:95 +#: ../lib/Plugins/SOSreport.cpp:97 msgid "done running sosreport" msgstr "ukończono wykonywanie sosreport" diff --git a/scripts/abrt-bz-stats b/scripts/abrt-bz-stats new file mode 100755 index 0000000..2923665 --- /dev/null +++ b/scripts/abrt-bz-stats @@ -0,0 +1,79 @@ +#!/usr/bin/python +# -*- mode:python -*- + +from bugzilla import RHBugzilla +from optparse import OptionParser +import sys +import os.path +import subprocess +import datetime +import pickle + +parser = OptionParser(version="%prog 1.0") +parser.add_option("-u", "--user", dest="user", + help="Bugzilla user name (REQUIRED)", metavar="USERNAME") +parser.add_option("-p", "--password", dest="password", + help="Bugzilla password (REQUIRED)", metavar="PASSWORD") +parser.add_option("-b", "--bugzilla", dest="bugzilla", + help="Bugzilla URL (defaults to Red Hat Bugzilla)", metavar="URL") +(options, args) = parser.parse_args() + +if not options.user or len(options.user) == 0: + parser.error("User name is required.\nTry {0} --help".format(sys.argv[0])) +if not options.password or len(options.password) == 0: + parser.error("Password is required.\nTry {0} --help".format(sys.argv[0])) +if not options.bugzilla or len(options.bugzilla) == 0: + options.bugzilla = "https://bugzilla.redhat.com/xmlrpc.cgi" + +bz = RHBugzilla() +bz.connect(options.bugzilla) +bz.login(options.user, options.password) + +buginfos = bz.query({'status_whiteboard_type':'allwordssubstr','status_whiteboard':'abrt_hash'}) +total = len(buginfos) +print "{0} bugs found.".format(total) + +buginfos_loaded = {} +if os.path.isfile("cache"): + f = open("cache", 'r') + buginfos_loaded = pickle.load(f) + f.close() + +count = 0 +for buginfo in buginfos: + count += 1 + print "{0}/{1}".format(count, total) + dtkey = buginfo.delta_ts[0:7] # YEAR-MONTH + statuskey = buginfo.bug_status + if buginfo.resolution != "": + statuskey += "_" + buginfo.resolution + if not buginfos_loaded.has_key(buginfo.bug_id): + buginfos_loaded[buginfo.bug_id] = (dtkey, statuskey) + if count % 100 == 0: + f = open("cache", 'w') + pickle.dump(buginfos_loaded, f, 2) + f.close() +bz.logout() + +stats = {} +for buginfo in buginfos_loaded.values(): + if buginfo[0] in stats: + stat = stats[buginfo[0]] + if buginfo[1] in stat: + stat[buginfo[1]] += 1 + else: + stat[buginfo[1]] = 1 + else: + stats[buginfo[0]] = { buginfo[1]:1 } + +print "STATS" +print "==========================================================================" +months = stats.keys() +months.sort() +for month in months: + stat = stats[month] + statuses = stat.keys() + statuses.sort() + print "Month ", month + for status in statuses: + print status, stat[status] diff --git a/src/CLI/dbus.cpp b/src/CLI/dbus.cpp index b218679..0d03c4d 100644 --- a/src/CLI/dbus.cpp +++ b/src/CLI/dbus.cpp @@ -184,7 +184,8 @@ int32_t call_DeleteDebugDump(const char* uuid) return result; } -vector_map_string_t call_GetPluginsInfo() +#ifdef UNUSED +map_map_string_t call_GetPluginsInfo() { DBusMessage *msg = new_call_msg(__func__ + 5); DBusMessage *reply = send_get_reply_and_unref(msg); @@ -192,7 +193,7 @@ vector_map_string_t call_GetPluginsInfo() DBusMessageIter in_iter; dbus_message_iter_init(reply, &in_iter); - vector_map_string_t argout; + map_map_string_t argout; int r = load_val(&in_iter, argout); if (r != ABRT_DBUS_LAST_FIELD) /* more values present, or bad type */ error_msg_and_die("dbus call %s: return type mismatch", __func__ + 5); @@ -200,6 +201,7 @@ vector_map_string_t call_GetPluginsInfo() dbus_message_unref(reply); return argout; } +#endif void handle_dbus_err(bool error_flag, DBusError *err) { diff --git a/src/CLI/dbus.h b/src/CLI/dbus.h index 3c157c0..c692e19 100644 --- a/src/CLI/dbus.h +++ b/src/CLI/dbus.h @@ -28,15 +28,17 @@ map_crash_report_t call_CreateReport(const char *uuid); report_status_t call_Report(const map_crash_report_t& report); int32_t call_DeleteDebugDump(const char* uuid); +#ifdef UNUSED /* Gets basic data about all installed plugins. */ -vector_map_string_t call_GetPluginsInfo(); +map_map_string_t call_GetPluginsInfo(); /** Gets default plugin settings. * @param name - * Corresponds to name obtained from call_GetPluginsInfo. + * Corresponds to name obtained from call_GetPluginsInfo. */ map_plugin_settings_t call_GetPluginSettings(const char *name); +#endif void handle_dbus_err(bool error_flag, DBusError *err); diff --git a/src/Daemon/CommLayerServerDBus.cpp b/src/Daemon/CommLayerServerDBus.cpp index 8589941..db0d2f5 100644 --- a/src/Daemon/CommLayerServerDBus.cpp +++ b/src/Daemon/CommLayerServerDBus.cpp @@ -325,11 +325,9 @@ static int handle_DeleteDebugDump(DBusMessage* call, DBusMessage* reply) static int handle_GetPluginsInfo(DBusMessage* call, DBusMessage* reply) { - vector_map_string_t plugins_info = g_pPluginManager->GetPluginsInfo(); - DBusMessageIter out_iter; dbus_message_iter_init_append(reply, &out_iter); - store_val(&out_iter, plugins_info); + store_val(&out_iter, g_pPluginManager->GetPluginsInfo()); send_flush_and_unref(reply); return 0; @@ -348,9 +346,9 @@ static int handle_GetPluginSettings(DBusMessage* call, DBusMessage* reply) return -1; } - long unix_uid = get_remote_uid(call); - VERB1 log("got %s('%s') call from uid %ld", "GetPluginSettings", PluginName, unix_uid); - map_plugin_settings_t plugin_settings = g_pPluginManager->GetPluginSettings(PluginName, to_string(unix_uid).c_str()); + //long unix_uid = get_remote_uid(call); + //VERB1 log("got %s('%s') call from uid %ld", "GetPluginSettings", PluginName, unix_uid); + map_plugin_settings_t plugin_settings = g_pPluginManager->GetPluginSettings(PluginName); //, to_string(unix_uid).c_str()); DBusMessageIter out_iter; dbus_message_iter_init_append(reply, &out_iter); diff --git a/src/Daemon/Daemon.cpp b/src/Daemon/Daemon.cpp index 09d8ab8..a2970af 100644 --- a/src/Daemon/Daemon.cpp +++ b/src/Daemon/Daemon.cpp @@ -65,7 +65,8 @@ * Returns report_status_t (map_vector_string_t) - the status of each call. * 2nd parameter is the contents of user's abrt.conf. * - DeleteDebugDump(UUID): delete it from DB and delete corresponding /var/cache/abrt/DIR - * - GetPluginsInfo(): returns vector_map_string_t + * - GetPluginsInfo(): returns map_map_string_t + * map["plugin"] = { "Name": "plugin", "Enabled": "yes" ... } * - GetPluginSettings(PluginName): returns map_plugin_settings_t (map_string_t) * - SetPluginSettings(PluginName, map_plugin_settings_t): returns void * - RegisterPlugin(PluginName): returns void diff --git a/src/Daemon/PluginManager.cpp b/src/Daemon/PluginManager.cpp index 136277c..c552880 100644 --- a/src/Daemon/PluginManager.cpp +++ b/src/Daemon/PluginManager.cpp @@ -27,6 +27,8 @@ #include "Polkit.h" #include "PluginManager.h" +using namespace std; + /** * Text representation of plugin types. */ @@ -40,12 +42,12 @@ static const char *const plugin_type_str[] = { bool LoadPluginSettings(const char *pPath, map_plugin_settings_t& pSettings) { - std::ifstream fIn; + ifstream fIn; fIn.open(pPath); if (!fIn.is_open()) return false; - std::string line; + string line; while (!fIn.eof()) { getline(fIn, line); @@ -54,8 +56,8 @@ bool LoadPluginSettings(const char *pPath, map_plugin_settings_t& pSettings) bool is_value = false; bool valid = false; bool in_quote = false; - std::string key; - std::string value; + string key; + string value; for (ii = 0; ii < line.length(); ii++) { if (line[ii] == '"') @@ -157,6 +159,10 @@ void CPluginManager::UnLoadPlugins() CPlugin* CPluginManager::LoadPlugin(const char *pName, bool enabled_only) { + map_string_t plugin_info; + + plugin_info["Name"] = pName; + map_plugin_t::iterator it_plugin = m_mapPlugins.find(pName); if (it_plugin != m_mapPlugins.end()) { @@ -170,8 +176,9 @@ CPlugin* CPluginManager::LoadPlugin(const char *pName, bool enabled_only) conf_name = "Kerneloops"; } map_plugin_settings_t pluginSettings; - std::string conf_fullname = ssprintf(PLUGINS_CONF_DIR"/%s."PLUGINS_CONF_EXTENSION, conf_name); + string conf_fullname = ssprintf(PLUGINS_CONF_DIR"/%s."PLUGINS_CONF_EXTENSION, conf_name); LoadPluginSettings(conf_fullname.c_str(), pluginSettings); + m_map_plugin_settings[pName] = pluginSettings; VERB3 log("Loaded %s.conf", conf_name); if (enabled_only) @@ -179,12 +186,21 @@ CPlugin* CPluginManager::LoadPlugin(const char *pName, bool enabled_only) map_plugin_settings_t::iterator it = pluginSettings.find("Enabled"); if (it == pluginSettings.end() || !string_to_bool(it->second.c_str())) { + plugin_info["Enabled"] = "no"; + string empty; + plugin_info["Type"] = empty; + plugin_info["Version"] = empty; + plugin_info["Description"] = empty; + plugin_info["Email"] = empty; + plugin_info["WWW"] = empty; + plugin_info["GTKBuilder"] = empty; + m_map_plugin_info[pName] = plugin_info; VERB3 log("Plugin %s: 'Enabled' is not set, not loading it (yet)", pName); return NULL; /* error */ } } - std::string libPath = ssprintf(PLUGINS_LIB_DIR"/"PLUGINS_LIB_PREFIX"%s."PLUGINS_LIB_EXTENSION, pName); + string libPath = ssprintf(PLUGINS_LIB_DIR"/"PLUGINS_LIB_PREFIX"%s."PLUGINS_LIB_EXTENSION, pName); CLoadedModule* module = new CLoadedModule(libPath.c_str()); if (module->GetMagicNumber() != PLUGINS_MAGIC_NUMBER || module->GetType() < 0 @@ -217,6 +233,16 @@ CPlugin* CPluginManager::LoadPlugin(const char *pName, bool enabled_only) return NULL; /* error */ } + plugin_info["Enabled"] = "yes"; + plugin_info["Type"] = plugin_type_str[module->GetType()]; + //plugin_info["Name"] = module->GetName(); + plugin_info["Version"] = module->GetVersion(); + plugin_info["Description"] = module->GetDescription(); + plugin_info["Email"] = module->GetEmail(); + plugin_info["WWW"] = module->GetWWW(); + plugin_info["GTKBuilder"] = module->GetGTKBuilder(); + + m_map_plugin_info[pName] = plugin_info; m_mapLoadedModules[pName] = module; m_mapPlugins[pName] = plugin; log("Registered %s plugin '%s'", plugin_type_str[module->GetType()], pName); @@ -344,28 +370,6 @@ plugin_type_t CPluginManager::GetPluginType(const char *pName) return it_module->second->GetType(); } -vector_map_string_t CPluginManager::GetPluginsInfo() -{ - vector_map_string_t ret; - map_loaded_module_t::iterator it_module = m_mapLoadedModules.begin(); - for (; it_module != m_mapLoadedModules.end(); it_module++) - { - map_string_t plugin_info; - - plugin_info["Enabled"] = (m_mapPlugins.find(it_module->second->GetName()) != m_mapPlugins.end()) ? - "yes" : "no"; - plugin_info["Type"] = plugin_type_str[it_module->second->GetType()]; - plugin_info["Name"] = it_module->second->GetName(); - plugin_info["Version"] = it_module->second->GetVersion(); - plugin_info["Description"] = it_module->second->GetDescription(); - plugin_info["Email"] = it_module->second->GetEmail(); - plugin_info["WWW"] = it_module->second->GetWWW(); - plugin_info["GTKBuilder"] = it_module->second->GetGTKBuilder(); - ret.push_back(plugin_info); - } - return ret; -} - void CPluginManager::SetPluginSettings(const char *pName, const char *pUID, const map_plugin_settings_t& pSettings) @@ -388,14 +392,14 @@ void CPluginManager::SetPluginSettings(const char *pName, return; } - std::string home = get_home_dir(xatoi_u(pUID.c_str())); + string home = get_home_dir(xatoi_u(pUID.c_str())); if (home == "") { return; } - std::string confDir = home + "/.abrt"; - std::string confPath = confDir + "/" + pName + "."PLUGINS_CONF_EXTENSION; + string confDir = home + "/.abrt"; + string confPath = confDir + "/" + pName + "."PLUGINS_CONF_EXTENSION; uid_t uid = xatoi_u(pUID.c_str()); struct passwd* pw = getpwuid(uid); gid_t gid = pw ? pw->pw_gid : uid; @@ -440,33 +444,31 @@ void CPluginManager::SetPluginSettings(const char *pName, #endif } -map_plugin_settings_t CPluginManager::GetPluginSettings(const char *pName, - const char *pUID) +map_plugin_settings_t CPluginManager::GetPluginSettings(const char *pName) { map_plugin_settings_t ret; + map_loaded_module_t::iterator it_module = m_mapLoadedModules.find(pName); if (it_module != m_mapLoadedModules.end()) { map_plugin_t::iterator it_plugin = m_mapPlugins.find(pName); if (it_plugin != m_mapPlugins.end()) { + VERB3 log("Returning settings for loaded plugin %s", pName); ret = it_plugin->second->GetSettings(); - /** we don't want to load it from daemon if it's running under root - but wi might get back to this once we make the daemon to not run - with root privileges - */ - /* - if (it_module->second->GetType() == REPORTER) - { - std::string home = get_home_dir(xatoi_u(pUID.c_str())); - if (home != "") - { - LoadPluginSettings(home + "/.abrt/" + pName + "."PLUGINS_CONF_EXTENSION, ret); - } - } - */ return ret; } } + /* else: module is not loaded */ + map_map_string_t::iterator it_settings = m_map_plugin_settings.find(pName); + if (it_settings != m_map_plugin_settings.end()) + { + /* but it exists, its settings are available nevertheless */ + VERB3 log("Returning settings for non-loaded plugin %s", pName); + ret = it_settings->second; + return ret; + } + + VERB3 log("Request for settings of unknown plugin %s, returning null result", pName); return ret; } diff --git a/src/Daemon/PluginManager.h b/src/Daemon/PluginManager.h index d3e686c..22cc387 100644 --- a/src/Daemon/PluginManager.h +++ b/src/Daemon/PluginManager.h @@ -50,6 +50,11 @@ class CPluginManager * Registered plugins. A key is a plugin name. */ map_plugin_t m_mapPlugins; + /** + * List of all possible plugins (loaded or not), with some attributes. + */ + map_map_string_t m_map_plugin_info; + map_map_string_t m_map_plugin_settings; public: /** @@ -130,7 +135,7 @@ class CPluginManager * Then user can fill all needed informations like URLs etc. * @return A vector of maps <key, value> */ - vector_map_string_t GetPluginsInfo(); + const map_map_string_t& GetPluginsInfo() { return m_map_plugin_info; } /** * A method, which sets up a plugin. The settings are also saved in home * directory of an user. @@ -144,11 +149,9 @@ class CPluginManager /** * A method, which returns plugin's settings according to user. * @param pName A plugin name. - * @param pUID An uid of user. - * @return Plugin's settings accorting to user. + * @return Plugin's settings. */ - map_plugin_settings_t GetPluginSettings(const char *pName, - const char *pUID); + map_plugin_settings_t GetPluginSettings(const char *pName); }; /** diff --git a/src/Gui/ABRTExceptions.py b/src/Gui/ABRTExceptions.py index c4d6b59..c857f71 100644 --- a/src/Gui/ABRTExceptions.py +++ b/src/Gui/ABRTExceptions.py @@ -1,4 +1,4 @@ -from abrt_utils import _ +from abrt_utils import _, log, log1, log2 class IsRunning(Exception): def __init__(self): diff --git a/src/Gui/ABRTPlugin.py b/src/Gui/ABRTPlugin.py index 03b61fb..320c81c 100644 --- a/src/Gui/ABRTPlugin.py +++ b/src/Gui/ABRTPlugin.py @@ -10,15 +10,15 @@ Type Email Description """ -from abrt_utils import _ -from ConfBackend import ConfBackendGnomeKeyring, ConfBackendInitError +from abrt_utils import _, log, log1, log2 +from ConfBackend import getCurrentConfBackend, ConfBackendInitError class PluginSettings(dict): def __init__(self): dict.__init__(self) self.client_side_conf = None try: - self.client_side_conf = ConfBackendGnomeKeyring() + self.client_side_conf = getCurrentConfBackend() except ConfBackendInitError, e: print e pass @@ -53,7 +53,8 @@ class PluginSettings(dict): class PluginInfo(): """Class to represent common plugin info""" - types = {"Analyzer":_("Analyzer plugins"), + types = {"":_("Not loaded plugins"), + "Analyzer":_("Analyzer plugins"), "Action":_("Action plugins"), "Reporter":_("Reporter plugins"), "Database":_("Database plugins")} @@ -62,7 +63,6 @@ class PluginInfo(): "Type", "Email", "Description"] def __init__(self): - #print "Init PluginInfo" self.WWW = None self.Name = None self.Enabled = None @@ -95,7 +95,7 @@ class PluginInfo(): if self.Name: self.Settings.load_daemon_settings(self.Name, daemon_settings) else: - print _("Plugin name is not set, can't load its settings") + log("Plugin name is not set, can't load its settings") def save_settings_on_client_side(self): self.Settings.save_on_client_side(str(self.Name)) diff --git a/src/Gui/CCDBusBackend.py b/src/Gui/CCDBusBackend.py index ac378f4..f4ef104 100644 --- a/src/Gui/CCDBusBackend.py +++ b/src/Gui/CCDBusBackend.py @@ -6,7 +6,7 @@ from dbus.mainloop.glib import DBusGMainLoop import gtk from dbus.exceptions import * import ABRTExceptions -from abrt_utils import _ +from abrt_utils import _, log, log1, log2 CC_NAME = 'com.redhat.abrt' CC_IFACE = 'com.redhat.abrt' @@ -40,7 +40,7 @@ class DBusManager(gobject.GObject): if session: try: - app_proxy = session.get_object(APP_NAME,APP_PATH) + app_proxy = session.get_object(APP_NAME, APP_PATH) app_iface = dbus.Interface(app_proxy, dbus_interface=APP_IFACE) # app is running, so make it show it self app_iface.show() @@ -111,13 +111,13 @@ class DBusManager(gobject.GObject): # def disconnected(self, *args): # print "disconnect" - def error_handler_cb(self,error): - self.emit("abrt-error",error) + def error_handler_cb(self, error): + self.emit("abrt-error", error) - def warning_handler_cb(self,arg): - self.emit("warning",arg) + def warning_handler_cb(self, arg): + self.emit("warning", arg) - def error_handler(self,arg): + def error_handler(self, arg): # used to silently ingore dbus timeouts pass @@ -134,11 +134,11 @@ class DBusManager(gobject.GObject): self.emit("crash") def update_cb(self, message, job_id=0): - print "Update >>%s<<" % message + log1("Update:%s", message) self.emit("update", message) def warning_cb(self, message, job_id=0): - print "Warning >>%s<<" % message + log1("Warning:%s", message) self.emit("warning", message) def owner_changed_cb(self,name, old_owner, new_owner): @@ -151,7 +151,7 @@ class DBusManager(gobject.GObject): def jobdone_cb(self, dest, uuid): # TODO: check that it is indeed OUR job: # remember uuid in getReport and compare here - print "Our job for UUID %s is done." % uuid + log1("Our job for UUID %s is done", uuid) dump = self.daemon().CreateReport(uuid) if dump: self.emit("analyze-complete", dump) @@ -191,8 +191,6 @@ class DBusManager(gobject.GObject): def getPluginSettings(self, plugin_name): settings = self.daemon().GetPluginSettings(plugin_name) - #for i in settings.keys(): - # print i return settings # "Enable" toggling in GUI is disabled for now. Grep for PLUGIN_DYNAMIC_LOAD_UNLOAD @@ -210,6 +208,6 @@ class DBusManager(gobject.GObject): def setSettings(self, settings): # FIXME: STUB!!!! - print "setSettings stub" + log1("setSettings stub") retval = self.daemon().SetSettings(self.daemon().GetSettings()) print ">>>", retval diff --git a/src/Gui/CCDumpList.py b/src/Gui/CCDumpList.py index 09191f5..a8657e0 100644 --- a/src/Gui/CCDumpList.py +++ b/src/Gui/CCDumpList.py @@ -6,7 +6,6 @@ class DumpList(list): """Class to store list of debug dumps""" def __init__(self,dbus_manager=None): self.dm = dbus_manager - self.ddict = {} def load(self): if self.dm: @@ -21,7 +20,6 @@ class DumpList(list): # print "DumpList adding %s:%s" % (column,row[column]) entry.__dict__[column] = row[column] self.append(entry) - self.ddict[entry.getUUID()] = entry except Exception, e: # FIXME handle exception better # this is just temporary workaround for rhbz#543725 diff --git a/src/Gui/CCMainWindow.py b/src/Gui/CCMainWindow.py index f4e3a73..dcb71ae 100644 --- a/src/Gui/CCMainWindow.py +++ b/src/Gui/CCMainWindow.py @@ -2,6 +2,7 @@ import sys import os import pwd +import getopt import pygtk pygtk.require("2.0") import gobject @@ -10,8 +11,14 @@ try: except RuntimeError,e: # rhbz#552039 print e - os.exit() + sys.exit() import gtk.glade +try: + import rpm +except Exception, ex: + rpm = None + +from ConfBackend import getCurrentConfBackend, ConfBackendInitError import CCDBusBackend from CC_gui_functions import * from CCDumpList import getDumpList, DumpList @@ -21,12 +28,7 @@ from SettingsDialog import SettingsDialog from CCReport import Report from PluginList import getPluginInfoList import ABRTExceptions -from abrt_utils import _ - -try: - import rpm -except Exception, ex: - rpm = None +from abrt_utils import _, init_logging, log, log1, log2 class MainWindow(): @@ -41,11 +43,10 @@ class MainWindow(): sys.exit() except Exception, e: # show error message if connection fails - # FIXME add an option to start the daemon gui_error_message("%s" % e) sys.exit() #Set the Glade file - self.gladefile = "%s%sccgui.glade" % (sys.path[0],"/") + self.gladefile = "%s/ccgui.glade" % sys.path[0] self.wTree = gtk.glade.XML(self.gladefile) #Get the Main Window, and connect the "destroy" event @@ -233,9 +234,11 @@ class MainWindow(): # it is not informative (no URL to the report) for message in dump.getMessage().split('\n'): if message: - if "http" in message[0:5] or "file:///"[0:8] in message: - message = "<a href=\"%s\">%s</a>" % (message, message) + #Doesn't work (far too easy to make it worse, not better): + #if "http" in message[0:5] or "file:///"[0:8] in message: + # message = "<a href=\"%s\">%s</a>" % (message, message) report_label += "%s\n" % message + log2("setting markup '%s'", report_label) self.wTree.get_widget("lReported").set_markup(report_label) else: self.wTree.get_widget("lReported").set_markup(_("<b>Not reported!</b>")) @@ -297,13 +300,20 @@ class MainWindow(): try: self.pBarWindow.show_all() self.timer = gobject.timeout_add(100, self.progress_update_cb) - reporters_settings = {} - # self.pluginlist = getPluginInfoList(self.ccdaemon, refresh=True) - # don't force refresh! - self.pluginlist = getPluginInfoList(self.ccdaemon) - for plugin in self.pluginlist.getReporterPlugins(): - reporters_settings[str(plugin)] = plugin.Settings + # Old way: it needs to talk to daemon + #reporters_settings = {} + ## self.pluginlist = getPluginInfoList(self.ccdaemon, refresh=True) + ## don't force refresh! + #self.pluginlist = getPluginInfoList(self.ccdaemon) + #for plugin in self.pluginlist.getReporterPlugins(): + # reporters_settings[str(plugin)] = plugin.Settings + reporters_settings = getCurrentConfBackend().load_all() + log2("Report(result,settings):") + log2(" result:%s", str(result)) + # Careful, this will print reporters_settings["Password"] too + log2(" settings:%s", str(reporters_settings)) self.ccdaemon.Report(result, reporters_settings) + log2("Report() returned") #self.hydrate() except Exception, e: gui_error_message(_("Reporting failed!\n%s" % e)) @@ -381,8 +391,19 @@ class MainWindow(): self.window.present() if __name__ == "__main__": + try: + opts, args = getopt.getopt(sys.argv[1:], "v") + except getopt.GetoptError, err: + print str(err) # prints something like "option -a not recognized" + sys.exit(2) + verbose = 0 + for opt, arg in opts: + if opt == "-v": + verbose += 1 + init_logging("abrt-gui", verbose) + log1("log level:%d", verbose) + cc = MainWindow() cc.hydrate() cc.show() gtk.main() - diff --git a/src/Gui/CCReporterDialog.py b/src/Gui/CCReporterDialog.py index bba8942..ab6ad0f 100644 --- a/src/Gui/CCReporterDialog.py +++ b/src/Gui/CCReporterDialog.py @@ -12,7 +12,7 @@ from ABRTPlugin import PluginInfo from PluginSettingsUI import PluginSettingsUI from PluginList import getPluginInfoList #from CCDumpList import getDumpList, DumpList -from abrt_utils import _ +from abrt_utils import _, log, log1, log2 # FIXME - create method or smth that returns type|editable|content CD_TYPE = 0 diff --git a/src/Gui/CC_gui_functions.py b/src/Gui/CC_gui_functions.py index 0532ab7..0379f20 100644 --- a/src/Gui/CC_gui_functions.py +++ b/src/Gui/CC_gui_functions.py @@ -15,13 +15,15 @@ try: import rpm except: rpm = None +from abrt_utils import _, log, log1, log2 + def on_url_clicked(label, url): import gnomevfs file_mimetype = gnomevfs.get_mime_type(url) default_app = gnomevfs.mime_get_default_application(file_mimetype) if default_app: - #print "Default Application:", default_app[2] + log2("default application:%s", default_app[2]) subprocess.Popen([default_app[2], url]) def gui_report_dialog ( report_status_dict, parent_dialog, @@ -160,8 +162,8 @@ def gui_question_dialog ( message, parent_dialog=None, dialog.destroy() return ret -def get_icon_for_package(theme,package): - #print package +def get_icon_for_package(theme, package): + log2("get_icon_for_package('%s')", package) try: return theme.load_icon(package, 22, gtk.ICON_LOOKUP_USE_BUILTIN) except: @@ -169,7 +171,7 @@ def get_icon_for_package(theme,package): if not rpm: return None ts = rpm.TransactionSet() - mi = ts.dbMatch( 'name', package ) + mi = ts.dbMatch('name', package) possible_icons = [] icon_filename = "" filenames = "" @@ -180,19 +182,19 @@ def get_icon_for_package(theme,package): if filename.rfind(".png") != -1: possible_icons.append(filename) if filename.rfind(".desktop") != -1: - #print filename + log2("desktop file:'%s'", filename) desktop_file = open(filename, 'r') lines = desktop_file.readlines() for line in lines: if line.find("Icon=") != -1: - #print line[5:-1] + log2("Icon='%s'", line[5:-1]) icon_filename = line[5:-1] break desktop_file.close() # .dektop file found for filename in h['filenames']: if filename.rfind("%s.png" % icon_filename) != -1: - #print filename + log2("png file:'%s'", filename) icon_filename = filename break #we didn't find the .desktop file @@ -205,8 +207,8 @@ def get_icon_for_package(theme,package): if icon_filename: break if icon_filename: - #print "icon created form %s" % icon_filename - return gtk.gdk.pixbuf_new_from_file_at_size(icon_filename,22,22) + log1("icon created from %s", icon_filename) + return gtk.gdk.pixbuf_new_from_file_at_size(icon_filename, 22, 22) else: return None diff --git a/src/Gui/ConfBackend.py b/src/Gui/ConfBackend.py index 1d6ac9e..0d47760 100644 --- a/src/Gui/ConfBackend.py +++ b/src/Gui/ConfBackend.py @@ -1,9 +1,8 @@ -from abrt_utils import _ +from abrt_utils import _, log, log1, log2 # Doc on Gnome keyring API: # http://library.gnome.org/devel/gnome-keyring/stable/ - -#FIXME: add some backend factory +# Python bindings are in gnome-python2-desktop package try: import gnomekeyring as gkey @@ -48,22 +47,28 @@ class ConfBackend(object): # # Example: Key "abrt:Bugzilla" with bugzilla password as value, and with attributes: # +# Application: abrt # AbrtPluginInfo: Bugzilla # NoSSLVerify: yes # Login: user@host.com # BugzillaURL: https://host.with.bz.com/ # -# The attribute "AbrtPluginInfo" is special, it is used for retrieving -# the key via keyring API find_items_sync() function. +# Attributes "Application" and "AbrtPluginInfo" are special, they are used +# for efficient key retrieval via keyring API find_items_sync() function. +g_default_key_ring = None class ConfBackendGnomeKeyring(ConfBackend): def __init__(self): + global g_default_key_ring + ConfBackend.__init__(self) - if not gkey.is_available(): + if g_default_key_ring: + return + if not gkey or not gkey.is_available(): raise ConfBackendInitError(_("Can't connect to Gnome Keyring daemon")) try: - self.default_key_ring = gkey.get_default_keyring_sync() + g_default_key_ring = gkey.get_default_keyring_sync() except: # could happen if keyring daemon is running, but we run gui under # user who is not the owner of the running session - using su @@ -71,31 +76,35 @@ class ConfBackendGnomeKeyring(ConfBackend): def save(self, name, settings): settings_tmp = settings.copy() + settings_tmp["Application"] = "abrt" settings_tmp["AbrtPluginInfo"] = name - password = "" - item_list = [] + # delete all keyring items containg "AbrtPluginInfo":"<plugin_name>", + # so we always have only 1 item per plugin try: - item_list = gkey.find_items_sync(gkey.ITEM_GENERIC_SECRET, {"AbrtPluginInfo":str(name)}) + item_list = gkey.find_items_sync(gkey.ITEM_GENERIC_SECRET, { "AbrtPluginInfo": str(name) }) + for item in item_list: + log2("found old keyring item: ring:'%s' item_id:%s attrs:%s", item.keyring, item.item_id, str(item.attributes)) + log2("deleting it from keyring '%s'", g_default_key_ring) + gkey.item_delete_sync(g_default_key_ring, item.item_id) except gkey.NoMatchError: # nothing found pass except gkey.DeniedError: raise ConfBackendSaveError(_("Access to gnome-keyring has been denied, plugins settings won't be saved.")) - - # delete all items containg "AbrtPluginInfo":<plugin_name>, so we always have only 1 item per plugin - for item in item_list: - gkey.item_delete_sync(self.default_key_ring, item.item_id) - + # if plugin has a "Password" setting, we handle it specially: in keyring, + # it is stored as item.secret, not as one of attributes + password = "" if "Password" in settings_tmp: password = settings_tmp["Password"] del settings_tmp["Password"] + # store new settings for this plugin as one keyring item try: - gkey.item_create_sync(self.default_key_ring, + gkey.item_create_sync(g_default_key_ring, gkey.ITEM_GENERIC_SECRET, - "abrt:%s" % name, - settings_tmp, - password, + "abrt:%s" % name, # display_name + settings_tmp, # attrs + password, # secret True) except gkey.DeniedError, e: raise ConfBackendSaveError(_("Access to gnome-keyring has been denied, plugins settings won't be saved.")) @@ -103,17 +112,110 @@ class ConfBackendGnomeKeyring(ConfBackend): def load(self, name): item_list = None try: + log2("looking for keyring items with 'AbrtPluginInfo:%s' attr", str(name)) item_list = gkey.find_items_sync(gkey.ITEM_GENERIC_SECRET, {"AbrtPluginInfo":str(name)}) + for item in item_list: + # gnome keyring is weeeeird. why display_name, type, mtime, ctime + # aren't available in find_items_sync() results? why we need to + # get them via additional call, item_get_info_sync()? + # internally, item has GNOME_KEYRING_TYPE_FOUND type, + # and info has GNOME_KEYRING_TYPE_ITEM_INFO type. + # why not use the same type for both? + # + # and worst of all, this information took four hours of googling... + # + #info = gkey.item_get_info_sync(item.keyring, item.item_id) + log2("found keyring item: ring:'%s' item_id:%s attrs:%s", # "secret:'%s' display_name:'%s'" + item.keyring, item.item_id, str(item.attributes) #, item.secret, info.get_display_name() + ) except gkey.NoMatchError: # nothing found pass - if item_list: retval = item_list[0].attributes.copy() retval["Password"] = item_list[0].secret return retval - else: - return {} - #for i in item_list: - # for attr in i.attributes: - # print attr, i.attributes[attr] + return {} + + # This routine loads setting for all plugins. It doesn't need plugin name. + # Thus we can avoid talking to abrtd just in order to get plugin names. + def load_all(self): + retval = {} + item_list = {} + + # UGLY compat cludge for users who has saved items without "Application" attr + # (abrt <= 1.0.3 was saving those) + item_ids = gkey.list_item_ids_sync(g_default_key_ring) + log2("all keyring item ids:%s", item_ids) + for item_id in item_ids: + info = gkey.item_get_info_sync(g_default_key_ring, item_id) + attrs = gkey.item_get_attributes_sync(g_default_key_ring, item_id) + log2("keyring item %s: attrs:%s", item_id, str(attrs)) + if "AbrtPluginInfo" in attrs: + if not "Application" in attrs: + log2("updating old-style keyring item") + attrs["Application"] = "abrt" + try: + gkey.item_set_attributes_sync(g_default_key_ring, item_id, attrs) + except: + log2("error updating old-style keyring item") + plugin_name = attrs["AbrtPluginInfo"] + # If plugin has a "Password" setting, we handle it specially: in keyring, + # it is stored as item.secret, not as one of attributes + if info.get_secret(): + attrs["Password"] = info.get_secret() + # avoiding sending useless duplicate info over dbus... + del attrs["AbrtPluginInfo"] + try: + del attrs["Application"] + except: + pass + retval[plugin_name] = attrs; + # end of UGLY compat cludge + + try: + log2("looking for keyring items with 'Application:abrt' attr") + item_list = gkey.find_items_sync(gkey.ITEM_GENERIC_SECRET, { "Application": "abrt" }) + except gkey.NoMatchError: + # nothing found + pass + for item in item_list: + # gnome keyring is weeeeird. why display_name, type, mtime, ctime + # aren't available in find_items_sync() results? why we need to + # get them via additional call, item_get_info_sync()? + # internally, item has GNOME_KEYRING_TYPE_FOUND type, + # and info has GNOME_KEYRING_TYPE_ITEM_INFO type. + # why not use the same type for both? + # + # and worst of all, this information took four hours of googling... + # + #info = gkey.item_get_info_sync(item.keyring, item.item_id) + log2("found keyring item: ring:%s item_id:%s attrs:%s", # "secret:%s display_name:'%s'" + item.keyring, item.item_id, str(item.attributes) #, item.secret, info.get_display_name() + ) + attrs = item.attributes.copy() + if "AbrtPluginInfo" in attrs: + plugin_name = attrs["AbrtPluginInfo"] + # If plugin has a "Password" setting, we handle it specially: in keyring, + # it is stored as item.secret, not as one of attributes + if item.secret: + attrs["Password"] = item.secret + # avoiding sending useless duplicate info over dbus... + del attrs["AbrtPluginInfo"] + try: + del attrs["Application"] + except: + pass + retval[plugin_name] = attrs; + return retval + + +# Rudimentary backend factory + +currentConfBackend = None + +def getCurrentConfBackend(): + global currentConfBackend + if not currentConfBackend: + currentConfBackend = ConfBackendGnomeKeyring() + return currentConfBackend diff --git a/src/Gui/PluginList.py b/src/Gui/PluginList.py index 79df126..d2232bb 100644 --- a/src/Gui/PluginList.py +++ b/src/Gui/PluginList.py @@ -1,31 +1,27 @@ # -*- coding: utf-8 -*- import CCDBusBackend from ABRTPlugin import PluginInfo, PluginSettings +from abrt_utils import _, log, log1, log2 class PluginInfoList(list): """Class to store list of PluginInfos""" def __init__(self,dbus_manager=None): self.dm = dbus_manager - self.ddict = {} def load(self): if self.dm: - #print "loading PluginList" rows = self.dm.getPluginsInfo() - #print rows - for row in rows: + for plugin_name in rows: + row = rows[plugin_name] entry = PluginInfo() - for column in row: - #print "PluginInfoList adding %s:%s" % (column,row[column]) - entry.__dict__[column] = row[column] - if entry.Enabled == "yes": - #entry.Settings = PluginSettings(self.dm.getPluginSettings(str(entry))) - daemon_settings = self.dm.getPluginSettings(str(entry)) - entry.load_daemon_settings(daemon_settings) + for attr_name in row: + log2("PluginInfoList: adding %s[%s]:%s", plugin_name, attr_name, row[attr_name]) + entry.__dict__[attr_name] = row[attr_name] + daemon_settings = self.dm.getPluginSettings(plugin_name) + entry.load_daemon_settings(daemon_settings) self.append(entry) - self.ddict[entry.getName()] = entry else: - print "db == None!" + log("PluginInfoList: db == None") def getEnabledPlugins(self): return [x for x in self if x["Enabled"] == 'yes'] diff --git a/src/Gui/PluginSettingsUI.py b/src/Gui/PluginSettingsUI.py index a26f87f..c324b31 100644 --- a/src/Gui/PluginSettingsUI.py +++ b/src/Gui/PluginSettingsUI.py @@ -1,5 +1,5 @@ import gtk -from abrt_utils import _ +from abrt_utils import _, log, log1, log2 class PluginSettingsUI(gtk.Dialog): def __init__(self, pluginfo, parent=None): diff --git a/src/Gui/PluginsSettingsDialog.py b/src/Gui/PluginsSettingsDialog.py index 0d41962..611a8c5 100644 --- a/src/Gui/PluginsSettingsDialog.py +++ b/src/Gui/PluginsSettingsDialog.py @@ -4,7 +4,7 @@ from PluginList import getPluginInfoList, PluginInfoList from CC_gui_functions import * from PluginSettingsUI import PluginSettingsUI from ABRTPlugin import PluginSettings, PluginInfo -from abrt_utils import _ +from abrt_utils import _, log, log1, log2 class PluginsSettingsDialog: @@ -13,7 +13,7 @@ class PluginsSettingsDialog: self.ccdaemon = daemon self.builder = gtk.Builder() - builderfile = "%s%ssettings.glade" % (sys.path[0],"/") + builderfile = "%s%ssettings.glade" % (sys.path[0], "/") #print builderfile try: self.builder.add_from_file(builderfile) @@ -99,13 +99,20 @@ class PluginsSettingsDialog: except Exception, e: print e #gui_error_message("Error while loading plugins info, please check if abrt daemon is running\n %s" % e) + return plugin_rows = {} for plugin_type in PluginInfo.types.keys(): - it = self.pluginsListStore.append(None, ["<b>%s</b>" % PluginInfo.types[plugin_type], 0, 0, 1, "gray", None]) + it = self.pluginsListStore.append(None, + ["<b>%s</b>" % PluginInfo.types[plugin_type], 0, 0, 1, "gray", None]) plugin_rows[plugin_type] = it for entry in pluginlist: + if entry.Description: + text = "<b>%s</b>\n%s" % (entry.getName(), entry.Description) + else: + # non-loaded plugins have empty description + text = "<b>%s</b>" % entry.getName() self.pluginsListStore.append(plugin_rows[entry.getType()], - ["<b>%s</b>\n%s" % (entry.getName(), entry.Description), entry.Enabled == "yes", 1, 0, "white", entry]) + [text, entry.Enabled == "yes", 1, 0, "white", entry]) self.pluginlist.expand_all() def dehydrate(self): @@ -149,7 +156,7 @@ class PluginsSettingsDialog: elif response == gtk.RESPONSE_CANCEL: pass else: - print _("unknown response from settings dialog") + log("unknown response from settings dialog:%d", response) ui.destroy() def on_bClose_clicked(self, button): diff --git a/src/Gui/SettingsDialog.py b/src/Gui/SettingsDialog.py index c2b292f..893c23f 100644 --- a/src/Gui/SettingsDialog.py +++ b/src/Gui/SettingsDialog.py @@ -3,7 +3,7 @@ import gtk from PluginList import getPluginInfoList from CC_gui_functions import * #from PluginSettingsUI import PluginSettingsUI -from abrt_utils import _ +from abrt_utils import _, log, log1, log2 #FIXME: create a better struct, to automatize hydrate/dehydrate process diff --git a/src/Gui/abrt_utils.py b/src/Gui/abrt_utils.py index 6122b9c..2fabb54 100644 --- a/src/Gui/abrt_utils.py +++ b/src/Gui/abrt_utils.py @@ -1,16 +1,37 @@ +import sys import gtk.glade + PROGNAME = "abrt" +g_verbose = 0 + import locale -try: - locale.setlocale (locale.LC_ALL, "") -except locale.Error, e: - import os - os.environ['LC_ALL'] = 'C' - locale.setlocale (locale.LC_ALL, "") import gettext -gettext.bind_textdomain_codeset(PROGNAME,locale.nl_langinfo(locale.CODESET)) -gettext.bindtextdomain(PROGNAME, '/usr/share/locale') -gtk.glade.bindtextdomain(PROGNAME, '/usr/share/locale') -gtk.glade.textdomain(PROGNAME) -gettext.textdomain(PROGNAME) + _ = lambda x: gettext.lgettext(x) + +def init_logging(progname, v): + global PROGNAME, g_verbose + PROGNAME = progname + g_verbose = v + try: + locale.setlocale(locale.LC_ALL, "") + except locale.Error, e: + import os + os.environ['LC_ALL'] = 'C' + locale.setlocale(locale.LC_ALL, "") + gettext.bind_textdomain_codeset(PROGNAME, locale.nl_langinfo(locale.CODESET)) + gettext.bindtextdomain(PROGNAME, '/usr/share/locale') + gtk.glade.bindtextdomain(PROGNAME, '/usr/share/locale') + gtk.glade.textdomain(PROGNAME) + gettext.textdomain(PROGNAME) + +def log(fmt, *args): + sys.stderr.write("%s: %s\n" % (PROGNAME, fmt % args)) + +def log1(fmt, *args): + if g_verbose >= 1: + sys.stderr.write("%s: %s\n" % (PROGNAME, fmt % args)) + +def log2(fmt, *args): + if g_verbose >= 2: + sys.stderr.write("%s: %s\n" % (PROGNAME, fmt % args)) diff --git a/src/Hooks/abrt_exception_handler.py.in b/src/Hooks/abrt_exception_handler.py.in index a0b0519..e0e1954 100644 --- a/src/Hooks/abrt_exception_handler.py.in +++ b/src/Hooks/abrt_exception_handler.py.in @@ -213,7 +213,7 @@ def handleMyException((etype, value, tb)): text += ("\nLocal variables in innermost frame:\n") try: for (key, val) in frame.f_locals.items(): - text += "%s: %s\n" % (key, val) + text += "%s: %s\n" % (key, repr(val)) except: pass |
