Engauge Digitizer 2
Loading...
Searching...
No Matches
LoadImageFromUrl.cpp
Go to the documentation of this file.
1/******************************************************************************************************
2 * (C) 2014 markummitchell@github.com. This file is part of Engauge Digitizer, which is released *
3 * under GNU General Public License version 2 (GPLv2) or (at your option) any later version. See file *
4 * LICENSE or go to gnu.org/licenses for details. Distribution requires prior written permission. *
5 ******************************************************************************************************/
6
7#include "LoadImageFromUrl.h"
8#include "Logger.h"
9#include "MainWindow.h"
10#include <QFileInfo>
11#include <QMessageBox>
12#include <QTextStream>
13#ifdef NETWORKING
14#include <QtNetwork/QNetworkReply>
15#endif
16#include <QUrl>
17#include "Version.h"
18
20 m_mainWindow (mainWindow),
22 m_http (this),
24#endif
25 m_buffer (nullptr)
26{
27 connect (this, SIGNAL (signalImportImage (QString, QImage)), &m_mainWindow, SLOT (slotFileImportImage (QString, QImage)));
28}
29
31{
32 deallocate ();
33}
34
35void LoadImageFromUrl::deallocate ()
36{
37#ifdef NETWORKING
38 delete m_reply;
39 delete m_buffer;
40
41 m_reply = nullptr;
42 m_buffer = nullptr;
43#endif
44}
45
46void LoadImageFromUrl::slotFinished ()
47{
48 // Download has just finished
49
50 QString urlWithoutScheme = m_url.toString (QUrl::RemoveScheme);
51
52 // Import
53 QImage image;
54 if (image.loadFromData (*m_buffer)) {
55
57 image);
58 } else {
59
60 // Images embedded in web pages produce html in m_buffer. No easy way to fix that. Even
61 // gimp fails in the same situations so we just show an error
62
65
66 str << tr ("Unable to download image from") << " " << urlWithoutScheme;
67
68 QMessageBox::critical (&m_mainWindow,
70 message,
71 QMessageBox::Ok);
72 }
73}
74
76{
77 LOG4CPP_INFO_S ((*mainCat)) << "LoadImageFromUrl::startLoadImage url=" << url.toString ().toLatin1 ().data ();
78
79 m_url = url;
80 if (url.isLocalFile ()) {
81
82 QFileInfo fileInfo (url.toLocalFile ());
83
84 // Load local file. This is done synchronously
85 QImage image;
86 if (image.load (url.toLocalFile ())) {
87
88 emit signalImportImage (fileInfo.fileName (),
89 image);
90
91 } else {
92
93 // Probably a bad file type
94
97
98 str << tr ("Unable to load image from") << " " << url.toLocalFile ();
99
100 QMessageBox::critical (&m_mainWindow,
102 message,
103 QMessageBox::Ok);
104 }
105
106 } else {
107
108 // Drop on the floor if networking is not enabled
109#ifdef NETWORKING
110 // Asynchronous read from url
111 deallocate ();
112 m_buffer = new QByteArray;
114 m_reply = m_http.get (request);
115
116 connect (m_reply, SIGNAL (readyRead()), this, SLOT (slotReadData()));
117 connect (m_reply, SIGNAL (finished ()), this, SLOT (slotFinished ()));
118#endif
119 }
120}
121
122void LoadImageFromUrl::slotReadData ()
123{
124#ifdef NETWORKING
125 *m_buffer += m_reply->readAll ();
126#endif
127}
const int INNER_RADIUS_MIN
log4cpp::Category * mainCat
Definition Logger.cpp:14
QString engaugeWindowTitle()
Text for title bars of dialogs.
Definition Version.cpp:14
LoadImageFromUrl(MainWindow &mainWindow)
Single constructor.
void signalImportImage(QString, QImage)
Send the imported image to MainWindow. This completes the asynchronous loading of the image.
void startLoadImage(const QUrl &url)
Start the asynchronous loading of an image from the specified url.
Main window consisting of menu, graphics scene, status bar and optional toolbars as a Single Document...
Definition MainWindow.h:92
#define LOG4CPP_INFO_S(logger)
Definition convenience.h:18