From caad82eecc865ff2222c181874811181a9a8809d Mon Sep 17 00:00:00 2001
From: George Hazan <ghazan@miranda.im>
Date: Tue, 19 Feb 2019 16:03:14 +0300
Subject: code cleaning

---
 protocols/JabberG/src/jabber_bookmarks.cpp | 329 +++++++++++++----------------
 protocols/JabberG/src/jabber_chat.cpp      |   2 +-
 protocols/JabberG/src/jabber_groupchat.cpp |  15 +-
 protocols/JabberG/src/jabber_xml.cpp       |   7 +-
 4 files changed, 159 insertions(+), 194 deletions(-)

diff --git a/protocols/JabberG/src/jabber_bookmarks.cpp b/protocols/JabberG/src/jabber_bookmarks.cpp
index aacea692dc..550378b8f7 100644
--- a/protocols/JabberG/src/jabber_bookmarks.cpp
+++ b/protocols/JabberG/src/jabber_bookmarks.cpp
@@ -165,27 +165,114 @@ class CJabberDlgBookmarks : public CJabberDlgBase
 {
 	typedef CJabberDlgBase CSuper;
 
+	CCtrlMButton	m_btnAdd;
+	CCtrlMButton	m_btnEdit;
+	CCtrlMButton	m_btnRemove;
+	CCtrlFilterListView	m_lvBookmarks;
+
 public:
-	CJabberDlgBookmarks(CJabberProto *proto);
+	CJabberDlgBookmarks(CJabberProto *proto) :
+		CSuper(proto, IDD_BOOKMARKS),
+		m_btnAdd(this, IDC_ADD, SKINICON_OTHER_ADDCONTACT, LPGEN("Add")),
+		m_btnEdit(this, IDC_EDIT, SKINICON_OTHER_RENAME, LPGEN("Edit")),
+		m_btnRemove(this, IDC_REMOVE, SKINICON_OTHER_DELETE, LPGEN("Remove")),
+		m_lvBookmarks(this, IDC_BM_LIST, true, true)
+	{
+		m_lvBookmarks.OnItemActivate = Callback(this, &CJabberDlgBookmarks::lvBookmarks_OnDoubleClick);
+		m_btnAdd.OnClick = Callback(this, &CJabberDlgBookmarks::btnAdd_OnClick);
+		m_btnEdit.OnClick = Callback(this, &CJabberDlgBookmarks::btnEdit_OnClick);
+		m_btnRemove.OnClick = Callback(this, &CJabberDlgBookmarks::btnRemove_OnClick);
+	}
 
-	void UpdateData();
+	bool OnInitDialog() override
+	{
+		CSuper::OnInitDialog();
 
-protected:
-	bool OnInitDialog() override;
-	bool OnClose() override;
-	void OnDestroy() override;
-	int Resizer(UTILRESIZECONTROL *urc) override;
+		Window_SetIcon_IcoLib(m_hwnd, g_GetIconHandle(IDI_BOOKMARKS));
 
-	INT_PTR DlgProc(UINT msg, WPARAM wParam, LPARAM lParam) override;
-	void OnProtoCheckOnline(WPARAM wParam, LPARAM lParam);
-	void OnProtoRefresh(WPARAM, LPARAM);
-	void OpenBookmark();
+		m_btnAdd.Disable();
+		m_btnEdit.Disable();
+		m_btnRemove.Disable();
 
-private:
-	CCtrlMButton	m_btnAdd;
-	CCtrlMButton	m_btnEdit;
-	CCtrlMButton	m_btnRemove;
-	CCtrlFilterListView	m_lvBookmarks;
+		m_lvBookmarks.SetExtendedListViewStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_HEADERDRAGDROP | LVS_EX_DOUBLEBUFFER);
+
+		HIMAGELIST hIml = m_lvBookmarks.CreateImageList(LVSIL_SMALL);
+		ImageList_AddIcon_Icolib(hIml, m_proto->LoadIconEx("group"));
+		ImageList_AddIcon_Icolib(hIml, Skin_LoadIcon(SKINICON_EVENT_URL));
+
+		m_lvBookmarks.AddColumn(0, TranslateT("Bookmark Name"), m_proto->getWord("bookmarksWnd_cx0", 120));
+		m_lvBookmarks.AddColumn(1, TranslateT("Address (JID or URL)"), m_proto->getWord("bookmarksWnd_cx1", 210));
+		m_lvBookmarks.AddColumn(2, TranslateT("Nickname"), m_proto->getWord("bookmarksWnd_cx2", 90));
+
+		m_lvBookmarks.EnableGroupView(TRUE);
+		m_lvBookmarks.AddGroup(0, TranslateT("Conferences"));
+		m_lvBookmarks.AddGroup(1, TranslateT("Links"));
+
+		Utils_RestoreWindowPosition(m_hwnd, 0, m_proto->m_szModuleName, "bookmarksWnd_");
+		return true;
+	}
+
+	bool OnClose() override
+	{
+		LVCOLUMN lvc = { 0 };
+		lvc.mask = LVCF_WIDTH;
+		m_lvBookmarks.GetColumn(0, &lvc);
+		m_proto->setWord("bookmarksWnd_cx0", lvc.cx);
+		m_lvBookmarks.GetColumn(1, &lvc);
+		m_proto->setWord("bookmarksWnd_cx1", lvc.cx);
+		m_lvBookmarks.GetColumn(2, &lvc);
+		m_proto->setWord("bookmarksWnd_cx2", lvc.cx);
+
+		Utils_SaveWindowPosition(m_hwnd, 0, m_proto->m_szModuleName, "bookmarksWnd_");
+
+		return CSuper::OnClose();
+	}
+
+	void OnDestroy() override
+	{
+		m_proto->m_pDlgBookmarks = nullptr;
+		CSuper::OnDestroy();
+	}
+
+	INT_PTR DlgProc(UINT msg, WPARAM wParam, LPARAM lParam) override
+	{
+		switch (msg) {
+		case WM_GETMINMAXINFO:
+			{
+				LPMINMAXINFO lpmmi = (LPMINMAXINFO)lParam;
+				lpmmi->ptMinTrackSize.x = 451;
+				lpmmi->ptMinTrackSize.y = 320;
+				return 0;
+			}
+
+		case WM_COMMAND:
+			switch (LOWORD(wParam)) {
+			case IDOK:
+				OpenBookmark();
+				return TRUE;
+			}
+			break;
+		}
+
+		return CSuper::DlgProc(msg, wParam, lParam);
+	}
+
+	int Resizer(UTILRESIZECONTROL *urc) override
+	{
+		switch (urc->wId) {
+		case IDC_BM_LIST:
+			return RD_ANCHORX_WIDTH | RD_ANCHORY_HEIGHT;
+
+		case IDCANCEL:
+			return RD_ANCHORX_RIGHT | RD_ANCHORY_BOTTOM;
+
+		case IDC_ADD:
+		case IDC_EDIT:
+		case IDC_REMOVE:
+			return RD_ANCHORX_LEFT | RD_ANCHORY_BOTTOM;
+		}
+		return CSuper::Resizer(urc);
+	}
 
 	void lvBookmarks_OnDoubleClick(CCtrlFilterListView *)
 	{
@@ -254,189 +341,61 @@ private:
 		m_proto->SetBookmarkRequest(iq);
 		m_proto->m_ThreadInfo->send(iq);
 	}
-};
-
-CJabberDlgBookmarks::CJabberDlgBookmarks(CJabberProto *proto) :
-	CSuper(proto, IDD_BOOKMARKS),
-	m_btnAdd(this, IDC_ADD, SKINICON_OTHER_ADDCONTACT, LPGEN("Add")),
-	m_btnEdit(this, IDC_EDIT, SKINICON_OTHER_RENAME, LPGEN("Edit")),
-	m_btnRemove(this, IDC_REMOVE, SKINICON_OTHER_DELETE, LPGEN("Remove")),
-	m_lvBookmarks(this, IDC_BM_LIST, true, true)
-{
-	m_lvBookmarks.OnItemActivate = Callback(this, &CJabberDlgBookmarks::lvBookmarks_OnDoubleClick);
-	m_btnAdd.OnClick = Callback(this, &CJabberDlgBookmarks::btnAdd_OnClick);
-	m_btnEdit.OnClick = Callback(this, &CJabberDlgBookmarks::btnEdit_OnClick);
-	m_btnRemove.OnClick = Callback(this, &CJabberDlgBookmarks::btnRemove_OnClick);
-}
-
-void CJabberDlgBookmarks::UpdateData()
-{
-	if (!m_proto->m_bJabberOnline) return;
-
-	m_proto->m_ThreadInfo->send(
-		XmlNodeIq(m_proto->AddIQ(&CJabberProto::OnIqResultDiscoBookmarks, JABBER_IQ_TYPE_GET))
-		<< XQUERY(JABBER_FEAT_PRIVATE_STORAGE) << XCHILDNS("storage", "storage:bookmarks"));
-}
-
-bool CJabberDlgBookmarks::OnInitDialog()
-{
-	CSuper::OnInitDialog();
-
-	Window_SetIcon_IcoLib(m_hwnd, g_GetIconHandle(IDI_BOOKMARKS));
-
-	m_btnAdd.Disable();
-	m_btnEdit.Disable();
-	m_btnRemove.Disable();
-
-	m_lvBookmarks.SetExtendedListViewStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_HEADERDRAGDROP | LVS_EX_DOUBLEBUFFER);
-
-	HIMAGELIST hIml = m_lvBookmarks.CreateImageList(LVSIL_SMALL);
-	ImageList_AddIcon_Icolib(hIml, m_proto->LoadIconEx("group"));
-	ImageList_AddIcon_Icolib(hIml, Skin_LoadIcon(SKINICON_EVENT_URL));
-
-	m_lvBookmarks.AddColumn(0, TranslateT("Bookmark Name"), m_proto->getWord("bookmarksWnd_cx0", 120));
-	m_lvBookmarks.AddColumn(1, TranslateT("Address (JID or URL)"), m_proto->getWord("bookmarksWnd_cx1", 210));
-	m_lvBookmarks.AddColumn(2, TranslateT("Nickname"), m_proto->getWord("bookmarksWnd_cx2", 90));
-
-	m_lvBookmarks.EnableGroupView(TRUE);
-	m_lvBookmarks.AddGroup(0, TranslateT("Conferences"));
-	m_lvBookmarks.AddGroup(1, TranslateT("Links"));
 
-	Utils_RestoreWindowPosition(m_hwnd, 0, m_proto->m_szModuleName, "bookmarksWnd_");
-	return true;
-}
-
-bool CJabberDlgBookmarks::OnClose()
-{
-	LVCOLUMN lvc = { 0 };
-	lvc.mask = LVCF_WIDTH;
-	m_lvBookmarks.GetColumn(0, &lvc);
-	m_proto->setWord("bookmarksWnd_cx0", lvc.cx);
-	m_lvBookmarks.GetColumn(1, &lvc);
-	m_proto->setWord("bookmarksWnd_cx1", lvc.cx);
-	m_lvBookmarks.GetColumn(2, &lvc);
-	m_proto->setWord("bookmarksWnd_cx2", lvc.cx);
-
-	Utils_SaveWindowPosition(m_hwnd, 0, m_proto->m_szModuleName, "bookmarksWnd_");
-
-	return CSuper::OnClose();
-}
-
-void CJabberDlgBookmarks::OnDestroy()
-{
-	m_proto->m_pDlgBookmarks = nullptr;
-
-	CSuper::OnDestroy();
-}
-
-void CJabberDlgBookmarks::OpenBookmark()
-{
-	int iItem = m_lvBookmarks.GetNextItem(-1, LVNI_SELECTED);
-	if (iItem < 0)
-		return;
-
-	char *address = (char*)m_lvBookmarks.GetItemData(iItem);
-	if (address == nullptr)
-		return;
-
-	JABBER_LIST_ITEM *item = m_proto->ListGetItemPtr(LIST_BOOKMARK, address);
-	if (item == nullptr)
-		return;
-
-	if (!mir_strcmpi(item->type, "conference")) {
-		m_lvBookmarks.SetItemState(iItem, 0, LVIS_SELECTED); // Unselect the item
-
-		/* some hack for using bookmark to transport not under XEP-0048 */
-		if (!strchr(item->jid, '@'))
-			//the room name is not provided let consider that it is transport and send request to registration
-			m_proto->RegisterAgent(nullptr, item->jid);
-		else {
-			char *room = NEWSTR_ALLOCA(item->jid);
-			char *server = strchr(room, '@');
-			*(server++) = 0;
-
-			if (item->nick && *item->nick)
-				m_proto->GroupchatJoinRoom(server, room, item->nick, item->password);
-			else
-				m_proto->GroupchatJoinRoom(server, room, ptrA(JabberNickFromJID(m_proto->m_szJabberJID)), item->password);
+	void OnProtoCheckOnline(WPARAM, LPARAM)
+	{
+		if (!m_proto->m_bJabberOnline) {
+			m_btnAdd.Disable();
+			m_btnEdit.Disable();
+			m_btnRemove.Disable();
 		}
+		else UpdateData();
 	}
-	else Utils_OpenUrl(item->jid);
-}
 
-INT_PTR CJabberDlgBookmarks::DlgProc(UINT msg, WPARAM wParam, LPARAM lParam)
-{
-	switch (msg) {
-	case WM_GETMINMAXINFO:
-		{
-			LPMINMAXINFO lpmmi = (LPMINMAXINFO)lParam;
-			lpmmi->ptMinTrackSize.x = 451;
-			lpmmi->ptMinTrackSize.y = 320;
-			return 0;
-		}
+	void OpenBookmark()
+	{
+		int iItem = m_lvBookmarks.GetNextItem(-1, LVNI_SELECTED);
+		if (iItem < 0)
+			return;
 
-	case WM_COMMAND:
-		switch (LOWORD(wParam)) {
-		case IDOK:
-			OpenBookmark();
-			return TRUE;
-		}
-		break;
-	}
+		char *address = (char*)m_lvBookmarks.GetItemData(iItem);
+		if (address == nullptr)
+			return;
 
-	return CSuper::DlgProc(msg, wParam, lParam);
-}
+		JABBER_LIST_ITEM *item = m_proto->ListGetItemPtr(LIST_BOOKMARK, address);
+		if (item == nullptr)
+			return;
 
-void CJabberDlgBookmarks::OnProtoCheckOnline(WPARAM, LPARAM)
-{
-	if (!m_proto->m_bJabberOnline) {
-		m_btnAdd.Disable();
-		m_btnEdit.Disable();
-		m_btnRemove.Disable();
-	}
-	else UpdateData();
-}
+		if (!mir_strcmpi(item->type, "conference")) {
+			m_lvBookmarks.SetItemState(iItem, 0, LVIS_SELECTED); // Unselect the item
 
-void CJabberDlgBookmarks::OnProtoRefresh(WPARAM, LPARAM)
-{
-	m_lvBookmarks.DeleteAllItems();
+																				  /* some hack for using bookmark to transport not under XEP-0048 */
+			if (!strchr(item->jid, '@'))
+				//the room name is not provided let consider that it is transport and send request to registration
+				m_proto->RegisterAgent(nullptr, item->jid);
+			else {
+				char *room = NEWSTR_ALLOCA(item->jid);
+				char *server = strchr(room, '@');
+				*(server++) = 0;
 
-	JABBER_LIST_ITEM *item = nullptr;
-	LISTFOREACH(i, m_proto, LIST_BOOKMARK)
-	{
-		if (item = m_proto->ListGetItemPtrFromIndex(i)) {
-			int itemType = mir_strcmpi(item->type, "conference") ? 1 : 0;
-			int iItem = m_lvBookmarks.AddItem(item->name, itemType, (LPARAM)item->jid, itemType);
-			m_lvBookmarks.SetItem(iItem, 1, Utf2T(item->jid));
-			if (itemType == 0)
-				m_lvBookmarks.SetItem(iItem, 2, Utf2T(item->nick));
+				if (item->nick && *item->nick)
+					m_proto->GroupchatJoinRoom(server, room, item->nick, item->password);
+				else
+					m_proto->GroupchatJoinRoom(server, room, ptrA(JabberNickFromJID(m_proto->m_szJabberJID)), item->password);
+			}
 		}
+		else Utils_OpenUrl(item->jid);
 	}
 
-	if (item) {
-		m_btnEdit.Enable();
-		m_btnRemove.Enable();
-	}
-
-	m_btnAdd.Enable();
-}
-
-int CJabberDlgBookmarks::Resizer(UTILRESIZECONTROL *urc)
-{
-	switch (urc->wId) {
-	case IDC_BM_LIST:
-		return RD_ANCHORX_WIDTH | RD_ANCHORY_HEIGHT;
-
-	case IDCANCEL:
-		return RD_ANCHORX_RIGHT | RD_ANCHORY_BOTTOM;
+	void UpdateData()
+	{
+		if (!m_proto->m_bJabberOnline) return;
 
-	case IDC_ADD:
-	case IDC_EDIT:
-	case IDC_REMOVE:
-		return RD_ANCHORX_LEFT | RD_ANCHORY_BOTTOM;
+		m_proto->m_ThreadInfo->send(
+			XmlNodeIq(m_proto->AddIQ(&CJabberProto::OnIqResultDiscoBookmarks, JABBER_IQ_TYPE_GET))
+			<< XQUERY(JABBER_FEAT_PRIVATE_STORAGE) << XCHILDNS("storage", "storage:bookmarks"));
 	}
-	return CSuper::Resizer(urc);
-}
+};
 
 /////////////////////////////////////////////////////////////////////////////////////////
 // Launches the Bookmarks manager window
diff --git a/protocols/JabberG/src/jabber_chat.cpp b/protocols/JabberG/src/jabber_chat.cpp
index 4ae86d90bb..f5343007d9 100644
--- a/protocols/JabberG/src/jabber_chat.cpp
+++ b/protocols/JabberG/src/jabber_chat.cpp
@@ -246,7 +246,7 @@ void CJabberProto::GcLogUpdateMemberStatus(JABBER_LIST_ITEM *item, const char *r
 {
 	int statusToSet = 0;
 
-	const char *szReason = reason->GetText();
+	const char *szReason = (reason) ? reason->GetText() : nullptr;
 	if (szReason == nullptr) {
 		if (nStatusCode == 322)
 			szReason = Translate("because room is now members-only");
diff --git a/protocols/JabberG/src/jabber_groupchat.cpp b/protocols/JabberG/src/jabber_groupchat.cpp
index 49906f9f8d..7e3d7d30c6 100644
--- a/protocols/JabberG/src/jabber_groupchat.cpp
+++ b/protocols/JabberG/src/jabber_groupchat.cpp
@@ -259,7 +259,7 @@ void CJabberProto::GroupchatJoinRoom(const char *server, const char *room, const
 	if (info.m_password && info.m_password[0])
 		x << XCHILD("password", info.m_password);
 
-	SendPresenceTo(status, text, x);
+	SendPresenceTo(status, text, x.ToElement());
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -755,6 +755,9 @@ static VOID CALLBACK JabberGroupchatChangeNickname(void* arg)
 
 static int sttGetStatusCode(const TiXmlElement *node)
 {
+	if (node == nullptr)
+		return -1;
+
 	auto *statusNode = node->FirstChildElement("status");
 	if (statusNode == nullptr)
 		return -1;
@@ -816,16 +819,20 @@ void CJabberProto::GroupchatProcessPresence(const TiXmlElement *node)
 
 	pResourceStatus r(item->findResource(resource));
 
-	auto *nNode = XmlGetChildByTag(node, "nick", "xmlns", JABBER_FEAT_NICK);
-	const char *cnick = nNode->GetText();
+	const char *cnick = nullptr;
+	if (auto *n = XmlGetChildByTag(node, "nick", "xmlns", JABBER_FEAT_NICK))
+		cnick = n->GetText();
+
 	const char *nick = cnick ? cnick : (r && r->m_szNick ? r->m_szNick : resource);
 
 	// process custom nick change
 	if (cnick && r && r->m_szNick && mir_strcmp(cnick, r->m_szNick))
 		r->m_szNick = mir_strdup(cnick);
 
+	const TiXmlElement *itemNode = nullptr;
 	auto *xNode = XmlGetChildByTag(node, "x", "xmlns", JABBER_FEAT_MUC_USER);
-	auto *itemNode = xNode->FirstChildElement("item");
+	if (xNode)
+		itemNode = xNode->FirstChildElement("item");
 
 	// entering room or a usual room presence
 	const char *type = node->Attribute("type");
diff --git a/protocols/JabberG/src/jabber_xml.cpp b/protocols/JabberG/src/jabber_xml.cpp
index 89f39e567d..142f0bc331 100644
--- a/protocols/JabberG/src/jabber_xml.cpp
+++ b/protocols/JabberG/src/jabber_xml.cpp
@@ -104,10 +104,9 @@ TiXmlElement*operator<<(TiXmlElement *node, const XCHILDNS &child)
 
 TiXmlElement* operator<<(TiXmlElement *node, const XQUERY &child)
 {
-	TiXmlElement *n = node->GetDocument()->NewElement("query");
-	if (n)
-		n->SetAttribute("xmlns", child.ns);
-	return n;
+	TiXmlElement *res = XmlAddChild(node, "query");
+	res->SetAttribute("xmlns", child.ns);
+	return res;
 }
 
 /////////////////////////////////////////////////////////////////////////////////////////
-- 
cgit v1.2.3