summaryrefslogtreecommitdiff
path: root/saltoqd/commmanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'saltoqd/commmanager.cpp')
-rw-r--r--saltoqd/commmanager.cpp93
1 files changed, 93 insertions, 0 deletions
diff --git a/saltoqd/commmanager.cpp b/saltoqd/commmanager.cpp
new file mode 100644
index 0000000..271749a
--- /dev/null
+++ b/saltoqd/commmanager.cpp
@@ -0,0 +1,93 @@
+#include "commmanager.h"
+
+using namespace CommHistory;
+
+CommManager::CommManager(StorageManager *storage, ToqManager *toq) :
+ QObject(toq), _toq(toq), _storage(storage),
+ _calls(new CallModel(this)),
+ _convs(new GroupModel(this)),
+ _refreshTimer(new QTimer(this))
+{
+ _calls->setTreeMode(false);
+ _calls->setQueryMode(EventModel::AsyncQuery);
+ _calls->setSorting(CallModel::SortByTime);
+ _calls->setResolveContacts(true);
+ _calls->setLimit(20);
+
+ _convs->setQueryMode(EventModel::AsyncQuery);
+ _convs->setLimit(20);
+
+ _refreshTimer->setSingleShot(true);
+ _refreshTimer->setInterval(1000);
+
+ connect(_calls, SIGNAL(modelReady(bool)),
+ this, SLOT(scheduleRefresh()));
+ connect(_calls, SIGNAL(modelReset()),
+ this, SLOT(scheduleRefresh()));
+ connect(_calls, SIGNAL(rowsInserted(QModelIndex,int,int)),
+ this, SLOT(scheduleRefresh()));
+ connect(_calls, SIGNAL(rowsRemoved(QModelIndex,int,int)),
+ this, SLOT(scheduleRefresh()));
+
+ connect(_convs, SIGNAL(modelReady(bool)),
+ this, SLOT(scheduleRefresh()));
+
+ connect(_refreshTimer, &QTimer::timeout,
+ this, &CommManager::refresh);
+
+ if (!_calls->getEvents()) {
+ qWarning() << "Could not get the call log";
+ }
+ if (!_convs->getGroups()) {
+ qWarning() << "Could not get conversation groups";
+ }
+}
+
+void CommManager::scheduleRefresh()
+{
+ if (!_refreshTimer->isActive()) {
+ _refreshTimer->start();
+ }
+}
+
+void CommManager::refresh()
+{
+ qDebug() << "refreshing now";
+ QMultiMap<QDateTime, QJsonObject> events;
+
+ int rows = _calls->rowCount();
+ for (int i = 0; i < rows; i++) {
+ Event e = _calls->event(i);
+ qDebug() << "Got call" << e.toString();
+ QDateTime dt = e.startTime();
+ QJsonObject obj;
+ obj.insert("CommsType", QLatin1String("Call"));
+ obj.insert("ReceivedTime", qint64(dt.toTime_t()));
+ obj.insert("CallerId", e.contactName());
+ obj.insert("ItemId", e.id());
+ QJsonObject details;
+ details.insert("Duration", e.startTime().secsTo(e.endTime()));
+ details.insert("PhoneType", QLatin1String("Other")); // TODO
+ switch (e.direction()) {
+ case Event::Inbound:
+ details.insert("Direction", QLatin1String("Incoming"));
+ break;
+ case Event::Outbound:
+ details.insert("Direction", QLatin1String("Outgoing"));
+ break;
+ default:
+ details.insert("Direction", QLatin1String("Unknown"));
+ break;
+ }
+ details.insert("IsMissedCall", e.isMissedCall());
+ obj.insert("CommsDetails", details);
+
+ events.insert(dt, obj);
+ }
+
+ rows = _convs->rowCount();
+ for (int i = 0; i < rows; i++) {
+ Group g = _convs->group(_convs->index(i, 0));
+ qDebug() << "Chat" << g.contactName();
+ }
+}