summaryrefslogtreecommitdiffstats
path: root/api/logic/minecraft/legacy/LwjglVersionList.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'api/logic/minecraft/legacy/LwjglVersionList.cpp')
-rw-r--r--api/logic/minecraft/legacy/LwjglVersionList.cpp148
1 files changed, 63 insertions, 85 deletions
diff --git a/api/logic/minecraft/legacy/LwjglVersionList.cpp b/api/logic/minecraft/legacy/LwjglVersionList.cpp
index 2810e679..a54acfef 100644
--- a/api/logic/minecraft/legacy/LwjglVersionList.cpp
+++ b/api/logic/minecraft/legacy/LwjglVersionList.cpp
@@ -22,11 +22,10 @@
#include <QDebug>
-#define RSS_URL "http://sourceforge.net/projects/java-game-lib/rss"
+#define RSS_URL "https://sourceforge.net/projects/java-game-lib/rss"
LWJGLVersionList::LWJGLVersionList(QObject *parent) : BaseVersionList(parent)
{
- setLoading(false);
}
QVariant LWJGLVersionList::data(const QModelIndex &index, int role) const
@@ -72,21 +71,21 @@ int LWJGLVersionList::columnCount(const QModelIndex &parent) const
return 1;
}
-bool LWJGLVersionList::isLoading() const
-{
- return m_loading;
-}
-
void LWJGLVersionList::loadList()
{
- Q_ASSERT_X(!m_loading, "loadList", "list is already loading (m_loading is true)");
-
- setLoading(true);
- QNetworkRequest req(QUrl(RSS_URL));
- req.setRawHeader("Accept", "application/rss+xml, text/xml, */*");
- req.setRawHeader("User-Agent", "MultiMC/5.0 (Uncached)");
- reply = ENV.qnam().get(req);
- connect(reply, SIGNAL(finished()), SLOT(netRequestComplete()));
+ if(m_loading)
+ {
+ return;
+ }
+ m_loading = true;
+
+ qDebug() << "Downloading LWJGL RSS...";
+ m_rssDLJob.reset(new NetJob("LWJGL RSS"));
+ m_rssDL = Net::Download::makeByteArray(QUrl(RSS_URL), &m_rssData);
+ m_rssDLJob->addNetAction(m_rssDL);
+ connect(m_rssDLJob.get(), &NetJob::failed, this, &LWJGLVersionList::rssFailed);
+ connect(m_rssDLJob.get(), &NetJob::succeeded, this, &LWJGLVersionList::rssSucceeded);
+ m_rssDLJob->start();
}
inline QDomElement getDomElementByTagName(QDomElement parent, QString tagname)
@@ -98,91 +97,70 @@ inline QDomElement getDomElementByTagName(QDomElement parent, QString tagname)
return QDomElement();
}
-void LWJGLVersionList::netRequestComplete()
+void LWJGLVersionList::rssFailed(const QString& reason)
{
- if (reply->error() == QNetworkReply::NoError)
+ m_loading = false;
+ qWarning() << "Failed to load LWJGL list. Network error: " + reason;
+}
+
+void LWJGLVersionList::rssSucceeded()
+{
+ QRegExp lwjglRegex("lwjgl-(([0-9]\\.?)+)\\.zip");
+ Q_ASSERT_X(lwjglRegex.isValid(), "load LWJGL list", "LWJGL regex is invalid");
+
+ QDomDocument doc;
+
+ QString xmlErrorMsg;
+ int errorLine;
+
+ if (!doc.setContent(m_rssData, false, &xmlErrorMsg, &errorLine))
{
- QRegExp lwjglRegex("lwjgl-(([0-9]\\.?)+)\\.zip");
- Q_ASSERT_X(lwjglRegex.isValid(), "load LWJGL list", "LWJGL regex is invalid");
+ qWarning() << "Failed to load LWJGL list. XML error: " + xmlErrorMsg + " at line " + QString::number(errorLine);
+ m_loading = false;
+ m_rssData.clear();
+ return;
+ }
+ m_rssData.clear();
+
+ QDomNodeList items = doc.elementsByTagName("item");
- QDomDocument doc;
+ QList<PtrLWJGLVersion> tempList;
- QString xmlErrorMsg;
- int errorLine;
- auto rawData = reply->readAll();
- if (!doc.setContent(rawData, false, &xmlErrorMsg, &errorLine))
+ for (int i = 0; i < items.length(); i++)
+ {
+ Q_ASSERT_X(items.at(i).isElement(), "load LWJGL list", "XML element isn't an element... wat?");
+
+ QDomElement linkElement = getDomElementByTagName(items.at(i).toElement(), "link");
+ if (linkElement.isNull())
{
- failed("Failed to load LWJGL list. XML error: " + xmlErrorMsg + " at line " + QString::number(errorLine));
- setLoading(false);
- qDebug() << QString::fromUtf8(rawData);
- return;
+ qDebug() << "Link element" << i << "in RSS feed doesn't exist! Skipping.";
+ continue;
}
- QDomNodeList items = doc.elementsByTagName("item");
+ QString link = linkElement.text();
- QList<PtrLWJGLVersion> tempList;
-
- for (int i = 0; i < items.length(); i++)
+ // Make sure it's a download link.
+ if (link.endsWith("/download") && link.contains(lwjglRegex))
{
- Q_ASSERT_X(items.at(i).isElement(), "load LWJGL list",
- "XML element isn't an element... wat?");
+ QString name = link.mid(lwjglRegex.indexIn(link) + 6);
+ // Subtract 4 here to remove the .zip file extension.
+ name = name.left(lwjglRegex.matchedLength() - 10);
- QDomElement linkElement = getDomElementByTagName(items.at(i).toElement(), "link");
- if (linkElement.isNull())
+ QUrl url(link);
+ if (!url.isValid())
{
- qDebug() << "Link element" << i << "in RSS feed doesn't exist! Skipping.";
+ qWarning() << "LWJGL version URL isn't valid:" << link << "Skipping.";
continue;
}
-
- QString link = linkElement.text();
-
- // Make sure it's a download link.
- if (link.endsWith("/download") && link.contains(lwjglRegex))
- {
- QString name = link.mid(lwjglRegex.indexIn(link) + 6);
- // Subtract 4 here to remove the .zip file extension.
- name = name.left(lwjglRegex.matchedLength() - 10);
-
- QUrl url(link);
- if (!url.isValid())
- {
- qWarning() << "LWJGL version URL isn't valid:" << link << "Skipping.";
- continue;
- }
- qDebug() << "Discovered LWGL version" << name << "at" << link;
- tempList.append(std::make_shared<LWJGLVersion>(name, link));
- }
+ qDebug() << "Discovered LWGL version" << name << "at" << link;
+ tempList.append(std::make_shared<LWJGLVersion>(name, link));
}
-
- beginResetModel();
- m_vlist.swap(tempList);
- endResetModel();
-
- qDebug() << "Loaded LWJGL list.";
- finished();
- }
- else
- {
- failed("Failed to load LWJGL list. Network error: " + reply->errorString());
}
- setLoading(false);
- reply->deleteLater();
-}
-
-void LWJGLVersionList::failed(QString msg)
-{
- qCritical() << msg;
- emit loadListFailed(msg);
-}
+ beginResetModel();
+ m_vlist.swap(tempList);
+ endResetModel();
-void LWJGLVersionList::finished()
-{
- emit loadListFinished();
-}
-
-void LWJGLVersionList::setLoading(bool loading)
-{
- m_loading = loading;
- emit loadingStateUpdated(m_loading);
+ qDebug() << "Loaded LWJGL list.";
+ m_loading = false;
}