linuxdcpp-team team mailing list archive
-
linuxdcpp-team team
-
Mailing list archive
-
Message #03367
[Branch ~dcplusplus-team/dcplusplus/trunk] Rev 2430: more user frame fun
------------------------------------------------------------
revno: 2430
committer: Jacek Sieka <arnetheduck@xxxxxxxxx>
branch nick: dcplusplus
timestamp: Sat 2011-02-19 20:20:08 +0100
message:
more user frame fun
modified:
dcpp/UploadManager.cpp
dcpp/UploadManager.h
win32/UsersFrame.cpp
win32/UsersFrame.h
--
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/UploadManager.cpp'
--- dcpp/UploadManager.cpp 2011-01-02 17:12:02 +0000
+++ dcpp/UploadManager.cpp 2011-02-19 19:20:08 +0000
@@ -391,9 +391,19 @@
return u;
}
-const UploadManager::FileSet& UploadManager::getWaitingUserFiles(const UserPtr &u) {
- Lock l(cs);
- return waitingFiles.find(u)->second;
+UploadManager::FileSet UploadManager::getWaitingUserFiles(const UserPtr &u) const {
+ Lock l(cs);
+ auto i = waitingFiles.find(u);
+ if(i == waitingFiles.end()) {
+ return FileSet();
+ }
+
+ return i->second;
+}
+
+bool UploadManager::isWaiting(const UserPtr &u) const {
+ Lock l(cs);
+ return waitingFiles.find(u) != waitingFiles.end();
}
void UploadManager::addConnection(UserConnectionPtr conn) {
=== modified file 'dcpp/UploadManager.h'
--- dcpp/UploadManager.h 2011-01-02 17:12:02 +0000
+++ dcpp/UploadManager.h 2011-02-19 19:20:08 +0000
@@ -59,7 +59,8 @@
typedef unordered_map<UserPtr, FileSet, User::Hash> FilesMap;
void clearUserFiles(const UserPtr&);
HintedUserList getWaitingUsers() const;
- const FileSet& getWaitingUserFiles(const UserPtr&);
+ bool isWaiting(const UserPtr &) const;
+ FileSet getWaitingUserFiles(const UserPtr&) const;
/** @internal */
void addConnection(UserConnectionPtr conn);
=== modified file 'win32/UsersFrame.cpp'
--- win32/UsersFrame.cpp 2011-02-19 17:20:34 +0000
+++ win32/UsersFrame.cpp 2011-02-19 19:20:08 +0000
@@ -25,6 +25,8 @@
#include <dcpp/FavoriteManager.h>
#include <dcpp/ClientManager.h>
#include <dcpp/QueueManager.h>
+#include <dcpp/UploadManager.h>
+
#include <dcpp/version.h>
#include <dwt/widgets/Splitter.h>
@@ -68,7 +70,7 @@
users(0),
startup(true)
{
- filterGrid = addChild(Grid::Seed(1, 4));
+ filterGrid = addChild(Grid::Seed(1, 5));
filter = filterGrid->addChild(WinUtil::Seeds::textBox);
filter->onUpdated(std::bind(&UsersFrame::handleFilterUpdated, this));
@@ -85,9 +87,13 @@
showFavs->onClicked(std::bind(&UsersFrame::handleFilterUpdated, this));
showQueue = filterGrid->addChild(WinUtil::Seeds::checkBox);
- showQueue->setText(_T("Download queue"));
+ showQueue->setText(_T("Pending download"));
showQueue->onClicked(std::bind(&UsersFrame::handleFilterUpdated, this));
+ showWaiting = filterGrid->addChild(WinUtil::Seeds::checkBox);
+ showWaiting->setText(_T("Pending upload"));
+ showWaiting->onClicked(std::bind(&UsersFrame::handleFilterUpdated, this));
+
splitter = addChild(VSplitter::Seed(0.7));
if(!userIcons) {
@@ -131,22 +137,14 @@
auto &ou = ClientManager::getInstance()->getUsers();
for(auto i = ou.begin(); i != ou.end(); ++i) {
- if(i->second->isOnline()) {
- addUser(i->second);
- }
- }
- }
-
- {
- auto fu = FavoriteManager::getInstance()->getFavoriteUsers();
-
- for(auto i = fu.begin(); i != fu.end(); ++i) {
- addUser(i->second.getUser());
+ addUser(i->second);
}
}
FavoriteManager::getInstance()->addListener(this);
ClientManager::getInstance()->addListener(this);
+ UploadManager::getInstance()->addListener(this);
+ QueueManager::getInstance()->addListener(this);
initStatus();
@@ -180,6 +178,9 @@
bool UsersFrame::preClosing() {
FavoriteManager::getInstance()->removeListener(this);
ClientManager::getInstance()->removeListener(this);
+ UploadManager::getInstance()->removeListener(this);
+ QueueManager::getInstance()->removeListener(this);
+
return true;
}
@@ -223,46 +224,45 @@
}
void UsersFrame::addUser(const UserPtr& aUser) {
+ if(!show(aUser, true)) {
+ return;
+ }
+
auto ui = userInfos.find(aUser);
if(ui == userInfos.end()) {
auto x = make_shared<UserInfo>(aUser);
- if(matches(*x)){
+ userInfos.insert(std::make_pair(aUser, x));
+
+ if(matches(*x)) {
users->insert(x.get());
}
-
- userInfos.insert(std::make_pair(aUser, std::move(x)));
} else {
- // TODO Update
+ updateUser(aUser);
}
}
void UsersFrame::updateUser(const UserPtr& aUser) {
auto ui = userInfos.find(aUser);
if(ui != userInfos.end()) {
+ if(!show(aUser, true)) {
+ users->erase(ui->second.get());
+ userInfos.erase(ui);
+ return;
+ }
+
ui->second->update(aUser);
if(matches(*ui->second)) {
auto i = users->find(ui->second.get());
if(i != -1) {
users->update(i);
+ } else {
+ users->insert(ui->second.get());
}
}
}
}
-void UsersFrame::removeUser(const UserPtr& aUser) {
- if(FavoriteManager::getInstance()->isFavoriteUser(aUser)) {
- updateUser(aUser);
- return;
- }
-
- auto ui = userInfos.find(aUser);
- if(ui != userInfos.end()) {
- users->erase(ui->second.get());
- userInfos.erase(ui);
- }
-}
-
void UsersFrame::handleSelectionChanged() {
// Clear old items
auto children = userInfo->getChildren<Control>();
@@ -404,21 +404,28 @@
}
bool UsersFrame::matches(const UserInfo &ui) {
-
auto txt = filter->getText();
if(!txt.empty() && Util::findSubString(ui.columns[COLUMN_NICK], txt) == string::npos) {
return false;
}
- if(showOnline->getChecked() && ui.getUser().user->isOnline()) {
- return true;
- }
-
- if(showFavs->getChecked() && FavoriteManager::getInstance()->isFavoriteUser(ui.getUser())) {
- return true;
- }
-
- if(showQueue->getChecked() && QueueManager::getInstance()->getQueued(ui.getUser()) > 0) {
+ return show(ui.getUser(), false);
+}
+
+bool UsersFrame::show(const UserPtr &u, bool any) const {
+ if((any || showOnline->getChecked()) && u->isOnline()) {
+ return true;
+ }
+
+ if((any || showFavs->getChecked()) && FavoriteManager::getInstance()->isFavoriteUser(u)) {
+ return true;
+ }
+
+ if((any || showQueue->getChecked()) && QueueManager::getInstance()->getQueued(u) > 0) {
+ return true;
+ }
+
+ if((any || showWaiting->getChecked()) && UploadManager::getInstance()->isWaiting(u)) {
return true;
}
@@ -430,7 +437,7 @@
}
void UsersFrame::on(UserAdded, const FavoriteUser& aUser) throw() {
- callAsync(std::bind(&UsersFrame::updateUser, this, aUser.getUser()));
+ callAsync(std::bind(&UsersFrame::addUser, this, aUser.getUser()));
}
void UsersFrame::on(UserRemoved, const FavoriteUser& aUser) throw() {
@@ -450,5 +457,31 @@
}
void UsersFrame::on(UserDisconnected, const UserPtr& aUser) throw() {
- callAsync(std::bind(&UsersFrame::removeUser, this, aUser));
+ callAsync(std::bind(&UsersFrame::updateUser, this, aUser));
+}
+
+void UsersFrame::on(WaitingAddFile, const HintedUser& aUser, const string&) throw() {
+ callAsync(std::bind(&UsersFrame::addUser, this, aUser.user));
+}
+
+void UsersFrame::on(WaitingRemoveUser, const HintedUser& aUser) throw() {
+ callAsync(std::bind(&UsersFrame::updateUser, this, aUser.user));
+}
+
+void UsersFrame::on(Added, QueueItem* qi) throw() {
+ for(auto i = qi->getSources().begin(); i != qi->getSources().end(); ++i) {
+ callAsync(std::bind(&UsersFrame::addUser, this, i->getUser().user));
+ }
+}
+
+void UsersFrame::on(SourcesUpdated, QueueItem* qi) throw() {
+ for(auto i = qi->getSources().begin(); i != qi->getSources().end(); ++i) {
+ callAsync(std::bind(&UsersFrame::updateUser, this, i->getUser().user));
+ }
+}
+
+void UsersFrame::on(Removed, QueueItem* qi) throw() {
+ for(auto i = qi->getSources().begin(); i != qi->getSources().end(); ++i) {
+ callAsync(std::bind(&UsersFrame::updateUser, this, i->getUser().user));
+ }
}
=== modified file 'win32/UsersFrame.h'
--- win32/UsersFrame.h 2011-02-19 15:32:03 +0000
+++ win32/UsersFrame.h 2011-02-19 19:20:08 +0000
@@ -21,6 +21,8 @@
#include <dcpp/FavoriteManagerListener.h>
#include <dcpp/ClientManagerListener.h>
+#include <dcpp/UploadManagerListener.h>
+#include <dcpp/QueueManagerListener.h>
#include "StaticFrame.h"
#include "WinUtil.h"
@@ -33,6 +35,8 @@
public StaticFrame<UsersFrame>,
private FavoriteManagerListener,
private ClientManagerListener,
+ private UploadManagerListener,
+ private QueueManagerListener,
public AspectUserInfo<UsersFrame>
{
typedef StaticFrame<UsersFrame> BaseType;
@@ -128,6 +132,7 @@
CheckBoxPtr showFavs;
CheckBoxPtr showOnline;
CheckBoxPtr showQueue;
+ CheckBoxPtr showWaiting;
static dwt::ImageListPtr userIcons;
@@ -138,7 +143,6 @@
void addUser(const UserPtr& aUser);
void updateUser(const UserPtr& aUser);
- void removeUser(const UserPtr& aUser);
void handleDescription();
void handleRemove();
@@ -150,6 +154,8 @@
void handleFilterUpdated();
bool matches(const UserInfo& ui);
+ bool show(const UserPtr& u, bool any) const;
+
// AspectUserInfo
UserInfoList selectedUsersImpl() const;
@@ -162,6 +168,15 @@
virtual void on(UserConnected, const UserPtr& aUser) throw();
virtual void on(UserUpdated, const UserPtr& aUser) throw();
virtual void on(UserDisconnected, const UserPtr& aUser) throw();
+
+ // UploadManagerListener
+ virtual void on(WaitingAddFile, const HintedUser&, const string&) throw();
+ virtual void on(WaitingRemoveUser, const HintedUser&) throw();
+
+ // QueueManagerListener
+ virtual void on(Added, QueueItem*) throw();
+ virtual void on(SourcesUpdated, QueueItem*) throw();
+ virtual void on(Removed, QueueItem*) throw();
};
#endif // !defined(USERS_FRAME_H)