Working buddy rename
This commit is contained in:
parent
ac7bbb6ccc
commit
a6781df77f
9 changed files with 85 additions and 7 deletions
|
@ -118,7 +118,7 @@ class SpectrumNetworkPlugin : public NetworkPlugin {
|
|||
}
|
||||
}
|
||||
|
||||
virtual void handleVCardRequest(const std::string &user, const std::string &legacyName, unsigned int id) {
|
||||
void handleVCardRequest(const std::string &user, const std::string &legacyName, unsigned int id) {
|
||||
PurpleAccount *account = m_sessions[user];
|
||||
if (account) {
|
||||
serv_get_info(purple_account_get_connection(account), legacyName.c_str());
|
||||
|
@ -126,6 +126,18 @@ class SpectrumNetworkPlugin : public NetworkPlugin {
|
|||
}
|
||||
}
|
||||
|
||||
void handleBuddyUpdatedRequest(const std::string &user, const std::string &buddyName, const std::string &alias, const std::string &groups) {
|
||||
PurpleAccount *account = m_sessions[user];
|
||||
if (account) {
|
||||
PurpleBuddy *buddy = purple_find_buddy(account, buddyName.c_str());
|
||||
if (buddy) {
|
||||
purple_blist_alias_buddy(buddy, alias.c_str());
|
||||
purple_blist_server_alias_buddy(buddy, alias.c_str());
|
||||
serv_alias_buddy(buddy);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::map<std::string, PurpleAccount *> m_sessions;
|
||||
std::map<PurpleAccount *, std::string> m_accounts;
|
||||
std::map<std::string, unsigned int> m_vcards;
|
||||
|
|
|
@ -64,6 +64,7 @@ class NetworkPlugin {
|
|||
virtual void handleVCardRequest(const std::string &/*user*/, const std::string &/*legacyName*/, unsigned int /*id*/) {}
|
||||
virtual void handleJoinRoomRequest(const std::string &/*user*/, const std::string &/*room*/, const std::string &/*nickname*/, const std::string &/*pasword*/) {}
|
||||
virtual void handleLeaveRoomRequest(const std::string &/*user*/, const std::string &/*room*/) {}
|
||||
virtual void handleBuddyUpdatedRequest(const std::string &/*user*/, const std::string &/*buddyName*/, const std::string &/*alias*/, const std::string &/*groups*/) {}
|
||||
|
||||
|
||||
private:
|
||||
|
@ -74,6 +75,7 @@ class NetworkPlugin {
|
|||
void handleJoinRoomPayload(const std::string &payload);
|
||||
void handleLeaveRoomPayload(const std::string &payload);
|
||||
void handleVCardPayload(const std::string &payload);
|
||||
void handleBuddyChangedPayload(const std::string &payload);
|
||||
void handleDataRead(const Swift::SafeByteArray&);
|
||||
void _handleConnected(bool error);
|
||||
void handleDisconnected();
|
||||
|
|
|
@ -74,6 +74,10 @@ class NetworkPluginServer {
|
|||
void handleUserReadyToConnect(User *user);
|
||||
void handleUserDestroyed(User *user);
|
||||
|
||||
void handleBuddyUpdated(Buddy *buddy, const Swift::RosterItemPayload &item);
|
||||
void handleBuddyRemoved(Buddy *buddy);
|
||||
void handleBuddyAdded(Buddy *buddy, const Swift::RosterItemPayload &item);
|
||||
|
||||
void handleVCardRequired(User *user, const std::string &name, unsigned int id);
|
||||
|
||||
void send(boost::shared_ptr<Swift::Connection> &, const std::string &data);
|
||||
|
|
|
@ -60,6 +60,8 @@ class RosterManager {
|
|||
|
||||
void setStorageBackend(StorageBackend *storageBackend);
|
||||
|
||||
void storeBuddy(Buddy *buddy);
|
||||
|
||||
Swift::RosterPayload::ref generateRosterPayload();
|
||||
|
||||
/// Returns user associated with this roster.
|
||||
|
|
|
@ -28,12 +28,19 @@
|
|||
namespace Transport {
|
||||
|
||||
class UserManager;
|
||||
class Buddy;
|
||||
|
||||
class RosterResponder : public Swift::Responder<Swift::RosterPayload> {
|
||||
public:
|
||||
RosterResponder(Swift::IQRouter *router, UserManager *userManager);
|
||||
~RosterResponder();
|
||||
|
||||
boost::signal<void (Buddy *, const Swift::RosterItemPayload &item)> onBuddyUpdated;
|
||||
|
||||
boost::signal<void (Buddy *)> onBuddyRemoved;
|
||||
|
||||
boost::signal<void (Buddy *, const Swift::RosterItemPayload &item)> onBuddyAdded;
|
||||
|
||||
private:
|
||||
virtual bool handleGetRequest(const Swift::JID& from, const Swift::JID& to, const std::string& id, boost::shared_ptr<Swift::RosterPayload> payload);
|
||||
virtual bool handleSetRequest(const Swift::JID& from, const Swift::JID& to, const std::string& id, boost::shared_ptr<Swift::RosterPayload> payload);
|
||||
|
|
|
@ -265,6 +265,16 @@ void NetworkPlugin::handleVCardPayload(const std::string &data) {
|
|||
handleVCardRequest(payload.username(), payload.buddyname(), payload.id());
|
||||
}
|
||||
|
||||
void NetworkPlugin::handleBuddyChangedPayload(const std::string &data) {
|
||||
pbnetwork::Buddy payload;
|
||||
if (payload.ParseFromString(data) == false) {
|
||||
// TODO: ERROR
|
||||
return;
|
||||
}
|
||||
|
||||
handleBuddyUpdatedRequest(payload.username(), payload.buddyname(), payload.alias(), payload.groups());
|
||||
}
|
||||
|
||||
void NetworkPlugin::handleDataRead(const Swift::SafeByteArray &data) {
|
||||
m_data.insert(m_data.end(), data.begin(), data.end());
|
||||
|
||||
|
@ -310,6 +320,9 @@ void NetworkPlugin::handleDataRead(const Swift::SafeByteArray &data) {
|
|||
case pbnetwork::WrapperMessage_Type_TYPE_VCARD:
|
||||
handleVCardPayload(wrapper.payload());
|
||||
break;
|
||||
case pbnetwork::WrapperMessage_Type_TYPE_BUDDY_CHANGED:
|
||||
handleBuddyChangedPayload(wrapper.payload());
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -128,6 +128,9 @@ NetworkPluginServer::NetworkPluginServer(Component *component, Config *config, U
|
|||
m_vcardResponder->start();
|
||||
|
||||
m_rosterResponder = new RosterResponder(component->getIQRouter(), userManager);
|
||||
m_rosterResponder->onBuddyAdded.connect(boost::bind(&NetworkPluginServer::handleBuddyAdded, this, _1, _2));
|
||||
m_rosterResponder->onBuddyRemoved.connect(boost::bind(&NetworkPluginServer::handleBuddyRemoved, this, _1));
|
||||
m_rosterResponder->onBuddyUpdated.connect(boost::bind(&NetworkPluginServer::handleBuddyUpdated, this, _1, _2));
|
||||
m_rosterResponder->start();
|
||||
|
||||
m_server = component->getFactories()->getConnectionFactory()->createConnectionServer(10000);
|
||||
|
@ -226,7 +229,7 @@ void NetworkPluginServer::handleBuddyChangedPayload(const std::string &data) {
|
|||
// TODO: ERROR
|
||||
return;
|
||||
}
|
||||
std::cout << payload.buddyname() << "\n";
|
||||
|
||||
User *user = m_userManager->getUser(payload.username());
|
||||
if (!user)
|
||||
return;
|
||||
|
@ -323,7 +326,6 @@ void NetworkPluginServer::handleConvMessagePayload(const std::string &data, bool
|
|||
|
||||
void NetworkPluginServer::handleDataRead(Client *c, const Swift::SafeByteArray &data) {
|
||||
c->data.insert(c->data.end(), data.begin(), data.end());
|
||||
std::cout << "READ\n";
|
||||
while (c->data.size() != 0) {
|
||||
unsigned int expected_size;
|
||||
|
||||
|
@ -344,7 +346,7 @@ void NetworkPluginServer::handleDataRead(Client *c, const Swift::SafeByteArray &
|
|||
continue;
|
||||
}
|
||||
c->data.erase(c->data.begin(), c->data.begin() + 4 + expected_size);
|
||||
std::cout << "TYPE " << wrapper.type() << " " << (int) pbnetwork::WrapperMessage_Type_TYPE_CONNECTED << " " << c->data.size() << "\n";
|
||||
|
||||
switch(wrapper.type()) {
|
||||
case pbnetwork::WrapperMessage_Type_TYPE_CONNECTED:
|
||||
handleConnectedPayload(wrapper.payload());
|
||||
|
@ -518,6 +520,36 @@ void NetworkPluginServer::handleMessageReceived(NetworkConversation *conv, boost
|
|||
send(c->connection, message);
|
||||
}
|
||||
|
||||
void NetworkPluginServer::handleBuddyRemoved(Buddy *buddy) {
|
||||
|
||||
}
|
||||
|
||||
void NetworkPluginServer::handleBuddyUpdated(Buddy *b, const Swift::RosterItemPayload &item) {
|
||||
User *user = b->getRosterManager()->getUser();
|
||||
|
||||
dynamic_cast<LocalBuddy *>(b)->setAlias(item.getName());
|
||||
user->getRosterManager()->storeBuddy(b);
|
||||
|
||||
pbnetwork::Buddy buddy;
|
||||
buddy.set_username(user->getJID().toBare());
|
||||
buddy.set_buddyname(b->getName());
|
||||
buddy.set_alias(b->getAlias());
|
||||
buddy.set_groups(b->getGroups().size() == 0 ? "" : b->getGroups()[0]);
|
||||
buddy.set_status(Swift::StatusShow::None);
|
||||
|
||||
std::string message;
|
||||
buddy.SerializeToString(&message);
|
||||
|
||||
WRAP(message, pbnetwork::WrapperMessage_Type_TYPE_BUDDY_CHANGED);
|
||||
|
||||
Client *c = (Client *) user->getData();
|
||||
send(c->connection, message);
|
||||
}
|
||||
|
||||
void NetworkPluginServer::handleBuddyAdded(Buddy *buddy, const Swift::RosterItemPayload &item) {
|
||||
handleBuddyUpdated(buddy, item);
|
||||
}
|
||||
|
||||
void NetworkPluginServer::handleVCardRequired(User *user, const std::string &name, unsigned int id) {
|
||||
std::cout << "VCARD REQUIRED " << name << " " << id << "\n";
|
||||
pbnetwork::VCard vcard;
|
||||
|
|
|
@ -119,6 +119,12 @@ void RosterManager::unsetBuddy(Buddy *buddy) {
|
|||
onBuddyUnset(buddy);
|
||||
}
|
||||
|
||||
void RosterManager::storeBuddy(Buddy *buddy) {
|
||||
if (m_rosterStorage) {
|
||||
m_rosterStorage->storeBuddy(buddy);
|
||||
}
|
||||
}
|
||||
|
||||
void RosterManager::handleBuddyRosterPushResponse(Swift::ErrorPayload::ref error, const std::string &key) {
|
||||
if (m_buddies[key] != NULL) {
|
||||
m_buddies[key]->buddyChanged();
|
||||
|
|
|
@ -83,10 +83,10 @@ bool RosterResponder::handleSetRequest(const Swift::JID& from, const Swift::JID&
|
|||
Buddy *buddy = user->getRosterManager()->getBuddy(Buddy::JIDToLegacyName(item.getJID()));
|
||||
if (buddy) {
|
||||
if (item.getSubscription() == Swift::RosterItemPayload::Remove) {
|
||||
std::cout << "BUDDY REMOVED\n";
|
||||
onBuddyRemoved(buddy);
|
||||
}
|
||||
else {
|
||||
std::cout << "BUDDY UPDATED\n";
|
||||
onBuddyUpdated(buddy, item);
|
||||
}
|
||||
}
|
||||
else if (item.getSubscription() != Swift::RosterItemPayload::Remove) {
|
||||
|
@ -100,7 +100,7 @@ bool RosterResponder::handleSetRequest(const Swift::JID& from, const Swift::JID&
|
|||
|
||||
buddy = user->getComponent()->getFactory()->createBuddy(user->getRosterManager(), buddyInfo);
|
||||
user->getRosterManager()->setBuddy(buddy);
|
||||
std::cout << "BUDDY ADDED\n";
|
||||
onBuddyAdded(buddy, item);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
Loading…
Add table
Reference in a new issue