From 3a2e6a18bde3b528807db1d985cfcc397ed8424c Mon Sep 17 00:00:00 2001
From: Thilo Cestonaro <thilo@cestona.ro>
Date: Wed, 8 Jul 2009 20:57:03 +0200
Subject: [PATCH] implements iq:version stuff in discodlg (psi part)

---
 iconsets.qrc                              |    1 +
 iconsets/system/default/icondef.xml       |    4 ++++
 iconsets/system/default/query_version.png |  Bin 0 -> 855 bytes
 src/discodlg.cpp                          |   10 ++++++++--
 src/psiaccount.cpp                        |   22 ++++++++++++++++++++++
 src/psiaccount.h                          |    2 ++
 6 files changed, 37 insertions(+), 2 deletions(-)
 create mode 100644 iconsets/system/default/query_version.png

diff --git a/src/discodlg.cpp b/src/discodlg.cpp
index ef8495b..c3cf3c8 100644
--- a/src/discodlg.cpp
+++ b/src/discodlg.cpp
@@ -889,7 +889,7 @@ public: // data
 	IconAction *actBrowse, *actBack, *actForward, *actRefresh, *actStop;
 
 	// custom actions, that will be added to toolbar and context menu
-	IconAction *actRegister, *actSearch, *actJoin, *actAHCommand, *actVCard, *actAdd;
+	IconAction *actRegister, *actSearch, *actJoin, *actAHCommand, *actVCard, *actAdd, *actQueryVersion;
 
 	typedef Q3PtrList<History> HistoryList;
 	HistoryList backHistory, forwardHistory;
@@ -1009,6 +1009,9 @@ DiscoDlg::Private::Private(DiscoDlg *parent, PsiAccount *pa)
 	actAdd = new IconAction (tr("Add to roster"), "psi/addContact", tr("&Add to roster"), 0, dlg);
 	connect (actAdd, SIGNAL(activated()), sm, SLOT(map()));
 	sm->setMapping(actAdd, Features::FID_Add);
+	actQueryVersion = new IconAction (tr("Query version"), "psi/info", tr("&Query version"), 0, dlg);
+	connect (actQueryVersion, SIGNAL(activated()), sm, SLOT(map()));
+	sm->setMapping(actQueryVersion, Features::FID_QueryVersion);
 
 	// create toolbar
 	toolBar = new QToolBar(tr("Service Discovery toolbar"), dlg);
@@ -1034,6 +1037,7 @@ DiscoDlg::Private::Private(DiscoDlg *parent, PsiAccount *pa)
 	toolBar->addAction(actAdd);
 	toolBar->addAction(actVCard);
 	toolBar->addAction(actAHCommand);
+	toolBar->addAction(actQueryVersion);
 
 	// select protocol
 	if (PsiOptions::instance()->getOption("options.ui.show-deprecated.service-discovery.protocol-selector").toBool()) {
@@ -1252,6 +1256,7 @@ void DiscoDlg::Private::enableButtons(const DiscoItem &it)
 	actAdd->setEnabled( itemSelected );
 	actVCard->setEnabled( f.haveVCard() );
 	actAHCommand->setEnabled( f.canCommand() );
+	actQueryVersion->setEnabled( f.hasVersion() );
 }
 
 void DiscoDlg::Private::itemSelected (Q3ListViewItem *item)
@@ -1373,7 +1378,8 @@ bool DiscoDlg::Private::eventFilter (QObject *object, QEvent *event)
 			actAdd->addTo(&p);
 			actVCard->addTo(&p);
 			actAHCommand->addTo(&p);
-
+			actQueryVersion->addTo(&p);
+			
 			// popup with all available features
 			Q3PopupMenu *fm = new Q3PopupMenu(&p);
 			{
diff --git a/src/psiaccount.cpp b/src/psiaccount.cpp
index e25b0c6..5e227c0 100644
--- a/src/psiaccount.cpp
+++ b/src/psiaccount.cpp
@@ -2693,6 +2693,9 @@ void PsiAccount::featureActivated(QString feature, Jid jid, QString node)
 		QStringList sl;
 		dj_add(jid, QString::null, sl, true);
 	}
+	else if ( f.hasVersion() ) {
+		actionQueryVersion(jid);
+	}
 }
 
 void PsiAccount::actionJoin(const Jid& mucJid, const QString& password)
@@ -3122,6 +3125,25 @@ void PsiAccount::actionSendFiles(const Jid &j, const QStringList& l)
 	sendFiles(j, l);
 }
 
+void PsiAccount::actionQueryVersion(const Jid& j)
+{
+	JT_ClientVersion *task = new JT_ClientVersion(d->client->rootTask());
+	task->get(j);
+	connect(task, SIGNAL(finished()), SLOT(queryVersionFinished()));
+	task->go(true);
+}
+
+void PsiAccount::queryVersionFinished()
+{
+	JT_ClientVersion* j = static_cast<JT_ClientVersion*>(sender());
+	QString text;
+	text += tr("Name:\t") + j->name();
+	text += "\n" + tr("Version:\t") + j->version();
+	text += "\n" + tr("Os:\t") + j->os();
+	
+	QMessageBox::information(NULL, QString(tr("Version Query Informations")), text);
+}
+
 void PsiAccount::actionExecuteCommand(const Jid& j, const QString& node)
 {
 	Jid j2 = j;
diff --git a/src/psiaccount.h b/src/psiaccount.h
index e556541..a759821 100644
--- a/src/psiaccount.h
+++ b/src/psiaccount.h
@@ -289,6 +289,7 @@ public slots:
 	void actionSetMood();
 	void actionSetAvatar();
 	void actionUnsetAvatar();
+	void actionQueryVersion(const Jid& j);
 	void featureActivated(QString feature, Jid jid, QString node);
 
 	void actionAssignKey(const Jid &);
@@ -362,6 +363,7 @@ private slots:
 
 	void processReadNext(const UserListItem &);
 	void processReadNext(const Jid &);
+	void queryVersionFinished();
 
 protected:
 	bool validRosterExchangeItem(const RosterExchangeItem&);
-- 
1.6.2.5

