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_STATIC_LIBS ON)
|
||||||
set(Boost_USE_MULTITHREADED ON)
|
set(Boost_USE_MULTITHREADED ON)
|
||||||
set(Boost_USE_STATIC_RUNTIME OFF)
|
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)
|
else(WIN32)
|
||||||
LIST_CONTAINS(contains -lboost_program_options ${SWIFTEN_LIBRARY})
|
LIST_CONTAINS(contains -lboost_program_options ${SWIFTEN_LIBRARY})
|
||||||
if(contains)
|
if(contains)
|
||||||
|
@ -88,10 +88,10 @@ else(WIN32)
|
||||||
set(Boost_USE_MULTITHREADED 0)
|
set(Boost_USE_MULTITHREADED 0)
|
||||||
endif(contains)
|
endif(contains)
|
||||||
set(Boost_FIND_QUIETLY ON)
|
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)
|
if (NOT Boost_FOUND)
|
||||||
set(Boost_FIND_QUIETLY OFF)
|
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()
|
||||||
endif(WIN32)
|
endif(WIN32)
|
||||||
|
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
#include <boost/foreach.hpp>
|
#include <boost/foreach.hpp>
|
||||||
#include <boost/make_shared.hpp>
|
#include <boost/make_shared.hpp>
|
||||||
#include <boost/algorithm/string.hpp>
|
#include <boost/algorithm/string.hpp>
|
||||||
|
#include <boost/locale.hpp>
|
||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
|
@ -46,6 +47,9 @@ RosterManager::RosterManager(User *user, Component *component){
|
||||||
m_rosterStorage = NULL;
|
m_rosterStorage = NULL;
|
||||||
m_user = user;
|
m_user = user;
|
||||||
m_component = component;
|
m_component = component;
|
||||||
|
|
||||||
|
boost::locale::generator gen;
|
||||||
|
std::locale::global(gen("en_GB.UTF8"));
|
||||||
}
|
}
|
||||||
|
|
||||||
RosterManager::~RosterManager() {
|
RosterManager::~RosterManager() {
|
||||||
|
@ -71,7 +75,7 @@ RosterManager::~RosterManager() {
|
||||||
|
|
||||||
void RosterManager::removeBuddy(const std::string &_name) {
|
void RosterManager::removeBuddy(const std::string &_name) {
|
||||||
std::string name = _name;
|
std::string name = _name;
|
||||||
boost::algorithm::to_lower(name);
|
name = boost::locale::to_lower(name);
|
||||||
Buddy *buddy = getBuddy(name);
|
Buddy *buddy = getBuddy(name);
|
||||||
if (!buddy) {
|
if (!buddy) {
|
||||||
LOG4CXX_WARN(logger, m_user->getJID().toString() << ": Tried to remove unknown buddy " << name);
|
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) {
|
void RosterManager::setBuddy(Buddy *buddy) {
|
||||||
std::string name = buddy->getName();
|
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());
|
LOG4CXX_INFO(logger, "Associating buddy " << name << " with " << m_user->getJID().toString());
|
||||||
m_buddies[name] = buddy;
|
m_buddies[name] = buddy;
|
||||||
onBuddySet(buddy);
|
onBuddySet(buddy);
|
||||||
|
@ -131,7 +135,7 @@ void RosterManager::setBuddy(Buddy *buddy) {
|
||||||
|
|
||||||
void RosterManager::unsetBuddy(Buddy *buddy) {
|
void RosterManager::unsetBuddy(Buddy *buddy) {
|
||||||
std::string name = buddy->getName();
|
std::string name = buddy->getName();
|
||||||
boost::algorithm::to_lower(name);
|
name = boost::locale::to_lower(name);
|
||||||
m_buddies.erase(name);
|
m_buddies.erase(name);
|
||||||
if (m_rosterStorage)
|
if (m_rosterStorage)
|
||||||
m_rosterStorage->removeBuddyFromQueue(buddy);
|
m_rosterStorage->removeBuddyFromQueue(buddy);
|
||||||
|
@ -146,7 +150,7 @@ void RosterManager::storeBuddy(Buddy *buddy) {
|
||||||
|
|
||||||
Buddy *RosterManager::getBuddy(const std::string &_name) {
|
Buddy *RosterManager::getBuddy(const std::string &_name) {
|
||||||
std::string name = _name;
|
std::string name = _name;
|
||||||
boost::algorithm::to_lower(name);
|
name = boost::locale::to_lower(name);
|
||||||
return m_buddies[name];
|
return m_buddies[name];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -349,7 +353,7 @@ void RosterManager::setStorageBackend(StorageBackend *storageBackend) {
|
||||||
if (buddy) {
|
if (buddy) {
|
||||||
LOG4CXX_INFO(logger, m_user->getJID().toString() << ": Adding cached buddy " << buddy->getName() << " fom database");
|
LOG4CXX_INFO(logger, m_user->getJID().toString() << ": Adding cached buddy " << buddy->getName() << " fom database");
|
||||||
std::string name = buddy->getName();
|
std::string name = buddy->getName();
|
||||||
boost::algorithm::to_lower(name);
|
name = boost::locale::to_lower(name);
|
||||||
m_buddies[name] = buddy;
|
m_buddies[name] = buddy;
|
||||||
onBuddySet(buddy);
|
onBuddySet(buddy);
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,7 @@ using namespace Transport;
|
||||||
class RosterManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTest {
|
class RosterManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTest {
|
||||||
CPPUNIT_TEST_SUITE(RosterManagerTest);
|
CPPUNIT_TEST_SUITE(RosterManagerTest);
|
||||||
CPPUNIT_TEST(setBuddy);
|
CPPUNIT_TEST(setBuddy);
|
||||||
|
CPPUNIT_TEST(setBuddyUTF8);
|
||||||
CPPUNIT_TEST(setBuddyNoAlias);
|
CPPUNIT_TEST(setBuddyNoAlias);
|
||||||
CPPUNIT_TEST(sendCurrentPresences);
|
CPPUNIT_TEST(sendCurrentPresences);
|
||||||
CPPUNIT_TEST(sendUnavailablePresences);
|
CPPUNIT_TEST(sendUnavailablePresences);
|
||||||
|
@ -85,6 +86,25 @@ class RosterManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTest {
|
||||||
CPPUNIT_ASSERT_EQUAL(std::string(""), item.getName());
|
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() {
|
void setBuddy() {
|
||||||
User *user = userManager->getUser("user@localhost");
|
User *user = userManager->getUser("user@localhost");
|
||||||
add2Buddies();
|
add2Buddies();
|
||||||
|
|
Loading…
Add table
Reference in a new issue