Browse Source

1.0.0 pre-release

Ivan Arkhipov 6 years ago
parent
commit
fc156e460f

+ 34 - 18
helper.cpp

@@ -18,7 +18,7 @@ QString Helper::fileHash(const QString &fileName, QCryptographicHash::Algorithm
 int Helper::getVersion(QString string) {
     std::string str(string.toLatin1().data());
     int version = 0;
-    for (int i = str.find("_v") + 2; i < str.find("_v") + 7; i += 2) {
+    for (unsigned i = str.find("_v") + 2; i < str.find("_v") + 7; i += 2) {
         version = version * 10 + (str[i] - '0');
     }
     return version;
@@ -406,7 +406,13 @@ void Helper::applyLoadscreens(){
         }
 
         QString lang = app->config->getValue("Local", "lang");
-        QString folder = app->config->getValue("Local", "folder") + "/raw/" + lang + "/logo/";
+
+        if (lang == "-1") {
+            app->config->setValue("Local", "lang", "en");
+            lang = "en";
+        }
+
+        QString folder = app->config->getValue("Local", "folder") + "raw/" + lang + "/logo/";
         SubfileData subfile;
         QStringList filenames;
         QString mainscreen = lang == "en" ? "lotro_ad_pregame.jpg" : "lotro_ad_pregame_" + lang + ".jpg";
@@ -578,7 +584,7 @@ void Helper::applyPatch(QString name){
         qInfo("%s:%i: %s%d", __FILE__, __LINE__, "Файлов в обновлении: ", indb);
         for(int i = 0; i<=indb; i++){
             processFile();
-            if(label != nullptr) label->setText("Применение ... " + QString::fromLatin1("%1").arg(i*100/indb, 3, 'f', 1) + "%");
+            if (label != nullptr) label->setText("Применение ... " + QString::fromLatin1("%1").arg(i*100/indb, 3, 'f', 1) + "%");
         }
         if(label != nullptr)label->setText("Готово");
         //for (int i = 0; i < 5; i++) app->datfiles[i].CommitChanges();
@@ -625,16 +631,22 @@ void Helper::applyGlobal(){
     names  << "fonts" << "sounds" << "texts" << "images" << "videos" << "textures";
     QDir dir(QApplication::applicationDirPath() + "/data");
 
-    foreach(QString name, names){
+    foreach(QString name, names) {
+
         QStringList list = dir.entryList(QStringList(name + "*"));
-        if(list.size() > 0 && list.first() != ""){
+
+        if (list.size() > 0 && list.first() != ""){
             QString isset = app->config->getValue("Applied", name);
-            if(list.first() != isset && app->config->getValue("Editor", name) == "true"){ need.append(name); }
+            if (list.first() != isset && app->config->getValue("Editor", name) == "true") {
+                need.append(name);
+            }
         }
     }
+
     Helper *helper = new Helper();
     QFutureWatcher<void> * watcher = new QFutureWatcher<void>();
     connect(watcher, SIGNAL(finished()), helper, SLOT(handleFinisheddd()));
+
     if(need.size() > 0){
         watcher->setFuture(QtConcurrent::run([=]() {
             if(app->helper->openDatFile(0)){
@@ -717,7 +729,7 @@ void Helper::replaceSkin(QString name){
     movie->start();
 }
 
-void Helper::checkDatFile(){
+int Helper::checkDatFile(){
     //bool CheckIfUpdatedByGame(); // Обновлялся ли игрой
     //bool CheckIfNotPatched(); // Был ли хоть раз пропатчен новым лаунчером
     //bool CheckIfPatchedByOldLauncher(); // Был ли хоть раз пропатчен старым лаунчером
@@ -725,24 +737,28 @@ void Helper::checkDatFile(){
     App *app = &App::getInstance();
     app->helper->openDatFile(0);
     if(app->datfiles[0].CheckIfUpdatedByGame()){
-        app->ready = false;
-        QString text = "Файлы локализации изменены";
-        QString info = "В процессе последнего запуска игры были установлены обновления игрового клиента. Это могло затронуть файлы локализации. Желаете провести проверку и исправить поврежденные участки перевода? Вы можете в любой момент сделать это самостоятельно, нажав кнопку «Применить патчи заново».";
-        app->helper->myDialogBox(text, info, "OK", "Отмена", "gandalf.png", "applypaths", "", 400, 220, true, true);
+        return 1;
+        //app->ready = false;
+        //QString text = "Файлы локализации изменены";
+        //QString info = "В процессе последнего запуска игры были установлены обновления игрового клиента. Это могло затронуть файлы локализации. Желаете провести проверку и исправить поврежденные участки перевода? Вы можете в любой момент сделать это самостоятельно, нажав кнопку «Применить патчи заново».";
+        //app->helper->myDialogBox(text, info, "OK", "Отмена", "gandalf.png", "applypaths", "", 400, 220, true, true);
     }
 
     if(app->datfiles[0].CheckIfNotPatched() && app->config->getValue("Local", "runfirst") == "1"){
-        app->ready = false;
-        QString text = "Файлы локализации отсутствуют";
-        QString info = "Текущий файл локализации не содержит патчей. Возможно это первый запуск «Наследия» с данным игровым клиентом, или клиент был обновлён игровым лаунчером. Применить выбранные патчи в данному файлу?";
-        app->helper->myDialogBox(text, info, "OK", "Отмена", "gandalf.png", "applypaths", "", 420, 200, true, true);
+        return 2;
+        //app->ready = false;
+        //QString text = "Файлы локализации отсутствуют";
+        //QString info = "Текущий файл локализации не содержит патчей. Возможно это первый запуск «Наследия» с данным игровым клиентом, или клиент был обновлён игровым лаунчером. Применить выбранные патчи в данному файлу?";
+        //app->helper->myDialogBox(text, info, "OK", "Отмена", "gandalf.png", "applypaths", "", 420, 200, true, true);
     }
 
     if(app->datfiles[0].CheckIfPatchedByOldLauncher()){
-        QString text = "Файлы локализации не являются оригинальными";
-        QString info = "Внимание! Присутствующие в вашем игровом клиенте файлы локализации не являются оригинальными, поскольку были модифицированы другой программой.<br/><strong>Мы настоятельно рекомендуем перекачать оригинальные версии файлов, поскольку правильная работа Наследия с данными файлами не гарантируется!</strong>";
-        app->helper->myDialogBox(text, info, "Перекачать", "Не надо", "gandalf.png", "loaddatfile", "", 550, 200, true, true);
+        return 3;
+        //QString text = "Файлы локализации не являются оригинальными";
+        //QString info = "Внимание! Присутствующие в вашем игровом клиенте файлы локализации не являются оригинальными, поскольку были модифицированы другой программой.<br/><strong>Мы настоятельно рекомендуем перекачать оригинальные версии файлов, поскольку правильная работа Наследия с данными файлами не гарантируется!</strong>";
+        //app->helper->myDialogBox(text, info, "Перекачать", "Не надо", "gandalf.png", "loaddatfile", "", 550, 200, true, true);
     }
+    return 0;
 }
 
 void Helper::clearFolder(QDir &dir){

+ 1 - 1
helper.h

@@ -51,7 +51,7 @@ class Helper:public QObject {
     void applyMicroPatch();
     void installMicroPatch();
     void applyLoadscreens();
-    void checkDatFile();
+    int checkDatFile();
     void clearFolder(QDir &dir);
     QByteArray ba;
     QString dialog_ok_answer;

+ 2 - 0
lib/include/BinaryData.h

@@ -2,6 +2,8 @@
 // Created by Иван_Архипов on 31.10.2017.
 //
 
+#include <vector>
+
 #ifndef LOTRO_DAT_PATCHER_BINARYDATA_H
 #define LOTRO_DAT_PATCHER_BINARYDATA_H
 

+ 2 - 0
lib/include/DatFile.h

@@ -95,6 +95,8 @@ namespace LOTRO_DAT {
 
         DAT_STATE DatFileState() const;
 
+        DAT_RESULT PerformDictionaryCheck();
+
         ~DatFile();
 
         // EXTRACT BASE SECTION

BIN
lib/lib/libLotroDat.dll.a


BIN
lib/lib/libLotroDat_static.a


+ 50 - 19
lib/src/DatFile.cpp

@@ -133,6 +133,8 @@ namespace LOTRO_DAT {
         LOG(INFO) << "Making last preparations...";
         return_value = std::max(return_value, result);
 
+        PerformDictionaryCheck();
+
         if (return_value >= 2) {
             LOG(WARNING) << "Dat file could be corrupted. Trying to delete corrupted dictionary rows";
             if (RepairDatFile() != SUCCESS)
@@ -145,6 +147,7 @@ namespace LOTRO_DAT {
             InitDatFile(filename, dat_id);
         }
 
+
         dat_without_patches_ = CheckIfNotPatched();
         LOG(INFO) << "Preparations made successfully! Init return value = " << return_value;
         return return_value;
@@ -272,8 +275,13 @@ namespace LOTRO_DAT {
         ReadData(dicts_data, dict_size, dict_offset + 8);
 
         if (dicts_data.size() < 15) {
-            LOG(ERROR) << "Incorrect dictionary. Passing.";
-            return FAILED;
+            LOG(ERROR) << "Incorrect dictionary. Passing without it.";
+            orig_dict_.clear();
+            patch_dict_.clear();
+            WriteData(BinaryData::FromNumber<4>(0), 4, 300);
+            dat_state_ = UPDATED;
+            dat_without_patches_ = true;
+            return SUCCESS;
         }
 
         BinaryData hi_data = dicts_data.CutData(0, 15) + BinaryData("\0", 1);
@@ -352,6 +360,27 @@ namespace LOTRO_DAT {
         return SUCCESS;
     }
 
+    DAT_RESULT DatFile::PerformDictionaryCheck() {
+        for (auto mpair : dictionary_) {
+            auto file = mpair.second;
+            auto file_id = mpair.first;
+            if (CorrectSubfile(file))
+                continue;
+
+            if (current_locale_ == PATCHED && orig_dict_.count(file_id) > 0) {
+                LOG(WARNING) << "Potential incorrect patched version of file " << file_id << ". Switching to original.";
+                dictionary_[file_id] = orig_dict_[file_id];
+            }
+
+            if (!CorrectSubfile(file)) {
+                LOG(ERROR) << "Incorrect file " << file_id << ". It's offset is said as " << file->file_offset()
+                           << ". Erasing it from dictionary.";
+                dictionary_.erase(file_id);
+            }
+        }
+        return SUCCESS;
+    }
+
     //------------------------------------------------//
     // CLOSE SECTION
     //------------------------------------------------//
@@ -480,12 +509,13 @@ namespace LOTRO_DAT {
         ReadData(dicts_data, 4, dict_offset);
         long long dict_size = dicts_data.ToNumber<4>(0);
 
-        if (binary_data.size() > dict_size) {
-            WriteData(BinaryData::FromNumber<4>(std::max(binary_data.size(), 20u * 1024u * 1024u)), 4, file_size_);
+        if (binary_data.size() > dict_size || dict_offset == 0) {
+            WriteData(BinaryData::FromNumber<4>(file_size_), 4, 300);
+
+            WriteData(BinaryData::FromNumber<4>(std::max(binary_data.size() + 4, 20u * 1024u * 1024u)), 4, file_size_);
             WriteData(BinaryData::FromNumber<4>(100), 4, file_size_ + 4);
             WriteData(binary_data, binary_data.size(), file_size_ + 8);
-            WriteData(BinaryData::FromNumber<4>(file_size_), 4, 300);
-            file_size_ += binary_data.size();
+            file_size_ += binary_data.size() + 8;
 
             // Adding space for 25 megabytes locales file in total.
             BinaryData nulls(unsigned(20 * 1024 * 1024));
@@ -715,10 +745,15 @@ namespace LOTRO_DAT {
         }
         Subfile *file = dictionary_[file_id];
 
-        if (!CorrectSubfile(file)) {
-            LOG(ERROR) << "Incorrect subfile with id " << file->file_id() << " (headers do not match). Cannot patch it";
-            return FAILED;
-        }
+//        if (!CorrectSubfile(file)) {
+//            if (current_locale_ == PATCHED && patch_dict_.count(file_id) > 0) {
+//                LOG(WARNING) << "Patched subfile header with id = " << file->file_id() << " differs from original version...";
+//            } else {
+//                LOG(ERROR) << "Incorrect subfile with id " << file->file_id()
+//                           << " (headers do not match). Cannot patch it";
+//                return FAILED;
+//            }
+//        }
 
         // If file has inactive category, then we should set it to patched state in order to commit patch and
         // then in ApplyFilePatch(), if new category is still inactive, return dictionary to its original state;
@@ -733,7 +768,7 @@ namespace LOTRO_DAT {
             file->category = 1;
         }
 
-        BinaryData old_data = GetFileData(file);
+        BinaryData old_data = GetFileData(orig_dict_.count(file->file_id()) == 0 ? file : orig_dict_[file->file_id_]);
         if (old_data.Empty()) {
             LOG(ERROR) << "GetFileData returned empty data. Aborting.";
             return DAT_PATCH_FILE_ERROR;
@@ -761,7 +796,7 @@ namespace LOTRO_DAT {
         while (!data.Empty()) {
             DAT_RESULT result = PatchFile(data);
             if (result != SUCCESS)
-                LOG(ERROR) << "Cannot patch file" << data.options["fid"].as<long long>() << " continuing";
+                LOG(ERROR) << "Cannot patch file " << data.options["fid"].as<long long>() << " continuing";
             data = db->GetNextFile();
         }
         LOG(INFO) << "Successfully patched whole database";
@@ -876,6 +911,7 @@ namespace LOTRO_DAT {
 
     BinaryData DatFile::GetFileData(const Subfile *file, long long int offset) {
         LOG(DEBUG) << "Getting file " << file->file_id() << " data";
+
         BinaryData mfile_id(20);
         ReadData(mfile_id, 20, file->file_offset() + 8);
         if (mfile_id.Empty()) {
@@ -951,7 +987,7 @@ namespace LOTRO_DAT {
     }
 
     DAT_RESULT DatFile::WriteData(const BinaryData &data, long long size, long long offset, long long data_offset) {
-        if (dat_state_ < READY) {
+        if (dat_state_ < SUCCESS_DICTIONARY) {
             LOG(ERROR) << "Dat state isn't READY. Cannot write data.";
             return INCORRECT_STATE_ERROR;
         }
@@ -1068,13 +1104,8 @@ namespace LOTRO_DAT {
                 patch_dict_.clear();
                 LOG(INFO) << "DAT FILE WAS UPDATED!!!! CLEARING PATCH DATA";
                 pending_patch_.insert(file_id);
-                truncate64(filename_.c_str(), file_size_);
+                WriteData(BinaryData::FromNumber<4>(0), 4, 300);
                 return true;
-
-                orig_dict_.erase(file_id);
-                patch_dict_.erase(file_id);
-                updated = true;
-                dat_state_ = UPDATED;
             }
         }
         return updated;

+ 2 - 0
lib/src/Examples/patcher_example.cpp

@@ -114,11 +114,13 @@ int main() {
                     std::cout << "Unfortunately, I cannot open this database. Could you try again please?\n";
                     continue;
                 };
+
                 if (db.CountRows() == 0) {
                     std::cout << "There are no files in database or database doesn't exist. "
                             "Please, try again!\n";
                     continue;
                 }
+
                 std::cout << "There are " << db.CountRows() << " files in database." << std::endl;
 
                 std::cout << "Successfully opened database! Beginning patching...\n";

+ 8 - 7
lib/src/SubDirectory.cpp

@@ -76,7 +76,7 @@ namespace LOTRO_DAT {
 
             if (subdir->subfiles_.empty() && subdir->subdirs_.empty()) {
                 LOG(WARNING) << "Sub-subdirectory is empty or made empty... Dictionary offset = " << offset_ + i << "; Passing others";
-                //break;
+                break;
             } else
                 subdirs_.push_back(subdir);
         }
@@ -122,12 +122,12 @@ namespace LOTRO_DAT {
                     header.ToNumber<4>(28) // unknown2 - must be zero??
             );
 
-            if (dat_->CorrectSubfile(subfile)) {
+//            if (dat_->CorrectSubfile(subfile)) {
                 subfiles_.emplace_back(subfile);
-            } else {
-                LOG(WARNING) << "Incorrect Subfile in directory at offset " << offset_ + 63 * 8 + 4 + 32 * i << " (id = " << subfile->file_id() << ");";
-                //break;
-            }
+//            } else {
+//                LOG(WARNING) << "Incorrect Subfile in directory at offset " << offset_ + 63 * 8 + 4 + 32 * i << " (id = " << subfile->file_id() << ");";
+//                break;
+//            }
         }
         return true;
     }
@@ -137,7 +137,8 @@ namespace LOTRO_DAT {
             if (dict.count(i->file_id() != 0)) {
                 LOG(WARNING) << "Found multiple instances of file " << i->file_id() << " at dictionary offset "
                              << i->dictionary_offset() << ". Base offset = " << dict[i->file_id()]->dictionary_offset();
-                continue;
+                if (!dat_->CorrectSubfile(i) || dat_->CorrectSubfile(dict[i->file_id_]))
+                    continue;
             }
             dict[i->file_id()] = i;
         }

+ 1 - 1
lib/src/Subfiles/FontSubfile.cpp

@@ -45,6 +45,6 @@ namespace LOTRO_DAT {
             LOG(ERROR) << "invalid options data!";
             return BinaryData(0);
         }
-        return old_data.CutData(0, 8) + data.binary_data;
+        return old_data.CutData(0, 16) + data.binary_data.CutData(8);
     }
 };

+ 2 - 3
main.cpp

@@ -11,7 +11,7 @@
 #include <QThread>
 #include <QtConcurrent/QtConcurrentRun>
 
-void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
+void myMessageOutput(QtMsgType type, const QMessageLogContext &, const QString &msg)
 {
     QByteArray localMsg = msg.toUtf8();
     const char * format = "[" + QDate::currentDate().toString(Qt::ISODate).toUtf8() + " " + QTime::currentTime().toString(Qt::ISODate).toUtf8() + "]";
@@ -42,7 +42,7 @@ int main(int argc, char *argv[]){
 
     // if it's later than 25.02.2018 - return. That's for temporary version
     long long cur_time = time(0);
-    if (cur_time >= 1520629200)
+    if (cur_time >= 1523331670)
         return 0;
 
     setbuf(stdout, NULL);
@@ -76,7 +76,6 @@ int main(int argc, char *argv[]){
     qApp->setStyleSheet(qssStr);
 
     w.show();
-    w.doStartPreparations();
     //QFuture<void> future = QtConcurrent::run(w, &MainWindow::doStartPreparations);
     auto result = a.exec();
 

+ 37 - 8
mainwindow.cpp

@@ -3,6 +3,7 @@
 App *App::instance;
 
 #include <QBitmap>
+#include <QFutureWatcher>
 
 MainWindow::MainWindow( QMainWindow* parent ) :
     QMainWindow( parent, Qt::Window | Qt::FramelessWindowHint ),
@@ -16,7 +17,7 @@ MainWindow::MainWindow( QMainWindow* parent ) :
     QCoreApplication::setOrganizationName(ORGANIZATION_NAME);
     QCoreApplication::setOrganizationDomain(ORGANIZATION_DOMAIN);
     QCoreApplication::setApplicationName(APPLICATION_NAME);
-    setWindowTitle("Русификация LOTRO");
+    setWindowTitle("ВКО: Наследие");
 
     app->logSectionEnd();
 
@@ -49,16 +50,45 @@ MainWindow::MainWindow( QMainWindow* parent ) :
     movie->start();
 
     connect(app->window->ui->skinSelect, SIGNAL(currentIndexChanged(int)), this, SLOT(saveSkin()));
+    connect(this, SIGNAL(datFileChecked(int)), this, SLOT(PostDatFileCheckTransactions(int)));
 
-    app->state = "busy";
+    app->helper->setState("busy");
+    ui->hintLabel->setText("Проверка .dat файла...");
+    ui->exthintLabel->setText("Выполняется предварительная проверка файлов данных. Пожалуйста, подождите..");
+
+    QFuture<void> future = QtConcurrent::run([=]() {
+        // Проверяем файл локализации
+        int result = app->helper->checkDatFile();
+        emit(datFileChecked(result));
+    });
 }
 
-void MainWindow::doStartPreparations() {
+void MainWindow::PostDatFileCheckTransactions(int check_result) {
+    ui->hintLabel->setText("Проверка .dat файла...");
+    ui->exthintLabel->setText("Успешно!");
+
     App *app = &App::getInstance();
-    // Проверяем файл локализации
-    app->helper->checkDatFile();
+    app->helper->setState("free");
+
+    if (check_result == 1) {
+        app->ready = false;
+        QString text = "Файлы локализации изменены";
+        QString info = "В процессе последнего запуска игры были установлены обновления игрового клиента. Это могло затронуть файлы локализации. Желаете провести проверку и исправить поврежденные участки перевода? Вы можете в любой момент сделать это самостоятельно, нажав кнопку «Применить патчи заново».";
+        app->helper->myDialogBox(text, info, "OK", "Отмена", "gandalf.png", "applypaths", "", 400, 220, true, true);
+    }
 
-    app->state = "free";
+    if (check_result == 2) {
+        app->ready = false;
+        QString text = "Файлы локализации отсутствуют";
+        QString info = "Текущий файл локализации не содержит патчей. Возможно это первый запуск «Наследия» с данным игровым клиентом, или клиент был обновлён игровым лаунчером. Применить выбранные патчи в данному файлу?";
+        app->helper->myDialogBox(text, info, "OK", "Отмена", "gandalf.png", "applypaths", "", 420, 200, true, true);
+    }
+
+    if (check_result == 3) {
+        QString text = "Файлы локализации не являются оригинальными";
+        QString info = "Внимание! Присутствующие в вашем игровом клиенте файлы локализации не являются оригинальными, поскольку были модифицированы другой программой.<br/><strong>Мы настоятельно рекомендуем перекачать оригинальные версии файлов, поскольку правильная работа Наследия с данными файлами не гарантируется!</strong>";
+        app->helper->myDialogBox(text, info, "Перекачать", "Не надо", "gandalf.png", "loaddatfile", "", 550, 200, true, true);
+    }
 
     // Если это первый запуск то показываем мастер
     if(app->config->getValue("Local", "runfirst") == "-1"){
@@ -89,7 +119,6 @@ MainWindow::~MainWindow()
 void MainWindow::closeEvent(QCloseEvent *e){
     App *app = &App::getInstance();
     if(app->state == "busy") e->ignore();
-
 }
 
 void MainWindow::mouseMoveEvent( QMouseEvent* e ) {
@@ -130,7 +159,7 @@ void MainWindow::minimize() {
     setWindowState(Qt::WindowMinimized);
 }
 
-bool MainWindow::eventFilter(QObject *obj, QEvent *event){
+bool MainWindow::eventFilter(QObject *obj, QEvent *){
     App *app = &App::getInstance();
     if(app->state == "busy") return false;
 

+ 6 - 1
mainwindow.h

@@ -19,11 +19,16 @@ public:
     explicit MainWindow(QMainWindow *parent = 0);
     ~MainWindow();
     bool eventFilter(QObject *obj, QEvent *event);
-    void doStartPreparations();
 
     QString hint = "";
     QString exthint = "";
 
+
+signals:
+    void datFileChecked(int result);
+public slots:
+    void PostDatFileCheckTransactions(int check_result);
+
 private:
 
 

+ 11 - 11
mainwindow.ui

@@ -323,7 +323,7 @@
       </rect>
      </property>
      <property name="text">
-      <string>В разработке</string>
+      <string>Скоро появится</string>
      </property>
     </widget>
     <widget class="QLabel" name="label_3">
@@ -331,12 +331,12 @@
       <rect>
        <x>10</x>
        <y>23</y>
-       <width>201</width>
+       <width>221</width>
        <height>16</height>
       </rect>
      </property>
      <property name="text">
-      <string>Полный перевод текстов игры</string>
+      <string>Перевод текстов от команды Наследия</string>
      </property>
     </widget>
     <widget class="QLabel" name="label">
@@ -344,12 +344,12 @@
       <rect>
        <x>10</x>
        <y>58</y>
-       <width>201</width>
+       <width>221</width>
        <height>16</height>
       </rect>
      </property>
      <property name="text">
-      <string>Русские звуковые файлы</string>
+      <string>Русские звуковые файлы от Mail.ru</string>
      </property>
     </widget>
     <widget class="QLabel" name="label_4">
@@ -357,12 +357,12 @@
       <rect>
        <x>10</x>
        <y>93</y>
-       <width>201</width>
+       <width>231</width>
        <height>16</height>
       </rect>
      </property>
      <property name="text">
-      <string>Русские версии карт локаций</string>
+      <string>Русские карты от нашей команды</string>
      </property>
     </widget>
     <widget class="QLabel" name="label_8">
@@ -370,7 +370,7 @@
       <rect>
        <x>10</x>
        <y>128</y>
-       <width>201</width>
+       <width>221</width>
        <height>16</height>
       </rect>
      </property>
@@ -383,12 +383,12 @@
       <rect>
        <x>10</x>
        <y>163</y>
-       <width>201</width>
+       <width>221</width>
        <height>16</height>
       </rect>
      </property>
      <property name="text">
-      <string>Оригинальные русские шрифты</string>
+      <string>Временная версия шрифтов для U22</string>
      </property>
     </widget>
     <widget class="QLabel" name="label_7">
@@ -1731,7 +1731,7 @@
      </rect>
     </property>
     <property name="text">
-     <string>Наследие: v1.0.0 Test</string>
+     <string>Наследие: v1.0.0</string>
     </property>
    </widget>
    <widget class="QPushButton" name="designButton">

+ 12 - 12
ui_mainwindow.h

@@ -1,7 +1,7 @@
 /********************************************************************************
 ** Form generated from reading UI file 'mainwindow.ui'
 **
-** Created by: Qt User Interface Compiler version 5.9.2
+** Created by: Qt User Interface Compiler version 5.9.3
 **
 ** WARNING! All changes made in this file will be lost when recompiling UI file!
 ********************************************************************************/
@@ -231,19 +231,19 @@ public:
         videosStatus->setGeometry(QRect(230, 180, 221, 35));
         label_3 = new QLabel(mainbox);
         label_3->setObjectName(QStringLiteral("label_3"));
-        label_3->setGeometry(QRect(10, 23, 201, 16));
+        label_3->setGeometry(QRect(10, 23, 221, 16));
         label = new QLabel(mainbox);
         label->setObjectName(QStringLiteral("label"));
-        label->setGeometry(QRect(10, 58, 201, 16));
+        label->setGeometry(QRect(10, 58, 221, 16));
         label_4 = new QLabel(mainbox);
         label_4->setObjectName(QStringLiteral("label_4"));
-        label_4->setGeometry(QRect(10, 93, 201, 16));
+        label_4->setGeometry(QRect(10, 93, 231, 16));
         label_8 = new QLabel(mainbox);
         label_8->setObjectName(QStringLiteral("label_8"));
-        label_8->setGeometry(QRect(10, 128, 201, 16));
+        label_8->setGeometry(QRect(10, 128, 221, 16));
         label_6 = new QLabel(mainbox);
         label_6->setObjectName(QStringLiteral("label_6"));
-        label_6->setGeometry(QRect(10, 163, 201, 16));
+        label_6->setGeometry(QRect(10, 163, 221, 16));
         label_7 = new QLabel(mainbox);
         label_7->setObjectName(QStringLiteral("label_7"));
         label_7->setGeometry(QRect(10, 198, 201, 16));
@@ -643,12 +643,12 @@ public:
         imagesStatus->setText(QApplication::translate("MainWindow", "\320\236\321\200\320\270\320\263\320\270\320\275\320\260\320\273", Q_NULLPTR));
         loadscreensStatus->setText(QApplication::translate("MainWindow", "\320\236\321\200\320\270\320\263\320\270\320\275\320\260\320\273", Q_NULLPTR));
         fontsStatus->setText(QApplication::translate("MainWindow", "\320\236\321\200\320\270\320\263\320\270\320\275\320\260\320\273", Q_NULLPTR));
-        videosStatus->setText(QApplication::translate("MainWindow", "\320\222 \321\200\320\260\320\267\321\200\320\260\320\261\320\276\321\202\320\272\320\265", Q_NULLPTR));
-        label_3->setText(QApplication::translate("MainWindow", "\320\237\320\276\320\273\320\275\321\213\320\271 \320\277\320\265\321\200\320\265\320\262\320\276\320\264 \321\202\320\265\320\272\321\201\321\202\320\276\320\262 \320\270\320\263\321\200\321\213", Q_NULLPTR));
-        label->setText(QApplication::translate("MainWindow", "\320\240\321\203\321\201\321\201\320\272\320\270\320\265 \320\267\320\262\321\203\320\272\320\276\320\262\321\213\320\265 \321\204\320\260\320\271\320\273\321\213", Q_NULLPTR));
-        label_4->setText(QApplication::translate("MainWindow", "\320\240\321\203\321\201\321\201\320\272\320\270\320\265 \320\262\320\265\321\200\321\201\320\270\320\270 \320\272\320\260\321\200\321\202 \320\273\320\276\320\272\320\260\321\206\320\270\320\271", Q_NULLPTR));
+        videosStatus->setText(QApplication::translate("MainWindow", "\320\241\320\272\320\276\321\200\320\276 \320\277\320\276\321\217\320\262\320\270\321\202\321\201\321\217", Q_NULLPTR));
+        label_3->setText(QApplication::translate("MainWindow", "\320\237\320\265\321\200\320\265\320\262\320\276\320\264 \321\202\320\265\320\272\321\201\321\202\320\276\320\262 \320\276\321\202 \320\272\320\276\320\274\320\260\320\275\320\264\321\213 \320\235\320\260\321\201\320\273\320\265\320\264\320\270\321\217", Q_NULLPTR));
+        label->setText(QApplication::translate("MainWindow", "\320\240\321\203\321\201\321\201\320\272\320\270\320\265 \320\267\320\262\321\203\320\272\320\276\320\262\321\213\320\265 \321\204\320\260\320\271\320\273\321\213 \320\276\321\202 Mail.ru", Q_NULLPTR));
+        label_4->setText(QApplication::translate("MainWindow", "\320\240\321\203\321\201\321\201\320\272\320\270\320\265 \320\272\320\260\321\200\321\202\321\213 \320\276\321\202 \320\275\320\260\321\210\320\265\320\271 \320\272\320\276\320\274\320\260\320\275\320\264\321\213", Q_NULLPTR));
         label_8->setText(QApplication::translate("MainWindow", "\320\235\320\260\321\210\320\260 \320\262\320\265\321\200\321\201\320\270\321\217 \320\267\320\260\321\201\321\202\320\260\320\262\320\276\321\207\320\275\321\213\321\205 \321\215\320\272\321\200\320\260\320\275\320\276\320\262", Q_NULLPTR));
-        label_6->setText(QApplication::translate("MainWindow", "\320\236\321\200\320\270\320\263\320\270\320\275\320\260\320\273\321\214\320\275\321\213\320\265 \321\200\321\203\321\201\321\201\320\272\320\270\320\265 \321\210\321\200\320\270\321\204\321\202\321\213", Q_NULLPTR));
+        label_6->setText(QApplication::translate("MainWindow", "\320\222\321\200\320\265\320\274\320\265\320\275\320\275\320\260\321\217 \320\262\320\265\321\200\321\201\320\270\321\217 \321\210\321\200\320\270\321\204\321\202\320\276\320\262 \320\264\320\273\321\217 U22", Q_NULLPTR));
         label_7->setText(QApplication::translate("MainWindow", "\320\237\320\260\320\272\320\265\321\202 \321\200\321\203\321\201\321\201\320\272\320\270\321\205 \320\262\320\270\320\264\320\265\320\276\321\200\320\276\320\273\320\270\320\272\320\276\320\262", Q_NULLPTR));
         optbox->setTitle(QString());
         lotrofolderbox->setTitle(QApplication::translate("MainWindow", "\320\236\321\201\320\275\320\276\320\262\320\275\321\213\320\265 \320\275\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270", Q_NULLPTR));
@@ -730,7 +730,7 @@ public:
         goTitle->setText(QApplication::translate("MainWindow", "\320\222\320\276 \321\207\321\202\320\276 \320\261\321\203\320\264\320\265\320\274 \320\270\320\263\321\200\320\260\321\202\321\214 \321\201\320\265\320\263\320\276\320\264\320\275\321\217?", Q_NULLPTR));
         goHeader->setText(QApplication::translate("MainWindow", "\320\227\320\260\320\277\321\203\321\201\320\272 \320\270\320\263\321\200\321\213", Q_NULLPTR));
         goHint->setText(QApplication::translate("MainWindow", "\320\237\320\276\320\264\320\263\320\276\321\202\320\276\320\262\320\272\320\260 \321\204\320\260\320\271\320\273\320\276\320\262 \320\273\320\276\320\272\320\260\320\273\320\270\320\267\320\260\321\206\320\270\320\270 ...", Q_NULLPTR));
-        labelVersion->setText(QApplication::translate("MainWindow", "\320\235\320\260\321\201\320\273\320\265\320\264\320\270\320\265: v1.0.0 Test", Q_NULLPTR));
+        labelVersion->setText(QApplication::translate("MainWindow", "\320\235\320\260\321\201\320\273\320\265\320\264\320\270\320\265: v1.0.0", Q_NULLPTR));
         designButton->setText(QApplication::translate("MainWindow", "\320\236\320\261\320\275\320\276\320\262\320\270\321\202\321\214", Q_NULLPTR));
         mainTitle->setText(QApplication::translate("MainWindow", "\320\222\320\273\320\260\321\201\321\202\320\265\320\273\320\270\320\275 \320\272\320\276\320\273\320\265\321\206 \320\236\320\275\320\273\320\260\320\271\320\275: \320\235\320\260\321\201\320\273\320\265\320\264\320\270\320\265", Q_NULLPTR));
     } // retranslateUi