1 #include "bugagent.h"
\r
3 #include "branchitem.h"
\r
4 #include "mainwindow.h"
\r
5 #include "vymmodel.h"
\r
9 extern Main *mainWindow;
\r
10 extern QDir vymBaseDir;
\r
14 BugAgent::BugAgent (BranchItem *bi,const QString &u)
\r
18 qWarning ("Const BugAgent: bi==NULL");
\r
22 branchID=bi->getID();
\r
23 VymModel *model=bi->getModel();
\r
24 modelID=model->getModelID();
\r
26 //qDebug()<<"Constr. BugAgent for "<<branchID;
\r
32 if (url.contains("show_bug"))
\r
34 missionType=SingleBug;
\r
35 QRegExp rx("(\\d+)");
\r
36 if (rx.indexIn(url) !=-1)
\r
42 qDebug()<<"BugAgent: No bugID found in: "<<url;
\r
47 } else if (u.contains("buglist.cgi"))
\r
49 missionType=Query; //FIXME-3 query not supported yet by new bugger
\r
54 qDebug()<<"Unknown Bugzilla command:\n"<<url;
\r
60 bugScript=vymBaseDir.path()+"/scripts/bugger";
\r
64 connect (p, SIGNAL (finished(int,QProcess::ExitStatus) ),
\r
65 this, SLOT (processFinished(int,QProcess::ExitStatus) ));
\r
67 p->start (bugScript,args);
\r
68 if (!p->waitForStarted())
\r
70 qWarning()<<"BugAgent::getBugzillaData couldn't start "<<bugScript;
\r
74 // Visual hint that we are doing something // FIXME-4 show spinner instead?
\r
75 if (missionType==SingleBug)
\r
76 model->setHeading ("Updating: "+bi->getHeadingPlain(),bi );//FIXME-4 translation needed?
\r
80 BugAgent::~BugAgent ()
\r
82 //qDebug()<<"Destr. BugAgent for "<<branchID;
\r
86 void BugAgent::processFinished(int exitCode, QProcess::ExitStatus exitStatus)
\r
88 if (exitStatus==QProcess::NormalExit)
\r
90 result=p->getStdout().split("\n");
\r
91 QString err=p->getErrout();
\r
93 qWarning() << "BugAgent Error: "<<err;
\r
95 processBugzillaData ();
\r
98 qWarning()<< "BugAgent: Process finished with exitCode="<<exitCode;
\r
103 void BugAgent::processBugzillaData()
\r
105 // Find model from which we had been started
\r
106 VymModel *model=mainWindow->getModel (modelID);
\r
109 // and find branch which triggered this mission
\r
110 BranchItem *missionBI=(BranchItem*)(model->findID (branchID));
\r
115 QRegExp re("(\\d*):(\\S*):\"(.*)\"");
\r
116 re.setMinimal(false);
\r
120 bug_deltats.clear();
\r
121 bug_status.clear();
\r
122 bug_whiteboard.clear();
\r
125 foreach (QString line,result)
\r
127 if (debug) qDebug()<<"BugAgent::procBugData line="<<line;
\r
128 if (re.indexIn(line) !=-1)
\r
130 if (re.cap(2)=="short_desc")
\r
132 bugs.append(re.cap(1));
\r
133 bug_desc[re.cap(1)]=re.cap(3).replace("\\\"","\"");
\r
135 else if (re.cap(2)=="priority")
\r
136 bug_prio[re.cap(1)]=re.cap(3).left(2);
\r
137 else if (re.cap(2)=="bug_severity")
\r
139 if (re.cap(3)=="Critical")
\r
140 bug_sev[re.cap(1)]="S1";
\r
141 else if (re.cap(3)=="Major")
\r
142 bug_sev[re.cap(1)]="S2";
\r
143 else if (re.cap(3)=="Normal")
\r
144 bug_sev[re.cap(1)]="S3";
\r
145 else if (re.cap(3)=="Minor")
\r
146 bug_sev[re.cap(1)]="S4";
\r
147 else if (re.cap(3)=="Enhancement")
\r
148 bug_sev[re.cap(1)]="S5";
\r
151 qWarning()<<"BugAgent: Bugzilla returned severity "<<re.cap(3);
\r
152 bug_sev[re.cap(1)]=re.cap(3);
\r
155 else if (re.cap(2)=="delta_ts")
\r
156 bug_deltats[re.cap(1)]=re.cap(3);
\r
157 else if (re.cap(2)=="bug_status")
\r
158 bug_status[re.cap(1)]=re.cap(3);
\r
159 else if (re.cap(2)=="status_whiteboard")
\r
160 bug_whiteboard[re.cap(1)]=re.cap(3);
\r
163 if (bug_desc.count()<=0)
\r
164 qWarning()<<"BugAgent: Couldn't find data";
\r
165 else if (missionType==SingleBug)
\r
167 // Only single bug changed
\r
168 QString b=bugs.first();
\r
169 setModelBugzillaData (model, missionBI,b);
\r
172 // Process results of query
\r
174 foreach (QString b,bugs)
\r
176 //qDebug ()<<" -> "<<b<<" "<<bug_desc[b];
\r
177 newbi=model->addNewBranch(missionBI);
\r
178 newbi->setURL ("https://bugzilla.novell.com/show_bug.cgi?id="+b);
\r
180 qWarning()<<"BugAgent: Couldn't create new branch?!";
\r
182 setModelBugzillaData (model, newbi,b);
\r
186 qWarning ()<<"BugAgent: Found model, but not branch #"<<branchID;
\r
188 qWarning ()<<"BugAgent: Couldn't find model #"<<modelID;
\r
193 void BugAgent::setModelBugzillaData (VymModel *model, BranchItem *bi, const QString &bugID)
\r
195 QString ps=bug_prio[bugID];
\r
196 if (bug_whiteboard[bugID].contains ("PNEW")) ps=ps+"/"+bug_sev[bugID];
\r
197 if (bug_status[bugID]=="CLOSED"
\r
198 || bug_status[bugID]=="VERIFIED"
\r
199 || bug_status[bugID]=="RESOLVED")
\r
201 model->setHeadingPlainText ("("+ps+") - " + bugID + " - " + bug_desc[bugID],bi);
\r
202 model->colorSubtree (Qt::blue,bi);
\r
204 model->setHeadingPlainText (ps+ " - " + bugID + " - " + bug_desc[bugID],bi);
\r