From bcb704366cb5e333a626c18c308c7e0448a8e69f Mon Sep 17 00:00:00 2001 From: toma Date: Wed, 25 Nov 2009 17:56:58 +0000 Subject: Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features. BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdenetwork@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- kopete/plugins/statistics/statisticsplugin.h | 213 +++++++++++++++++++++++++++ 1 file changed, 213 insertions(+) create mode 100644 kopete/plugins/statistics/statisticsplugin.h (limited to 'kopete/plugins/statistics/statisticsplugin.h') 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 + + + ************************************************************************* + * * + * 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 +#include +#include +#include + +#include + +#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 : + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
EventChanges to databaseoldStatus
John 17:44 Away (connexion) - (oldstatus was offline)oldstatus = away
John 18:01 Online(+) Away 17:44 18:01oldstatus = online
John 18:30 Offline (disconnect)(+) Online 18:01 18:30oldstatus = offline
John 18:45 Online (connexion) - (oldstatus was offline)oldstatus = online
John 20:30 Offline (disconnect)(+) Online 18:45 20:30oldstatus = offline
+ * + * 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 : + * + * statname, statvalue1, statvalue2 + * + * 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 statisticsContactMap; + /** Associate a Kopete::MetaContact to a StatisticsContact to retrieve + * the StatisticsContact corresponding to the MetaContact + */ + QMap statisticsMetaContactMap; +}; + + +#endif -- cgit v1.2.1