Proof-reading.
[kdenetwork.git] / kopete / plugins / statistics / statisticsplugin.cpp
blob31bde466aca1fa349a9a3f432872cee3a2339651
1 /*
2 statisticsplugin.cpp
4 Copyright (c) 2003-2004 by Marc Cramdal <marc.cramdal@gmail.com>
6 Copyright (c) 2007 by the Kopete Developers <kopete-devel@kde.org>
8 *************************************************************************
9 * *
10 * This program is free software; you can redistribute it and/or modify *
11 * it under the terms of the GNU General Public License as published by *
12 * the Free Software Foundation; either version 2 of the License, or *
13 * (at your option) any later version. *
14 * *
15 *************************************************************************
18 #include <math.h>
20 #include <qfile.h>
21 //Added by qt3to4:
22 #include <QList>
23 #include <qtimer.h>
25 #include <kgenericfactory.h>
26 #include <kaboutdata.h>
27 #include <kaction.h>
28 #include <kactioncollection.h>
29 #include <kmessagebox.h>
30 #include <kstandarddirs.h>
31 #include <kdeversion.h>
33 #include "kopetechatsessionmanager.h"
34 #include "kopetemetacontact.h"
35 #include "kopeteview.h"
36 #include "kopetecontactlist.h"
37 #include "kopeteuiglobal.h"
38 #include "kopetemessageevent.h"
39 #include "kopeteonlinestatus.h"
40 #include "kopeteaccountmanager.h"
41 #include "kopeteaccount.h"
42 #include "kopetecontact.h"
44 #include "statisticscontact.h"
45 #include "statisticsdialog.h"
46 #include "statisticsplugin.h"
47 #include "statisticsadaptor.h"
48 #include "statisticsdb.h"
50 K_PLUGIN_FACTORY(StatisticsPluginFactory, registerPlugin<StatisticsPlugin>();)
51 K_EXPORT_PLUGIN(StatisticsPluginFactory( "kopete_statistics" ))
53 StatisticsPlugin::StatisticsPlugin( QObject *parent, const QVariantList &/*args*/ )
54 : Kopete::Plugin( StatisticsPluginFactory::componentData(), parent )
57 KAction *viewMetaContactStatistics = new KAction( KIcon("view-statistics"), i18n("View &Statistics" ),
58 this );
59 actionCollection()->addAction ( "viewMetaContactStatistics", viewMetaContactStatistics );
60 connect(viewMetaContactStatistics, SIGNAL(triggered(bool)), this, SLOT(slotViewStatistics()));
61 viewMetaContactStatistics->setEnabled(Kopete::ContactList::self()->selectedMetaContacts().count() == 1);
63 connect(Kopete::ChatSessionManager::self(),SIGNAL(chatSessionCreated(Kopete::ChatSession*)),
64 this, SLOT(slotViewCreated(Kopete::ChatSession*)));
65 connect(Kopete::ChatSessionManager::self(),SIGNAL(aboutToReceive(Kopete::Message&)),
66 this, SLOT(slotAboutToReceive(Kopete::Message&)));
68 connect(Kopete::ContactList::self(), SIGNAL(metaContactSelected(bool)),
69 viewMetaContactStatistics, SLOT(setEnabled(bool)));
70 connect(Kopete::ContactList::self(), SIGNAL(metaContactAdded(Kopete::MetaContact*)),
71 this, SLOT(slotMetaContactAdded(Kopete::MetaContact*)));
72 connect(Kopete::ContactList::self(), SIGNAL(metaContactRemoved(Kopete::MetaContact*)),
73 this, SLOT(slotMetaContactRemoved(Kopete::MetaContact*)));
75 setXMLFile("statisticsui.rc");
77 /* Initialization reads the database, so it could be a bit time-consuming
78 due to disk access. This should overcome the problem and makes it non-blocking. */
79 QTimer::singleShot(0, this, SLOT(slotInitialize()));
81 new StatisticsAdaptor(this);
82 QDBusConnection dbus = QDBusConnection::sessionBus();
83 dbus.registerObject("/Statistics", this);
86 void StatisticsPlugin::slotInitialize()
88 // Initializes the database
89 m_db = new StatisticsDB();
91 QList<Kopete::MetaContact*> list = Kopete::ContactList::self()->metaContacts();
92 foreach(Kopete::MetaContact *metaContact, list)
94 slotMetaContactAdded(metaContact);
98 StatisticsPlugin::~StatisticsPlugin()
100 qDeleteAll(statisticsContactMap);
101 statisticsContactMap.clear();
104 void StatisticsPlugin::slotAboutToReceive(Kopete::Message& m)
106 if (!m.from())
107 return;
109 StatisticsContact *sc = statisticsContactMap.value(m.from()->metaContact());
110 if (sc)
111 sc->newMessageReceived(m);
114 void StatisticsPlugin::slotViewCreated(Kopete::ChatSession* session)
116 connect(session, SIGNAL(closing(Kopete::ChatSession*)), this, SLOT(slotViewClosed(Kopete::ChatSession*)));
119 void StatisticsPlugin::slotViewClosed(Kopete::ChatSession* session)
121 QList<Kopete::Contact*> list = session->members();
122 foreach(Kopete::Contact *contact, list)
124 // If this contact is not in other chat sessions
125 if (!contact->manager())
127 StatisticsContact *sc = statisticsContactMap.value(contact->metaContact());
128 if (sc)
129 sc->setIsChatWindowOpen(false);
134 void StatisticsPlugin::slotViewStatistics()
136 Kopete::MetaContact *mc = Kopete::ContactList::self()->selectedMetaContacts().first();
138 kDebug(14315) << "statistics - dialog: " + mc->displayName();
140 StatisticsContact *sc = statisticsContactMap.value(mc);
141 if (sc)
143 StatisticsDialog* dialog = new StatisticsDialog(sc, db());
144 dialog->setObjectName( QLatin1String( "StatisticsDialog" ) );
145 dialog->show();
149 void StatisticsPlugin::slotOnlineStatusChanged(Kopete::MetaContact *metaContact, Kopete::OnlineStatus::StatusType status)
151 StatisticsContact *sc = statisticsContactMap.value(metaContact);
152 if (sc)
153 sc->onlineStatusChanged(status);
156 void StatisticsPlugin::slotMetaContactAdded(Kopete::MetaContact *mc)
158 connect(mc, SIGNAL(onlineStatusChanged(Kopete::MetaContact *, Kopete::OnlineStatus::StatusType)), this,
159 SLOT(slotOnlineStatusChanged(Kopete::MetaContact*, Kopete::OnlineStatus::StatusType)));
161 statisticsContactMap[mc] = new StatisticsContact(mc, db());
164 void StatisticsPlugin::slotMetaContactRemoved(Kopete::MetaContact *mc)
166 disconnect(mc, 0, this, 0);
167 StatisticsContact *sc = statisticsContactMap.value(mc);
168 if (sc)
170 statisticsContactMap.remove(mc);
171 delete sc;
175 StatisticsContact* StatisticsPlugin::findStatisticsContact(QString id) const
177 QMapIterator<Kopete::MetaContact*, StatisticsContact*> it(statisticsContactMap);
178 while (it.hasNext())
180 it.next();
181 if (it.key()->metaContactId() == id)
182 return it.value();
185 return 0;
188 void StatisticsPlugin::dbusStatisticsDialog(QString id)
190 kDebug(14315) << "statistics - DBus dialog :" << id;
192 StatisticsContact *sc = findStatisticsContact(id);
193 if (sc)
195 StatisticsDialog* dialog = new StatisticsDialog(sc, db());
196 dialog->setObjectName( QLatin1String("StatisticsDialog") );
197 dialog->show();
201 bool StatisticsPlugin::dbusWasOnline(QString id, int timeStamp)
203 QDateTime dt;
204 dt.setTime_t(timeStamp);
205 return dbusWasStatus(id, dt, Kopete::OnlineStatus::Online);
208 bool StatisticsPlugin::dbusWasOnline(QString id, QString dateTime)
210 return dbusWasStatus(id, QDateTime::fromString(dateTime), Kopete::OnlineStatus::Online);
213 bool StatisticsPlugin::dbusWasAway(QString id, int timeStamp)
215 QDateTime dt;
216 dt.setTime_t(timeStamp);
217 return dbusWasStatus(id, dt, Kopete::OnlineStatus::Away);
220 bool StatisticsPlugin::dbusWasAway(QString id, QString dateTime)
222 return dbusWasStatus(id, QDateTime::fromString(dateTime), Kopete::OnlineStatus::Away);
225 bool StatisticsPlugin::dbusWasOffline(QString id, int timeStamp)
227 QDateTime dt;
228 dt.setTime_t(timeStamp);
229 return dbusWasStatus(id, dt, Kopete::OnlineStatus::Offline);
232 bool StatisticsPlugin::dbusWasOffline(QString id, QString dateTime)
234 return dbusWasStatus(id, QDateTime::fromString(dateTime), Kopete::OnlineStatus::Offline);
237 bool StatisticsPlugin::dbusWasStatus(QString id, QDateTime dateTime, Kopete::OnlineStatus::StatusType status)
239 kDebug(14315) << "statistics - DBus wasOnline :" << id;
241 if (dateTime.isValid())
243 StatisticsContact *sc = findStatisticsContact(id);
244 if (sc)
245 return sc->wasStatus(dateTime, status);
248 return false;
251 QString StatisticsPlugin::dbusStatus(QString id, int timeStamp)
253 QDateTime dt;
254 dt.setTime_t(timeStamp);
255 return dbusStatus(id, dt.toString());
259 QString StatisticsPlugin::dbusStatus(QString id, QString dateTime)
261 QDateTime dt = QDateTime::fromString(dateTime);
262 if (dt.isValid())
264 StatisticsContact *sc = findStatisticsContact(id);
265 if (sc)
266 return sc->statusAt(dt);
269 return "";
273 QString StatisticsPlugin::dbusMainStatus(QString id, int timeStamp)
275 QDateTime dt;
276 dt.setTime_t(timeStamp);
277 if (dt.isValid())
279 StatisticsContact *sc = findStatisticsContact(id);
280 if (sc)
281 return sc->mainStatusDate(dt.date());
284 return "";
287 #include "statisticsplugin.moc"