linuxdcpp-team team mailing list archive
-
linuxdcpp-team team
-
Mailing list archive
-
Message #04657
[Branch ~dcplusplus-team/dcplusplus/trunk] Rev 2642: Allow choosing which hub to pm through
------------------------------------------------------------
revno: 2642
committer: Jacek Sieka <arnetheduck@xxxxxxxxx>
branch nick: dcplusplus
timestamp: Thu 2011-10-20 23:14:24 +0900
message:
Allow choosing which hub to pm through
modified:
dcpp/ClientManager.cpp
dcpp/ClientManager.h
dcpp/FavoriteManager.cpp
dcpp/QueueManager.cpp
dcpp/SearchManager.cpp
dcpp/Transfer.cpp
win32/DirectoryListingFrame.cpp
win32/PrivateFrame.cpp
win32/PrivateFrame.h
win32/SearchFrame.cpp
--
lp:dcplusplus
https://code.launchpad.net/~dcplusplus-team/dcplusplus/trunk
Your team Dcplusplus-team is subscribed to branch lp:dcplusplus.
To unsubscribe from this branch go to https://code.launchpad.net/~dcplusplus-team/dcplusplus/trunk/+edit-subscription
=== modified file 'dcpp/ClientManager.cpp'
--- dcpp/ClientManager.cpp 2011-09-30 11:33:12 +0000
+++ dcpp/ClientManager.cpp 2011-10-20 14:14:24 +0000
@@ -78,8 +78,8 @@
return onlineUsers.size();
}
-StringList ClientManager::getHubs(const CID& cid, const string& hintUrl) {
- return getHubs(cid, hintUrl, FavoriteManager::getInstance()->isPrivate(hintUrl));
+StringList ClientManager::getHubUrls(const CID& cid, const string& hintUrl) {
+ return getHubUrls(cid, hintUrl, FavoriteManager::getInstance()->isPrivate(hintUrl));
}
StringList ClientManager::getHubNames(const CID& cid, const string& hintUrl) {
@@ -90,7 +90,7 @@
return getNicks(cid, hintUrl, FavoriteManager::getInstance()->isPrivate(hintUrl));
}
-StringList ClientManager::getHubs(const CID& cid, const string& hintUrl, bool priv) {
+StringList ClientManager::getHubUrls(const CID& cid, const string& hintUrl, bool priv) {
Lock l(cs);
StringList lst;
if(!priv) {
@@ -150,6 +150,22 @@
return StringList(ret.begin(), ret.end());
}
+StringPairList ClientManager::getHubs(const CID& cid, const string& hintUrl, bool priv) {
+ Lock l(cs);
+ StringPairList lst;
+ if(!priv) {
+ auto op = onlineUsers.equal_range(cid);
+ for(auto i = op.first; i != op.second; ++i) {
+ lst.push_back(make_pair(i->second->getClient().getHubUrl(), i->second->getClient().getHubName()));
+ }
+ } else {
+ OnlineUser* u = findOnlineUserHint(cid, hintUrl);
+ if(u)
+ lst.push_back(make_pair(u->getClient().getHubUrl(), u->getClient().getHubName()));
+ }
+ return lst;
+}
+
vector<Identity> ClientManager::getIdentities(const UserPtr &u) const {
Lock l(cs);
auto op = onlineUsers.equal_range(u->getCID());
=== modified file 'dcpp/ClientManager.h'
--- dcpp/ClientManager.h 2011-09-30 11:33:12 +0000
+++ dcpp/ClientManager.h 2011-10-20 14:14:24 +0000
@@ -55,18 +55,20 @@
size_t getUserCount() const;
int64_t getAvailable() const;
- StringList getHubs(const CID& cid, const string& hintUrl);
- StringList getHubNames(const CID& cid, const string& hintUrl);
- StringList getNicks(const CID& cid, const string& hintUrl);
+ StringList getHubUrls(const CID& cid, const string& hintUrl = Util::emptyString);
+ StringList getHubNames(const CID& cid, const string& hintUrl = Util::emptyString);
+ StringList getNicks(const CID& cid, const string& hintUrl = Util::emptyString);
string getField(const CID& cid, const string& hintUrl, const char* field) const;
- StringList getHubs(const CID& cid, const string& hintUrl, bool priv);
+ StringList getHubUrls(const CID& cid, const string& hintUrl, bool priv);
StringList getHubNames(const CID& cid, const string& hintUrl, bool priv);
StringList getNicks(const CID& cid, const string& hintUrl, bool priv);
StringList getNicks(const HintedUser& user) { return getNicks(user.user->getCID(), user.hint); }
StringList getHubNames(const HintedUser& user) { return getHubNames(user.user->getCID(), user.hint); }
- StringList getHubs(const HintedUser& user) { return getHubs(user.user->getCID(), user.hint); }
+ StringList getHubUrls(const HintedUser& user) { return getHubUrls(user.user->getCID(), user.hint); }
+
+ StringPairList getHubs(const CID& cid, const string& hintUrl, bool priv);
vector<Identity> getIdentities(const UserPtr &u) const;
=== modified file 'dcpp/FavoriteManager.cpp'
--- dcpp/FavoriteManager.cpp 2011-10-13 13:43:14 +0000
+++ dcpp/FavoriteManager.cpp 2011-10-20 14:14:24 +0000
@@ -164,8 +164,8 @@
{
Lock l(cs);
if(users.find(aUser->getCID()) == users.end()) {
- StringList urls = ClientManager::getInstance()->getHubs(aUser->getCID(), Util::emptyString);
- StringList nicks = ClientManager::getInstance()->getNicks(aUser->getCID(), Util::emptyString);
+ StringList urls = ClientManager::getInstance()->getHubUrls(aUser->getCID());
+ StringList nicks = ClientManager::getInstance()->getNicks(aUser->getCID());
/// @todo make this an error probably...
if(urls.empty())
=== modified file 'dcpp/QueueManager.cpp'
--- dcpp/QueueManager.cpp 2011-09-30 11:33:12 +0000
+++ dcpp/QueueManager.cpp 2011-10-20 14:14:24 +0000
@@ -1802,7 +1802,7 @@
}
hubNames.push_back(Util::toString(temp));
- temp = ClientManager::getInstance()->getHubs(*i);
+ temp = ClientManager::getInstance()->getHubUrls(*i);
if(temp.empty()) {
temp.push_back(_("Offline"));
}
=== modified file 'dcpp/SearchManager.cpp'
--- dcpp/SearchManager.cpp 2011-09-04 15:20:46 +0000
+++ dcpp/SearchManager.cpp 2011-10-20 14:14:24 +0000
@@ -313,9 +313,9 @@
if(!file.empty() && freeSlots != -1 && size != -1) {
/// @todo get the hub this was sent from, to be passed as a hint? (eg by using the token?)
- StringList names = ClientManager::getInstance()->getHubNames(from->getCID(), Util::emptyString);
+ StringList names = ClientManager::getInstance()->getHubNames(from->getCID());
string hubName = names.empty() ? _("Offline") : Util::toString(names);
- StringList hubs = ClientManager::getInstance()->getHubs(from->getCID(), Util::emptyString);
+ StringList hubs = ClientManager::getInstance()->getHubUrls(from->getCID());
string hub = hubs.empty() ? _("Offline") : Util::toString(hubs);
SearchResult::Types type = (file[file.length() - 1] == '\\' ? SearchResult::TYPE_DIRECTORY : SearchResult::TYPE_FILE);
=== modified file 'dcpp/Transfer.cpp'
--- dcpp/Transfer.cpp 2011-09-30 11:33:12 +0000
+++ dcpp/Transfer.cpp 2011-10-20 14:14:24 +0000
@@ -80,7 +80,7 @@
if(hubNames.empty())
hubNames.push_back(_("Offline"));
params["hub"] = Util::toString(hubNames);
- StringList hubs = ClientManager::getInstance()->getHubs(aSource.getUser()->getCID(), aSource.getHubUrl());
+ StringList hubs = ClientManager::getInstance()->getHubUrls(aSource.getUser()->getCID(), aSource.getHubUrl());
if(hubs.empty())
hubs.push_back(_("Offline"));
params["hubURL"] = Util::toString(hubs);
=== modified file 'win32/DirectoryListingFrame.cpp'
--- win32/DirectoryListingFrame.cpp 2011-10-17 19:39:46 +0000
+++ win32/DirectoryListingFrame.cpp 2011-10-20 14:14:24 +0000
@@ -566,7 +566,7 @@
}
void DirectoryListingFrame::addUserCommands(const MenuPtr& parent) {
- prepareMenu(parent, UserCommand::CONTEXT_FILELIST, ClientManager::getInstance()->getHubs(dl->getUser().user->getCID(), dl->getUser().hint));
+ prepareMenu(parent, UserCommand::CONTEXT_FILELIST, ClientManager::getInstance()->getHubUrls(dl->getUser()));
}
void DirectoryListingFrame::addShellPaths(const ShellMenuPtr& menu, const vector<ItemInfo*>& sel) {
=== modified file 'win32/PrivateFrame.cpp'
--- win32/PrivateFrame.cpp 2011-10-10 20:18:18 +0000
+++ win32/PrivateFrame.cpp 2011-10-20 14:14:24 +0000
@@ -18,6 +18,7 @@
#include "stdafx.h"
+#include <boost/range/algorithm/for_each.hpp>
#include "PrivateFrame.h"
#include "HoldRedraw.h"
@@ -33,6 +34,8 @@
using dwt::Grid;
using dwt::GridInfo;
+using boost::range::for_each;
+
const string PrivateFrame::id = "PM";
const string& PrivateFrame::getId() const { return id; }
@@ -141,19 +144,20 @@
message->onChar([this](int c) { return handleMessageChar(c); });
initStatus();
+ hubBox = addChild(WinUtil::Seeds::comboBoxStatic);
+
status->onDblClicked(STATUS_STATUS, [this] { openLog(); });
- updateOnlineStatus();
-
initAccels();
layout();
readLog(logPath, SETTING(PM_LAST_LOG_LINES));
- ClientManager::getInstance()->addListener(this);
-
- callAsync([this] { updateOnlineStatus(); });
+ callAsync([this] {
+ ClientManager::getInstance()->addListener(this);
+ updateOnlineStatus();
+ });
frames.insert(std::make_pair(replyTo.getUser(), this));
@@ -213,7 +217,7 @@
const CID& cid = replyTo.getUser().user->getCID();
const string& hint = replyTo.getUser().hint;
params["hubNI"] = [&] { return Util::toString(ClientManager::getInstance()->getHubNames(cid, hint, priv)); };
- params["hubURL"] = [&] { return Util::toString(ClientManager::getInstance()->getHubs(cid, hint, priv)); };
+ params["hubURL"] = [&] { return Util::toString(ClientManager::getInstance()->getHubUrls(cid, hint, priv)); };
params["userCID"] = [&cid] { return cid.toBase32(); };
params["userNI"] = [&] { return ClientManager::getInstance()->getNicks(cid, hint, priv)[0]; };
params["myCID"] = [] { return ClientManager::getInstance()->getMe()->getCID().toBase32(); };
@@ -238,12 +242,35 @@
const CID& cid = replyTo.getUser().user->getCID();
const string& hint = replyTo.getUser().hint;
- pair<tstring, bool> hubs = WinUtil::getHubNames(cid, hint, priv);
-
- setText(WinUtil::getNicks(cid, hint, priv) + _T(" - ") + hubs.first);
-
- online = hubs.second;
+ pair<tstring, bool> hubNames = WinUtil::getHubNames(cid, hint, priv);
+
+ setText(WinUtil::getNicks(cid, hint, priv) + _T(" - ") + hubNames.first);
+
+ online = hubNames.second;
setIcon(online ? IDI_PRIVATE : IDI_PRIVATE_OFF);
+
+ hubs = ClientManager::getInstance()->getHubs(cid, hint, priv);
+ hubBox->clear();
+
+ if(hubs.empty()) {
+ hubBox->setEnabled(false);
+ } else {
+ hubBox->setEnabled(true);
+
+ for_each(hubs, [&](const StringPair &hub) {
+ auto idx = hubBox->addValue(Text::toT(hub.second));
+ if(hub.first == replyTo.getUser().hint) {
+ hubBox->setSelected(idx);
+ }
+ });
+
+ if(hubBox->getSelected() == -1) {
+ hubBox->setSelected(0);
+ }
+ }
+
+ status->setWidget(STATUS_HUBS, hubBox);
+ status->refresh();
}
void PrivateFrame::enterImpl(const tstring& s) {
@@ -302,7 +329,8 @@
}
void PrivateFrame::sendMessage(const tstring& msg, bool thirdPerson) {
- ClientManager::getInstance()->privateMessage(replyTo.getUser(), Text::fromT(msg), thirdPerson);
+ auto url = hubs[hubBox->getSelected()].first;
+ ClientManager::getInstance()->privateMessage(HintedUser(replyTo.getUser().user, url), Text::fromT(msg), thirdPerson);
}
PrivateFrame::UserInfoList PrivateFrame::selectedUsersImpl() {
@@ -324,7 +352,7 @@
void PrivateFrame::tabMenuImpl(dwt::MenuPtr& menu) {
appendUserItems(getParent(), menu, false, false);
- prepareMenu(menu, UserCommand::CONTEXT_USER, ClientManager::getInstance()->getHubs(replyTo.getUser().user->getCID(),
+ prepareMenu(menu, UserCommand::CONTEXT_USER, ClientManager::getInstance()->getHubUrls(replyTo.getUser().user->getCID(),
replyTo.getUser().hint, priv));
menu->appendSeparator();
}
@@ -338,7 +366,7 @@
menu->setTitle(escapeMenu(getText()), getParent()->getIcon(this));
- prepareMenu(menu, UserCommand::CONTEXT_USER, ClientManager::getInstance()->getHubs(replyTo.getUser().user->getCID(),
+ prepareMenu(menu, UserCommand::CONTEXT_USER, ClientManager::getInstance()->getHubUrls(replyTo.getUser().user->getCID(),
replyTo.getUser().hint, priv));
menu->open(pt);
=== modified file 'win32/PrivateFrame.h'
--- win32/PrivateFrame.h 2011-09-30 11:33:12 +0000
+++ win32/PrivateFrame.h 2011-10-20 14:14:24 +0000
@@ -48,6 +48,7 @@
public:
enum Status {
+ STATUS_HUBS,
STATUS_STATUS,
STATUS_LAST
};
@@ -71,6 +72,8 @@
void sendMessage(const tstring& msg, bool thirdPerson = false);
private:
+ ComboBoxPtr hubBox;
+ StringPairList hubs;
ParamMap ucLineParams;
UserInfoBase replyTo;
=== modified file 'win32/SearchFrame.cpp'
--- win32/SearchFrame.cpp 2011-10-17 19:39:46 +0000
+++ win32/SearchFrame.cpp 2011-10-20 14:14:24 +0000
@@ -435,10 +435,10 @@
}
if(firstHubs && hubs.empty()) {
- hubs = ClientManager::getInstance()->getHubs(sr->getUser()->getCID(), sr->getHubURL());
+ hubs = ClientManager::getInstance()->getHubUrls(sr->getUser()->getCID(), sr->getHubURL());
firstHubs = false;
} else if(!hubs.empty()) {
- Util::intersect(hubs, ClientManager::getInstance()->getHubs(sr->getUser()->getCID(), sr->getHubURL()));
+ Util::intersect(hubs, ClientManager::getInstance()->getHubUrls(sr->getUser()->getCID(), sr->getHubURL()));
}
}