diff options
author | Petr Mrázek <peterix@gmail.com> | 2013-08-17 13:40:51 +0200 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2013-08-17 13:40:51 +0200 |
commit | 253067c782955380bbf66ac0475dc954375b1ff4 (patch) | |
tree | ca97e231fd3a764256d95b5fc8d08fc25ff72161 /backend/OneSixAssets.cpp | |
parent | 77e80665422c4e97e2286418ab55e20c4030023b (diff) | |
download | MultiMC-253067c782955380bbf66ac0475dc954375b1ff4.tar MultiMC-253067c782955380bbf66ac0475dc954375b1ff4.tar.gz MultiMC-253067c782955380bbf66ac0475dc954375b1ff4.tar.lz MultiMC-253067c782955380bbf66ac0475dc954375b1ff4.tar.xz MultiMC-253067c782955380bbf66ac0475dc954375b1ff4.zip |
Move all the things (YES. Move them.)
Also, implemented some basic modlist logic, to be wired up.
Diffstat (limited to 'backend/OneSixAssets.cpp')
-rw-r--r-- | backend/OneSixAssets.cpp | 162 |
1 files changed, 0 insertions, 162 deletions
diff --git a/backend/OneSixAssets.cpp b/backend/OneSixAssets.cpp deleted file mode 100644 index db9e7421..00000000 --- a/backend/OneSixAssets.cpp +++ /dev/null @@ -1,162 +0,0 @@ -#include <QString> -#include <QDebug> -#include <QtXml/QtXml> -#include "OneSixAssets.h" -#include "net/DownloadJob.h" - -inline QDomElement getDomElementByTagName(QDomElement parent, QString tagname) -{ - QDomNodeList elementList = parent.elementsByTagName(tagname); - if (elementList.count()) - return elementList.at(0).toElement(); - else - return QDomElement(); -} - -class ThreadedDeleter : public QThread -{ - Q_OBJECT -public: - void run() - { - QDirIterator iter(m_base, QDirIterator::Subdirectories); - QStringList nuke_list; - int base_length = m_base.length(); - while (iter.hasNext()) - { - QString filename = iter.next(); - QFileInfo current(filename); - // we keep the dirs... whatever - if(current.isDir()) - continue; - QString trimmedf = filename; - trimmedf.remove(0, base_length + 1); - if(m_whitelist.contains(trimmedf)) - { - // qDebug() << trimmedf << " gets to live"; - } - else - { - // DO NOT TOLERATE JUNK - // qDebug() << trimmedf << " dies"; - QFile f (filename); - f.remove(); - } - } - }; - QString m_base; - QStringList m_whitelist; -}; - -class NukeAndPaveJob: public Job -{ - Q_OBJECT -public: - - explicit NukeAndPaveJob(QString base, QStringList whitelist) - :Job() - { - QDir dir(base); - deleterThread.m_base = dir.absolutePath(); - deleterThread.m_whitelist = whitelist; - }; -public slots: - virtual void start() - { - connect(&deleterThread, SIGNAL(finished()), SLOT(threadFinished())); - deleterThread.start(); - }; - void threadFinished() - { - emit finish(); - } -private: - ThreadedDeleter deleterThread; -}; - - - -void OneSixAssets::fetchFinished() -{ - QString prefix ( "http://s3.amazonaws.com/Minecraft.Resources/" ); - QString fprefix ( "assets/" ); - QStringList nuke_whitelist; - - JobPtr firstJob = index_job->getFirstJob(); - auto DlJob = firstJob.dynamicCast<DownloadJob>(); - QByteArray ba = DlJob->m_data; - - QString xmlErrorMsg; - QDomDocument doc; - if ( !doc.setContent ( ba, false, &xmlErrorMsg ) ) - { - qDebug() << "Failed to process s3.amazonaws.com/Minecraft.Resources. XML error:" << - xmlErrorMsg << ba; - } - //QRegExp etag_match(".*([a-f0-9]{32}).*"); - QDomNodeList contents = doc.elementsByTagName ( "Contents" ); - - JobList *job = new JobList(); - connect ( job, SIGNAL ( finished() ), SIGNAL(finished()) ); - connect ( job, SIGNAL ( failed() ), SIGNAL(failed()) ); - - for ( int i = 0; i < contents.length(); i++ ) - { - QDomElement element = contents.at ( i ).toElement(); - - if ( element.isNull() ) - continue; - - QDomElement keyElement = getDomElementByTagName ( element, "Key" ); - QDomElement lastmodElement = getDomElementByTagName ( element, "LastModified" ); - QDomElement etagElement = getDomElementByTagName ( element, "ETag" ); - QDomElement sizeElement = getDomElementByTagName ( element, "Size" ); - - if ( keyElement.isNull() || lastmodElement.isNull() || etagElement.isNull() || sizeElement.isNull() ) - continue; - - QString keyStr = keyElement.text(); - QString lastModStr = lastmodElement.text(); - QString etagStr = etagElement.text(); - QString sizeStr = sizeElement.text(); - - //Filter folder keys - if ( sizeStr == "0" ) - continue; - - QString filename = fprefix + keyStr; - QFile check_file ( filename ); - QString client_etag = "nonsense"; - // if there already is a file and md5 checking is in effect and it can be opened - if ( check_file.exists() && check_file.open ( QIODevice::ReadOnly ) ) - { - // check the md5 against the expected one - client_etag = QCryptographicHash::hash ( check_file.readAll(), QCryptographicHash::Md5 ).toHex().constData(); - check_file.close(); - } - - QString trimmedEtag = etagStr.remove ( '"' ); - nuke_whitelist.append ( keyStr ); - if(trimmedEtag != client_etag) - job->add ( DownloadJob::create ( QUrl ( prefix + keyStr ), filename ) ); - - } - job->add ( JobPtr ( new NukeAndPaveJob ( fprefix, nuke_whitelist ) ) ); - files_job.reset ( job ); - dl.enqueue ( files_job ); -} -void OneSixAssets::fetchStarted() -{ - qDebug() << "Started downloading!"; -} -void OneSixAssets::start() -{ - JobList *job = new JobList(); - job->add ( DownloadJob::create ( QUrl ( "http://s3.amazonaws.com/Minecraft.Resources/" ) ) ); - connect ( job, SIGNAL ( finished() ), SLOT ( fetchFinished() ) ); - connect ( job, SIGNAL ( started() ), SLOT ( fetchStarted() ) ); - index_job.reset ( job ); - dl.enqueue ( index_job ); -} - -#include "OneSixAssets.moc"
\ No newline at end of file |