summaryrefslogtreecommitdiffstats
path: root/logic/net
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2013-10-18 01:00:46 +0200
committerPetr Mrázek <peterix@gmail.com>2013-10-18 01:00:46 +0200
commit205570be32b5cbd40eeb2b7e2d8d4fe116b07f64 (patch)
tree7af19a7479ae0c1dbef4d9cbc65c5550f9a3adc1 /logic/net
parenta600286e33601a85949b9e51bd5421a45f9998ac (diff)
downloadMultiMC-205570be32b5cbd40eeb2b7e2d8d4fe116b07f64.tar
MultiMC-205570be32b5cbd40eeb2b7e2d8d4fe116b07f64.tar.gz
MultiMC-205570be32b5cbd40eeb2b7e2d8d4fe116b07f64.tar.lz
MultiMC-205570be32b5cbd40eeb2b7e2d8d4fe116b07f64.tar.xz
MultiMC-205570be32b5cbd40eeb2b7e2d8d4fe116b07f64.zip
Support version format 9, fix version-related segfault, (maybe) fix forge lists.
Diffstat (limited to 'logic/net')
-rw-r--r--logic/net/CacheDownload.cpp12
-rw-r--r--logic/net/ForgeXzDownload.cpp2
-rw-r--r--logic/net/HttpMetaCache.cpp11
-rw-r--r--logic/net/HttpMetaCache.h3
4 files changed, 20 insertions, 8 deletions
diff --git a/logic/net/CacheDownload.cpp b/logic/net/CacheDownload.cpp
index 6a76a4ae..309eb345 100644
--- a/logic/net/CacheDownload.cpp
+++ b/logic/net/CacheDownload.cpp
@@ -33,7 +33,11 @@ void CacheDownload::start()
}
QLOG_INFO() << "Downloading " << m_url.toString();
QNetworkRequest request(m_url);
- request.setRawHeader(QString("If-None-Match").toLatin1(), m_entry->etag.toLatin1());
+ if(m_entry->remote_changed_timestamp.size())
+ request.setRawHeader(QString("If-Modified-Since").toLatin1(), m_entry->remote_changed_timestamp.toLatin1());
+ if(m_entry->etag.size())
+ request.setRawHeader(QString("If-None-Match").toLatin1(), m_entry->etag.toLatin1());
+
request.setHeader(QNetworkRequest::UserAgentHeader,"MultiMC/5.0 (Cached)");
auto worker = MMC->qnam();
@@ -87,7 +91,11 @@ void CacheDownload::downloadFinished()
QFileInfo output_file_info(m_target_path);
m_entry->etag = m_reply->rawHeader("ETag").constData();
- m_entry->last_changed_timestamp =
+ if(m_reply->hasRawHeader("Last-Modified"))
+ {
+ m_entry->remote_changed_timestamp = m_reply->rawHeader("Last-Modified").constData();
+ }
+ m_entry->local_changed_timestamp =
output_file_info.lastModified().toUTC().toMSecsSinceEpoch();
m_entry->stale = false;
MMC->metacache()->updateEntry(m_entry);
diff --git a/logic/net/ForgeXzDownload.cpp b/logic/net/ForgeXzDownload.cpp
index 3ec2155b..0e5287d8 100644
--- a/logic/net/ForgeXzDownload.cpp
+++ b/logic/net/ForgeXzDownload.cpp
@@ -269,7 +269,7 @@ void ForgeXzDownload::decompressAndInstall()
QFileInfo output_file_info(m_target_path);
m_entry->etag = m_reply->rawHeader("ETag").constData();
- m_entry->last_changed_timestamp =
+ m_entry->local_changed_timestamp =
output_file_info.lastModified().toUTC().toMSecsSinceEpoch();
m_entry->stale = false;
MMC->metacache()->updateEntry(m_entry);
diff --git a/logic/net/HttpMetaCache.cpp b/logic/net/HttpMetaCache.cpp
index 9c642a0f..5ba5b98d 100644
--- a/logic/net/HttpMetaCache.cpp
+++ b/logic/net/HttpMetaCache.cpp
@@ -82,7 +82,7 @@ MetaEntryPtr HttpMetaCache::resolveEntry ( QString base, QString resource_path,
// if the file changed, check md5sum
qint64 file_last_changed = finfo.lastModified().toUTC().toMSecsSinceEpoch();
- if(file_last_changed != entry->last_changed_timestamp)
+ if(file_last_changed != entry->local_changed_timestamp)
{
QFile input(real_path);
input.open(QIODevice::ReadOnly);
@@ -93,7 +93,7 @@ MetaEntryPtr HttpMetaCache::resolveEntry ( QString base, QString resource_path,
return staleEntry(base, resource_path);
}
// md5sums matched... keep entry and save the new state to file
- entry->last_changed_timestamp = file_last_changed;
+ entry->local_changed_timestamp = file_last_changed;
SaveEventually();
}
@@ -184,7 +184,8 @@ void HttpMetaCache::Load()
QString path = foo->path = element_obj.value("path").toString();
foo->md5sum = element_obj.value("md5sum").toString();
foo->etag = element_obj.value("etag").toString();
- foo->last_changed_timestamp = element_obj.value("last_changed_timestamp").toDouble();
+ foo->local_changed_timestamp = element_obj.value("last_changed_timestamp").toDouble();
+ foo->remote_changed_timestamp = element_obj.value("remote_changed_timestamp").toString();
// presumed innocent until closer examination
foo->stale = false;
entrymap.entry_list[path] = MetaEntryPtr( foo );
@@ -215,7 +216,9 @@ void HttpMetaCache::SaveNow()
entryObj.insert("path", QJsonValue(entry->path));
entryObj.insert("md5sum", QJsonValue(entry->md5sum));
entryObj.insert("etag", QJsonValue(entry->etag));
- entryObj.insert("last_changed_timestamp", QJsonValue(double(entry->last_changed_timestamp)));
+ entryObj.insert("last_changed_timestamp", QJsonValue(double(entry->local_changed_timestamp)));
+ if(!entry->remote_changed_timestamp.isEmpty())
+ entryObj.insert("remote_changed_timestamp", QJsonValue(entry->remote_changed_timestamp));
entriesArr.append(entryObj);
}
}
diff --git a/logic/net/HttpMetaCache.h b/logic/net/HttpMetaCache.h
index 8107839e..557d9298 100644
--- a/logic/net/HttpMetaCache.h
+++ b/logic/net/HttpMetaCache.h
@@ -10,7 +10,8 @@ struct MetaEntry
QString path;
QString md5sum;
QString etag;
- qint64 last_changed_timestamp = 0;
+ qint64 local_changed_timestamp = 0;
+ QString remote_changed_timestamp; // QString for now, RFC 2822 encoded time
bool stale = true;
QString getFullPath();
};