123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- #include "launcher.h"
- #include "ui_launcher.h"
- GIFAnimationDemoWidget::GIFAnimationDemoWidget( QWidget* parent ) :
- QWidget( parent, Qt::Window | Qt::FramelessWindowHint ), ui( new Ui::GIFAnimationDemoWidget ) {
- ui->setupUi(this);
- setWindowTitle("ВКО: Наследие - система обновлений");
- ui->lbHint->setText("Получение списка файлов...");
- movie = new QMovie(":/second.gif");
- ui->lbMovie->setMovie(movie);
- movie->setScaledSize(QSize(ui->lbMovie->width(), ui->lbMovie->height()));
- movie->start();
- QString response = getFilelist("http://translate.lotros.ru/upload/launcher/filelist.txt");
- QFuture<void> future = QtConcurrent::run([=]() {
- start(response);
- });
- }
- GIFAnimationDemoWidget::~GIFAnimationDemoWidget() {
- delete ui;
- }
- void GIFAnimationDemoWidget::start(QString filelist) {
- ui->lbHint->setText("Проверка и скачивание файлов...");
- QStringList templist = filelist.split("\r\n");
- foreach(const QString &str, templist){
- QString path = str;
- QStringList list = path.replace("release/", "").split("|");
- path = list[0];
- if (path.size() == 0)
- continue;
- qDebug() << path;
- if (fileExists(path)) {
- QString hash = fileHash(list[0], QCryptographicHash::Md5); // Hashes match - file is ok. Passing it;
- qDebug() << path << " " << hash << " " << list[1];
- if (hash == list[1])
- continue;
- }
- QFileInfo fileInfo(path);
- QString folder = fileInfo.dir().path();
- if (folder == ".") folder = "";
- makeFolder(folder);
- ui->lbHint->setText("Загрузка " + path);
- downloadFile ("http://translate.lotros.ru/upload/launcher/release/" + path, QApplication::applicationDirPath() + "/" + folder);
- }
- ui->lbHint->setText("Подготовка к запуску ...");
- QProcess process;
- process.startDetached("Legacy.exe -prelaunched");
- process.waitForFinished(-1);
- exit(0);
- }
- QString GIFAnimationDemoWidget::fileHash(const QString &fileName, QCryptographicHash::Algorithm hashAlgorithm) {
- QFile file(fileName);
- if (file.open(QIODevice::ReadOnly)) {
- QByteArray fileData = file.readAll();
- QByteArray hashData = QCryptographicHash::hash(fileData, hashAlgorithm);
- return hashData.toHex();
- }
- return QByteArray();
- }
- bool GIFAnimationDemoWidget::fileExists(QString path) {
- QFileInfo check_file(path);
- return check_file.exists() && check_file.isFile();
- }
- void GIFAnimationDemoWidget::makeFolder(QString path) {
- QString folder = QApplication::applicationDirPath();
- QStringList p = path.split("/");
- foreach(const QString &str, p){
- folder = folder + "/" + str;
- if (!(QDir(folder).exists() == true) ){
- QDir().mkdir(folder);
- qDebug() << "Создана папка " + folder;
- }
- }
- }
- void GIFAnimationDemoWidget::startNewAnimation() {
- delete movie;
- movie = new QMovie(":/second.gif");
- ui->lbMovie->setMovie(movie);
- movie->setScaledSize(QSize(ui->lbMovie->width(), ui->lbMovie->height()));
- movie->start();
- }
- QString GIFAnimationDemoWidget::getFilelist(const QString &url) {
- QNetworkAccessManager manager;
- QNetworkReply* reply = manager.get(QNetworkRequest(url));
- QEventLoop loop;
- QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
- loop.exec();
- QString content;
- if (reply->error() != QNetworkReply::NoError){
- content = "error";
- // пишем в лог
- qDebug() << reply->errorString();
- }
- reply->deleteLater();
- content = reply->readAll();
- return content;
- }
- void GIFAnimationDemoWidget::downloadFile(const QString &url, const QString &aPathInClient) {
- QNetworkAccessManager m_NetworkMngr;
- QNetworkReply *reply= m_NetworkMngr.get(QNetworkRequest(url));
- QEventLoop loop;
- QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
- loop.exec();
- QUrl aUrl(url);
- QFileInfo fileInfo=aUrl.path();
- QFile file(aPathInClient+ "/" + fileInfo.fileName());
- file.remove();
- file.open(QIODevice::WriteOnly);
- file.write(reply->readAll());
- }
|