diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Applet/Applet.cpp | 8 | ||||
-rw-r--r-- | src/Applet/CCApplet.cpp | 25 | ||||
-rw-r--r-- | src/Applet/CCApplet.h | 3 | ||||
-rw-r--r-- | src/Daemon/CommLayerServer.h | 1 | ||||
-rw-r--r-- | src/Daemon/CommLayerServerDBus.cpp | 10 | ||||
-rw-r--r-- | src/Daemon/CommLayerServerDBus.h | 1 | ||||
-rw-r--r-- | src/Daemon/Daemon.cpp | 1 |
7 files changed, 49 insertions, 0 deletions
diff --git a/src/Applet/Applet.cpp b/src/Applet/Applet.cpp index 41fc3b75..cf58c7da 100644 --- a/src/Applet/Applet.cpp +++ b/src/Applet/Applet.cpp @@ -52,6 +52,13 @@ crash_notify_cb(const char* progname) applet->CrashNotify(message, progname); } +static void +quota_exceed_cb(const char* str) +{ + applet->ShowIcon(); + applet->CrashNotify("%s", str); +} + int main(int argc, char **argv) { setlocale(LC_ALL,""); @@ -91,6 +98,7 @@ int main(int argc, char **argv) DBus::Connection conn = DBus::Connection::SystemBus(); applet = new CApplet(conn, session, CC_DBUS_PATH, CC_DBUS_NAME); applet->ConnectCrashHandler(crash_notify_cb); + applet->ConnectQuotaExceedHandler(quota_exceed_cb); if(!conn.has_name(CC_DBUS_NAME)) { std::cout << _("ABRT service is not running") << std::endl; diff --git a/src/Applet/CCApplet.cpp b/src/Applet/CCApplet.cpp index 3893c77a..7b1a7f1b 100644 --- a/src/Applet/CCApplet.cpp +++ b/src/Applet/CCApplet.cpp @@ -193,6 +193,26 @@ void CApplet::Crash(const std::string& progname, const std::string& uid ) } } +void CApplet::QuotaExceed(const char* str) +{ + if (m_pSessionDBus->has_name("com.redhat.abrt.gui")) + { + return; + } + else + { + if(m_pQuotaExceedHandler) + { + m_pQuotaExceedHandler(str); + } + else + { + std::cout << _("This is default handler, you should register your own with ConnectQuotaExceedHandler") << std::endl; + std::cout.flush(); + } + } +} + void CApplet::DaemonStateChange_cb(bool running, void* data) { CApplet *applet = (CApplet *)data; @@ -211,6 +231,11 @@ void CApplet::ConnectCrashHandler(void (*pCrashHandler)(const char *progname)) m_pCrashHandler = pCrashHandler; } +void CApplet::ConnectQuotaExceedHandler(void (*pQuotaExceedHandler)(const char *progname)) +{ + m_pQuotaExceedHandler = pQuotaExceedHandler; +} + void CApplet::SetIconTooltip(const char *format, ...) { va_list args; diff --git a/src/Applet/CCApplet.h b/src/Applet/CCApplet.h index 90a79e26..6c020e16 100644 --- a/src/Applet/CCApplet.h +++ b/src/Applet/CCApplet.h @@ -65,6 +65,7 @@ class CApplet int AddEvent(int pUUID, const std::string& pProgname); int RemoveEvent(int pUUID); void ConnectCrashHandler(void (*pCrashHandler)(const char *progname)); + void ConnectQuotaExceedHandler(void (*pQuotaExeedHandler)(const char *str)); static void DaemonStateChange_cb(bool running, void* data); protected: @@ -79,9 +80,11 @@ class CApplet private: /* dbus stuff */ void Crash(const std::string& progname, const std::string& uid); + void QuotaExceed(const char* str); /* the real signal handler called to handle the signal */ void (*m_pCrashHandler)(const char *progname); + void (*m_pQuotaExceedHandler)(const char *str); }; #endif /*CC_APPLET_H_*/ diff --git a/src/Daemon/CommLayerServer.h b/src/Daemon/CommLayerServer.h index e87c5c4b..aface8a3 100644 --- a/src/Daemon/CommLayerServer.h +++ b/src/Daemon/CommLayerServer.h @@ -16,6 +16,7 @@ class CCommLayerServer { virtual void Crash(const std::string& progname, const std::string& uid) {} virtual void JobDone(const char* pDest, const char* pUUID) = 0; virtual void JobStarted(const char* pDest) {}; + virtual void QuotaExceed(const char* str) {} 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) {}; diff --git a/src/Daemon/CommLayerServerDBus.cpp b/src/Daemon/CommLayerServerDBus.cpp index 8f913ad5..2f88a72b 100644 --- a/src/Daemon/CommLayerServerDBus.cpp +++ b/src/Daemon/CommLayerServerDBus.cpp @@ -47,6 +47,16 @@ void CCommLayerServerDBus::Crash(const std::string& progname, const std::string& send_flush_and_unref(msg); } +void CCommLayerServerDBus::QuotaExceed(const char* str) +{ + DBusMessage* msg = new_signal_msg("QuotaExceed"); + dbus_message_append_args(msg, + DBUS_TYPE_STRING, &str, + DBUS_TYPE_INVALID); + VERB2 log("Quota exceeded"); + send_flush_and_unref(msg); +} + void CCommLayerServerDBus::JobStarted(const char* peer) { DBusMessage* msg = new_signal_msg("JobStarted", peer); diff --git a/src/Daemon/CommLayerServerDBus.h b/src/Daemon/CommLayerServerDBus.h index e1185c5c..06fb15df 100644 --- a/src/Daemon/CommLayerServerDBus.h +++ b/src/Daemon/CommLayerServerDBus.h @@ -14,6 +14,7 @@ class CCommLayerServerDBus virtual void Crash(const std::string& progname, const std::string& uid); virtual void JobStarted(const char* pDest); virtual void JobDone(const char* pDest, const char* pUUID); + virtual void QuotaExceed(const char* str); 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); diff --git a/src/Daemon/Daemon.cpp b/src/Daemon/Daemon.cpp index 4ee206b6..5a5dfeb2 100644 --- a/src/Daemon/Daemon.cpp +++ b/src/Daemon/Daemon.cpp @@ -524,6 +524,7 @@ static gboolean handle_event_cb(GIOChannel *gio, GIOCondition condition, gpointe { //TODO: delete oldest or biggest dir log("Size of '%s' >= %u MB, deleting '%s'", DEBUG_DUMPS_DIR, g_settings_nMaxCrashReportsSize, name); + g_pCommLayer->QuotaExceed(_("Quota exceeded. Please check your MaxCrashReportsSize value in abrt.conf.")); DeleteDebugDumpDir(std::string(DEBUG_DUMPS_DIR) + "/" + name); continue; } |