summaryrefslogtreecommitdiff
path: root/client/praxisd.cc
diff options
context:
space:
mode:
authorBent Bisballe Nyeng <deva@aasimon.org>2011-10-13 10:30:38 +0200
committerBent Bisballe Nyeng <deva@aasimon.org>2011-10-13 10:30:38 +0200
commitc73d1d01ba6b57f664c21a189fa9297e2c75456a (patch)
treedf2964307e2e11aa642d0af3af798c5edf904482 /client/praxisd.cc
parentffc19fdcd0845dbd85c2bba990c590fcc5fba670 (diff)
Finished Praxisd code. Now it works both in sync and async modes.
Diffstat (limited to 'client/praxisd.cc')
-rw-r--r--client/praxisd.cc76
1 files changed, 52 insertions, 24 deletions
diff --git a/client/praxisd.cc b/client/praxisd.cc
index d8b3444..5309b66 100644
--- a/client/praxisd.cc
+++ b/client/praxisd.cc
@@ -27,26 +27,28 @@
*/
#include "praxisd.h"
+#include <stdio.h>
+
#include <QDomDocument>
#include <QNetworkReply>
#define DOCAVE(x) if(element.tagName() == #x) cave.x = element.text()
-static QVector<Praxisd::cave_t> getCaveList(QByteArray data)
+static CaveVector getCaveList(QByteArray data)
{
QDomDocument doc;
doc.setContent(data);
- QVector<Praxisd::cave_t> cavelist;
+ CaveVector cavelist;
- QDomNode praxisd = doc.documentElement().firstChild();
+ QDomNode praxisd = doc.documentElement();
QDomNodeList nodes = praxisd.childNodes();
for(int i = 0; i < nodes.count(); i++) {
QDomNode node = nodes.at(i);
QDomElement element = node.toElement();
if(element.tagName() == "div_cave") {
- Praxisd::cave_t cave;
+ cave_t cave;
cave.sogenr = element.attribute("sogenr");
QDomNodeList nodes = element.childNodes();
@@ -67,14 +69,14 @@ static QVector<Praxisd::cave_t> getCaveList(QByteArray data)
}
#define DOPATIENT(x) if(element.tagName() == #x) patient.x = element.text()
-static Praxisd::patient_t getPatient(QByteArray data)
+static Patient getPatient(QByteArray data)
{
QDomDocument doc;
doc.setContent(data);
- Praxisd::patient_t patient;
+ Patient patient;
- QDomNode praxisd = doc.documentElement().firstChild();
+ QDomNode praxisd = doc.documentElement();
QDomNode patnode = praxisd.firstChild();
QDomElement patelement = patnode.toElement();
@@ -102,7 +104,7 @@ static Praxisd::patient_t getPatient(QByteArray data)
DOPATIENT(frilinie5);
if(element.tagName() == "sogeords") {
- Praxisd::sogeord_t sogeord;
+ sogeord_t sogeord;
QDomNodeList nodes = element.childNodes();
for(int j = 0; j < nodes.count(); j++) {
@@ -140,21 +142,20 @@ static Praxisd::patient_t getPatient(QByteArray data)
}
#define DODOKMENU(x) if(element.tagName() == #x) dokmenu.x = element.text()
-QVector<Praxisd::dokmenu_t> getDokMenu(QByteArray data)
+static DokMenuVector getDokMenu(QByteArray data)
{
QDomDocument doc;
doc.setContent(data);
- QVector<Praxisd::dokmenu_t> dokmenus;
+ DokMenuVector dokmenus;
- QDomNode praxisd = doc.documentElement().firstChild();
+ QDomNode praxisd = doc.documentElement();
QDomNodeList nodes = praxisd.childNodes();
for(int i = 0; i < nodes.count(); i++) {
QDomNode node = nodes.at(i);
QDomElement element = node.toElement();
if(element.tagName() == "dokmenu") {
-
- Praxisd::dokmenu_t dokmenu;
+ dokmenu_t dokmenu;
dokmenu.cpr = element.attribute("cpr");
QDomNodeList nodes = element.childNodes();
@@ -179,6 +180,9 @@ QVector<Praxisd::dokmenu_t> getDokMenu(QByteArray data)
Praxisd::Praxisd(QString host, unsigned short int port)
{
+ qRegisterMetaType<CaveVector>("CaveVector");
+ qRegisterMetaType<DokMenuVector>("DokMenuVector");
+
QUrl url;
url.setHost(host);
url.setPort(port);
@@ -202,7 +206,7 @@ void Praxisd::replyFinished(QNetworkReply *reply)
break;
case cavelist:
- emit gotCave(getCaveList(reply->readAll()));
+ emit gotCaveList(getCaveList(reply->readAll()));
break;
case patient:
@@ -287,16 +291,23 @@ void Praxisd::dokmenu_get_by_cpr_and_name(QString cpr, QString name)
}
PraxisdSync::PraxisdSync(QString host, unsigned short int port)
- : praxisd(host, port)
{
- connect(&praxisd, SIGNAL(gotCaveList(QVector<Praxisd::cave_t>)),
- this, SLOT(gotCaveList(QVector<Praxisd::cave_t>)));
+ this->host = host;
+ this->port = port;
start();
}
void PraxisdSync::run()
{
+ Praxisd praxisd(host, port);
+
+ connect(&praxisd, SIGNAL(gotCaveList(CaveVector)),
+ this, SLOT(gotCaveList(CaveVector)), Qt::DirectConnection);
+
+ connect(&praxisd, SIGNAL(gotDokMenu(DokMenuVector)),
+ this, SLOT(gotDokMenu(DokMenuVector)), Qt::DirectConnection);
+
while(true) {
wsem.acquire();
@@ -309,17 +320,29 @@ void PraxisdSync::run()
case Praxisd::patient:
break;
case Praxisd::dokmenu:
+ praxisd.dokmenu_get_all_by_cpr(request_cpr);
break;
case Praxisd::dokmenufile:
break;
}
+
+ exec();
}
}
-void PraxisdSync::gotCaveList(QVector<Praxisd::cave_t> cl)
+void PraxisdSync::gotCaveList(CaveVector cl)
{
cavelist = cl;
rsem.release();
+
+ quit();
+}
+
+void PraxisdSync::gotDokMenu(DokMenuVector d)
+{
+ dokmenu = d;
+ rsem.release();
+ quit();
}
QString PraxisdSync::journal_get_by_cpr(QString cpr)
@@ -327,7 +350,7 @@ QString PraxisdSync::journal_get_by_cpr(QString cpr)
return cpr;
}
-QVector<Praxisd::cave_t> PraxisdSync::diverse_get_cave(QString sogenr)
+CaveVector PraxisdSync::diverse_get_cave(QString sogenr)
{
request_type = Praxisd::cavelist;
request_sogenr = sogenr;
@@ -338,16 +361,21 @@ QVector<Praxisd::cave_t> PraxisdSync::diverse_get_cave(QString sogenr)
return cavelist;
}
-Praxisd::patient_t PraxisdSync::patient_get_by_cpr(QString cpr)
+Patient PraxisdSync::patient_get_by_cpr(QString cpr)
{
cpr = "";
- return Praxisd::patient_t();
+ return Patient();
}
-QVector<Praxisd::dokmenu_t> PraxisdSync::dokmenu_get_all_by_cpr(QString cpr)
+DokMenuVector PraxisdSync::dokmenu_get_all_by_cpr(QString cpr)
{
- cpr = "";
- return QVector<Praxisd::dokmenu_t>();
+ request_type = Praxisd::dokmenu;
+ request_cpr = cpr;
+
+ wsem.release();
+ rsem.acquire();
+
+ return dokmenu;
}
QString PraxisdSync::dokmenu_get_by_cpr_and_name(QString cpr, QString name)