+++ /dev/null
-#include "bugagent.h"\r
-\r
-#include "branchitem.h"\r
-#include "mainwindow.h"\r
-#include "vymmodel.h"\r
-\r
-#include <QHash>\r
-\r
-extern Main *mainWindow;\r
-extern QDir vymBaseDir;\r
-extern bool debug;\r
-\r
-\r
-BugAgent::BugAgent (BranchItem *bi,const QString &u)\r
-{\r
- if (!bi) \r
- {\r
- qWarning ("Const BugAgent: bi==NULL");\r
- delete (this);\r
- return;\r
- }\r
- branchID=bi->getID();\r
- VymModel *model=bi->getModel();\r
- modelID=model->getModelID();\r
-\r
- //qDebug()<<"Constr. BugAgent for "<<branchID;\r
-\r
- url=u;\r
-\r
- QStringList args;\r
-\r
- if (url.contains("show_bug"))\r
- {\r
- missionType=SingleBug;\r
- QRegExp rx("(\\d+)");\r
- if (rx.indexIn(url) !=-1)\r
- {\r
- bugID=rx.cap(1);\r
- args<<bugID;\r
- } else\r
- {\r
- qDebug()<<"BugAgent: No bugID found in: "<<url;\r
- delete (this);\r
- return;\r
- }\r
-\r
- } else if (u.contains("buglist.cgi"))\r
- {\r
- missionType=Query; //FIXME-3 query not supported yet by new bugger\r
- args<<"--query";\r
- args<<url;\r
- } else\r
- {\r
- qDebug()<<"Unknown Bugzilla command:\n"<<url;\r
- delete (this);\r
- return;\r
- }\r
- \r
-\r
- bugScript=vymBaseDir.path()+"/scripts/bugger";\r
-\r
- p=new VymProcess;\r
-\r
- connect (p, SIGNAL (finished(int,QProcess::ExitStatus) ), \r
- this, SLOT (processFinished(int,QProcess::ExitStatus) ));\r
-\r
- p->start (bugScript,args);\r
- if (!p->waitForStarted())\r
- {\r
- qWarning()<<"BugAgent::getBugzillaData couldn't start "<<bugScript;\r
- return;\r
- } \r
-\r
- // Visual hint that we are doing something // FIXME-4 show spinner instead?\r
- if (missionType==SingleBug)\r
- model->setHeading ("Updating: "+bi->getHeadingPlain(),bi );//FIXME-4 translation needed?\r
- \r
-}\r
-\r
-BugAgent::~BugAgent ()\r
-{\r
- //qDebug()<<"Destr. BugAgent for "<<branchID;\r
- delete p;\r
-}\r
-\r
-void BugAgent::processFinished(int exitCode, QProcess::ExitStatus exitStatus)\r
-{\r
- if (exitStatus==QProcess::NormalExit)\r
- {\r
- result=p->getStdout().split("\n");\r
- QString err=p->getErrout();\r
- if (!err.isEmpty())\r
- qWarning() << "BugAgent Error: "<<err;\r
- else \r
- processBugzillaData ();\r
-\r
- } else \r
- qWarning()<< "BugAgent: Process finished with exitCode="<<exitCode;\r
- deleteLater();\r
-}\r
-\r
-\r
-void BugAgent::processBugzillaData()\r
-{\r
- // Find model from which we had been started\r
- VymModel *model=mainWindow->getModel (modelID);\r
- if (model)\r
- {\r
- // and find branch which triggered this mission\r
- BranchItem *missionBI=(BranchItem*)(model->findID (branchID)); \r
- if (missionBI)\r
- {\r
- // Here we go...\r
-\r
- QRegExp re("(\\d*):(\\S*):\"(.*)\"");\r
- re.setMinimal(false);\r
- bug_desc.clear();\r
- bug_prio.clear();\r
- bug_sev.clear();\r
- bug_deltats.clear();\r
- bug_status.clear();\r
- bug_whiteboard.clear();\r
-\r
- QStringList bugs; \r
- foreach (QString line,result)\r
- {\r
- if (debug) qDebug()<<"BugAgent::procBugData line="<<line;\r
- if (re.indexIn(line) !=-1) \r
- {\r
- if (re.cap(2)=="short_desc") \r
- {\r
- bugs.append(re.cap(1));\r
- bug_desc[re.cap(1)]=re.cap(3).replace("\\\"","\"");\r
- } \r
- else if (re.cap(2)=="priority") \r
- bug_prio[re.cap(1)]=re.cap(3).left(2);\r
- else if (re.cap(2)=="bug_severity") \r
- {\r
- if (re.cap(3)=="Critical")\r
- bug_sev[re.cap(1)]="S1";\r
- else if (re.cap(3)=="Major")\r
- bug_sev[re.cap(1)]="S2";\r
- else if (re.cap(3)=="Normal")\r
- bug_sev[re.cap(1)]="S3";\r
- else if (re.cap(3)=="Minor")\r
- bug_sev[re.cap(1)]="S4";\r
- else if (re.cap(3)=="Enhancement")\r
- bug_sev[re.cap(1)]="S5";\r
- else \r
- {\r
- qWarning()<<"BugAgent: Bugzilla returned severity "<<re.cap(3);\r
- bug_sev[re.cap(1)]=re.cap(3);\r
- }\r
- } \r
- else if (re.cap(2)=="delta_ts") \r
- bug_deltats[re.cap(1)]=re.cap(3);\r
- else if (re.cap(2)=="bug_status") \r
- bug_status[re.cap(1)]=re.cap(3);\r
- else if (re.cap(2)=="status_whiteboard") \r
- bug_whiteboard[re.cap(1)]=re.cap(3);\r
- }\r
- }\r
- if (bug_desc.count()<=0)\r
- qWarning()<<"BugAgent: Couldn't find data";\r
- else if (missionType==SingleBug)\r
- {\r
- // Only single bug changed\r
- QString b=bugs.first();\r
- setModelBugzillaData (model, missionBI,b);\r
- } else\r
- {\r
- // Process results of query\r
- BranchItem *newbi;\r
- foreach (QString b,bugs)\r
- {\r
- //qDebug ()<<" -> "<<b<<" "<<bug_desc[b];\r
- newbi=model->addNewBranch(missionBI); \r
- newbi->setURL ("https://bugzilla.novell.com/show_bug.cgi?id="+b);\r
- if (!newbi)\r
- qWarning()<<"BugAgent: Couldn't create new branch?!";\r
- else\r
- setModelBugzillaData (model, newbi,b);\r
- }\r
- } \r
- } else\r
- qWarning ()<<"BugAgent: Found model, but not branch #"<<branchID;\r
- } else\r
- qWarning ()<<"BugAgent: Couldn't find model #"<<modelID;\r
-\r
-\r
-}\r
-\r
-void BugAgent::setModelBugzillaData (VymModel *model, BranchItem *bi, const QString &bugID)\r
-{\r
- QString ps=bug_prio[bugID];\r
- if (bug_whiteboard[bugID].contains ("PNEW")) ps=ps+"/"+bug_sev[bugID];\r
- if (bug_status[bugID]=="CLOSED" \r
- || bug_status[bugID]=="VERIFIED"\r
- || bug_status[bugID]=="RESOLVED")\r
- {\r
- model->setHeadingPlainText ("("+ps+") - " + bugID + " - " + bug_desc[bugID],bi);\r
- model->colorSubtree (Qt::blue,bi);\r
- }else \r
- model->setHeadingPlainText (ps+ " - " + bugID + " - " + bug_desc[bugID],bi);\r
-}\r
-\r