Initial checkin
[opensuse:qtobs.git] / mainwindow.cpp
1 /*
2  *  Qt OBS - A Qt based OBS client
3  *
4  *  Copyright (C) 2010 Novell Inc, Klaas Freitag <freitag@suse.de>
5  *
6  *  This program is free software: you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License as published by
8  *  the Free Software Foundation, either version 2 of the License, or
9  *  (at your option) version 3.
10  *
11  *  This program is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *  GNU General Public License for more details.
15  *
16  *  You should have received a copy of the GNU General Public License
17  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
18  *
19  *  --
20  *  Written by Klaas Freitag <freitag@suse.de>
21  *  Contributors:
22  */
23
24 #include <QNetworkReply>
25 #include <QDebug>
26 #include <QTimer>
27 #include <QUrl>
28
29 #include "mainwindow.h"
30 #include "qmakeinfo.h"
31
32 #include "ui_mainwindow.h"
33 #include "obsaccess.h"
34 #include "obssettings.h"
35 #include "userxmlreader.h"
36 #include "obsbuildstatus.h"
37 #include "statusdelegate.h"
38
39 MainWindow::MainWindow(QWidget *parent)
40     : QMainWindow(parent), ui(new Ui::MainWindow),
41     mTreeWidget(0),
42     mResultWidget(0)
43 {
44     ui->setupUi(this);
45
46     OBSSettings settings;
47     ui->mOBSApi->setText( settings.obsApiUrl().toString() );
48     ui->mOBSUser->setText( settings.obsUser() );
49     ui->mOBSPassword->setText( settings.obsPasswd() );
50     ui->mBaseProject->setText( settings.obsBasePrj() );
51
52     setWindowTitle( tr("Connecting to OBS..."));
53 }
54
55 MainWindow::~MainWindow()
56 {
57     delete ui;
58 }
59
60 void MainWindow::setWorkFile( const QString& file )
61 {
62   QMakeInfo info( file );
63   ui->mProFile->setText( tr("Qt Project File: <i>%1</i>").arg( file ));
64   if( info.readQMakeFile() ) {
65     ui->mPackageNameEdit->setText( info.target() );
66   }
67
68 }
69
70 void MainWindow::slotGetUserInfo()
71 {
72   mAccess = new OBSAccess( ui->mOBSApi->text() );
73   mAccess->setCredentials( ui->mOBSUser->text(), ui->mOBSPassword->text() );
74   mAccess->setXmlReadHandler( new UserXmlReader() );
75
76   connect( mAccess, SIGNAL( parsingOk()), this, SLOT( slotUserInfo() ) );
77   mAccess->getPath( ui->mOBSUser->text() );
78 }
79
80 void MainWindow::slotUserInfo()
81 {
82   if( mAccess ) {
83     UserXmlReader *reader = static_cast<UserXmlReader*>( mAccess->xmlReadHandler());
84     if( reader ) {
85       qDebug() << "Which is cool: " << reader->login();
86       setWindowTitle( QString( "%1 (%2) on OBS").arg( reader->realName()).arg( reader->login() ) );
87     }
88     delete reader;
89   }
90 }
91
92 void MainWindow::slotGetProjectBuildStatus()
93 {
94   OBSBuildStatus *buildStatus = new OBSBuildStatus;
95
96   buildStatus->setCredentials( ui->mOBSUser->text(), ui->mOBSPassword->text() );
97   QString project = ui->mBaseProject->text();
98   buildStatus->setProject( project );
99   connect( buildStatus, SIGNAL(buildStatusArrived(OBSProjectBuildResults)),
100            this, SLOT( slotBuildStatusArrived( OBSProjectBuildResults ) ) );
101   buildStatus->getStatus();
102 }
103
104 void MainWindow::slotBuildStatusArrived( OBSProjectBuildResults results )
105 {
106   QListIterator<OBSProjectBuildResult> i (results );
107   while( i.hasNext() ) {
108     OBSProjectBuildResult res = i.next();
109
110     QListIterator<OBSPackageBuildResult> pi( res.packageResults() );
111     qDebug() << "---> " << res.project() << " - " << res.repository() << " - " << res.project() << " - " << res.architecture() << endl;
112
113     while( pi.hasNext()) {
114       OBSPackageBuildResult pRes = pi.next();
115
116       qDebug() << "      Package:> " << pRes.name();
117     }
118   }
119
120   if( !mResultWidget ) {
121     mResultWidget = new ProjectResultWidget( this );
122     mStatusModel = new StatusModel(this);
123     mResultWidget->setModel( mStatusModel );
124
125     StatusDelegate *delegate = new StatusDelegate(this);
126     mResultWidget->setItemDelegate(delegate);
127
128     ui->mToolBox->addItem( mResultWidget, QIcon(), tr( "Build Status" ) );
129   } else {
130     // mResultWidget->clear();
131   }
132   mStatusModel->setBuildResults( results );
133   mResultWidget->resizeColumnsToContents ();
134 }
135
136
137
138
139