← Back to team overview

linuxdcpp-team team mailing list archive

[Branch ~dcplusplus-team/dcplusplus/trunk] Rev 2927: make HubSettings easier to extend

 

------------------------------------------------------------
revno: 2927
committer: poy <poy@xxxxxxxxxx>
branch nick: trunk
timestamp: Thu 2012-05-24 19:47:25 +0200
message:
  make HubSettings easier to extend
modified:
  dcpp/AdcHub.cpp
  dcpp/Client.cpp
  dcpp/Client.h
  dcpp/HubSettings.cpp
  dcpp/HubSettings.h
  dcpp/NmdcHub.cpp
  dcpp/SettingsManager.cpp
  win32/FavHubGroupsDlg.cpp
  win32/FavHubProperties.cpp
  win32/FavHubsFrame.cpp
  win32/HubFrame.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/AdcHub.cpp'
--- dcpp/AdcHub.cpp	2012-05-23 22:05:22 +0000
+++ dcpp/AdcHub.cpp	2012-05-24 17:47:25 +0000
@@ -966,13 +966,13 @@
 
 	addParam(lastInfoMap, c, "ID", ClientManager::getInstance()->getMyCID().toBase32());
 	addParam(lastInfoMap, c, "PD", ClientManager::getInstance()->getMyPID().toBase32());
-	addParam(lastInfoMap, c, "NI", settings.getNick());
-	addParam(lastInfoMap, c, "DE", settings.getDescription());
+	addParam(lastInfoMap, c, "NI", get(Nick));
+	addParam(lastInfoMap, c, "DE", get(Description));
 	addParam(lastInfoMap, c, "SL", Util::toString(SETTING(SLOTS)));
 	addParam(lastInfoMap, c, "FS", Util::toString(UploadManager::getInstance()->getFreeSlots()));
 	addParam(lastInfoMap, c, "SS", ShareManager::getInstance()->getShareSizeString());
 	addParam(lastInfoMap, c, "SF", Util::toString(ShareManager::getInstance()->getSharedFiles()));
-	addParam(lastInfoMap, c, "EM", settings.getEmail());
+	addParam(lastInfoMap, c, "EM", get(Email));
 	addParam(lastInfoMap, c, "HN", Util::toString(counts[COUNT_NORMAL]));
 	addParam(lastInfoMap, c, "HR", Util::toString(counts[COUNT_REGISTERED]));
 	addParam(lastInfoMap, c, "HO", Util::toString(counts[COUNT_OP]));

=== modified file 'dcpp/Client.cpp'
--- dcpp/Client.cpp	2012-05-23 22:05:22 +0000
+++ dcpp/Client.cpp	2012-05-24 17:47:25 +0000
@@ -71,27 +71,27 @@
 	/// @todo update the nick in ADC hubs?
 	string prevNick;
 	if(!updateNick)
-		prevNick = settings.getNick();
+		prevNick = get(Nick);
 
-	settings = SettingsManager::getInstance()->getHubSettings();
+	*static_cast<HubSettings*>(this) = SettingsManager::getInstance()->getHubSettings();
 
 	auto fav = FavoriteManager::getInstance()->getFavoriteHubEntry(getHubUrl());
 	if(fav) {
-		FavoriteManager::getInstance()->mergeHubSettings(*fav, settings);
+		FavoriteManager::getInstance()->mergeHubSettings(*fav, *this);
 
 		if(!fav->getPassword().empty())
 			setPassword(fav->getPassword());
 	}
 
 	if(updateNick)
-		checkNick(settings.nick);
+		checkNick(get(Nick));
 	else
-		settings.setNick(prevNick);
+		get(Nick) = prevNick;
 }
 
 const string& Client::getUserIp() const {
-	if(!settings.getUserIp().empty()) {
-		return settings.getUserIp();
+	if(!get(UserIp).empty()) {
+		return get(UserIp);
 	}
 	return CONNSETTING(EXTERNAL_IP);
 }

=== modified file 'dcpp/Client.h'
--- dcpp/Client.h	2012-05-23 22:05:22 +0000
+++ dcpp/Client.h	2012-05-24 17:47:25 +0000
@@ -34,7 +34,12 @@
 namespace dcpp {
 
 /** Yes, this should probably be called a Hub */
-class Client : public Speaker<ClientListener>, public BufferedSocketListener, protected TimerManagerListener {
+class Client :
+	public Speaker<ClientListener>,
+	public BufferedSocketListener,
+	protected TimerManagerListener,
+	public HubSettings
+{
 public:
 	virtual void connect();
 	virtual void disconnect(bool graceless);
@@ -85,8 +90,6 @@
 
 	const string& getHubUrl() const { return hubUrl; }
 
-	HubSettings settings;
-
 	GETSET(Identity, myIdentity, MyIdentity);
 	GETSET(Identity, hubIdentity, HubIdentity);
 

=== modified file 'dcpp/HubSettings.cpp'
--- dcpp/HubSettings.cpp	2012-05-23 22:05:22 +0000
+++ dcpp/HubSettings.cpp	2012-05-24 17:47:25 +0000
@@ -21,31 +21,69 @@
 
 namespace dcpp {
 
+const string HubSettings::stringNames[HubStrLast - HubStrFirst] = {
+	"Nick", "UserDescription", "Email", "UserIp" // not "Description" for compat with prev fav hub lists
+};
+const string HubSettings::boolNames[HubBoolLast - HubBoolFirst] = {
+	"ShowJoins", "FavShowJoins"
+};
+
+HubSettings::HubSettings () {
+	// tribools default to false; init them to an indeterminate value.
+	for(auto& setting: bools) {
+		setting = indeterminate;
+	}
+}
+
+const string& HubSettings::get(HubStrSetting setting) const {
+	return strings[setting - HubStrFirst];
+}
+
+const tribool& HubSettings::get(HubBoolSetting setting) const {
+	return bools[setting - HubBoolFirst];
+}
+
+string& HubSettings::get(HubStrSetting setting) {
+	return strings[setting - HubStrFirst];
+}
+
+tribool& HubSettings::get(HubBoolSetting setting) {
+	return bools[setting - HubBoolFirst];
+}
+
 void HubSettings::merge(const HubSettings& sub) {
-	if(!sub.nick.empty()) { nick = sub.nick; }
-	if(!sub.description.empty()) { description = sub.description; }
-	if(!sub.email.empty()) { email = sub.email; }
-	if(!sub.userIp.empty()) { userIp = sub.userIp; }
-	if(!indeterminate(sub.showJoins)) { showJoins = sub.showJoins; }
-	if(!indeterminate(sub.favShowJoins)) { favShowJoins = sub.favShowJoins; }
+	for(uint8_t i = 0; i < HubStrLast - HubStrFirst; ++i) {
+		if(!sub.strings[i].empty()) {
+			strings[i] = sub.strings[i];
+		}
+	}
+	for(uint8_t i = 0; i < HubBoolLast - HubBoolFirst; ++i) {
+		if(!indeterminate(sub.bools[i])) {
+			bools[i] = sub.bools[i];
+		}
+	}
 }
 
 void HubSettings::load(SimpleXML& xml) {
-	nick = xml.getChildAttrib("Nick");
-	description = xml.getChildAttrib("UserDescription"); // not "Description" for compat with prev fav hub lists
-	email = xml.getChildAttrib("Email");
-	userIp = xml.getChildAttrib("UserIp");
-	showJoins = to3bool(xml.getIntChildAttrib("ShowJoins"));
-	favShowJoins = to3bool(xml.getIntChildAttrib("FavShowJoins"));
+	for(uint8_t i = 0; i < HubStrLast - HubStrFirst; ++i) {
+		strings[i] = xml.getChildAttrib(stringNames[i]);
+	}
+	for(uint8_t i = 0; i < HubBoolLast - HubBoolFirst; ++i) {
+		bools[i] = to3bool(xml.getIntChildAttrib(boolNames[i]));
+	}
 }
 
 void HubSettings::save(SimpleXML& xml) const {
-	if(!nick.empty()) { xml.addChildAttrib("Nick", nick); }
-	if(!description.empty()) { xml.addChildAttrib("UserDescription", description); }
-	if(!email.empty()) { xml.addChildAttrib("Email", email); }
-	if(!userIp.empty()) { xml.addChildAttrib("UserIp", userIp); }
-	if(!indeterminate(showJoins)) { xml.addChildAttrib("ShowJoins", toInt(showJoins)); }
-	if(!indeterminate(favShowJoins)) { xml.addChildAttrib("FavShowJoins", toInt(favShowJoins)); }
+	for(uint8_t i = 0; i < HubStrLast - HubStrFirst; ++i) {
+		if(!strings[i].empty()) {
+			xml.addChildAttrib(stringNames[i], strings[i]);
+		}
+	}
+	for(uint8_t i = 0; i < HubBoolLast - HubBoolFirst; ++i) {
+		if(!indeterminate(bools[i])) {
+			xml.addChildAttrib(boolNames[i], toInt(bools[i]));
+		}
+	}
 }
 
 } // namespace dcpp

=== modified file 'dcpp/HubSettings.h'
--- dcpp/HubSettings.h	2012-05-23 22:05:22 +0000
+++ dcpp/HubSettings.h	2012-05-24 17:47:25 +0000
@@ -21,7 +21,6 @@
 
 #include <string>
 
-#include "GetSet.h"
 #include "SimpleXML.h"
 #include "tribool.h"
 
@@ -33,7 +32,34 @@
 favorite hub group; per favorite hub entry. */
 struct HubSettings
 {
-	HubSettings () : showJoins(indeterminate), favShowJoins(indeterminate) { }
+	enum HubStrSetting {
+		HubStrFirst,
+
+		Nick = HubStrFirst,
+		Description,
+		Email,
+		UserIp,
+		// don't forget to edit stringNames in HubSettings.cpp when adding a def here!
+
+		HubStrLast
+	};
+
+	enum HubBoolSetting {
+		HubBoolFirst = HubStrLast + 1,
+
+		ShowJoins = HubBoolFirst,
+		FavShowJoins,
+		// don't forget to edit boolNames in HubSettings.cpp when adding a def here!
+
+		HubBoolLast
+	};
+
+	HubSettings();
+
+	const string& get(HubStrSetting setting) const;
+	const tribool& get(HubBoolSetting setting) const;
+	string& get(HubStrSetting setting);
+	tribool& get(HubBoolSetting setting);
 
 	/** Apply a set of sub-settings that may override current ones. Strings are overridden when not
 	null. Tribools are overridden when not in an indeterminate state. */
@@ -42,17 +68,12 @@
 	void load(SimpleXML& xml);
 	void save(SimpleXML& xml) const;
 
-	GETSET(string, nick, Nick);
-	GETSET(string, description, Description);
-	GETSET(string, email, Email);
-	GETSET(string, userIp, UserIp);
-
-	/* don't forget to init new tribools to indeterminate in the constructor! they default to false
-	otherwise. */
-	tribool showJoins;
-	tribool favShowJoins;
-
-	friend class Client;
+private:
+	static const string stringNames[HubStrLast - HubStrFirst];
+	static const string boolNames[HubBoolLast - HubBoolFirst];
+
+	string strings[HubStrLast - HubStrFirst];
+	tribool bools[HubBoolLast - HubBoolFirst];
 };
 
 } // namespace dcpp

=== modified file 'dcpp/NmdcHub.cpp'
--- dcpp/NmdcHub.cpp	2012-05-23 22:05:22 +0000
+++ dcpp/NmdcHub.cpp	2012-05-24 17:47:25 +0000
@@ -80,7 +80,7 @@
 	}
 
 	UserPtr p;
-	if(aNick == settings.getNick()) {
+	if(aNick == get(Nick)) {
 		p = ClientManager::getInstance()->getMe();
 	} else {
 		p = ClientManager::getInstance()->getUser(aNick, getHubUrl());
@@ -555,7 +555,7 @@
 			}
 
 			key(CryptoManager::getInstance()->makeKey(lock));
-			OnlineUser& ou = getUser(settings.getNick());
+			OnlineUser& ou = getUser(get(Nick));
 			validateNick(ou.getIdentity().getNick());
 		}
 	} else if(cmd == "$Hello") {
@@ -807,11 +807,11 @@
 
 	string uMin = (SETTING(MIN_UPLOAD_SPEED) == 0) ? Util::emptyString : tmp5 + Util::toString(SETTING(MIN_UPLOAD_SPEED));
 	string myInfoA =
-		"$MyINFO $ALL " + fromUtf8(getMyNick()) + " " + fromUtf8(escape(settings.getDescription())) +
+		"$MyINFO $ALL " + fromUtf8(getMyNick()) + " " + fromUtf8(escape(get(Description))) +
 		tmp1 + VERSIONSTRING + tmp2 + modeChar + tmp3 + getCounts();
 	string myInfoB = tmp4 + Util::toString(SETTING(SLOTS));
 	string myInfoC = uMin +
-		">$ $" + uploadSpeed + "\x01$" + fromUtf8(escape(settings.getEmail())) + '$';
+		">$ $" + uploadSpeed + "\x01$" + fromUtf8(escape(get(Email))) + '$';
 	string myInfoD = ShareManager::getInstance()->getShareSizeString() + "$|";
 	// we always send A and C; however, B (slots) and D (share size) can frequently change so we delay them if needed
  	if(lastMyInfoA != myInfoA || lastMyInfoC != myInfoC ||

=== modified file 'dcpp/SettingsManager.cpp'
--- dcpp/SettingsManager.cpp	2012-05-16 11:34:47 +0000
+++ dcpp/SettingsManager.cpp	2012-05-24 17:47:25 +0000
@@ -565,11 +565,11 @@
 
 HubSettings SettingsManager::getHubSettings() const {
 	HubSettings ret;
-	ret.setNick(get(NICK));
-	ret.setDescription(get(DESCRIPTION));
-	ret.setEmail(get(EMAIL));
-	ret.showJoins = getBool(SHOW_JOINS);
-	ret.favShowJoins = getBool(FAV_SHOW_JOINS);
+	ret.get(HubSettings::Nick) = get(NICK);
+	ret.get(HubSettings::Description) = get(DESCRIPTION);
+	ret.get(HubSettings::Email) = get(EMAIL);
+	ret.get(HubSettings::ShowJoins) = getBool(SHOW_JOINS);
+	ret.get(HubSettings::FavShowJoins) = getBool(FAV_SHOW_JOINS);
 	return ret;
 }
 

=== modified file 'win32/FavHubGroupsDlg.cpp'
--- win32/FavHubGroupsDlg.cpp	2012-05-23 22:05:22 +0000
+++ win32/FavHubGroupsDlg.cpp	2012-05-24 17:47:25 +0000
@@ -225,12 +225,12 @@
 		settings = group.second;
 	}
 	edit->setText(text);
-	nick->setText(Text::toT(settings.getNick()));
-	description->setText(Text::toT(settings.getDescription()));
-	email->setText(Text::toT(settings.getEmail()));
-	userIp->setText(Text::toT(settings.getUserIp()));
-	showJoins->setSelected(toInt(settings.showJoins));
-	favShowJoins->setSelected(toInt(settings.favShowJoins));
+	nick->setText(Text::toT(settings.get(HubSettings::Nick)));
+	description->setText(Text::toT(settings.get(HubSettings::Description)));
+	email->setText(Text::toT(settings.get(HubSettings::Email)));
+	userIp->setText(Text::toT(settings.get(HubSettings::UserIp)));
+	showJoins->setSelected(toInt(settings.get(HubSettings::ShowJoins)));
+	favShowJoins->setSelected(toInt(settings.get(HubSettings::FavShowJoins)));
 }
 
 void FavHubGroupsDlg::handleAdd() {
@@ -286,12 +286,12 @@
 
 HubSettings FavHubGroupsDlg::getSettings() const {
 	HubSettings settings;
-	settings.setNick(Text::fromT(nick->getText()));
-	settings.setDescription(Text::fromT(description->getText()));
-	settings.setEmail(Text::fromT(email->getText()));
-	settings.setUserIp(Text::fromT(userIp->getText()));
-	settings.showJoins = to3bool(showJoins->getSelected());
-	settings.favShowJoins = to3bool(favShowJoins->getSelected());
+	settings.get(HubSettings::Nick) = Text::fromT(nick->getText());
+	settings.get(HubSettings::Description) = Text::fromT(description->getText());
+	settings.get(HubSettings::Email) = Text::fromT(email->getText());
+	settings.get(HubSettings::UserIp) = Text::fromT(userIp->getText());
+	settings.get(HubSettings::ShowJoins) = to3bool(showJoins->getSelected());
+	settings.get(HubSettings::FavShowJoins) = to3bool(favShowJoins->getSelected());
 	return settings;
 }
 

=== modified file 'win32/FavHubProperties.cpp'
--- win32/FavHubProperties.cpp	2012-05-23 22:05:22 +0000
+++ win32/FavHubProperties.cpp	2012-05-24 17:47:25 +0000
@@ -99,7 +99,7 @@
 
 		cur->addChild(Label::Seed(T_("Nick")))->setHelpId(IDH_FAVORITE_HUB_NICK);
 		nick = cur->addChild(WinUtil::Seeds::Dialog::textBox);
-		nick->setText(Text::toT(entry->getNick()));
+		nick->setText(Text::toT(entry->get(HubSettings::Nick)));
 		nick->setHelpId(IDH_FAVORITE_HUB_NICK);
 		WinUtil::preventSpaces(nick);
 
@@ -112,17 +112,17 @@
 
 		cur->addChild(Label::Seed(T_("Description")))->setHelpId(IDH_FAVORITE_HUB_USER_DESC);
 		description = cur->addChild(WinUtil::Seeds::Dialog::textBox);
-		description->setText(Text::toT(entry->getDescription()));
+		description->setText(Text::toT(entry->get(HubSettings::Description)));
 		description->setHelpId(IDH_FAVORITE_HUB_USER_DESC);
 
 		cur->addChild(Label::Seed(T_("Email")))->setHelpId(IDH_FAVORITE_HUB_EMAIL);
 		email = cur->addChild(WinUtil::Seeds::Dialog::textBox);
-		email->setText(Text::toT(entry->getEmail()));
+		email->setText(Text::toT(entry->get(HubSettings::Email)));
 		email->setHelpId(IDH_FAVORITE_HUB_EMAIL);
 
 		cur->addChild(Label::Seed(T_("External / WAN IP")))->setHelpId(IDH_FAVORITE_HUB_USER_IP);
 		userIp = cur->addChild(WinUtil::Seeds::Dialog::textBox);
-		userIp->setText(Text::toT(entry->getUserIp()));
+		userIp->setText(Text::toT(entry->get(HubSettings::UserIp)));
 		userIp->setHelpId(IDH_FAVORITE_HUB_USER_IP);
 		WinUtil::preventSpaces(userIp);
 	}
@@ -136,12 +136,12 @@
 		cur->addChild(Label::Seed(T_("Show joins / parts in chat by default")));
 		showJoins = cur->addChild(WinUtil::Seeds::Dialog::comboBox);
 		WinUtil::fillTriboolCombo(showJoins);
-		showJoins->setSelected(toInt(entry->showJoins));
+		showJoins->setSelected(toInt(entry->get(HubSettings::ShowJoins)));
 
 		cur->addChild(Label::Seed(T_("Only show joins / parts for favorite users")));
 		favShowJoins = cur->addChild(WinUtil::Seeds::Dialog::comboBox);
 		WinUtil::fillTriboolCombo(favShowJoins);
-		favShowJoins->setSelected(toInt(entry->favShowJoins));
+		favShowJoins->setSelected(toInt(entry->get(HubSettings::FavShowJoins)));
 	}
 
 	{
@@ -184,13 +184,13 @@
 	entry->setServer(Text::fromT(addressText));
 	entry->setName(Text::fromT(name->getText()));
 	entry->setHubDescription(Text::fromT(hubDescription->getText()));
-	entry->setNick(Text::fromT(nick->getText()));
+	entry->get(HubSettings::Nick) = Text::fromT(nick->getText());
 	entry->setPassword(Text::fromT(password->getText()));
-	entry->setDescription(Text::fromT(description->getText()));
-	entry->setEmail(Text::fromT(email->getText()));
-	entry->setUserIp(Text::fromT(userIp->getText()));
-	entry->showJoins = to3bool(showJoins->getSelected());
-	entry->favShowJoins = to3bool(favShowJoins->getSelected());
+	entry->get(HubSettings::Description) = Text::fromT(description->getText());
+	entry->get(HubSettings::Email) = Text::fromT(email->getText());
+	entry->get(HubSettings::UserIp) = Text::fromT(userIp->getText());
+	entry->get(HubSettings::ShowJoins) = to3bool(showJoins->getSelected());
+	entry->get(HubSettings::FavShowJoins) = to3bool(favShowJoins->getSelected());
 	entry->setGroup(Text::fromT(groups->getText()));
 	FavoriteManager::getInstance()->save();
 	endDialog(IDOK);

=== modified file 'win32/FavHubsFrame.cpp'
--- win32/FavHubsFrame.cpp	2012-05-15 23:26:22 +0000
+++ win32/FavHubsFrame.cpp	2012-05-24 17:47:25 +0000
@@ -405,10 +405,10 @@
 		TStringList l;
 		l.push_back(Text::toT(entry->getName()));
 		l.push_back(Text::toT(entry->getHubDescription()));
-		l.push_back(Text::toT(entry->getNick()));
+		l.push_back(Text::toT(entry->get(HubSettings::Nick)));
 		l.emplace_back(entry->getPassword().size(), '*');
 		l.push_back(Text::toT(entry->getServer()));
-		l.push_back(Text::toT(entry->getDescription()));
+		l.push_back(Text::toT(entry->get(HubSettings::Description)));
 		l.push_back(Text::toT(group));
 
 		hubs->insert(l, reinterpret_cast<LPARAM>(entry), index);

=== modified file 'win32/HubFrame.cpp'
--- win32/HubFrame.cpp	2012-05-16 11:34:47 +0000
+++ win32/HubFrame.cpp	2012-05-24 17:47:25 +0000
@@ -408,15 +408,15 @@
 			client->password(Text::fromT(param));
 			waitingForPW = false;
 		} else if( Util::stricmp(cmd.c_str(), _T("showjoins")) == 0 ) {
-			client->settings.showJoins = !client->settings.showJoins;
-			if(client->settings.showJoins) {
+			client->get(HubSettings::ShowJoins) = !client->get(HubSettings::ShowJoins);
+			if(client->get(HubSettings::ShowJoins)) {
 				addStatus(T_("Join/part showing on"));
 			} else {
 				addStatus(T_("Join/part showing off"));
 			}
 		} else if( Util::stricmp(cmd.c_str(), _T("favshowjoins")) == 0 ) {
-			client->settings.favShowJoins = !client->settings.favShowJoins;
-			if(client->settings.favShowJoins) {
+			client->get(HubSettings::FavShowJoins) = !client->get(HubSettings::FavShowJoins);
+			if(client->get(HubSettings::FavShowJoins)) {
 				addStatus(T_("Join/part of favorite users showing on"));
 			} else {
 				addStatus(T_("Join/part of favorite users showing off"));
@@ -570,14 +570,14 @@
 		} else if(i.first == UPDATE_USER_JOIN) {
 			UserTask& u = static_cast<UserTask&>(*i.second);
 			if(updateUser(u)) {
-				if(client->settings.showJoins || (client->settings.favShowJoins && FavoriteManager::getInstance()->isFavoriteUser(u.user))) {
+				if(client->get(HubSettings::ShowJoins) || (client->get(HubSettings::FavShowJoins) && FavoriteManager::getInstance()->isFavoriteUser(u.user))) {
 					addStatus(str(TF_("Joins: %1%") % Text::toT(u.identity.getNick())));
 				}
 			}
 		} else if(i.first == REMOVE_USER) {
 			UserTask& u = static_cast<UserTask&>(*i.second);
 			removeUser(u.user);
-			if(client->settings.showJoins || (client->settings.favShowJoins && FavoriteManager::getInstance()->isFavoriteUser(u.user))) {
+			if(client->get(HubSettings::ShowJoins) || (client->get(HubSettings::FavShowJoins) && FavoriteManager::getInstance()->isFavoriteUser(u.user))) {
 				addStatus(str(TF_("Parts: %1%") % Text::toT(u.identity.getNick())));
 			}
 		}