Changeset 43707 in vbox
- Timestamp:
- Oct 22, 2012 4:41:04 PM (12 years ago)
- svn:sync-xref-src-repo-rev:
- 81569
- Location:
- trunk/src/VBox/Frontends/VirtualBox
- Files:
-
- 14 edited
- 2 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk
r43059 r43707 286 286 src/net/UINetworkRequest.h \ 287 287 src/net/UINetworkRequestWidget.h \ 288 src/net/UINetworkReply.h \ 288 289 src/net/UINetworkCustomer.h \ 289 290 src/net/UIUpdateManager.h \ … … 440 441 src/globals/UIExtraDataEventHandler.cpp \ 441 442 src/medium/UIMediumManager.cpp \ 443 src/net/UINetworkReply.cpp \ 442 444 src/net/UIUpdateManager.cpp \ 443 445 src/runtime/UIActionPoolRuntime.cpp \ … … 519 521 src/net/UINetworkRequest.cpp \ 520 522 src/net/UINetworkRequestWidget.cpp \ 523 src/net/UINetworkReply.cpp \ 521 524 src/net/UINetworkCustomer.cpp \ 522 525 src/net/UIDownloader.cpp \ -
trunk/src/VBox/Frontends/VirtualBox/src/net/UIDownloader.cpp
r41140 r43707 18 18 */ 19 19 20 /* Global includes: */ 21 #include <QNetworkReply> 22 23 /* Local includes: */ 20 /* GUI includes: */ 21 #include <UINetworkReply.h> 24 22 #include "UIDownloader.h" 25 23 #include "VBoxGlobal.h" … … 79 77 80 78 /* Network-reply canceled handler: */ 81 void UIDownloader::processNetworkReplyCanceled( QNetworkReply *pNetworkReply)79 void UIDownloader::processNetworkReplyCanceled(UINetworkReply *pNetworkReply) 82 80 { 83 81 /* Unused variables: */ … … 89 87 90 88 /* Network-reply finished handler: */ 91 void UIDownloader::processNetworkReplyFinished( QNetworkReply *pNetworkReply)89 void UIDownloader::processNetworkReplyFinished(UINetworkReply *pNetworkReply) 92 90 { 93 91 /* Process reply: */ … … 110 108 111 109 /* Handle acknowledging result: */ 112 void UIDownloader::handleAcknowledgingResult( QNetworkReply *pNetworkReply)110 void UIDownloader::handleAcknowledgingResult(UINetworkReply *pNetworkReply) 113 111 { 114 112 /* Get the final source: */ … … 129 127 130 128 /* Handle downloading result: */ 131 void UIDownloader::handleDownloadingResult( QNetworkReply *pNetworkReply)129 void UIDownloader::handleDownloadingResult(UINetworkReply *pNetworkReply) 132 130 { 133 131 /* Handle downloaded object: */ -
trunk/src/VBox/Frontends/VirtualBox/src/net/UIDownloader.h
r41140 r43707 29 29 30 30 /* Forward declarations: */ 31 class QNetworkReply;31 class UINetworkReply; 32 32 33 33 /* Downloader interface. … … 93 93 void processNetworkReplyProgress(qint64 iReceived, qint64 iTotal); 94 94 /* Network-reply cancel handler: */ 95 void processNetworkReplyCanceled( QNetworkReply *pNetworkReply);95 void processNetworkReplyCanceled(UINetworkReply *pNetworkReply); 96 96 /* Network-reply finish handler: */ 97 void processNetworkReplyFinished( QNetworkReply *pNetworkReply);97 void processNetworkReplyFinished(UINetworkReply *pNetworkReply); 98 98 99 99 /* Handle acknowledging result: */ 100 virtual void handleAcknowledgingResult( QNetworkReply *pNetworkReply);100 virtual void handleAcknowledgingResult(UINetworkReply *pNetworkReply); 101 101 /* Handle downloading result: */ 102 virtual void handleDownloadingResult( QNetworkReply *pNetworkReply);102 virtual void handleDownloadingResult(UINetworkReply *pNetworkReply); 103 103 104 104 /* Pure virtual function to ask user about downloading confirmation: */ 105 virtual bool askForDownloadingConfirmation( QNetworkReply *pNetworkReply) = 0;105 virtual bool askForDownloadingConfirmation(UINetworkReply *pNetworkReply) = 0; 106 106 /* Pure virtual function to handle downloaded object: */ 107 virtual void handleDownloadedObject( QNetworkReply *pNetworkReply) = 0;107 virtual void handleDownloadedObject(UINetworkReply *pNetworkReply) = 0; 108 108 109 109 private: -
trunk/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderAdditions.cpp
r41140 r43707 19 19 20 20 /* Global includes: */ 21 #include <QNetworkReply>22 21 #include <QDir> 23 22 #include <QFile> … … 25 24 /* Local includes: */ 26 25 #include "UIDownloaderAdditions.h" 26 #include "UINetworkReply.h" 27 27 #include "QIFileDialog.h" 28 28 #include "VBoxGlobal.h" … … 72 72 } 73 73 74 bool UIDownloaderAdditions::askForDownloadingConfirmation( QNetworkReply *pReply)74 bool UIDownloaderAdditions::askForDownloadingConfirmation(UINetworkReply *pReply) 75 75 { 76 76 return msgCenter().confirmDownloadAdditions(source().toString(), pReply->header(QNetworkRequest::ContentLengthHeader).toInt()); 77 77 } 78 78 79 void UIDownloaderAdditions::handleDownloadedObject( QNetworkReply *pReply)79 void UIDownloaderAdditions::handleDownloadedObject(UINetworkReply *pReply) 80 80 { 81 81 /* Read received data into the buffer: */ -
trunk/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderAdditions.h
r41140 r43707 46 46 47 47 /* Virtual stuff reimplementations: */ 48 bool askForDownloadingConfirmation( QNetworkReply *pReply);49 void handleDownloadedObject( QNetworkReply *pReply);48 bool askForDownloadingConfirmation(UINetworkReply *pReply); 49 void handleDownloadedObject(UINetworkReply *pReply); 50 50 51 51 /* Variables: */ -
trunk/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderExtensionPack.cpp
r41689 r43707 19 19 20 20 /* Global includes: */ 21 #include <QNetworkReply>22 21 #include <QDir> 23 22 #include <QFile> … … 26 25 /* Local includes: */ 27 26 #include "UIDownloaderExtensionPack.h" 27 #include "UINetworkReply.h" 28 28 #include "QIFileDialog.h" 29 29 #include "VBoxGlobal.h" … … 79 79 } 80 80 81 bool UIDownloaderExtensionPack::askForDownloadingConfirmation( QNetworkReply *pReply)81 bool UIDownloaderExtensionPack::askForDownloadingConfirmation(UINetworkReply *pReply) 82 82 { 83 83 return msgCenter().confirmDownloadExtensionPack(GUI_ExtPackName, source().toString(), pReply->header(QNetworkRequest::ContentLengthHeader).toInt()); 84 84 } 85 85 86 void UIDownloaderExtensionPack::handleDownloadedObject( QNetworkReply *pReply)86 void UIDownloaderExtensionPack::handleDownloadedObject(UINetworkReply *pReply) 87 87 { 88 88 /* Read received data into the buffer: */ -
trunk/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderExtensionPack.h
r41141 r43707 46 46 47 47 /* Virtual stuff reimplementations: */ 48 bool askForDownloadingConfirmation( QNetworkReply *pReply);49 void handleDownloadedObject( QNetworkReply *pReply);48 bool askForDownloadingConfirmation(UINetworkReply *pReply); 49 void handleDownloadedObject(UINetworkReply *pReply); 50 50 51 51 /* Variables: */ -
trunk/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderUserManual.cpp
r41140 r43707 19 19 20 20 /* Global includes: */ 21 #include <QNetworkReply>22 21 #include <QDir> 23 22 #include <QFile> … … 25 24 /* Local includes: */ 26 25 #include "UIDownloaderUserManual.h" 26 #include "UINetworkReply.h" 27 27 #include "QIFileDialog.h" 28 28 #include "VBoxGlobal.h" … … 75 75 } 76 76 77 bool UIDownloaderUserManual::askForDownloadingConfirmation( QNetworkReply *pReply)77 bool UIDownloaderUserManual::askForDownloadingConfirmation(UINetworkReply *pReply) 78 78 { 79 79 return msgCenter().confirmUserManualDownload(source().toString(), pReply->header(QNetworkRequest::ContentLengthHeader).toInt()); 80 80 } 81 81 82 void UIDownloaderUserManual::handleDownloadedObject( QNetworkReply *pReply)82 void UIDownloaderUserManual::handleDownloadedObject(UINetworkReply *pReply) 83 83 { 84 84 /* Read received data into the buffer: */ -
trunk/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderUserManual.h
r41140 r43707 46 46 47 47 /* Virtual stuff reimplementations: */ 48 bool askForDownloadingConfirmation( QNetworkReply *pReply);49 void handleDownloadedObject( QNetworkReply *pReply);48 bool askForDownloadingConfirmation(UINetworkReply *pReply); 49 void handleDownloadedObject(UINetworkReply *pReply); 50 50 51 51 /* Variables: */ -
trunk/src/VBox/Frontends/VirtualBox/src/net/UINetworkCustomer.h
r41153 r43707 27 27 28 28 /* Forward declarations: */ 29 class QNetworkReply;29 class UINetworkReply; 30 30 class QNetworkRequest; 31 31 … … 47 47 virtual void processNetworkReplyProgress(qint64 iReceived, qint64 iTotal) = 0; 48 48 /* Network-reply cancel handler: */ 49 virtual void processNetworkReplyCanceled( QNetworkReply *pReply) = 0;49 virtual void processNetworkReplyCanceled(UINetworkReply *pReply) = 0; 50 50 /* Network-reply finish handler: */ 51 virtual void processNetworkReplyFinished( QNetworkReply *pReply) = 0;51 virtual void processNetworkReplyFinished(UINetworkReply *pReply) = 0; 52 52 53 53 protected: -
trunk/src/VBox/Frontends/VirtualBox/src/net/UINetworkDefs.h
r41143 r43707 24 24 { 25 25 UINetworkRequestType_HEAD, 26 UINetworkRequestType_GET 26 UINetworkRequestType_GET, 27 UINetworkRequestType_GET_Our 28 }; 29 30 /* Network-reply types: */ 31 enum UINetworkReplyType 32 { 33 UINetworkReplyType_Qt, 34 UINetworkReplyType_Our 27 35 }; 28 36 -
trunk/src/VBox/Frontends/VirtualBox/src/net/UINetworkReply.cpp
r43700 r43707 3 3 * 4 4 * VBox frontends: Qt GUI ("VirtualBox"): 5 * UINetworkRe queststuff implementation5 * UINetworkReply stuff implementation 6 6 */ 7 7 8 8 /* 9 * Copyright (C) 201 1-2012 Oracle Corporation9 * Copyright (C) 2012 Oracle Corporation 10 10 * 11 11 * This file is part of VirtualBox Open Source Edition (OSE), as … … 18 18 */ 19 19 20 /* Global includes: */ 21 #include <QNetworkReply> 22 23 /* Local includes: */ 24 #include "UINetworkRequest.h" 25 #include "UINetworkRequestWidget.h" 20 /* GUI includes: */ 21 #include "UINetworkReply.h" 26 22 #include "UINetworkManager.h" 27 #include "UINetworkManagerDialog.h" 28 #include "UINetworkManagerIndicator.h" 29 #include "UINetworkCustomer.h" 30 #include "VBoxGlobal.h" 31 32 /* Constructor: */ 33 UINetworkRequest::UINetworkRequest(const QNetworkRequest &request, UINetworkRequestType type, const QString &strDescription, 34 UINetworkCustomer *pCustomer, 35 UINetworkManager *pNetworkManager) 36 : QObject(pNetworkManager) 37 , m_pNetworkManagerDialog(pNetworkManager->window()) 38 , m_pNetworkManagerIndicator(pNetworkManager->indicator()) 39 , m_uuid(QUuid::createUuid()) 40 , m_requests(QList<QNetworkRequest>() << request) 41 , m_iCurrentRequestIndex(0) 42 , m_type(type) 43 , m_strDescription(strDescription) 44 , m_pCustomer(pCustomer) 45 , m_fRunning(false) 46 { 47 /* Initialize: */ 48 initialize(); 49 } 50 51 UINetworkRequest::UINetworkRequest(const QList<QNetworkRequest> &requests, UINetworkRequestType type, const QString &strDescription, 52 UINetworkCustomer *pCustomer, 53 UINetworkManager *pNetworkManager) 54 : QObject(pNetworkManager) 55 , m_pNetworkManagerDialog(pNetworkManager->window()) 56 , m_pNetworkManagerIndicator(pNetworkManager->indicator()) 57 , m_uuid(QUuid::createUuid()) 58 , m_requests(requests) 59 , m_iCurrentRequestIndex(0) 60 , m_type(type) 61 , m_strDescription(strDescription) 62 , m_pCustomer(pCustomer) 63 , m_fRunning(false) 64 { 65 /* Initialize: */ 66 initialize(); 67 } 68 69 /* Destructor: */ 70 UINetworkRequest::~UINetworkRequest() 71 { 72 /* Destroy network-reply: */ 73 cleanupNetworkReply(); 74 75 /* Remove network-request description from network-manager state-indicator: */ 76 if (m_pNetworkManagerIndicator) 77 m_pNetworkManagerIndicator->removeNetworkRequest(m_uuid); 78 79 /* Remove network-request widget from network-manager dialog: */ 80 m_pNetworkManagerDialog->removeNetworkRequestWidget(m_uuid); 81 } 82 83 /* Network-reply progress handler: */ 84 void UINetworkRequest::sltHandleNetworkReplyProgress(qint64 iReceived, qint64 iTotal) 85 { 86 /* Notify general network-requests listeners: */ 87 emit sigProgress(m_uuid, iReceived, iTotal); 88 /* Notify particular network-request listeners: */ 89 emit sigProgress(iReceived, iTotal); 90 } 91 92 /* Network-reply finish handler: */ 93 void UINetworkRequest::sltHandleNetworkReplyFinish() 94 { 95 /* Set as non-running: */ 96 m_fRunning = false; 97 98 /* Get sender network-reply: */ 99 QNetworkReply *pNetworkReply = static_cast<QNetworkReply*>(sender()); 100 101 /* If network-request was canceled: */ 102 if (pNetworkReply->error() == QNetworkReply::OperationCanceledError) 103 { 104 /* Notify network-manager: */ 105 emit sigCanceled(m_uuid); 106 } 107 /* If network-reply has no errors: */ 108 else if (pNetworkReply->error() == QNetworkReply::NoError) 109 { 110 /* Check if redirection required: */ 111 QUrl redirect = pNetworkReply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl(); 112 if (redirect.isValid()) 23 24 /* Other VBox includes; */ 25 #include <iprt/err.h> 26 #include <iprt/http.h> 27 #include <iprt/stream.h> 28 #include <iprt/initterm.h> 29 #include <iprt/mem.h> 30 31 /* Our network-reply thread: */ 32 class UINetworkReplyPrivateThread : public QThread 33 { 34 Q_OBJECT; 35 36 public: 37 38 /* Constructor: */ 39 UINetworkReplyPrivateThread(const QNetworkRequest &request) 40 : m_request(request) 41 , m_iError(VINF_SUCCESS) 42 { 43 } 44 45 /* API: */ 46 const QByteArray& readAll() const { return m_reply; } 47 int error() const { return m_iError; } 48 49 private: 50 51 /* Thread runner: */ 52 void run() 53 { 54 /* Init: */ 55 RTR3InitExeNoArguments(RTR3INIT_FLAGS_SUPLIB); 56 57 /* Create: */ 58 RTHTTP hHttp; 59 m_iError = RTHttpCreate(&hHttp); 60 61 /* Acquire: */ 62 if (RT_SUCCESS(m_iError)) 113 63 { 114 /* Cleanup current network-reply first: */ 115 cleanupNetworkReply(); 116 117 /* Choose redirect-source as current: */ 118 m_request.setUrl(redirect); 119 120 /* Create new network-reply finally: */ 121 prepareNetworkReply(); 64 char *pszBuf = 0; 65 m_iError = RTHttpGet(hHttp, 66 m_request.url().toString().toAscii().constData(), 67 &pszBuf); 68 m_reply = QByteArray(pszBuf); 69 RTMemFree(pszBuf); 122 70 } 123 else 71 72 /* Destroy: */ 73 RTHttpDestroy(hHttp); 74 } 75 76 /* Variables: */ 77 QNetworkRequest m_request; 78 int m_iError; 79 QByteArray m_reply; 80 }; 81 82 /* Our network-reply object: */ 83 class UINetworkReplyPrivate : public QObject 84 { 85 Q_OBJECT; 86 87 signals: 88 89 /* Notifiers: */ 90 void downloadProgress(qint64 iBytesReceived, qint64 iBytesTotal); 91 void finished(); 92 93 public: 94 95 /* Constructor: */ 96 UINetworkReplyPrivate(const QNetworkRequest &request) 97 : m_error(QNetworkReply::NoError) 98 , m_pThread(0) 99 { 100 /* Create and run network-reply thread: */ 101 m_pThread = new UINetworkReplyPrivateThread(request); 102 connect(m_pThread, SIGNAL(finished()), this, SLOT(sltFinished())); 103 m_pThread->start(); 104 } 105 106 /* Destructor: */ 107 ~UINetworkReplyPrivate() 108 { 109 /* Terminate network-reply thread: */ 110 m_pThread->wait(); 111 delete m_pThread; 112 m_pThread = 0; 113 } 114 115 /* API: Abort reply: */ 116 void abort() 117 { 118 m_error = QNetworkReply::OperationCanceledError; 119 emit finished(); 120 } 121 122 /* API: Error-code getter: */ 123 QNetworkReply::NetworkError error() const { return m_error; } 124 125 /* API: Error-string getter: */ 126 QString errorString() const 127 { 128 switch (m_error) 124 129 { 125 /* Notify particular network-request listeners: */ 126 emit sigFinished(); 127 /* Notify general network-requests listeners: */ 128 emit sigFinished(m_uuid); 130 case QNetworkReply::NoError: 131 break; 132 case QNetworkReply::HostNotFoundError: 133 return tr("The server has not found anything matching the URI given"); 134 break; 135 case QNetworkReply::ContentAccessDenied: 136 return tr("The request is for something forbidden, authorization will not help"); 137 break; 138 case QNetworkReply::ProtocolFailure: 139 return tr("The server did not understand the request due to bad syntax"); 140 break; 141 default: 142 return tr("Unrecognized network error"); 143 break; 129 144 } 130 } 131 /* If some error occured: */ 132 else 133 { 134 /* Check if we have other requests in set: */ 135 if (m_iCurrentRequestIndex < m_requests.size() - 1) 145 return QString(); 146 } 147 148 /* API: Reply getter: */ 149 QByteArray readAll() { return m_pThread->readAll(); } 150 151 private slots: 152 153 /* Handler: Thread finished: */ 154 void sltFinished() 155 { 156 switch (m_pThread->error()) 136 157 { 137 /* Cleanup current network-reply first: */ 138 cleanupNetworkReply(); 139 140 /* Choose next network-request as current: */ 141 ++m_iCurrentRequestIndex; 142 m_request = m_requests[m_iCurrentRequestIndex]; 143 144 /* Create new network-reply finally: */ 145 prepareNetworkReply(); 158 case VINF_SUCCESS: 159 m_error = QNetworkReply::NoError; 160 break; 161 case VERR_HTTP_NOT_FOUND: 162 m_error = QNetworkReply::HostNotFoundError; 163 break; 164 case VERR_HTTP_ACCESS_DENIED: 165 m_error = QNetworkReply::ContentAccessDenied; 166 break; 167 case VERR_HTTP_BAD_REQUEST: 168 m_error = QNetworkReply::ProtocolFailure; 169 break; 170 default: 171 m_error = QNetworkReply::UnknownNetworkError; 172 break; 146 173 } 147 else 148 { 149 /* Notify particular network-request listeners: */ 150 emit sigFailed(pNetworkReply->errorString()); 151 /* Notify general network-requests listeners: */ 152 emit sigFailed(m_uuid, pNetworkReply->errorString()); 153 } 154 } 155 } 156 157 /* Slot to retry network-request: */ 158 void UINetworkRequest::sltRetry() 159 { 160 /* Cleanup current network-reply first: */ 161 cleanupNetworkReply(); 162 163 /* Choose first network-request as current: */ 164 m_iCurrentRequestIndex = 0; 165 m_request = m_requests[m_iCurrentRequestIndex]; 166 167 /* Create new network-reply finally: */ 168 prepareNetworkReply(); 169 } 170 171 /* Slot to cancel network-request: */ 172 void UINetworkRequest::sltCancel() 173 { 174 /* Abort network-reply if present: */ 175 abortNetworkReply(); 176 } 177 178 /* Initialize: */ 179 void UINetworkRequest::initialize() 180 { 181 /* Prepare listeners for parent(): */ 182 connect(parent(), SIGNAL(sigCancelNetworkRequests()), this, SLOT(sltCancel())); 183 184 /* Create network-request widget in network-manager dialog: */ 185 m_pNetworkManagerDialog->addNetworkRequestWidget(this); 186 187 /* Create network-request description in network-manager state-indicator: */ 188 if (m_pNetworkManagerIndicator) 189 m_pNetworkManagerIndicator->addNetworkRequest(this); 190 191 /* Choose first network-request as current: */ 192 m_iCurrentRequestIndex = 0; 193 m_request = m_requests[m_iCurrentRequestIndex]; 194 195 /* Create network-reply: */ 196 prepareNetworkReply(); 197 } 198 199 /* Prepare network-reply: */ 200 void UINetworkRequest::prepareNetworkReply() 201 { 202 /* Make network-request: */ 203 switch (m_type) 204 { 174 emit finished(); 175 } 176 177 private: 178 179 /* Variables: */ 180 QNetworkReply::NetworkError m_error; 181 UINetworkReplyPrivateThread *m_pThread; 182 }; 183 184 UINetworkReply::UINetworkReply(const QNetworkRequest &request, UINetworkRequestType requestType) 185 : m_replyType(UINetworkReplyType_Qt) 186 , m_pReply(0) 187 { 188 /* Create network-reply object: */ 189 switch (requestType) 190 { 191 /* Prepare Qt network-reply (HEAD): */ 205 192 case UINetworkRequestType_HEAD: 206 {207 m_pReply = gNetworkManager->head( m_request);193 m_replyType = UINetworkReplyType_Qt; 194 m_pReply = gNetworkManager->head(request); 208 195 break; 209 }196 /* Prepare Qt network-reply (GET): */ 210 197 case UINetworkRequestType_GET: 211 {212 m_pReply = gNetworkManager->get( m_request);198 m_replyType = UINetworkReplyType_Qt; 199 m_pReply = gNetworkManager->get(request); 213 200 break; 214 } 215 default: 201 /* Prepare our network-reply (GET): */ 202 case UINetworkRequestType_GET_Our: 203 m_replyType = UINetworkReplyType_Our; 204 m_pReply = new UINetworkReplyPrivate(request); 216 205 break; 217 206 } 218 207 219 /* Prepare listeners for m_pReply: */ 220 AssertMsg(m_pReply, ("Unable to make network-request!\n")); 221 connect(m_pReply, SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(sltHandleNetworkReplyProgress(qint64, qint64))); 222 connect(m_pReply, SIGNAL(finished()), this, SLOT(sltHandleNetworkReplyFinish())); 223 224 /* Set as running: */ 225 m_fRunning = true; 226 227 /* Notify general network-requests listeners: */ 228 emit sigStarted(m_uuid); 229 /* Notify particular network-request listeners: */ 230 emit sigStarted(); 231 } 232 233 /* Cleanup network-reply: */ 234 void UINetworkRequest::cleanupNetworkReply() 235 { 236 /* Destroy current reply: */ 237 AssertMsg(m_pReply, ("Network-reply already destroyed!\n")); 238 m_pReply->disconnect(); 239 m_pReply->deleteLater(); 240 m_pReply = 0; 241 } 242 243 /* Abort network-reply: */ 244 void UINetworkRequest::abortNetworkReply() 245 { 246 /* Abort network-reply if present: */ 208 /* Prepare network-reply object connections: */ 209 connect(m_pReply, SIGNAL(downloadProgress(qint64, qint64)), this, SIGNAL(downloadProgress(qint64, qint64))); 210 connect(m_pReply, SIGNAL(finished()), this, SIGNAL(finished())); 211 } 212 213 UINetworkReply::~UINetworkReply() 214 { 215 /* Cleanup network-reply object: */ 247 216 if (m_pReply) 248 217 { 249 if (m_fRunning) 250 m_pReply->abort(); 251 else 252 emit sigCanceled(m_uuid); 253 } 254 } 255 218 delete m_pReply; 219 m_pReply = 0; 220 } 221 } 222 223 QVariant UINetworkReply::header(QNetworkRequest::KnownHeaders header) const 224 { 225 QVariant result; 226 switch (m_replyType) 227 { 228 case UINetworkReplyType_Qt: result = qobject_cast<QNetworkReply*>(m_pReply)->header(header); break; 229 case UINetworkReplyType_Our: /* TODO: header() */ break; 230 } 231 return result; 232 } 233 234 QVariant UINetworkReply::attribute(QNetworkRequest::Attribute code) const 235 { 236 QVariant result; 237 switch (m_replyType) 238 { 239 case UINetworkReplyType_Qt: result = qobject_cast<QNetworkReply*>(m_pReply)->attribute(code); break; 240 case UINetworkReplyType_Our: /* TODO: attribute() */ break; 241 } 242 return result; 243 } 244 245 void UINetworkReply::abort() 246 { 247 switch (m_replyType) 248 { 249 case UINetworkReplyType_Qt: qobject_cast<QNetworkReply*>(m_pReply)->abort(); break; 250 case UINetworkReplyType_Our: qobject_cast<UINetworkReplyPrivate*>(m_pReply)->abort(); break; 251 } 252 } 253 254 QNetworkReply::NetworkError UINetworkReply::error() const 255 { 256 QNetworkReply::NetworkError result = QNetworkReply::NoError; 257 switch (m_replyType) 258 { 259 case UINetworkReplyType_Qt: result = qobject_cast<QNetworkReply*>(m_pReply)->error(); break; 260 case UINetworkReplyType_Our: result = qobject_cast<UINetworkReplyPrivate*>(m_pReply)->error(); break; 261 } 262 return result; 263 } 264 265 QString UINetworkReply::errorString() const 266 { 267 QString strResult; 268 switch (m_replyType) 269 { 270 case UINetworkReplyType_Qt: strResult = qobject_cast<QNetworkReply*>(m_pReply)->errorString(); break; 271 case UINetworkReplyType_Our: strResult = qobject_cast<UINetworkReplyPrivate*>(m_pReply)->errorString(); break; 272 } 273 return strResult; 274 } 275 276 QByteArray UINetworkReply::readAll() 277 { 278 QByteArray result; 279 switch (m_replyType) 280 { 281 case UINetworkReplyType_Qt: result = qobject_cast<QNetworkReply*>(m_pReply)->readAll(); break; 282 case UINetworkReplyType_Our: result = qobject_cast<UINetworkReplyPrivate*>(m_pReply)->readAll(); break; 283 } 284 return result; 285 } 286 287 QUrl UINetworkReply::url() const 288 { 289 QUrl result; 290 switch (m_replyType) 291 { 292 case UINetworkReplyType_Qt: result = qobject_cast<QNetworkReply*>(m_pReply)->url(); break; 293 case UINetworkReplyType_Our: /* TODO: url() */ break; 294 } 295 return result; 296 } 297 298 #include "UINetworkReply.moc" 299 -
trunk/src/VBox/Frontends/VirtualBox/src/net/UINetworkReply.h
r43700 r43707 2 2 * 3 3 * VBox frontends: Qt GUI ("VirtualBox"): 4 * UINetworkRe queststuff declaration4 * UINetworkReply stuff declaration 5 5 */ 6 6 7 7 /* 8 * Copyright (C) 201 1-2012 Oracle Corporation8 * Copyright (C) 2012 Oracle Corporation 9 9 * 10 10 * This file is part of VirtualBox Open Source Edition (OSE), as … … 17 17 */ 18 18 19 #ifndef __UINetworkRe quest_h__20 #define __UINetworkRe quest_h__19 #ifndef __UINetworkReply_h__ 20 #define __UINetworkReply_h__ 21 21 22 /* Globalincludes: */23 #include <Q Uuid>24 #include <Q NetworkRequest>22 /* Qt includes: */ 23 #include <QPointer> 24 #include <QThread> 25 25 #include <QNetworkReply> 26 #include <QPointer>27 26 28 /* Local inludes: */27 /* GUI includes: */ 29 28 #include "UINetworkDefs.h" 30 29 31 30 /* Forward declarations: */ 32 class UINetworkManager; 33 class UINetworkManagerDialog; 34 class UINetworkManagerIndicator; 35 class UINetworkRequestWidget; 36 class UINetworkCustomer; 31 class UINetworkReplyPrivateThread; 37 32 38 /* Network-re quest contianer: */39 class UINetworkRe quest: public QObject33 /* Network-reply interface: */ 34 class UINetworkReply : public QObject 40 35 { 41 36 Q_OBJECT; … … 43 38 signals: 44 39 45 /* Notifications to UINetworkManager: */ 46 void sigProgress(const QUuid &uuid, qint64 iReceived, qint64 iTotal); 47 void sigStarted(const QUuid &uuid); 48 void sigCanceled(const QUuid &uuid); 49 void sigFinished(const QUuid &uuid); 50 void sigFailed(const QUuid &uuid, const QString &strError); 51 52 /* Notifications to UINetworkRequestWidget: */ 53 void sigProgress(qint64 iReceived, qint64 iTotal); 54 void sigStarted(); 55 void sigFinished(); 56 void sigFailed(const QString &strError); 40 /* Notifiers: */ 41 void downloadProgress(qint64 iBytesReceived, qint64 iBytesTotal); 42 void finished(); 57 43 58 44 public: 59 45 60 46 /* Constructor/destructor: */ 61 UINetworkRequest(const QNetworkRequest &request, UINetworkRequestType type, const QString &strDescription, 62 UINetworkCustomer *pCustomer, 63 UINetworkManager *pNetworkManager); 64 UINetworkRequest(const QList<QNetworkRequest> &requests, UINetworkRequestType type, const QString &strDescription, 65 UINetworkCustomer *pCustomer, 66 UINetworkManager *pNetworkManager); 67 ~UINetworkRequest(); 47 UINetworkReply(const QNetworkRequest &request, UINetworkRequestType requestType); 48 ~UINetworkReply(); 68 49 69 /* Getters: */ 70 const QUuid& uuid() const { return m_uuid; } 71 const QString& description() const { return m_strDescription; } 72 UINetworkCustomer* customer() { return m_pCustomer; } 73 QNetworkReply* reply() { return m_pReply; } 74 75 private slots: 76 77 /* Network-reply progress handler: */ 78 void sltHandleNetworkReplyProgress(qint64 iReceived, qint64 iTotal); 79 /* Network-reply finish handler: */ 80 void sltHandleNetworkReplyFinish(); 81 82 /* Slot to retry network-request: */ 83 void sltRetry(); 84 /* Slot to cancel network-request: */ 85 void sltCancel(); 50 /* API: */ 51 QVariant header(QNetworkRequest::KnownHeaders header) const; 52 QVariant attribute(QNetworkRequest::Attribute code) const; 53 void abort(); 54 QNetworkReply::NetworkError error() const; 55 QString errorString() const; 56 QByteArray readAll(); 57 QUrl url() const; 86 58 87 59 private: 88 60 89 /* Initialize: */90 void initialize();91 92 /* Prepare network-reply: */93 void prepareNetworkReply();94 /* Cleanup network-reply: */95 void cleanupNetworkReply();96 /* Abort network-reply: */97 void abortNetworkReply();98 99 /* Widgets: */100 UINetworkManagerDialog *m_pNetworkManagerDialog;101 UINetworkManagerIndicator *m_pNetworkManagerIndicator;102 103 61 /* Variables: */ 104 QUuid m_uuid; 105 QList<QNetworkRequest> m_requests; 106 QNetworkRequest m_request; 107 int m_iCurrentRequestIndex; 108 UINetworkRequestType m_type; 109 QString m_strDescription; 110 UINetworkCustomer *m_pCustomer; 111 QPointer<QNetworkReply> m_pReply; 112 bool m_fRunning; 62 UINetworkReplyType m_replyType; 63 QPointer<QObject> m_pReply; 113 64 }; 114 65 115 #endif // __UINetworkRe quest_h__66 #endif // __UINetworkReply_h__ -
trunk/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequest.cpp
r42901 r43707 18 18 */ 19 19 20 /* Globalincludes: */20 /* Qt includes: */ 21 21 #include <QNetworkReply> 22 22 23 /* Localincludes: */23 /* GUI includes: */ 24 24 #include "UINetworkRequest.h" 25 25 #include "UINetworkRequestWidget.h" … … 96 96 m_fRunning = false; 97 97 98 /* Get sender network-reply: */ 99 QNetworkReply *pNetworkReply = static_cast<QNetworkReply*>(sender()); 98 /* Make sure network-reply still valid: */ 99 if (!m_pReply) 100 return; 100 101 101 102 /* If network-request was canceled: */ 102 if ( pNetworkReply->error() == QNetworkReply::OperationCanceledError)103 if (m_pReply->error() == QNetworkReply::OperationCanceledError) 103 104 { 104 105 /* Notify network-manager: */ … … 106 107 } 107 108 /* If network-reply has no errors: */ 108 else if ( pNetworkReply->error() == QNetworkReply::NoError)109 else if (m_pReply->error() == QNetworkReply::NoError) 109 110 { 110 111 /* Check if redirection required: */ 111 QUrl redirect = pNetworkReply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();112 QUrl redirect = m_pReply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl(); 112 113 if (redirect.isValid()) 113 114 { … … 148 149 { 149 150 /* Notify particular network-request listeners: */ 150 emit sigFailed( pNetworkReply->errorString());151 emit sigFailed(m_pReply->errorString()); 151 152 /* Notify general network-requests listeners: */ 152 emit sigFailed(m_uuid, pNetworkReply->errorString());153 emit sigFailed(m_uuid, m_pReply->errorString()); 153 154 } 154 155 } … … 201 202 { 202 203 /* Make network-request: */ 203 switch (m_type) 204 { 205 case UINetworkRequestType_HEAD: 206 { 207 m_pReply = gNetworkManager->head(m_request); 208 break; 209 } 210 case UINetworkRequestType_GET: 211 { 212 m_pReply = gNetworkManager->get(m_request); 213 break; 214 } 215 default: 216 break; 217 } 218 204 m_pReply = new UINetworkReply(m_request, m_type); 205 AssertMsg(m_pReply, ("Unable to make network-request!\n")); 219 206 /* Prepare listeners for m_pReply: */ 220 AssertMsg(m_pReply, ("Unable to make network-request!\n"));221 207 connect(m_pReply, SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(sltHandleNetworkReplyProgress(qint64, qint64))); 222 208 connect(m_pReply, SIGNAL(finished()), this, SLOT(sltHandleNetworkReplyFinish())); -
trunk/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequest.h
r42526 r43707 20 20 #define __UINetworkRequest_h__ 21 21 22 /* Globalincludes: */22 /* Qt includes: */ 23 23 #include <QUuid> 24 24 #include <QNetworkRequest> 25 #include <QNetworkReply>26 25 #include <QPointer> 27 26 28 /* Localinludes: */27 /* GUI inludes: */ 29 28 #include "UINetworkDefs.h" 29 #include "UINetworkReply.h" 30 30 31 31 /* Forward declarations: */ … … 71 71 const QString& description() const { return m_strDescription; } 72 72 UINetworkCustomer* customer() { return m_pCustomer; } 73 QNetworkReply* reply() { return m_pReply; }73 UINetworkReply* reply() { return m_pReply; } 74 74 75 75 private slots: … … 109 109 QString m_strDescription; 110 110 UINetworkCustomer *m_pCustomer; 111 QPointer< QNetworkReply> m_pReply;111 QPointer<UINetworkReply> m_pReply; 112 112 bool m_fRunning; 113 113 }; -
trunk/src/VBox/Frontends/VirtualBox/src/net/UIUpdateManager.cpp
r41689 r43707 19 19 20 20 /* Qt includes: */ 21 #include <QNetworkReply>22 21 #include <QTimer> 23 22 #include <QDir> … … 30 29 #include "UINetworkManager.h" 31 30 #include "UINetworkCustomer.h" 31 #include "UINetworkRequest.h" 32 32 #include "VBoxGlobal.h" 33 33 #include "UIMessageCenter.h" … … 131 131 void processNetworkReplyProgress(qint64, qint64) {} 132 132 /* Network reply canceled handler dummy: */ 133 void processNetworkReplyCanceled( QNetworkReply*) {}133 void processNetworkReplyCanceled(UINetworkReply*) {} 134 134 /* Network reply canceled handler dummy: */ 135 void processNetworkReplyFinished( QNetworkReply*) {}135 void processNetworkReplyFinished(UINetworkReply*) {} 136 136 }; 137 137 … … 196 196 request.setUrl(url); 197 197 request.setRawHeader("User-Agent", strUserAgent.toAscii()); 198 #ifdef Q_WS_X11 199 createNetworkRequest(request, UINetworkRequestType_GET_Our, tr("Checking for a new VirtualBox version...")); 200 #else /* Q_WS_X11 */ 198 201 createNetworkRequest(request, UINetworkRequestType_GET, tr("Checking for a new VirtualBox version...")); 202 #endif /* !Q_WS_X11 */ 199 203 } 200 204 201 205 /* Handle network reply canceled: */ 202 void processNetworkReplyCanceled( QNetworkReply* /* pReply */)206 void processNetworkReplyCanceled(UINetworkReply* /* pReply */) 203 207 { 204 208 /* Notify about step completion: */ … … 207 211 208 212 /* Handle network reply: */ 209 void processNetworkReplyFinished( QNetworkReply *pReply)213 void processNetworkReplyFinished(UINetworkReply *pReply) 210 214 { 211 215 /* Deserialize incoming data: */
Note:
See TracChangeset
for help on using the changeset viewer.