From 2767210585916bc5b9c94701ad736ca07eb6d067 Mon Sep 17 00:00:00 2001 From: Katja Marttila Date: Thu, 21 Mar 2019 13:14:53 +0200 Subject: Fix update with long version numbers Update fails if version number is longer than 32bit int. Fixed so that the value is converted to 64bit int instead so the int overflow will not happen. Change-Id: If7ab57e89b155793e9fab3ba5dad9c734adc2234 Fixes: QTIFW-1310 Reviewed-by: Konstantin Podsvirov Reviewed-by: Samuli Piippo --- src/libs/kdtools/updatefinder.cpp | 10 +++++----- tests/auto/installer/compareversion/tst_compareversion.cpp | 6 +++++- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/libs/kdtools/updatefinder.cpp b/src/libs/kdtools/updatefinder.cpp index b64f922c3..b12ffac99 100644 --- a/src/libs/kdtools/updatefinder.cpp +++ b/src/libs/kdtools/updatefinder.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2013 Klaralvdalens Datakonsult AB (KDAB) -** Copyright (C) 2017 The Qt Company Ltd. +** Copyright (C) 2019 The Qt Company Ltd. ** Contact: http://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -601,18 +601,18 @@ int KDUpdater::compareVersion(const QString &v1, const QString &v2) bool v2_ok = false; if (index == v1_comps.count() && index < v2_comps.count()) { - v2_comps.at(index).toInt(&v2_ok); + v2_comps.at(index).toLongLong(&v2_ok); return v2_ok ? -1 : +1; } if (index < v1_comps.count() && index == v2_comps.count()) { - v1_comps.at(index).toInt(&v1_ok); + v1_comps.at(index).toLongLong(&v1_ok); return v1_ok ? +1 : -1; } if (index >= v1_comps.count() || index >= v2_comps.count()) break; - int v1_comp = v1_comps.at(index).toInt(&v1_ok); - int v2_comp = v2_comps.at(index).toInt(&v2_ok); + qlonglong v1_comp = v1_comps.at(index).toLongLong(&v1_ok); + qlonglong v2_comp = v2_comps.at(index).toLongLong(&v2_ok); if (!v1_ok) { if (v1_comps.at(index) == QLatin1String("x")) diff --git a/tests/auto/installer/compareversion/tst_compareversion.cpp b/tests/auto/installer/compareversion/tst_compareversion.cpp index 24ebe9ba6..a33d25b28 100644 --- a/tests/auto/installer/compareversion/tst_compareversion.cpp +++ b/tests/auto/installer/compareversion/tst_compareversion.cpp @@ -47,7 +47,11 @@ void tst_CompareVersion::compareVersion() QCOMPARE(KDUpdater::compareVersion("2.1", "2.0"), +1); QCOMPARE(KDUpdater::compareVersion("2.0", "2.0"), 0); QCOMPARE(KDUpdater::compareVersion("2.1", "2.1"), 0); - + QCOMPARE(KDUpdater::compareVersion("2.1", "2.1-201903190747"), -1); + QCOMPARE(KDUpdater::compareVersion("2.1-201903190747", "2.1"), +1); + QCOMPARE(KDUpdater::compareVersion("2.1-201903190747", "2.1-201903190747"), 0); + QCOMPARE(KDUpdater::compareVersion("2.1-0", "2.1-201903190747"), -1); + QCOMPARE(KDUpdater::compareVersion("2.1-201903190747", "2.1-0"), +1); QCOMPARE(KDUpdater::compareVersion("2.0.12.4", "2.1.10.4"), -1); } -- cgit v1.2.3 From 701beccd14edb3c7ca5445833d0cf93435c52666 Mon Sep 17 00:00:00 2001 From: Katja Marttila Date: Fri, 29 Mar 2019 13:10:48 +0200 Subject: Rename variables We have named 'archive' to 'category' ages ago, rename the remaining variables accordingly. Change-Id: I3f723d3e7014c264e2a4db21c434708691a1038e Reviewed-by: Antti Kokko --- src/libs/installer/metadatajob.cpp | 4 ++-- src/libs/installer/repository.cpp | 18 +++++++++--------- src/libs/installer/repository.h | 6 +++--- src/libs/installer/settings.cpp | 2 +- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/libs/installer/metadatajob.cpp b/src/libs/installer/metadatajob.cpp index 3beda7ef2..6052da02e 100644 --- a/src/libs/installer/metadatajob.cpp +++ b/src/libs/installer/metadatajob.cpp @@ -619,13 +619,13 @@ MetadataJob::Status MetadataJob::parseUpdatesXml(const QList &re } } } - if (metadata.repository.archivename().isEmpty()) { + if (metadata.repository.categoryname().isEmpty()) { m_metaFromDefaultRepositories.insert(metadata.directory, metadata); } else { //Hash metadata to help checking if meta for repository is already fetched ArchiveMetadata archiveMetadata; archiveMetadata.metaData = metadata; - m_fetchedArchive.insertMulti(metadata.repository.archivename(), archiveMetadata); + m_fetchedArchive.insertMulti(metadata.repository.categoryname(), archiveMetadata); // Hash for faster lookups m_metaFromArchive.insert(metadata.directory, metadata); } diff --git a/src/libs/installer/repository.cpp b/src/libs/installer/repository.cpp index 5e31d81e2..a165b8617 100644 --- a/src/libs/installer/repository.cpp +++ b/src/libs/installer/repository.cpp @@ -57,7 +57,7 @@ Repository::Repository(const Repository &other) , m_password(other.m_password) , m_displayname(other.m_displayname) , m_compressed(other.m_compressed) - , m_archivename(other.m_archivename) + , m_categoryname(other.m_categoryname) { registerMetaType(); } @@ -202,17 +202,17 @@ void Repository::setDisplayName(const QString &displayname) /*! Returns the archive name if the repository belongs to an archive. */ -QString Repository::archivename() const +QString Repository::categoryname() const { - return m_archivename; + return m_categoryname; } /*! - Sets the archive name to \a archivename if the repository belongs to an archive. + Sets the category name to \a categoryname if the repository belongs to an category. */ -void Repository::setArchiveName(const QString &archivename) +void Repository::setCategoryName(const QString &categoryname) { - m_archivename = archivename; + m_categoryname = categoryname; } /*! @@ -265,7 +265,7 @@ const Repository &Repository::operator=(const Repository &other) m_password = other.m_password; m_displayname = other.m_displayname; m_compressed = other.m_compressed; - m_archivename = other.m_archivename; + m_categoryname = other.m_categoryname; return *this; } @@ -280,7 +280,7 @@ QDataStream &operator>>(QDataStream &istream, Repository &repository) { QByteArray url, username, password, displayname, compressed; istream >> url >> repository.m_default >> repository.m_enabled >> username >> password - >> displayname >> repository.m_archivename; + >> displayname >> repository.m_categoryname; repository.setUrl(QUrl::fromEncoded(QByteArray::fromBase64(url))); repository.setUsername(QString::fromUtf8(QByteArray::fromBase64(username))); repository.setPassword(QString::fromUtf8(QByteArray::fromBase64(password))); @@ -292,7 +292,7 @@ QDataStream &operator<<(QDataStream &ostream, const Repository &repository) { return ostream << repository.m_url.toEncoded().toBase64() << repository.m_default << repository.m_enabled << repository.m_username.toUtf8().toBase64() << repository.m_password.toUtf8().toBase64() - << repository.m_displayname.toUtf8().toBase64() << repository.m_archivename.toUtf8().toBase64(); + << repository.m_displayname.toUtf8().toBase64() << repository.m_categoryname.toUtf8().toBase64(); } } diff --git a/src/libs/installer/repository.h b/src/libs/installer/repository.h index 83393ead9..546cddc97 100644 --- a/src/libs/installer/repository.h +++ b/src/libs/installer/repository.h @@ -64,8 +64,8 @@ public: QString displayname() const; void setDisplayName(const QString &displayname); - QString archivename() const; - void setArchiveName(const QString &archivename); + QString categoryname() const; + void setCategoryName(const QString &categoryname); bool isCompressed() const; void setCompressed(bool compressed); @@ -85,7 +85,7 @@ private: QString m_username; QString m_password; QString m_displayname; - QString m_archivename; + QString m_categoryname; bool m_compressed; }; diff --git a/src/libs/installer/settings.cpp b/src/libs/installer/settings.cpp index 13eb2ce40..21fea279a 100644 --- a/src/libs/installer/settings.cpp +++ b/src/libs/installer/settings.cpp @@ -168,7 +168,7 @@ static QSet readRepositories(QXmlStreamReader &reader, bool isDefaul } } if (displayName && !displayName->isEmpty()) - repo.setArchiveName(*displayName); + repo.setCategoryName(*displayName); set.insert(repo); } else if (reader.name() == QLatin1String("Tooltip")) { *tooltip = reader.readElementText(); -- cgit v1.2.3 From 2b61b707189e9d5e70e0c79b85e602933ee28015 Mon Sep 17 00:00:00 2001 From: Katja Marttila Date: Fri, 29 Mar 2019 14:47:43 +0200 Subject: Fix components shown in categories If same repository was included in several different categories, and the categories were fetched in the same time, the components were shown only in one of the categories. Fixed so that once the repository is downloaded, the related meta is included to all categories. This also speeds up other category download times. Task-id: QTIFW-1314 Change-Id: I0d890a52dee15a9bde11383f608f547a32b99ee7 Reviewed-by: Jani Heikkinen --- src/libs/installer/metadatajob.cpp | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/src/libs/installer/metadatajob.cpp b/src/libs/installer/metadatajob.cpp index 6052da02e..c69fda3d0 100644 --- a/src/libs/installer/metadatajob.cpp +++ b/src/libs/installer/metadatajob.cpp @@ -626,6 +626,18 @@ MetadataJob::Status MetadataJob::parseUpdatesXml(const QList &re ArchiveMetadata archiveMetadata; archiveMetadata.metaData = metadata; m_fetchedArchive.insertMulti(metadata.repository.categoryname(), archiveMetadata); + + //Check if other categories have the same url (contains same metadata) + //so we can speed up other category fetches + foreach (RepositoryCategory category, m_core->settings().repositoryCategories()) { + if (category.displayname() != metadata.repository.categoryname()) { + foreach (Repository repository, category.repositories()) { + if (repository.url() == metadata.repository.url()) { + m_fetchedArchive.insertMulti(category.displayname(), archiveMetadata); + } + } + } + } // Hash for faster lookups m_metaFromArchive.insert(metadata.directory, metadata); } @@ -732,11 +744,20 @@ QSet MetadataJob::getRepositories() // If repository is already fetched, do not fetch it again. // In updater mode, fetch always all archive repositories to get updates foreach (RepositoryCategory repositoryCategory, m_core->settings().repositoryCategories()) { - if (m_core->isUpdater() || (repositoryCategory.isEnabled() && !m_fetchedArchive.contains(repositoryCategory.displayname()))) { - foreach (Repository repository, repositoryCategory.repositories()) { - repositories.insert(repository); + if (m_core->isUpdater() || (repositoryCategory.isEnabled())) { + foreach (Repository repository, repositoryCategory.repositories()) { + QHashIterator i(m_fetchedArchive); + bool fetch = true; + while (i.hasNext()) { + i.next(); + ArchiveMetadata metaData = i.value(); + if (repository.url() == metaData.metaData.repository.url()) + fetch = false; + } + if (fetch) + repositories.insert(repository); + } } - } } return repositories; } -- cgit v1.2.3 From cca4f41448069389671ae9ad4d0166bda6f28917 Mon Sep 17 00:00:00 2001 From: Frederik Schwarzer Date: Mon, 1 Apr 2019 18:15:56 +0200 Subject: fix missing backslashed with double backslash command Change-Id: I0404f3d08d2a4bdc3f5d3ccafe8a016486d4ecdb Fixes: QTIFW-1037 Reviewed-by: Leena Miettinen --- doc/operations.qdoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/operations.qdoc b/doc/operations.qdoc index 9cba0d618..85a17a581 100644 --- a/doc/operations.qdoc +++ b/doc/operations.qdoc @@ -174,8 +174,8 @@ \note The operation is using QSettings to store the key value pair. QSettings always treats backslash as a special character and provides no API for reading - or writing such entries. Do not use slashes ('/' and '\') in section or key names; - the backslash character is used to separate sub keys. On windows, '\' are converted + or writing such entries. Do not use slashes ('/' and '\\') in section or key names; + the backslash character is used to separate sub keys. On windows, '\\' are converted by QSettings to '/', which makes them identical. Because the backslash character is used by QSettings to separate sub keys, you cannot read or write windows registry entries that contain slashes or backslashes. You should use a native windows API if -- cgit v1.2.3 From 48fd5d74c8aa493dc3459731c1bf17fc891397e2 Mon Sep 17 00:00:00 2001 From: Sergey Belyashov Date: Tue, 16 Apr 2019 11:23:02 +0300 Subject: Update Russian translation Change-Id: I36d329b7c8742133fe62cfc250e53a71ac25d069 Reviewed-by: Denis Shienkov Reviewed-by: olesya gerasimenko Reviewed-by: Oswald Buddenhagen --- src/sdk/translations/ifw_ru.ts | 118 ++++++++++++++++++++++++++--------------- 1 file changed, 76 insertions(+), 42 deletions(-) diff --git a/src/sdk/translations/ifw_ru.ts b/src/sdk/translations/ifw_ru.ts index 015f3c7b9..8fc1a6741 100644 --- a/src/sdk/translations/ifw_ru.ts +++ b/src/sdk/translations/ifw_ru.ts @@ -689,14 +689,6 @@ Cannot open temporary file for template %1: %2 Не удалось открыть временный файл для шаблона %1: %2 - - Corrupt installation - Установка повреждена - - - Your installation seems to be corrupted. Please consider re-installing from scratch. - Видимо, установленное приложение повреждено. Попробуйте его заново переустановить. - No marker found, stopped after %1. Маркер не найден, остановлено после %1. @@ -764,9 +756,17 @@ Cannot resolve isDefault in %1 Невозможно выполнить метод isDefault в сценарии %1 + + There was an error loading the selected component. This component can not be installed. + Возникла ошибка при загрузке выбранного компонента. Установить его не получится. + Update Info: - Информация об обновлении: + Информация об обновлении: + + + There was an error loading the selected component. This component can not be updated. + Возникла ошибка при загрузке выбранного компонента. Обновить его не получится. Cannot open the requested UI file "%1": %2 @@ -898,15 +898,22 @@ Select the components to install. Deselect installed components to uninstall them. Any components already installed will not be updated. Выберите компоненты для установки. Для удаления уже установленных компонентов снимите отметки выбора. Уже установленные компоненты не будут обновлены. - - To install new compressed repository, browse the repositories from your computer - Для установки нового хранилища укажите путь к нему на вашем компьютере - Open File Открытие файла + + QInstaller::ComponentSelectionPagePrivate + + Refresh + Обновить + + + Error + Ошибка + + QInstaller::ConsumeOutputOperation @@ -1150,10 +1157,6 @@ Error while loading %2 Redirect loop detected for "%1". Обнаружено кольцо перенаправлений «%1». - - Checksum mismatch detected for "%1". - Обнаружено несовпадение контрольной суммы «%1». - Network error while downloading '%1': %2. Возникла ошибка сети при загрузке «%1»: %2. @@ -1192,6 +1195,13 @@ Error while loading %2 Не удалось исполнить (неожиданный код завершения: %1): «%2» + + QInstaller::ExtractArchiveOperation + + Extracting "%1" + Извлечение «%1» + + QInstaller::ExtractArchiveOperation::Runnable @@ -1349,16 +1359,16 @@ Error while loading %2 Добро пожаловать в мастер установки %1. - Add or remove components - Добавление или удаление компонентов + &Add or remove components + &Добавление или удаление компонентов - Update components - Обновление компонентов + &Update components + &Обновление компонентов - Remove all components - Удаление всех компонентов + &Remove all components + &Удаление всех компонентов Retrieving information from remote installation sources... @@ -1377,8 +1387,8 @@ Error while loading %2 Доступно только локальное управление пакетами. - Quit - Выйти + &Quit + &Выйти @@ -1483,8 +1493,16 @@ Error while loading %2 Возникло неизвестное исключение во время загрузки. - Retrieving meta information from remote repository... - Получение метаданных из внешнего хранилища... + Checksum mismatch detected for "%1". + Обнаружено несовпадение контрольной суммы у «%1». + + + Retrieving meta information from remote repository... %1/%2 + Получение метаданных из внешнего хранилища... %1/%2 + + + Retrieving meta information from remote repository... + Получение метаданных из внешнего хранилища... Failure to fetch repositories. @@ -1636,7 +1654,7 @@ Downloading packages... Creating local repository - Создаётся локальный репозиторий + Создаётся локальное хранилище @@ -1721,6 +1739,10 @@ Installing component %1... %2 Ошибка во время процесса установки (%1): %2 + + Done + Готово + Cannot prepare uninstall Невозможно подготовиться к удалению @@ -1963,10 +1985,6 @@ Please copy the installer to a local drive Register File Type: Invalid arguments Регистрация типов файлов: недопустимые параметры - - <extension> <command> [description [contentType [icon]]] - <расширение> <команда> [описание [типСодержимого [значок]]] - QInstaller::RemoteObject @@ -2022,6 +2040,10 @@ Please copy the installer to a local drive Unknown error. Неизвестная ошибка. + + on line number: + в строке: + QInstaller::SelfRestartOperation @@ -2283,6 +2305,10 @@ as a user with the appropriate rights and then clicking OK. Cannot open settings file %1 for reading: %2 Невозможно открыть файл настроек %1 на чтение: %2 + + Show package categories + Показать категории пакетов + SettingsDialog @@ -2320,7 +2346,7 @@ as a user with the appropriate rights and then clicking OK. Repositories - Репозитории + Хранилища Add Username and Password for authentication if needed. @@ -2328,7 +2354,7 @@ as a user with the appropriate rights and then clicking OK. Use temporary repositories only - использовать только временные репозитории + использовать только временные хранилища Add @@ -2340,15 +2366,15 @@ as a user with the appropriate rights and then clicking OK. Test - Тестировать + Проверить Show Passwords - Показывать пароль + Показать пароли Check this to use repository during fetch. - Поставьте флажок, чтобы использовать репозиторий в процессе получения. + Поставьте флажок, чтобы использовать хранилище в процессе получения. Add the username to authenticate on the server. @@ -2360,7 +2386,7 @@ as a user with the appropriate rights and then clicking OK. The servers URL that contains a valid repository. - Адреса серверов, которые содержат рабочие репозиторий. + Адреса серверов, которые содержат рабочие хранилища. Hide Passwords @@ -2380,19 +2406,19 @@ as a user with the appropriate rights and then clicking OK. Repository - Репозиторий + Хранилище Default repositories - Репозитории по умолчанию + Хранилища по умолчанию Temporary repositories - Временные репозитории + Временные хранилища User defined repositories - Использовать назначенные репозитории + Использовать назначенные хранилища An error occurred while testing this repository. @@ -2410,6 +2436,14 @@ as a user with the appropriate rights and then clicking OK. Do you want to enable the repository? Желаете включить хранилище? + + Select All + Выбрать всё + + + Deselect All + Снять выбор + UpdateOperation -- cgit v1.2.3 From d82a363286b31e458d9f17ad28076b1d1e47a65a Mon Sep 17 00:00:00 2001 From: Katja Marttila Date: Thu, 18 Apr 2019 15:08:16 +0300 Subject: Fix maintenancetool size Task-number: QTIFW-1322 Change-Id: Ibab81f97f2a114b5b55d24deb0f013657e17fc39 Reviewed-by: Jani Heikkinen --- src/libs/installer/packagemanagercore_p.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/libs/installer/packagemanagercore_p.cpp b/src/libs/installer/packagemanagercore_p.cpp index c67480737..29c3fb03a 100644 --- a/src/libs/installer/packagemanagercore_p.cpp +++ b/src/libs/installer/packagemanagercore_p.cpp @@ -1336,7 +1336,11 @@ void PackageManagerCorePrivate::writeMaintenanceTool(OperationList performedOper newBinaryWritten = true; QFile tmp(binaryName); QInstaller::openForRead(&tmp); +#ifdef Q_OS_OSX writeMaintenanceToolBinary(&tmp, tmp.size(), true); +#else + writeMaintenanceToolBinary(&tmp, layout.endOfBinaryContent - layout.binaryContentSize, true); +#endif } } -- cgit v1.2.3 From a35daeeee2f3b1711417e282d9e75b3279b48bf4 Mon Sep 17 00:00:00 2001 From: Katja Marttila Date: Thu, 2 May 2019 07:53:50 +0300 Subject: Fix install button string having a font name in French translation Task-number: QTIFW-1333 Change-Id: Ia1b055aa0360885d6ab9b3c0aa0fc7930521e040 Reviewed-by: Jani Heikkinen --- src/sdk/translations/ifw_fr.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sdk/translations/ifw_fr.ts b/src/sdk/translations/ifw_fr.ts index 22758893d..07bde6e56 100644 --- a/src/sdk/translations/ifw_fr.ts +++ b/src/sdk/translations/ifw_fr.ts @@ -1835,7 +1835,7 @@ Copiez le programme d’installation sur un disque local &Install - {&Tahoma8}&Installer + &Installer Installing %1 @@ -1901,7 +1901,7 @@ Copiez le programme d’installation sur un disque local &Install - {&Tahoma8}&Installer + &Installer Ready to Install -- cgit v1.2.3 From 9d8c368828aa42b7f05116d2fcd7ac78c0a8ba69 Mon Sep 17 00:00:00 2001 From: Arttu Tarkiainen Date: Thu, 28 Mar 2019 12:30:30 +0200 Subject: Fix long description texts not properly shown by enabling scrolling Task-number: QTIFW-1308 Change-Id: I9b20d4a4c4e169bb6b523bbf53da6fb5053ae578 Reviewed-by: Janne Anttila Reviewed-by: Katja Marttila --- src/libs/installer/componentselectionpage_p.cpp | 12 +++++++++--- src/libs/installer/componentselectionpage_p.h | 2 ++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/libs/installer/componentselectionpage_p.cpp b/src/libs/installer/componentselectionpage_p.cpp index 4e7acc837..c7ec6e0e5 100644 --- a/src/libs/installer/componentselectionpage_p.cpp +++ b/src/libs/installer/componentselectionpage_p.cpp @@ -37,6 +37,7 @@ #include #include +#include #include #include #include @@ -69,17 +70,22 @@ ComponentSelectionPagePrivate::ComponentSelectionPagePrivate(ComponentSelectionP m_descriptionVLayout = new QVBoxLayout; m_descriptionVLayout->setObjectName(QLatin1String("DescriptionLayout")); + m_descriptionScrollArea = new QScrollArea(q); + m_descriptionScrollArea->setWidgetResizable(true); + m_descriptionScrollArea->setFrameShape(QFrame::NoFrame); + m_descriptionScrollArea->setObjectName(QLatin1String("DescriptionScrollArea")); + m_descriptionLabel = new QLabel(q); m_descriptionLabel->setWordWrap(true); m_descriptionLabel->setObjectName(QLatin1String("ComponentDescriptionLabel")); - m_descriptionVLayout->addWidget(m_descriptionLabel); + m_descriptionLabel->setAlignment(Qt::AlignTop); + m_descriptionScrollArea->setWidget(m_descriptionLabel); + m_descriptionVLayout->addWidget(m_descriptionScrollArea); m_sizeLabel = new QLabel(q); m_sizeLabel->setWordWrap(true); m_sizeLabel->setObjectName(QLatin1String("ComponentSizeLabel")); m_descriptionVLayout->addWidget(m_sizeLabel); - m_descriptionVLayout->addSpacerItem(new QSpacerItem(1, 1, QSizePolicy::MinimumExpanding, - QSizePolicy::MinimumExpanding)); m_treeViewVLayout = new QVBoxLayout; m_treeViewVLayout->setObjectName(QLatin1String("TreeviewLayout")); diff --git a/src/libs/installer/componentselectionpage_p.h b/src/libs/installer/componentselectionpage_p.h index 9ebec834a..6169a06f5 100644 --- a/src/libs/installer/componentselectionpage_p.h +++ b/src/libs/installer/componentselectionpage_p.h @@ -37,6 +37,7 @@ class QTreeView; class QLabel; +class QScrollArea; class QPushButton; class QGroupBox; class QListWidgetItem; @@ -87,6 +88,7 @@ private: PackageManagerCore *m_core; QTreeView *m_treeView; QLabel *m_sizeLabel; + QScrollArea *m_descriptionScrollArea; QLabel *m_descriptionLabel; QVBoxLayout *m_descriptionVLayout; QPushButton *m_checkAll; -- cgit v1.2.3 From 3e114f631714ddf56fc0292e63ed1ee06e78e440 Mon Sep 17 00:00:00 2001 From: Arttu Tarkiainen Date: Mon, 1 Apr 2019 11:29:21 +0300 Subject: Maintenance Tool: Change text in Select Components view when selection of components is not possible Task-number: QTIFW-1241 Change-Id: Ib3e67e26b5fd4cf856c4b95f7fe542484e4955ff Reviewed-by: Janne Anttila Reviewed-by: Katja Marttila --- src/libs/installer/packagemanagercore.cpp | 22 +++++++++++++++++++--- src/libs/installer/packagemanagercore.h | 3 +++ src/libs/installer/packagemanagercore_p.h | 1 + src/libs/installer/packagemanagergui.cpp | 4 +++- 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/libs/installer/packagemanagercore.cpp b/src/libs/installer/packagemanagercore.cpp index 78198156e..4a7f42621 100644 --- a/src/libs/installer/packagemanagercore.cpp +++ b/src/libs/installer/packagemanagercore.cpp @@ -664,6 +664,22 @@ int PackageManagerCore::downloadNeededArchives(double partProgressSize) return archivesJob.numberOfDownloads(); } +/*! + Returns \c true if essential component update is found. +*/ +bool PackageManagerCore::foundEssentialUpdate() const +{ + return d->m_foundEssentialUpdate; +} + +/*! + Sets the value of \a foundEssentialUpdate, defaults \c true. +*/ +void PackageManagerCore::setFoundEssentialUpdate(bool foundEssentialUpdate) +{ + d->m_foundEssentialUpdate = foundEssentialUpdate; +} + /*! Returns \c true if a hard restart of the application is requested. */ @@ -2733,7 +2749,7 @@ bool PackageManagerCore::fetchUpdaterPackages(const PackagesList &remotes, const data.components = &components; data.installedPackages = &locals; - bool foundEssentialUpdate = false; + setFoundEssentialUpdate(false); LocalPackagesHash installedPackages = locals; QStringList replaceMes; @@ -2789,7 +2805,7 @@ bool PackageManagerCore::fetchUpdaterPackages(const PackagesList &remotes, const continue; if (update->data(scEssential, scFalse).toString().toLower() == scTrue) - foundEssentialUpdate = true; + setFoundEssentialUpdate(true); // this is not a dependency, it is a real update components.insert(name, d->m_updaterComponentsDeps.takeLast()); @@ -2840,7 +2856,7 @@ bool PackageManagerCore::fetchUpdaterPackages(const PackagesList &remotes, const } } - if (foundEssentialUpdate) { + if (foundEssentialUpdate()) { foreach (QInstaller::Component *component, components) { if (d->statusCanceledOrFailed()) return false; diff --git a/src/libs/installer/packagemanagercore.h b/src/libs/installer/packagemanagercore.h index 9f8d1a304..4fa2f2554 100644 --- a/src/libs/installer/packagemanagercore.h +++ b/src/libs/installer/packagemanagercore.h @@ -266,6 +266,9 @@ public: int downloadNeededArchives(double partProgressSize); + bool foundEssentialUpdate() const; + void setFoundEssentialUpdate(bool foundEssentialUpdate = true); + bool needsHardRestart() const; void setNeedsHardRestart(bool needsHardRestart = true); bool finishedWithSuccess() const; diff --git a/src/libs/installer/packagemanagercore_p.h b/src/libs/installer/packagemanagercore_p.h index 21ab3fc40..e0817c573 100644 --- a/src/libs/installer/packagemanagercore_p.h +++ b/src/libs/installer/packagemanagercore_p.h @@ -247,6 +247,7 @@ private: bool m_updateSourcesAdded; qint64 m_magicBinaryMarker; bool m_componentsToInstallCalculated; + bool m_foundEssentialUpdate; mutable ScriptEngine *m_componentScriptEngine; mutable ScriptEngine *m_controlScriptEngine; diff --git a/src/libs/installer/packagemanagergui.cpp b/src/libs/installer/packagemanagergui.cpp index a053e9bff..db1b99d3f 100644 --- a/src/libs/installer/packagemanagergui.cpp +++ b/src/libs/installer/packagemanagergui.cpp @@ -1898,7 +1898,8 @@ void ComponentSelectionPage::entering() QT_TR_NOOP("Please select the components you want to update."), QT_TR_NOOP("Please select the components you want to install."), QT_TR_NOOP("Please select the components you want to uninstall."), - QT_TR_NOOP("Select the components to install. Deselect installed components to uninstall them. Any components already installed will not be updated.") + QT_TR_NOOP("Select the components to install. Deselect installed components to uninstall them. Any components already installed will not be updated."), + QT_TR_NOOP("Mandatory components need to be updated first before you can select other components to update.") }; int index = 0; @@ -1906,6 +1907,7 @@ void ComponentSelectionPage::entering() if (core->isInstaller()) index = 1; if (core->isUninstaller()) index = 2; if (core->isPackageManager()) index = 3; + if (core->foundEssentialUpdate() && core->isUpdater()) index = 4; setColoredSubTitle(tr(strings[index])); d->updateTreeView(); -- cgit v1.2.3 From a499b3d85ef0a90fed7a768ee23a031ccc8e26ca Mon Sep 17 00:00:00 2001 From: Arttu Tarkiainen Date: Mon, 15 Apr 2019 12:01:15 +0300 Subject: Add fetch to the same pane with package categories Task-number: QTIFW-1284 Change-Id: Idfd81c3beb60a4dd3b6e8523c219823477eaeeb4 Reviewed-by: Janne Anttila Reviewed-by: Katja Marttila --- src/libs/installer/componentselectionpage_p.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/installer/componentselectionpage_p.cpp b/src/libs/installer/componentselectionpage_p.cpp index c7ec6e0e5..34cd1e634 100644 --- a/src/libs/installer/componentselectionpage_p.cpp +++ b/src/libs/installer/componentselectionpage_p.cpp @@ -214,9 +214,9 @@ void ComponentSelectionPagePrivate::setupCategoryLayout() checkBox->setToolTip(repository.tooltip()); categoryLayout->addWidget(checkBox); } + categoryLayout->addWidget(fetchCategoryButton); vLayout->addWidget(m_categoryGroupBox); - vLayout->addWidget(fetchCategoryButton); vLayout->addStretch(); m_mainHLayout->insertWidget(0, m_categoryWidget); } -- cgit v1.2.3 From e10545f37c318bdd5fca0b9b6e7a16a222aa52db Mon Sep 17 00:00:00 2001 From: Katja Marttila Date: Thu, 2 May 2019 13:27:36 +0300 Subject: Prepare 3.1.1 release Change-Id: I4aae0b0a95cfdb94c608001b3d636cf2c535c4f6 Reviewed-by: Jani Heikkinen --- Changelog | 8 ++++++++ dist/config/config.xml | 6 +++--- dist/packages/org.qtproject.ifw.binaries/meta/package.xml | 4 ++-- dist/packages/org.qtproject.ifw/meta/package.xml | 4 ++-- installerfw.pri | 4 ++-- 5 files changed, 17 insertions(+), 9 deletions(-) diff --git a/Changelog b/Changelog index 83b683f39..d7442c852 100644 --- a/Changelog +++ b/Changelog @@ -1,3 +1,11 @@ +3.1.1 +- Add fetch to the same pane with package categories (QTIFW-1284) +- Change text in Select Components view when selection of components is not possible (QTIFW-1241) +- Fix long description texts not properly shown by enabling scrolling (QTIFW-1308) +- Fix install button string having a font name in French translation (QTIFW-1333) +- Fix maintenancetool size (QTIFW-1322) +- Update Russian translation + 3.1.0 - Fix wizard's maximum size not to exceed screen maximum size (QTIFW-1227) - Allow maintenancetool signing in Windows (QTIFW-667) diff --git a/dist/config/config.xml b/dist/config/config.xml index 5985b88d7..412cd94bf 100644 --- a/dist/config/config.xml +++ b/dist/config/config.xml @@ -1,13 +1,13 @@ Qt Installer Framework - Qt Installer Framework 3.1.0 - 3.1.0 + Qt Installer Framework 3.1.1 + 3.1.1 Qt Project http://qt-project.org watermark.png Uninstaller - @HomeDir@/Qt/QtIFW-3.1.0 + @HomeDir@/Qt/QtIFW-3.1.1 diff --git a/dist/packages/org.qtproject.ifw.binaries/meta/package.xml b/dist/packages/org.qtproject.ifw.binaries/meta/package.xml index 08b324aab..bab942e75 100644 --- a/dist/packages/org.qtproject.ifw.binaries/meta/package.xml +++ b/dist/packages/org.qtproject.ifw.binaries/meta/package.xml @@ -2,7 +2,7 @@ Qt Installer Framework Binaries Installs the binaries, examples and help files. - 3.1.0 - 2019-01-06 + 3.1.1 + 2019-05-02 True diff --git a/dist/packages/org.qtproject.ifw/meta/package.xml b/dist/packages/org.qtproject.ifw/meta/package.xml index 40ea01b25..33f15e208 100644 --- a/dist/packages/org.qtproject.ifw/meta/package.xml +++ b/dist/packages/org.qtproject.ifw/meta/package.xml @@ -2,8 +2,8 @@ Qt Installer Framework Installs the Qt Installer Framework. - 3.1.0 - 2019-01-06 + 3.1.1 + 2019-05-02 diff --git a/installerfw.pri b/installerfw.pri index 308268690..86fcb2969 100644 --- a/installerfw.pri +++ b/installerfw.pri @@ -3,8 +3,8 @@ } IFW_PRI_INCLUDED = 1 -IFW_VERSION_STR = 3.1.0 -IFW_VERSION = 0x030100 +IFW_VERSION_STR = 3.1.1 +IFW_VERSION = 0x030101 IFW_REPOSITORY_FORMAT_VERSION = 1.0.0 IFW_NEWLINE = $$escape_expand(\\n\\t) -- cgit v1.2.3 From aba1d564ce9f087eaf164c4d0489efa15fd30ce7 Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Thu, 28 Feb 2019 13:42:36 +0100 Subject: Pass -sort-contexts when calling lconvert to keep the order for smaller diffs Change-Id: I4634d54b9bbf0d762a7274ae482f480baed6c0d2 Reviewed-by: Katja Marttila --- src/sdk/translations/translations.pro | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/sdk/translations/translations.pro b/src/sdk/translations/translations.pro index 8a77a0b44..a951a5b53 100644 --- a/src/sdk/translations/translations.pro +++ b/src/sdk/translations/translations.pro @@ -21,12 +21,13 @@ for(file, IB_ALL_TRANSLATIONS) { ts-all.commands = cd $$wd && $$LUPDATE $$lupdate_opts $$sources -ts $$IB_ALL_TRANSLATIONS QMAKE_EXTRA_TARGETS += ts-all +lconvert_options = -sort-contexts -locations none -i isEqual(QMAKE_DIR_SEP, /) { commit-ts.commands = \ cd $$wd; \ git add -N src/sdk/translations/*_??.ts && \ for f in `git diff-files --name-only src/sdk/translations/*_??.ts`; do \ - $$LCONVERT -locations none -i \$\$f -o \$\$f; \ + $$LCONVERT $$lconvert_options \$\$f -o \$\$f; \ done; \ git add src/sdk/translations/*_??.ts && git commit } else { @@ -34,7 +35,7 @@ isEqual(QMAKE_DIR_SEP, /) { cd $$wd && \ git add -N src/sdk/translations/*_??.ts && \ for /f usebackq %%f in (`git diff-files --name-only src/sdk/translations/*_??.ts`) do \ - $$LCONVERT -locations none -i %%f -o %%f $$escape_expand(\\n\\t) \ + $$LCONVERT $$lconvert_options %%f -o %%f $$escape_expand(\\n\\t) \ cd $$wd && git add src/sdk/translations/*_??.ts && git commit } QMAKE_EXTRA_TARGETS += commit-ts -- cgit v1.2.3 From 04a3e327847cb0382f0276ed16841cd3711088b8 Mon Sep 17 00:00:00 2001 From: Arttu Tarkiainen Date: Fri, 3 May 2019 13:54:38 +0300 Subject: Enable links and text selection in component description fields External links can now be included in component description by specifying a proper URL address like this: {external-link}='https://www.qt.io/'. The link fields can be placed anywhere inside package tags. Task-number: QTIFW-1292 Change-Id: I1d916a58224bdfb6e885445873bf541fad3cf834 Reviewed-by: Tarja Sundqvist Reviewed-by: Katja Marttila --- doc/installerfw.qdoc | 5 ++++- src/libs/installer/componentselectionpage_p.cpp | 13 +++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/doc/installerfw.qdoc b/doc/installerfw.qdoc index 0589c8c14..09c7e575a 100644 --- a/doc/installerfw.qdoc +++ b/doc/installerfw.qdoc @@ -585,7 +585,10 @@ Translations may be specified similarly to DisplayName tag. If a localization that matches the locale is not found and an untranslated version exists, that one will be used. Otherwise no Description will be - shown for that locale. + shown for that locale. User clickable external links, for example a component's + homepage, can be included in component description by specifying a URL + address like this: {external-link}='https://www.qt.io/'. The URL must be valid + and contain a full path to the desired resource. \row \li Version \li Version number of the component in the following format: diff --git a/src/libs/installer/componentselectionpage_p.cpp b/src/libs/installer/componentselectionpage_p.cpp index 34cd1e634..82c1b79e3 100644 --- a/src/libs/installer/componentselectionpage_p.cpp +++ b/src/libs/installer/componentselectionpage_p.cpp @@ -77,6 +77,8 @@ ComponentSelectionPagePrivate::ComponentSelectionPagePrivate(ComponentSelectionP m_descriptionLabel = new QLabel(q); m_descriptionLabel->setWordWrap(true); + m_descriptionLabel->setTextInteractionFlags(Qt::TextBrowserInteraction); + m_descriptionLabel->setOpenExternalLinks(true); m_descriptionLabel->setObjectName(QLatin1String("ComponentDescriptionLabel")); m_descriptionLabel->setAlignment(Qt::AlignTop); m_descriptionScrollArea->setWidget(m_descriptionLabel); @@ -296,8 +298,15 @@ void ComponentSelectionPagePrivate::currentSelectedChanged(const QModelIndex &cu return; m_sizeLabel->setText(QString()); - m_descriptionLabel->setText(m_currentModel->data(m_currentModel->index(current.row(), - ComponentModelHelper::NameColumn, current.parent()), Qt::ToolTipRole).toString()); + + QString description = m_currentModel->data(m_currentModel->index(current.row(), + ComponentModelHelper::NameColumn, current.parent()), Qt::ToolTipRole).toString(); + + // replace {external-link}='' fields in component description with proper link tags + description.replace(QRegularExpression(QLatin1String("{external-link}='(.*?)'")), + QLatin1String("\\1")); + + m_descriptionLabel->setText(description); Component *component = m_currentModel->componentFromIndex(current); if ((m_core->isUninstaller()) || (!component)) -- cgit v1.2.3 From 8730cb0fcfb4c224b469c29db20f9b901ac66e93 Mon Sep 17 00:00:00 2001 From: Katja Marttila Date: Wed, 8 May 2019 09:14:04 +0300 Subject: Update changelog Change-Id: Ic4d755c27cf4f6f3d076a43444f21ce2d1ecc1cd Reviewed-by: Jani Heikkinen Reviewed-by: Antti Kokko --- Changelog | 1 + 1 file changed, 1 insertion(+) diff --git a/Changelog b/Changelog index d7442c852..de43ebecc 100644 --- a/Changelog +++ b/Changelog @@ -5,6 +5,7 @@ - Fix install button string having a font name in French translation (QTIFW-1333) - Fix maintenancetool size (QTIFW-1322) - Update Russian translation +- Enable links and text selection in component description fields (QTIFW-1292) 3.1.0 - Fix wizard's maximum size not to exceed screen maximum size (QTIFW-1227) -- cgit v1.2.3 From 6ec05851a786c6bd6ab230a21e4cd6338c205f84 Mon Sep 17 00:00:00 2001 From: Kavindra Palaraja Date: Fri, 10 May 2019 08:41:51 +0200 Subject: Doc: Improve strings in the Select Components page Task-number: QTIFW-1334 Change-Id: I4ed13fd066c98e1716f3358cffef85e160a3324a Reviewed-by: Vladimir Minenko Reviewed-by: Tino Pyssysalo Reviewed-by: Paul Wicking --- src/libs/installer/componentselectionpage_p.cpp | 2 +- src/libs/installer/settings.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libs/installer/componentselectionpage_p.cpp b/src/libs/installer/componentselectionpage_p.cpp index 82c1b79e3..88ea86b8a 100644 --- a/src/libs/installer/componentselectionpage_p.cpp +++ b/src/libs/installer/componentselectionpage_p.cpp @@ -201,7 +201,7 @@ void ComponentSelectionPagePrivate::setupCategoryLayout() m_categoryGroupBox->setTitle(m_core->settings().repositoryCategoryDisplayName()); m_categoryGroupBox->setObjectName(QLatin1String("CategoryGroupBox")); QVBoxLayout *categoryLayout = new QVBoxLayout(m_categoryGroupBox); - QPushButton *fetchCategoryButton = new QPushButton(tr("Refresh")); + QPushButton *fetchCategoryButton = new QPushButton(tr("Filter")); fetchCategoryButton->setObjectName(QLatin1String("FetchCategoryButton")); connect(fetchCategoryButton, &QPushButton::clicked, this, &ComponentSelectionPagePrivate::fetchRepositoryCategories); diff --git a/src/libs/installer/settings.cpp b/src/libs/installer/settings.cpp index 21fea279a..e0c9a3970 100644 --- a/src/libs/installer/settings.cpp +++ b/src/libs/installer/settings.cpp @@ -832,7 +832,7 @@ void Settings::setSaveDefaultRepositories(bool save) QString Settings::repositoryCategoryDisplayName() const { QString displayName = d->m_data.value(QLatin1String(scRepositoryCategoryDisplayName)).toString(); - return displayName.isEmpty() ? tr("Show package categories") : displayName; + return displayName.isEmpty() ? tr("Select Package Categories") : displayName; } void Settings::setRepositoryCategoryDisplayName(const QString& name) -- cgit v1.2.3 From 9653c8607f04ab2cd741070b05f71503d32014bc Mon Sep 17 00:00:00 2001 From: Katja Marttila Date: Tue, 14 May 2019 07:43:52 +0300 Subject: Update Russian translation Change-Id: Ic8edbbd34b048d4d7b4fd034b0dddfa1e73ef8a1 Reviewed-by: Sergey Belyashov Reviewed-by: Denis Shienkov Reviewed-by: Paul Wicking --- src/sdk/translations/ifw_ru.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/sdk/translations/ifw_ru.ts b/src/sdk/translations/ifw_ru.ts index 8fc1a6741..aee59eac8 100644 --- a/src/sdk/translations/ifw_ru.ts +++ b/src/sdk/translations/ifw_ru.ts @@ -906,8 +906,8 @@ QInstaller::ComponentSelectionPagePrivate - Refresh - Обновить + Filter + Отфильтровать Error @@ -2306,8 +2306,8 @@ as a user with the appropriate rights and then clicking OK. Невозможно открыть файл настроек %1 на чтение: %2 - Show package categories - Показать категории пакетов + Select Package Categories + Выберите категории пакетов -- cgit v1.2.3 From 6ea22a1a9ef9d9be25e09740aa72bb0a5dfebfc7 Mon Sep 17 00:00:00 2001 From: Arttu Tarkiainen Date: Thu, 16 May 2019 12:06:28 +0300 Subject: Fix installer hang on Windows with empty command prompt window appearing Installer sometimes hangs on Windows with a command prompt window opening and blocking any progress. Hitting enter in this command prompt window causes progress to move forward. This blocks automated execution of tests since it requires manual interaction. parentConsole boolean was not initialized properly, fix logically broken closing actions for console. Task-number: QTIFW-1250 Change-Id: I062c0491c16c26e9435022d79f99240bf59e1a79 Reviewed-by: Katja Marttila --- src/sdk/console.h | 3 ++- src/sdk/console_win.cpp | 13 ++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/sdk/console.h b/src/sdk/console.h index 0ab6e4743..378a37e60 100644 --- a/src/sdk/console.h +++ b/src/sdk/console.h @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2017 The Qt Company Ltd. +** Copyright (C) 2019 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -44,6 +44,7 @@ public: private: bool parentConsole; + bool newConsoleCreated; std::ofstream m_newCout; std::ofstream m_newCerr; diff --git a/src/sdk/console_win.cpp b/src/sdk/console_win.cpp index f3226bc60..978159612 100644 --- a/src/sdk/console_win.cpp +++ b/src/sdk/console_win.cpp @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2017 The Qt Company Ltd. +** Copyright (C) 2019 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -74,7 +74,9 @@ static bool isRedirected(HANDLE stdHandle) */ Console::Console() : m_oldCout(nullptr), - m_oldCerr(nullptr) + m_oldCerr(nullptr), + parentConsole(false), + newConsoleCreated(false) { bool isCoutRedirected = isRedirected(GetStdHandle(STD_OUTPUT_HANDLE)); bool isCerrRedirected = isRedirected(GetStdHandle(STD_ERROR_HANDLE)); @@ -83,6 +85,7 @@ Console::Console() : // try to use parent console. else launch & set up new console parentConsole = AttachConsole(ATTACH_PARENT_PROCESS); if (!parentConsole) { + newConsoleCreated = true; AllocConsole(); HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); if (handle != INVALID_HANDLE_VALUE) { @@ -119,11 +122,11 @@ Console::Console() : Console::~Console() { - if (!parentConsole) { - system("PAUSE"); - } else { + if (parentConsole) { // simulate enter key to switch to boot prompt PostMessage(GetConsoleWindow(), WM_KEYDOWN, 0x0D, 0); + } else if (newConsoleCreated) { + system("PAUSE"); } if (m_oldCerr) -- cgit v1.2.3