summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swift/Controllers')
-rw-r--r--Swift/Controllers/ShowProfileController.cpp9
-rw-r--r--Swift/Controllers/Storages/VCardFileStorage.cpp12
-rw-r--r--Swift/Controllers/Storages/VCardFileStorage.h4
3 files changed, 22 insertions, 3 deletions
diff --git a/Swift/Controllers/ShowProfileController.cpp b/Swift/Controllers/ShowProfileController.cpp
index 15b7b26..d13e5a1 100644
--- a/Swift/Controllers/ShowProfileController.cpp
+++ b/Swift/Controllers/ShowProfileController.cpp
@@ -1,18 +1,25 @@
/*
* Copyright (c) 2012 Tobias Markmann
* Licensed under the simplified BSD license.
* See Documentation/Licenses/BSD-simplified.txt for more information.
*/
+/*
+ * Copyright (c) 2014 Kevin Smith and Remko Tronçon
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
#include "ShowProfileController.h"
#include <boost/bind.hpp>
+#include <boost/date_time/posix_time/posix_time.hpp>
#include <Swiften/Base/foreach.h>
#include <Swiften/VCards/VCardManager.h>
#include <Swift/Controllers/UIEvents/ShowProfileForRosterItemUIEvent.h>
#include <Swift/Controllers/UIEvents/UIEventStream.h>
#include <Swift/Controllers/UIInterfaces/ProfileWindowFactory.h>
namespace Swift {
@@ -38,19 +45,19 @@ void ShowProfileController::handleUIEvent(UIEvent::ref event) {
if (!showProfileEvent) {
return;
}
if (openedProfileWindows.find(showProfileEvent->getJID()) == openedProfileWindows.end()) {
ProfileWindow* newProfileWindow = profileWindowFactory->createProfileWindow();
newProfileWindow->setJID(showProfileEvent->getJID());
newProfileWindow->onWindowAboutToBeClosed.connect(boost::bind(&ShowProfileController::handleProfileWindowAboutToBeClosed, this, _1));
openedProfileWindows[showProfileEvent->getJID()] = newProfileWindow;
- VCard::ref vcard = vcardManager->getVCardAndRequestWhenNeeded(showProfileEvent->getJID());
+ VCard::ref vcard = vcardManager->getVCardAndRequestWhenNeeded(showProfileEvent->getJID(), boost::posix_time::minutes(5));
if (vcard) {
newProfileWindow->setVCard(vcard);
} else {
newProfileWindow->setProcessing(true);
}
newProfileWindow->show();
} else {
openedProfileWindows[showProfileEvent->getJID()]->show();
}
diff --git a/Swift/Controllers/Storages/VCardFileStorage.cpp b/Swift/Controllers/Storages/VCardFileStorage.cpp
index b22e235..876d642 100644
--- a/Swift/Controllers/Storages/VCardFileStorage.cpp
+++ b/Swift/Controllers/Storages/VCardFileStorage.cpp
@@ -1,11 +1,11 @@
/*
- * Copyright (c) 2010 Remko Tronçon
+ * Copyright (c) 2010-2014 Remko Tronçon
* Licensed under the GNU General Public License v3.
* See Documentation/Licenses/GPLv3.txt for more information.
*/
#include "Swift/Controllers/Storages/VCardFileStorage.h"
#include <boost/filesystem/fstream.hpp>
#include <boost/filesystem.hpp>
#include <iostream>
@@ -52,19 +52,29 @@ VCardFileStorage::VCardFileStorage(boost::filesystem::path dir, CryptoProvider*
}
}
boost::shared_ptr<VCard> VCardFileStorage::getVCard(const JID& jid) const {
boost::shared_ptr<VCard> result = VCardPersister().loadPayloadGeneric(getVCardPath(jid));
getAndUpdatePhotoHash(jid, result);
return result;
}
+boost::posix_time::ptime VCardFileStorage::getVCardWriteTime(const JID& jid) const {
+ if (vcardWriteTimes.find(jid) == vcardWriteTimes.end()) {
+ return boost::posix_time::ptime();
+ }
+ else {
+ return vcardWriteTimes.at(jid);
+ }
+}
+
void VCardFileStorage::setVCard(const JID& jid, VCard::ref v) {
+ vcardWriteTimes[jid] = boost::posix_time::second_clock::universal_time();
VCardPersister().savePayload(v, getVCardPath(jid));
getAndUpdatePhotoHash(jid, v);
}
boost::filesystem::path VCardFileStorage::getVCardPath(const JID& jid) const {
try {
std::string file(jid.toString());
String::replaceAll(file, '/', "%2f");
return boost::filesystem::path(vcardsPath / stringToPath(file + ".xml"));
diff --git a/Swift/Controllers/Storages/VCardFileStorage.h b/Swift/Controllers/Storages/VCardFileStorage.h
index 2c3af3d..8ba001e 100644
--- a/Swift/Controllers/Storages/VCardFileStorage.h
+++ b/Swift/Controllers/Storages/VCardFileStorage.h
@@ -1,11 +1,11 @@
/*
- * Copyright (c) 2010-2013 Remko Tronçon
+ * Copyright (c) 2010-2014 Remko Tronçon
* Licensed under the GNU General Public License v3.
* See Documentation/Licenses/GPLv3.txt for more information.
*/
#pragma once
#include <boost/shared_ptr.hpp>
#include <boost/filesystem/path.hpp>
#include <string>
@@ -15,27 +15,29 @@
namespace Swift {
class CryptoProvider;
class VCardFileStorage : public VCardStorage {
public:
VCardFileStorage(boost::filesystem::path dir, CryptoProvider* crypto);
virtual VCard::ref getVCard(const JID& jid) const;
+ virtual boost::posix_time::ptime getVCardWriteTime(const JID& jid) const;
virtual void setVCard(const JID& jid, VCard::ref v);
virtual std::string getPhotoHash(const JID&) const;
private:
boost::filesystem::path getVCardPath(const JID&) const;
std::string getAndUpdatePhotoHash(const JID& jid, VCard::ref vcard) const;
void savePhotoHashes() const;
private:
boost::filesystem::path vcardsPath;
CryptoProvider* crypto;
boost::filesystem::path cacheFile;
typedef std::map<JID, std::string> PhotoHashMap;
mutable PhotoHashMap photoHashes;
+ std::map<JID, boost::posix_time::ptime> vcardWriteTimes;
};
}