QTfrontend/netwwwwidget.cpp
changeset 664 f0af2401f981
parent 662 b2f914786d87
child 665 5c7bfc8bac6a
--- a/QTfrontend/netwwwwidget.cpp	Sat Dec 15 18:04:56 2007 +0000
+++ b/QTfrontend/netwwwwidget.cpp	Sat Dec 15 18:58:55 2007 +0000
@@ -30,59 +30,14 @@
 HWNetWwwWidget::HWNetWwwWidget(QWidget* parent) :
   HWNetServersWidget(parent)
 {
-	http = new QHttp(this);
-	http->setHost("www.hedgewars.org", 80);
-	connect(http, SIGNAL(requestFinished(int, bool)), this, SLOT(onClientRead(int, bool)));
+	serversList->setModel(new HWNetWwwModel);
 }
 
 void HWNetWwwWidget::updateList()
 {
-	QString request = QString("protocol_version=%1")
-			.arg(*cProtoVer);
-	http->post("/games/list_games", request.toUtf8());
-
-	serversList->clear();
+	static_cast<HWNetWwwModel *>(serversList->model())->updateList();
 }
 
-void HWNetWwwWidget::onClientRead(int id, bool error)
-{
-	if (error)
-	{
-		qWarning() << "Error" << http->errorString();
-		return;
-	}
-	serversList->clear();
-
-	QDomDocument doc;
-	if (!doc.setContent(http->readAll())) return;
-
-	QDomElement docElem = doc.documentElement();
-
-	QDomNode n = docElem.firstChild();
-	while (!n.isNull())
-	{
-		QDomElement game = n.toElement(); // try to convert the node to an element.
-
-		if(!game.isNull())
-		{
-			QDomNode p = game.firstChild();
-			while (!p.isNull())
-			{
-				QDomElement e = p.toElement();
-				if(!p.isNull())
-				{
-					QDomText t = e.firstChild().toText();
-					if(!t.isNull())
-						serversList->addItem(t.data());
-				}
-				p = p.nextSibling();
-			}
-		}
-		n = n.nextSibling();
-	}
-}
-
-
 
 HWNetWwwModel::HWNetWwwModel(QObject *parent) : QAbstractTableModel(parent)
 {
@@ -94,29 +49,31 @@
 QVariant HWNetWwwModel::data(const QModelIndex &index,
                              int role) const
 {
-    if (!index.isValid() || index.row() < 0
-            || index.row() >= games.size() - 1
-            || role != Qt::DisplayRole)
-        return QVariant();
+	if (!index.isValid() || index.row() < 0
+		|| index.row() >= games.size()
+		|| role != Qt::DisplayRole)
+	return QVariant();
 
-    return QVariant(QString("test"));
+	return games[index.row()][index.column()];
 }
 
 QVariant HWNetWwwModel::headerData(int section,
             Qt::Orientation orientation, int role) const
 {
-    if (role != Qt::DisplayRole)
-        return QVariant();
+	if (role != Qt::DisplayRole)
+		return QVariant();
 
-    if (orientation == Qt::Horizontal) {
-        switch (section) {
-        case 0: return tr("Title");
-        case 1: return tr("IP");
-        case 2: return tr("Port");
-        default: return QVariant();
-        }
-    } else
-        return QString("%1").arg(section + 1);
+	if (orientation == Qt::Horizontal)
+	{
+		switch (section)
+		{
+			case 0: return tr("Title");
+			case 1: return tr("IP");
+			case 2: return tr("Port");
+			default: return QVariant();
+		}
+	} else
+		return QString("%1").arg(section + 1);
 }
 
 int HWNetWwwModel::rowCount(const QModelIndex &parent) const
@@ -142,6 +99,8 @@
 	http->post("/games/list_games", request.toUtf8());
 
 	games.clear();
+
+	reset();
 }
 
 void HWNetWwwModel::onClientRead(int id, bool error)
@@ -161,13 +120,34 @@
 	QDomNode n = docElem.firstChild();
 	while (!n.isNull())
 	{
-		QDomElement e = n.toElement(); // try to convert the node to an element.
-		if(!e.isNull() && (e.tagName() == "ip"))
+		QDomElement game = n.toElement(); // try to convert the node to an element.
+
+		if(!game.isNull())
 		{
-			QDomText t = e.firstChild().toText();
-			if(!t.isNull())
-				games.append(QStringList() << t.data());
+			QDomNode p = game.firstChild();
+			QStringList sl;
+			sl << "-" << "-" << "-";
+			while (!p.isNull())
+			{
+				QDomElement e = p.toElement();
+
+				if(!p.isNull())
+				{
+					int i = -1;
+					if (e.tagName() == "title") i = 0;
+					else if (e.tagName() == "ip") i = 1;
+					else if (e.tagName() == "port") i = 2;
+
+					QDomText t = e.firstChild().toText();
+					if(!t.isNull() && (i >= 0))
+						sl[i] = t.data();
+				}
+				p = p.nextSibling();
+			}
+			games.append(sl);
 		}
 		n = n.nextSibling();
 	}
+
+	reset();
 }