summaryrefslogtreecommitdiffstats
path: root/libmultimc/src
diff options
context:
space:
mode:
Diffstat (limited to 'libmultimc/src')
-rw-r--r--libmultimc/src/instversion.cpp10
-rw-r--r--libmultimc/src/instversionlist.cpp9
-rw-r--r--libmultimc/src/minecraftversionlist.cpp39
3 files changed, 57 insertions, 1 deletions
diff --git a/libmultimc/src/instversion.cpp b/libmultimc/src/instversion.cpp
index d3d078a9..ebd76c7a 100644
--- a/libmultimc/src/instversion.cpp
+++ b/libmultimc/src/instversion.cpp
@@ -41,6 +41,16 @@ InstVersionList *InstVersion::versionList() const
return (InstVersionList *)parent();
}
+bool InstVersion::isLessThan(const InstVersion &other) const
+{
+ return timestamp() < other.timestamp();
+}
+
+bool InstVersion::isGreaterThan(const InstVersion &other) const
+{
+ return timestamp() > other.timestamp();
+}
+
bool InstVersion::isMeta() const
{
return false;
diff --git a/libmultimc/src/instversionlist.cpp b/libmultimc/src/instversionlist.cpp
index 85734e48..7d1bfdb7 100644
--- a/libmultimc/src/instversionlist.cpp
+++ b/libmultimc/src/instversionlist.cpp
@@ -48,6 +48,9 @@ enum VListColumns
// Second column - Type
TypeColumn,
+ // Third column - Timestamp
+ TimeColumn,
+
// Column count
ColCount
};
@@ -74,6 +77,9 @@ QVariant InstVersionList::data(const QModelIndex &index, int role) const
case TypeColumn:
return version->typeName();
+ case TimeColumn:
+ return version->timestamp();
+
default:
return QVariant();
}
@@ -101,6 +107,9 @@ QVariant InstVersionList::headerData(int section, Qt::Orientation orientation, i
case TypeColumn:
return "Type";
+
+ case TimeColumn:
+ return "Time";
default:
return QVariant();
diff --git a/libmultimc/src/minecraftversionlist.cpp b/libmultimc/src/minecraftversionlist.cpp
index ce02a769..abbae991 100644
--- a/libmultimc/src/minecraftversionlist.cpp
+++ b/libmultimc/src/minecraftversionlist.cpp
@@ -25,6 +25,8 @@
#include <QJsonValue>
#include <QJsonParseError>
+#include <QtAlgorithms>
+
#include <QtNetwork>
#define MCVLIST_URLBASE "http://s3.amazonaws.com/Minecraft.Download/versions/"
@@ -78,6 +80,18 @@ void MinecraftVersionList::printToStdOut() const
}
}
+bool cmpVersions(const InstVersion *first, const InstVersion *second)
+{
+ return !first->isLessThan(*second);
+}
+
+void MinecraftVersionList::sort()
+{
+ beginResetModel();
+ qSort(m_vlist.begin(), m_vlist.end(), cmpVersions);
+ endResetModel();
+}
+
MinecraftVersionList &MinecraftVersionList::getMainList()
{
return mcVList;
@@ -108,6 +122,9 @@ void MinecraftVersionList::updateListData(QList<InstVersion *> versions)
// tempList (and vice-versa). Now we just free the memory.
while (!tempList.isEmpty())
delete tempList.takeFirst();
+
+ // NOW SORT!!
+ sort();
}
inline QDomElement getDomElementByTagName(QDomElement parent, QString tagname)
@@ -125,6 +142,22 @@ inline QDateTime timeFromS3Time(QString str)
return QDateTime::fromString(str, fmt);
}
+inline QDateTime timeFromMCVListTime(QString str)
+{
+ int operatorPos = str.indexOf("+", str.indexOf("T"));
+ if (operatorPos == -1)
+ operatorPos = str.indexOf("-", str.indexOf("T"));
+ if (operatorPos)
+ operatorPos = str.length();
+
+ const QString fmt("yyyy-MM-dd'T'HH:mm:ss'+02:00'");
+
+ // It's a dark templar!
+ QDateTime dt = QDateTime::fromString(str.left(operatorPos), fmt);
+ return dt;
+
+}
+
inline void waitForNetRequest(QNetworkReply *netReply)
{
QEventLoop loop;
@@ -234,7 +267,11 @@ bool MCVListLoadTask::loadFromVList()
// Now, process that info and add the version to the list.
// Parse the timestamp.
- QDateTime versionTime = timeFromS3Time(versionTimeStr);
+ QDateTime versionTime = timeFromMCVListTime(versionTimeStr);
+
+ Q_ASSERT_X(versionTime.isValid(), "loadFromVList",
+ QString("in versions array, index %1's timestamp failed to parse").
+ arg(i).toUtf8());
// Parse the type.
MinecraftVersion::VersionType versionType;