linuxdcpp-team team mailing list archive
-
linuxdcpp-team team
-
Mailing list archive
-
Message #01906
[Branch ~linuxdcpp-team/linuxdcpp/trunk] Rev 389: PM tab label now shows when user's nick, hub or online status changes
------------------------------------------------------------
revno: 389
committer: Steven Sheehy <steven.sheehy@xxxxxxxxx>
branch nick: trunk
timestamp: Thu 2010-09-09 20:26:40 -0500
message:
PM tab label now shows when user's nick, hub or online status changes
modified:
Changelog.txt
linux/hub.cc
linux/hub.hh
linux/mainwindow.cc
linux/mainwindow.hh
linux/privatemessage.cc
linux/privatemessage.hh
--
lp:linuxdcpp
https://code.launchpad.net/~linuxdcpp-team/linuxdcpp/trunk
Your team LinuxDC++ Team is subscribed to branch lp:linuxdcpp.
To unsubscribe from this branch go to https://code.launchpad.net/~linuxdcpp-team/linuxdcpp/trunk/+edit-subscription
=== modified file 'Changelog.txt'
--- Changelog.txt 2010-09-05 06:03:16 +0000
+++ Changelog.txt 2010-09-10 01:26:40 +0000
@@ -59,6 +59,8 @@
[2010-09-04] Renamed Nick to User for consistency and grammar. (Steven)
[2010-09-04] Show preferences dialog on initial startup. (Steven)
[2010-09-05] lp#308683: Fixed downloading files multiple times when grouping by TTH. (Steven)
+[2010-09-07] Added icons to the notebook tab labels. (Steven)
+[2010-09-09] PM tab label now shows when user's nick, hub or online status changes. (Steven)
*** 1.0.3 2009-02-01 ***
[2008-08-10] lp#256236: Fixed a crash on startup when using auto-open options.
=== modified file 'linux/hub.cc'
--- linux/hub.cc 2010-09-08 02:51:30 +0000
+++ linux/hub.cc 2010-09-10 01:26:40 +0000
@@ -201,7 +201,7 @@
return FALSE;
}
-void Hub::updateUser_gui(ParamMap params)
+void Hub::updateUser_gui(ParamMap params, bool showJoin)
{
GtkTreeIter iter;
int64_t shared = Util::toInt64(params["Shared"]);
@@ -239,19 +239,6 @@
totalShared += shared;
userMap[params["User"]] = cid;
- if (BOOLSETTING(SHOW_JOINS))
- {
- addStatusMessage_gui(params["User"] + _(" has joined"));
- string line = params["User"] + _(" has joined hub ") + client->getHubName();
- WulforManager::get()->getMainWindow()->addPrivateStatusMessage_gui(cid, line);
- }
- else if (BOOLSETTING(FAV_SHOW_JOINS))
- {
- typedef Func1<Hub, string> F1;
- F1 *func = new F1(this, &Hub::checkFavoriteUserJoin_client, cid);
- WulforManager::get()->dispatchClientFunc(func);
- }
-
gtk_list_store_insert_with_values(nickStore, &iter, userMap.size(),
nickView.col("User"), params["User"].c_str(),
nickView.col("Shared"), shared,
@@ -266,6 +253,9 @@
-1);
userIters[cid] = iter;
+
+ if (showJoin)
+ addStatusMessage_gui(params["User"] + _(" has joined"));
}
setStatus_gui("statusUsers", Util::toString(userMap.size()) + _(" Users"));
@@ -1457,26 +1447,7 @@
client->reconnect();
}
-void Hub::checkFavoriteUserJoin_client(string cid)
-{
- UserPtr user = ClientManager::getInstance()->findUser(CID(cid));
-
- if (user && FavoriteManager::getInstance()->isFavoriteUser(user))
- {
- string message = WulforUtil::getNicks(user) + _(" has joined");
- typedef Func1<Hub, std::string> F1;
- F1 *func = new F1(this, &Hub::addStatusMessage_gui, message);
- WulforManager::get()->dispatchGuiFunc(func);
-
- string statusMessage = WulforUtil::getNicks(user) + _(" has joined hub ") + client->getHubName();
- typedef Func2<MainWindow, string, string> F2;
- F2 *func2 = new F2(WulforManager::get()->getMainWindow(),
- &MainWindow::addPrivateStatusMessage_gui, cid, statusMessage);
- WulforManager::get()->dispatchGuiFunc(func2);
- }
-}
-
-void Hub::getParams_client(ParamMap ¶ms, Identity &id)
+void Hub::getParams_client(ParamMap ¶ms, const Identity &id)
{
if (id.getUser()->isSet(User::DCPLUSPLUS))
params["Icon"] = "dc++";
@@ -1506,10 +1477,16 @@
params["CID"] = id.getUser()->getCID().toBase32();
}
+bool Hub::showJoins_client(const UserPtr &user)
+{
+ return BOOLSETTING(SHOW_JOINS) || (BOOLSETTING(FAV_SHOW_JOINS) &&
+ FavoriteManager::getInstance()->isFavoriteUser(user));
+}
+
void Hub::on(ClientListener::Connecting, Client *) throw()
{
typedef Func1<Hub, string> F1;
- F1 *f1 = new F1(this, &Hub::addStatusMessage_gui, _("Connecting to ") + client->getHubUrl() + "...");
+ F1 *f1 = new F1(this, &Hub::addStatusMessage_gui, _("Connecting to ") + client->getHubUrl());
WulforManager::get()->dispatchGuiFunc(f1);
}
@@ -1526,9 +1503,11 @@
if (!id.isHidden())
{
+ bool showJoin = showJoins_client(id.getUser());
ParamMap params;
getParams_client(params, id);
- Func1<Hub, ParamMap> *func = new Func1<Hub, ParamMap>(this, &Hub::updateUser_gui, params);
+ typedef Func2<Hub, ParamMap, bool> F2;
+ F2 *func = new F2(this, &Hub::updateUser_gui, params, showJoin);
WulforManager::get()->dispatchGuiFunc(func);
}
}
@@ -1536,17 +1515,18 @@
void Hub::on(ClientListener::UsersUpdated, Client *, const OnlineUserList &list) throw()
{
Identity id;
- typedef Func1<Hub, ParamMap> F1;
- F1 *func;
+ typedef Func2<Hub, ParamMap, bool> F2;
+ F2 *func;
for (OnlineUserList::const_iterator it = list.begin(); it != list.end(); ++it)
{
id = (*it)->getIdentity();
if (!id.isHidden())
{
+ bool showJoin = showJoins_client(id.getUser());
ParamMap params;
getParams_client(params, id);
- func = new F1(this, &Hub::updateUser_gui, params);
+ func = new F2(this, &Hub::updateUser_gui, params, showJoin);
WulforManager::get()->dispatchGuiFunc(func);
}
}
@@ -1559,17 +1539,10 @@
typedef Func1<Hub, string> F1;
F1 *func;
- if (BOOLSETTING(SHOW_JOINS) || (BOOLSETTING(FAV_SHOW_JOINS) &&
- FavoriteManager::getInstance()->isFavoriteUser(user.getUser())))
+ if (showJoins_client(user.getUser()))
{
func = new F1(this, &Hub::addStatusMessage_gui, nick + _(" has quit"));
WulforManager::get()->dispatchGuiFunc(func);
-
- string statusMessage = nick + _(" has quit hub ") + client->getHubName();
- typedef Func2<MainWindow, string, string> F2;
- F2 *func2 = new F2(WulforManager::get()->getMainWindow(),
- &MainWindow::addPrivateStatusMessage_gui, cid, statusMessage);
- WulforManager::get()->dispatchGuiFunc(func2);
}
func = new F1(this, &Hub::removeUser_gui, cid);
=== modified file 'linux/hub.hh'
--- linux/hub.hh 2010-08-09 03:11:55 +0000
+++ linux/hub.hh 2010-09-10 01:26:40 +0000
@@ -50,7 +50,7 @@
void setStatus_gui(std::string statusBar, std::string text);
bool findUser_gui(const std::string &cid, GtkTreeIter *iter);
bool findNick_gui(const std::string &nick, GtkTreeIter *iter);
- void updateUser_gui(ParamMap id);
+ void updateUser_gui(ParamMap id, bool showJoin);
void removeUser_gui(std::string cid);
void removeTag_gui(const std::string &nick);
void clearNickList_gui();
@@ -102,9 +102,9 @@
void rebuildHashData_client();
void refreshFileList_client();
void addAsFavorite_client();
- void checkFavoriteUserJoin_client(std::string cid);
void addFavoriteUser_client(const std::string cid);
- void getParams_client(ParamMap &user, dcpp::Identity &id);
+ void getParams_client(ParamMap ¶ms, const dcpp::Identity &id);
+ bool showJoins_client(const dcpp::UserPtr &user);
// Client callbacks
virtual void on(dcpp::ClientListener::Connecting, dcpp::Client *) throw();
=== modified file 'linux/mainwindow.cc'
--- linux/mainwindow.cc 2010-09-05 00:43:46 +0000
+++ linux/mainwindow.cc 2010-09-10 01:26:40 +0000
@@ -615,14 +615,6 @@
raisePage_gui(entry->getContainer());
}
-void MainWindow::addPrivateStatusMessage_gui(string cid, string message)
-{
- BookEntry *entry = findBookEntry(Entry::PRIVATE_MESSAGE, cid);
-
- if (entry != NULL)
- dynamic_cast<PrivateMessage*>(entry)->addStatusMessage_gui(message);
-}
-
void MainWindow::showPublicHubs_gui()
{
BookEntry *entry = findBookEntry(Entry::PUBLIC_HUBS);
=== modified file 'linux/mainwindow.hh'
--- linux/mainwindow.hh 2010-05-30 03:15:23 +0000
+++ linux/mainwindow.hh 2010-09-10 01:26:40 +0000
@@ -71,7 +71,6 @@
void showFinishedUploads_gui();
void showHub_gui(std::string address, std::string encoding = "");
void addPrivateMessage_gui(std::string cid, std::string hubUrl = "", std::string message = "", bool useSetting = FALSE);
- void addPrivateStatusMessage_gui(std::string cid, std::string message = "");
void showPublicHubs_gui();
void showShareBrowser_gui(dcpp::UserPtr user, std::string file, std::string dir, bool useSetting);
Search *addSearch_gui();
=== modified file 'linux/privatemessage.cc'
--- linux/privatemessage.cc 2010-09-08 02:51:30 +0000
+++ linux/privatemessage.cc 2010-09-10 01:26:40 +0000
@@ -30,8 +30,11 @@
using namespace std;
using namespace dcpp;
+const std::string PrivateMessage::USER_AVAILABLE_ICON = "user-available";
+const std::string PrivateMessage::USER_OFFLINE_ICON = "user-offline";
+
PrivateMessage::PrivateMessage(const string &cid, const string &hubUrl):
- BookEntry(Entry::PRIVATE_MESSAGE, WulforUtil::getNicks(cid), "privatemessage.glade", cid),
+ BookEntry(Entry::PRIVATE_MESSAGE, cid, "privatemessage.glade", cid),
cid(cid),
hubUrl(hubUrl),
historyIndex(0),
@@ -80,14 +83,15 @@
gtk_widget_grab_focus(getWidget("entry"));
history.push_back("");
- UserPtr user = ClientManager::getInstance()->findUser(CID(cid));
+ user = ClientManager::getInstance()->findUser(CID(cid));
isBot = user ? user->isSet(User::BOT) : FALSE;
- setLabel_gui(WulforUtil::getNicks(cid) + " [" + WulforUtil::getHubNames(cid) + "]");
+ updateUserStatus_gui(WulforUtil::getNicks(cid), WulforUtil::getHubNames(cid));
}
PrivateMessage::~PrivateMessage()
{
+ ClientManager::getInstance()->removeListener(this);
if (handCursor)
{
gdk_cursor_unref(handCursor);
@@ -97,6 +101,7 @@
void PrivateMessage::show()
{
+ ClientManager::getInstance()->addListener(this);
}
void PrivateMessage::addMessage_gui(string message)
@@ -261,6 +266,14 @@
}
}
+void PrivateMessage::updateUserStatus_gui(string nicks, string hubs, bool online, string statusMessage)
+{
+ setLabel_gui(nicks + " - " + hubs);
+ setIcon_gui(online ? USER_AVAILABLE_ICON : USER_OFFLINE_ICON);
+
+ if (!statusMessage.empty())
+ addStatusMessage_gui(statusMessage);
+}
gboolean PrivateMessage::onFocusIn_gui(GtkWidget *widget, GdkEventFocus *event, gpointer data)
{
@@ -342,6 +355,7 @@
typedef Func0<PrivateMessage> F0;
F0 *func = new F0(pm, &PrivateMessage::addFavoriteUser_client);
WulforManager::get()->dispatchClientFunc(func);
+ pm->addStatusMessage_gui(_("Added user to favorites list"));
}
else if (command == _("getlist"))
{
@@ -354,6 +368,7 @@
typedef Func0<PrivateMessage> F0;
F0 *func = new F0(pm, &PrivateMessage::grantSlot_client);
WulforManager::get()->dispatchClientFunc(func);
+ pm->addStatusMessage_gui(_("Slot granted"));
}
else if (command == _("help"))
{
@@ -561,8 +576,7 @@
void PrivateMessage::sendMessage_client(std::string message)
{
- UserPtr user = ClientManager::getInstance()->findUser(CID(cid));
- if (user && user->isOnline())
+ if (user->isOnline())
{
// FIXME: WTF does the 3rd param (bool thirdPerson) do? A: Used for /me stuff
ClientManager::getInstance()->privateMessage(user, message, false, hubUrl);
@@ -577,26 +591,14 @@
void PrivateMessage::addFavoriteUser_client()
{
- UserPtr user = ClientManager::getInstance()->findUser(CID(cid));
- if (user)
- {
- FavoriteManager::getInstance()->addFavoriteUser(user);
- }
- else
- {
- typedef Func1<PrivateMessage, string> F1;
- F1 *func = new F1(this, &PrivateMessage::addStatusMessage_gui, _("Added user to favorites list"));
- WulforManager::get()->dispatchGuiFunc(func);
- }
+ FavoriteManager::getInstance()->addFavoriteUser(user);
}
void PrivateMessage::getFileList_client()
{
try
{
- UserPtr user = ClientManager::getInstance()->findUser(CID(cid));
- if (user)
- QueueManager::getInstance()->addList(user, hubUrl, QueueItem::FLAG_CLIENT_VIEW);
+ QueueManager::getInstance()->addList(user, hubUrl, QueueItem::FLAG_CLIENT_VIEW);
}
catch (const Exception& e)
{
@@ -608,15 +610,58 @@
void PrivateMessage::grantSlot_client()
{
- UserPtr user = ClientManager::getInstance()->findUser(CID(cid));
- if (user)
- {
- UploadManager::getInstance()->reserveSlot(user, hubUrl);
- }
- else
- {
- typedef Func1<PrivateMessage, string> F1;
- F1 *func = new F1(this, &PrivateMessage::addStatusMessage_gui, _("Slot granted"));
+ UploadManager::getInstance()->reserveSlot(user, hubUrl);
+}
+
+void PrivateMessage::on(ClientManagerListener::UserConnected, const UserPtr& aUser) throw()
+{
+ if (aUser == user)
+ {
+ string statusMessage;
+ string nicks = WulforUtil::getNicks(user); // TODO: Use aUser->hubHint on later cores
+ string hubs = WulforUtil::getHubNames(cid);
+
+ if (BOOLSETTING(SHOW_JOINS) || (BOOLSETTING(FAV_SHOW_JOINS) &&
+ FavoriteManager::getInstance()->isFavoriteUser(user)))
+ {
+ statusMessage = nicks + _(" has joined");
+ }
+
+ typedef Func4<PrivateMessage, string, string, bool, string> F4;
+ F4 *func = new F4(this, &PrivateMessage::updateUserStatus_gui, nicks, hubs, user->isOnline(), statusMessage);
+ WulforManager::get()->dispatchGuiFunc(func);
+ }
+}
+
+void PrivateMessage::on(ClientManagerListener::UserDisconnected, const UserPtr& aUser) throw()
+{
+ if (aUser == user)
+ {
+ string statusMessage;
+ string nicks = WulforUtil::getNicks(user);
+ string hubs = WulforUtil::getHubNames(cid);
+
+ if (BOOLSETTING(SHOW_JOINS) || (BOOLSETTING(FAV_SHOW_JOINS) &&
+ FavoriteManager::getInstance()->isFavoriteUser(user)))
+ {
+ statusMessage = nicks + _(" has quit");
+ }
+
+ typedef Func4<PrivateMessage, string, string, bool, string> F4;
+ F4 *func = new F4(this, &PrivateMessage::updateUserStatus_gui, nicks, hubs, user->isOnline(), statusMessage);
+ WulforManager::get()->dispatchGuiFunc(func);
+ }
+}
+
+void PrivateMessage::on(ClientManagerListener::UserUpdated, const OnlineUser& aUser) throw()
+{
+ if (aUser.getUser() == user)
+ {
+ string nicks = WulforUtil::getNicks(user);
+ string hubs = WulforUtil::getHubNames(cid);
+
+ typedef Func4<PrivateMessage, string, string, bool, string> F4;
+ F4 *func = new F4(this, &PrivateMessage::updateUserStatus_gui, nicks, hubs, user->isOnline(), "");
WulforManager::get()->dispatchGuiFunc(func);
}
}
=== modified file 'linux/privatemessage.hh'
--- linux/privatemessage.hh 2009-08-15 04:40:26 +0000
+++ linux/privatemessage.hh 2010-09-10 01:26:40 +0000
@@ -24,10 +24,12 @@
#include <dcpp/stdinc.h>
#include <dcpp/DCPlusPlus.h>
+#include <dcpp/ClientManagerListener.h>
#include "bookentry.hh"
class PrivateMessage:
- public BookEntry
+ public BookEntry,
+ public dcpp::ClientManagerListener
{
public:
PrivateMessage(const std::string &cid, const std::string &hubUrl);
@@ -42,6 +44,7 @@
// GUI functions
void addLine_gui(const std::string &line);
void updateCursor(GtkWidget *widget);
+ void updateUserStatus_gui(std::string nicks, std::string hubs, bool online = TRUE, std::string statusMessage = "");
// GUI callbacks
static gboolean onFocusIn_gui(GtkWidget *widget, GdkEventFocus *event, gpointer data);
@@ -66,8 +69,16 @@
void getFileList_client();
void grantSlot_client();
+ // Client callbacks
+ virtual void on(dcpp::ClientManagerListener::UserConnected, const dcpp::UserPtr& aUser) throw();
+ virtual void on(dcpp::ClientManagerListener::UserDisconnected, const dcpp::UserPtr& aUser) throw();
+ virtual void on(dcpp::ClientManagerListener::UserUpdated, const dcpp::OnlineUser& aUser) throw();
+
+ static const std::string USER_AVAILABLE_ICON;
+ static const std::string USER_OFFLINE_ICON;
GtkTextBuffer *buffer;
GtkTextMark *mark;
+ dcpp::UserPtr user;
std::string cid;
std::string hubUrl;
bool isBot;