Raise minimum Qt version to 5.14

This commit is contained in:
Vladimir Golovnev (Glassez) 2021-05-25 19:58:43 +03:00
parent 0c71756009
commit 97c7f3bc67
No known key found for this signature in database
GPG key ID: 52A2C7DEE2DFA6F7
35 changed files with 80 additions and 145 deletions

View file

@ -12,7 +12,7 @@ project(qBittorrent
set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON) set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON)
# version requirements - older vesions may work, but you are on your own # version requirements - older vesions may work, but you are on your own
set(minBoostVersion 1.65) set(minBoostVersion 1.65)
set(minQtVersion 5.12) set(minQtVersion 5.14)
set(minOpenSSLVersion 1.1.1) set(minOpenSSLVersion 1.1.1)
set(minLibtorrentVersion 1.2.13) set(minLibtorrentVersion 1.2.13)
set(minZlibVersion 1.2.11) set(minZlibVersion 1.2.11)

View file

@ -11,7 +11,7 @@ qBittorrent - A BitTorrent client in C++ / Qt
- OpenSSL >= 1.1.1 - OpenSSL >= 1.1.1
- Qt >= 5.12 - Qt >= 5.14
- zlib >= 1.2.11 - zlib >= 1.2.11

42
configure vendored
View file

@ -1450,7 +1450,7 @@ Some influential environment variables:
directories to add to pkg-config's search path directories to add to pkg-config's search path
PKG_CONFIG_LIBDIR PKG_CONFIG_LIBDIR
path overriding pkg-config's built-in search path path overriding pkg-config's built-in search path
QT_QMAKE value of host_bins for Qt5Core >= 5.12, overriding pkg-config QT_QMAKE value of host_bins for Qt5Core >= 5.14, overriding pkg-config
Qt5Svg_CFLAGS Qt5Svg_CFLAGS
C compiler flags for Qt5Svg, overriding pkg-config C compiler flags for Qt5Svg, overriding pkg-config
Qt5Svg_LIBS linker flags for Qt5Svg, overriding pkg-config Qt5Svg_LIBS linker flags for Qt5Svg, overriding pkg-config
@ -5456,8 +5456,8 @@ printf "%s\n" "$enable_webui" >&6; }
esac esac
if test -n "$PKG_CONFIG" && \ if test -n "$PKG_CONFIG" && \
{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"Qt5Core >= 5.12\""; } >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"Qt5Core >= 5.14\""; } >&5
($PKG_CONFIG --exists --print-errors "Qt5Core >= 5.12") 2>&5 ($PKG_CONFIG --exists --print-errors "Qt5Core >= 5.14") 2>&5
ac_status=$? ac_status=$?
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then test $ac_status = 0; }; then
@ -5466,12 +5466,12 @@ if test -n "$QT_QMAKE"; then
pkg_cv_QT_QMAKE="$QT_QMAKE" pkg_cv_QT_QMAKE="$QT_QMAKE"
elif test -n "$PKG_CONFIG"; then elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \ if test -n "$PKG_CONFIG" && \
{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"Qt5Core >= 5.12\""; } >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"Qt5Core >= 5.14\""; } >&5
($PKG_CONFIG --exists --print-errors "Qt5Core >= 5.12") 2>&5 ($PKG_CONFIG --exists --print-errors "Qt5Core >= 5.14") 2>&5
ac_status=$? ac_status=$?
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then test $ac_status = 0; }; then
pkg_cv_QT_QMAKE=`$PKG_CONFIG --variable="host_bins" "Qt5Core >= 5.12" 2>/dev/null` pkg_cv_QT_QMAKE=`$PKG_CONFIG --variable="host_bins" "Qt5Core >= 5.14" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes test "x$?" != "x0" && pkg_failed=yes
else else
pkg_failed=yes pkg_failed=yes
@ -5501,8 +5501,8 @@ fi
fi fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Qt5 qmake >= 5.12" >&5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Qt5 qmake >= 5.14" >&5
printf %s "checking for Qt5 qmake >= 5.12... " >&6; } printf %s "checking for Qt5 qmake >= 5.14... " >&6; }
if test "x$QT_QMAKE" != "x" if test "x$QT_QMAKE" != "x"
then : then :
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $QT_QMAKE" >&5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $QT_QMAKE" >&5
@ -5529,12 +5529,12 @@ if test -n "$Qt5Svg_CFLAGS"; then
pkg_cv_Qt5Svg_CFLAGS="$Qt5Svg_CFLAGS" pkg_cv_Qt5Svg_CFLAGS="$Qt5Svg_CFLAGS"
elif test -n "$PKG_CONFIG"; then elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \ if test -n "$PKG_CONFIG" && \
{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"Qt5Svg >= 5.12\""; } >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"Qt5Svg >= 5.14\""; } >&5
($PKG_CONFIG --exists --print-errors "Qt5Svg >= 5.12") 2>&5 ($PKG_CONFIG --exists --print-errors "Qt5Svg >= 5.14") 2>&5
ac_status=$? ac_status=$?
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then test $ac_status = 0; }; then
pkg_cv_Qt5Svg_CFLAGS=`$PKG_CONFIG --cflags "Qt5Svg >= 5.12" 2>/dev/null` pkg_cv_Qt5Svg_CFLAGS=`$PKG_CONFIG --cflags "Qt5Svg >= 5.14" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes test "x$?" != "x0" && pkg_failed=yes
else else
pkg_failed=yes pkg_failed=yes
@ -5546,12 +5546,12 @@ if test -n "$Qt5Svg_LIBS"; then
pkg_cv_Qt5Svg_LIBS="$Qt5Svg_LIBS" pkg_cv_Qt5Svg_LIBS="$Qt5Svg_LIBS"
elif test -n "$PKG_CONFIG"; then elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \ if test -n "$PKG_CONFIG" && \
{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"Qt5Svg >= 5.12\""; } >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"Qt5Svg >= 5.14\""; } >&5
($PKG_CONFIG --exists --print-errors "Qt5Svg >= 5.12") 2>&5 ($PKG_CONFIG --exists --print-errors "Qt5Svg >= 5.14") 2>&5
ac_status=$? ac_status=$?
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then test $ac_status = 0; }; then
pkg_cv_Qt5Svg_LIBS=`$PKG_CONFIG --libs "Qt5Svg >= 5.12" 2>/dev/null` pkg_cv_Qt5Svg_LIBS=`$PKG_CONFIG --libs "Qt5Svg >= 5.14" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes test "x$?" != "x0" && pkg_failed=yes
else else
pkg_failed=yes pkg_failed=yes
@ -5572,14 +5572,14 @@ else
_pkg_short_errors_supported=no _pkg_short_errors_supported=no
fi fi
if test $_pkg_short_errors_supported = yes; then if test $_pkg_short_errors_supported = yes; then
Qt5Svg_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "Qt5Svg >= 5.12" 2>&1` Qt5Svg_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "Qt5Svg >= 5.14" 2>&1`
else else
Qt5Svg_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "Qt5Svg >= 5.12" 2>&1` Qt5Svg_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "Qt5Svg >= 5.14" 2>&1`
fi fi
# Put the nasty error message in config.log where it belongs # Put the nasty error message in config.log where it belongs
echo "$Qt5Svg_PKG_ERRORS" >&5 echo "$Qt5Svg_PKG_ERRORS" >&5
as_fn_error $? "Package requirements (Qt5Svg >= 5.12) were not met: as_fn_error $? "Package requirements (Qt5Svg >= 5.14) were not met:
$Qt5Svg_PKG_ERRORS $Qt5Svg_PKG_ERRORS
@ -5619,11 +5619,11 @@ case "x$enable_qt_dbus" in #(
"xyes") : "xyes") :
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
printf "%s\n" "yes" >&6; } printf "%s\n" "yes" >&6; }
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Qt5DBus >= 5.12" >&5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Qt5DBus >= 5.14" >&5
printf %s "checking for Qt5DBus >= 5.12... " >&6; } printf %s "checking for Qt5DBus >= 5.14... " >&6; }
if test -n "$PKG_CONFIG" && \ if test -n "$PKG_CONFIG" && \
{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"Qt5DBus >= 5.12\""; } >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"Qt5DBus >= 5.14\""; } >&5
($PKG_CONFIG --exists --print-errors "Qt5DBus >= 5.12") 2>&5 ($PKG_CONFIG --exists --print-errors "Qt5DBus >= 5.14") 2>&5
ac_status=$? ac_status=$?
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then test $ac_status = 0; }; then

View file

@ -141,7 +141,7 @@ AS_IF([test "x$QT_QMAKE" = "x"],
[AC_MSG_ERROR([Could not find qmake]) [AC_MSG_ERROR([Could not find qmake])
]) ])
AS_IF([test "x$enable_gui" = "xyes"], AS_IF([test "x$enable_gui" = "xyes"],
[PKG_CHECK_MODULES(Qt5Svg, [Qt5Svg >= 5.12]) [PKG_CHECK_MODULES(Qt5Svg, [Qt5Svg >= 5.14])
]) ])
AC_MSG_CHECKING([whether QtDBus should be enabled]) AC_MSG_CHECKING([whether QtDBus should be enabled])
AS_CASE(["x$enable_qt_dbus"], AS_CASE(["x$enable_qt_dbus"],

View file

@ -5,9 +5,9 @@
# Sets the QT_QMAKE variable to the path of Qt5 qmake if found. # Sets the QT_QMAKE variable to the path of Qt5 qmake if found.
# -------------------------------------- # --------------------------------------
AC_DEFUN([FIND_QT5], AC_DEFUN([FIND_QT5],
[PKG_CHECK_EXISTS([Qt5Core >= 5.12], [PKG_CHECK_EXISTS([Qt5Core >= 5.14],
[PKG_CHECK_VAR(QT_QMAKE, [PKG_CHECK_VAR(QT_QMAKE,
[Qt5Core >= 5.12], [Qt5Core >= 5.14],
[host_bins]) [host_bins])
]) ])
@ -18,7 +18,7 @@ AS_IF([test -f "$QT_QMAKE/qmake"],
[QT_QMAKE=""]) [QT_QMAKE=""])
]) ])
AC_MSG_CHECKING([for Qt5 qmake >= 5.12]) AC_MSG_CHECKING([for Qt5 qmake >= 5.14])
AS_IF([test "x$QT_QMAKE" != "x"], AS_IF([test "x$QT_QMAKE" != "x"],
[AC_MSG_RESULT([$QT_QMAKE])], [AC_MSG_RESULT([$QT_QMAKE])],
[AC_MSG_RESULT([not found])] [AC_MSG_RESULT([not found])]
@ -29,8 +29,8 @@ AS_IF([test "x$QT_QMAKE" != "x"],
# Sets the HAVE_QTDBUS variable to true or false. # Sets the HAVE_QTDBUS variable to true or false.
# -------------------------------------- # --------------------------------------
AC_DEFUN([FIND_QTDBUS], AC_DEFUN([FIND_QTDBUS],
[AC_MSG_CHECKING([for Qt5DBus >= 5.12]) [AC_MSG_CHECKING([for Qt5DBus >= 5.14])
PKG_CHECK_EXISTS([Qt5DBus >= 5.12], PKG_CHECK_EXISTS([Qt5DBus >= 5.14],
[AC_MSG_RESULT([found]) [AC_MSG_RESULT([found])
HAVE_QTDBUS=[true]], HAVE_QTDBUS=[true]],
[AC_MSG_RESULT([not found]) [AC_MSG_RESULT([not found])

View file

@ -139,11 +139,7 @@ endif()
if (GUI) if (GUI)
target_link_libraries(qbt_app PRIVATE qbt_gui) target_link_libraries(qbt_app PRIVATE qbt_gui)
if ((CMAKE_SYSTEM_NAME STREQUAL "Windows") OR (CMAKE_SYSTEM_NAME STREQUAL "Darwin")) if ((CMAKE_SYSTEM_NAME STREQUAL "Windows") OR (CMAKE_SYSTEM_NAME STREQUAL "Darwin"))
if (Qt5_VERSION VERSION_LESS 5.14) qt_import_plugins(qbt_app INCLUDE Qt5::QSvgIconPlugin Qt5::QSvgPlugin)
set_property(TARGET qbt_app APPEND PROPERTY QT_PLUGINS Qt5::QSvgIconPlugin Qt5::QSvgPlugin)
else()
qt_import_plugins(qbt_app INCLUDE Qt5::QSvgIconPlugin Qt5::QSvgPlugin)
endif()
endif() endif()
endif() endif()

View file

@ -302,7 +302,7 @@ void Application::setFileLoggerAgeType(const int value)
void Application::processMessage(const QString &message) void Application::processMessage(const QString &message)
{ {
const QStringList params = message.split(PARAMS_SEPARATOR, QString::SkipEmptyParts); const QStringList params = message.split(PARAMS_SEPARATOR, Qt::SkipEmptyParts);
// If Application is not running (i.e., other // If Application is not running (i.e., other
// components are not ready) store params // components are not ready) store params
if (m_running) if (m_running)

View file

@ -134,7 +134,7 @@ int main(int argc, char *argv[])
// We must save it here because QApplication constructor may change it // We must save it here because QApplication constructor may change it
bool isOneArg = (argc == 2); bool isOneArg = (argc == 2);
#if !defined(DISABLE_GUI) && (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)) #if !defined(DISABLE_GUI)
// Attribute Qt::AA_EnableHighDpiScaling must be set before QCoreApplication is created // Attribute Qt::AA_EnableHighDpiScaling must be set before QCoreApplication is created
if (qgetenv("QT_ENABLE_HIGHDPI_SCALING").isEmpty() && qgetenv("QT_AUTO_SCREEN_SCALE_FACTOR").isEmpty()) if (qgetenv("QT_ENABLE_HIGHDPI_SCALING").isEmpty() && qgetenv("QT_AUTO_SCREEN_SCALE_FACTOR").isEmpty())
Application::setAttribute(Qt::AA_EnableHighDpiScaling, true); Application::setAttribute(Qt::AA_EnableHighDpiScaling, true);

View file

@ -479,7 +479,8 @@ Session::Session(QObject *parent)
m_storedCategories = map_cast(m_categories); m_storedCategories = map_cast(m_categories);
} }
m_tags = List::toSet(m_storedTags.get()); const QStringList storedTags = m_storedTags.get();
m_tags = {storedTags.cbegin(), storedTags.cend()};
enqueueRefresh(); enqueueRefresh();
updateSeedingLimitTimer(); updateSeedingLimitTimer();

View file

@ -1252,7 +1252,7 @@ QVector<int> TorrentImpl::pieceAvailability() const
std::vector<int> avail; std::vector<int> avail;
m_nativeHandle.piece_availability(avail); m_nativeHandle.piece_availability(avail);
return Vector::fromStdVector(avail); return {avail.cbegin(), avail.cend()};
} }
qreal TorrentImpl::distributedCopies() const qreal TorrentImpl::distributedCopies() const
@ -1857,9 +1857,9 @@ void TorrentImpl::handleFileRenamedAlert(const lt::file_renamed_alert *p)
if (m_oldPath[p->index].isEmpty()) if (m_oldPath[p->index].isEmpty())
m_oldPath.remove(p->index); m_oldPath.remove(p->index);
QVector<QStringRef> oldPathParts = oldFilePath.splitRef('/', QString::SkipEmptyParts); QVector<QStringRef> oldPathParts = oldFilePath.splitRef('/', Qt::SkipEmptyParts);
oldPathParts.removeLast(); // drop file name part oldPathParts.removeLast(); // drop file name part
QVector<QStringRef> newPathParts = newFilePath.splitRef('/', QString::SkipEmptyParts); QVector<QStringRef> newPathParts = newFilePath.splitRef('/', Qt::SkipEmptyParts);
newPathParts.removeLast(); // drop file name part newPathParts.removeLast(); // drop file name part
#if defined(Q_OS_WIN) #if defined(Q_OS_WIN)

View file

@ -35,44 +35,16 @@
#define QBT_APP_64BIT #define QBT_APP_64BIT
#endif #endif
const char C_TORRENT_FILE_EXTENSION[] = ".torrent"; inline const char C_TORRENT_FILE_EXTENSION[] = ".torrent";
const int MAX_TORRENT_SIZE = 100 * 1024 * 1024; // 100 MiB inline const int MAX_TORRENT_SIZE = 100 * 1024 * 1024; // 100 MiB
template <typename T> template <typename T>
constexpr typename std::add_const<T>::type &asConst(T &t) noexcept { return t; } constexpr typename std::add_const_t<T> &asConst(T &t) noexcept { return t; }
// Forward rvalue as const // Forward rvalue as const
template <typename T> template <typename T>
constexpr typename std::add_const<T>::type asConst(T &&t) noexcept { return std::move(t); } constexpr typename std::add_const_t<T> asConst(T &&t) noexcept { return std::move(t); }
// Prevent const rvalue arguments // Prevent const rvalue arguments
template <typename T> template <typename T>
void asConst(const T &&) = delete; void asConst(const T &&) = delete;
namespace List
{
// Replacement for the deprecated`QSet<T> QSet::fromList(const QList<T> &list)`
template <typename T>
QSet<T> toSet(const QList<T> &list)
{
#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
return {list.cbegin(), list.cend()};
#else
return QSet<T>::fromList(list);
#endif
}
}
namespace Vector
{
// Replacement for the deprecated `QVector<T> QVector::fromStdVector(const std::vector<T> &vector)`
template <typename T>
QVector<T> fromStdVector(const std::vector<T> &vector)
{
#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
return {vector.cbegin(), vector.cend()};
#else
return QVector<T>::fromStdVector(vector);
#endif
}
}

View file

@ -161,7 +161,7 @@ bool Connection::acceptsGzipEncoding(QString codings)
return false; return false;
}; };
const QVector<QStringRef> list = codings.remove(' ').remove('\t').splitRef(',', QString::SkipEmptyParts); const QVector<QStringRef> list = codings.remove(' ').remove('\t').splitRef(',', Qt::SkipEmptyParts);
if (list.isEmpty()) if (list.isEmpty())
return false; return false;

View file

@ -148,7 +148,7 @@ RequestParser::ParseResult RequestParser::doParse(const QByteArray &data)
bool RequestParser::parseStartLines(const QString &data) bool RequestParser::parseStartLines(const QString &data)
{ {
// we don't handle malformed request which uses `LF` for newline // we don't handle malformed request which uses `LF` for newline
const QVector<QStringRef> lines = data.splitRef(CRLF, QString::SkipEmptyParts); const QVector<QStringRef> lines = data.splitRef(CRLF, Qt::SkipEmptyParts);
// [rfc7230] 3.2.2. Field Order // [rfc7230] 3.2.2. Field Order
QStringList requestLines; QStringList requestLines;
@ -276,7 +276,7 @@ bool RequestParser::parsePostMessage(const QByteArray &data)
// split data by "dash-boundary" // split data by "dash-boundary"
const QByteArray dashDelimiter = QByteArray("--") + delimiter + CRLF; const QByteArray dashDelimiter = QByteArray("--") + delimiter + CRLF;
QVector<QByteArray> multipart = splitToViews(data, dashDelimiter, QString::SkipEmptyParts); QVector<QByteArray> multipart = splitToViews(data, dashDelimiter, Qt::SkipEmptyParts);
if (multipart.isEmpty()) if (multipart.isEmpty())
{ {
qWarning() << Q_FUNC_INFO << "multipart empty"; qWarning() << Q_FUNC_INFO << "multipart empty";
@ -299,7 +299,7 @@ bool RequestParser::parsePostMessage(const QByteArray &data)
bool RequestParser::parseFormData(const QByteArray &data) bool RequestParser::parseFormData(const QByteArray &data)
{ {
const QVector<QByteArray> list = splitToViews(data, EOH, QString::KeepEmptyParts); const QVector<QByteArray> list = splitToViews(data, EOH, Qt::KeepEmptyParts);
if (list.size() != 2) if (list.size() != 2)
{ {
@ -311,13 +311,13 @@ bool RequestParser::parseFormData(const QByteArray &data)
const QByteArray payload = viewWithoutEndingWith(list[1], CRLF); const QByteArray payload = viewWithoutEndingWith(list[1], CRLF);
HeaderMap headersMap; HeaderMap headersMap;
const QVector<QStringRef> headerLines = headers.splitRef(CRLF, QString::SkipEmptyParts); const QVector<QStringRef> headerLines = headers.splitRef(CRLF, Qt::SkipEmptyParts);
for (const auto &line : headerLines) for (const auto &line : headerLines)
{ {
if (line.trimmed().startsWith(HEADER_CONTENT_DISPOSITION, Qt::CaseInsensitive)) if (line.trimmed().startsWith(HEADER_CONTENT_DISPOSITION, Qt::CaseInsensitive))
{ {
// extract out filename & name // extract out filename & name
const QVector<QStringRef> directives = line.split(';', QString::SkipEmptyParts); const QVector<QStringRef> directives = line.split(';', Qt::SkipEmptyParts);
for (const auto &directive : directives) for (const auto &directive : directives)
{ {

View file

@ -456,7 +456,7 @@ void Smtp::authenticate()
// AUTH extension is supported, check which // AUTH extension is supported, check which
// authentication modes are supported by // authentication modes are supported by
// the server // the server
const QStringList auth = m_extensions["AUTH"].toUpper().split(' ', QString::SkipEmptyParts); const QStringList auth = m_extensions["AUTH"].toUpper().split(' ', Qt::SkipEmptyParts);
if (auth.contains("CRAM-MD5")) if (auth.contains("CRAM-MD5"))
{ {
qDebug() << "Using CRAM-MD5 authentication..."; qDebug() << "Using CRAM-MD5 authentication...";

View file

@ -238,7 +238,7 @@ bool AutoDownloadRule::matchesExpression(const QString &articleTitle, const QStr
// Only match if every wildcard token (separated by spaces) is present in the article name. // Only match if every wildcard token (separated by spaces) is present in the article name.
// Order of wildcard tokens is unimportant (if order is important, they should have used *). // Order of wildcard tokens is unimportant (if order is important, they should have used *).
const QStringList wildcards {expression.split(whitespace, QString::SplitBehavior::SkipEmptyParts)}; const QStringList wildcards {expression.split(whitespace, Qt::SkipEmptyParts)};
for (const QString &wildcard : wildcards) for (const QString &wildcard : wildcards)
{ {
const QRegularExpression reg {cachedRegex(wildcard, false)}; const QRegularExpression reg {cachedRegex(wildcard, false)};

View file

@ -516,14 +516,14 @@ void SearchPluginManager::parseVersionInfo(const QByteArray &info)
QHash<QString, PluginVersion> updateInfo; QHash<QString, PluginVersion> updateInfo;
int numCorrectData = 0; int numCorrectData = 0;
const QVector<QByteArray> lines = Utils::ByteArray::splitToViews(info, "\n", QString::SkipEmptyParts); const QVector<QByteArray> lines = Utils::ByteArray::splitToViews(info, "\n", Qt::SkipEmptyParts);
for (QByteArray line : lines) for (QByteArray line : lines)
{ {
line = line.trimmed(); line = line.trimmed();
if (line.isEmpty()) continue; if (line.isEmpty()) continue;
if (line.startsWith('#')) continue; if (line.startsWith('#')) continue;
const QVector<QByteArray> list = Utils::ByteArray::splitToViews(line, ":", QString::SkipEmptyParts); const QVector<QByteArray> list = Utils::ByteArray::splitToViews(line, ":", Qt::SkipEmptyParts);
if (list.size() != 2) continue; if (list.size() != 2) continue;
const QString pluginName = list.first().trimmed(); const QString pluginName = list.first().trimmed();

View file

@ -31,13 +31,13 @@
#include <QByteArray> #include <QByteArray>
#include <QVector> #include <QVector>
QVector<QByteArray> Utils::ByteArray::splitToViews(const QByteArray &in, const QByteArray &sep, const QString::SplitBehavior behavior) QVector<QByteArray> Utils::ByteArray::splitToViews(const QByteArray &in, const QByteArray &sep, const Qt::SplitBehavior behavior)
{ {
if (sep.isEmpty()) if (sep.isEmpty())
return {in}; return {in};
QVector<QByteArray> ret; QVector<QByteArray> ret;
ret.reserve((behavior == QString::KeepEmptyParts) ret.reserve((behavior == Qt::KeepEmptyParts)
? (1 + (in.size() / sep.size())) ? (1 + (in.size() / sep.size()))
: (1 + (in.size() / (sep.size() + 1)))); : (1 + (in.size() / (sep.size() + 1))));
int head = 0; int head = 0;
@ -49,7 +49,7 @@ QVector<QByteArray> Utils::ByteArray::splitToViews(const QByteArray &in, const Q
// omit empty parts // omit empty parts
const QByteArray part = QByteArray::fromRawData((in.constData() + head), (end - head)); const QByteArray part = QByteArray::fromRawData((in.constData() + head), (end - head));
if (!part.isEmpty() || (behavior == QString::KeepEmptyParts)) if (!part.isEmpty() || (behavior == Qt::KeepEmptyParts))
ret += part; ret += part;
head = end + sep.size(); head = end + sep.size();

View file

@ -36,7 +36,7 @@ class QByteArray;
namespace Utils::ByteArray namespace Utils::ByteArray
{ {
// Mimic QString::splitRef(sep, behavior) // Mimic QString::splitRef(sep, behavior)
QVector<QByteArray> splitToViews(const QByteArray &in, const QByteArray &sep, const QString::SplitBehavior behavior = QString::KeepEmptyParts); QVector<QByteArray> splitToViews(const QByteArray &in, const QByteArray &sep, const Qt::SplitBehavior behavior = Qt::KeepEmptyParts);
// Mimic QByteArray::mid(pos, len) but instead of returning a full-copy, // Mimic QByteArray::mid(pos, len) but instead of returning a full-copy,
// we only return a partial view // we only return a partial view

View file

@ -63,7 +63,7 @@ namespace
// Software 'Anaconda' installs its own python interpreter // Software 'Anaconda' installs its own python interpreter
// and `python --version` returns a string like this: // and `python --version` returns a string like this:
// "Python 3.4.3 :: Anaconda 2.3.0 (64-bit)" // "Python 3.4.3 :: Anaconda 2.3.0 (64-bit)"
const QVector<QByteArray> outputSplit = Utils::ByteArray::splitToViews(procOutput, " ", QString::SkipEmptyParts); const QVector<QByteArray> outputSplit = Utils::ByteArray::splitToViews(procOutput, " ", Qt::SkipEmptyParts);
if (outputSplit.size() <= 1) if (outputSplit.size() <= 1)
return false; return false;

View file

@ -498,7 +498,7 @@ QString Utils::Misc::opensslVersionString()
#else #else
static const auto version {QString::fromLatin1(SSLeay_version(SSLEAY_VERSION))}; static const auto version {QString::fromLatin1(SSLeay_version(SSLEAY_VERSION))};
#endif #endif
return version.splitRef(' ', QString::SkipEmptyParts)[1].toString(); return version.splitRef(' ', Qt::SkipEmptyParts)[1].toString();
} }
QString Utils::Misc::zlibVersionString() QString Utils::Misc::zlibVersionString()

View file

@ -99,7 +99,7 @@ bool Utils::Password::PBKDF2::verify(const QByteArray &secret, const QString &pa
bool Utils::Password::PBKDF2::verify(const QByteArray &secret, const QByteArray &password) bool Utils::Password::PBKDF2::verify(const QByteArray &secret, const QByteArray &password)
{ {
const QVector<QByteArray> list = ByteArray::splitToViews(secret, ":", QString::SkipEmptyParts); const QVector<QByteArray> list = ByteArray::splitToViews(secret, ":", Qt::SkipEmptyParts);
if (list.size() != 2) if (list.size() != 2)
return false; return false;

View file

@ -241,7 +241,7 @@ void FileSystemPathEdit::setFileNameFilter(const QString &val)
} }
else else
{ {
QStringList filters = filterString.split(QLatin1Char(' '), QString::SkipEmptyParts); QStringList filters = filterString.split(QLatin1Char(' '), Qt::SkipEmptyParts);
d->m_editor->setFilenameFilters(filters); d->m_editor->setFilenameFilters(filters);
} }
} }

View file

@ -107,7 +107,7 @@ QValidator::State Private::FileSystemPathValidator::validate(QString &input, int
// we test path components from beginning to the one with cursor location in strict mode // we test path components from beginning to the one with cursor location in strict mode
// and the one with cursor and beyond in non-strict mode // and the one with cursor and beyond in non-strict mode
QVector<QStringRef> components = input.splitRef(QDir::separator(), QString::KeepEmptyParts); QVector<QStringRef> components = input.splitRef(QDir::separator(), Qt::KeepEmptyParts);
// find index of the component that contains pos // find index of the component that contains pos
int componentWithCursorIndex = 0; int componentWithCursorIndex = 0;
int pathLength = 0; int pathLength = 0;

View file

@ -1154,7 +1154,7 @@ void MainWindow::keyPressEvent(QKeyEvent *event)
if (mimeData->hasText()) if (mimeData->hasText())
{ {
const bool useTorrentAdditionDialog {AddNewTorrentDialog::isEnabled()}; const bool useTorrentAdditionDialog {AddNewTorrentDialog::isEnabled()};
const QStringList lines {mimeData->text().split('\n', QString::SkipEmptyParts)}; const QStringList lines {mimeData->text().split('\n', Qt::SkipEmptyParts)};
for (QString line : lines) for (QString line : lines)
{ {

View file

@ -718,7 +718,7 @@ void OptionsDialog::saveOptions()
RSS::Session::instance()->setMaxArticlesPerFeed(m_ui->spinRSSMaxArticlesPerFeed->value()); RSS::Session::instance()->setMaxArticlesPerFeed(m_ui->spinRSSMaxArticlesPerFeed->value());
RSS::Session::instance()->setProcessingEnabled(m_ui->checkRSSEnable->isChecked()); RSS::Session::instance()->setProcessingEnabled(m_ui->checkRSSEnable->isChecked());
RSS::AutoDownloader::instance()->setProcessingEnabled(m_ui->checkRSSAutoDownloaderEnable->isChecked()); RSS::AutoDownloader::instance()->setProcessingEnabled(m_ui->checkRSSAutoDownloaderEnable->isChecked());
RSS::AutoDownloader::instance()->setSmartEpisodeFilters(m_ui->textSmartEpisodeFilters->toPlainText().split('\n', QString::SplitBehavior::SkipEmptyParts)); RSS::AutoDownloader::instance()->setSmartEpisodeFilters(m_ui->textSmartEpisodeFilters->toPlainText().split('\n', Qt::SkipEmptyParts));
RSS::AutoDownloader::instance()->setDownloadRepacks(m_ui->checkSmartFilterDownloadRepacks->isChecked()); RSS::AutoDownloader::instance()->setDownloadRepacks(m_ui->checkSmartFilterDownloadRepacks->isChecked());
auto session = BitTorrent::Session::instance(); auto session = BitTorrent::Session::instance();

View file

@ -502,15 +502,9 @@ void PeerListWidget::wheelEvent(QWheelEvent *event)
{ {
// Shift + scroll = horizontal scroll // Shift + scroll = horizontal scroll
event->accept(); event->accept();
#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
QWheelEvent scrollHEvent(event->position(), event->globalPosition() QWheelEvent scrollHEvent(event->position(), event->globalPosition()
, event->pixelDelta(), event->angleDelta().transposed(), event->buttons() , event->pixelDelta(), event->angleDelta().transposed(), event->buttons()
, event->modifiers(), event->phase(), event->inverted(), event->source()); , event->modifiers(), event->phase(), event->inverted(), event->source());
#else
QWheelEvent scrollHEvent(event->pos(), event->globalPos()
, event->delta(), event->buttons(), event->modifiers(), Qt::Horizontal);
#endif
QTreeView::wheelEvent(&scrollHEvent); QTreeView::wheelEvent(&scrollHEvent);
return; return;
} }

View file

@ -59,7 +59,7 @@ void SearchSortModel::setNameFilter(const QString &searchTerm)
} }
else else
{ {
m_searchTermWords = searchTerm.split(QLatin1Char(' '), QString::SkipEmptyParts); m_searchTermWords = searchTerm.split(QLatin1Char(' '), Qt::SkipEmptyParts);
} }
} }

View file

@ -503,7 +503,7 @@ void TorrentContentModel::setupModelData(const BitTorrent::TorrentInfo &info)
const QString path = Utils::Fs::toUniformPath(info.filePath(i)); const QString path = Utils::Fs::toUniformPath(info.filePath(i));
// Iterate of parts of the path to create necessary folders // Iterate of parts of the path to create necessary folders
QVector<QStringRef> pathFolders = path.splitRef('/', QString::SkipEmptyParts); QVector<QStringRef> pathFolders = path.splitRef('/', Qt::SkipEmptyParts);
pathFolders.removeLast(); pathFolders.removeLast();
for (const QStringRef &pathPartRef : asConst(pathFolders)) for (const QStringRef &pathPartRef : asConst(pathFolders))

View file

@ -212,7 +212,7 @@ void TorrentCreatorDialog::onCreateButtonClicked()
, m_ui->txtComment->toPlainText() , m_ui->txtComment->toPlainText()
, m_ui->lineEditSource->text() , m_ui->lineEditSource->text()
, trackers , trackers
, m_ui->URLSeedsList->toPlainText().split('\n', QString::SkipEmptyParts) , m_ui->URLSeedsList->toPlainText().split('\n', Qt::SkipEmptyParts)
}; };
// run the creator thread // run the creator thread

View file

@ -632,9 +632,9 @@ QSet<BitTorrent::TorrentID> TrackerFiltersList::getTorrentIDs(const int row) con
case TRACKERLESS_ROW: case TRACKERLESS_ROW:
return m_trackers.value(NULL_HOST); return m_trackers.value(NULL_HOST);
case ERROR_ROW: case ERROR_ROW:
return List::toSet(m_errors.keys()); return {m_errors.keyBegin(), m_errors.keyEnd()};
case WARNING_ROW: case WARNING_ROW:
return List::toSet(m_warnings.keys()); return {m_warnings.keyBegin(), m_warnings.keyEnd()};
default: default:
return m_trackers.value(trackerFromRow(row)); return m_trackers.value(trackerFromRow(row));
} }

View file

@ -721,7 +721,7 @@ QStringList TransferListWidget::askTagsForSelection(const QString &dialogTitle)
this, dialogTitle, tr("Comma-separated tags:"), QLineEdit::Normal, "", &ok).trimmed(); this, dialogTitle, tr("Comma-separated tags:"), QLineEdit::Normal, "", &ok).trimmed();
if (!ok || tagsInput.isEmpty()) if (!ok || tagsInput.isEmpty())
return {}; return {};
tags = tagsInput.split(',', QString::SkipEmptyParts); tags = tagsInput.split(',', Qt::SkipEmptyParts);
for (QString &tag : tags) for (QString &tag : tags)
{ {
tag = tag.trimmed(); tag = tag.trimmed();
@ -1163,15 +1163,9 @@ void TransferListWidget::wheelEvent(QWheelEvent *event)
{ {
// Shift + scroll = horizontal scroll // Shift + scroll = horizontal scroll
event->accept(); event->accept();
#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
QWheelEvent scrollHEvent(event->position(), event->globalPosition() QWheelEvent scrollHEvent(event->position(), event->globalPosition()
, event->pixelDelta(), event->angleDelta().transposed(), event->buttons() , event->pixelDelta(), event->angleDelta().transposed(), event->buttons()
, event->modifiers(), event->phase(), event->inverted(), event->source()); , event->modifiers(), event->phase(), event->inverted(), event->source());
#else
QWheelEvent scrollHEvent(event->pos(), event->globalPos()
, event->delta(), event->buttons(), event->modifiers(), Qt::Horizontal);
#endif
QTreeView::wheelEvent(&scrollHEvent); QTreeView::wheelEvent(&scrollHEvent);
return; return;
} }

View file

@ -48,10 +48,6 @@
#include <QWidget> #include <QWidget>
#include <QWindow> #include <QWindow>
#if (QT_VERSION < QT_VERSION_CHECK(5, 14, 0)) && defined(Q_OS_WIN)
#include <QDesktopWidget>
#endif
#include "base/utils/fs.h" #include "base/utils/fs.h"
#include "base/utils/version.h" #include "base/utils/version.h"
@ -65,26 +61,8 @@ void Utils::Gui::resize(QWidget *widget, const QSize &newSize)
qreal Utils::Gui::screenScalingFactor(const QWidget *widget) qreal Utils::Gui::screenScalingFactor(const QWidget *widget)
{ {
#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
Q_UNUSED(widget); Q_UNUSED(widget);
return 1; return 1;
#else
if (!widget)
return 1;
#ifdef Q_OS_WIN
const int screenNumber = qApp->desktop()->screenNumber(widget);
const QScreen *screen = QApplication::screens()[screenNumber];
// Workaround for QScreen::physicalDotsPerInch() that could return
// values that are smaller than the normal 96 DPI on Windows
const qreal physicalDPI = qMax<qreal>(screen->physicalDotsPerInch(), 96);
return (screen->logicalDotsPerInch() / physicalDPI);
#elif defined(Q_OS_MACOS)
return 1;
#else
return widget->devicePixelRatioF();
#endif // Q_OS_WIN
#endif // QT_VERSION
} }
QPixmap Utils::Gui::scaledPixmap(const QIcon &icon, const QWidget *widget, const int height) QPixmap Utils::Gui::scaledPixmap(const QIcon &icon, const QWidget *widget, const int height)

View file

@ -523,7 +523,7 @@ void AppController::setPreferencesAction()
if (hasKey("ip_filter_trackers")) if (hasKey("ip_filter_trackers"))
session->setTrackerFilteringEnabled(it.value().toBool()); session->setTrackerFilteringEnabled(it.value().toBool());
if (hasKey("banned_IPs")) if (hasKey("banned_IPs"))
session->setBannedIPs(it.value().toString().split('\n', QString::SkipEmptyParts)); session->setBannedIPs(it.value().toString().split('\n', Qt::SkipEmptyParts));
// Speed // Speed
// Global Rate Limits // Global Rate Limits
@ -653,7 +653,7 @@ void AppController::setPreferencesAction()
if (hasKey("bypass_auth_subnet_whitelist")) if (hasKey("bypass_auth_subnet_whitelist"))
{ {
// recognize new lines and commas as delimiters // recognize new lines and commas as delimiters
pref->setWebUiAuthSubnetWhitelist(it.value().toString().split(QRegularExpression("\n|,"), QString::SkipEmptyParts)); pref->setWebUiAuthSubnetWhitelist(it.value().toString().split(QRegularExpression("\n|,"), Qt::SkipEmptyParts));
} }
if (hasKey("web_ui_max_auth_fail_count")) if (hasKey("web_ui_max_auth_fail_count"))
pref->setWebUIMaxAuthFailCount(it.value().toInt()); pref->setWebUIMaxAuthFailCount(it.value().toInt());

View file

@ -259,7 +259,7 @@ void TorrentsController::infoAction()
const bool reverse {parseBool(params()["reverse"]).value_or(false)}; const bool reverse {parseBool(params()["reverse"]).value_or(false)};
int limit {params()["limit"].toInt()}; int limit {params()["limit"].toInt()};
int offset {params()["offset"].toInt()}; int offset {params()["offset"].toInt()};
const QStringList hashes {params()["hashes"].split('|', QString::SkipEmptyParts)}; const QStringList hashes {params()["hashes"].split('|', Qt::SkipEmptyParts)};
TorrentIDSet idSet; TorrentIDSet idSet;
for (const QString &hash : hashes) for (const QString &hash : hashes)
@ -637,7 +637,7 @@ void TorrentsController::addAction()
const std::optional<bool> addPaused = parseBool(params()["paused"]); const std::optional<bool> addPaused = parseBool(params()["paused"]);
const QString savepath = params()["savepath"].trimmed(); const QString savepath = params()["savepath"].trimmed();
const QString category = params()["category"]; const QString category = params()["category"];
const QStringList tags = params()["tags"].split(',', QString::SkipEmptyParts); const QStringList tags = params()["tags"].split(',', Qt::SkipEmptyParts);
const QString torrentName = params()["rename"].trimmed(); const QString torrentName = params()["rename"].trimmed();
const int upLimit = parseInt(params()["upLimit"]).value_or(-1); const int upLimit = parseInt(params()["upLimit"]).value_or(-1);
const int dlLimit = parseInt(params()["dlLimit"]).value_or(-1); const int dlLimit = parseInt(params()["dlLimit"]).value_or(-1);
@ -1215,7 +1215,7 @@ void TorrentsController::addTagsAction()
requireParams({"hashes", "tags"}); requireParams({"hashes", "tags"});
const QStringList hashes {params()["hashes"].split('|')}; const QStringList hashes {params()["hashes"].split('|')};
const QStringList tags {params()["tags"].split(',', QString::SkipEmptyParts)}; const QStringList tags {params()["tags"].split(',', Qt::SkipEmptyParts)};
for (const QString &tag : tags) for (const QString &tag : tags)
{ {
@ -1232,7 +1232,7 @@ void TorrentsController::removeTagsAction()
requireParams({"hashes"}); requireParams({"hashes"});
const QStringList hashes {params()["hashes"].split('|')}; const QStringList hashes {params()["hashes"].split('|')};
const QStringList tags {params()["tags"].split(',', QString::SkipEmptyParts)}; const QStringList tags {params()["tags"].split(',', Qt::SkipEmptyParts)};
for (const QString &tag : tags) for (const QString &tag : tags)
{ {
@ -1256,7 +1256,7 @@ void TorrentsController::createTagsAction()
{ {
requireParams({"tags"}); requireParams({"tags"});
const QStringList tags {params()["tags"].split(',', QString::SkipEmptyParts)}; const QStringList tags {params()["tags"].split(',', Qt::SkipEmptyParts)};
for (const QString &tag : tags) for (const QString &tag : tags)
BitTorrent::Session::instance()->addTag(tag.trimmed()); BitTorrent::Session::instance()->addTag(tag.trimmed());
@ -1266,7 +1266,7 @@ void TorrentsController::deleteTagsAction()
{ {
requireParams({"tags"}); requireParams({"tags"});
const QStringList tags {params()["tags"].split(',', QString::SkipEmptyParts)}; const QStringList tags {params()["tags"].split(',', Qt::SkipEmptyParts)};
for (const QString &tag : tags) for (const QString &tag : tags)
BitTorrent::Session::instance()->removeTag(tag.trimmed()); BitTorrent::Session::instance()->removeTag(tag.trimmed());
} }

View file

@ -76,7 +76,7 @@ namespace
{ {
// [rfc6265] 4.2.1. Syntax // [rfc6265] 4.2.1. Syntax
QStringMap ret; QStringMap ret;
const QVector<QStringRef> cookies = cookieStr.splitRef(';', QString::SkipEmptyParts); const QVector<QStringRef> cookies = cookieStr.splitRef(';', Qt::SkipEmptyParts);
for (const auto &cookie : cookies) for (const auto &cookie : cookies)
{ {
@ -143,7 +143,7 @@ WebApplication::~WebApplication()
void WebApplication::sendWebUIFile() void WebApplication::sendWebUIFile()
{ {
const QStringList pathItems {request().path.split('/', QString::SkipEmptyParts)}; const QStringList pathItems {request().path.split('/', Qt::SkipEmptyParts)};
if (pathItems.contains(".") || pathItems.contains("..")) if (pathItems.contains(".") || pathItems.contains(".."))
throw InternalServerErrorHTTPError(); throw InternalServerErrorHTTPError();
@ -356,7 +356,7 @@ void WebApplication::configure()
m_authSubnetWhitelist = pref->getWebUiAuthSubnetWhitelist(); m_authSubnetWhitelist = pref->getWebUiAuthSubnetWhitelist();
m_sessionTimeout = pref->getWebUISessionTimeout(); m_sessionTimeout = pref->getWebUISessionTimeout();
m_domainList = pref->getServerDomains().split(';', QString::SkipEmptyParts); m_domainList = pref->getServerDomains().split(';', Qt::SkipEmptyParts);
std::for_each(m_domainList.begin(), m_domainList.end(), [](QString &entry) { entry = entry.trimmed(); }); std::for_each(m_domainList.begin(), m_domainList.end(), [](QString &entry) { entry = entry.trimmed(); });
m_isCSRFProtectionEnabled = pref->isWebUiCSRFProtectionEnabled(); m_isCSRFProtectionEnabled = pref->isWebUiCSRFProtectionEnabled();
@ -387,7 +387,7 @@ void WebApplication::configure()
if (pref->isWebUICustomHTTPHeadersEnabled()) if (pref->isWebUICustomHTTPHeadersEnabled())
{ {
const QString customHeaders = pref->getWebUICustomHTTPHeaders().trimmed(); const QString customHeaders = pref->getWebUICustomHTTPHeaders().trimmed();
const QVector<QStringRef> customHeaderLines = customHeaders.splitRef('\n', QString::SkipEmptyParts); const QVector<QStringRef> customHeaderLines = customHeaders.splitRef('\n', Qt::SkipEmptyParts);
for (const QStringRef &line : customHeaderLines) for (const QStringRef &line : customHeaderLines)
{ {