summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZdenek Prikryl <zprikryl@redhat.com>2009-09-08 17:08:16 +0200
committerZdenek Prikryl <zprikryl@redhat.com>2009-09-08 17:08:16 +0200
commitf02e1d87d46aa6161d0cab5444e0abfa9624b78d (patch)
treecc1148c8ef544818a7995074e679a987ba325a44
parent58d9dfde6ce788c5ffdfe5160d19aaeb8ac7b3a2 (diff)
parentff2627e7c597e50025ca4d91ff8168eec80f9054 (diff)
downloadabrt-f02e1d87d46aa6161d0cab5444e0abfa9624b78d.tar.gz
abrt-f02e1d87d46aa6161d0cab5444e0abfa9624b78d.tar.xz
abrt-f02e1d87d46aa6161d0cab5444e0abfa9624b78d.zip
Merge branch 'master' of git://git.fedorahosted.org/abrt
-rw-r--r--lib/CommLayer/CommLayerInner.cpp71
-rw-r--r--lib/CommLayer/CommLayerInner.h4
-rw-r--r--lib/CommLayer/Observer.h4
-rw-r--r--lib/MiddleWare/Database.h4
-rw-r--r--lib/Plugins/CCpp.cpp31
-rw-r--r--lib/Plugins/SQLite3.cpp73
-rw-r--r--lib/Plugins/SQLite3.h7
-rw-r--r--po/bn_IN.po430
-rw-r--r--po/cs.po3
-rw-r--r--po/gu.po441
-rw-r--r--po/ko.po49
-rw-r--r--po/ml.po45
-rw-r--r--po/mr.po448
-rw-r--r--po/nl.po45
-rw-r--r--po/pa.po415
-rw-r--r--po/pl.po36
-rw-r--r--po/ru.po187
-rw-r--r--po/te.po451
-rw-r--r--src/Daemon/CommLayerServer.h13
-rw-r--r--src/Daemon/CommLayerServerDBus.cpp134
-rw-r--r--src/Daemon/CommLayerServerDBus.h14
-rw-r--r--src/Daemon/CommLayerServerSocket.cpp11
-rw-r--r--src/Daemon/CommLayerServerSocket.h6
-rw-r--r--src/Daemon/CrashWatcher.cpp138
-rw-r--r--src/Daemon/CrashWatcher.h8
-rw-r--r--src/Daemon/Daemon.cpp34
-rw-r--r--src/Daemon/Daemon.h3
-rw-r--r--src/Daemon/MiddleWare.cpp22
-rw-r--r--src/Gui/ABRTPlugin.py3
-rw-r--r--src/Gui/CCDBusBackend.py14
-rw-r--r--src/Gui/CCMainWindow.py10
-rw-r--r--src/Gui/Makefile.am3
-rw-r--r--src/Gui/PluginList.py8
-rw-r--r--src/Gui/PluginsSettingsDialog.py161
-rw-r--r--src/Gui/SettingsDialog.py211
-rw-r--r--src/Gui/ccgui.glade7
-rw-r--r--src/Gui/settings.GtkBuilder260
37 files changed, 3293 insertions, 511 deletions
diff --git a/lib/CommLayer/CommLayerInner.cpp b/lib/CommLayer/CommLayerInner.cpp
index ec4dc904..5450b41c 100644
--- a/lib/CommLayer/CommLayerInner.cpp
+++ b/lib/CommLayer/CommLayerInner.cpp
@@ -1,50 +1,63 @@
-#include <pthread.h> /* pthread_self() */
+#include <pthread.h>
+#include <map>
#include "abrtlib.h"
#include "CommLayerInner.h"
static CObserver *s_pObs;
-static pthread_t s_main_id;
+
+typedef std::map<uint64_t, std::string> map_uint_str_t;
+static map_uint_str_t s_mapClientID;
+static pthread_mutex_t s_map_mutex;
+static bool s_map_mutex_inited;
void init_daemon_logging(CObserver *pObs)
{
s_pObs = pObs;
- s_main_id = pthread_self();
+ if (!s_map_mutex_inited)
+ {
+ pthread_mutex_init(&s_map_mutex, NULL);
+ s_map_mutex_inited = true;
+ }
+}
+
+void set_client_name(const char* name)
+{
+ uint64_t key = uint64_t(pthread_self());
+
+ pthread_mutex_lock(&s_map_mutex);
+ if (!name)
+ s_mapClientID.erase(key);
+ else
+ s_mapClientID[key] = name;
+ pthread_mutex_unlock(&s_map_mutex);
}
void warn_client(const std::string& pMessage)
{
if (!s_pObs)
return;
- pthread_t self = pthread_self();
- if (self != s_main_id)
- {
- s_pObs->Warning(pMessage,(uint64_t)self);
-//log("w: '%s'", s.c_str());
- }
- else
- {
- s_pObs->Warning(pMessage);
-// debug: this should not happen - if it is, we are trying to log to a client
-// but we have no job id!
-log("W: '%s'", pMessage.c_str());
- }
+
+ uint64_t key = uint64_t(pthread_self());
+
+ pthread_mutex_lock(&s_map_mutex);
+ map_uint_str_t::const_iterator ki = s_mapClientID.find(key);
+ const char* peer = (ki != s_mapClientID.end() ? ki->second.c_str() : NULL);
+ pthread_mutex_unlock(&s_map_mutex);
+
+ s_pObs->Warning(pMessage, peer, key);
}
void update_client(const std::string& pMessage)
{
if (!s_pObs)
return;
- pthread_t self = pthread_self();
- if (self != s_main_id)
- {
- s_pObs->Status(pMessage, (uint64_t)self);
-//log("u: '%s'", s.c_str());
- }
- else
- {
- s_pObs->Status(pMessage);
-// debug: this should not happen - if it is, we are trying to log to a client
-// but we have no job id!
-log("U: '%s'", pMessage.c_str());
- }
+
+ uint64_t key = uint64_t(pthread_self());
+
+ pthread_mutex_lock(&s_map_mutex);
+ map_uint_str_t::const_iterator ki = s_mapClientID.find(key);
+ const char* peer = (ki != s_mapClientID.end() ? ki->second.c_str() : NULL);
+ pthread_mutex_unlock(&s_map_mutex);
+
+ s_pObs->Status(pMessage, peer, key);
}
diff --git a/lib/CommLayer/CommLayerInner.h b/lib/CommLayer/CommLayerInner.h
index 2b4f63a3..d161cfc7 100644
--- a/lib/CommLayer/CommLayerInner.h
+++ b/lib/CommLayer/CommLayerInner.h
@@ -5,6 +5,10 @@
void init_daemon_logging(CObserver *pObs);
+/*
+ * Set client's name (dbus ID). NULL unsets it.
+ */
+void set_client_name(const char* name);
/* Ask a client to warn the user about a non-fatal, but unexpected condition.
* In GUI, it will usually be presented as a popup message.
*/
diff --git a/lib/CommLayer/Observer.h b/lib/CommLayer/Observer.h
index 5c983949..421dc0cc 100644
--- a/lib/CommLayer/Observer.h
+++ b/lib/CommLayer/Observer.h
@@ -9,8 +9,8 @@
class CObserver {
public:
virtual ~CObserver() {}
- virtual void Status(const std::string& pMessage, uint64_t pDest=0) = 0;
- virtual void Warning(const std::string& pMessage, uint64_t pDest=0) = 0;
+ virtual void Status(const std::string& pMessage, const char* peer, uint64_t pDest) = 0;
+ virtual void Warning(const std::string& pMessage, const char* peer, uint64_t pDest) = 0;
};
#endif
diff --git a/lib/MiddleWare/Database.h b/lib/MiddleWare/Database.h
index ce29f18b..0fc31ee7 100644
--- a/lib/MiddleWare/Database.h
+++ b/lib/MiddleWare/Database.h
@@ -111,7 +111,7 @@ class CDatabase : public CPlugin
* @param pUID An UID of an user.
* @return A vector of matched rows.
*/
- virtual const vector_database_rows_t GetUIDData(const std::string& pUID) = 0;
+ virtual vector_database_rows_t GetUIDData(const std::string& pUID) = 0;
/**
* A method, which returns one row accordind to UUID of a crash and
* UID of an user. If there are no row, empty row is returned.
@@ -119,7 +119,7 @@ class CDatabase : public CPlugin
* @param pUID An UID of an user.
* @return A matched row.
*/
- virtual const database_row_t GetUUIDData(const std::string& pUUID,
+ virtual database_row_t GetUUIDData(const std::string& pUUID,
const std::string& pUID) = 0;
};
diff --git a/lib/Plugins/CCpp.cpp b/lib/Plugins/CCpp.cpp
index 2d0326c5..995ddbeb 100644
--- a/lib/Plugins/CCpp.cpp
+++ b/lib/Plugins/CCpp.cpp
@@ -428,22 +428,24 @@ std::string CAnalyzerCCpp::GetLocalUUID(const std::string& pDebugDumpDir)
{
update_client(_("Getting local universal unique identification..."));
- CDebugDump dd;
std::string UID;
std::string executable;
std::string package;
std::string buildIdPC;
std::string independentBuildIdPC;
- std::string core = "--core="+ pDebugDumpDir + "/" +FILENAME_COREDUMP;
+ std::string core = "--core=" + pDebugDumpDir + "/"FILENAME_COREDUMP;
char* command = (char*)"eu-unstrip";
char* args[4] = { (char*)"eu-unstrip", NULL, (char*)"-n", NULL };
args[1] = (char*)core.c_str();
+
+ CDebugDump dd;
dd.Open(pDebugDumpDir);
dd.LoadText(FILENAME_UID, UID);
dd.LoadText(FILENAME_EXECUTABLE, executable);
dd.LoadText(FILENAME_PACKAGE, package);
ExecVP(command, args, atoi(UID.c_str()), buildIdPC);
dd.Close();
+
GetIndependentBuildIdPC(buildIdPC, independentBuildIdPC);
return CreateHash(package + executable + independentBuildIdPC);
}
@@ -484,14 +486,13 @@ void CAnalyzerCCpp::CreateReport(const std::string& pDebugDumpDir)
dd.Close();
map_plugin_settings_t settings = GetSettings();
- if( settings["InstallDebuginfo"] == "yes" )
+ if (settings["InstallDebuginfo"] == "yes")
{
InstallDebugInfos(package);
}
- else {
- char buffer[1024];
- snprintf(buffer,1024, _("Skip debuginfo installation for package %s"), package.c_str());
- warn_client(std::string(buffer));
+ else
+ {
+ warn_client(ssprintf(_("Skip debuginfo installation for package %s"), package.c_str()));
}
GetBacktrace(pDebugDumpDir, backtrace);
@@ -554,17 +555,21 @@ void CAnalyzerCCpp::DeInit()
void CAnalyzerCCpp::SetSettings(const map_plugin_settings_t& pSettings)
{
- if (pSettings.find("MemoryMap") != pSettings.end())
+ map_plugin_settings_t::const_iterator end = pSettings.end();
+ map_plugin_settings_t::const_iterator it = pSettings.find("MemoryMap");
+ if (it != end)
{
- m_bMemoryMap = pSettings.find("MemoryMap")->second == "yes";
+ m_bMemoryMap = it->second == "yes";
}
- if (pSettings.find("DebugInfo") != pSettings.end())
+ it = pSettings.find("DebugInfo");
+ if (it != end)
{
- m_sDebugInfo = pSettings.find("DebugInfo")->second;
+ m_sDebugInfo = it->second;
}
- if (pSettings.find("InstallDebuginfo") != pSettings.end())
+ it = pSettings.find("InstallDebuginfo");
+ if (it != end)
{
- m_bInstallDebuginfo = pSettings.find("InstallDebuginfo")->second == "yes";
+ m_bInstallDebuginfo = it->second == "yes";
}
}
diff --git a/lib/Plugins/SQLite3.cpp b/lib/Plugins/SQLite3.cpp
index a57da240..700ac913 100644
--- a/lib/Plugins/SQLite3.cpp
+++ b/lib/Plugins/SQLite3.cpp
@@ -1,6 +1,5 @@
/*
- DebugDump.h - header file for the library caring of writing new reports
- to the specific directory
+ SQLite3.cpp
Copyright (C) 2009 Zdenek Prikryl (zprikryl@redhat.com)
Copyright (C) 2009 RedHat inc.
@@ -33,7 +32,7 @@
#define ABRT_TABLE "abrt_v"ABRT_TABLE_VERSION_STR
#define SQLITE3_MASTER_TABLE "sqlite_master"
-// afret a while, we can drom a support for update, so a table can stay in
+// after a while, we can drop support for update, so a table can stay in
// normal limits
static const char* upate_sql_commands[][ABRT_TABLE_VERSION + 1] = {
// v0 -> *
@@ -100,9 +99,9 @@ bool CSQLite3::Exist(const std::string& pUUID, const std::string& pUID)
GetTable("SELECT "DATABASE_COLUMN_REPORTED" FROM "ABRT_TABLE" WHERE "
DATABASE_COLUMN_UUID" = '"+pUUID+"' AND "
DATABASE_COLUMN_UID" = '"+pUID+"';", table);
- if(table.empty())
+ if (table.empty())
{
- return false;
+ return false;
}
return true;
}
@@ -113,7 +112,7 @@ void CSQLite3::Exec(const std::string& pCommand)
int ret = sqlite3_exec(m_pDB, pCommand.c_str(), 0, 0, &err);
if (ret != SQLITE_OK)
{
- throw CABRTException(EXCEP_PLUGIN, "SQLite3::Exec(): Error on: " + pCommand + " " + err);
+ throw CABRTException(EXCEP_PLUGIN, "SQLite3::Exec(): Error on: " + pCommand + " " + err);
}
}
@@ -211,7 +210,7 @@ bool CSQLite3::CheckTable()
int ret = sqlite3_get_table(m_pDB, command.c_str(), &table, &nrow, &ncol, &err);
if (ret != SQLITE_OK)
{
- throw CABRTException(EXCEP_PLUGIN, "SQLite3::GetTable(): Error on: " + command + " " + err);
+ throw CABRTException(EXCEP_PLUGIN, "SQLite3::GetTable(): Error on: " + command + " " + err);
}
if (!nrow || !nrow)
{
@@ -281,24 +280,24 @@ void CSQLite3::Insert(const std::string& pUUID,
{
if (!Exist(pUUID, pUID))
{
- Exec("INSERT INTO "ABRT_TABLE"("
- DATABASE_COLUMN_UUID","
- DATABASE_COLUMN_UID","
- DATABASE_COLUMN_DEBUG_DUMP_PATH","
- DATABASE_COLUMN_TIME")"
- " VALUES ('"+pUUID+"',"
- "'"+pUID+"',"
- "'"+pDebugDumpPath+"',"
- "'"+pTime+"'"
- ");");
+ Exec("INSERT INTO "ABRT_TABLE"("
+ DATABASE_COLUMN_UUID","
+ DATABASE_COLUMN_UID","
+ DATABASE_COLUMN_DEBUG_DUMP_PATH","
+ DATABASE_COLUMN_TIME")"
+ " VALUES ('"+pUUID+"',"
+ "'"+pUID+"',"
+ "'"+pDebugDumpPath+"',"
+ "'"+pTime+"'"
+ ");");
}
else
{
- Exec("UPDATE "ABRT_TABLE" "
- "SET "DATABASE_COLUMN_COUNT" = "DATABASE_COLUMN_COUNT" + 1, "
- DATABASE_COLUMN_TIME" = '"+pTime+"' "
- "WHERE "DATABASE_COLUMN_UUID" = '"+pUUID+"' "
- "AND "DATABASE_COLUMN_UID" = '"+pUID+"';");
+ Exec("UPDATE "ABRT_TABLE" "
+ "SET "DATABASE_COLUMN_COUNT" = "DATABASE_COLUMN_COUNT" + 1, "
+ DATABASE_COLUMN_TIME" = '"+pTime+"' "
+ "WHERE "DATABASE_COLUMN_UUID" = '"+pUUID+"' "
+ "AND "DATABASE_COLUMN_UID" = '"+pUID+"';");
}
}
@@ -306,14 +305,14 @@ void CSQLite3::Delete(const std::string& pUUID, const std::string& pUID)
{
if (pUID == "0")
{
- Exec("DELETE FROM "ABRT_TABLE" "
- "WHERE "DATABASE_COLUMN_UUID" = '"+pUUID+"';");
+ Exec("DELETE FROM "ABRT_TABLE" "
+ "WHERE "DATABASE_COLUMN_UUID" = '"+pUUID+"';");
}
else if (Exist(pUUID, pUID))
{
- Exec("DELETE FROM "ABRT_TABLE" "
- "WHERE "DATABASE_COLUMN_UUID" = '"+pUUID+"' "
- "AND "DATABASE_COLUMN_UID" = '"+pUID+"';");
+ Exec("DELETE FROM "ABRT_TABLE" "
+ "WHERE "DATABASE_COLUMN_UUID" = '"+pUUID+"' "
+ "AND "DATABASE_COLUMN_UID" = '"+pUID+"';");
}
else
{
@@ -325,14 +324,14 @@ void CSQLite3::SetReported(const std::string& pUUID, const std::string& pUID, co
{
if (Exist(pUUID, pUID))
{
- Exec("UPDATE "ABRT_TABLE" "
- "SET "DATABASE_COLUMN_REPORTED" = 1 "
- "WHERE "DATABASE_COLUMN_UUID" = '"+pUUID+"' "
- "AND "DATABASE_COLUMN_UID" = '"+pUID+"';");
- Exec("UPDATE "ABRT_TABLE" "
- "SET "DATABASE_COLUMN_MESSAGE" = '" + pMessage + "' "
- "WHERE "DATABASE_COLUMN_UUID" = '"+pUUID+"' "
- "AND "DATABASE_COLUMN_UID" = '"+pUID+"';");
+ Exec("UPDATE "ABRT_TABLE" "
+ "SET "DATABASE_COLUMN_REPORTED" = 1 "
+ "WHERE "DATABASE_COLUMN_UUID" = '"+pUUID+"' "
+ "AND "DATABASE_COLUMN_UID" = '"+pUID+"';");
+ Exec("UPDATE "ABRT_TABLE" "
+ "SET "DATABASE_COLUMN_MESSAGE" = '" + pMessage + "' "
+ "WHERE "DATABASE_COLUMN_UUID" = '"+pUUID+"' "
+ "AND "DATABASE_COLUMN_UID" = '"+pUID+"';");
}
else
{
@@ -340,7 +339,7 @@ void CSQLite3::SetReported(const std::string& pUUID, const std::string& pUID, co
}
}
-const vector_database_rows_t CSQLite3::GetUIDData(const std::string& pUID)
+vector_database_rows_t CSQLite3::GetUIDData(const std::string& pUID)
{
vector_database_rows_t table;
if (pUID == "0")
@@ -356,7 +355,7 @@ const vector_database_rows_t CSQLite3::GetUIDData(const std::string& pUID)
return table;
}
-const database_row_t CSQLite3::GetUUIDData(const std::string& pUUID, const std::string& pUID)
+database_row_t CSQLite3::GetUUIDData(const std::string& pUUID, const std::string& pUID)
{
vector_database_rows_t table;
diff --git a/lib/Plugins/SQLite3.h b/lib/Plugins/SQLite3.h
index 1604d3be..e7ca8ae2 100644
--- a/lib/Plugins/SQLite3.h
+++ b/lib/Plugins/SQLite3.h
@@ -1,6 +1,5 @@
/*
- DebugDump.h - header file for the library caring of writing new reports
- to the specific directory
+ SQLite3.h
Copyright (C) 2009 Zdenek Prikryl (zprikryl@redhat.com)
Copyright (C) 2009 RedHat inc.
@@ -55,8 +54,8 @@ class CSQLite3 : public CDatabase
virtual void Delete(const std::string& pUUID, const std::string& pUID);
virtual void SetReported(const std::string& pUUID, const std::string& pUID, const std::string& pMessage);
- virtual const vector_database_rows_t GetUIDData(const std::string& pUID);
- virtual const database_row_t GetUUIDData(const std::string& pUUID, const std::string& pUID);
+ virtual vector_database_rows_t GetUIDData(const std::string& pUID);
+ virtual database_row_t GetUUIDData(const std::string& pUUID, const std::string& pUID);
virtual void SetSettings(const map_plugin_settings_t& pSettings);
virtual map_plugin_settings_t GetSettings();
diff --git a/po/bn_IN.po b/po/bn_IN.po
new file mode 100644
index 00000000..a493443f
--- /dev/null
+++ b/po/bn_IN.po
@@ -0,0 +1,430 @@
+# translation of abrt.master.po to Bengali INDIA
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Runa Bhattacharjee <runab@redhat.com>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: abrt.master\n"
+"Report-Msgid-Bugs-To: jmoskovc@redhat.com\n"
+"POT-Creation-Date: 2009-09-07 08:38+0000\n"
+"PO-Revision-Date: 2009-09-07 23:10+0530\n"
+"Last-Translator: Runa Bhattacharjee <runab@redhat.com>\n"
+"Language-Team: Bengali INDIA <anubad@lists.ankur.org.in>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../src/Gui/ABRTExceptions.py:4
+msgid "Another client is already running, trying to wake it."
+msgstr "একটি ভিন্ন ক্লায়েন্ট বর্তমানে চলছে, সেটিকে জাগানোর প্রচেষ্টা করা হচ্ছে।"
+
+#: ../src/Gui/ABRTExceptions.py:10
+msgid "Got unexpected data from daemon (is the database properly updated?)."
+msgstr "ডেমন থেকে অপ্রত্যাশিত তথ্য পাওয়া গিয়েছে (ডাটাবেস কি সঠিকভাবে আপডেট করা হয়েছে?)।"
+
+#: ../src/Gui/ABRTPlugin.py:26
+msgid "Analyzer plugins"
+msgstr "বিশ্লেষণের প্লাগ-ইন"
+
+#: ../src/Gui/ABRTPlugin.py:27
+msgid "Action plugins"
+msgstr "কাজের প্লাগ-ইন"
+
+#: ../src/Gui/ABRTPlugin.py:28
+msgid "Reporter plugins"
+msgstr "রিপোর্টার প্লাগ-ইন"
+
+#: ../src/Gui/ABRTPlugin.py:29
+msgid "Database plugins"
+msgstr "ডাটাবেস প্লাগ-ইন"
+
+#: ../src/Gui/CCDBusBackend.py:140
+msgid "Can't connect to dbus"
+msgstr "dbus-র সাথে সংযোগ স্থাপন করতে ব্যর্থ"
+
+#: ../src/Gui/CCDBusBackend.py:144 ../src/Gui/CCDBusBackend.py:163
+msgid "Please check if abrt daemon is running."
+msgstr "abrt ডেমন চলছে কি না তা অনুগ্রহ করে পরীক্ষা করুন।"
+
+#: ../src/Gui/CCDBusBackend.py:181
+msgid ""
+"Daemon did't return valid report info\n"
+"Debuginfo is missing?"
+msgstr ""
+"ডেমন থেকে বৈধ রিপোর্টের তথ্য প্রাপ্ত হয়নি\n"
+"Debuginfo কি অনুপস্থিত?"
+
+#: ../src/Gui/ccgui.glade.h:1
+msgid " "
+msgstr " "
+
+#: ../src/Gui/ccgui.glade.h:2
+msgid "(C) 2009 Red Hat, Inc."
+msgstr "(C) ২০০৯ Red Hat, Inc."
+
+#: ../src/Gui/ccgui.glade.h:3 ../src/Gui/CCMainWindow.py:215
+msgid "<b>Not reported!</b>"
+msgstr "<b>রিপোর্ট করা হয়নি!</b>"
+
+#: ../src/Gui/ccgui.glade.h:4
+msgid "<span color=\"white\">Description</span>"
+msgstr "<span color=\"white\">বিবরণ</span>"
+
+#: ../src/Gui/ccgui.glade.h:5
+msgid "About ABRT"
+msgstr "ABRT পরিচিতি"
+
+#: ../src/Gui/ccgui.glade.h:6
+msgid "Automatic Bug Reporting Tool"
+msgstr "স্বয়ংক্রিয় বাগ রিপোর্টিং ব্যবস্থা"
+
+#: ../src/Gui/ccgui.glade.h:7
+msgid "Delete"
+msgstr "মুছে ফেলুন"
+
+#: ../src/Gui/ccgui.glade.h:8
+msgid "Please wait.."
+msgstr "অনুগ্রহ করে অপেক্ষা করুন..."
+
+#: ../src/Gui/ccgui.glade.h:9 ../src/Gui/report.glade.h:2
+msgid "Report"
+msgstr "রিপোর্ট"
+
+#: ../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 "
+"Software Foundation; either version 2 of the License, or (at your option) "
+"any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful, but WITHOUT "
+"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
+"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for "
+"more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License along with "
+"this program. If not, see <http://www.gnu.org/licenses/>."
+msgstr ""
+"এটি একটি মুক্ত সফ্টওয়্যার; Free Software Foundation দ্বারা প্রকাশিত GNU "
+"General Public License-র শর্তানুযায়ী এটি বিতরণ ও পরিবর্তন করা যাবে; লাইসেন্সের "
+"সংস্করণ ২ অথবা (আপনার সুবিধানুযায়ী) ঊর্ধ্বতন কোনো সংস্করণের অধীন।\n"
+"\n"
+"এই প্রোগ্রামটি বিতরণ করার মূল উদ্দেশ্য যে ব্যবহারকারীরা এর দ্বারা উপকৃত হবেন, কিন্তু "
+"এটির জন্য কোনো সুস্পষ্ট ওয়ারেন্টি উপস্থিত নেই; বাণিজ্যিক ও কোনো সুনির্দিষ্ট কর্ম সাধনের "
+"জন্য অন্তর্নিহীত ওয়ারেন্টিও অনুপস্থিত। অধিক জানতে GNU General Public License পড়ুন।\n"
+"\n"
+"এটির সাথে GNU General Public License-র একটি প্রতিলিপি উপলব্ধ হওয়া "
+"উচিত; না থাকলে <http://www.gnu.org/licenses/> দেখুন।"
+
+#: ../src/Gui/ccgui.glade.h:15
+msgid "Working..."
+msgstr "কর্মরত..."
+
+#: ../src/Gui/ccgui.glade.h:16
+msgid "_Edit"
+msgstr "সম্পাদনা (_E)"
+
+#: ../src/Gui/ccgui.glade.h:17
+msgid "_File"
+msgstr "ফাইল (_F)"
+
+#: ../src/Gui/ccgui.glade.h:18
+msgid "_Help"
+msgstr "সাহায্য (_H)"
+
+#: ../src/Gui/CCMainWindow.py:86
+msgid "Package"
+msgstr "প্যাকেজ"
+
+#: ../src/Gui/CCMainWindow.py:87
+msgid "Application"
+msgstr "অ্যাপ্লিকেশন"
+
+#: ../src/Gui/CCMainWindow.py:88
+msgid "Date"
+msgstr "তারিখ"
+
+#: ../src/Gui/CCMainWindow.py:89
+msgid "Crash Rate"
+msgstr "বিপর্যয়ের হার"
+
+#: ../src/Gui/CCMainWindow.py:91
+msgid "User"
+msgstr "ব্যবহারকারী"
+
+#: ../src/Gui/CCMainWindow.py:157
+#, python-format
+msgid ""
+"Unable to finish current task!\n"
+"%s"
+msgstr ""
+"বর্তমান কর্ম সমাপ্ত করতে ব্যর্থ!\n"
+"%s"
+
+#: ../src/Gui/CCMainWindow.py:174
+#, python-format
+msgid ""
+"Error while loading the dumplist, please check if abrt daemon is running\n"
+" %s"
+msgstr ""
+"dumplist লোড করতে সমস্যা। অনুগ্রহ করে পরীক্ষঅ করুন abrt ডেমন চলছে কি না\n"
+" %s"
+
+#: ../src/Gui/CCMainWindow.py:207
+msgid "<b>This crash has been reported, you can find the report(s) at:</b>\n"
+msgstr "<b>বিপর্যয়ের তথ্য দায়ের করা হয়েছে। রিপোর্ট(গুলি) নিম্নলিখিত অবস্থান উপস্থিত রয়েছে:</b>\n"
+
+#: ../src/Gui/CCMainWindow.py:267
+msgid ""
+"Unable to get report!\n"
+"Debuginfo is missing?"
+msgstr ""
+"রিপোর্ট প্রাপ্ত করতে ব্যর্থ!\n"
+"Debuginfo কি অনুপস্থিত?"
+
+#: ../src/Gui/CCMainWindow.py:279
+#, python-format
+msgid ""
+"Reporting failed!\n"
+"%s"
+msgstr ""
+"রিপোর্ট করতে ব্যর্থ!\n"
+"%s"
+
+#: ../src/Gui/CCMainWindow.py:311
+#, python-format
+msgid "Error getting the report: %s"
+msgstr "রিপোর্ট প্রাপ্ত করতে ব্যর্থ: %s"
+
+#: ../src/Gui/CCReporterDialog.py:98
+#, python-format
+msgid ""
+"<b>WARNING</b>, you're about to send data which might contain sensitive "
+"information.\n"
+"Do you really want to send <b>%s</b>?\n"
+msgstr ""
+"<b>সতর্কবার্তা</b>, সংবেদনশীল তথ্য বিশিষ্ট কিছু তথ্য প্রেরণের প্রচেষ্টা করা হচ্ছে।\n"
+"আপনি কি নিশ্চিতরূপে <b>%s</b> পাঠাতে ইচ্ছুক?\n"
+
+#: ../src/Gui/CCReporterDialog.py:111
+msgid "Brief description how to reproduce this or what you did..."
+msgstr "এটি পুনরায় সঞ্চালনের সংক্ষিপ্ত বিবরণ অথবা আপনার সঞ্চালিত কর্মের তথ্য..."
+
+#: ../src/Gui/PluginSettingsUI.py:17
+msgid "Can't find PluginDialog widget in UI description!"
+msgstr "ইউজার ইন্টারফেসের বিবরণের মধ্যে PluginDialog উইজেট পাওয়া যায়নি!"
+
+#. we shouldn't get here, but just to be safe
+#: ../src/Gui/PluginSettingsUI.py:21
+#, python-format
+msgid "No UI for plugin %s"
+msgstr "%s প্লাগ-ইনের কোনো UI উপস্থিত নেই"
+
+#: ../src/Gui/PluginSettingsUI.py:38 ../src/Gui/PluginSettingsUI.py:64
+msgid "combo box is not implemented"
+msgstr "কম্বো-বক্স বাস্তবায়িত হয়নি"
+
+#: ../src/Gui/PluginSettingsUI.py:47
+msgid "Nothing to hydrate!"
+msgstr "প্রদর্শনযোগ্য কোনো বস্তু উপস্থিত নেই!"
+
+#: ../src/Gui/report.glade.h:1
+msgid "Comment"
+msgstr "বিবৃতি"
+
+#: ../src/Gui/report.glade.h:3
+msgid "Send"
+msgstr "প্রেরণ করুন"
+
+#: ../src/Gui/report.glade.h:4
+msgid "gtk-cancel"
+msgstr "gtk-cancel"
+
+#: ../src/Gui/SettingsDialog.py:22
+msgid "Can't load gui description for SettingsDialog!"
+msgstr "SettingsDialog-র জন্য gui-র বিবরণ লোড করতে ব্যর্থ!"
+
+#: ../src/Gui/SettingsDialog.py:34
+msgid "Name"
+msgstr "নাম"
+
+#: ../src/Gui/SettingsDialog.py:52
+msgid "Enabled"
+msgstr "সক্রিয়"
+
+#: ../src/Gui/SettingsDialog.py:117
+msgid "Can't get plugin description"
+msgstr "প্লাগ-ইনের বিবরণে প্রাপ্ত করতে ব্যর্থ"
+
+#: ../src/Gui/SettingsDialog.py:125
+#, python-format
+msgid ""
+"Error while opening plugin settings UI: \n"
+"\n"
+"%s"
+msgstr ""
+"প্লাগ-ইনের বৈশিষ্ট্যের ইউজার ইন্টারফেস খুলতে সমস্যা: \n"
+"\n"
+"%s"
+
+#: ../src/Gui/SettingsDialog.py:135
+#, python-format
+msgid ""
+"Can't save plugin settings:\n"
+" %s"
+msgstr ""
+"প্লাগ-ইনের বৈশিষ্ট্য সংরক্ষণ করতে ব্যর্থ:\n"
+" %s"
+
+#: ../src/Gui/SettingsDialog.py:141
+msgid "unknown response from settings dialog"
+msgstr "বৈশিষ্ট্যের ডায়লগ থেকে প্রাপ্ত উত্তর অজানা"
+
+#: ../src/Applet/Applet.cpp:45
+#, c-format
+msgid "A crash in package %s has been detected!"
+msgstr "%s প্যাকেজের মধ্যে একটি বিপর্যয় সনাক্ত করা হয়েছে!"
+
+#. applet is already running
+#: ../src/Applet/Applet.cpp:82
+msgid "Applet is already running."
+msgstr "অ্যাপ্লেট বর্তমানে চলছে।"
+
+#: ../src/Applet/Applet.cpp:96 ../src/Applet/Applet.cpp:97
+#: ../src/Applet/CCApplet.cpp:201
+msgid "ABRT service is not running"
+msgstr "ABRT পরিসেবা বর্তমানে চলছে না"
+
+#: ../src/Applet/CCApplet.cpp:135 ../src/Applet/CCApplet.cpp:343
+#, c-format
+msgid "Pending events: %i"
+msgstr "অপেক্ষারত কর্ম: %i"
+
+#: ../src/Applet/CCApplet.cpp:161
+#, c-format
+msgid "Can't create menu from the description, popup won't be available!\n"
+msgstr "বিবরণের তথ্য প্রয়োগ করে মেনু তৈরি করতে ব্যর্থ, পপ-আপ উপলব্ধ হবে না!\n"
+
+#: ../src/Applet/CCApplet.cpp:190
+msgid ""
+"This is default handler, you should register your own with "
+"ConnectCrashHandler"
+msgstr "এটি ডিফল্ট হ্যান্ডলার, ConnectCrashHandler সহযোগে নিজস্ব হ্যান্ডলার নিবন্ধন করুন"
+
+#: ../src/Applet/CCApplet.cpp:205
+msgid "ABRT service has been started"
+msgstr "ABRT পরিসেবা আরম্ভ করা হয়েছে"
+
+#: ../src/Applet/CCApplet.cpp:231
+msgid "Out of memory"
+msgstr "মেমরি অবশিষ্ট নেই"
+
+#: ../src/Applet/CCApplet.cpp:247
+msgid "Warning"
+msgstr "সতর্কবার্তা"
+
+#: ../lib/Plugins/Bugzilla.cpp:219
+msgid "Bug is already reported: "
+msgstr "বাগ পূর্বেই দায়ের করা হয়েছে: "
+
+#: ../lib/Plugins/Bugzilla.cpp:279
+#, c-format
+msgid "Binary file %s will not be reported."
+msgstr "%s বাইনারি ফাইলের রিপোর্ট দায়ের করা হবে না।"
+
+#: ../lib/Plugins/Bugzilla.cpp:349
+msgid "New bug id: "
+msgstr "নতুন বাগ id: "
+
+#: ../lib/Plugins/Bugzilla.cpp:413
+msgid "Checking for duplicates..."
+msgstr "প্রতিলিপি পরীক্ষা করা হচ্ছে..."
+
+#: ../lib/Plugins/Bugzilla.cpp:429
+msgid "Logging into bugzilla..."
+msgstr "bugzilla-তে লগ-ইন করা হচ্ছে..."
+
+#: ../lib/Plugins/Bugzilla.cpp:443
+msgid "Creating new bug..."
+msgstr "নতুন বাগ তৈরি করা হচ্ছে..."
+
+#: ../lib/Plugins/Bugzilla.cpp:448
+msgid "Logging out..."
+msgstr "লগ-আউট করা হচ্ছে..."
+
+#: ../lib/Plugins/Kerneloops.cpp:38
+msgid "Getting local/global universal unique identification..."
+msgstr "স্থানীয়/গ্লোবাল ইউনিভার্সেল ইউনিক আইডেন্টিফিকেশন প্রাপ্ত করা হচ্ছে..."
+
+#: ../lib/Plugins/CCpp.cpp:82
+msgid "Searching for debug-info packages..."
+msgstr "debug-info প্যাকেজ অনুসন্ধান করা হচ্ছে..."
+
+#: ../lib/Plugins/CCpp.cpp:120
+msgid "Downloading and installing debug-info packages..."
+msgstr "debug-info প্যাকেজ ডাউনলোড ও ইনস্টল করা হচ্ছে..."
+
+#: ../lib/Plugins/CCpp.cpp:180
+msgid "Getting backtrace..."
+msgstr "ব্যাক-ট্রেস প্রাপ্ত করা হচ্ছে..."
+
+#: ../lib/Plugins/CCpp.cpp:429
+msgid "Getting local universal unique identification..."
+msgstr "স্থানীয় ইউনিভার্সেল ইউনিক আইডেন্টিফিকেশন প্রাপ্ত করা হচ্ছে..."
+
+#: ../lib/Plugins/CCpp.cpp:453
+msgid "Getting global universal unique identification..."
+msgstr "গ্লোবাল ইউনিভার্সেল ইউনিক আইডেন্টিফিকেশন প্রাপ্ত করা হচ্ছে..."
+
+#: ../lib/Plugins/CCpp.cpp:471
+msgid "Starting report creation..."
+msgstr "রিপোর্ট নির্মাণ আরম্ভ করা হচ্ছে..."
+
+#: ../lib/Plugins/KerneloopsReporter.cpp:101
+msgid "Creating and submitting a report..."
+msgstr "রিপোর্ট নির্মাণ করে দায়ের করুন..."
+
+#: ../lib/Plugins/Logger.cpp:58 ../lib/Plugins/Mailx.cpp:124
+msgid "Creating a report..."
+msgstr "রিপোর্ট নির্মাণ করুন..."
+
+#: ../lib/Plugins/RunApp.cpp:62
+msgid "Executing RunApp plugin..."
+msgstr "RunApp প্লাগ-ইন সঞ্চালনা..."
+
+#: ../lib/Plugins/FileTransfer.cpp:52 ../lib/Plugins/FileTransfer.cpp:247
+msgid "FileTransfer: URL not specified"
+msgstr "FileTransfer: URL উল্লিখিত হয়নি"
+
+#: ../lib/Plugins/FileTransfer.cpp:69
+#, c-format
+msgid "Sending archive %s via %s"
+msgstr "%s আর্কাইভটি %s-র মাধ্যমে প্রেরিত হচ্ছে"
+
+#: ../lib/Plugins/FileTransfer.cpp:121
+msgid "Creating an archive..."
+msgstr "একটি আর্কাইভ নির্মাণ করুন..."
+
+#: ../lib/Plugins/FileTransfer.cpp:176
+msgid "File Transfer: Creating a report..."
+msgstr "ফাইল পরিবহণ: রিপোর্ট নির্মাণ করুন..."
+
+#: ../lib/Plugins/FileTransfer.cpp:197 ../lib/Plugins/FileTransfer.cpp:226
+msgid "CFileTransfer::Run(): Cannot create and send an archive: "
+msgstr "CFileTransfer::Run(): আর্কাইভ নির্মাণ করে প্রেরণ করতে ব্যর্থ: "
+
+#: ../lib/Plugins/KerneloopsScanner.cpp:79
+msgid "Creating kernel oops crash reports..."
+msgstr "kernel oops বিপর্যয়ের রিপোর্ট নির্মাণ করা হচ্ছে..."
+
+#: ../lib/Plugins/Mailx.cpp:110
+msgid "Sending an email..."
+msgstr "ই-মেইল পাঠানো হচ্ছে..."
+
+#: ../lib/Plugins/SOSreport.cpp:90
+msgid "Executing SOSreportAction plugin..."
+msgstr "SOSreportAction প্লাগ-ইন সঞ্চালনা করা হচ্ছে..."
+
diff --git a/po/cs.po b/po/cs.po
index f3f96c8b..935c5430 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -257,7 +257,8 @@ msgstr ""
msgid ""
"Can't save plugin settings:\n"
" %s"
-msgstr "Nepadařilo se uložit nastavení pro %s\n"
+msgstr "Nepadařilo se uložit nastavení pro:\n"
+" %s"
#: src/Gui/SettingsDialog.py:141
msgid "unknown response from settings dialog"
diff --git a/po/gu.po b/po/gu.po
new file mode 100644
index 00000000..4327d9af
--- /dev/null
+++ b/po/gu.po
@@ -0,0 +1,441 @@
+# translation of abrt.master.abrt.po to Gujarati
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Sweta Kothari <swkothar@redhat.com>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: abrt.master.abrt\n"
+"Report-Msgid-Bugs-To: jmoskovc@redhat.com\n"
+"POT-Creation-Date: 2009-09-08 08:41+0000\n"
+"PO-Revision-Date: 2009-09-08 15:54+0530\n"
+"Last-Translator: Sweta Kothari <swkothar@redhat.com>\n"
+"Language-Team: Gujarati\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+
+#: ../src/Gui/ABRTExceptions.py:4
+msgid "Another client is already running, trying to wake it."
+msgstr "બીજો ક્લાઇન્ટ પહેલેથી જ ચાલી રહ્યો છે, તેને ઝગાડવા માટે પ્રયત્ન કરી રહ્યા છે."
+
+#: ../src/Gui/ABRTExceptions.py:10
+msgid "Got unexpected data from daemon (is the database properly updated?)."
+msgstr "ડિમન માંથી અનિચ્છનીય માહિતી મળી (શું યોગ્ય રીતે ડેટાબેઝ સુધારેલ છે?)."
+
+#: ../src/Gui/ABRTPlugin.py:26
+msgid "Analyzer plugins"
+msgstr "Analyzer પલ્ગઇનો"
+
+#: ../src/Gui/ABRTPlugin.py:27
+msgid "Action plugins"
+msgstr "Action પ્લગઇનો"
+
+#: ../src/Gui/ABRTPlugin.py:28
+msgid "Reporter plugins"
+msgstr "Reporter પ્લગઇનો"
+
+#: ../src/Gui/ABRTPlugin.py:29
+msgid "Database plugins"
+msgstr "Database પ્લગઇનો"
+
+#: ../src/Gui/CCDBusBackend.py:140
+msgid "Can't connect to dbus"
+msgstr "dbus નું જોડાણ કરી શકતા નથી"
+
+#: ../src/Gui/CCDBusBackend.py:144 ../src/Gui/CCDBusBackend.py:163
+msgid "Please check if abrt daemon is running."
+msgstr "મહેરબાની કરીને ચકાસો જો abrt ડિમન ચાલી રહ્યુ હોય."
+
+#: ../src/Gui/CCDBusBackend.py:181
+msgid ""
+"Daemon did't return valid report info\n"
+"Debuginfo is missing?"
+msgstr ""
+"ડિમન યોગ્ય અહેલાલ જાણકારી પાછી મળતી નથી\n"
+"Debuginfo ગુમ થયેલ છે?"
+
+#: ../src/Gui/ccgui.glade.h:1
+msgid " "
+msgstr " "
+
+#: ../src/Gui/ccgui.glade.h:2
+msgid "(C) 2009 Red Hat, Inc."
+msgstr "(C) 2009 Red Hat, Inc."
+
+#: ../src/Gui/ccgui.glade.h:3 ../src/Gui/CCMainWindow.py:215
+msgid "<b>Not reported!</b>"
+msgstr "<b>અહેવાલ થયેલ નથી!</b>"
+
+#: ../src/Gui/ccgui.glade.h:4
+msgid "<span color=\"white\">Description</span>"
+msgstr "<span color=\"white\">વર્ણન</span>"
+
+#: ../src/Gui/ccgui.glade.h:5
+msgid "About ABRT"
+msgstr "ABRT વિશે"
+
+#: ../src/Gui/ccgui.glade.h:6
+msgid "Automatic Bug Reporting Tool"
+msgstr "Automatic Bug Reporting Tool"
+
+#: ../src/Gui/ccgui.glade.h:7
+msgid "Delete"
+msgstr "કાઢી નાંખો"
+
+#: ../src/Gui/ccgui.glade.h:8
+msgid "Please wait.."
+msgstr "મહેરબાની કરીને થોભો.."
+
+#: ../src/Gui/ccgui.glade.h:9 ../src/Gui/report.glade.h:2
+msgid "Report"
+msgstr "અહેવાલ"
+
+#: ../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 "
+"Software Foundation; either version 2 of the License, or (at your option) "
+"any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful, but WITHOUT "
+"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
+"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for "
+"more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License along with "
+"this program. If not, see <http://www.gnu.org/licenses/>."
+msgstr ""
+"This program is free software; you can redistribute it and/or modify it "
+"under the terms of the GNU General Public License as published by the Free "
+"Software Foundation; either version 2 of the License, or (at your option) "
+"any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful, but WITHOUT "
+"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
+"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for "
+"more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License along with "
+"this program. If not, see <http://www.gnu.org/licenses/>."
+
+#: ../src/Gui/ccgui.glade.h:15
+msgid "Working..."
+msgstr "કામ કરી રહ્યુ છે..."
+
+#: ../src/Gui/ccgui.glade.h:16
+msgid "_Edit"
+msgstr "ફેરફાર કરો (_E)"
+
+#: ../src/Gui/ccgui.glade.h:17
+msgid "_File"
+msgstr "ફાઇલ (_F)"
+
+#: ../src/Gui/ccgui.glade.h:18
+msgid "_Help"
+msgstr "મદદ (_H)"
+
+#: ../src/Gui/CCMainWindow.py:86
+msgid "Package"
+msgstr "પેકેજ"
+
+#: ../src/Gui/CCMainWindow.py:87
+msgid "Application"
+msgstr "કાર્યક્રમ"
+
+#: ../src/Gui/CCMainWindow.py:88
+msgid "Date"
+msgstr "તારીખ"
+
+#: ../src/Gui/CCMainWindow.py:89
+msgid "Crash Rate"
+msgstr "Crash Rate"
+
+#: ../src/Gui/CCMainWindow.py:91
+msgid "User"
+msgstr "વપરાશકર્તા"
+
+#: ../src/Gui/CCMainWindow.py:157
+#, python-format
+msgid ""
+"Unable to finish current task!\n"
+"%s"
+msgstr ""
+"હાલનાં કાર્યને સમાપ્ત કરવાનું અસમર્થ!\n"
+"%s"
+
+#: ../src/Gui/CCMainWindow.py:174
+#, python-format
+msgid ""
+"Error while loading the dumplist, please check if abrt daemon is running\n"
+" %s"
+msgstr ""
+
+#: ../src/Gui/CCMainWindow.py:207
+msgid "<b>This crash has been reported, you can find the report(s) at:</b>\n"
+msgstr ""
+
+#: ../src/Gui/CCMainWindow.py:267
+msgid ""
+"Unable to get report!\n"
+"Debuginfo is missing?"
+msgstr ""
+"અહેવાલ મેળવવામાં અસમર્થ!\n"
+"Debuginfo ગુમ થયેલ છે?"
+
+#: ../src/Gui/CCMainWindow.py:279
+#, python-format
+msgid ""
+"Reporting failed!\n"
+"%s"
+msgstr ""
+"અહેવાલ કરવાનું નિષ્ફળ!\n"
+"%s"
+
+#: ../src/Gui/CCMainWindow.py:311
+#, python-format
+msgid "Error getting the report: %s"
+msgstr "અહેવાલને મેળવી રહ્યા હોય ત્યારે ભૂલ: %s"
+
+#: ../src/Gui/CCReporterDialog.py:98
+#, python-format
+msgid ""
+"<b>WARNING</b>, you're about to send data which might contain sensitive "
+"information.\n"
+"Do you really want to send <b>%s</b>?\n"
+msgstr ""
+
+#: ../src/Gui/CCReporterDialog.py:111
+msgid "Brief description how to reproduce this or what you did..."
+msgstr ""
+
+#: ../src/Gui/PluginSettingsUI.py:17
+msgid "Can't find PluginDialog widget in UI description!"
+msgstr "UI વર્ણનમાં PluginDialog વિજેટ શોધી શકાતી નથી!"
+
+#. we shouldn't get here, but just to be safe
+#: ../src/Gui/PluginSettingsUI.py:21
+#, python-format
+msgid "No UI for plugin %s"
+msgstr "પ્લગઇન %s માટે UI નથી"
+
+#: ../src/Gui/PluginSettingsUI.py:38 ../src/Gui/PluginSettingsUI.py:64
+msgid "combo box is not implemented"
+msgstr "કોમ્બો બોક્સ નું અમલીકરણ થયેલ નથી"
+
+#: ../src/Gui/PluginSettingsUI.py:47
+msgid "Nothing to hydrate!"
+msgstr ""
+
+#: ../src/Gui/report.glade.h:1
+msgid "Comment"
+msgstr "ટિપ્પણી"
+
+#: ../src/Gui/report.glade.h:3
+msgid "Send"
+msgstr "મોકલો"
+
+#: ../src/Gui/report.glade.h:4
+msgid "gtk-cancel"
+msgstr "gtk-cancel"
+
+#: ../src/Gui/SettingsDialog.py:22
+msgid "Can't load gui description for SettingsDialog!"
+msgstr "SettingsDialog માટે gui વર્ણનને લાવી શકાતુ નથી!"
+
+#: ../src/Gui/SettingsDialog.py:34
+msgid "Name"
+msgstr "નામ"
+
+#: ../src/Gui/SettingsDialog.py:52
+msgid "Enabled"
+msgstr "સક્રિય થયેલ"
+
+#: ../src/Gui/SettingsDialog.py:117
+msgid "Can't get plugin description"
+msgstr "પ્લગઇન વર્ણન મેળવી શકાતુ નથી"
+
+#: ../src/Gui/SettingsDialog.py:125
+#, python-format
+msgid ""
+"Error while opening plugin settings UI: \n"
+"\n"
+"%s"
+msgstr ""
+"જ્યારે પ્લગઇન સુયોજનો UI ને ખોલી રહ્યા હોય ત્યારે ભૂલ: \n"
+"\n"
+"%s"
+
+#: ../src/Gui/SettingsDialog.py:135
+#, python-format
+msgid ""
+"Can't save plugin settings:\n"
+" %s"
+msgstr ""
+"પ્લગઇન સુયોજનોને સંગ્રહ કરી શકાતો નથી:\n"
+" %s"
+
+#: ../src/Gui/SettingsDialog.py:141
+msgid "unknown response from settings dialog"
+msgstr "સુયોજનો સંવાદ માંથી અજ્ઞાત જવાબ"
+
+#: ../src/Applet/Applet.cpp:45
+#, c-format
+msgid "A crash in package %s has been detected!"
+msgstr ""
+
+#. applet is already running
+#: ../src/Applet/Applet.cpp:82
+msgid "Applet is already running."
+msgstr "એપલેટ પહેલેથી જ ચાલી રહી છે."
+
+#: ../src/Applet/Applet.cpp:96 ../src/Applet/Applet.cpp:97
+#: ../src/Applet/CCApplet.cpp:201
+msgid "ABRT service is not running"
+msgstr "ABRT સેવા ચાલી રહી નથી"
+
+#: ../src/Applet/CCApplet.cpp:135 ../src/Applet/CCApplet.cpp:343
+#, c-format
+msgid "Pending events: %i"
+msgstr ""
+
+#: ../src/Applet/CCApplet.cpp:161
+#, c-format
+msgid "Can't create menu from the description, popup won't be available!\n"
+msgstr ""
+
+#: ../src/Applet/CCApplet.cpp:190
+msgid ""
+"This is default handler, you should register your own with "
+"ConnectCrashHandler"
+msgstr ""
+
+#: ../src/Applet/CCApplet.cpp:205
+msgid "ABRT service has been started"
+msgstr "ABRT સેવા પહેલેથી જ શરૂ થયેલ છે"
+
+#: ../src/Applet/CCApplet.cpp:231
+msgid "Out of memory"
+msgstr "મેમરીની બહાર"
+
+#: ../src/Applet/CCApplet.cpp:247
+msgid "Warning"
+msgstr "ચેતવણી"
+
+#: ../lib/Plugins/Bugzilla.cpp:84
+msgid "Empty login and password. Please check Bugzilla.conf"
+msgstr "ખાલી લોગીન અને પાસવર્ડ. મહેરબાની કરીને Bugzilla.conf ને ચકાસો"
+
+#: ../lib/Plugins/Bugzilla.cpp:228
+msgid "Bug is already reported: "
+msgstr "ભૂલ પહેલેથી જ અહેવાલ થયેલ છે: "
+
+#: ../lib/Plugins/Bugzilla.cpp:283
+#, c-format
+msgid "Binary file %s will not be reported."
+msgstr "બાઇનરી ફાઇલ %s અહેવાલ થશે નહિં."
+
+#: ../lib/Plugins/Bugzilla.cpp:353
+msgid "New bug id: "
+msgstr "નવું ભૂલ id: "
+
+#: ../lib/Plugins/Bugzilla.cpp:421
+msgid "Checking for duplicates..."
+msgstr "નકલો માટે ચકાસી રહ્યા છે..."
+
+#: ../lib/Plugins/Bugzilla.cpp:424 ../lib/Plugins/Bugzilla.cpp:436
+msgid "Logging into bugzilla..."
+msgstr "બગઝીલામાં લોગ કરી રહ્યા છે..."
+
+#: ../lib/Plugins/Bugzilla.cpp:427
+msgid "Check CC and add coment +1..."
+msgstr "CC ને ચકાસો અને coment +1 ને ઉમેરો..."
+
+#: ../lib/Plugins/Bugzilla.cpp:448
+msgid "Creating new bug..."
+msgstr "નવી ભૂલને બનાવી રહ્યા છે..."
+
+#: ../lib/Plugins/Bugzilla.cpp:453
+msgid "Logging out..."
+msgstr "બહાર નીકળી રહ્યા છે..."
+
+#: ../lib/Plugins/Kerneloops.cpp:38
+msgid "Getting local/global universal unique identification..."
+msgstr ""
+
+#: ../lib/Plugins/CCpp.cpp:82
+msgid "Searching for debug-info packages..."
+msgstr "ડિબગ-જાણકારી પેકેજો માટે શોધી રહ્યા છે..."
+
+#: ../lib/Plugins/CCpp.cpp:120
+msgid "Downloading and installing debug-info packages..."
+msgstr "ડિબગ-જાણકારી પેકેજોને સ્થાપિત અને ડાઉનલોડ કરી રહ્યા છે..."
+
+#: ../lib/Plugins/CCpp.cpp:180
+msgid "Getting backtrace..."
+msgstr "બેકટ્રેસને મેળવી રહ્યા છે..."
+
+#: ../lib/Plugins/CCpp.cpp:429
+msgid "Getting local universal unique identification..."
+msgstr ""
+
+#: ../lib/Plugins/CCpp.cpp:455
+msgid "Getting global universal unique identification..."
+msgstr ""
+
+#: ../lib/Plugins/CCpp.cpp:473
+msgid "Starting report creation..."
+msgstr "અહેવાલ બનાવવાનું શરૂ કરી રહ્યા છે..."
+
+#: ../lib/Plugins/CCpp.cpp:495
+#, c-format
+msgid "Skip debuginfo installation for package %s"
+msgstr "પેકેજ %s માટે ડિબગ જાણકારી સ્થાપન ને છોડો"
+
+#: ../lib/Plugins/KerneloopsReporter.cpp:101
+msgid "Creating and submitting a report..."
+msgstr "અહેવાલને બનાવી અને સોંપી રહ્યા છે..."
+
+#: ../lib/Plugins/Logger.cpp:58 ../lib/Plugins/Mailx.cpp:124
+msgid "Creating a report..."
+msgstr "અહેવાલને બનાવી રહ્યા છે..."
+
+#: ../lib/Plugins/RunApp.cpp:62
+msgid "Executing RunApp plugin..."
+msgstr "RunApp પ્લગઇનને ચલાવી રહ્યા છે..."
+
+#: ../lib/Plugins/FileTransfer.cpp:52 ../lib/Plugins/FileTransfer.cpp:247
+msgid "FileTransfer: URL not specified"
+msgstr "FileTransfer: URL સ્પષ્ટ થયેલ નથી"
+
+#: ../lib/Plugins/FileTransfer.cpp:69
+#, c-format
+msgid "Sending archive %s via %s"
+msgstr "%s મારફતે પેટી %s ને મોકલી રહ્યા છે"
+
+#: ../lib/Plugins/FileTransfer.cpp:121
+msgid "Creating an archive..."
+msgstr "પેટીને બનાવી રહ્યા છે..."
+
+#: ../lib/Plugins/FileTransfer.cpp:176
+msgid "File Transfer: Creating a report..."
+msgstr "ફાઇલ પરિવહન: અહેવાલને બનાવી રહ્યા છે..."
+
+#: ../lib/Plugins/FileTransfer.cpp:197 ../lib/Plugins/FileTransfer.cpp:226
+msgid "CFileTransfer::Run(): Cannot create and send an archive: "
+msgstr ""
+
+#: ../lib/Plugins/KerneloopsScanner.cpp:79
+msgid "Creating kernel oops crash reports..."
+msgstr "કર્નલ oops બગડેલ અહેવાલોને બનાવી રહ્યા છે..."
+
+#: ../lib/Plugins/Mailx.cpp:110
+msgid "Sending an email..."
+msgstr "ઇમેઇલને મોકલી રહ્યા છે..."
+
+#: ../lib/Plugins/SOSreport.cpp:90
+msgid "Executing SOSreportAction plugin..."
+msgstr "SOSreportAction પ્લગઇનને ચલાવી રહ્યા છે..."
+
diff --git a/po/ko.po b/po/ko.po
index 9c360029..26dc4d62 100644
--- a/po/ko.po
+++ b/po/ko.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: abrt.master\n"
"Report-Msgid-Bugs-To: jmoskovc@redhat.com\n"
-"POT-Creation-Date: 2009-09-04 04:40+0000\n"
-"PO-Revision-Date: 2009-09-04 15:22+1000\n"
+"POT-Creation-Date: 2009-09-07 19:47+0000\n"
+"PO-Revision-Date: 2009-09-08 11:20+1000\n"
"Last-Translator: Eunju Kim <eukim@redhat.com>\n"
"Language-Team: Korean <ko@li.org>\n"
"MIME-Version: 1.0\n"
@@ -300,21 +300,21 @@ msgid "Applet is already running."
msgstr "애플릿이 이미 실행되고 있습니다. "
#: ../src/Applet/Applet.cpp:96 ../src/Applet/Applet.cpp:97
-#: ../src/Applet/CCApplet.cpp:135
+#: ../src/Applet/CCApplet.cpp:201
msgid "ABRT service is not running"
msgstr "ABRT 서비스가 실행되고 있지 않습니다 "
-#: ../src/Applet/CCApplet.cpp:83 ../src/Applet/CCApplet.cpp:262
+#: ../src/Applet/CCApplet.cpp:135 ../src/Applet/CCApplet.cpp:343
#, c-format
msgid "Pending events: %i"
msgstr "보류 중인 이벤트: %i "
-#: ../src/Applet/CCApplet.cpp:102
+#: ../src/Applet/CCApplet.cpp:161
#, c-format
msgid "Can't create menu from the description, popup won't be available!\n"
msgstr "설명에서 메뉴를 만들 수 없습니다. 팝업을 사용할 수 없습니다!\n"
-#: ../src/Applet/CCApplet.cpp:125
+#: ../src/Applet/CCApplet.cpp:190
msgid ""
"This is default handler, you should register your own with "
"ConnectCrashHandler"
@@ -322,44 +322,52 @@ msgstr ""
"이는 기본값 처리기입니다. 자신의 처리기를 ConnectCrashHandler를 사용하여 등록"
"해야 합니다 "
-#: ../src/Applet/CCApplet.cpp:139
+#: ../src/Applet/CCApplet.cpp:205
msgid "ABRT service has been started"
msgstr "ABRT 서비스가 시작되었습니다 "
-#: ../src/Applet/CCApplet.cpp:165
+#: ../src/Applet/CCApplet.cpp:231
msgid "Out of memory"
msgstr "메모리 부족 "
-#: ../src/Applet/CCApplet.cpp:180
+#: ../src/Applet/CCApplet.cpp:247
msgid "Warning"
msgstr "경고 "
-#: ../lib/Plugins/Bugzilla.cpp:219
+#: ../lib/Plugins/Bugzilla.cpp:84
+msgid "Empty login and password. Please check Bugzilla.conf"
+msgstr "로그인 및 암호가 없습니다. Bugzilla.conf를 확인해 주십시오 "
+
+#: ../lib/Plugins/Bugzilla.cpp:228
msgid "Bug is already reported: "
msgstr "이미 버그를 보고하였습니다: "
-#: ../lib/Plugins/Bugzilla.cpp:279
+#: ../lib/Plugins/Bugzilla.cpp:283
#, c-format
msgid "Binary file %s will not be reported."
msgstr "%s 바이너리 파일은 보고되지 않습니다. "
-#: ../lib/Plugins/Bugzilla.cpp:349
+#: ../lib/Plugins/Bugzilla.cpp:353
msgid "New bug id: "
msgstr "새 버그 id: "
-#: ../lib/Plugins/Bugzilla.cpp:413
+#: ../lib/Plugins/Bugzilla.cpp:421
msgid "Checking for duplicates..."
msgstr "중복성 확인 중... "
-#: ../lib/Plugins/Bugzilla.cpp:429
+#: ../lib/Plugins/Bugzilla.cpp:424 ../lib/Plugins/Bugzilla.cpp:436
msgid "Logging into bugzilla..."
msgstr "bugzilla에 로그인 중... "
-#: ../lib/Plugins/Bugzilla.cpp:443
+#: ../lib/Plugins/Bugzilla.cpp:427
+msgid "Check CC and add coment +1..."
+msgstr "CC 확인 후 코멘트에 +1 추가... "
+
+#: ../lib/Plugins/Bugzilla.cpp:448
msgid "Creating new bug..."
msgstr "새 버그 생성 중... "
-#: ../lib/Plugins/Bugzilla.cpp:448
+#: ../lib/Plugins/Bugzilla.cpp:453
msgid "Logging out..."
msgstr "로그아웃 중... "
@@ -383,14 +391,19 @@ msgstr "역추적 검색 중... "
msgid "Getting local universal unique identification..."
msgstr "로컬 UUID를 가져오는 중... "
-#: ../lib/Plugins/CCpp.cpp:453
+#: ../lib/Plugins/CCpp.cpp:455
msgid "Getting global universal unique identification..."
msgstr "글로벌 UUID를 가져오는 중... "
-#: ../lib/Plugins/CCpp.cpp:471
+#: ../lib/Plugins/CCpp.cpp:473
msgid "Starting report creation..."
msgstr "보고서 작성 시작 중... "
+#: ../lib/Plugins/CCpp.cpp:495
+#, c-format
+msgid "Skip debuginfo installation for package %s"
+msgstr "%s 패키지에 대한 디버그 정보 설치 생략 "
+
#: ../lib/Plugins/KerneloopsReporter.cpp:101
msgid "Creating and submitting a report..."
msgstr "보고서 작성 및 제출 중... "
diff --git a/po/ml.po b/po/ml.po
index bb38ca78..ebd52a1c 100644
--- a/po/ml.po
+++ b/po/ml.po
@@ -1,3 +1,4 @@
+# translation of abrt.master.ml.po to
# translation of abrt.master.abrt.ml.po to
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
@@ -5,10 +6,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: abrt.master.abrt.ml\n"
+"Project-Id-Version: abrt.master.ml\n"
"Report-Msgid-Bugs-To: jmoskovc@redhat.com\n"
-"POT-Creation-Date: 2009-09-07 08:38+0000\n"
-"PO-Revision-Date: 2009-09-07 17:15+0530\n"
+"POT-Creation-Date: 2009-09-07 19:47+0000\n"
+"PO-Revision-Date: 2009-09-08 08:13+0530\n"
"Last-Translator: \n"
"Language-Team: <en@li.org>\n"
"MIME-Version: 1.0\n"
@@ -205,8 +206,7 @@ msgid ""
"information.\n"
"Do you really want to send <b>%s</b>?\n"
msgstr ""
-"<b>മുന്നറിയിപ്പു്</b>, പ്രധാന വിവരങ്ങളടങ്ങുന്ന ഡേറ്റാ നിങ്ങള്‍ അയയ്ക്കുവാന്‍ "
-"തുടങ്ങുന്നു.\n"
+"<b>മുന്നറിയിപ്പു്</b>, പ്രധാന വിവരങ്ങളടങ്ങുന്ന ഡേറ്റാ നിങ്ങള്‍ അയയ്ക്കുവാന്‍ തുടങ്ങുന്നു.\n"
"നിങ്ങള്‍ക്ക് <b>%s</b> അയയ്ക്കണമോ?\n"
#: ../src/Gui/CCReporterDialog.py:111
@@ -313,8 +313,8 @@ msgid ""
"This is default handler, you should register your own with "
"ConnectCrashHandler"
msgstr ""
-"ഇതു് സ്വതവേയുള്ള ഹാന്‍ഡിലറാണു്. ConnectCrashHandler-ല്‍ "
-"നിങ്ങളുടെ സ്വന്തം ഹാന്‍ഡിലര്‍ രജിസ്ടര്‍ ചെയ്യണം"
+"ഇതു് സ്വതവേയുള്ള ഹാന്‍ഡിലറാണു്. ConnectCrashHandler-ല്‍ നിങ്ങളുടെ സ്വന്തം ഹാന്‍ഡിലര്‍ രജിസ്ടര്‍ "
+"ചെയ്യണം"
#: ../src/Applet/CCApplet.cpp:205
msgid "ABRT service has been started"
@@ -328,32 +328,40 @@ msgstr "മെമ്മറി ലഭ്യമല്ല"
msgid "Warning"
msgstr "മുന്നറിയിപ്പു്"
-#: ../lib/Plugins/Bugzilla.cpp:219
+#: ../lib/Plugins/Bugzilla.cpp:84
+msgid "Empty login and password. Please check Bugzilla.conf"
+msgstr "ലോഗിനും അടയാളവാക്കും ശൂന്യം. ദയവായി Bugzilla.conf പരിശോധിക്കുക"
+
+#: ../lib/Plugins/Bugzilla.cpp:228
msgid "Bug is already reported: "
msgstr "ബഗ് രേഖപ്പെടുത്തിയിരിക്കുന്നു: "
-#: ../lib/Plugins/Bugzilla.cpp:279
+#: ../lib/Plugins/Bugzilla.cpp:283
#, c-format
msgid "Binary file %s will not be reported."
msgstr "ബൈനറി ഫയല്‍ %s റിപോര്‍ട്ട് ചെയ്യുന്നതല്ല."
-#: ../lib/Plugins/Bugzilla.cpp:349
+#: ../lib/Plugins/Bugzilla.cpp:353
msgid "New bug id: "
msgstr "പുതിയ ബഗ് id: "
-#: ../lib/Plugins/Bugzilla.cpp:413
+#: ../lib/Plugins/Bugzilla.cpp:421
msgid "Checking for duplicates..."
msgstr "ഒരേപോലുള്ളവയ്ക്കായി തെരയുന്നു..."
-#: ../lib/Plugins/Bugzilla.cpp:429
+#: ../lib/Plugins/Bugzilla.cpp:424 ../lib/Plugins/Bugzilla.cpp:436
msgid "Logging into bugzilla..."
msgstr "ബഗ്സിലയിലേക്ക് പ്രവേശിക്കുന്നു..."
-#: ../lib/Plugins/Bugzilla.cpp:443
+#: ../lib/Plugins/Bugzilla.cpp:427
+msgid "Check CC and add coment +1..."
+msgstr "CC പരിശോധിച്ചു് coment +1 ചേര്‍ക്കുക..."
+
+#: ../lib/Plugins/Bugzilla.cpp:448
msgid "Creating new bug..."
msgstr "പുതിയ ബഗ് ഉണ്ടാക്കുന്നു..."
-#: ../lib/Plugins/Bugzilla.cpp:448
+#: ../lib/Plugins/Bugzilla.cpp:453
msgid "Logging out..."
msgstr "ലോഗൌട്ട് ചെയ്യുന്നു..."
@@ -377,14 +385,19 @@ msgstr "ബാക്ക്ട്രെയിസ് ലഭിക്കുന്
msgid "Getting local universal unique identification..."
msgstr "ലോക്കല്‍ യൂണിവേഴ്സല്‍ യുണീക്ക് തിരിച്ചറിയല്‍ ലഭിക്കുന്നു..."
-#: ../lib/Plugins/CCpp.cpp:453
+#: ../lib/Plugins/CCpp.cpp:455
msgid "Getting global universal unique identification..."
msgstr "ഗ്ലോബല്‍ യൂണിവേഴ്സല്‍ യുണീക്ക് തിരിച്ചറിയല്‍ ലഭിക്കുന്നു..."
-#: ../lib/Plugins/CCpp.cpp:471
+#: ../lib/Plugins/CCpp.cpp:473
msgid "Starting report creation..."
msgstr "റിപോര്‍ട്ട് ഉണ്ടാക്കുവാന്‍ തുടങ്ങുന്നു..."
+#: ../lib/Plugins/CCpp.cpp:495
+#, c-format
+msgid "Skip debuginfo installation for package %s"
+msgstr "%s പാക്കേജിനുള്ള debuginfo ഇന്‍സ്റ്റലേഷന്‍ ഉപേക്ഷിക്കുക"
+
#: ../lib/Plugins/KerneloopsReporter.cpp:101
msgid "Creating and submitting a report..."
msgstr "ഒരു റിപോര്‍ട്ട് ഉണ്ടാക്കി സമര്‍പ്പിക്കുന്നു..."
diff --git a/po/mr.po b/po/mr.po
new file mode 100644
index 00000000..97f9d51a
--- /dev/null
+++ b/po/mr.po
@@ -0,0 +1,448 @@
+# translation of abrt.master.abrt.po to Marathi
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Sandeep Shedmake <sshedmak@redhat.com>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: abrt.master.abrt\n"
+"Report-Msgid-Bugs-To: jmoskovc@redhat.com\n"
+"POT-Creation-Date: 2009-09-07 14:45+0000\n"
+"PO-Revision-Date: 2009-09-07 21:26+0530\n"
+"Last-Translator: Sandeep Shedmake <sshedmak@redhat.com>\n"
+"Language-Team: Marathi <fedora-trans-mr@redhat.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+
+#: ../src/Gui/ABRTExceptions.py:4
+msgid "Another client is already running, trying to wake it."
+msgstr "इतर क्लाएंट आधिपासूनच कार्यरत आहे, सक्रीय करण्याचा प्रयत्न करत आहे."
+
+#: ../src/Gui/ABRTExceptions.py:10
+msgid "Got unexpected data from daemon (is the database properly updated?)."
+msgstr "डिमनपासून अनपेक्षीत डाटा प्राप्त झाले (माहितीकोष योग्यरित्या सुधारीत केले?)."
+
+#: ../src/Gui/ABRTPlugin.py:26
+msgid "Analyzer plugins"
+msgstr "अनलाइजर प्लगइन्स्"
+
+#: ../src/Gui/ABRTPlugin.py:27
+msgid "Action plugins"
+msgstr "कृती प्लगइन्स्"
+
+#: ../src/Gui/ABRTPlugin.py:28
+msgid "Reporter plugins"
+msgstr "रिपोर्टर प्लगइन्स्"
+
+#: ../src/Gui/ABRTPlugin.py:29
+msgid "Database plugins"
+msgstr "डाटाबेस प्लगइन्स्"
+
+#: ../src/Gui/CCDBusBackend.py:140
+msgid "Can't connect to dbus"
+msgstr "dbus शी जुळवणी करण्यास अशक्य"
+
+#: ../src/Gui/CCDBusBackend.py:144 ../src/Gui/CCDBusBackend.py:163
+msgid "Please check if abrt daemon is running."
+msgstr "abrt डीमन कार्यरत आहे कृपया याची तपासणी करा."
+
+#: ../src/Gui/CCDBusBackend.py:181
+msgid ""
+"Daemon did't return valid report info\n"
+"Debuginfo is missing?"
+msgstr ""
+"डीमनने वैध अहवाल माहिती पुरवली नाही\n"
+"Debuginfo आढळले नाही?"
+
+#: ../src/Gui/ccgui.glade.h:1
+msgid " "
+msgstr " "
+
+#: ../src/Gui/ccgui.glade.h:2
+msgid "(C) 2009 Red Hat, Inc."
+msgstr "(C) 2009 Red Hat, Inc."
+
+#: ../src/Gui/ccgui.glade.h:3 ../src/Gui/CCMainWindow.py:215
+msgid "<b>Not reported!</b>"
+msgstr "<b>कळवले नाही!</b>"
+
+#: ../src/Gui/ccgui.glade.h:4
+msgid "<span color=\"white\">Description</span>"
+msgstr "<span color=\"white\">वर्णन</span>"
+
+#: ../src/Gui/ccgui.glade.h:5
+msgid "About ABRT"
+msgstr "ABRT विषयी"
+
+#: ../src/Gui/ccgui.glade.h:6
+msgid "Automatic Bug Reporting Tool"
+msgstr "स्वयं बग रिपोर्टींग उपकरन"
+
+#: ../src/Gui/ccgui.glade.h:7
+msgid "Delete"
+msgstr "नष्ट करा"
+
+#: ../src/Gui/ccgui.glade.h:8
+msgid "Please wait.."
+msgstr "कृपया थांबा.."
+
+#: ../src/Gui/ccgui.glade.h:9 ../src/Gui/report.glade.h:2
+msgid "Report"
+msgstr "रिपोर्ट"
+
+#: ../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 "
+"Software Foundation; either version 2 of the License, or (at your option) "
+"any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful, but WITHOUT "
+"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
+"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for "
+"more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License along with "
+"this program. If not, see <http://www.gnu.org/licenses/>."
+msgstr ""
+"This program is free software; you can redistribute it and/or modify it "
+"under the terms of the GNU General Public License as published by the Free "
+"Software Foundation; either version 2 of the License, or (at your option) "
+"any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful, but WITHOUT "
+"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
+"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for "
+"more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License along with "
+"this program. If not, see <http://www.gnu.org/licenses/>."
+
+#: ../src/Gui/ccgui.glade.h:15
+msgid "Working..."
+msgstr "कार्यरत आहे..."
+
+#: ../src/Gui/ccgui.glade.h:16
+msgid "_Edit"
+msgstr "संपादीत करा (_E)"
+
+#: ../src/Gui/ccgui.glade.h:17
+msgid "_File"
+msgstr "फाइल (_F)"
+
+#: ../src/Gui/ccgui.glade.h:18
+msgid "_Help"
+msgstr "मदत (_H)"
+
+#: ../src/Gui/CCMainWindow.py:86
+msgid "Package"
+msgstr "संकुल"
+
+#: ../src/Gui/CCMainWindow.py:87
+msgid "Application"
+msgstr "ऍप्लिकेशन"
+
+#: ../src/Gui/CCMainWindow.py:88
+msgid "Date"
+msgstr "दिनांक"
+
+#: ../src/Gui/CCMainWindow.py:89
+msgid "Crash Rate"
+msgstr "क्रॅश दर"
+
+#: ../src/Gui/CCMainWindow.py:91
+msgid "User"
+msgstr "वापरकर्ता"
+
+#: ../src/Gui/CCMainWindow.py:157
+#, python-format
+msgid ""
+"Unable to finish current task!\n"
+"%s"
+msgstr ""
+"सध्याचे कार्य पूर्ण करण्यास अशक्य!\n"
+"%s"
+
+#: ../src/Gui/CCMainWindow.py:174
+#, python-format
+msgid ""
+"Error while loading the dumplist, please check if abrt daemon is running\n"
+" %s"
+msgstr ""
+"डंपलिस्ट लोड करतेवेळी त्रुटी आढळली, कृपया abrt डिमन\n"
+" %s चालवत आहे याची खात्री करा"
+
+#: ../src/Gui/CCMainWindow.py:207
+msgid "<b>This crash has been reported, you can find the report(s) at:</b>\n"
+msgstr "<b>हा क्रॅश कळवला गेला आहेन, तुम्हाला अहवाल येथे आढळेल:</b>\n"
+
+#: ../src/Gui/CCMainWindow.py:267
+msgid ""
+"Unable to get report!\n"
+"Debuginfo is missing?"
+msgstr ""
+"रिपोर्ट प्राप्त करण्यास अशक्य!\n"
+"Debuginfo आढळले नाही?"
+
+#: ../src/Gui/CCMainWindow.py:279
+#, python-format
+msgid ""
+"Reporting failed!\n"
+"%s"
+msgstr ""
+"रिपोर्टींग अपयशी!\n"
+"%s"
+
+#: ../src/Gui/CCMainWindow.py:311
+#, python-format
+msgid "Error getting the report: %s"
+msgstr "अहवाल प्राप्त करतेवेळी त्रुटी: %s"
+
+#: ../src/Gui/CCReporterDialog.py:98
+#, python-format
+msgid ""
+"<b>WARNING</b>, you're about to send data which might contain sensitive "
+"information.\n"
+"Do you really want to send <b>%s</b>?\n"
+msgstr ""
+"<b>सावधान</b>, तुम्ही संवेदनशील माहिती असलेला डाटा पाठवणार आहात"
+".\n"
+"तुम्हाला नक्की <b>%s</b> पाठवायचे?\n"
+
+#: ../src/Gui/CCReporterDialog.py:111
+msgid "Brief description how to reproduce this or what you did..."
+msgstr "हे कसे निर्माण होते किंवा तुम्ही काय केले याचे थोडक्यात वर्णन..."
+
+#: ../src/Gui/PluginSettingsUI.py:17
+msgid "Can't find PluginDialog widget in UI description!"
+msgstr "UI वर्णनमध्ये PluginDialog विजेट आढळले नाही!"
+
+#. we shouldn't get here, but just to be safe
+#: ../src/Gui/PluginSettingsUI.py:21
+#, python-format
+msgid "No UI for plugin %s"
+msgstr "प्लगइन %s करीता UI आढळले नाही"
+
+#: ../src/Gui/PluginSettingsUI.py:38 ../src/Gui/PluginSettingsUI.py:64
+msgid "combo box is not implemented"
+msgstr "कॉम्बो बॉक्स लागू केले नाही"
+
+#: ../src/Gui/PluginSettingsUI.py:47
+msgid "Nothing to hydrate!"
+msgstr "hydrate करीता काहिच आढळले नाही!"
+
+#: ../src/Gui/report.glade.h:1
+msgid "Comment"
+msgstr "टिपण्णी"
+
+#: ../src/Gui/report.glade.h:3
+msgid "Send"
+msgstr "पाठवा"
+
+#: ../src/Gui/report.glade.h:4
+msgid "gtk-cancel"
+msgstr "gtk-cancel"
+
+#: ../src/Gui/SettingsDialog.py:22
+msgid "Can't load gui description for SettingsDialog!"
+msgstr "SettingsDialog करीता gui वर्णन लोड करण्यास अशक्य!"
+
+#: ../src/Gui/SettingsDialog.py:34
+msgid "Name"
+msgstr "नाव"
+
+#: ../src/Gui/SettingsDialog.py:52
+msgid "Enabled"
+msgstr "कार्यक्षम"
+
+#: ../src/Gui/SettingsDialog.py:117
+msgid "Can't get plugin description"
+msgstr "प्लगइन वर्णन प्राप्त करण्यास अशक्य"
+
+#: ../src/Gui/SettingsDialog.py:125
+#, python-format
+msgid ""
+"Error while opening plugin settings UI: \n"
+"\n"
+"%s"
+msgstr ""
+"प्लगइन संयोजना UI उघडतेवेळी त्रुटी: \n"
+"\n"
+"%s"
+
+#: ../src/Gui/SettingsDialog.py:135
+#, python-format
+msgid ""
+"Can't save plugin settings:\n"
+" %s"
+msgstr ""
+"प्लगइन संयोजना साठवतेवेळी त्रुटी:\n"
+" %s"
+
+#: ../src/Gui/SettingsDialog.py:141
+msgid "unknown response from settings dialog"
+msgstr "संयोजना संवाद पासून अपरिचीत प्रतिसाद"
+
+#: ../src/Applet/Applet.cpp:45
+#, c-format
+msgid "A crash in package %s has been detected!"
+msgstr "संकुल %s मधील क्रॅश आढळले आहे!"
+
+#. applet is already running
+#: ../src/Applet/Applet.cpp:82
+msgid "Applet is already running."
+msgstr "ऍप्लेट आधिपासूनच कार्यरत आहे."
+
+#: ../src/Applet/Applet.cpp:96 ../src/Applet/Applet.cpp:97
+#: ../src/Applet/CCApplet.cpp:201
+msgid "ABRT service is not running"
+msgstr "ABRT सेवा कार्यरत नाही"
+
+#: ../src/Applet/CCApplet.cpp:135 ../src/Applet/CCApplet.cpp:343
+#, c-format
+msgid "Pending events: %i"
+msgstr "उरर्वरीत घटना: %i"
+
+#: ../src/Applet/CCApplet.cpp:161
+#, c-format
+msgid "Can't create menu from the description, popup won't be available!\n"
+msgstr "वर्णन पासून मेन्यू निर्माण करण्यास अशक्य, पॉपअप उपलब्ध होणार नाही!\n"
+
+#: ../src/Applet/CCApplet.cpp:190
+msgid ""
+"This is default handler, you should register your own with "
+"ConnectCrashHandler"
+msgstr ""
+"हे पूर्वनिर्धारीत हँडलर आहे, तुम्हाला"
+"ConnectCrashHandler सह पंजीकृत व्हावे लागेल"
+
+#: ../src/Applet/CCApplet.cpp:205
+msgid "ABRT service has been started"
+msgstr "ABRT सेवा सुरू झाली आहे"
+
+#: ../src/Applet/CCApplet.cpp:231
+msgid "Out of memory"
+msgstr "अतिरीक्त स्मृती नाही"
+
+#: ../src/Applet/CCApplet.cpp:247
+msgid "Warning"
+msgstr "सावधानता"
+
+#: ../lib/Plugins/Bugzilla.cpp:84
+msgid "Empty login and password. Please check Bugzilla.conf"
+msgstr "रिकामे प्रवेश व पासवर्ड. कृपया Bugzilla.conf तपासा"
+
+#: ../lib/Plugins/Bugzilla.cpp:228
+msgid "Bug is already reported: "
+msgstr "बग आधिपासूनच कळवले: "
+
+#: ../lib/Plugins/Bugzilla.cpp:283
+#, c-format
+msgid "Binary file %s will not be reported."
+msgstr "बायनरी फाइल %s कळवले जाणार नाही."
+
+#: ../lib/Plugins/Bugzilla.cpp:353
+msgid "New bug id: "
+msgstr "नवीन बग id: "
+
+#: ../lib/Plugins/Bugzilla.cpp:421
+msgid "Checking for duplicates..."
+msgstr "हुबेहुब करीता तपासत आहे..."
+
+#: ../lib/Plugins/Bugzilla.cpp:424 ../lib/Plugins/Bugzilla.cpp:436
+msgid "Logging into bugzilla..."
+msgstr "बगझीलामध्ये प्रवेश करत आहे..."
+
+#: ../lib/Plugins/Bugzilla.cpp:427
+msgid "Check CC and add coment +1..."
+msgstr "CC तपासा व टिपण्णी +1 समावेश करा..."
+
+#: ../lib/Plugins/Bugzilla.cpp:448
+msgid "Creating new bug..."
+msgstr "नवीन बग निर्माण करत आहे..."
+
+#: ../lib/Plugins/Bugzilla.cpp:453
+msgid "Logging out..."
+msgstr "बाहेर पडत आहे..."
+
+#: ../lib/Plugins/Kerneloops.cpp:38
+msgid "Getting local/global universal unique identification..."
+msgstr "लोकल/ग्लोबल जागतीक एकमेव ओळख प्राप्त करत आहे..."
+
+#: ../lib/Plugins/CCpp.cpp:82
+msgid "Searching for debug-info packages..."
+msgstr "debug-info संकुलांकरीता शोधत आहे..."
+
+#: ../lib/Plugins/CCpp.cpp:120
+msgid "Downloading and installing debug-info packages..."
+msgstr "debug-info संकुल डाऊनलोड व प्रतिष्ठापीत करत आहे..."
+
+#: ../lib/Plugins/CCpp.cpp:180
+msgid "Getting backtrace..."
+msgstr "backtrace प्राप्त करत आहे..."
+
+#: ../lib/Plugins/CCpp.cpp:429
+msgid "Getting local universal unique identification..."
+msgstr "लोकल लोकल एकमेव ओळख प्राप्त करत आहे..."
+
+#: ../lib/Plugins/CCpp.cpp:453
+msgid "Getting global universal unique identification..."
+msgstr "लोकल ग्लोबल एकमेव ओळख प्राप्त करत आहे..."
+
+#: ../lib/Plugins/CCpp.cpp:471
+msgid "Starting report creation..."
+msgstr "अहवाल निर्माण सुरू करा..."
+
+#: ../lib/Plugins/CCpp.cpp:493
+#, c-format
+msgid "Skip debuginfo installation for package %s"
+msgstr "संकुल %s करीता debuginfo प्रतिष्ठापन वगळा"
+
+#: ../lib/Plugins/KerneloopsReporter.cpp:101
+msgid "Creating and submitting a report..."
+msgstr "अहवाल निर्माण व सादर करत आहे..."
+
+#: ../lib/Plugins/Logger.cpp:58 ../lib/Plugins/Mailx.cpp:124
+msgid "Creating a report..."
+msgstr "अहवाल निर्माण करत आहे..."
+
+#: ../lib/Plugins/RunApp.cpp:62
+msgid "Executing RunApp plugin..."
+msgstr "RunApp प्लगइन चालवत आहे..."
+
+#: ../lib/Plugins/FileTransfer.cpp:52 ../lib/Plugins/FileTransfer.cpp:247
+msgid "FileTransfer: URL not specified"
+msgstr "FileTransfer: URL दिले नाही"
+
+#: ../lib/Plugins/FileTransfer.cpp:69
+#, c-format
+msgid "Sending archive %s via %s"
+msgstr "%2$s द्वारे आर्काइव्ह %1$s पाठवत आहे"
+
+#: ../lib/Plugins/FileTransfer.cpp:121
+msgid "Creating an archive..."
+msgstr "आर्काइव्ह निर्माण करत आहे..."
+
+#: ../lib/Plugins/FileTransfer.cpp:176
+msgid "File Transfer: Creating a report..."
+msgstr "फाइल स्थानांतरन: अहवाल निर्माण करत आहे..."
+
+#: ../lib/Plugins/FileTransfer.cpp:197 ../lib/Plugins/FileTransfer.cpp:226
+msgid "CFileTransfer::Run(): Cannot create and send an archive: "
+msgstr "CFileTransfer::Run(): आर्काइव्ह निर्माण करणे व पाठवणे अशक्य: "
+
+#: ../lib/Plugins/KerneloopsScanner.cpp:79
+msgid "Creating kernel oops crash reports..."
+msgstr "kernel oops क्रॅश अहवाल निर्माण करत आहे..."
+
+#: ../lib/Plugins/Mailx.cpp:110
+msgid "Sending an email..."
+msgstr "ईमेल पाठवत आहे..."
+
+#: ../lib/Plugins/SOSreport.cpp:90
+msgid "Executing SOSreportAction plugin..."
+msgstr "SOSreportAction प्लगइन चालवत आहे..."
+
diff --git a/po/nl.po b/po/nl.po
index 439438cb..e74946f9 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: abrt\n"
"Report-Msgid-Bugs-To: jmoskovc@redhat.com\n"
-"POT-Creation-Date: 2009-09-03 14:38+0000\n"
-"PO-Revision-Date: 2009-09-03 20:55+0200\n"
+"POT-Creation-Date: 2009-09-07 14:45+0000\n"
+"PO-Revision-Date: 2009-09-07 18:00+0200\n"
"Last-Translator: Geert Warrink <geert.warrink@onsnet.nu>\n"
"Language-Team: nl <nl@li.org>\n"
"MIME-Version: 1.0\n"
@@ -299,22 +299,22 @@ msgid "Applet is already running."
msgstr "Applet draait al."
#: ../src/Applet/Applet.cpp:96 ../src/Applet/Applet.cpp:97
-#: ../src/Applet/CCApplet.cpp:135
+#: ../src/Applet/CCApplet.cpp:201
msgid "ABRT service is not running"
msgstr "ABRT service draait niet"
-#: ../src/Applet/CCApplet.cpp:83 ../src/Applet/CCApplet.cpp:262
+#: ../src/Applet/CCApplet.cpp:135 ../src/Applet/CCApplet.cpp:343
#, c-format
msgid "Pending events: %i"
msgstr "Gebeurtenissen in behandeling: %i"
-#: ../src/Applet/CCApplet.cpp:102
+#: ../src/Applet/CCApplet.cpp:161
#, c-format
msgid "Can't create menu from the description, popup won't be available!\n"
msgstr ""
"Kan geen menu maken van de beschrijving, pop-up zal niet beschikbaar zijn!\n"
-#: ../src/Applet/CCApplet.cpp:125
+#: ../src/Applet/CCApplet.cpp:190
msgid ""
"This is default handler, you should register your own with "
"ConnectCrashHandler"
@@ -322,44 +322,52 @@ msgstr ""
"Dit is de standaard afhandeling, je moet je eigen registreren bij "
"ConnectCrashHandler"
-#: ../src/Applet/CCApplet.cpp:139
+#: ../src/Applet/CCApplet.cpp:205
msgid "ABRT service has been started"
msgstr "ABRT service is gestart"
-#: ../src/Applet/CCApplet.cpp:165
+#: ../src/Applet/CCApplet.cpp:231
msgid "Out of memory"
msgstr "Geen geheugen beschikbaar"
-#: ../src/Applet/CCApplet.cpp:180
+#: ../src/Applet/CCApplet.cpp:247
msgid "Warning"
msgstr "Waarschuwing"
-#: ../lib/Plugins/Bugzilla.cpp:219
+#: ../lib/Plugins/Bugzilla.cpp:84
+msgid "Empty login and password. Please check Bugzilla.conf"
+msgstr "Leeg login en wachtwoord. Check a.u.b. Bugzilla.conf"
+
+#: ../lib/Plugins/Bugzilla.cpp:228
msgid "Bug is already reported: "
msgstr "Bug is al aangemeld: "
-#: ../lib/Plugins/Bugzilla.cpp:279
+#: ../lib/Plugins/Bugzilla.cpp:283
#, c-format
msgid "Binary file %s will not be reported."
msgstr "Binair bestand %s wordt niet gerapporteerd."
-#: ../lib/Plugins/Bugzilla.cpp:349
+#: ../lib/Plugins/Bugzilla.cpp:353
msgid "New bug id: "
msgstr "Nieuwe bug id: "
-#: ../lib/Plugins/Bugzilla.cpp:413
+#: ../lib/Plugins/Bugzilla.cpp:421
msgid "Checking for duplicates..."
msgstr "Controleren voor dubbele..."
-#: ../lib/Plugins/Bugzilla.cpp:429
+#: ../lib/Plugins/Bugzilla.cpp:424 ../lib/Plugins/Bugzilla.cpp:436
msgid "Logging into bugzilla..."
msgstr "Inloggen bij bugzilla..."
-#: ../lib/Plugins/Bugzilla.cpp:443
+#: ../lib/Plugins/Bugzilla.cpp:427
+msgid "Check CC and add coment +1..."
+msgstr "Controleer CC en voeg commentaar toe +1..."
+
+#: ../lib/Plugins/Bugzilla.cpp:448
msgid "Creating new bug..."
msgstr "Nieuwe bug aanmaken..."
-#: ../lib/Plugins/Bugzilla.cpp:448
+#: ../lib/Plugins/Bugzilla.cpp:453
msgid "Logging out..."
msgstr "Uitloggen..."
@@ -391,6 +399,11 @@ msgstr "Verkrijgen van golbale universele unieke identificatie..."
msgid "Starting report creation..."
msgstr "Beginnen met rapport aanmaken..."
+#: ../lib/Plugins/CCpp.cpp:493
+#, c-format
+msgid "Skip debuginfo installation for package %s"
+msgstr "Sla debuginfo installatie over voor pakket %s"
+
#: ../lib/Plugins/KerneloopsReporter.cpp:101
msgid "Creating and submitting a report..."
msgstr "Aanmaken en indienen van rapport..."
diff --git a/po/pa.po b/po/pa.po
new file mode 100644
index 00000000..c4645f35
--- /dev/null
+++ b/po/pa.po
@@ -0,0 +1,415 @@
+# translation of abrt.master.abrt.po to Punjabi
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Jaswinder Singh <jsingh@redhat.com>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: abrt.master.abrt\n"
+"Report-Msgid-Bugs-To: jmoskovc@redhat.com\n"
+"POT-Creation-Date: 2009-09-08 08:41+0000\n"
+"PO-Revision-Date: 2009-09-08 16:57+0530\n"
+"Last-Translator: Jaswinder Singh <jsingh@redhat.com>\n"
+"Language-Team: Punjabi <Punjabi-users@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: ../src/Gui/ABRTExceptions.py:4
+msgid "Another client is already running, trying to wake it."
+msgstr ""
+
+#: ../src/Gui/ABRTExceptions.py:10
+msgid "Got unexpected data from daemon (is the database properly updated?)."
+msgstr ""
+
+#: ../src/Gui/ABRTPlugin.py:26
+msgid "Analyzer plugins"
+msgstr ""
+
+#: ../src/Gui/ABRTPlugin.py:27
+msgid "Action plugins"
+msgstr "ਕਾਰਵਾਈ ਪਲੱਗਇਨ"
+
+#: ../src/Gui/ABRTPlugin.py:28
+msgid "Reporter plugins"
+msgstr "ਰਿਪੋਰਟਰ ਪਲੱਗਇਨ"
+
+#: ../src/Gui/ABRTPlugin.py:29
+msgid "Database plugins"
+msgstr "ਡਾਟਾਬੇਸ ਪਲੱਗਇਨ"
+
+#: ../src/Gui/CCDBusBackend.py:140
+msgid "Can't connect to dbus"
+msgstr ""
+
+#: ../src/Gui/CCDBusBackend.py:144 ../src/Gui/CCDBusBackend.py:163
+msgid "Please check if abrt daemon is running."
+msgstr ""
+
+#: ../src/Gui/CCDBusBackend.py:181
+msgid ""
+"Daemon did't return valid report info\n"
+"Debuginfo is missing?"
+msgstr ""
+
+#: ../src/Gui/ccgui.glade.h:1
+msgid " "
+msgstr " "
+
+#: ../src/Gui/ccgui.glade.h:2
+msgid "(C) 2009 Red Hat, Inc."
+msgstr "(C) 2009 Red Hat, Inc."
+
+#: ../src/Gui/ccgui.glade.h:3 ../src/Gui/CCMainWindow.py:215
+msgid "<b>Not reported!</b>"
+msgstr ""
+
+#: ../src/Gui/ccgui.glade.h:4
+msgid "<span color=\"white\">Description</span>"
+msgstr "<span color=\"white\">ਵਰਣਨ</span>"
+
+#: ../src/Gui/ccgui.glade.h:5
+msgid "About ABRT"
+msgstr ""
+
+#: ../src/Gui/ccgui.glade.h:6
+msgid "Automatic Bug Reporting Tool"
+msgstr ""
+
+#: ../src/Gui/ccgui.glade.h:7
+msgid "Delete"
+msgstr ""
+
+#: ../src/Gui/ccgui.glade.h:8
+msgid "Please wait.."
+msgstr ""
+
+#: ../src/Gui/ccgui.glade.h:9 ../src/Gui/report.glade.h:2
+msgid "Report"
+msgstr ""
+
+#: ../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 "
+"Software Foundation; either version 2 of the License, or (at your option) "
+"any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful, but WITHOUT "
+"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
+"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for "
+"more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License along with "
+"this program. If not, see <http://www.gnu.org/licenses/>."
+msgstr ""
+
+#: ../src/Gui/ccgui.glade.h:15
+msgid "Working..."
+msgstr ""
+
+#: ../src/Gui/ccgui.glade.h:16
+msgid "_Edit"
+msgstr ""
+
+#: ../src/Gui/ccgui.glade.h:17
+msgid "_File"
+msgstr ""
+
+#: ../src/Gui/ccgui.glade.h:18
+msgid "_Help"
+msgstr ""
+
+#: ../src/Gui/CCMainWindow.py:86
+msgid "Package"
+msgstr ""
+
+#: ../src/Gui/CCMainWindow.py:87
+msgid "Application"
+msgstr ""
+
+#: ../src/Gui/CCMainWindow.py:88
+msgid "Date"
+msgstr ""
+
+#: ../src/Gui/CCMainWindow.py:89
+msgid "Crash Rate"
+msgstr ""
+
+#: ../src/Gui/CCMainWindow.py:91
+msgid "User"
+msgstr ""
+
+#: ../src/Gui/CCMainWindow.py:157
+#, python-format
+msgid ""
+"Unable to finish current task!\n"
+"%s"
+msgstr ""
+
+#: ../src/Gui/CCMainWindow.py:174
+#, python-format
+msgid ""
+"Error while loading the dumplist, please check if abrt daemon is running\n"
+" %s"
+msgstr ""
+
+#: ../src/Gui/CCMainWindow.py:207
+msgid "<b>This crash has been reported, you can find the report(s) at:</b>\n"
+msgstr ""
+
+#: ../src/Gui/CCMainWindow.py:267
+msgid ""
+"Unable to get report!\n"
+"Debuginfo is missing?"
+msgstr ""
+
+#: ../src/Gui/CCMainWindow.py:279
+#, python-format
+msgid ""
+"Reporting failed!\n"
+"%s"
+msgstr ""
+
+#: ../src/Gui/CCMainWindow.py:311
+#, python-format
+msgid "Error getting the report: %s"
+msgstr ""
+
+#: ../src/Gui/CCReporterDialog.py:98
+#, python-format
+msgid ""
+"<b>WARNING</b>, you're about to send data which might contain sensitive "
+"information.\n"
+"Do you really want to send <b>%s</b>?\n"
+msgstr ""
+
+#: ../src/Gui/CCReporterDialog.py:111
+msgid "Brief description how to reproduce this or what you did..."
+msgstr ""
+
+#: ../src/Gui/PluginSettingsUI.py:17
+msgid "Can't find PluginDialog widget in UI description!"
+msgstr ""
+
+#. we shouldn't get here, but just to be safe
+#: ../src/Gui/PluginSettingsUI.py:21
+#, python-format
+msgid "No UI for plugin %s"
+msgstr ""
+
+#: ../src/Gui/PluginSettingsUI.py:38 ../src/Gui/PluginSettingsUI.py:64
+msgid "combo box is not implemented"
+msgstr ""
+
+#: ../src/Gui/PluginSettingsUI.py:47
+msgid "Nothing to hydrate!"
+msgstr ""
+
+#: ../src/Gui/report.glade.h:1
+msgid "Comment"
+msgstr ""
+
+#: ../src/Gui/report.glade.h:3
+msgid "Send"
+msgstr ""
+
+#: ../src/Gui/report.glade.h:4
+msgid "gtk-cancel"
+msgstr ""
+
+#: ../src/Gui/SettingsDialog.py:22
+msgid "Can't load gui description for SettingsDialog!"
+msgstr ""
+
+#: ../src/Gui/SettingsDialog.py:34
+msgid "Name"
+msgstr ""
+
+#: ../src/Gui/SettingsDialog.py:52
+msgid "Enabled"
+msgstr ""
+
+#: ../src/Gui/SettingsDialog.py:117
+msgid "Can't get plugin description"
+msgstr ""
+
+#: ../src/Gui/SettingsDialog.py:125
+#, python-format
+msgid ""
+"Error while opening plugin settings UI: \n"
+"\n"
+"%s"
+msgstr ""
+
+#: ../src/Gui/SettingsDialog.py:135
+#, python-format
+msgid ""
+"Can't save plugin settings:\n"
+" %s"
+msgstr ""
+
+#: ../src/Gui/SettingsDialog.py:141
+msgid "unknown response from settings dialog"
+msgstr ""
+
+#: ../src/Applet/Applet.cpp:45
+#, c-format
+msgid "A crash in package %s has been detected!"
+msgstr ""
+
+#. applet is already running
+#: ../src/Applet/Applet.cpp:82
+msgid "Applet is already running."
+msgstr ""
+
+#: ../src/Applet/Applet.cpp:96 ../src/Applet/Applet.cpp:97
+#: ../src/Applet/CCApplet.cpp:201
+msgid "ABRT service is not running"
+msgstr ""
+
+#: ../src/Applet/CCApplet.cpp:135 ../src/Applet/CCApplet.cpp:343
+#, c-format
+msgid "Pending events: %i"
+msgstr ""
+
+#: ../src/Applet/CCApplet.cpp:161
+#, c-format
+msgid "Can't create menu from the description, popup won't be available!\n"
+msgstr ""
+
+#: ../src/Applet/CCApplet.cpp:190
+msgid ""
+"This is default handler, you should register your own with "
+"ConnectCrashHandler"
+msgstr ""
+
+#: ../src/Applet/CCApplet.cpp:205
+msgid "ABRT service has been started"
+msgstr ""
+
+#: ../src/Applet/CCApplet.cpp:231
+msgid "Out of memory"
+msgstr ""
+
+#: ../src/Applet/CCApplet.cpp:247
+msgid "Warning"
+msgstr ""
+
+#: ../lib/Plugins/Bugzilla.cpp:84
+msgid "Empty login and password. Please check Bugzilla.conf"
+msgstr ""
+
+#: ../lib/Plugins/Bugzilla.cpp:228
+msgid "Bug is already reported: "
+msgstr ""
+
+#: ../lib/Plugins/Bugzilla.cpp:283
+#, c-format
+msgid "Binary file %s will not be reported."
+msgstr ""
+
+#: ../lib/Plugins/Bugzilla.cpp:353
+msgid "New bug id: "
+msgstr ""
+
+#: ../lib/Plugins/Bugzilla.cpp:421
+msgid "Checking for duplicates..."
+msgstr ""
+
+#: ../lib/Plugins/Bugzilla.cpp:424 ../lib/Plugins/Bugzilla.cpp:436
+msgid "Logging into bugzilla..."
+msgstr ""
+
+#: ../lib/Plugins/Bugzilla.cpp:427
+msgid "Check CC and add coment +1..."
+msgstr ""
+
+#: ../lib/Plugins/Bugzilla.cpp:448
+msgid "Creating new bug..."
+msgstr ""
+
+#: ../lib/Plugins/Bugzilla.cpp:453
+msgid "Logging out..."
+msgstr ""
+
+#: ../lib/Plugins/Kerneloops.cpp:38
+msgid "Getting local/global universal unique identification..."
+msgstr ""
+
+#: ../lib/Plugins/CCpp.cpp:82
+msgid "Searching for debug-info packages..."
+msgstr ""
+
+#: ../lib/Plugins/CCpp.cpp:120
+msgid "Downloading and installing debug-info packages..."
+msgstr ""
+
+#: ../lib/Plugins/CCpp.cpp:180
+msgid "Getting backtrace..."
+msgstr ""
+
+#: ../lib/Plugins/CCpp.cpp:429
+msgid "Getting local universal unique identification..."
+msgstr ""
+
+#: ../lib/Plugins/CCpp.cpp:455
+msgid "Getting global universal unique identification..."
+msgstr ""
+
+#: ../lib/Plugins/CCpp.cpp:473
+msgid "Starting report creation..."
+msgstr ""
+
+#: ../lib/Plugins/CCpp.cpp:495
+#, c-format
+msgid "Skip debuginfo installation for package %s"
+msgstr ""
+
+#: ../lib/Plugins/KerneloopsReporter.cpp:101
+msgid "Creating and submitting a report..."
+msgstr ""
+
+#: ../lib/Plugins/Logger.cpp:58 ../lib/Plugins/Mailx.cpp:124
+msgid "Creating a report..."
+msgstr ""
+
+#: ../lib/Plugins/RunApp.cpp:62
+msgid "Executing RunApp plugin..."
+msgstr ""
+
+#: ../lib/Plugins/FileTransfer.cpp:52 ../lib/Plugins/FileTransfer.cpp:247
+msgid "FileTransfer: URL not specified"
+msgstr ""
+
+#: ../lib/Plugins/FileTransfer.cpp:69
+#, c-format
+msgid "Sending archive %s via %s"
+msgstr ""
+
+#: ../lib/Plugins/FileTransfer.cpp:121
+msgid "Creating an archive..."
+msgstr ""
+
+#: ../lib/Plugins/FileTransfer.cpp:176
+msgid "File Transfer: Creating a report..."
+msgstr ""
+
+#: ../lib/Plugins/FileTransfer.cpp:197 ../lib/Plugins/FileTransfer.cpp:226
+msgid "CFileTransfer::Run(): Cannot create and send an archive: "
+msgstr ""
+
+#: ../lib/Plugins/KerneloopsScanner.cpp:79
+msgid "Creating kernel oops crash reports..."
+msgstr ""
+
+#: ../lib/Plugins/Mailx.cpp:110
+msgid "Sending an email..."
+msgstr ""
+
+#: ../lib/Plugins/SOSreport.cpp:90
+msgid "Executing SOSreportAction plugin..."
+msgstr ""
+
diff --git a/po/pl.po b/po/pl.po
index 98845394..e74ef0b3 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -1,13 +1,14 @@
# translation of pl.po to Polish
# Piotr Drąg <piotrdrag@gmail.com>, 2009.
+# Tomasz Chrzczonowicz <chrzczonowicz@gmail.com>, 2009.
#
msgid ""
msgstr ""
"Project-Id-Version: pl\n"
"Report-Msgid-Bugs-To: jmoskovc@redhat.com\n"
-"POT-Creation-Date: 2009-09-04 14:46+0000\n"
-"PO-Revision-Date: 2009-09-07 13:49+0200\n"
-"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
+"POT-Creation-Date: 2009-09-07 14:45+0000\n"
+"PO-Revision-Date: 2009-09-07 19:56+0200\n"
+"Last-Translator: Tomasz Chrzczonowicz <chrzczonowicz@gmail.com>\n"
"Language-Team: Polish <fedora-trans-pl@redhat.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -273,7 +274,7 @@ msgid ""
"\n"
"%s"
msgstr ""
-"Błąd podczas otwierania UI ustawień wtyczki: \n"
+"Błąd podczas otwierania interfejsu użytkownika ustawień wtyczki: \n"
"\n"
"%s"
@@ -336,32 +337,40 @@ msgstr "Brak pamięci"
msgid "Warning"
msgstr "Ostrzeżenie"
-#: ../lib/Plugins/Bugzilla.cpp:219
+#: ../lib/Plugins/Bugzilla.cpp:84
+msgid "Empty login and password. Please check Bugzilla.conf"
+msgstr "Pola login i hasło są puste. Sprawdź plik Bugzilla.conf"
+
+#: ../lib/Plugins/Bugzilla.cpp:228
msgid "Bug is already reported: "
msgstr "Błąd został już zgłoszony: "
-#: ../lib/Plugins/Bugzilla.cpp:279
+#: ../lib/Plugins/Bugzilla.cpp:283
#, c-format
msgid "Binary file %s will not be reported."
msgstr "Plik binarny %s nie zostanie zgłoszony."
-#: ../lib/Plugins/Bugzilla.cpp:349
+#: ../lib/Plugins/Bugzilla.cpp:353
msgid "New bug id: "
msgstr "Identyfikator nowego błędu: "
-#: ../lib/Plugins/Bugzilla.cpp:413
+#: ../lib/Plugins/Bugzilla.cpp:421
msgid "Checking for duplicates..."
msgstr "Sprawdzanie duplikatów..."
-#: ../lib/Plugins/Bugzilla.cpp:429
+#: ../lib/Plugins/Bugzilla.cpp:424 ../lib/Plugins/Bugzilla.cpp:436
msgid "Logging into bugzilla..."
msgstr "Logowanie do Bugzilli..."
-#: ../lib/Plugins/Bugzilla.cpp:443
+#: ../lib/Plugins/Bugzilla.cpp:427
+msgid "Check CC and add coment +1..."
+msgstr "Powiadamiaj mnie o zmianach i wstaw komentarz \"+1\"..."
+
+#: ../lib/Plugins/Bugzilla.cpp:448
msgid "Creating new bug..."
msgstr "Dodawanie nowego błędu..."
-#: ../lib/Plugins/Bugzilla.cpp:448
+#: ../lib/Plugins/Bugzilla.cpp:453
msgid "Logging out..."
msgstr "Wylogowywanie..."
@@ -394,6 +403,11 @@ msgstr "Uzyskiwanie globalnego uniwersalnego, unikalnego identyfikatora..."
msgid "Starting report creation..."
msgstr "Uruchamianie tworzenia raportu..."
+#: ../lib/Plugins/CCpp.cpp:493
+#, c-format
+msgid "Skip debuginfo installation for package %s"
+msgstr "Pomiń instalację pakietu debuginfo dla pakietu %s"
+
#: ../lib/Plugins/KerneloopsReporter.cpp:101
msgid "Creating and submitting a report..."
msgstr "Tworzenie i wysyłanie raportu..."
diff --git a/po/ru.po b/po/ru.po
index 4171b786..5c3ec716 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -1,16 +1,18 @@
+# translation of ru.po to Russian
# translation of ru.po to
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Yulia Poyarkova <yulia.poyarkova@redhat.com>, 2009.
+# Yulia Poyarkova <yulia.poyarkova@gmail.com>, 2009.
msgid ""
msgstr ""
"Project-Id-Version: ru\n"
"Report-Msgid-Bugs-To: jmoskovc@redhat.com\n"
-"POT-Creation-Date: 2009-09-01 19:44+0000\n"
-"PO-Revision-Date: 2009-09-03 10:55+1000\n"
-"Last-Translator: Yulia Poyarkova <yulia.poyarkova@redhat.com>\n"
-"Language-Team: \n"
+"POT-Creation-Date: 2009-09-07 19:47+0000\n"
+"PO-Revision-Date: 2009-09-08 17:25+1000\n"
+"Last-Translator: Yulia Poyarkova <yulia.poyarkova@gmail.com>\n"
+"Language-Team: Russian <fedora-trans-ru@redhat.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -22,7 +24,9 @@ msgstr "Выполняется другой клиент. Будет выпол
#: ../src/Gui/ABRTExceptions.py:10
msgid "Got unexpected data from daemon (is the database properly updated?)."
-msgstr "Получены непредвиденные данные от демона. Проверьте, обновлена ли база данных."
+msgstr ""
+"Получены непредвиденные данные от демона. Проверьте, обновлена ли база "
+"данных."
#: ../src/Gui/ABRTPlugin.py:26
msgid "Analyzer plugins"
@@ -109,14 +113,14 @@ msgid ""
msgstr ""
"Эта программа — свободное программное обеспечение; её можно распространять "
"или изменять в соответствии с условиями лицензии GNU General Public License, "
-"опубликованной Фондом свободного программного обеспечения, версии 2 "
-"или (по вашему выбору) любой более поздней версии.\n"
+"опубликованной Фондом свободного программного обеспечения, версии 2 или (по "
+"вашему выбору) любой более поздней версии.\n"
"\n"
"Эта программа распространяется в надежде, что она может быть полезной, но "
-"БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ВЫРАЖЕННЫХ ЯВНО ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ "
-"(НО НЕ ОГРАНИЧИВАЯСЬ) ПОДРАЗУМЕВАЕМЫЕ ГАРАНТИИ КОММЕРЧЕСКОЙ ЦЕННОСТИ И "
-"ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. Для получения дополнительных сведений "
-"обратитесь к лицензии GNU General Public License.\n"
+"БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ВЫРАЖЕННЫХ ЯВНО ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ (НО НЕ "
+"ОГРАНИЧИВАЯСЬ) ПОДРАЗУМЕВАЕМЫЕ ГАРАНТИИ КОММЕРЧЕСКОЙ ЦЕННОСТИ И ПРИГОДНОСТИ "
+"ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. Для получения дополнительных сведений обратитесь к "
+"лицензии GNU General Public License.\n"
"\n"
"Копия лиценции GNU предоставляется вместе с этой программой. \n"
"Её также можно найти на сайте <http://www.gnu.org/licenses/>."
@@ -204,11 +208,12 @@ msgstr "Ошибка при получении отчёта: %s"
#: ../src/Gui/CCReporterDialog.py:98
#, python-format
msgid ""
-"<b>WARNING</b>, you're about to send data that might contain some sensitive "
-"informations!\n"
+"<b>WARNING</b>, you're about to send data which might contain sensitive "
+"information.\n"
"Do you really want to send <b>%s</b>?\n"
msgstr ""
-"<b>ПРЕДУПРЕЖДЕНИЕ:</b> Вы собираетесь отправить данные, которые могут содержать конфиденциальную информацию.\n"
+"<b>ПРЕДУПРЕЖДЕНИЕ:</b> Вы собираетесь отправить данные, которые могут "
+"содержать конфиденциальную информацию.\n"
"Вы действительно хотите отправить <b>%s</b>?\n"
#: ../src/Gui/CCReporterDialog.py:111
@@ -231,7 +236,7 @@ msgstr "поле ввода недоступно"
#: ../src/Gui/PluginSettingsUI.py:47
msgid "Nothing to hydrate!"
-msgstr "Невозможно применить hydrate!"
+msgstr "Нет данных для отображения!"
#: ../src/Gui/report.glade.h:1
msgid "Comment"
@@ -247,7 +252,7 @@ msgstr "gtk-cancel"
#: ../src/Gui/SettingsDialog.py:22
msgid "Can't load gui description for SettingsDialog!"
-msgstr "Не удалось загрузить описание gui для SettingsDialog"
+msgstr "Не удалось загрузить описание GUI для SettingsDialog"
#: ../src/Gui/SettingsDialog.py:34
msgid "Name"
@@ -285,47 +290,165 @@ msgstr ""
msgid "unknown response from settings dialog"
msgstr "неизвестный ответ диалога настроек"
-#. applet->AddEvent(uid, std::string(progname));
-#: ../src/Applet/Applet.cpp:49
+#: ../src/Applet/Applet.cpp:45
#, c-format
msgid "A crash in package %s has been detected!"
-msgstr "Обнаружен сбой пакета %s!"
+msgstr "Сбой в пакете %s!"
#. applet is already running
-#: ../src/Applet/Applet.cpp:80
+#: ../src/Applet/Applet.cpp:82
msgid "Applet is already running."
msgstr "Апплет уже выполняется."
-#: ../src/Applet/Applet.cpp:94 ../src/Applet/Applet.cpp:95
-#: ../src/Applet/CCApplet.cpp:135
+#: ../src/Applet/Applet.cpp:96 ../src/Applet/Applet.cpp:97
+#: ../src/Applet/CCApplet.cpp:201
msgid "ABRT service is not running"
msgstr "Служба ABRT не работает"
-#: ../src/Applet/CCApplet.cpp:83 ../src/Applet/CCApplet.cpp:249
+#: ../src/Applet/CCApplet.cpp:135 ../src/Applet/CCApplet.cpp:343
#, c-format
msgid "Pending events: %i"
msgstr "Ожидающие события: %i"
-#: ../src/Applet/CCApplet.cpp:102
+#: ../src/Applet/CCApplet.cpp:161
#, c-format
msgid "Can't create menu from the description, popup won't be available!\n"
-msgstr "Не удалось создать меню на основе описания. Всплывающее окно будет недоступно!\n"
+msgstr ""
+"Не удалось создать меню на основе описания. Всплывающее окно будет "
+"недоступно!\n"
-#: ../src/Applet/CCApplet.cpp:125
+#: ../src/Applet/CCApplet.cpp:190
msgid ""
"This is default handler, you should register your own with "
"ConnectCrashHandler"
-msgstr "Это стандартный обработчик. Зарегистировать собственный обработчик можно с помощью ConnectCrashHandler"
+msgstr ""
+"Это стандартный обработчик. Зарегистрировать собственный обработчик можно с "
+"помощью ConnectCrashHandler"
-#: ../src/Applet/CCApplet.cpp:139
+#: ../src/Applet/CCApplet.cpp:205
msgid "ABRT service has been started"
msgstr "Служба ABRT запущена"
-#: ../src/Applet/CCApplet.cpp:160
+#: ../src/Applet/CCApplet.cpp:231
+msgid "Out of memory"
+msgstr "Недостаточно памяти"
+
+#: ../src/Applet/CCApplet.cpp:247
msgid "Warning"
msgstr "Предупреждение"
-#: ../src/Applet/CCApplet.cpp:166
-msgid "Out of memory"
-msgstr "Не хватает памяти"
+#: ../lib/Plugins/Bugzilla.cpp:84
+msgid "Empty login and password. Please check Bugzilla.conf"
+msgstr "Пустое имя входа и пароль. Проверьте Bugzilla.conf"
+
+#: ../lib/Plugins/Bugzilla.cpp:228
+msgid "Bug is already reported: "
+msgstr "Запрос уже создан:"
+
+#: ../lib/Plugins/Bugzilla.cpp:283
+#, c-format
+msgid "Binary file %s will not be reported."
+msgstr "Запрос не будет создаваться для бинарного файла %s:"
+
+#: ../lib/Plugins/Bugzilla.cpp:353
+msgid "New bug id: "
+msgstr "Идентификатор запроса:"
+
+#: ../lib/Plugins/Bugzilla.cpp:421
+msgid "Checking for duplicates..."
+msgstr "Проверяется наличие дубликатов..."
+
+#: ../lib/Plugins/Bugzilla.cpp:424 ../lib/Plugins/Bugzilla.cpp:436
+msgid "Logging into bugzilla..."
+msgstr "Выполняется вход в Bugzilla..."
+
+#: ../lib/Plugins/Bugzilla.cpp:427
+msgid "Check CC and add coment +1..."
+msgstr "Проверьте список CC и добавьте комментарий..."
+
+#: ../lib/Plugins/Bugzilla.cpp:448
+msgid "Creating new bug..."
+msgstr "Создаётся новый запрос..."
+
+#: ../lib/Plugins/Bugzilla.cpp:453
+msgid "Logging out..."
+msgstr "Выполняется выход..."
+
+#: ../lib/Plugins/Kerneloops.cpp:38
+msgid "Getting local/global universal unique identification..."
+msgstr "Получение уникальных данных идентификации (локальной/глобальной)..."
+
+#: ../lib/Plugins/CCpp.cpp:82
+msgid "Searching for debug-info packages..."
+msgstr "Выполняется поиск пакетов debug-info..."
+
+#: ../lib/Plugins/CCpp.cpp:120
+msgid "Downloading and installing debug-info packages..."
+msgstr "Загружаются и устанавливаются пакеты debug-info..."
+
+#: ../lib/Plugins/CCpp.cpp:180
+msgid "Getting backtrace..."
+msgstr "Получение трассировки..."
+
+#: ../lib/Plugins/CCpp.cpp:429
+msgid "Getting local universal unique identification..."
+msgstr "Получение локальных данных идентификации..."
+
+#: ../lib/Plugins/CCpp.cpp:455
+msgid "Getting global universal unique identification..."
+msgstr "Получение глобальных данных идентификации..."
+
+#: ../lib/Plugins/CCpp.cpp:473
+msgid "Starting report creation..."
+msgstr "Начинается создание отчёта..."
+
+#: ../lib/Plugins/CCpp.cpp:495
+#, c-format
+msgid "Skip debuginfo installation for package %s"
+msgstr "Пропустить установку debuginfo для пакета %s"
+
+#: ../lib/Plugins/KerneloopsReporter.cpp:101
+msgid "Creating and submitting a report..."
+msgstr "Создание и отправка отчёта..."
+
+#: ../lib/Plugins/Logger.cpp:58 ../lib/Plugins/Mailx.cpp:124
+msgid "Creating a report..."
+msgstr "Создаётся отчёт..."
+
+#: ../lib/Plugins/RunApp.cpp:62
+msgid "Executing RunApp plugin..."
+msgstr "Выполняется модуль RunApp..."
+
+#: ../lib/Plugins/FileTransfer.cpp:52 ../lib/Plugins/FileTransfer.cpp:247
+msgid "FileTransfer: URL not specified"
+msgstr "FileTransfer: Не указан URL"
+
+#: ../lib/Plugins/FileTransfer.cpp:69
+#, c-format
+msgid "Sending archive %s via %s"
+msgstr "Архив %s отправляется через %s"
+
+#: ../lib/Plugins/FileTransfer.cpp:121
+msgid "Creating an archive..."
+msgstr "Создаётся архив..."
+
+#: ../lib/Plugins/FileTransfer.cpp:176
+msgid "File Transfer: Creating a report..."
+msgstr "File Transfer: Создаётся отчёт..."
+
+#: ../lib/Plugins/FileTransfer.cpp:197 ../lib/Plugins/FileTransfer.cpp:226
+msgid "CFileTransfer::Run(): Cannot create and send an archive: "
+msgstr "CFileTransfer::Run(): Не удалось создать и отправить архив: "
+
+#: ../lib/Plugins/KerneloopsScanner.cpp:79
+msgid "Creating kernel oops crash reports..."
+msgstr "Создаются отчёты о сбоях ядра..."
+
+#: ../lib/Plugins/Mailx.cpp:110
+msgid "Sending an email..."
+msgstr "Отправляется почтовое сообщение..."
+
+#: ../lib/Plugins/SOSreport.cpp:90
+msgid "Executing SOSreportAction plugin..."
+msgstr "Запускается модуль SOSreportAction..."
diff --git a/po/te.po b/po/te.po
new file mode 100644
index 00000000..b5da445c
--- /dev/null
+++ b/po/te.po
@@ -0,0 +1,451 @@
+# translation of abrt.master.abrt.po to Telugu
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Krishna Babu K <kkrothap@redhat.com>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: abrt.master.abrt\n"
+"Report-Msgid-Bugs-To: jmoskovc@redhat.com\n"
+"POT-Creation-Date: 2009-09-07 14:45+0000\n"
+"PO-Revision-Date: 2009-09-08 12:29+0530\n"
+"Last-Translator: Krishna Babu K <kkrothap@redhat.com>\n"
+"Language-Team: Telugu <en@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n\n"
+
+#: ../src/Gui/ABRTExceptions.py:4
+msgid "Another client is already running, trying to wake it."
+msgstr "వేరొక క్లైంటు యిప్పటికే నడుచుచున్నది, దానిని మేల్కొలుపుటకు యత్నించుచున్నది."
+
+#: ../src/Gui/ABRTExceptions.py:10
+msgid "Got unexpected data from daemon (is the database properly updated?)."
+msgstr "డెమోన్‌నుండి అనుకోని డాటా పొందినది (డాటాబేస్ సరిగా నవీకరించబడిందా?)."
+
+#: ../src/Gui/ABRTPlugin.py:26
+msgid "Analyzer plugins"
+msgstr "విశ్లేషకి ప్లగిన్సు"
+
+#: ../src/Gui/ABRTPlugin.py:27
+msgid "Action plugins"
+msgstr "చర్యా ప్లగిన్సు"
+
+#: ../src/Gui/ABRTPlugin.py:28
+msgid "Reporter plugins"
+msgstr "నివేదకి ప్లగిన్సు"
+
+#: ../src/Gui/ABRTPlugin.py:29
+msgid "Database plugins"
+msgstr "డాటాబేస్ ప్లగిన్సు"
+
+#: ../src/Gui/CCDBusBackend.py:140
+msgid "Can't connect to dbus"
+msgstr "dbusకు అనుసంధానము కాలేకపోయింది"
+
+#: ../src/Gui/CCDBusBackend.py:144 ../src/Gui/CCDBusBackend.py:163
+msgid "Please check if abrt daemon is running."
+msgstr "abrt డెమోన్ నడుస్తుంటే దయచేసి పరిశీలించుము."
+
+#: ../src/Gui/CCDBusBackend.py:181
+msgid ""
+"Daemon did't return valid report info\n"
+"Debuginfo is missing?"
+msgstr ""
+"డెమోన్ చెల్లునటువంటి నివేదిక సమాచారమును తిరిగియిచ్చుట లేదు\n"
+"డీబగ్‌సమాచారము తప్పిపోయిందా?"
+
+#: ../src/Gui/ccgui.glade.h:1
+msgid " "
+msgstr " "
+
+#: ../src/Gui/ccgui.glade.h:2
+msgid "(C) 2009 Red Hat, Inc."
+msgstr "(C) 2009 Red Hat, Inc."
+
+#: ../src/Gui/ccgui.glade.h:3 ../src/Gui/CCMainWindow.py:215
+msgid "<b>Not reported!</b>"
+msgstr "<b>నివేదించబడలేదు!</b>"
+
+#: ../src/Gui/ccgui.glade.h:4
+msgid "<span color=\"white\">Description</span>"
+msgstr "<span color=\"white\">వివరణ</span>"
+
+#: ../src/Gui/ccgui.glade.h:5
+msgid "About ABRT"
+msgstr "ABRT గురించి"
+
+#: ../src/Gui/ccgui.glade.h:6
+msgid "Automatic Bug Reporting Tool"
+msgstr "స్వయంచాలక బగ్ నివేదీకరణ సాధనము"
+
+#: ../src/Gui/ccgui.glade.h:7
+msgid "Delete"
+msgstr "తొలగించు"
+
+#: ../src/Gui/ccgui.glade.h:8
+msgid "Please wait.."
+msgstr "దయచేసి వేచివుండు..."
+
+#: ../src/Gui/ccgui.glade.h:9 ../src/Gui/report.glade.h:2
+msgid "Report"
+msgstr "నివేదించు"
+
+#: ../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 "
+"Software Foundation; either version 2 of the License, or (at your option) "
+"any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful, but WITHOUT "
+"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
+"FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for "
+"more details.\n"
+"\n"
+"You should have received a copy of the GNU General Public License along with "
+"this program. If not, see <http://www.gnu.org/licenses/>."
+msgstr ""
+"ఈ ప్రోగ్రామ్ ఉచిత సాఫ్టువేర్; ఉచిత సాఫ్టువేర్ సంస్థ తరుపున ప్రచురితమైన "
+"GNU జనరల్ పబ్లిక్ లైసెన్సు కు లోబడి దీనిని మీరు పునఃపంపిణి మరియు/లేదా "
+"సవరణ చేయవచ్చు; మీరు అనుసరించవలిసినది లైసెన్సు యొక్క వర్షన్ 2, లేదా "
+"(మీ ఐచ్చికం వద్ద) దాని తరువాతి వర్షన్ కాని.\n"
+"\n"
+"ఈ ప్రోగ్రామ్ అది ఉపయోగపడుతుందనే నమ్మకం తో పంపిణీ చేయబడింది, "
+"అయితే ఏ హామి లేదు; వ్యాపారసంబంధితంగా కాని లేదా ప్రతిపాదిత ప్రయోజనం కొరకు "
+"కాని హామీ లేదు. అధికవివరములకొరకు GNU జనరల్ పబ్లిక్ లైసెన్సు ను "
+"చూడండి.\n"
+"\n"
+"ఈ ప్రోగ్రామ్ తో మీరు GNU జనరల్ పబ్లిక్ లైసెన్సు నకలును పొంది ఉంటారు. "
+"పొందకపోతే, <http://www.gnu.org/licenses/> చూడండి."
+
+#: ../src/Gui/ccgui.glade.h:15
+msgid "Working..."
+msgstr "పనిచేయుచున్నది..."
+
+#: ../src/Gui/ccgui.glade.h:16
+msgid "_Edit"
+msgstr "సరికూర్చు (_E)"
+
+#: ../src/Gui/ccgui.glade.h:17
+msgid "_File"
+msgstr "దస్త్రము (_F)"
+
+#: ../src/Gui/ccgui.glade.h:18
+msgid "_Help"
+msgstr "సహాయము (_H)"
+
+#: ../src/Gui/CCMainWindow.py:86
+msgid "Package"
+msgstr "ప్యాకేజీ"
+
+#: ../src/Gui/CCMainWindow.py:87
+msgid "Application"
+msgstr "అనువర్తనము"
+
+#: ../src/Gui/CCMainWindow.py:88
+msgid "Date"
+msgstr "తేది"
+
+#: ../src/Gui/CCMainWindow.py:89
+msgid "Crash Rate"
+msgstr "క్రాష్ రేటు"
+
+#: ../src/Gui/CCMainWindow.py:91
+msgid "User"
+msgstr "వినియోగదారి"
+
+#: ../src/Gui/CCMainWindow.py:157
+#, python-format
+msgid ""
+"Unable to finish current task!\n"
+"%s"
+msgstr ""
+"ప్రస్తుత కర్తవ్యమును పూర్తిచేయలేక పోయింది!\n"
+"%s"
+
+#: ../src/Gui/CCMainWindow.py:174
+#, python-format
+msgid ""
+"Error while loading the dumplist, please check if abrt daemon is running\n"
+" %s"
+msgstr ""
+"డంపుజాబితాను లోడుచేయుటలో దోషము, దయచేసి abrt డెమోన్ నడుస్తున్నదో లేదో "
+"పరిశీలించండి\n"
+" %s"
+
+#: ../src/Gui/CCMainWindow.py:207
+msgid "<b>This crash has been reported, you can find the report(s) at:</b>\n"
+msgstr "<b>ఈ క్రాష్ నివేదించబడింది, మీరు నివేదికలను దీనివద్ద కనుగొనవచ్చును:</b>\n"
+
+#: ../src/Gui/CCMainWindow.py:267
+msgid ""
+"Unable to get report!\n"
+"Debuginfo is missing?"
+msgstr ""
+"నివేదికను పొందలేక పోయింది!\n"
+"డీబగ్‌సమాచారము తప్పిపోయిందా?"
+
+#: ../src/Gui/CCMainWindow.py:279
+#, python-format
+msgid ""
+"Reporting failed!\n"
+"%s"
+msgstr ""
+"నివేదించుట విఫలమైంది!\n"
+"%s"
+
+#: ../src/Gui/CCMainWindow.py:311
+#, python-format
+msgid "Error getting the report: %s"
+msgstr "నివేదికను పొందుటలో దోషము: %s"
+
+#: ../src/Gui/CCReporterDialog.py:98
+#, python-format
+msgid ""
+"<b>WARNING</b>, you're about to send data which might contain sensitive "
+"information.\n"
+"Do you really want to send <b>%s</b>?\n"
+msgstr ""
+"<b>హెచ్చరిక</b>, మీరు సున్నితమైన సమాచారము కలిగివుండు డాటాను "
+"పంపుబోవుచున్నారు.\n"
+"మీరు నిజంగా పంపాలని అనుకొనుచున్నారా <b>%s</b>?\n"
+
+#: ../src/Gui/CCReporterDialog.py:111
+msgid "Brief description how to reproduce this or what you did..."
+msgstr ""
+"దీనిని మరలా యెలా రాబట్టాలి అనేదాని గురించి మరియు మీరు యేమి చేయాలి అనేదాని "
+"గురించి సోదాహరణము..."
+
+#: ../src/Gui/PluginSettingsUI.py:17
+msgid "Can't find PluginDialog widget in UI description!"
+msgstr "UI వివరణనందు ప్లగిన్‌డైలాగు విడ్జట్‌ను కనుగొనలేక పోయింది!"
+
+#. we shouldn't get here, but just to be safe
+#: ../src/Gui/PluginSettingsUI.py:21
+#, python-format
+msgid "No UI for plugin %s"
+msgstr "ప్లగిన్ %s కొరకు UI లేదు"
+
+#: ../src/Gui/PluginSettingsUI.py:38 ../src/Gui/PluginSettingsUI.py:64
+msgid "combo box is not implemented"
+msgstr "కాంబో పెట్టె అభివృద్ది పరచలేదు"
+
+#: ../src/Gui/PluginSettingsUI.py:47
+msgid "Nothing to hydrate!"
+msgstr "హైడ్రేట్ అగుటకు ఏమీలేదు!"
+
+#: ../src/Gui/report.glade.h:1
+msgid "Comment"
+msgstr "వ్యాఖ్యానము"
+
+#: ../src/Gui/report.glade.h:3
+msgid "Send"
+msgstr "పంపుము"
+
+#: ../src/Gui/report.glade.h:4
+msgid "gtk-cancel"
+msgstr "gtk-cancel"
+
+#: ../src/Gui/SettingsDialog.py:22
+msgid "Can't load gui description for SettingsDialog!"
+msgstr "అమరికలడైలాగు కొరకు gui వివరణను లోడు చేయలేక పోయింది!"
+
+#: ../src/Gui/SettingsDialog.py:34
+msgid "Name"
+msgstr "నామము"
+
+#: ../src/Gui/SettingsDialog.py:52
+msgid "Enabled"
+msgstr "చేతనపరచిన"
+
+#: ../src/Gui/SettingsDialog.py:117
+msgid "Can't get plugin description"
+msgstr "ప్లగిన్ వివరణను పొందలేక పోయింది"
+
+#: ../src/Gui/SettingsDialog.py:125
+#, python-format
+msgid ""
+"Error while opening plugin settings UI: \n"
+"\n"
+"%s"
+msgstr ""
+"ప్లగిన్ అమరికల UI తెరుచునప్పుడు దోషము: \n"
+"\n"
+"%s"
+
+#: ../src/Gui/SettingsDialog.py:135
+#, python-format
+msgid ""
+"Can't save plugin settings:\n"
+" %s"
+msgstr ""
+"ప్లగిన్ అమరికలను దాయలేక పోయింది:\n"
+" %s"
+
+#: ../src/Gui/SettingsDialog.py:141
+msgid "unknown response from settings dialog"
+msgstr "అమరికల డైలాగునుండి తెలియని స్పందన"
+
+#: ../src/Applet/Applet.cpp:45
+#, c-format
+msgid "A crash in package %s has been detected!"
+msgstr "ప్యాకేజీ %s నందు వొక క్రాష్ గుర్తించబడింది!"
+
+#. applet is already running
+#: ../src/Applet/Applet.cpp:82
+msgid "Applet is already running."
+msgstr "ఆప్లెట్ యిప్పటికే నడుచుచున్నది."
+
+#: ../src/Applet/Applet.cpp:96 ../src/Applet/Applet.cpp:97
+#: ../src/Applet/CCApplet.cpp:201
+msgid "ABRT service is not running"
+msgstr "ABRT సేవ నడుచుటలేదు"
+
+#: ../src/Applet/CCApplet.cpp:135 ../src/Applet/CCApplet.cpp:343
+#, c-format
+msgid "Pending events: %i"
+msgstr "వాయిదావున్న ఘటనలు: %i"
+
+#: ../src/Applet/CCApplet.cpp:161
+#, c-format
+msgid "Can't create menu from the description, popup won't be available!\n"
+msgstr "వివరణనుండి మెనూను సృష్టించలేక పోయింది, పాపప్ అందుబాటులో వుండబోదు!\n"
+
+#: ../src/Applet/CCApplet.cpp:190
+msgid ""
+"This is default handler, you should register your own with "
+"ConnectCrashHandler"
+msgstr ""
+"ఇది అప్రమేయ సంభాలిక, మీరు మీ స్వంత దానిని ConnectCrashHandlerతో "
+"నమోదు చేసుకొనండి"
+
+#: ../src/Applet/CCApplet.cpp:205
+msgid "ABRT service has been started"
+msgstr "ABRT సేవ ప్రారంభించబడింది"
+
+#: ../src/Applet/CCApplet.cpp:231
+msgid "Out of memory"
+msgstr "మెమొరీ దాటినది"
+
+#: ../src/Applet/CCApplet.cpp:247
+msgid "Warning"
+msgstr "హెచ్చరిక"
+
+#: ../lib/Plugins/Bugzilla.cpp:84
+msgid "Empty login and password. Please check Bugzilla.conf"
+msgstr "ఖాళీ లాగిన్ మరియు సంకేతపదము. దయచేసి Bugzilla.conf పరిశీలించండి"
+
+#: ../lib/Plugins/Bugzilla.cpp:228
+msgid "Bug is already reported: "
+msgstr "బగ్ యిప్పటికే నివేదించబడింది: "
+
+#: ../lib/Plugins/Bugzilla.cpp:283
+#, c-format
+msgid "Binary file %s will not be reported."
+msgstr "బైనరీ దస్త్రము %s నివేదించబడబోదు."
+
+#: ../lib/Plugins/Bugzilla.cpp:353
+msgid "New bug id: "
+msgstr "కొత్త బగ్ id: "
+
+#: ../lib/Plugins/Bugzilla.cpp:421
+msgid "Checking for duplicates..."
+msgstr "నకిలీల కొరకు పరిశీలించుచున్నది..."
+
+#: ../lib/Plugins/Bugzilla.cpp:424 ../lib/Plugins/Bugzilla.cpp:436
+msgid "Logging into bugzilla..."
+msgstr "బగ్‌జిల్లా లోనికి లాగిన్ అవుతోంది..."
+
+#: ../lib/Plugins/Bugzilla.cpp:427
+msgid "Check CC and add coment +1..."
+msgstr "CCను పరిశీలించుము మరియు వ్యాఖ్యానము జతచేయుము +1..."
+
+#: ../lib/Plugins/Bugzilla.cpp:448
+msgid "Creating new bug..."
+msgstr "కొత్త బగ్‌ను సృష్టించుచున్నది..."
+
+#: ../lib/Plugins/Bugzilla.cpp:453
+msgid "Logging out..."
+msgstr "లాగ్అవుట్ అవుచున్నది..."
+
+#: ../lib/Plugins/Kerneloops.cpp:38
+msgid "Getting local/global universal unique identification..."
+msgstr "లోకల్/గ్లోబల్ యూనివర్సల్ యునిక్ గుర్తింపును పొందుచున్నది..."
+
+#: ../lib/Plugins/CCpp.cpp:82
+msgid "Searching for debug-info packages..."
+msgstr "డీబగ్-సమాచార ప్యాకేజీల కొరకు శోధించుచున్నది..."
+
+#: ../lib/Plugins/CCpp.cpp:120
+msgid "Downloading and installing debug-info packages..."
+msgstr "డీబగ్-సమాచార ప్యాకేజీలను డౌన్‌లోడు చేయుచున్నది మరియు సంస్థాపించుచున్నది..."
+
+#: ../lib/Plugins/CCpp.cpp:180
+msgid "Getting backtrace..."
+msgstr "బాక్‌ట్రేస్ పొందుచున్నది..."
+
+#: ../lib/Plugins/CCpp.cpp:429
+msgid "Getting local universal unique identification..."
+msgstr "లోకల్ యూనివర్సల్ యునిక్ గుర్తింపును పొందుచున్నది..."
+
+#: ../lib/Plugins/CCpp.cpp:453
+msgid "Getting global universal unique identification..."
+msgstr "గ్లోబల్ యూనివర్సల్ యునిక్ గుర్తింపును పొందుచున్నది..."
+
+#: ../lib/Plugins/CCpp.cpp:471
+msgid "Starting report creation..."
+msgstr "నివేదిక సృష్టీకరణను ప్రారంభించుచున్నది..."
+
+#: ../lib/Plugins/CCpp.cpp:493
+#, c-format
+msgid "Skip debuginfo installation for package %s"
+msgstr "ప్యాకేజీ %s కొరకు డీబగ్‌సమాచార సంస్థాపనను వదిలివేయుము"
+
+#: ../lib/Plugins/KerneloopsReporter.cpp:101
+msgid "Creating and submitting a report..."
+msgstr "నివేదికను సృష్టించుచున్నది మరియు అప్పజెప్పుచున్నది..."
+
+#: ../lib/Plugins/Logger.cpp:58 ../lib/Plugins/Mailx.cpp:124
+msgid "Creating a report..."
+msgstr "నివేదికను సృష్టించుచున్నది..."
+
+#: ../lib/Plugins/RunApp.cpp:62
+msgid "Executing RunApp plugin..."
+msgstr "RunApp ప్లగిన్ నిర్వర్తించుచున్నది..."
+
+#: ../lib/Plugins/FileTransfer.cpp:52 ../lib/Plugins/FileTransfer.cpp:247
+msgid "FileTransfer: URL not specified"
+msgstr "దస్త్రబదలీకరణ: URL తెలుపబడలేదు"
+
+#: ../lib/Plugins/FileTransfer.cpp:69
+#, c-format
+msgid "Sending archive %s via %s"
+msgstr "ఆర్చివ్ %sను %s ద్వారా పంపుచున్నది"
+
+#: ../lib/Plugins/FileTransfer.cpp:121
+msgid "Creating an archive..."
+msgstr "ఆర్చివ్‌ను సృష్టించుచున్నది..."
+
+#: ../lib/Plugins/FileTransfer.cpp:176
+msgid "File Transfer: Creating a report..."
+msgstr "దస్త్ర బదిలీకరణ: నివేదికను సృష్టించుచున్నది..."
+
+#: ../lib/Plugins/FileTransfer.cpp:197 ../lib/Plugins/FileTransfer.cpp:226
+msgid "CFileTransfer::Run(): Cannot create and send an archive: "
+msgstr "CFileTransfer::Run(): ఆర్చివును సృష్టించలేదు మరియు పంపలేదు: "
+
+#: ../lib/Plugins/KerneloopsScanner.cpp:79
+msgid "Creating kernel oops crash reports..."
+msgstr "కెర్నల్ oops క్రాష్ నివేదికలను సృష్టించుచున్నది..."
+
+#: ../lib/Plugins/Mailx.cpp:110
+msgid "Sending an email..."
+msgstr "ఈమెయిల్ పంపుచున్నది..."
+
+#: ../lib/Plugins/SOSreport.cpp:90
+msgid "Executing SOSreportAction plugin..."
+msgstr "SOSreportAction ప్లగిన్ నిర్వర్తించుచున్నది..."
+
diff --git a/src/Daemon/CommLayerServer.h b/src/Daemon/CommLayerServer.h
index 7e6f8d72..0b1027ac 100644
--- a/src/Daemon/CommLayerServer.h
+++ b/src/Daemon/CommLayerServer.h
@@ -14,13 +14,12 @@ class CCommLayerServer {
/* just stubs to be called when not implemented in specific comm layer */
virtual void Crash(const std::string& progname, const std::string& uid) {}
- virtual void AnalyzeComplete(const map_crash_report_t& arg1) {}
- virtual void Error(const std::string& arg1) {}
- virtual void Update(const std::string& pMessage, uint64_t pJobID) {};
- virtual void Warning(const std::string& pMessage) {};
- virtual void JobDone(const char* pDest, uint64_t pJobID) = 0;
- virtual void JobStarted(const char* pDest, uint64_t pJobID) {};
- virtual void Warning(const std::string& pMessage, uint64_t pJobID) {};
+ virtual void JobDone(const char* pDest, const char* pUUID) = 0;
+ virtual void JobStarted(const char* pDest) {};
+
+ virtual void Error(const std::string& pMessage, const char* peer) {}
+ virtual void Update(const std::string& pMessage, const char* peer, uint64_t pJobID) {};
+ virtual void Warning(const std::string& pMessage, const char* peer, uint64_t pJobID) {};
};
#endif
diff --git a/src/Daemon/CommLayerServerDBus.cpp b/src/Daemon/CommLayerServerDBus.cpp
index c3cef3b5..c6908f5f 100644
--- a/src/Daemon/CommLayerServerDBus.cpp
+++ b/src/Daemon/CommLayerServerDBus.cpp
@@ -336,12 +336,15 @@ static inline int load_val(DBusMessageIter* iter, std::map<K,V>& val) { return
*/
/* helpers */
-static DBusMessage* new_signal_msg(const char* member)
+static DBusMessage* new_signal_msg(const char* member, const char* peer = NULL)
{
/* path, interface, member name */
DBusMessage* msg = dbus_message_new_signal(CC_DBUS_PATH, CC_DBUS_IFACE, member);
if (!msg)
die_out_of_memory();
+ /* Send unicast dbus signal if peer is known */
+ if (peer && !dbus_message_set_destination(msg, peer))
+ die_out_of_memory();
return msg;
}
static void send_flush_and_unref(DBusMessage* msg)
@@ -363,79 +366,61 @@ void CCommLayerServerDBus::Crash(const std::string& progname, const std::string&
DBUS_TYPE_STRING, &c_progname,
DBUS_TYPE_STRING, &c_uid,
DBUS_TYPE_INVALID);
+ VERB2 log("Sending signal Crash('%s','%s')", c_progname, c_uid);
send_flush_and_unref(msg);
}
-/* Notify the clients that creating a report has finished */
-void CCommLayerServerDBus::AnalyzeComplete(const map_crash_report_t& arg1)
+void CCommLayerServerDBus::JobStarted(const char* peer)
{
- DBusMessage* msg = new_signal_msg("AnalyzeComplete");
- DBusMessageIter out_iter;
- dbus_message_iter_init_append(msg, &out_iter);
- store_val(&out_iter, arg1);
- send_flush_and_unref(msg);
-}
-
-void CCommLayerServerDBus::JobDone(const char* pDest, uint64_t job_id)
-{
- DBusMessage* msg = new_signal_msg("JobDone");
- /* TODO: if (!dbus_message_set_destination(msg, pDest) die_out_of_memory(); */
+ DBusMessage* msg = new_signal_msg("JobStarted", peer);
+ uint64_t nJobID = uint64_t(pthread_self());
dbus_message_append_args(msg,
- DBUS_TYPE_STRING, &pDest, /* TODO: redundant parameter, remove from API */
- DBUS_TYPE_UINT64, &job_id,
+ DBUS_TYPE_STRING, &peer, /* TODO: redundant parameter, remove from API */
+ DBUS_TYPE_UINT64, &nJobID, /* TODO: redundant parameter, remove from API */
DBUS_TYPE_INVALID);
+ VERB2 log("Sending signal JobStarted('%s',%llx)", peer, (unsigned long long)nJobID);
send_flush_and_unref(msg);
}
-void CCommLayerServerDBus::JobStarted(const char* pDest, uint64_t job_id)
+void CCommLayerServerDBus::JobDone(const char* peer, const char* pUUID)
{
- DBusMessage* msg = new_signal_msg("JobStarted");
- /* TODO: if (!dbus_message_set_destination(msg, pDest) die_out_of_memory(); */
+ DBusMessage* msg = new_signal_msg("JobDone", peer);
dbus_message_append_args(msg,
- DBUS_TYPE_STRING, &pDest, /* TODO: redundant parameter, remove from API */
- DBUS_TYPE_UINT64, &job_id,
+ DBUS_TYPE_STRING, &peer, /* TODO: redundant parameter, remove from API */
+ DBUS_TYPE_STRING, &pUUID, /* TODO: redundant parameter, remove from API */
DBUS_TYPE_INVALID);
+ VERB2 log("Sending signal JobDone('%s','%s')", peer, pUUID);
send_flush_and_unref(msg);
}
-void CCommLayerServerDBus::Error(const std::string& arg1)
+void CCommLayerServerDBus::Error(const std::string& pMessage, const char* peer)
{
- DBusMessage* msg = new_signal_msg("Error");
- const char* c_arg1 = arg1.c_str();
- dbus_message_append_args(msg,
- DBUS_TYPE_STRING, &c_arg1,
- DBUS_TYPE_INVALID);
- send_flush_and_unref(msg);
-}
-
-void CCommLayerServerDBus::Update(const std::string& pMessage, uint64_t job_id)
-{
- DBusMessage* msg = new_signal_msg("Update");
+ DBusMessage* msg = new_signal_msg("Error", peer);
const char* c_message = pMessage.c_str();
dbus_message_append_args(msg,
DBUS_TYPE_STRING, &c_message,
- DBUS_TYPE_UINT64, &job_id,
DBUS_TYPE_INVALID);
send_flush_and_unref(msg);
}
-void CCommLayerServerDBus::Warning(const std::string& pMessage)
+void CCommLayerServerDBus::Update(const std::string& pMessage, const char* peer, uint64_t job_id)
{
- DBusMessage* msg = new_signal_msg("Warning");
+ DBusMessage* msg = new_signal_msg("Update", peer);
const char* c_message = pMessage.c_str();
dbus_message_append_args(msg,
DBUS_TYPE_STRING, &c_message,
+ DBUS_TYPE_UINT64, &job_id, /* TODO: redundant parameter, remove from API */
DBUS_TYPE_INVALID);
send_flush_and_unref(msg);
}
-void CCommLayerServerDBus::Warning(const std::string& pMessage, uint64_t job_id)
+void CCommLayerServerDBus::Warning(const std::string& pMessage, const char* peer, uint64_t job_id)
{
- DBusMessage* msg = new_signal_msg("Warning");
+ DBusMessage* msg = new_signal_msg("Warning", peer);
const char* c_message = pMessage.c_str();
dbus_message_append_args(msg,
DBUS_TYPE_STRING, &c_message,
- DBUS_TYPE_UINT64, &job_id,
+ DBUS_TYPE_UINT64, &job_id, /* TODO: redundant parameter, remove from API */
DBUS_TYPE_INVALID);
send_flush_and_unref(msg);
}
@@ -456,7 +441,7 @@ static long get_remote_uid(DBusMessage* call, const char** ppSender = NULL)
if (dbus_error_is_set(&err))
{
dbus_error_free(&err);
- error_msg("can't determine remore uid, assuming 0");
+ error_msg("Can't determine remote uid, assuming 0");
return 0;
}
return uid;
@@ -495,17 +480,47 @@ static int handle_CreateReport(DBusMessage* call, DBusMessage* reply)
const char* sender;
long unix_uid = get_remote_uid(call, &sender);
- VERB1 log("got %s('%s') call from uid %ld", "CreateReport", pUUID, unix_uid);
- uint64_t argout1 = CreateReport_t(pUUID, to_string(unix_uid).c_str(), sender);
+ VERB1 log("got %s('%s') call from sender '%s' uid %ld", "CreateReport", pUUID, sender, unix_uid);
+ if (CreateReportThread(pUUID, to_string(unix_uid).c_str(), sender) != 0)
+ return -1; /* can't create thread (err msg is already logged) */
dbus_message_append_args(reply,
- DBUS_TYPE_UINT64, &argout1,
+ DBUS_TYPE_STRING, &pUUID, /* redundant, eliminate from API */
DBUS_TYPE_INVALID);
send_flush_and_unref(reply);
return 0;
}
+static int handle_GetJobResult(DBusMessage* call, DBusMessage* reply)
+{
+ const char* pUUID;
+ DBusMessageIter in_iter;
+ if (!dbus_message_iter_init(call, &in_iter))
+ {
+ error_msg("dbus call %s: no parameters", "GetJobResult");
+ return -1;
+ }
+ int r = load_val(&in_iter, pUUID);
+ if (r != LAST_FIELD)
+ {
+ if (r == MORE_FIELDS)
+ error_msg("dbus call %s: extra parameters", "GetJobResult");
+ return -1;
+ }
+
+ long unix_uid = get_remote_uid(call);
+ VERB1 log("got %s('%s') call from uid %ld", "GetJobResult", pUUID, unix_uid);
+ map_crash_report_t report = GetJobResult(pUUID, to_string(unix_uid).c_str());
+
+ DBusMessageIter out_iter;
+ dbus_message_iter_init_append(reply, &out_iter);
+ store_val(&out_iter, report);
+
+ send_flush_and_unref(reply);
+ return 0;
+}
+
static int handle_Report(DBusMessage* call, DBusMessage* reply)
{
map_crash_report_t argin1;
@@ -577,35 +592,6 @@ static int handle_DeleteDebugDump(DBusMessage* call, DBusMessage* reply)
return 0;
}
-static int handle_GetJobResult(DBusMessage* call, DBusMessage* reply)
-{
- uint64_t job_id;
- DBusMessageIter in_iter;
- if (!dbus_message_iter_init(call, &in_iter))
- {
- error_msg("dbus call %s: no parameters", "GetJobResult");
- return -1;
- }
- int r = load_val(&in_iter, job_id);
- if (r != LAST_FIELD)
- {
- if (r == MORE_FIELDS)
- error_msg("dbus call %s: extra parameters", "GetJobResult");
- return -1;
- }
-
- long unix_uid = get_remote_uid(call);
- VERB1 log("got %s(%llx) call from uid %ld", "GetJobResult", (long long)job_id, unix_uid);
- map_crash_report_t report = GetJobResult(job_id, to_string(unix_uid));
-
- DBusMessageIter out_iter;
- dbus_message_iter_init_append(reply, &out_iter);
- store_val(&out_iter, report);
-
- send_flush_and_unref(reply);
- return 0;
-}
-
static int handle_GetPluginsInfo(DBusMessage* call, DBusMessage* reply)
{
vector_map_string_t plugins_info = g_pPluginManager->GetPluginsInfo();
@@ -885,6 +871,8 @@ static DBusHandlerResult message_received(DBusConnection *conn, DBusMessage *msg
const char* member = dbus_message_get_member(msg);
log("%s(method:'%s')", __func__, member);
+ set_client_name(dbus_message_get_sender(msg));
+
DBusMessage* reply = dbus_message_new_method_return(msg);
int r = -1;
if (strcmp(member, "GetCrashInfos") == 0)
@@ -931,6 +919,8 @@ static DBusHandlerResult message_received(DBusConnection *conn, DBusMessage *msg
}
}
+ set_client_name(NULL);
+
return DBUS_HANDLER_RESULT_HANDLED;
}
/* Callback: "DBusObjectPathVTable is unregistered (or its connection is freed)" */
diff --git a/src/Daemon/CommLayerServerDBus.h b/src/Daemon/CommLayerServerDBus.h
index 6ac702d0..3a8822de 100644
--- a/src/Daemon/CommLayerServerDBus.h
+++ b/src/Daemon/CommLayerServerDBus.h
@@ -12,14 +12,12 @@ class CCommLayerServerDBus
/* DBus signal senders */
virtual void Crash(const std::string& progname, const std::string& uid);
- virtual void AnalyzeComplete(const map_crash_report_t& arg1);
- virtual void Error(const std::string& arg1);
- virtual void Update(const std::string& pMessage, uint64_t pJobID);
- //the job id should be enough in jobdone
- virtual void JobDone(const char* pDest, uint64_t pJobID);
- virtual void JobStarted(const char* pDest, uint64_t pJobID);
- virtual void Warning(const std::string& pMessage);
- virtual void Warning(const std::string& pMessage, uint64_t pJobID);
+ virtual void JobStarted(const char* pDest);
+ virtual void JobDone(const char* pDest, const char* pUUID);
+
+ virtual void Error(const std::string& pMessage, const char* peer);
+ virtual void Update(const std::string& pMessage, const char* peer, uint64_t pJobID);
+ virtual void Warning(const std::string& pMessage, const char* peer, uint64_t pJobID);
};
#endif
diff --git a/src/Daemon/CommLayerServerSocket.cpp b/src/Daemon/CommLayerServerSocket.cpp
index c88e0f3f..8f1fd4fe 100644
--- a/src/Daemon/CommLayerServerSocket.cpp
+++ b/src/Daemon/CommLayerServerSocket.cpp
@@ -148,7 +148,7 @@ void CCommLayerServerSocket::ProcessMessage(const std::string& pMessage, GIOChan
{
// std::string UUID = pMessage.substr(sizeof(MESSAGE_CREATE_REPORT) - 1);
// map_crash_report_t crashReport = CreateReport(UUID, UID);
-//use CreateReport_t instead of CreateReport?
+//use CreateReportThread instead of CreateReport?
// std::string message = MESSAGE_CREATE_REPORT + crash_report_to_string(crashReport);
// Send(message, pSource);
}
@@ -220,7 +220,7 @@ vector_crash_infos_t CCommLayerServerSocket::GetCrashInfos(const std::string &pS
return crashInfos;
}
-//reimplement as CreateReport_t(...)?
+//reimplement as CreateReportThread(...)?
//map_crash_report_t CCommLayerServerSocket::CreateReport(const std::string &pUUID,const std::string &pSender)
//{
// map_crash_report_t crashReport;
@@ -246,12 +246,7 @@ void CCommLayerServerSocket::Crash(const std::string& arg1)
//Send("(CRASH)New Crash Detected: " + arg1);
}
-void CCommLayerServerSocket::AnalyzeComplete(const map_crash_report_t& arg1)
-{
- //Send("(ANALYZE_COMPLETE)Analyze Complete.");
-}
-
-void CCommLayerServerSocket::Error(const std::string& arg1)
+void CCommLayerServerSocket::Error(const std::string& arg1, const char* peer)
{
//Send("(ERROR)Error: " + arg1);
}
diff --git a/src/Daemon/CommLayerServerSocket.h b/src/Daemon/CommLayerServerSocket.h
index bf5b2ff2..0ee47014 100644
--- a/src/Daemon/CommLayerServerSocket.h
+++ b/src/Daemon/CommLayerServerSocket.h
@@ -31,7 +31,7 @@ class CCommLayerServerSocket : public CCommLayerServer
virtual bool DeleteDebugDump(const std::string& pUUID, const std::string& pSender);
virtual void Crash(const std::string& arg1);
- virtual void AnalyzeComplete(const map_crash_report_t& arg1);
- virtual void Error(const std::string& arg1);
- virtual void JobStarted(const char* pDest, uint64_t pJobID) {};
+ virtual void JobStarted(const char* pDest) {};
+
+ virtual void Error(const std::string& arg1, const char* peer);
};
diff --git a/src/Daemon/CrashWatcher.cpp b/src/Daemon/CrashWatcher.cpp
index 06afabda..6c4d6545 100644
--- a/src/Daemon/CrashWatcher.cpp
+++ b/src/Daemon/CrashWatcher.cpp
@@ -24,19 +24,18 @@
#include "ABRTException.h"
#include "CrashWatcher.h"
-void CCrashWatcher::Status(const std::string& pMessage, uint64_t pJobID)
+void CCrashWatcher::Status(const std::string& pMessage, const char* peer, uint64_t pJobID)
{
- log("Update: %s", pMessage.c_str());
- //FIXME: send updates only to job owner
+ VERB1 log("Update('%s'): %s", peer, pMessage.c_str());
if (g_pCommLayer != NULL)
- g_pCommLayer->Update(pMessage, pJobID);
+ g_pCommLayer->Update(pMessage, peer, pJobID);
}
-void CCrashWatcher::Warning(const std::string& pMessage, uint64_t pJobID)
+void CCrashWatcher::Warning(const std::string& pMessage, const char* peer, uint64_t pJobID)
{
- log("Warning: %s", pMessage.c_str());
+ VERB1 log("Warning('%s'): %s", peer, pMessage.c_str());
if (g_pCommLayer != NULL)
- g_pCommLayer->Warning(pMessage, pJobID);
+ g_pCommLayer->Warning(pMessage, peer, pJobID);
}
CCrashWatcher::CCrashWatcher()
@@ -102,97 +101,129 @@ vector_crash_infos_t GetCrashInfos(const std::string &pUID)
return retval;
}
+/*
+ * "GetJobResult" is a bit of a misnomer.
+ * It actually _creates_ a_ report_ and returns the result.
+ * It is called in two cases:
+ * (1) by CreateReport dbus call -> CreateReportThread(), in the thread
+ * (2) by GetJobResult dbus call
+ * In the second case, it finishes quickly, because previous
+ * CreateReport dbus call already did all the processing, and we just retrieve
+ * the result from dump directory, which is fast.
+ */
+map_crash_report_t GetJobResult(const char* pUUID, const char* pUID)
+{
+ map_crash_info_t crashReport;
+
+ /* FIXME: starting from here, any shared data must be protected with a mutex.
+ * For example, CreateCrashReport does:
+ * g_pPluginManager->GetDatabase(g_settings_sDatabase);
+ * which is unsafe wrt concurrent updates to g_pPluginManager state.
+ */
+ mw_result_t res = CreateCrashReport(pUUID, pUID, crashReport);
+ switch (res)
+ {
+ case MW_OK:
+ break;
+ case MW_IN_DB_ERROR:
+ warn_client(std::string("Did not find crash with UUID ") + pUUID + " in database");
+ break;
+ case MW_PLUGIN_ERROR:
+ warn_client("Particular analyzer plugin isn't loaded or there is an error within plugin(s)");
+ break;
+ case MW_CORRUPTED:
+ case MW_FILE_ERROR:
+ default:
+ warn_client(std::string("Corrupted crash with UUID ") + pUUID + ", deleting");
+ std::string debugDumpDir = DeleteCrashInfo(pUUID, pUID);
+ DeleteDebugDumpDir(debugDumpDir);
+ break;
+ }
+ return crashReport;
+}
+
typedef struct thread_data_t {
pthread_t thread_id;
char* UUID;
char* UID;
- char* dest;
+ char* peer;
} thread_data_t;
-static void *create_report(void *arg)
+static void* create_report(void* arg)
{
thread_data_t *thread_data = (thread_data_t *) arg;
- map_crash_info_t crashReport;
- g_pCommLayer->JobStarted(thread_data->dest, uint64_t(thread_data->thread_id));
+ g_pCommLayer->JobStarted(thread_data->peer);
+
+ /* Client name is per-thread, need to set it */
+ set_client_name(thread_data->peer);
- log("Creating report...");
try
{
- mw_result_t res;
- res = CreateCrashReport(thread_data->UUID, thread_data->UID, crashReport);
- switch (res)
- {
- case MW_OK:
- break;
- case MW_IN_DB_ERROR:
- warn_client(std::string("Did not find crash with UUID ") + thread_data->UUID + " in database");
- break;
- case MW_PLUGIN_ERROR:
- warn_client(std::string("Particular analyzer plugin isn't loaded or there is an error within plugin(s)"));
- break;
- case MW_CORRUPTED:
- case MW_FILE_ERROR:
- default:
- warn_client(std::string("Corrupted crash with UUID ") + thread_data->UUID + ", deleting");
- std::string debugDumpDir = DeleteCrashInfo(thread_data->UUID, thread_data->UID);
- DeleteDebugDumpDir(debugDumpDir);
- break;
- }
- /* only one thread can write */
- pthread_mutex_lock(&g_pJobsMutex);
- g_pending_jobs[std::string(thread_data->UID)][uint64_t(thread_data->thread_id)] = crashReport;
- pthread_mutex_unlock(&g_pJobsMutex);
- g_pCommLayer->JobDone(thread_data->dest, uint64_t(thread_data->thread_id));
+ /* "GetJobResult" is a bit of a misnomer */
+ log("Creating report...");
+ map_crash_info_t crashReport = GetJobResult(thread_data->UUID, thread_data->UID);
+ g_pCommLayer->JobDone(thread_data->peer, thread_data->UUID);
}
catch (CABRTException& e)
{
if (e.type() == EXCEP_FATAL)
{
+ set_client_name(NULL);
/* free strduped strings */
free(thread_data->UUID);
free(thread_data->UID);
- free(thread_data->dest);
+ free(thread_data->peer);
free(thread_data);
throw e;
}
warn_client(e.what());
}
+ set_client_name(NULL);
+
/* free strduped strings */
free(thread_data->UUID);
free(thread_data->UID);
- free(thread_data->dest);
+ free(thread_data->peer);
free(thread_data);
/* Bogus value. pthreads require us to return void* */
return NULL;
}
-uint64_t CreateReport_t(const char* pUUID, const char* pUID, const char* pSender)
+int CreateReportThread(const char* pUUID, const char* pUID, const char* pSender)
{
thread_data_t *thread_data = (thread_data_t *)xzalloc(sizeof(thread_data_t));
thread_data->UUID = xstrdup(pUUID);
thread_data->UID = xstrdup(pUID);
- thread_data->dest = xstrdup(pSender);
- if (pthread_create(&thread_data->thread_id, NULL, create_report, (void *)thread_data) != 0)
+ thread_data->peer = xstrdup(pSender);
+//TODO: do we need this?
+//pthread_attr_t attr;
+//pthread_attr_init(&attr);
+//pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
+ int r = pthread_create(&thread_data->thread_id, NULL, create_report, thread_data);
+ if (r != 0)
{
free(thread_data->UUID);
free(thread_data->UID);
- free(thread_data->dest);
+ free(thread_data->peer);
free(thread_data);
/* The only reason this may happen is system-wide resource starvation,
- * or ulimit is exceeded (someoune floods us with CreateReport() dbus calls?)
+ * or ulimit is exceeded (someone floods us with CreateReport() dbus calls?)
*/
- error_msg("cannot create thread");
- return 0;
+ error_msg("Can't create thread");
+ }
+ else
+ {
+ VERB3 log("Thread %llx created", (unsigned long long)thread_data->thread_id);
}
- return uint64_t(thread_data->thread_id);
+//pthread_attr_destroy(&attr);
+ return r;
}
bool DeleteDebugDump(const std::string& pUUID, const std::string& pUID)
{
try
{
- std::string debugDumpDir;
- debugDumpDir = DeleteCrashInfo(pUUID, pUID);
+ std::string debugDumpDir = DeleteCrashInfo(pUUID, pUID);
DeleteDebugDumpDir(debugDumpDir);
}
catch (CABRTException& e)
@@ -207,12 +238,3 @@ bool DeleteDebugDump(const std::string& pUUID, const std::string& pUID)
}
return true;
}
-
-map_crash_report_t GetJobResult(uint64_t pJobID, const std::string& pSender)
-{
- /* FIXME: once we return the result, we should remove it from map to free memory
- - use some TTL to clean the memory even if client won't get it
- - if we don't find it in the cache we should try to ask MW to get it again??
- */
- return g_pending_jobs[pSender][pJobID];
-}
diff --git a/src/Daemon/CrashWatcher.h b/src/Daemon/CrashWatcher.h
index f35e1001..00bb4d51 100644
--- a/src/Daemon/CrashWatcher.h
+++ b/src/Daemon/CrashWatcher.h
@@ -44,13 +44,13 @@ class CCrashWatcher
public:
/* Observer methods */
- virtual void Status(const std::string& pMessage, uint64_t pJobID=0);
- virtual void Warning(const std::string& pMessage, uint64_t pJobID=0);
+ virtual void Status(const std::string& pMessage, const char* peer, uint64_t pJobID);
+ virtual void Warning(const std::string& pMessage, const char* peer, uint64_t pJobID);
};
vector_crash_infos_t GetCrashInfos(const std::string &pUID);
-uint64_t CreateReport_t(const char* pUUID, const char* pUID, const char* pSender);
+int CreateReportThread(const char* pUUID, const char* pUID, const char* pSender);
+map_crash_report_t GetJobResult(const char* pUUID, const char* pUID);
bool DeleteDebugDump(const std::string& pUUID, const std::string& pUID);
-map_crash_report_t GetJobResult(uint64_t pJobID, const std::string& pSender);
#endif /*CRASHWATCHER_H_*/
diff --git a/src/Daemon/Daemon.cpp b/src/Daemon/Daemon.cpp
index fc28e8b3..a7c97372 100644
--- a/src/Daemon/Daemon.cpp
+++ b/src/Daemon/Daemon.cpp
@@ -51,9 +51,12 @@
* - GetCrashInfos(): returns a vector_crash_infos_t (vector_map_vector_string_t)
* of crashes for given uid
* v[N]["executable"/"uid"/"kernel"/"backtrace"][N] = "contents"
- * - CreateReport(UUID): starts creating a report for /var/cache/abrt/DIR with this UUID
- * Returns job id (uint64)
- * - GetJobResult(job_id): returns map_crash_report_t (map_vector_string_t)
+ * - CreateReport(UUID): starts creating a report for /var/cache/abrt/DIR with this UUID.
+ * Returns job id (uint64).
+ * Emits JobStarted(client_dbus_ID,job_id) dbus signal.
+ * After it returns, when report creation thread has finished,
+ * JobDone(client_dbus_ID,UUID) dbus signal is emitted.
+ * - GetJobResult(UUID): returns map_crash_report_t (map_vector_string_t)
* - Report(map_crash_report_t (map_vector_string_t)):
* "Please report this crash": calls Report() of all registered reporter plugins
* Returns report_status_t (map_vector_string_t) - the status of each call
@@ -67,7 +70,20 @@
* - SetSettings(map_abrt_settings_t): returns void
*
* DBus signals we emit:
- * - ...
+ * - Crash(progname,uid) - a new crash occurred (new /var/cache/abrt/DIR is found)
+ * - JobStarted(client_dbus_ID,job_id) - see CreateReport above.
+ * Sent as unicast to the client which did CreateReport.
+ * - JobDone(client_dbus_ID,UUID) - see CreateReport above.
+ * Sent as unicast to the client which did CreateReport.
+ * - Error(msg)
+ * - Warning(msg[,job_id])
+ * - Update(msg,job_id)
+ *
+ * TODO:
+ * - Error/Warning/Update dbus signals must be unicast too
+ * - API does not really need JobStarted dbus signal at all, and JobDone signal
+ * does not need to pass any parameters - out clients never sent multiple
+ * CreateReport's.
*/
@@ -98,12 +114,7 @@ static GMainLoop* g_pMainloop;
int g_verbose;
CCommLayerServer* g_pCommLayer;
-/*
- * Map to cache the results from CreateReport_t
- * <UID, <job_id, result>>
- */
-std::map<const std::string, std::map<uint64_t, map_crash_report_t> > g_pending_jobs;
-/* mutex to protect g_pending_jobs */
+
pthread_mutex_t g_pJobsMutex;
@@ -503,7 +514,8 @@ static gboolean handle_event_cb(GIOChannel *gio, GIOCondition condition, gpointe
/* ignore lock files and such */
if (!(event->mask & IN_ISDIR))
{
- VERB3 log("File '%s' creation detected, ignoring", name);
+ // Happens all the time during normal run
+ //VERB3 log("File '%s' creation detected, ignoring", name);
continue;
}
diff --git a/src/Daemon/Daemon.h b/src/Daemon/Daemon.h
index 8fcce717..e03d983a 100644
--- a/src/Daemon/Daemon.h
+++ b/src/Daemon/Daemon.h
@@ -49,9 +49,6 @@ extern CPluginManager* g_pPluginManager;
*/
extern set_string_t g_setBlackList;
-/* Map <UID, <job_id, result>> to cache the results from CreateReport_t() */
-extern std::map<const std::string, std::map<uint64_t, map_crash_report_t> > g_pending_jobs;
-/* Mutex to protect g_pending_jobs */
extern pthread_mutex_t g_pJobsMutex;
#endif
diff --git a/src/Daemon/MiddleWare.cpp b/src/Daemon/MiddleWare.cpp
index e6c9187c..4f499d68 100644
--- a/src/Daemon/MiddleWare.cpp
+++ b/src/Daemon/MiddleWare.cpp
@@ -173,33 +173,42 @@ mw_result_t CreateCrashReport(const std::string& pUUID,
const std::string& pUID,
map_crash_report_t& pCrashReport)
{
- CDatabase* database = g_pPluginManager->GetDatabase(g_settings_sDatabase);
- database_row_t row;
- database->Connect();
- row = database->GetUUIDData(pUUID, pUID);
- database->DisConnect();
- CDebugDump dd;
+ VERB2 log("CreateCrashReport('%s','%',result)", pUUID.c_str(), pUID.c_str());
+ database_row_t row;
+ if (pUUID != "")
+ {
+ CDatabase* database = g_pPluginManager->GetDatabase(g_settings_sDatabase);
+ database->Connect();
+ row = database->GetUUIDData(pUUID, pUID);
+ database->DisConnect();
+ }
if (pUUID == "" || row.m_sUUID != pUUID)
{
warn_client("CreateCrashReport(): UUID '"+pUUID+"' is not in database.");
return MW_IN_DB_ERROR;
}
+ CDebugDump dd;
try
{
std::string analyzer;
std::string gUUID;
+ VERB3 log(" LoadText(FILENAME_ANALYZER,'%s')", row.m_sDebugDumpDir.c_str());
dd.Open(row.m_sDebugDumpDir);
dd.LoadText(FILENAME_ANALYZER, analyzer);
dd.Close();
+ VERB3 log(" CreateReport('%s')", analyzer.c_str());
CreateReport(analyzer, row.m_sDebugDumpDir);
gUUID = GetGlobalUUID(analyzer, row.m_sDebugDumpDir);
+ VERB3 log(" GetGlobalUUID:'%s'", gUUID.c_str());
+ VERB3 log(" RunAnalyzerActions");
RunAnalyzerActions(analyzer, row.m_sDebugDumpDir);
+ VERB3 log(" DebugDumpToCrashReport");
DebugDumpToCrashReport(row.m_sDebugDumpDir, pCrashReport);
add_crash_data_to_crash_report(pCrashReport, CD_UUID, CD_TXT, CD_ISNOTEDITABLE, gUUID);
@@ -245,7 +254,6 @@ void RunAction(const std::string& pActionDir,
warn_client("RunAction(): " + e.what());
update_client("Execution of '"+pPluginName+"' was not successful: " + e.what());
}
-
}
void RunActionsAndReporters(const std::string& pDebugDumpDir)
diff --git a/src/Gui/ABRTPlugin.py b/src/Gui/ABRTPlugin.py
index da9c9e57..4a94e670 100644
--- a/src/Gui/ABRTPlugin.py
+++ b/src/Gui/ABRTPlugin.py
@@ -57,4 +57,7 @@ class PluginInfo():
def __str__(self):
return self.Name
+
+ def __getitem__(self, item):
+ return self.__dict__[item]
diff --git a/src/Gui/CCDBusBackend.py b/src/Gui/CCDBusBackend.py
index b0230bd6..01e51962 100644
--- a/src/Gui/CCDBusBackend.py
+++ b/src/Gui/CCDBusBackend.py
@@ -149,6 +149,7 @@ class DBusManager(gobject.GObject):
# new crash notify
self.proxy.connect_to_signal("Crash",self.crash_cb,dbus_interface=CC_IFACE)
# BT extracting complete
+#TODO: remove, abrtd does not emit AnalyzeComplete
self.acconnection = self.proxy.connect_to_signal("AnalyzeComplete",self.analyze_complete_cb,dbus_interface=CC_IFACE)
# Catch Errors
self.acconnection = self.proxy.connect_to_signal("Error",self.error_handler_cb,dbus_interface=CC_IFACE)
@@ -171,10 +172,10 @@ class DBusManager(gobject.GObject):
print "Started our job: %s" % job_id
self.addJob(job_id)
- def jobdone_cb(self, dest, job_id):
+ def jobdone_cb(self, dest, uuid):
if self.uniq_name == dest:
- print "Our job: %s is done." % job_id
- dump = self.cc.GetJobResult(job_id)
+ print "Our job for UUID %s is done." % uuid
+ dump = self.cc.GetJobResult(uuid)
if dump:
self.emit("analyze-complete", dump)
else:
@@ -219,7 +220,7 @@ class DBusManager(gobject.GObject):
#for i in settings.keys():
# print i
return settings
-
+
def registerPlugin(self, plugin_name):
return self.cc.RegisterPlugin(plugin_name)
@@ -229,3 +230,8 @@ class DBusManager(gobject.GObject):
def setPluginSettings(self, plugin_name, plugin_settings):
return self.cc.SetPluginSettings(plugin_name, plugin_settings)
+ def getSettings(self):
+ return self.cc.GetSettings()
+
+ def setSettings(self, settings):
+ return self.cc.SetSettings(settings)
diff --git a/src/Gui/CCMainWindow.py b/src/Gui/CCMainWindow.py
index e7472562..4fe07751 100644
--- a/src/Gui/CCMainWindow.py
+++ b/src/Gui/CCMainWindow.py
@@ -11,6 +11,7 @@ import CCDBusBackend
from CC_gui_functions import *
from CCDumpList import getDumpList, DumpList
from CCReporterDialog import ReporterDialog
+from PluginsSettingsDialog import PluginsSettingsDialog
from SettingsDialog import SettingsDialog
from CCReport import Report
import ABRTExceptions
@@ -108,6 +109,7 @@ class MainWindow():
self.wTree.get_widget("miQuit").connect("activate", self.on_bQuit_clicked)
self.wTree.get_widget("miAbout").connect("activate", self.on_miAbout_clicked)
self.wTree.get_widget("miPreferences").connect("activate", self.on_miPreferences_clicked)
+ self.wTree.get_widget("miSettings").connect("activate", self.on_miSettings_clicked)
# connect handlers for daemon signals
self.ccdaemon.connect("crash", self.on_data_changed_cb, None)
self.ccdaemon.connect("analyze-complete", self.on_analyze_complete_cb, self.pBarWindow)
@@ -133,9 +135,15 @@ class MainWindow():
dialog.hide()
def on_miPreferences_clicked(self, widget):
- dialog = SettingsDialog(self.window,self.ccdaemon)
+ dialog = PluginsSettingsDialog(self.window,self.ccdaemon)
dialog.hydrate()
dialog.show()
+
+ def on_miSettings_clicked(self, widget):
+ dialog = SettingsDialog(self.window, self.ccdaemon)
+ dialog.hydrate()
+ dialog.show()
+ self.ccdaemon.getSettings()
def warning_cb(self, daemon, message=None):
# try to hide the progressbar, we dont really care if it was visible ..
diff --git a/src/Gui/Makefile.am b/src/Gui/Makefile.am
index 6435c1f0..bacfaf47 100644
--- a/src/Gui/Makefile.am
+++ b/src/Gui/Makefile.am
@@ -5,7 +5,8 @@ bin_SCRIPTS = abrt-gui
PYTHON_FILES = CCDBusBackend.py CCDumpList.py CCDump.py CC_gui_functions.py \
CCReporterDialog.py CCReport.py abrt_utils.py \
CCMainWindow.py CellRenderers.py ABRTExceptions.py \
- SettingsDialog.py ABRTPlugin.py PluginList.py PluginSettingsUI.py
+ SettingsDialog.py ABRTPlugin.py PluginList.py PluginSettingsUI.py \
+ PluginsSettingsDialog.py
GLADE_FILES = ccgui.glade report.glade settings.GtkBuilder dialogs.GtkBuilder
diff --git a/src/Gui/PluginList.py b/src/Gui/PluginList.py
index 591096bd..76bdf81e 100644
--- a/src/Gui/PluginList.py
+++ b/src/Gui/PluginList.py
@@ -33,6 +33,14 @@ class PluginInfoList(list):
return
else:
print "db == None!"
+
+
+ def getEnabledPlugins(self):
+ return [x for x in self if x["Enabled"] == 'yes']
+
+ def getActionPlugins(self):
+ return [x for x in self if x["Enabled"] == 'yes' and x["Type"] == 'Action']
+
__PFList = None
diff --git a/src/Gui/PluginsSettingsDialog.py b/src/Gui/PluginsSettingsDialog.py
new file mode 100644
index 00000000..b56f9d7c
--- /dev/null
+++ b/src/Gui/PluginsSettingsDialog.py
@@ -0,0 +1,161 @@
+import sys
+import gtk
+from PluginList import getPluginInfoList, PluginInfoList
+from CC_gui_functions import *
+from PluginSettingsUI import PluginSettingsUI
+from ABRTPlugin import PluginSettings, PluginInfo
+from abrt_utils import _
+
+class PluginsSettingsDialog:
+ def __init__(self, parent, daemon):
+ #print "Settings dialog init"
+ self.ccdaemon = daemon
+ self.builder = gtk.Builder()
+ builderfile = "%s%ssettings.GtkBuilder" % (sys.path[0],"/")
+ #print builderfile
+ try:
+ self.builder.add_from_file(builderfile)
+ except Exception, e:
+ print e
+ self.window = self.builder.get_object("wPluginsSettings")
+ if not self.window:
+ raise Exception(_("Can't load gui description for SettingsDialog!"))
+ #self.window.set_parent(parent)
+
+ self.pluginlist = self.builder.get_object("tvSettings")
+ # cell_text, toggle_active, toggle_visible, group_name_visible, color, plugin
+ self.pluginsListStore = gtk.TreeStore(str, bool, bool, bool, str, object)
+ # set filter
+ self.modelfilter = self.pluginsListStore.filter_new()
+ self.modelfilter.set_visible_func(self.filter_plugins, None)
+ self.pluginlist.set_model(self.modelfilter)
+ # ===============================================
+ columns = [None]*1
+ columns[0] = gtk.TreeViewColumn(_("Name"))
+
+ # create list
+ for column in columns:
+ n = self.pluginlist.append_column(column)
+ column.cell = gtk.CellRendererText()
+ column.gray_background = gtk.CellRendererText()
+ column.pack_start(column.cell, True)
+ column.pack_start(column.gray_background, True)
+ column.set_attributes(column.cell, markup=(n-1), visible=2)
+ column.set_attributes(column.gray_background, visible=3, cell_background=4)
+ column.set_resizable(True)
+
+ # toggle
+ group_name_renderer = gtk.CellRendererText()
+ toggle_renderer = gtk.CellRendererToggle()
+ toggle_renderer.set_property('activatable', True)
+ toggle_renderer.connect( 'toggled', self.on_enabled_toggled, self.pluginsListStore )
+ column = gtk.TreeViewColumn(_('Enabled'))
+ column.pack_start(toggle_renderer, True)
+ column.pack_start(group_name_renderer, True)
+ column.add_attribute( toggle_renderer, "active", 1)
+ column.add_attribute( toggle_renderer, "visible", 2)
+ column.add_attribute( group_name_renderer, "visible", 3)
+ column.add_attribute( group_name_renderer, "markup", 0)
+ column.add_attribute( group_name_renderer, "cell_background", 4)
+ self.pluginlist.insert_column(column, 0)
+
+ #connect signals
+ self.pluginlist.connect("cursor-changed", self.on_tvDumps_cursor_changed)
+ self.builder.get_object("bConfigurePlugin").connect("clicked", self.on_bConfigurePlugin_clicked, self.pluginlist)
+ self.builder.get_object("bClose").connect("clicked", self.on_bClose_clicked)
+ self.builder.get_object("bConfigurePlugin").set_sensitive(False)
+
+ def on_enabled_toggled(self,cell, path, model):
+ plugin = model[path][model.get_n_columns()-1]
+ if plugin:
+ if model[path][1]:
+ #print "self.ccdaemon.UnRegisterPlugin(%s)" % (plugin.getName())
+ self.ccdaemon.unRegisterPlugin(plugin.getName())
+ # FIXME: create class plugin and move this into method Plugin.Enable()
+ plugin.Enabled = "no"
+ plugin.Settings = None
+ else:
+ #print "self.ccdaemon.RegisterPlugin(%s)" % (model[path][model.get_n_columns()-1])
+ self.ccdaemon.registerPlugin(plugin.getName())
+ # FIXME: create class plugin and move this into method Plugin.Enable()
+ plugin.Enabled = "yes"
+ plugin.Settings = PluginSettings(self.ccdaemon.getPluginSettings(plugin.getName()))
+ model[path][1] = not model[path][1]
+
+ def filter_plugins(self, model, miter, data):
+ return True
+ def hydrate(self):
+ #print "settings hydrate"
+ self.pluginsListStore.clear()
+ try:
+ pluginlist = getPluginInfoList(self.ccdaemon, refresh=True)
+ except Exception, e:
+ print e
+ #gui_error_message("Error while loading plugins info, please check if abrt daemon is running\n %s" % e)
+ 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])
+ plugin_rows[plugin_type] = it
+ for entry in pluginlist:
+ n = self.pluginsListStore.append(plugin_rows[entry.getType()],["<b>%s</b>\n%s" % (entry.getName(), entry.Description), entry.Enabled == "yes", 1, 0, "white", entry])
+ self.pluginlist.expand_all()
+
+ def dehydrate(self):
+ # we have nothing to save, plugin's does the work
+ pass
+
+ def show(self):
+ self.window.show()
+ #if result == gtk.RESPONSE_APPLY:
+ # self.dehydrate()
+ #self.window.destroy()
+ #return result
+
+ def on_bConfigurePlugin_clicked(self, button, pluginview):
+ pluginsListStore, path = pluginview.get_selection().get_selected_rows()
+ if not path:
+ self.builder.get_object("lDescription").set_label(_("Can't get plugin description"))
+ return
+ # this should work until we keep the row object in the last position
+ pluginfo = pluginsListStore.get_value(pluginsListStore.get_iter(path[0]), pluginsListStore.get_n_columns()-1)
+ if pluginfo:
+ try:
+ ui = PluginSettingsUI(pluginfo)
+ except Exception, e:
+ gui_error_message(_("Error while opening plugin settings UI: \n\n%s" % e))
+ return
+ ui.hydrate()
+ response = ui.run()
+ if response == gtk.RESPONSE_APPLY:
+ ui.dehydrate()
+ if pluginfo.Settings:
+ try:
+ self.ccdaemon.setPluginSettings(pluginfo.getName(), pluginfo.Settings)
+ except Exception, e:
+ gui_error_message(_("Can't save plugin settings:\n %s", e))
+ #for key, val in pluginfo.Settings.iteritems():
+ # print "%s:%s" % (key, val)
+ elif response == gtk.RESPONSE_CANCEL:
+ pass
+ else:
+ print _("unknown response from settings dialog")
+ ui.destroy()
+
+ def on_bClose_clicked(self, button):
+ self.window.destroy()
+
+ def on_tvDumps_cursor_changed(self, treeview):
+ pluginsListStore, path = treeview.get_selection().get_selected_rows()
+ if not path:
+ self.builder.get_object("lDescription").set_label("No description")
+ return
+ # this should work until we keep the row object in the last position
+ pluginfo = pluginsListStore.get_value(pluginsListStore.get_iter(path[0]), pluginsListStore.get_n_columns()-1)
+ if pluginfo:
+ self.builder.get_object("lPluginAuthor").set_text(pluginfo.Email)
+ self.builder.get_object("lPluginVersion").set_text(pluginfo.Version)
+ self.builder.get_object("lPluginWebSite").set_text(pluginfo.WWW)
+ self.builder.get_object("lPluginName").set_text(pluginfo.Name)
+ self.builder.get_object("lPluginDescription").set_text(pluginfo.Description)
+ # print (pluginfo.Enabled == "yes" and pluginfo.GTKBuilder != "")
+ self.builder.get_object("bConfigurePlugin").set_sensitive(pluginfo != None and pluginfo.Enabled == "yes" and pluginfo.GTKBuilder != "")
diff --git a/src/Gui/SettingsDialog.py b/src/Gui/SettingsDialog.py
index 79dfad74..a2ba1f06 100644
--- a/src/Gui/SettingsDialog.py
+++ b/src/Gui/SettingsDialog.py
@@ -2,160 +2,87 @@ import sys
import gtk
from PluginList import getPluginInfoList, PluginInfoList
from CC_gui_functions import *
-from PluginSettingsUI import PluginSettingsUI
+#from PluginSettingsUI import PluginSettingsUI
from ABRTPlugin import PluginSettings, PluginInfo
from abrt_utils import _
class SettingsDialog:
def __init__(self, parent, daemon):
- #print "Settings dialog init"
+ builderfile = "%s%ssettings.GtkBuilder" % (sys.path[0],"/")
self.ccdaemon = daemon
self.builder = gtk.Builder()
- builderfile = "%s%ssettings.GtkBuilder" % (sys.path[0],"/")
- #print builderfile
- try:
- self.builder.add_from_file(builderfile)
- except Exception, e:
- print e
- self.window = self.builder.get_object("wSettings")
- if not self.window:
- raise Exception(_("Can't load gui description for SettingsDialog!"))
- #self.window.set_parent(parent)
-
- self.pluginlist = self.builder.get_object("tvSettings")
- # cell_text, toggle_active, toggle_visible, group_name_visible, color, plugin
- self.pluginsListStore = gtk.TreeStore(str, bool, bool, bool, str, object)
- # set filter
- self.modelfilter = self.pluginsListStore.filter_new()
- self.modelfilter.set_visible_func(self.filter_plugins, None)
- self.pluginlist.set_model(self.modelfilter)
- # ===============================================
- columns = [None]*1
- columns[0] = gtk.TreeViewColumn(_("Name"))
-
- # create list
- for column in columns:
- n = self.pluginlist.append_column(column)
- column.cell = gtk.CellRendererText()
- column.gray_background = gtk.CellRendererText()
- column.pack_start(column.cell, True)
- column.pack_start(column.gray_background, True)
- column.set_attributes(column.cell, markup=(n-1), visible=2)
- column.set_attributes(column.gray_background, visible=3, cell_background=4)
- column.set_resizable(True)
-
- # toggle
- group_name_renderer = gtk.CellRendererText()
- toggle_renderer = gtk.CellRendererToggle()
- toggle_renderer.set_property('activatable', True)
- toggle_renderer.connect( 'toggled', self.on_enabled_toggled, self.pluginsListStore )
- column = gtk.TreeViewColumn(_('Enabled'))
- column.pack_start(toggle_renderer, True)
- column.pack_start(group_name_renderer, True)
- column.add_attribute( toggle_renderer, "active", 1)
- column.add_attribute( toggle_renderer, "visible", 2)
- column.add_attribute( group_name_renderer, "visible", 3)
- column.add_attribute( group_name_renderer, "markup", 0)
- column.add_attribute( group_name_renderer, "cell_background", 4)
- self.pluginlist.insert_column(column, 0)
-
- #connect signals
- self.pluginlist.connect("cursor-changed", self.on_tvDumps_cursor_changed)
- self.builder.get_object("bConfigurePlugin").connect("clicked", self.on_bConfigurePlugin_clicked, self.pluginlist)
- self.builder.get_object("bClose").connect("clicked", self.on_bClose_clicked)
- self.builder.get_object("bConfigurePlugin").set_sensitive(False)
-
- def on_enabled_toggled(self,cell, path, model):
- plugin = model[path][model.get_n_columns()-1]
- if plugin:
- if model[path][1]:
- #print "self.ccdaemon.UnRegisterPlugin(%s)" % (plugin.getName())
- self.ccdaemon.unRegisterPlugin(plugin.getName())
- # FIXME: create class plugin and move this into method Plugin.Enable()
- plugin.Enabled = "no"
- plugin.Settings = None
- else:
- #print "self.ccdaemon.RegisterPlugin(%s)" % (model[path][model.get_n_columns()-1])
- self.ccdaemon.registerPlugin(plugin.getName())
- # FIXME: create class plugin and move this into method Plugin.Enable()
- plugin.Enabled = "yes"
- plugin.Settings = PluginSettings(self.ccdaemon.getPluginSettings(plugin.getName()))
- model[path][1] = not model[path][1]
-
- def filter_plugins(self, model, miter, data):
+ self.builder.add_from_file(builderfile)
+ self.window = self.builder.get_object("wGlobalSettings")
+ print "GSD init"
+ self.builder.get_object("bSaveSettings").connect("clicked", self.on_ok_clicked)
+ self.builder.get_object("bAddCronJob").connect("clicked", self.on_bAddCronJob_clicked)
+
+ def filter_settings(self, model, miter, data):
return True
+
def hydrate(self):
- #print "settings hydrate"
- self.pluginsListStore.clear()
try:
- pluginlist = getPluginInfoList(self.ccdaemon, refresh=True)
+ self.settings = self.ccdaemon.getSettings()
except Exception, e:
+ # FIXME: this should be error gui message!
print e
- #gui_error_message("Error while loading plugins info, please check if abrt daemon is running\n %s" % e)
- 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])
- plugin_rows[plugin_type] = it
- for entry in pluginlist:
- n = self.pluginsListStore.append(plugin_rows[entry.getType()],["<b>%s</b>\n%s" % (entry.getName(), entry.Description), entry.Enabled == "yes", 1, 0, "white", entry])
- self.pluginlist.expand_all()
-
+
+ # hydrate cron jobs:
+ for key,val in self.settings["Cron"].iteritems():
+ try:
+ self.pluginlist = getPluginInfoList(self.ccdaemon, refresh=True)
+ except Exception, e:
+ print e
+
+ hbox = gtk.HBox(homogeneous=True)
+ time = gtk.Entry()
+ plugins = gtk.ComboBox()
+ enabledPluginsListStore = gtk.ListStore(str, object)
+ cell = gtk.CellRendererText()
+ plugins.pack_start(cell)
+ plugins.add_attribute(cell, 'text', 0)
+ enabledPluginsListStore.append([_("Select a plugin"), None])
+ for plugin in self.pluginlist.getActionPlugins():
+ print "#", plugin.getName()
+ enabledPluginsListStore.append([plugin.getName(), plugin])
+ plugins.set_model(enabledPluginsListStore)
+ plugins.set_active(0)
+ hbox.pack_start(time,False)
+ hbox.pack_start(plugins,False)
+ self.builder.get_object("vbCronJobs").pack_start(hbox,False)
+ hbox.show_all()
+ #print "\t%s:%s" % (key,val)
+
+ def on_ok_clicked(self, button):
+ self.dehydrate()
+
+ def on_bAddCronJob_clicked(self, button):
+ hbox = gtk.HBox(homogeneous=True)
+ time = gtk.Entry()
+ plugins = gtk.ComboBox()
+ enabledPluginsListStore = gtk.ListStore(str, object)
+ cell = gtk.CellRendererText()
+ plugins.pack_start(cell)
+ plugins.add_attribute(cell, 'text', 0)
+ for plugin in self.pluginlist.getActionPlugins():
+ print "#", plugin.getName()
+ enabledPluginsListStore.append([plugin.getName(), plugin])
+ plugins.set_model(enabledPluginsListStore)
+ plugins.set_active(0)
+ hbox.pack_start(time,False)
+ hbox.pack_start(plugins,False)
+ self.builder.get_object("vbCronJobs").pack_start(hbox,False)
+ hbox.show_all()
+ print "add"
+
+ def on_cancel_clicked(self,button):
+ print "hide"
+ self.window.hide()
+
def dehydrate(self):
- # we have nothing to save, plugin's does the work
- pass
-
+ self.ccdaemon.setSettings(self.settings)
+ print "dehydrate"
+
def show(self):
+ print "show"
self.window.show()
- #if result == gtk.RESPONSE_APPLY:
- # self.dehydrate()
- #self.window.destroy()
- #return result
-
- def on_bConfigurePlugin_clicked(self, button, pluginview):
- pluginsListStore, path = pluginview.get_selection().get_selected_rows()
- if not path:
- self.builder.get_object("lDescription").set_label(_("Can't get plugin description"))
- return
- # this should work until we keep the row object in the last position
- pluginfo = pluginsListStore.get_value(pluginsListStore.get_iter(path[0]), pluginsListStore.get_n_columns()-1)
- if pluginfo:
- try:
- ui = PluginSettingsUI(pluginfo)
- except Exception, e:
- gui_error_message(_("Error while opening plugin settings UI: \n\n%s" % e))
- return
- ui.hydrate()
- response = ui.run()
- if response == gtk.RESPONSE_APPLY:
- ui.dehydrate()
- if pluginfo.Settings:
- try:
- self.ccdaemon.setPluginSettings(pluginfo.getName(), pluginfo.Settings)
- except Exception, e:
- gui_error_message(_("Can't save plugin settings:\n %s", e))
- #for key, val in pluginfo.Settings.iteritems():
- # print "%s:%s" % (key, val)
- elif response == gtk.RESPONSE_CANCEL:
- pass
- else:
- print _("unknown response from settings dialog")
- ui.destroy()
-
- def on_bClose_clicked(self, button):
- self.window.destroy()
-
- def on_tvDumps_cursor_changed(self, treeview):
- pluginsListStore, path = treeview.get_selection().get_selected_rows()
- if not path:
- self.builder.get_object("lDescription").set_label("No description")
- return
- # this should work until we keep the row object in the last position
- pluginfo = pluginsListStore.get_value(pluginsListStore.get_iter(path[0]), pluginsListStore.get_n_columns()-1)
- if pluginfo:
- self.builder.get_object("lPluginAuthor").set_text(pluginfo.Email)
- self.builder.get_object("lPluginVersion").set_text(pluginfo.Version)
- self.builder.get_object("lPluginWebSite").set_text(pluginfo.WWW)
- self.builder.get_object("lPluginName").set_text(pluginfo.Name)
- self.builder.get_object("lPluginDescription").set_text(pluginfo.Description)
- # print (pluginfo.Enabled == "yes" and pluginfo.GTKBuilder != "")
- self.builder.get_object("bConfigurePlugin").set_sensitive(pluginfo != None and pluginfo.Enabled == "yes" and pluginfo.GTKBuilder != "")
diff --git a/src/Gui/ccgui.glade b/src/Gui/ccgui.glade
index 7b8dd244..67bf6fa3 100644
--- a/src/Gui/ccgui.glade
+++ b/src/Gui/ccgui.glade
@@ -148,6 +148,13 @@ Zdenek Prikryl &lt;zprikryl@redhat.com&gt;</property>
<property name="use_stock">True</property>
</widget>
</child>
+ <child>
+ <widget class="GtkMenuItem" id="miSettings">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Global settings</property>
+ <property name="use_underline">True</property>
+ </widget>
+ </child>
</widget>
</child>
</widget>
diff --git a/src/Gui/settings.GtkBuilder b/src/Gui/settings.GtkBuilder
index 575b77c6..676f3907 100644
--- a/src/Gui/settings.GtkBuilder
+++ b/src/Gui/settings.GtkBuilder
@@ -2,7 +2,7 @@
<interface>
<requires lib="gtk+" version="2.14"/>
<!-- interface-naming-policy project-wide -->
- <object class="GtkWindow" id="wSettings">
+ <object class="GtkWindow" id="wPluginsSettings">
<property name="title" translatable="yes">Settings</property>
<property name="modal">True</property>
<property name="default_width">450</property>
@@ -214,4 +214,262 @@
</object>
</child>
</object>
+ <object class="GtkWindow" id="wGlobalSettings">
+ <property name="title" translatable="yes">Global Settings</property>
+ <property name="modal">True</property>
+ <property name="default_width">450</property>
+ <property name="default_height">400</property>
+ <child>
+ <object class="GtkVBox" id="gsvbox1">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkNotebook" id="notebook1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <child>
+ <object class="GtkTable" id="stable1">
+ <property name="visible">True</property>
+ <property name="n_rows">3</property>
+ <property name="n_columns">3</property>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="pCommon">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Common</property>
+ </object>
+ <packing>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="cron_vbox">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkScrolledWindow" id="swCronJobs">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">automatic</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <child>
+ <object class="GtkViewport" id="vpCronJobs">
+ <property name="visible">True</property>
+ <property name="resize_mode">queue</property>
+ <child>
+ <object class="GtkVBox" id="vbCronJobs">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="cron_add_button_hbox">
+ <property name="visible">True</property>
+ <property name="homogeneous">True</property>
+ <child>
+ <object class="GtkAlignment" id="add_alignment1">
+ <property name="visible">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkAlignment" id="add_alignment2">
+ <property name="visible">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="bAddCronJob">
+ <property name="label" translatable="yes">gtk-add</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="pCron">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Cron</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkTable" id="stable3">
+ <property name="visible">True</property>
+ <property name="n_rows">3</property>
+ <property name="n_columns">3</property>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="pAnacre">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Analyzers, Actions, Reporters</property>
+ </object>
+ <packing>
+ <property name="position">2</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="button_align_hbox">
+ <property name="visible">True</property>
+ <property name="homogeneous">True</property>
+ <child>
+ <object class="GtkAlignment" id=" button_alignment">
+ <property name="visible">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="shbox1">
+ <property name="visible">True</property>
+ <property name="spacing">14</property>
+ <property name="homogeneous">True</property>
+ <child>
+ <object class="GtkButton" id="bCancelSettings">
+ <property name="label" translatable="yes">gtk-cancel</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="bSaveSettings">
+ <property name="label" translatable="yes">gtk-ok</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
</interface>