diff --git a/3rdparty/solid-lite/backends/hal/haldevice.cpp b/3rdparty/solid-lite/backends/hal/haldevice.cpp index 424203665..88a02ff83 100644 --- a/3rdparty/solid-lite/backends/hal/haldevice.cpp +++ b/3rdparty/solid-lite/backends/hal/haldevice.cpp @@ -387,7 +387,7 @@ void HalDevicePrivate::checkCache(const QString &key) cache = reply; } else { qWarning() << Q_FUNC_INFO << " error: " << reply.error().name() - << ", " << reply.error().message() << Qt::endl; + << ", " << reply.error().message(); cache = QVariantMap(); } @@ -430,7 +430,7 @@ bool HalDevice::queryDeviceInterface(const Solid::DeviceInterface::Type &type) c QDBusReply reply = d->device.call("QueryCapability", cap); if (!reply.isValid()) { - qWarning() << Q_FUNC_INFO << " error: " << reply.error().name() << Qt::endl; + qWarning() << Q_FUNC_INFO << " error: " << reply.error().name(); return false; } diff --git a/3rdparty/solid-lite/backends/hal/halmanager.cpp b/3rdparty/solid-lite/backends/hal/halmanager.cpp index b7106bd38..1242bb8eb 100644 --- a/3rdparty/solid-lite/backends/hal/halmanager.cpp +++ b/3rdparty/solid-lite/backends/hal/halmanager.cpp @@ -107,7 +107,7 @@ QStringList HalManager::allDevices() if (!reply.isValid()) { - qWarning() << Q_FUNC_INFO << " error: " << reply.error().name() << Qt::endl; + qWarning() << Q_FUNC_INFO << " error: " << reply.error().name(); return QStringList(); } @@ -132,7 +132,7 @@ bool HalManager::deviceExists(const QString &udi) if (!reply.isValid()) { - qWarning() << Q_FUNC_INFO << " error: " << reply.error().name() << Qt::endl; + qWarning() << Q_FUNC_INFO << " error: " << reply.error().name(); return false; } diff --git a/3rdparty/solid-lite/backends/udev/udevportablemediaplayer.cpp b/3rdparty/solid-lite/backends/udev/udevportablemediaplayer.cpp index 852512a35..c9eabe6b8 100644 --- a/3rdparty/solid-lite/backends/udev/udevportablemediaplayer.cpp +++ b/3rdparty/solid-lite/backends/udev/udevportablemediaplayer.cpp @@ -106,7 +106,7 @@ QStringList PortableMediaPlayer::supportedProtocols() const return QStringList(); } QString value = readMpiValue(mpiFile, QString("Device"), QString("AccessProtocol")); - return value.split(QChar(';'), Qt::SkipEmptyParts); + return value.split(QChar(';'), QString::SkipEmptyParts); } QStringList PortableMediaPlayer::supportedDrivers(QString protocol) const diff --git a/3rdparty/solid-lite/backends/udisks/udisksopticaldrive.cpp b/3rdparty/solid-lite/backends/udisks/udisksopticaldrive.cpp index ba3579599..8286ee7f3 100644 --- a/3rdparty/solid-lite/backends/udisks/udisksopticaldrive.cpp +++ b/3rdparty/solid-lite/backends/udisks/udisksopticaldrive.cpp @@ -110,7 +110,7 @@ void UDisksOpticalDrive::initReadWriteSpeeds() const m_readSpeed = read_speed; m_writeSpeed = write_speed; - QStringList list = QString::fromLatin1(write_speeds).split(',', Qt::SkipEmptyParts); + QStringList list = QString::fromLatin1(write_speeds).split(',', QString::SkipEmptyParts); foreach (const QString & speed, list) m_writeSpeeds.append(speed.toInt()); diff --git a/3rdparty/solid-lite/backends/udisks2/udisksopticaldrive.cpp b/3rdparty/solid-lite/backends/udisks2/udisksopticaldrive.cpp index f2e71533c..f403665da 100644 --- a/3rdparty/solid-lite/backends/udisks2/udisksopticaldrive.cpp +++ b/3rdparty/solid-lite/backends/udisks2/udisksopticaldrive.cpp @@ -147,7 +147,7 @@ void OpticalDrive::initReadWriteSpeeds() const m_readSpeed = read_speed; m_writeSpeed = write_speed; - QStringList list = QString::fromLatin1(write_speeds).split(',', Qt::SkipEmptyParts); + QStringList list = QString::fromLatin1(write_speeds).split(',', QString::SkipEmptyParts); Q_FOREACH (const QString & speed, list) m_writeSpeeds.append(speed.toInt()); diff --git a/3rdparty/solid-lite/backends/wmi/wmiquery.cpp b/3rdparty/solid-lite/backends/wmi/wmiquery.cpp index f1c576401..01ede04f4 100644 --- a/3rdparty/solid-lite/backends/wmi/wmiquery.cpp +++ b/3rdparty/solid-lite/backends/wmi/wmiquery.cpp @@ -240,7 +240,7 @@ WmiQuery::WmiQuery() hres = CoInitializeEx(0,COINIT_MULTITHREADED); if( FAILED(hres) && hres != S_FALSE && hres != RPC_E_CHANGED_MODE ) { - qCritical() << "Failed to initialize COM library. Error code = 0x" << hex << quint32(hres) << Qt::endl; + qCritical() << "Failed to initialize COM library. Error code = 0x" << hex << quint32(hres); m_failed = true; } m_bNeedUninit = ( hres != S_FALSE && hres != RPC_E_CHANGED_MODE ); @@ -252,7 +252,7 @@ WmiQuery::WmiQuery() // RPC_E_TOO_LATE --> security already initialized if( FAILED(hres) && hres != RPC_E_TOO_LATE ) { - qCritical() << "Failed to initialize security. " << "Error code = " << hres << Qt::endl; + qCritical() << "Failed to initialize security. " << "Error code = " << hres; if ( m_bNeedUninit ) CoUninitialize(); m_failed = true; @@ -263,7 +263,7 @@ WmiQuery::WmiQuery() hres = CoCreateInstance( CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID *) &pLoc ); if (FAILED(hres)) { - qCritical() << "Failed to create IWbemLocator object. " << "Error code = " << hres << Qt::endl; + qCritical() << "Failed to create IWbemLocator object. " << "Error code = " << hres; if ( m_bNeedUninit ) CoUninitialize(); m_failed = true; @@ -274,14 +274,14 @@ WmiQuery::WmiQuery() hres = pLoc->ConnectServer( L"ROOT\\CIMV2", NULL, NULL, 0, NULL, 0, 0, &pSvc ); if( FAILED(hres) ) { - qCritical() << "Could not connect. Error code = " << hres << Qt::endl; + qCritical() << "Could not connect. Error code = " << hres; pLoc->Release(); if ( m_bNeedUninit ) CoUninitialize(); m_failed = true; } // else - // qDebug() << "Connected to ROOT\\CIMV2 WMI namespace" << Qt::endl; + // qDebug() << "Connected to ROOT\\CIMV2 WMI namespace"; } if( !m_failed ) @@ -290,7 +290,7 @@ WmiQuery::WmiQuery() RPC_C_AUTHN_LEVEL_CALL, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE ); if( FAILED(hres) ) { - qCritical() << "Could not set proxy blanket. Error code = " << hres << Qt::endl; + qCritical() << "Could not set proxy blanket. Error code = " << hres; pSvc->Release(); pLoc->Release(); if ( m_bNeedUninit ) @@ -346,7 +346,7 @@ WmiQuery::ItemList WmiQuery::sendQuery( const QString &wql ) if( FAILED(hres) ) { - qDebug() << "Query with string \"" << wql << "\" failed. Error code = " << hres << Qt::endl; + qDebug() << "Query with string \"" << wql << "\" failed. Error code = " << hres; } else { diff --git a/3rdparty/solid-lite/soliddefs_p.h b/3rdparty/solid-lite/soliddefs_p.h index ba77f4b43..87aae3753 100644 --- a/3rdparty/solid-lite/soliddefs_p.h +++ b/3rdparty/solid-lite/soliddefs_p.h @@ -120,7 +120,8 @@ static struct SOLID_GLOBAL_STATIC_STRUCT_NAME(NAME) \ } \ } NAME; -#else +#elif QT_VERSION < 0x051500 + #define SOLID_GLOBAL_STATIC_WITH_ARGS(TYPE, NAME, ARGS) \ static QBasicAtomicPointer _solid_static_##NAME = Q_BASIC_ATOMIC_INITIALIZER(0);\ static bool _solid_static_##NAME##_destroyed; \ @@ -136,20 +137,20 @@ static struct SOLID_GLOBAL_STATIC_STRUCT_NAME(NAME) \ } \ inline TYPE *operator->() \ { \ - if (!_solid_static_##NAME.loadRelaxed()) { \ + if (!_solid_static_##NAME.load()) { \ if (isDestroyed()) { \ qFatal("Fatal Error: Accessed global static '%s *%s()' after destruction. " \ "Defined at %s:%d", #TYPE, #NAME, __FILE__, __LINE__); \ } \ TYPE *x = new TYPE ARGS; \ if (!_solid_static_##NAME.testAndSetOrdered(0, x) \ - && _solid_static_##NAME.loadRelaxed() != x ) { \ + && _solid_static_##NAME.load() != x ) { \ delete x; \ } else { \ static Solid::CleanUpGlobalStatic cleanUpObject = { destroy }; \ } \ } \ - return _solid_static_##NAME.loadRelaxed(); \ + return _solid_static_##NAME.load(); \ } \ inline TYPE &operator*() \ { \ @@ -158,11 +159,57 @@ static struct SOLID_GLOBAL_STATIC_STRUCT_NAME(NAME) \ static void destroy() \ { \ _solid_static_##NAME##_destroyed = true; \ - TYPE *x = _solid_static_##NAME.loadRelaxed(); \ - _solid_static_##NAME.storeRelaxed(0); \ + TYPE *x = _solid_static_##NAME.load(); \ + _solid_static_##NAME.store(0); \ delete x; \ } \ } NAME; + +#else + +#define SOLID_GLOBAL_STATIC_WITH_ARGS(TYPE, NAME, ARGS) \ +static QBasicAtomicPointer _solid_static_##NAME = Q_BASIC_ATOMIC_INITIALIZER(0);\ +static bool _solid_static_##NAME##_destroyed; \ +static struct SOLID_GLOBAL_STATIC_STRUCT_NAME(NAME) \ +{ \ + bool isDestroyed() \ + { \ + return _solid_static_##NAME##_destroyed; \ + } \ + inline operator TYPE*() \ + { \ + return operator->(); \ + } \ + inline TYPE *operator->() \ + { \ + if (!_solid_static_##NAME.loadRelaxed()) { \ + if (isDestroyed()) { \ + qFatal("Fatal Error: Accessed global static '%s *%s()' after destruction. " \ + "Defined at %s:%d", #TYPE, #NAME, __FILE__, __LINE__); \ + } \ + TYPE *x = new TYPE ARGS; \ + if (!_solid_static_##NAME.testAndSetOrdered(0, x) \ + && _solid_static_##NAME.loadRelaxed() != x ) { \ + delete x; \ + } else { \ + static Solid::CleanUpGlobalStatic cleanUpObject = { destroy }; \ + } \ + } \ + return _solid_static_##NAME.loadRelaxed(); \ + } \ + inline TYPE &operator*() \ + { \ + return *operator->(); \ + } \ + static void destroy() \ + { \ + _solid_static_##NAME##_destroyed = true; \ + TYPE *x = _solid_static_##NAME.loadRelaxed(); \ + _solid_static_##NAME.storeRelaxed(0); \ + delete x; \ + } \ +} NAME; + #endif #endif diff --git a/ChangeLog b/ChangeLog index 191968429..d915f027d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -23,6 +23,7 @@ 17. Add support for MPD's "Partitions" - implemented by dphoyes. Requires MPD 0.22 or above. 18. Allow queue to be sorted by path. +19. Fix some deprecation warnings - thanks to John Regan. 2.4.2 ----- diff --git a/config.h.cmake b/config.h.cmake index 4d1ecbdb5..0fd7fbfa1 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -64,4 +64,14 @@ #define CANTATA_ICON_THEME "@CANTATA_ICON_THEME@" +#if QT_VERSION >= 0x051400 +#define CANTATA_ENDL Qt::endl +#define CANTATA_SKIP_EMPTY Qt::SkipEmptyParts +#define CANTATA_GET_LABEL_PIXMAP(L) L->pixmap(Qt::ReturnByValue) +#else +#define CANTATA_ENDL endl +#define CANTATA_SKIP_EMPTY QString::SkipEmptyParts +#define CANTATA_GET_LABEL_PIXMAP(L) (*(L->pixmap())) +#endif + #endif diff --git a/context/artistview.cpp b/context/artistview.cpp index cd90ff592..b984c7b68 100644 --- a/context/artistview.cpp +++ b/context/artistview.cpp @@ -293,7 +293,7 @@ void ArtistView::handleSimilarReply() stream.setGenerateByteOrderMark(true); #endif for (const QString &artist: artists) { - stream << artist << Qt::endl; + stream << artist << CANTATA_ENDL; } } } diff --git a/context/songview.cpp b/context/songview.cpp index bc7c07e91..9fc32ba27 100644 --- a/context/songview.cpp +++ b/context/songview.cpp @@ -216,7 +216,7 @@ void SongView::edit() QFile file(lyricsFile); if (file.open(QIODevice::ReadWrite|QIODevice::Text)) { QTextStream stream(&file); - stream << tr("Failed to locate lyrics") << Qt::endl; + stream << tr("Failed to locate lyrics") << CANTATA_ENDL; } } QDesktopServices::openUrl(QUrl::fromLocalFile(lyricsFile)); diff --git a/context/wikipediaengine.cpp b/context/wikipediaengine.cpp index db6cf424f..631680bb0 100644 --- a/context/wikipediaengine.cpp +++ b/context/wikipediaengine.cpp @@ -61,7 +61,7 @@ static QString fixWikiLink(const QUrl &url) QString fixed(path); fixed=fixed.replace("/wiki"+wikipediaSpecialExport(lang), "/wiki/"); if (path==fixed) { - QStringList parts=fixed.split("/", Qt::SkipEmptyParts); + QStringList parts=fixed.split("/", CANTATA_SKIP_EMPTY); if (parts.length()>1) { parts.removeAt(1); fixed=parts.join("/"); @@ -468,15 +468,15 @@ void WikipediaEngine::getPage(const QStringList &query, Mode mode, const QString switch (mode) { default: case Artist: - patterns=tr("artist|band|singer|vocalist|musician", "Search pattern for an artist or band, separated by |").split("|", Qt::SkipEmptyParts); + patterns=tr("artist|band|singer|vocalist|musician", "Search pattern for an artist or band, separated by |").split("|", CANTATA_SKIP_EMPTY); englishPatterns=QString(QLatin1String("artist|band|singer|vocalist|musician")).split("|"); break; case Album: - patterns=tr("album|score|soundtrack", "Search pattern for an album, separated by |").split("|", Qt::SkipEmptyParts); + patterns=tr("album|score|soundtrack", "Search pattern for an album, separated by |").split("|", CANTATA_SKIP_EMPTY); englishPatterns=QString(QLatin1String("album|score|soundtrack")).split("|"); break; case Track: -// patterns=trc("Search pattern for a song, separated by |", "song|track").split("|", Qt::SkipEmptyParts); +// patterns=trc("Search pattern for a song, separated by |", "song|track").split("|", CANTATA_SKIP_EMPTY); // englishPatterns=QString(QLatin1String("song|track")).split("|"); break; } diff --git a/devices/actiondialog.cpp b/devices/actiondialog.cpp index d8da71d44..dc653c6a9 100644 --- a/devices/actiondialog.cpp +++ b/devices/actiondialog.cpp @@ -277,7 +277,7 @@ void ActionDialog::calcFileSize() setPage(PAGE_START); } else { setPage(PAGE_INSUFFICIENT_SIZE); - sizeInfoIcon->setPixmap(skipIcon->pixmap(Qt::ReturnByValue)); + sizeInfoIcon->setPixmap(CANTATA_GET_LABEL_PIXMAP(skipIcon)); sizeInfoText->setText(tr("There is insufficient space left on the destination device.\n\n" "The selected songs consume %1, but there is only %2 left.\n" "The songs will need to be transcoded to a smaller filesize in order to be successfully copied.") @@ -287,7 +287,7 @@ void ActionDialog::calcFileSize() } else { setPage(PAGE_INSUFFICIENT_SIZE); setButtons(Cancel); - sizeInfoIcon->setPixmap(errorIcon->pixmap(Qt::ReturnByValue)); + sizeInfoIcon->setPixmap(CANTATA_GET_LABEL_PIXMAP(errorIcon)); sizeInfoText->setText(tr("There is insufficient space left on the destination.\n\n" "The selected songs consume %1, but there is only %2 left.") .arg(Utils::formatByteSize(spaceRequired)) diff --git a/devices/audiocddevice.cpp b/devices/audiocddevice.cpp index 19d117bd8..eb57ef501 100644 --- a/devices/audiocddevice.cpp +++ b/devices/audiocddevice.cpp @@ -95,7 +95,7 @@ AudioCdDevice::AudioCdDevice(MusicLibraryModel *m, Solid::Device &dev) if (block) { device=block->device(); } else { // With UDisks2 we cannot get block from device :-( - QStringList parts=dev.udi().split("/", Qt::SkipEmptyParts); + QStringList parts=dev.udi().split("/", CANTATA_SKIP_EMPTY); if (!parts.isEmpty()) { parts=parts.last().split(":"); if (!parts.isEmpty()) { diff --git a/devices/encoders.cpp b/devices/encoders.cpp index ed763284c..df6c3cc34 100644 --- a/devices/encoders.cpp +++ b/devices/encoders.cpp @@ -22,6 +22,7 @@ * this program. If not, see . * ****************************************************************************************/ +#include "config.h" #include "encoders.h" #include "support/utils.h" #include @@ -349,7 +350,7 @@ static void init() return; } - QStringList lines=output.split('\n', Qt::SkipEmptyParts); + QStringList lines=output.split('\n', CANTATA_SKIP_EMPTY); for (const QString &line: lines) { int pos=line.indexOf(QRegExp(QLatin1String("[\\. D]EA"))); if (0==pos || 1==pos) { diff --git a/devices/mtpdevice.cpp b/devices/mtpdevice.cpp index c3ba1cd3b..691deb118 100644 --- a/devices/mtpdevice.cpp +++ b/devices/mtpdevice.cpp @@ -374,7 +374,7 @@ void MtpConnection::updateLibrary(const DeviceOptions &opts) s.populateSorts(); #ifdef MTP_FAKE_ALBUMARTIST_SUPPORT if (getAlbumArtistFromPath) { - QStringList folderParts=(*folder).path.split('/', Qt::SkipEmptyParts); + QStringList folderParts=(*folder).path.split('/', CANTATA_SKIP_EMPTY); if (folderParts.length()>=3) { // Path should be "Music/${AlbumArtist}/${Album}" int artistPath=1; @@ -822,7 +822,7 @@ void MtpConnection::putSong(const Song &s, bool fixVa, const DeviceOptions &opts meta->parent_id=folderId=store.musicFolderId; meta->storage_id=store.id; destName=store.musicPath+opts.createFilename(song); - QStringList dirs=destName.split('/', Qt::SkipEmptyParts); + QStringList dirs=destName.split('/', CANTATA_SKIP_EMPTY); if (dirs.count()>1) { destName=dirs.takeLast(); meta->parent_id=folderId=checkFolderStructure(dirs, store); diff --git a/devices/remotefsdevice.cpp b/devices/remotefsdevice.cpp index 87eee0007..c06e146f6 100644 --- a/devices/remotefsdevice.cpp +++ b/devices/remotefsdevice.cpp @@ -288,7 +288,7 @@ void RemoteFsDevice::mount() << QLatin1String("-o") << QLatin1String("ServerAliveInterval=15"); //<< QLatin1String("-o") << QLatin1String("Ciphers=arcfour"); if (!details.extraOptions.isEmpty()) { - args << details.extraOptions.split(' ', Qt::SkipEmptyParts); + args << details.extraOptions.split(' ', CANTATA_SKIP_EMPTY); } } else { emit error(tr("\"sshfs\" is not installed!").replace("sshfs", "setsid")); // TODO: 2.4 use correct string! diff --git a/devices/umsdevice.cpp b/devices/umsdevice.cpp index 5db4d4f08..c7726940a 100644 --- a/devices/umsdevice.cpp +++ b/devices/umsdevice.cpp @@ -45,7 +45,7 @@ UmsDevice::UmsDevice(MusicLibraryModel *m, Solid::Device &dev) QString details=QLatin1String(" (")+Utils::formatByteSize(spaceInfo.size()); - QStringList udiParts=dev.udi().split(QLatin1Char('/'), Qt::SkipEmptyParts); + QStringList udiParts=dev.udi().split(QLatin1Char('/'), CANTATA_SKIP_EMPTY); if (udiParts.length()>1) { details+=QLatin1String(" - ")+udiParts.last(); } diff --git a/gui/coverdialog.cpp b/gui/coverdialog.cpp index 521591f36..ad6b3f5f0 100644 --- a/gui/coverdialog.cpp +++ b/gui/coverdialog.cpp @@ -301,7 +301,7 @@ void CoverPreview::scaleImage(int adjust) return; } zoom=newZoom; - imageLabel->resize(zoom * imageLabel->pixmap(Qt::ReturnByValue).size()); + imageLabel->resize(zoom * CANTATA_GET_LABEL_PIXMAP(imageLabel).size()); setWindowTitle(tr("Image (%1 x %2 %3%)", "Image (width x height zoom%)").arg(imgW).arg(imgH).arg(zoom*100)); } @@ -1190,7 +1190,7 @@ bool CoverDialog::saveCover(const QString &src, const QImage &img) } if (isArtist) { - /*if (saveInMpd && !mpdDir.isEmpty() && dirName.startsWith(mpdDir) && 2==dirName.mid(mpdDir.length()).split('/', Qt::SkipEmptyParts).count()) { + /*if (saveInMpd && !mpdDir.isEmpty() && dirName.startsWith(mpdDir) && 2==dirName.mid(mpdDir.length()).split('/', CANTATA_SKIP_EMPTY).count()) { QDir d(dirName); d.cdUp(); destName=d.absolutePath()+'/'+Covers::constArtistImage+ext; @@ -1198,7 +1198,7 @@ bool CoverDialog::saveCover(const QString &src, const QImage &img) destName=Utils::cacheDir(Covers::constCoverDir, true)+Covers::encodeName(song.albumArtist())+ext; } } else if (isComposer) { - /*if (saveInMpd && !mpdDir.isEmpty() && dirName.startsWith(mpdDir) && 2==dirName.mid(mpdDir.length()).split('/', Qt::SkipEmptyParts).count()) { + /*if (saveInMpd && !mpdDir.isEmpty() && dirName.startsWith(mpdDir) && 2==dirName.mid(mpdDir.length()).split('/', CANTATA_SKIP_EMPTY).count()) { QDir d(dirName); d.cdUp(); destName=d.absolutePath()+'/'+Covers::constComposerImage+ext; diff --git a/gui/covers.cpp b/gui/covers.cpp index 152ef10a1..b49b2493b 100644 --- a/gui/covers.cpp +++ b/gui/covers.cpp @@ -672,7 +672,7 @@ bool CoverDownloader::downloadViaHttp(Job &job, JobType type) QString dir=Utils::getDir(job.filePath); if (job.song.isArtistImageRequest() || job.song.isComposerImageRequest()) { if (job.level) { - QStringList parts=dir.split(Utils::constDirSep, Qt::SkipEmptyParts); + QStringList parts=dir.split(Utils::constDirSep, CANTATA_SKIP_EMPTY); if (parts.size()getDetails().dir; -// if (!mpdDir.isEmpty() && job.dir.startsWith(mpdDir) && 2==job.dir.mid(mpdDir.length()).split(Utils::constDirSep, Qt::SkipEmptyParts).count()) { +// if (!mpdDir.isEmpty() && job.dir.startsWith(mpdDir) && 2==job.dir.mid(mpdDir.length()).split(Utils::constDirSep, CANTATA_SKIP_EMPTY).count()) { // QDir d(job.dir); // d.cdUp(); // savedName=save(mimeType, extension, d.absolutePath()+Utils::constDirSep+ diff --git a/gui/currentcover.cpp b/gui/currentcover.cpp index 686d3ebef..93e1bde82 100644 --- a/gui/currentcover.cpp +++ b/gui/currentcover.cpp @@ -51,7 +51,7 @@ static void themes(const QString &theme, QStringList &iconThemes) while (!f.atEnd()) { QString line=QString::fromUtf8(f.readLine()).trimmed().simplified(); if (line.startsWith(key)) { - QStringList inherited=line.mid(key.length()).split(",", Qt::SkipEmptyParts); + QStringList inherited=line.mid(key.length()).split(",", CANTATA_SKIP_EMPTY); for (const QString &i: inherited) { themes(i, iconThemes); } diff --git a/gui/interfacesettings.cpp b/gui/interfacesettings.cpp index 42cdad2f7..e7051a8ce 100644 --- a/gui/interfacesettings.cpp +++ b/gui/interfacesettings.cpp @@ -312,7 +312,7 @@ void InterfaceSettings::load() static QSet toSet(const QString &str) { - QStringList parts=str.split(constSep, Qt::SkipEmptyParts); + QStringList parts=str.split(constSep, CANTATA_SKIP_EMPTY); QSet set; for (QString s: parts) { set.insert(s.trimmed()); diff --git a/gui/main.cpp b/gui/main.cpp index c284471ed..3424e94f7 100644 --- a/gui/main.cpp +++ b/gui/main.cpp @@ -87,10 +87,10 @@ static void cantataQtMsgHandler(QtMsgType, const QMessageLogContext &, const QSt if (f.open(QIODevice::WriteOnly|QIODevice::Append|QIODevice::Text)) { QTextStream stream(&f); if (firstMsg) { - stream << "------------START------------" << Qt::endl; + stream << "------------START------------" << CANTATA_ENDL; firstMsg=false; } - stream << QDateTime::currentDateTime().toString(Qt::ISODate).replace("T", " ") << " - " << msg << Qt::endl; + stream << QDateTime::currentDateTime().toString(Qt::ISODate).replace("T", " ") << " - " << msg << CANTATA_ENDL; } } else { std::cout << QDateTime::currentDateTime().toString(Qt::ISODate).replace("T", " ").toLatin1().constData() @@ -176,7 +176,7 @@ static QString debugAreas() static void installDebugMessageHandler(const QString &cmdLine) { - QStringList items=cmdLine.split(",", Qt::SkipEmptyParts); + QStringList items=cmdLine.split(",", CANTATA_SKIP_EMPTY); for (const auto &area: items) { bool all = QLatin1String("all")==area; diff --git a/http/httpsocket.cpp b/http/httpsocket.cpp index 2894d67d0..5d4330697 100644 --- a/http/httpsocket.cpp +++ b/http/httpsocket.cpp @@ -160,7 +160,7 @@ static void getRange(const QStringList ¶ms, qint32 &from, qint32 &to) if (str.startsWith("Range:")) { int start=str.indexOf("bytes="); if (start>0) { - QStringList range=str.mid(start+6).split("-", Qt::SkipEmptyParts); + QStringList range=str.mid(start+6).split("-", CANTATA_SKIP_EMPTY); if (1==range.length()) { from=range.at(0).toLong(); } else if (2==range.length()) { @@ -289,7 +289,7 @@ void HttpSocket::readClient() if (song.isCdda()) { #if defined CDDB_FOUND || defined MUSICBRAINZ5_FOUND - QStringList parts=song.file.split("/", Qt::SkipEmptyParts); + QStringList parts=song.file.split("/", CANTATA_SKIP_EMPTY); if (parts.length()>=3) { QString dev=QLatin1Char('/')+parts.at(1)+QLatin1Char('/')+parts.at(2); CdParanoia cdparanoia(dev, false, false, true, Settings::self()->paranoiaOffset()); diff --git a/models/browsemodel.cpp b/models/browsemodel.cpp index 3fdf198a6..07e508b07 100644 --- a/models/browsemodel.cpp +++ b/models/browsemodel.cpp @@ -320,7 +320,7 @@ void BrowseModel::folderContents(const QString &path, const QStringList &folders beginInsertRows(idx, 0, folders.count() + songs.count() - 1); for (const QString &folder: folders) { - FolderItem *item = new FolderItem(folder.split("/", Qt::SkipEmptyParts).last(), folder, it.value()); + FolderItem *item = new FolderItem(folder.split("/", CANTATA_SKIP_EMPTY).last(), folder, it.value()); it.value()->add(item); folderIndex.insert(folder, item); } diff --git a/models/musiclibraryitemroot.cpp b/models/musiclibraryitemroot.cpp index 402b9c280..586f01521 100644 --- a/models/musiclibraryitemroot.cpp +++ b/models/musiclibraryitemroot.cpp @@ -443,7 +443,7 @@ bool MusicLibraryItemRoot::fromXML(QXmlStreamReader &reader, const QString &base song.setAlbumArtistSort(attributes.value(constAlbumArtistSortAttribute).toString()); } if (attributes.hasAttribute(constGenreAttribute)) { - QStringList genres=attributes.value(constGenreAttribute).toString().split(",", Qt::SkipEmptyParts); + QStringList genres=attributes.value(constGenreAttribute).toString().split(",", CANTATA_SKIP_EMPTY); for (int i=0; i StreamsModel::parseRadioTimeResponse(QIODevice *dev, static QStringList fixGenres(const QString &genre) { - QStringList allGenres=Song::capitalize(genre).split(' ', Qt::SkipEmptyParts); + QStringList allGenres=Song::capitalize(genre).split(' ', CANTATA_SKIP_EMPTY); QStringList fixed; for (const QString &genre: allGenres) { if (genre.length() < 2 || diff --git a/mpd-interface/httpstream.cpp b/mpd-interface/httpstream.cpp index d956f25eb..c5d048c62 100644 --- a/mpd-interface/httpstream.cpp +++ b/mpd-interface/httpstream.cpp @@ -154,7 +154,7 @@ void HttpStream::streamUrl(const QString &url) #else if (player) { QMediaContent media = player->media(); - if (media != nullptr && media.request().url() != url) { + if (media != nullptr && media.canonicalUrl() != url) { player->stop(); player->deleteLater(); player = nullptr; @@ -226,13 +226,13 @@ void HttpStream::updateStatus() case MPDState_Playing: // Only start playback if not aready playing if (playerNeedsToStart) { - #ifdef LIBVLC_FOUND + #ifdef LIBVLC_FOUND libvlc_media_player_play(player); startTimer(); - #else - QUrl url = player->media().request().url(); + #else + QUrl url = player->media().canonicalUrl(); player->setMedia(url); - #endif + #endif } break; case MPDState_Paused: diff --git a/mpd-interface/mpdconnection.cpp b/mpd-interface/mpdconnection.cpp index 96f543e62..261a8ab3d 100644 --- a/mpd-interface/mpdconnection.cpp +++ b/mpd-interface/mpdconnection.cpp @@ -1271,7 +1271,7 @@ void MPDConnection::setReplayGain(const QString &v) void MPDConnection::getReplayGain() { if (replaygainSupported()) { - QStringList lines=QString(sendCommand("replay_gain_status").data).split('\n', Qt::SkipEmptyParts); + QStringList lines=QString(sendCommand("replay_gain_status").data).split('\n', CANTATA_SKIP_EMPTY); if (2==lines.count() && "OK"==lines[1] && lines[0].startsWith(QLatin1String("replay_gain_mode: "))) { QString mode=lines[0].mid(18); @@ -2042,7 +2042,7 @@ void MPDConnection::search(const QString &field, const QString &value, int id) if (field==constModifiedSince) { time_t v=0; if (QRegExp("\\d*").exactMatch(value)) { - v=QDateTime::currentDateTime().date().startOfDay().toTime_t()-(value.toInt()*24*60*60); + v=QDateTime(QDateTime::currentDateTime().date()).toTime_t()-(value.toInt()*24*60*60); } else if (QRegExp("^((19|20)\\d\\d)[-/](0[1-9]|1[012])[-/](0[1-9]|[12][0-9]|3[01])$").exactMatch(value)) { QDateTime dt=QDateTime::fromString(QString(value).replace("/", "-"), Qt::ISODate); if (dt.isValid()) { @@ -2448,7 +2448,7 @@ void MPDConnection::readRemoteDynamicMessages() for (const QString &m: messages[channel]) { if (!m.isEmpty()) { DBUG << "Received message " << m; - QStringList parts=m.split(':', Qt::SkipEmptyParts); + QStringList parts=m.split(':', CANTATA_SKIP_EMPTY); QStringList message; for (QString part: parts) { part=part.replace("{c}", ":"); diff --git a/mpd-interface/song.cpp b/mpd-interface/song.cpp index 6185de637..b10137973 100644 --- a/mpd-interface/song.cpp +++ b/mpd-interface/song.cpp @@ -311,14 +311,14 @@ void Song::guessTags() if (isEmpty() && !isStream()) { static const QLatin1String constAlbumArtistSep(" - "); guessed=true; - QStringList parts = file.split("/", Qt::SkipEmptyParts); + QStringList parts = file.split("/", CANTATA_SKIP_EMPTY); if (3==parts.length()) { title=parts.at(2); album=parts.at(1); artist=parts.at(0); } else if (2==parts.length() && parts.at(0).contains(constAlbumArtistSep)) { title=parts.at(1); - QStringList albumArtistParts = parts.at(0).split(constAlbumArtistSep, Qt::SkipEmptyParts); + QStringList albumArtistParts = parts.at(0).split(constAlbumArtistSep, CANTATA_SKIP_EMPTY); if (2==albumArtistParts.length()) { album=albumArtistParts.at(1); artist=albumArtistParts.at(0); @@ -718,7 +718,7 @@ QString Song::capitalize(const QString &s) return s; } - QStringList words = s.split(' ', Qt::SkipEmptyParts); + QStringList words = s.split(' ', CANTATA_SKIP_EMPTY); for (int i = 0; i < words.count(); i++) { QString word = words[i]; //.toLower(); int j = 0; diff --git a/online/magnatuneservice.cpp b/online/magnatuneservice.cpp index c2b8fe575..54694b429 100644 --- a/online/magnatuneservice.cpp +++ b/online/magnatuneservice.cpp @@ -76,7 +76,7 @@ Song MagnatuneXmlParser::parseSong(QXmlStreamReader &xml) } else if (QLatin1String("year")==name) { s.year=value.toInt(); } else if (QLatin1String("magnatunegenres")==name) { - QStringList genres=value.split(',', Qt::SkipEmptyParts); + QStringList genres=value.split(',', CANTATA_SKIP_EMPTY); // for (const QString &g: genres) { // s.addGenre(g); // } diff --git a/online/podcastservice.cpp b/online/podcastservice.cpp index 62d550dd1..be723545f 100644 --- a/online/podcastservice.cpp +++ b/online/podcastservice.cpp @@ -63,7 +63,7 @@ static QString encodeName(const QString &name) static inline QString episodeFileName(const QUrl &url) { - return url.path().split('/', Qt::SkipEmptyParts).join('_').replace('~', '_'); + return url.path().split('/', CANTATA_SKIP_EMPTY).join('_').replace('~', '_'); } PodcastService::Proxy::Proxy(QObject *parent) diff --git a/playlists/dynamicplaylists.cpp b/playlists/dynamicplaylists.cpp index 7332ef0cb..7b4025120 100644 --- a/playlists/dynamicplaylists.cpp +++ b/playlists/dynamicplaylists.cpp @@ -402,7 +402,7 @@ void DynamicPlaylists::parseRemote(const QStringList &response) Rule r; for (const QString &part: response) { - QStringList lines=part.split('\n', Qt::SkipEmptyParts); + QStringList lines=part.split('\n', CANTATA_SKIP_EMPTY); for (const QString &s: lines) { QString str=s.trimmed(); if (str.isEmpty() || str.startsWith('#')) { diff --git a/playlists/rulesplaylists.cpp b/playlists/rulesplaylists.cpp index d767c991b..a54ab9a2f 100644 --- a/playlists/rulesplaylists.cpp +++ b/playlists/rulesplaylists.cpp @@ -323,7 +323,7 @@ void RulesPlaylists::loadLocal() Rule r; QTextStream in(&f); in.setCodec("UTF-8"); - QStringList lines = in.readAll().split('\n', Qt::SkipEmptyParts); + QStringList lines = in.readAll().split('\n', CANTATA_SKIP_EMPTY); for (const QString &line: lines) { QString str=line.trimmed(); diff --git a/replaygain/albumscanner.cpp b/replaygain/albumscanner.cpp index 21d255f9b..15feb5563 100644 --- a/replaygain/albumscanner.cpp +++ b/replaygain/albumscanner.cpp @@ -81,13 +81,13 @@ void AlbumScanner::read() return; } - QStringList lines=output.split("\n", Qt::SkipEmptyParts); + QStringList lines=output.split("\n", CANTATA_SKIP_EMPTY); for (const QString &line: lines) { if (line.startsWith(constProgLine)) { emit progress(line.mid(constProgLine.length()).toUInt()); } else if (line.startsWith(constTrackLine)) { - QStringList parts=line.mid(constTrackLine.length()).split(" ", Qt::SkipEmptyParts); + QStringList parts=line.mid(constTrackLine.length()).split(" ", CANTATA_SKIP_EMPTY); if (!parts.isEmpty()) { int num=parts[0].toUInt(); Values vals; @@ -99,7 +99,7 @@ void AlbumScanner::read() tracks[trackIndexMap[num]]=vals; } } else if (line.startsWith(constAlbumLine)) { - QStringList parts=line.mid(constAlbumLine.length()).split(" ", Qt::SkipEmptyParts); + QStringList parts=line.mid(constAlbumLine.length()).split(" ", CANTATA_SKIP_EMPTY); if (parts.length()>=2) { album.gain=parts[0].toDouble(); album.peak=parts[1].toDouble(); diff --git a/streams/streamfetcher.cpp b/streams/streamfetcher.cpp index 0daa0fa16..bdbcae30e 100644 --- a/streams/streamfetcher.cpp +++ b/streams/streamfetcher.cpp @@ -54,7 +54,7 @@ static const QString constTuneInNotCompat = QLatin1String("service/Audio/notcomp static QString parsePlaylist(const QByteArray &data, const QString &key, const QSet &handlers) { - QStringList lines=QString(data).split('\n', Qt::SkipEmptyParts); + QStringList lines=QString(data).split('\n', CANTATA_SKIP_EMPTY); for (QString line: lines) { if (line.startsWith(key, Qt::CaseInsensitive)) { @@ -75,7 +75,7 @@ static QString parsePlaylist(const QByteArray &data, const QString &key, const Q static QString parseExt3Mu(const QByteArray &data, const QSet &handlers) { - QStringList lines=QString(data).split(QRegExp(QLatin1String("(\r\n|\n|\r)")), Qt::SkipEmptyParts); + QStringList lines=QString(data).split(QRegExp(QLatin1String("(\r\n|\n|\r)")), CANTATA_SKIP_EMPTY); for (QString line: lines) { for (const QString &handler: handlers) { @@ -93,7 +93,7 @@ static QString parseExt3Mu(const QByteArray &data, const QSet &handlers static QString parseAsx(const QByteArray &data, const QSet &handlers) { - QStringList lines=QString(data).split(QRegExp(QLatin1String("(\r\n|\n|\r|/>)")), Qt::SkipEmptyParts); + QStringList lines=QString(data).split(QRegExp(QLatin1String("(\r\n|\n|\r|/>)")), CANTATA_SKIP_EMPTY); for (QString line: lines) { int ref=line.indexOf(QLatin1String(" splitDiscNumber(const QString &value) int disc; int count = 0; if (-1!=value.indexOf('/')) { - QStringList list = value.split('/', Qt::SkipEmptyParts); + QStringList list = value.split('/', CANTATA_SKIP_EMPTY); disc = list.value(0).toInt(); count = list.value(1).toInt(); } else if (-1!=value.indexOf(':')) { - QStringList list = value.split(':', Qt::SkipEmptyParts); + QStringList list = value.split(':', CANTATA_SKIP_EMPTY); disc = list.value(0).toInt(); count = list.value(1).toInt(); } else { @@ -1482,11 +1482,12 @@ static Update update(const TagLib::FileRef fileref, const Song &from, const Song #ifdef TAGLIB_CAN_SAVE_ID3VER TagLib::ID3v2::Tag *v2=mpeg->ID3v2Tag(false); bool isID3v24=v2 && isId3V24(v2->header()); - int ver = id3Ver==3 ? 3 : (id3Ver==4 ? 4 : (isID3v24 ? 4 : 3)); - return mpeg->save(TagLib::MPEG::File::ID3v2, TagLib::File::StripOthers, TagLib::ID3v2::Version(ver)) ? Update_Modified : Update_Failed; + int ver=id3Ver==3 ? 3 : (id3Ver==4 ? 4 : (isID3v24 ? 4 : 3)); + DBUG << "isID3v24" << isID3v24 << "reqVer:" << id3Ver << "use:" << ver; + return mpeg->save(TagLib::MPEG::File::ID3v2, true, ver) ? Update_Modified : Update_Failed; #else Q_UNUSED(id3Ver) - return mpeg->save(TagLib::MPEG::File::ID3v2, TagLib::File::StripOthers) ? Update_Modified : Update_Failed; + return mpeg->save(TagLib::MPEG::File::ID3v2, true) ? Update_Modified : Update_Failed; #endif } return fileref.file()->save() ? Update_Modified : Update_Failed; @@ -1511,9 +1512,9 @@ Update updateArtistAndTitle(const QString &fileName, const Song &song) TagLib::ID3v2::Tag *v2=mpeg->ID3v2Tag(false); int ver=v2 && isId3V24(v2->header()) ? 4 : 3; DBUG << "useId3ver:" << ver; - return mpeg->save(TagLib::MPEG::File::ID3v2, TagLib::File::StripOthers, TagLib::ID3v2::Version(ver)) ? Update_Modified : Update_Failed; + return mpeg->save(TagLib::MPEG::File::ID3v2, true, ver) ? Update_Modified : Update_Failed; #else - return mpeg->save(TagLib::MPEG::File::ID3v2, TagLib::File::StripOthers) ? Update_Modified : Update_Failed; + return mpeg->save(TagLib::MPEG::File::ID3v2, true) ? Update_Modified : Update_Failed; #endif } return fileref.file()->save() ? Update_Modified : Update_Failed;