Fix #86 - Use utf8 aware to_lower function
This commit is contained in:
parent
8fff6fe5e6
commit
8d64493eef
3 changed files with 32 additions and 8 deletions
|
@ -80,7 +80,7 @@ if (WIN32)
|
|||
set(Boost_USE_STATIC_LIBS ON)
|
||||
set(Boost_USE_MULTITHREADED ON)
|
||||
set(Boost_USE_STATIC_RUNTIME OFF)
|
||||
find_package(Boost COMPONENTS program_options date_time system filesystem regex thread signals REQUIRED)
|
||||
find_package(Boost COMPONENTS program_options date_time system filesystem regex thread signals locale REQUIRED)
|
||||
else(WIN32)
|
||||
LIST_CONTAINS(contains -lboost_program_options ${SWIFTEN_LIBRARY})
|
||||
if(contains)
|
||||
|
@ -88,10 +88,10 @@ else(WIN32)
|
|||
set(Boost_USE_MULTITHREADED 0)
|
||||
endif(contains)
|
||||
set(Boost_FIND_QUIETLY ON)
|
||||
find_package(Boost COMPONENTS program_options date_time system filesystem regex thread-mt signals)
|
||||
find_package(Boost COMPONENTS program_options date_time system filesystem regex thread-mt signals locale)
|
||||
if (NOT Boost_FOUND)
|
||||
set(Boost_FIND_QUIETLY OFF)
|
||||
find_package(Boost COMPONENTS program_options date_time system filesystem regex thread signals REQUIRED)
|
||||
find_package(Boost COMPONENTS program_options date_time system filesystem regex thread signals locale REQUIRED)
|
||||
endif()
|
||||
endif(WIN32)
|
||||
|
||||
|
|
|
@ -34,6 +34,7 @@
|
|||
#include <boost/foreach.hpp>
|
||||
#include <boost/make_shared.hpp>
|
||||
#include <boost/algorithm/string.hpp>
|
||||
#include <boost/locale.hpp>
|
||||
|
||||
#include <map>
|
||||
#include <iterator>
|
||||
|
@ -46,6 +47,9 @@ RosterManager::RosterManager(User *user, Component *component){
|
|||
m_rosterStorage = NULL;
|
||||
m_user = user;
|
||||
m_component = component;
|
||||
|
||||
boost::locale::generator gen;
|
||||
std::locale::global(gen("en_GB.UTF8"));
|
||||
}
|
||||
|
||||
RosterManager::~RosterManager() {
|
||||
|
@ -71,7 +75,7 @@ RosterManager::~RosterManager() {
|
|||
|
||||
void RosterManager::removeBuddy(const std::string &_name) {
|
||||
std::string name = _name;
|
||||
boost::algorithm::to_lower(name);
|
||||
name = boost::locale::to_lower(name);
|
||||
Buddy *buddy = getBuddy(name);
|
||||
if (!buddy) {
|
||||
LOG4CXX_WARN(logger, m_user->getJID().toString() << ": Tried to remove unknown buddy " << name);
|
||||
|
@ -118,7 +122,7 @@ void RosterManager::handleBuddyChanged(Buddy *buddy) {
|
|||
|
||||
void RosterManager::setBuddy(Buddy *buddy) {
|
||||
std::string name = buddy->getName();
|
||||
boost::algorithm::to_lower(name);
|
||||
name = boost::locale::to_lower(name);
|
||||
LOG4CXX_INFO(logger, "Associating buddy " << name << " with " << m_user->getJID().toString());
|
||||
m_buddies[name] = buddy;
|
||||
onBuddySet(buddy);
|
||||
|
@ -131,7 +135,7 @@ void RosterManager::setBuddy(Buddy *buddy) {
|
|||
|
||||
void RosterManager::unsetBuddy(Buddy *buddy) {
|
||||
std::string name = buddy->getName();
|
||||
boost::algorithm::to_lower(name);
|
||||
name = boost::locale::to_lower(name);
|
||||
m_buddies.erase(name);
|
||||
if (m_rosterStorage)
|
||||
m_rosterStorage->removeBuddyFromQueue(buddy);
|
||||
|
@ -146,7 +150,7 @@ void RosterManager::storeBuddy(Buddy *buddy) {
|
|||
|
||||
Buddy *RosterManager::getBuddy(const std::string &_name) {
|
||||
std::string name = _name;
|
||||
boost::algorithm::to_lower(name);
|
||||
name = boost::locale::to_lower(name);
|
||||
return m_buddies[name];
|
||||
}
|
||||
|
||||
|
@ -349,7 +353,7 @@ void RosterManager::setStorageBackend(StorageBackend *storageBackend) {
|
|||
if (buddy) {
|
||||
LOG4CXX_INFO(logger, m_user->getJID().toString() << ": Adding cached buddy " << buddy->getName() << " fom database");
|
||||
std::string name = buddy->getName();
|
||||
boost::algorithm::to_lower(name);
|
||||
name = boost::locale::to_lower(name);
|
||||
m_buddies[name] = buddy;
|
||||
onBuddySet(buddy);
|
||||
}
|
||||
|
|
|
@ -15,6 +15,7 @@ using namespace Transport;
|
|||
class RosterManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTest {
|
||||
CPPUNIT_TEST_SUITE(RosterManagerTest);
|
||||
CPPUNIT_TEST(setBuddy);
|
||||
CPPUNIT_TEST(setBuddyUTF8);
|
||||
CPPUNIT_TEST(setBuddyNoAlias);
|
||||
CPPUNIT_TEST(sendCurrentPresences);
|
||||
CPPUNIT_TEST(sendUnavailablePresences);
|
||||
|
@ -85,6 +86,25 @@ class RosterManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTest {
|
|||
CPPUNIT_ASSERT_EQUAL(std::string(""), item.getName());
|
||||
}
|
||||
|
||||
void setBuddyUTF8() {
|
||||
User *user = userManager->getUser("user@localhost");
|
||||
CPPUNIT_ASSERT(user);
|
||||
|
||||
std::vector<std::string> grp;
|
||||
grp.push_back("group1");
|
||||
LocalBuddy *buddy = new LocalBuddy(user->getRosterManager(), -1, "Катя антонова", "", grp, BUDDY_JID_ESCAPING);
|
||||
user->getRosterManager()->setBuddy(buddy);
|
||||
|
||||
CPPUNIT_ASSERT(user->getRosterManager()->getBuddy("катя антонова"));
|
||||
|
||||
Swift::RosterPayload::ref payload1 = getStanza(received[0])->getPayload<Swift::RosterPayload>();
|
||||
CPPUNIT_ASSERT(payload1);
|
||||
CPPUNIT_ASSERT_EQUAL(1, (int) payload1->getItems().size());
|
||||
Swift::RosterItemPayload item = payload1->getItems()[0];
|
||||
CPPUNIT_ASSERT_EQUAL(std::string("Катя антонова"), Buddy::JIDToLegacyName(item.getJID(), user));
|
||||
CPPUNIT_ASSERT_EQUAL(std::string(""), item.getName());
|
||||
}
|
||||
|
||||
void setBuddy() {
|
||||
User *user = userManager->getUser("user@localhost");
|
||||
add2Buddies();
|
||||
|
|
Loading…
Add table
Reference in a new issue