diff options
| author | Manjeet Dahiya <manjeetdahiya@gmail.com> | 2010-09-26 10:56:08 +0000 |
|---|---|---|
| committer | Manjeet Dahiya <manjeetdahiya@gmail.com> | 2010-09-26 10:56:08 +0000 |
| commit | 5a671a2987f0d905d786587fb700ab6d3e6ddf25 (patch) | |
| tree | 26c1fd0b982421c9a7370b1e97bab6e1708492ea /examples/GuiClient/vCardCache.cpp | |
| parent | 06976314a805d193882ea8ecfa8b0d08fe16cbf3 (diff) | |
| download | qxmpp-5a671a2987f0d905d786587fb700ab6d3e6ddf25.tar.gz | |
vCardManager to vCardCache
Diffstat (limited to 'examples/GuiClient/vCardCache.cpp')
| -rw-r--r-- | examples/GuiClient/vCardCache.cpp | 141 |
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(); +} |
