summaryrefslogtreecommitdiffstats
path: root/kopete/plugins/statistics/statisticsplugin.h
diff options
context:
space:
mode:
Diffstat (limited to 'kopete/plugins/statistics/statisticsplugin.h')
-rw-r--r--kopete/plugins/statistics/statisticsplugin.h213
1 files changed, 213 insertions, 0 deletions
diff --git a/kopete/plugins/statistics/statisticsplugin.h b/kopete/plugins/statistics/statisticsplugin.h
new file mode 100644
index 00000000..d757b424
--- /dev/null
+++ b/kopete/plugins/statistics/statisticsplugin.h
@@ -0,0 +1,213 @@
+/*
+ statisticsplugin.h
+
+ Copyright (c) 2003-2004 by Marc Cramdal <marc.cramdal@gmail.com>
+
+
+ *************************************************************************
+ * *
+ * 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. *
+ * *
+ *************************************************************************
+*/
+
+#ifndef STATISTICSPLUGIN_H
+#define STATISTICSPLUGIN_H
+
+#include <qobject.h>
+#include <qmap.h>
+#include <qstring.h>
+#include <qstringlist.h>
+
+#include <dcopobject.h>
+
+#include "kopeteplugin.h"
+
+#include "kopetemessage.h"
+#include "kopetemessagehandler.h"
+#include "kopeteonlinestatus.h"
+
+#include "statisticsdcopiface.h"
+
+class QString;
+
+class StatisticsDB;
+class StatisticsContact;
+class StatisticsDCOPIface;
+
+class KopeteView;
+class KActionCollection;
+
+/** \section Kopete Statistics Plugin
+ *
+ * \subsection intro_sec Introduction
+ *
+ * This plugin aims at giving detailed statistics on metacontacts, for instance, how long was
+ * the metacontact online, how long was it busy etc.
+ * In the future, it will maybe make prediction on when the contact should be available for chat.
+ *
+ * \subsection install_sec How it works ...
+ * Each Metacontact is bound to a StatisticsContact which has access to the SQLITE database.
+ * This StatisticsContact stores the last status of the metacontact; the member function onlineStatusChanged is called when the
+ * metacontact status changed (this is managed in the slot slotOnlineStatusChanged of StatisticsPlugin) and then the DB is
+ * updated for the contact.
+ *
+ * More exactly the DB is updated only if the oldstatus was not Offline
+
+ * To have an idea how it works, here is a table :
+ *
+ * <table>
+ * <tr>
+ * <td>Event</td><td>Changes to database</td><td>oldStatus</td>
+ * </tr>
+ * <tr>
+ * <td>John 17:44 Away <i>(connexion)</i></td><td> - <i>(oldstatus was offline)</i></td><td>oldstatus = away </td>
+ * </tr>
+ * <tr>
+ * <td>John 18:01 Online</td><td>(+) Away 17:44 18:01</td><td>oldstatus = online</td>
+ * </tr>
+ * <tr>
+ * <td>John 18:30 Offline <i>(disconnect)</i></td><td>(+) Online 18:01 18:30</td><td>oldstatus = offline</td>
+ * </tr>
+ * <tr>
+ * <td>John 18:45 Online <i>(connexion)</i></td><td> - <i>(oldstatus was offline)</i></td><td>oldstatus = online</td>
+ * </tr>
+ * <tr>
+ * <td>John 20:30 Offline <i>(disconnect)</i></td><td>(+) Online 18:45 20:30</td><td>oldstatus = offline</td>
+ * </tr>
+ * </table>
+ *
+ * etc.
+ *
+ * \subsection install_sec Some little stats
+ * This plugin is able to record some other stats, not based on events. Theyre saved in the commonstat table in which we store stats
+ * like this :
+ *
+ * <code>statname, statvalue1, statvalue2</code>
+ *
+ * Generally, we store the value, and its ponderation. If an average on one hundred messages says that the contact X takes about
+ * 3 seconds between two messages, we store "timebetweentwomessages", "3", "100"
+ *
+ *
+ *
+ * StatisticsPlugin is the main Statistics plugin class.
+ * Contains mainly slots.
+ */
+class StatisticsPlugin : public Kopete::Plugin, virtual public StatisticsDCOPIface
+{
+ Q_OBJECT
+public:
+ /// Standard plugin constructors
+ StatisticsPlugin(QObject *parent, const char *name, const QStringList &args);
+ ~StatisticsPlugin();
+
+ /// Method to access m_db member
+ StatisticsDB *db() { return m_db; }
+private slots:
+ // Do the initializations
+ void slotInitialize();
+
+public slots:
+
+ /** \brief This slot is called when the status of a contact changed.
+ *
+ * Then it searches for the contact bind to the metacontact who triggered the signal and calls
+ * the specific StatisticsContact::onlineStatusChanged of the StatisticsContact to update the StatisticsContact status,
+ * and maybe, update the database.
+ */
+ void slotOnlineStatusChanged(Kopete::MetaContact *contact, Kopete::OnlineStatus::StatusType status );
+
+ /**
+ * Builds and show the StatisticsDialog for a contact
+ */
+ void slotViewStatistics();
+
+ /**
+ *
+ * Extract the metaContactId from the message, and calls the
+ * StatisticsContact::newMessageReceived(Kopete::Message& m) function
+ * for the corresponding contact
+ */
+ void slotAboutToReceive(Kopete::Message& m);
+
+ /*
+ * Managing views
+ */
+
+ /**
+ * \brief Only connects the Kopete::ChatSession::closing() signal to our slotViewClosed().
+ */
+ void slotViewCreated(Kopete::ChatSession* session);
+
+ /**
+ * One aim of this slot is to be able to stop recording time between two messages
+ * for the contact in the chatsession. But, we only
+ * want to do this if the contact is not in an other chatsession.
+ */
+ void slotViewClosed(Kopete::ChatSession* session);
+
+ /**
+ * Slot called when a new metacontact is added to make some slots connections and to create a new
+ * StatisticsContact object.
+ *
+ * In the constructor, we connect the metacontacts already existing to some slots, but we need to do this
+ * when new metacontacts are added.
+ * This function is also called when we loop over the contact list in the constructor.
+ */
+ void slotMetaContactAdded(Kopete::MetaContact *mc);
+
+ /**
+ * Slot called when a metacontact is removed to delete statistic data from db and to remove StatisticsContact object.
+ */
+ void slotMetaContactRemoved(Kopete::MetaContact *mc);
+
+ /**
+ * Slot called when a contact is added to metacontact.
+ */
+ void slotContactAdded(Kopete::Contact *c);
+
+ /**
+ * Slot called when a contact is removed from metacontact.
+ */
+ void slotContactRemoved(Kopete::Contact *c);
+
+
+ /*
+ * DCOP functions
+ * See statisticsdcopiface.h for the documentation
+ */
+ void dcopStatisticsDialog(QString id);
+
+ bool dcopWasOnline(QString id, int timeStamp);
+ bool dcopWasOnline(QString id, QString dt);
+
+ bool dcopWasAway(QString id, int timeStamp);
+ bool dcopWasAway(QString id, QString dt);
+
+ bool dcopWasOffline(QString id, int timeStamp);
+ bool dcopWasOffline(QString id, QString dt);
+
+ bool dcopWasStatus(QString id, QDateTime dateTime, Kopete::OnlineStatus::StatusType status);
+
+ QString dcopStatus(QString id, QString dateTime);
+ QString dcopStatus(QString id, int timeStamp);
+
+ QString dcopMainStatus(QString id, int timeStamp);
+
+private:
+ StatisticsDB *m_db;
+ /** Associate a Kopete::Contact id to a StatisticsContact to retrieve
+ * the StatisticsContact corresponding to the Kopete::Contact
+ */
+ QMap<QString, StatisticsContact*> statisticsContactMap;
+ /** Associate a Kopete::MetaContact to a StatisticsContact to retrieve
+ * the StatisticsContact corresponding to the MetaContact
+ */
+ QMap<Kopete::MetaContact*, StatisticsContact*> statisticsMetaContactMap;
+};
+
+
+#endif