aboutsummaryrefslogtreecommitdiff
path: root/examples/GuiClient/vCardCache.cpp
diff options
context:
space:
mode:
authorManjeet Dahiya <manjeetdahiya@gmail.com>2010-09-26 10:56:08 +0000
committerManjeet Dahiya <manjeetdahiya@gmail.com>2010-09-26 10:56:08 +0000
commit5a671a2987f0d905d786587fb700ab6d3e6ddf25 (patch)
tree26c1fd0b982421c9a7370b1e97bab6e1708492ea /examples/GuiClient/vCardCache.cpp
parent06976314a805d193882ea8ecfa8b0d08fe16cbf3 (diff)
downloadqxmpp-5a671a2987f0d905d786587fb700ab6d3e6ddf25.tar.gz
vCardManager to vCardCache
Diffstat (limited to 'examples/GuiClient/vCardCache.cpp')
-rw-r--r--examples/GuiClient/vCardCache.cpp141
1 files changed, 141 insertions, 0 deletions
diff --git a/examples/GuiClient/vCardCache.cpp b/examples/GuiClient/vCardCache.cpp
new file mode 100644
index 00000000..858edd5d
--- /dev/null
+++ b/examples/GuiClient/vCardCache.cpp
@@ -0,0 +1,141 @@
+/*
+ * Copyright (C) 2008-2010 The QXmpp developers
+ *
+ * Author:
+ * Manjeet Dahiya
+ *
+ * Source:
+ * http://code.google.com/p/qxmpp
+ *
+ * This file is a part of QXmpp library.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ */
+
+
+#include "vCardCache.h"
+#include "QXmppClient.h"
+#include "QXmppUtils.h"
+#include "utils.h"
+#include "QXmppVCardManager.h"
+#include <QFile>
+#include <QDir>
+#include <QDomDocument>
+#include <QTextStream>
+#include <QCoreApplication>
+#include <QDomDocument>
+
+vCardCache::vCardCache(QXmppClient* client) : QObject(client),
+ m_client(client)
+{
+}
+
+void vCardCache::vCardReceived(const QXmppVCardIq& vcard)
+{
+ QString from = vcard.from();
+ if(from.isEmpty() && m_client)
+ {
+ from = m_client->configuration().jidBare();
+ m_selfFullName = vcard.fullName();
+ }
+
+ m_mapBareJidVcard[from] = vcard;
+
+ saveToCache(from);
+
+ emit vCardReadyToUse(from);
+}
+
+bool vCardCache::isVCardAvailable(const QString& bareJid)
+{
+ return m_mapBareJidVcard.contains(bareJid);
+}
+
+void vCardCache::requestVCard(const QString& bareJid)
+{
+ if(m_client)
+ m_client->vCardManager().requestVCard(bareJid);
+}
+
+//TODO not a good way to handle
+QXmppVCardIq& vCardCache::getVCard(const QString& bareJid)
+{
+ return m_mapBareJidVcard[bareJid];
+}
+
+void vCardCache::saveToCache(const QString& bareJid)
+{
+ QDir dir;
+ if(!dir.exists(getSettingsDir(m_client->configuration().jidBare())))
+ dir.mkpath(getSettingsDir(m_client->configuration().jidBare()));
+
+ QDir dir2;
+ if(!dir2.exists(getSettingsDir(m_client->configuration().jidBare())+ "vCards/"))
+ dir2.mkpath(getSettingsDir(m_client->configuration().jidBare())+ "vCards/");
+
+ foreach(QString bareJid, m_mapBareJidVcard.keys())
+ {
+ QString fileVCard = getSettingsDir(m_client->configuration().jidBare()) + "vCards/" + bareJid + ".xml";
+ QFile file(fileVCard);
+
+ if(file.open(QIODevice::ReadWrite))
+ {
+ QXmlStreamWriter stream(&file);
+ stream.setAutoFormatting(true);
+ stream.setAutoFormattingIndent(2);
+ m_mapBareJidVcard[bareJid].toXml(&stream);
+ file.close();
+ }
+ }
+}
+
+void vCardCache::loadAllFromCache()
+{
+ m_mapBareJidVcard.clear();
+
+ QDir dirVCards(getSettingsDir(m_client->configuration().jidBare())+ "vCards/");
+ if(dirVCards.exists())
+ {
+ QStringList list = dirVCards.entryList(QStringList("*.xml"));
+ foreach(QString fileName, list)
+ {
+ QFile file(getSettingsDir(m_client->configuration().jidBare())+ "vCards/" + fileName);
+ QString bareJid = fileName;
+ bareJid.chop(4);
+ if(file.open(QIODevice::ReadOnly))
+ {
+ QDomDocument doc;
+ if(doc.setContent(&file, true))
+ {
+ QXmppVCardIq vCardIq;
+ vCardIq.parse(doc.documentElement());
+ m_mapBareJidVcard[bareJid] = vCardIq;
+ QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
+ }
+ }
+ }
+ }
+}
+
+QString vCardCache::getSelfFullName()
+{
+ return m_selfFullName;
+}
+
+// this should return scaled image
+QImage vCardCache::getAvatar(const QString& bareJid) const
+{
+ if(m_mapBareJidVcard.contains(bareJid))
+ return getImageFromByteArray(m_mapBareJidVcard[bareJid].photo());
+ else
+ return QImage();
+}