00001
00002
00003
00004
00005
00006
00007 #include "LoadImageFromUrl.h"
00008 #include "Logger.h"
00009 #include "MainWindow.h"
00010 #include <QFileInfo>
00011 #include <QMessageBox>
00012 #include <QtNetwork/QNetworkReply>
00013 #include <QUrl>
00014 #include "Version.h"
00015
00016 LoadImageFromUrl::LoadImageFromUrl (MainWindow &mainWindow) :
00017 m_mainWindow (mainWindow),
00018 m_http (this),
00019 m_reply (0),
00020 m_buffer (0)
00021 {
00022 connect (this, SIGNAL (signalImportImage (QString, QImage)), &m_mainWindow, SLOT (slotFileImportImage (QString, QImage)));
00023 }
00024
00025 LoadImageFromUrl::~LoadImageFromUrl ()
00026 {
00027 deallocate ();
00028 }
00029
00030 void LoadImageFromUrl::deallocate ()
00031 {
00032 if (m_reply != 0) {
00033 delete m_reply;
00034 m_reply = 0;
00035 }
00036
00037 if (m_buffer != 0) {
00038 delete m_buffer;
00039 m_buffer = 0;
00040 }
00041 }
00042
00043 void LoadImageFromUrl::slotFinished ()
00044 {
00045
00046
00047 QString urlWithoutScheme = m_url.toString (QUrl::RemoveScheme);
00048
00049
00050 QImage image;
00051 if (image.loadFromData (*m_buffer)) {
00052
00053 emit signalImportImage (urlWithoutScheme,
00054 image);
00055 } else {
00056
00057
00058
00059
00060 QString message;
00061 QTextStream str (&message);
00062
00063 str << tr ("Unable to download image from") << " " << urlWithoutScheme;
00064
00065 QMessageBox::critical (&m_mainWindow,
00066 engaugeWindowTitle(),
00067 message,
00068 QMessageBox::Ok);
00069 }
00070 }
00071
00072 void LoadImageFromUrl::startLoadImage (const QUrl &url)
00073 {
00074 LOG4CPP_INFO_S ((*mainCat)) << "LoadImageFromUrl::startLoadImage url=" << url.toString ().toLatin1 ().data ();
00075
00076 m_url = url;
00077 if (url.isLocalFile ()) {
00078
00079 QFileInfo fileInfo (url.toLocalFile ());
00080
00081
00082 QImage image;
00083 if (image.load (url.toLocalFile ())) {
00084
00085 emit signalImportImage (fileInfo.fileName (),
00086 image);
00087
00088 } else {
00089
00090
00091
00092 QString message;
00093 QTextStream str (&message);
00094
00095 str << tr ("Unable to load image from") << " " << url.toLocalFile ();
00096
00097 QMessageBox::critical (&m_mainWindow,
00098 engaugeWindowTitle(),
00099 message,
00100 QMessageBox::Ok);
00101 }
00102
00103 } else {
00104
00105
00106 deallocate ();
00107 m_buffer = new QByteArray;
00108 QNetworkRequest request (url);
00109 m_reply = m_http.get (request);
00110
00111 connect (m_reply, SIGNAL (readyRead()), this, SLOT (slotReadData()));
00112 connect (m_reply, SIGNAL (finished ()), this, SLOT (slotFinished ()));
00113 }
00114 }
00115
00116 void LoadImageFromUrl::slotReadData ()
00117 {
00118 *m_buffer += m_reply->readAll ();
00119 }