mirror of
https://github.com/leozide/leocad
synced 2025-01-29 20:34:50 +01:00
Added https support to the Windows version.
This commit is contained in:
parent
ecdcd50239
commit
943b93a514
3 changed files with 127 additions and 11 deletions
|
@ -20,7 +20,7 @@ win32 {
|
|||
QMAKE_LFLAGS += /INCREMENTAL
|
||||
PRECOMPILED_SOURCE = common/lc_global.cpp
|
||||
RC_FILE = qt/leocad.rc
|
||||
LIBS += -ladvapi32 -lshell32 -lopengl32
|
||||
LIBS += -ladvapi32 -lshell32 -lopengl32 -lwininet.lib
|
||||
} else {
|
||||
PRECOMPILED_HEADER = common/lc_global.h
|
||||
LIBS += -lz
|
||||
|
|
|
@ -3,6 +3,61 @@
|
|||
#include <QNetworkRequest>
|
||||
#include <QNetworkReply>
|
||||
|
||||
#ifdef Q_OS_WIN
|
||||
|
||||
lcHttpReply::lcHttpReply(QObject* Parent, const QString& URL)
|
||||
: QThread(Parent)
|
||||
{
|
||||
mError = true;
|
||||
mAbort = false;
|
||||
mURL = URL;
|
||||
}
|
||||
|
||||
void lcHttpReply::run()
|
||||
{
|
||||
HINTERNET Session = nullptr;
|
||||
HINTERNET Request = nullptr;
|
||||
|
||||
if (sizeof(wchar_t) != sizeof(QChar))
|
||||
return;
|
||||
|
||||
Session = InternetOpen(L"LeoCAD", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
|
||||
if (!Session)
|
||||
return;
|
||||
|
||||
Request = InternetOpenUrl(Session, (WCHAR*)mURL.data(), NULL, 0, 0, 0);
|
||||
if (!Request)
|
||||
{
|
||||
InternetCloseHandle(Session);
|
||||
return;
|
||||
}
|
||||
|
||||
for (;;)
|
||||
{
|
||||
char Buffer[1024];
|
||||
DWORD BytesRead;
|
||||
|
||||
if (mAbort)
|
||||
break;
|
||||
|
||||
if (!InternetReadFile(Request, Buffer, sizeof(Buffer), &BytesRead))
|
||||
break;
|
||||
|
||||
if (BytesRead)
|
||||
mBuffer.append(Buffer, BytesRead);
|
||||
else
|
||||
{
|
||||
mError = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
InternetCloseHandle(Request);
|
||||
InternetCloseHandle(Session);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
lcSetsDatabaseDialog::lcSetsDatabaseDialog(QWidget* Parent)
|
||||
: QDialog(Parent),
|
||||
ui(new Ui::lcSetsDatabaseDialog)
|
||||
|
@ -12,9 +67,11 @@ lcSetsDatabaseDialog::lcSetsDatabaseDialog(QWidget* Parent)
|
|||
|
||||
connect(ui->SetsTree, SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)), this, SLOT(accept()));
|
||||
connect(this, SIGNAL(finished(int)), this, SLOT(Finished(int)));
|
||||
connect(&mNetworkManager, SIGNAL(finished(QNetworkReply*)), SLOT(DownloadFinished(QNetworkReply*)));
|
||||
#ifndef Q_OS_WIN
|
||||
connect(&mNetworkManager, SIGNAL(finished(QNetworkReply*)), SLOT(DownloadFinished(lcHttpReply*)));
|
||||
#endif
|
||||
|
||||
mKeyListReply = mNetworkManager.get(QNetworkRequest(QUrl("http://www.leocad.org/rebrickable.json")));
|
||||
mKeyListReply = RequestURL("http://www.leocad.org/rebrickable.json");
|
||||
}
|
||||
|
||||
lcSetsDatabaseDialog::~lcSetsDatabaseDialog()
|
||||
|
@ -22,6 +79,18 @@ lcSetsDatabaseDialog::~lcSetsDatabaseDialog()
|
|||
delete ui;
|
||||
}
|
||||
|
||||
lcHttpReply* lcSetsDatabaseDialog::RequestURL(const QString& URL)
|
||||
{
|
||||
#ifdef Q_OS_WIN
|
||||
lcHttpReply* Reply = new lcHttpReply(this, URL);
|
||||
connect(Reply, &QThread::finished, [this, Reply] { DownloadFinished(Reply); });
|
||||
Reply->start();
|
||||
return Reply;
|
||||
#else
|
||||
return mNetworkManager.get(QNetworkRequest(QUrl(URL)));
|
||||
#endif
|
||||
}
|
||||
|
||||
QString lcSetsDatabaseDialog::GetSetName() const
|
||||
{
|
||||
QTreeWidgetItem* Current = ui->SetsTree->currentItem();
|
||||
|
@ -74,7 +143,7 @@ void lcSetsDatabaseDialog::accept()
|
|||
int KeyIndex = QTime::currentTime().msec() % mKeys.size();
|
||||
QString DownloadUrl = QString("https://rebrickable.com/api/v3/lego/sets/%1/parts/?key=%2").arg(SetNum, mKeys[KeyIndex]);
|
||||
|
||||
mInventoryReply = mNetworkManager.get(QNetworkRequest(QUrl(DownloadUrl)));
|
||||
mInventoryReply = RequestURL(DownloadUrl);
|
||||
|
||||
while (mInventoryReply)
|
||||
{
|
||||
|
@ -135,7 +204,7 @@ void lcSetsDatabaseDialog::on_SearchButton_clicked()
|
|||
int KeyIndex = QTime::currentTime().msec() % mKeys.size();
|
||||
QString SearchUrl = QString("https://rebrickable.com/api/v3/lego/sets/?search=%1&key=%2").arg(Keyword, mKeys[KeyIndex]);
|
||||
|
||||
mSearchReply = mNetworkManager.get(QNetworkRequest(QUrl(SearchUrl)));
|
||||
mSearchReply = RequestURL(SearchUrl);
|
||||
|
||||
while (mSearchReply)
|
||||
{
|
||||
|
@ -151,7 +220,7 @@ void lcSetsDatabaseDialog::on_SearchButton_clicked()
|
|||
}
|
||||
}
|
||||
|
||||
void lcSetsDatabaseDialog::DownloadFinished(QNetworkReply* Reply)
|
||||
void lcSetsDatabaseDialog::DownloadFinished(lcHttpReply* Reply)
|
||||
{
|
||||
#if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
|
||||
if (Reply == mKeyListReply)
|
||||
|
|
|
@ -7,6 +7,48 @@ namespace Ui {
|
|||
class lcSetsDatabaseDialog;
|
||||
}
|
||||
|
||||
#ifdef Q_OS_WIN
|
||||
|
||||
#include <wininet.h>
|
||||
|
||||
class lcHttpReply : public QThread
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
lcHttpReply(QObject* Parent, const QString& URL);
|
||||
|
||||
void run();
|
||||
|
||||
bool error() const
|
||||
{
|
||||
return mError;
|
||||
}
|
||||
|
||||
void abort()
|
||||
{
|
||||
mAbort = true;
|
||||
}
|
||||
|
||||
QByteArray readAll() const
|
||||
{
|
||||
return mBuffer;
|
||||
}
|
||||
|
||||
protected:
|
||||
bool mError;
|
||||
bool mAbort;
|
||||
QByteArray mBuffer;
|
||||
QString mURL;
|
||||
};
|
||||
|
||||
#else
|
||||
|
||||
typedef QNetworkReply lcHttpReply;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
class lcSetsDatabaseDialog : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
@ -26,16 +68,21 @@ public:
|
|||
virtual bool eventFilter(QObject* Object, QEvent* Event) override;
|
||||
|
||||
public slots:
|
||||
void DownloadFinished(QNetworkReply* Reply);
|
||||
void DownloadFinished(lcHttpReply* Reply);
|
||||
void on_SearchButton_clicked();
|
||||
void accept() override;
|
||||
void Finished(int Result);
|
||||
|
||||
private:
|
||||
protected:
|
||||
lcHttpReply* RequestURL(const QString& URL);
|
||||
|
||||
#ifndef Q_OS_WIN
|
||||
QNetworkAccessManager mNetworkManager;
|
||||
QNetworkReply* mKeyListReply;
|
||||
QNetworkReply* mSearchReply;
|
||||
QNetworkReply* mInventoryReply;
|
||||
#endif
|
||||
|
||||
lcHttpReply* mKeyListReply;
|
||||
lcHttpReply* mSearchReply;
|
||||
lcHttpReply* mInventoryReply;
|
||||
QStringList mKeys;
|
||||
QByteArray mInventory;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue