From 2b81524fb99270b7fc06d5f1b5ec52dec651c125 Mon Sep 17 00:00:00 2001 From: Manjeet Dahiya Date: Sat, 11 Sep 2010 20:00:44 +0000 Subject: use QXmppVCardIq instead of intermediate VCard class --- examples/GuiClient/mainDialog.cpp | 18 ++-- examples/GuiClient/utils.cpp | 7 +- examples/GuiClient/utils.h | 2 +- examples/GuiClient/vCardManager.cpp | 167 ++++++++++++++++++++++++------------ examples/GuiClient/vCardManager.h | 16 +--- 5 files changed, 130 insertions(+), 80 deletions(-) (limited to 'examples/GuiClient') diff --git a/examples/GuiClient/mainDialog.cpp b/examples/GuiClient/mainDialog.cpp index dcbb7e60..d9f72f27 100644 --- a/examples/GuiClient/mainDialog.cpp +++ b/examples/GuiClient/mainDialog.cpp @@ -152,8 +152,7 @@ void mainDialog::rosterChanged(const QString& bareJid) bool check = m_vCardManager.isVCardAvailable(bareJid); if(check) { - m_rosterItemModel.updateAvatar(bareJid, - m_vCardManager.getVCard(bareJid).image); + m_rosterItemModel.updateAvatar(bareJid, m_vCardManager.getAvatar(bareJid)); } else { @@ -438,8 +437,8 @@ void mainDialog::updateVCard(const QString& bareJid) if(bareJid != m_xmppClient.configuration().jidBare()) { m_rosterItemModel.updateAvatar(bareJid, - m_vCardManager.getVCard(bareJid).image); - m_rosterItemModel.updateName(bareJid, m_vCardManager.getVCard(bareJid).fullName); + m_vCardManager.getAvatar(bareJid)); + m_rosterItemModel.updateName(bareJid, m_vCardManager.getVCard(bareJid).fullName()); } else { @@ -448,7 +447,7 @@ void mainDialog::updateVCard(const QString& bareJid) else m_statusWidget.setDisplayName(m_vCardManager.getSelfFullName()); - m_statusWidget.setAvatar(m_vCardManager.getVCard(bareJid).image); + m_statusWidget.setAvatar(m_vCardManager.getAvatar(bareJid)); } } @@ -459,13 +458,14 @@ void mainDialog::showProfile(const QString& bareJid) profileDialog dlg(this, bareJid, m_xmppClient); dlg.setBareJid(bareJid); - if(!m_vCardManager.getVCard(bareJid).imageOriginal.isNull()) - dlg.setAvatar(m_vCardManager.getVCard(bareJid).imageOriginal); + // TODO use original image + if(!m_vCardManager.getAvatar(bareJid).isNull()) + dlg.setAvatar(m_vCardManager.getAvatar(bareJid)); QStringList resources = m_xmppClient.rosterManager().getResources(bareJid); - dlg.setFullName(m_vCardManager.getVCard(bareJid).fullName); + dlg.setFullName(m_vCardManager.getVCard(bareJid).fullName()); - if(m_vCardManager.getVCard(bareJid).fullName.isEmpty()) + if(m_vCardManager.getVCard(bareJid).fullName().isEmpty()) dlg.setFullName(m_xmppClient.rosterManager().getRosterEntry(bareJid).name()); dlg.exec(); diff --git a/examples/GuiClient/utils.cpp b/examples/GuiClient/utils.cpp index 08adbc8a..251a7366 100644 --- a/examples/GuiClient/utils.cpp +++ b/examples/GuiClient/utils.cpp @@ -99,9 +99,12 @@ QString presenceToStatusText(const QXmppPresence& presence) return statusText; } -QString getSettingsDir() +QString getSettingsDir(const QString& bareJid) { - return "appCache/"; + if(bareJid.isEmpty()) + return "appCache/"; + else + return QString("appCache/%1/").arg(bareJid); } QString getImageHash(const QByteArray& image) diff --git a/examples/GuiClient/utils.h b/examples/GuiClient/utils.h index 6bc94e05..020811df 100644 --- a/examples/GuiClient/utils.h +++ b/examples/GuiClient/utils.h @@ -36,7 +36,7 @@ int comparisonWeightsPresenceType(QXmppPresence::Type); QString presenceToStatusText(const QXmppPresence& presence); -QString getSettingsDir(); +QString getSettingsDir(const QString& bareJid = ""); QString getImageHash(const QByteArray& image); QImage getImageFromByteArray(const QByteArray& image); diff --git a/examples/GuiClient/vCardManager.cpp b/examples/GuiClient/vCardManager.cpp index ada8fb30..4909c906 100644 --- a/examples/GuiClient/vCardManager.cpp +++ b/examples/GuiClient/vCardManager.cpp @@ -28,9 +28,11 @@ #include "utils.h" #include "QXmppVCardManager.h" #include +#include #include #include #include +#include vCardManager::vCardManager(QXmppClient* client) : QObject(client), m_client(client) @@ -46,36 +48,34 @@ void vCardManager::vCardReceived(const QXmppVCardIq& vcard) m_selfFullName = vcard.fullName(); } -// m_mapBareJidVcard[from] = vcard; - - m_mapBareJidVCard[from].fullName = vcard.fullName(); + m_mapBareJidVcard[from] = vcard; - if(m_mapBareJidVCard[from].imageHash == getImageHash(vcard.photo())) - { - emit vCardReadyToUse(from); - return; - } +// if(m_mapBareJidVCard[from].imageHash == getImageHash(vcard.photo())) +// { +// emit vCardReadyToUse(from); +// return; +// } - if(!m_mapBareJidVCard[from].imageHash.isEmpty()) - { - QString fileName = getSettingsDir() + m_mapBareJidVCard[from].imageHash; - QFile file1(fileName + "_original.png"); - QFile file2(fileName + "_scaled.png"); - file1.remove(); - file2.remove(); - } +// if(!m_mapBareJidVCard[from].imageHash.isEmpty()) +// { +// QString fileName = getSettingsDir() + m_mapBareJidVCard[from].imageHash; +// QFile file1(fileName + "_original.png"); +// QFile file2(fileName + "_scaled.png"); +// file1.remove(); +// file2.remove(); +// } - m_mapBareJidVCard[from].imageHash = getImageHash(vcard.photo()); +// m_mapBareJidVCard[from].imageHash = getImageHash(vcard.photo()); - QImage image = getImageFromByteArray(vcard.photo()); - m_mapBareJidVCard[from].imageOriginal = image; +// QImage image = getImageFromByteArray(vcard.photo()); +// m_mapBareJidVCard[from].imageOriginal = image; - if(!image.isNull()) - m_mapBareJidVCard[from].image = image.scaledToWidth(32); +// if(!image.isNull()) +// m_mapBareJidVCard[from].image = image.scaledToWidth(32); - QString fileName = getSettingsDir() + m_mapBareJidVCard[from].imageHash; - m_mapBareJidVCard[from].imageOriginal.save(fileName + "_original.png", "PNG"); - m_mapBareJidVCard[from].image.save(fileName + "_scaled.png", "PNG"); +// QString fileName = getSettingsDir() + m_mapBareJidVCard[from].imageHash; +// m_mapBareJidVCard[from].imageOriginal.save(fileName + "_original.png", "PNG"); +// m_mapBareJidVCard[from].image.save(fileName + "_scaled.png", "PNG"); saveToCache(from); @@ -84,7 +84,7 @@ void vCardManager::vCardReceived(const QXmppVCardIq& vcard) bool vCardManager::isVCardAvailable(const QString& bareJid) { - return m_mapBareJidVCard.contains(bareJid); + return m_mapBareJidVcard.contains(bareJid); } void vCardManager::requestVCard(const QString& bareJid) @@ -93,27 +93,49 @@ void vCardManager::requestVCard(const QString& bareJid) m_client->vCardManager().requestVCard(bareJid); } -vCardManager::vCard& vCardManager::getVCard(const QString& bareJid) +//TODO not a good way to handle +QXmppVCardIq& vCardManager::getVCard(const QString& bareJid) { - return m_mapBareJidVCard[bareJid]; + return m_mapBareJidVcard[bareJid]; } void vCardManager::saveToCache(const QString& bareJid) { - QString fileBareJidImageMap = getSettingsDir() + m_client->configuration().jidBare() + "_jidimage"; - QFile file(fileBareJidImageMap); +// QString fileBareJidImageMap = getSettingsDir() + m_client->configuration().jidBare() + "_jidimage"; +// QFile file(fileBareJidImageMap); + +// if(!file.open(QIODevice::ReadWrite)) +// return; - if(!file.open(QIODevice::ReadWrite)) - return; +// QTextStream out(&file); +// QMap::const_iterator i = m_mapBareJidVCard.constBegin(); +// while(i != m_mapBareJidVCard.constEnd()) +// { +// out << i.key() << "\n" << i.value().imageHash << "\n"; +// ++i; +// } +// file.close(); - QTextStream out(&file); - QMap::const_iterator i = m_mapBareJidVCard.constBegin(); - while(i != m_mapBareJidVCard.constEnd()) + 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()) { - out << i.key() << "\n" << i.value().imageHash << "\n"; - ++i; + QString fileVCard = getSettingsDir(m_client->configuration().jidBare()) + "vCards/" + bareJid + ".xml"; + QFile file(fileVCard); + + if(file.open(QIODevice::ReadWrite)) + { + QXmlStreamWriter stream(&file); + m_mapBareJidVcard[bareJid].toXml(&stream); + file.close(); + } } - file.close(); // if(!m_mapBareJidVCard.contains(bareJid)) // return; @@ -152,26 +174,52 @@ void vCardManager::saveToCache(const QString& bareJid) void vCardManager::loadAllFromCache() { - QString fileBareJidImageMap = getSettingsDir() + m_client->configuration().jidBare() + "_jidimage"; - QFile file(fileBareJidImageMap); - if(!file.open(QIODevice::ReadOnly)) - return; - - QString bareJid, imageHash; - while(!file.atEnd()) + QDir dirVCards(getSettingsDir(m_client->configuration().jidBare())+ "vCards/"); + if(dirVCards.exists()) { - bareJid = file.readLine(); - bareJid = bareJid.trimmed(); - imageHash = file.readLine(); - imageHash = imageHash.trimmed(); - m_mapBareJidVCard[bareJid].imageHash = imageHash; - m_mapBareJidVCard[bareJid].image.load( - getSettingsDir() + m_mapBareJidVCard[bareJid].imageHash + "_scaled.png"); - m_mapBareJidVCard[bareJid].imageOriginal.load( - getSettingsDir() + m_mapBareJidVCard[bareJid].imageHash + "_original.png"); - QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents); + QStringList list = dirVCards.entryList(QStringList("*.xml")); + foreach(QString fileName, list) + { + QFile file(getSettingsDir(m_client->configuration().jidBare())+ "vCards/" + fileName); + if(file.open(QIODevice::ReadOnly)) + { + QDomDocument doc; + if(doc.setContent(&file, true)) + { + QXmppVCardIq vCardIq; + vCardIq.parse(doc.documentElement()); + m_mapBareJidVcard[m_client->configuration().jidBare()] = vCardIq; + QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents); + } + } + } } - file.close(); + +// QString fileBareJidImageMap = getSettingsDir() + m_client->configuration().jidBare() + "_jidimage"; +// QFile file(fileBareJidImageMap); +// if(!file.open(QIODevice::ReadOnly)) +// return; + +// QString bareJid, imageHash; +// while(!file.atEnd()) +// { +// bareJid = file.readLine(); +// bareJid = bareJid.trimmed(); +// imageHash = file.readLine(); +// imageHash = imageHash.trimmed(); + +// if(m_mapBareJidVcard.contains(bareJid)) +// m_mapBareJidVCard[bareJid].fullName = m_mapBareJidVcard[bareJid].fullName(); + +// m_mapBareJidVCard[bareJid].imageHash = imageHash; +// m_mapBareJidVCard[bareJid].image.load( +// getSettingsDir() + m_mapBareJidVCard[bareJid].imageHash + "_scaled.png"); +// m_mapBareJidVCard[bareJid].imageOriginal.load( +// getSettingsDir() + m_mapBareJidVCard[bareJid].imageHash + "_original.png"); +// QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents); +// } +// file.close(); + // QString fileBareJidImageMap = getSettingsDir() + m_client->configuration().jidBare() + "_jidimage.xml"; // QDomDocument doc(m_client->configuration().jidBare() + "_jidimage"); @@ -200,3 +248,12 @@ QString vCardManager::getSelfFullName() { return m_selfFullName; } + +// this should return scaled image +QImage vCardManager::getAvatar(const QString& bareJid) const +{ + if(m_mapBareJidVcard.contains(bareJid)) + return m_mapBareJidVcard[bareJid].photoAsImage(); + else + return QImage(); +} diff --git a/examples/GuiClient/vCardManager.h b/examples/GuiClient/vCardManager.h index bb0700ee..aecde92a 100644 --- a/examples/GuiClient/vCardManager.h +++ b/examples/GuiClient/vCardManager.h @@ -39,21 +39,12 @@ class vCardManager : public QObject Q_OBJECT public: - class vCard - { - public: - QString fullName; - QString imageHash; - QImage image; - QImage imageOriginal; - }; - vCardManager(QXmppClient* client); void requestVCard(const QString& bareJid); // bool isVCardReceived(const QString& bareJid); bool isVCardAvailable(const QString& bareJid); - - vCardManager::vCard& getVCard(const QString& bareJid); + QImage getAvatar(const QString& bareJid) const; + QXmppVCardIq& getVCard(const QString& bareJid); void loadAllFromCache(); void saveToCache(const QString& bareJid); QString getSelfFullName(); @@ -68,8 +59,7 @@ private: QString m_selfFullName; QXmppClient* m_client; -// QMap m_mapBareJidVcard; - QMap m_mapBareJidVCard; + QMap m_mapBareJidVcard; }; #endif // VCARDMANAGER_H -- cgit v1.2.3