Hello community, here is the log from the commit of package elisa for openSUSE:Factory checked in at 2019-07-03 15:15:06 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/elisa (Old) and /work/SRC/openSUSE:Factory/.elisa.new.4615 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "elisa" Wed Jul 3 15:15:06 2019 rev:8 rq:713103 version:0.4.2 Changes: -------- --- /work/SRC/openSUSE:Factory/elisa/elisa.changes 2019-06-24 21:53:38.876119213 +0200 +++ /work/SRC/openSUSE:Factory/.elisa.new.4615/elisa.changes 2019-07-03 15:15:06.830977843 +0200 @@ -1,0 +2,8 @@ +Sun Jun 30 20:33:02 UTC 2019 - [email protected] + +- Update to 0.4.2 + * Fix restore of tracks with missing metadata in playlist (this + was the case for tracks without album metadata) + * Fix view selector not following the color theme (kde#408435) + +------------------------------------------------------------------- Old: ---- elisa-0.4.1.tar.xz elisa-0.4.1.tar.xz.sig New: ---- elisa-0.4.2.tar.xz elisa-0.4.2.tar.xz.sig ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ elisa.spec ++++++ --- /var/tmp/diff_new_pack.DWm53n/_old 2019-07-03 15:15:09.610983500 +0200 +++ /var/tmp/diff_new_pack.DWm53n/_new 2019-07-03 15:15:09.626983533 +0200 @@ -20,7 +20,7 @@ %define kf5_version 5.48.0 %bcond_without lang Name: elisa -Version: 0.4.1 +Version: 0.4.2 Release: 0 Summary: Music player and collection organizer License: LGPL-3.0-or-later ++++++ elisa-0.4.1.tar.xz -> elisa-0.4.2.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/elisa-0.4.1/CMakeLists.txt new/elisa-0.4.2/CMakeLists.txt --- old/elisa-0.4.1/CMakeLists.txt 2019-06-19 22:41:34.000000000 +0200 +++ new/elisa-0.4.2/CMakeLists.txt 2019-06-29 15:03:26.000000000 +0200 @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.8) project(elisa - VERSION 0.4.1 + VERSION 0.4.2 LANGUAGES CXX) set(CMAKE_CXX_STANDARD_REQUIRED ON) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/elisa-0.4.1/autotests/databaseinterfacetest.cpp new/elisa-0.4.2/autotests/databaseinterfacetest.cpp --- old/elisa-0.4.1/autotests/databaseinterfacetest.cpp 2019-06-19 22:40:52.000000000 +0200 +++ new/elisa-0.4.2/autotests/databaseinterfacetest.cpp 2019-06-29 15:02:46.000000000 +0200 @@ -4958,6 +4958,155 @@ QCOMPARE(musicDbTrackModifiedSpy.count(), 0); QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); } + + void enqueueTracksWithMissingMetadata() + { + QTemporaryFile databaseFile; + databaseFile.open(); + + qDebug() << "enqueueTracksWithMissingMetadata" << databaseFile.fileName(); + + DatabaseInterface musicDb; + + musicDb.init(QStringLiteral("enqueueTracksWithMissingMetadata"), databaseFile.fileName()); + + QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); + QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); + QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); + QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); + QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); + QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); + QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); + QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); + QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); + + QCOMPARE(musicDb.allAlbumsData().count(), 0); + QCOMPARE(musicDb.allArtistsData().count(), 0); + QCOMPARE(musicDb.allTracksData().count(), 0); + QCOMPARE(musicDbArtistAddedSpy.count(), 0); + QCOMPARE(musicDbAlbumAddedSpy.count(), 0); + QCOMPARE(musicDbTrackAddedSpy.count(), 0); + QCOMPARE(musicDbArtistRemovedSpy.count(), 0); + QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); + QCOMPARE(musicDbTrackRemovedSpy.count(), 0); + QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); + QCOMPARE(musicDbTrackModifiedSpy.count(), 0); + QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); + + auto fullTrack = MusicAudioTrack{true, QStringLiteral("$23"), QStringLiteral("0"), QStringLiteral("track6"), + QStringLiteral("artist2"), QStringLiteral("album3"), QStringLiteral("artist2"), + 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/test/$23"))}, + QDateTime::fromMSecsSinceEpoch(23), + QUrl::fromLocalFile(QStringLiteral("album3")), 5, true, + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; + + fullTrack.setBitRate(154); + fullTrack.setChannels(2); + fullTrack.setSampleRate(48000); + + auto newTrack = MusicAudioTrack{}; + + newTrack.setValid(true); + newTrack.setId(QStringLiteral("$29")); + newTrack.setParentId(QStringLiteral("0")); + newTrack.setTitle(QStringLiteral("track19")); + newTrack.setArtist(QStringLiteral("artist2")); + newTrack.setDuration(QTime::fromMSecsSinceStartOfDay(29)); + newTrack.setResourceURI(QUrl::fromLocalFile(QStringLiteral("/$29"))); + newTrack.setFileModificationTime(QDateTime::fromMSecsSinceEpoch(29)); + newTrack.setAlbumCover(QUrl::fromLocalFile(QStringLiteral("/withoutAlbum"))); + newTrack.setRating(9); + newTrack.setIsSingleDiscAlbum(true); + newTrack.setGenre(QStringLiteral("genre1")); + newTrack.setComposer(QStringLiteral("composer1")); + newTrack.setLyricist(QStringLiteral("lyricist1")); + newTrack.setHasEmbeddedCover(false); + + musicDb.insertTracksList({fullTrack, newTrack}, mNewCovers); + + QCOMPARE(musicDb.allAlbumsData().count(), 1); + QCOMPARE(musicDb.allArtistsData().count(), 1); + QCOMPARE(musicDb.allTracksData().count(), 2); + QCOMPARE(musicDbArtistAddedSpy.count(), 1); + QCOMPARE(musicDbAlbumAddedSpy.count(), 1); + QCOMPARE(musicDbTrackAddedSpy.count(), 1); + QCOMPARE(musicDbArtistRemovedSpy.count(), 0); + QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); + QCOMPARE(musicDbTrackRemovedSpy.count(), 0); + QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); + QCOMPARE(musicDbTrackModifiedSpy.count(), 0); + QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); + + auto firstTrackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track6"), QStringLiteral("artist2"), + QStringLiteral("album3"), 6, 1); + auto firstTrack = musicDb.trackDataFromDatabaseId(firstTrackId); + + auto firstTrackTitle = firstTrack.title(); + auto firstTrackArtist = firstTrack.artist(); + auto firstTrackAlbumArtist = firstTrack.albumArtist(); + auto firstTrackAlbum = firstTrack.album(); + auto firstTrackImage = firstTrack.albumCover(); + auto firstTrackDuration = firstTrack.duration(); + auto firstTrackMilliSecondsDuration = firstTrack.duration().msecsSinceStartOfDay(); + auto firstTrackTrackNumber = firstTrack.trackNumber(); + auto firstTrackDiscNumber = firstTrack.discNumber(); + const auto &firstTrackResource = firstTrack.resourceURI(); + auto firstTrackRating = firstTrack.rating(); + auto firstIsSingleDiscAlbum = firstTrack.isSingleDiscAlbum(); + + QCOMPARE(firstTrack.isValid(), true); + QCOMPARE(firstTrackTitle, QStringLiteral("track6")); + QCOMPARE(firstTrackArtist, QStringLiteral("artist2")); + QCOMPARE(firstTrackAlbumArtist, QStringLiteral("artist2")); + QCOMPARE(firstTrackAlbum, QStringLiteral("album3")); + QCOMPARE(firstTrackImage.isValid(), true); + QCOMPARE(firstTrackImage, QUrl::fromLocalFile(QStringLiteral("album3"))); + QCOMPARE(firstTrackDuration, QTime::fromMSecsSinceStartOfDay(23)); + QCOMPARE(firstTrackMilliSecondsDuration, 23); + QCOMPARE(firstTrackTrackNumber, 6); + QCOMPARE(firstTrackDiscNumber, 1); + QCOMPARE(firstTrackResource.isValid(), true); + QCOMPARE(firstTrackResource, QUrl::fromLocalFile(QStringLiteral("/test/$23"))); + QCOMPARE(firstTrackRating, 5); + QCOMPARE(firstIsSingleDiscAlbum, true); + + auto secondTrackId = musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track19"), QStringLiteral("artist2"), {}, {}, {}); + auto secondTrack = musicDb.trackDataFromDatabaseId(secondTrackId); + + auto secondTrackTitle = secondTrack.title(); + auto secondTrackArtist = secondTrack.artist(); + auto secondTrackAlbumArtist = secondTrack.albumArtist(); + auto secondTrackAlbum = secondTrack.album(); + auto secondTrackImage = secondTrack.albumCover(); + auto secondTrackDuration = secondTrack.duration(); + auto secondTrackMilliSecondsDuration = secondTrack.duration().msecsSinceStartOfDay(); + auto secondTrackTrackNumber = secondTrack.trackNumber(); + auto secondTrackDiscNumber = secondTrack.discNumber(); + auto secondTrackChannels = secondTrack.channels(); + auto secondTrackBitRate = secondTrack.bitRate(); + auto secondTrackSampleRate = secondTrack.sampleRate(); + const auto &secondTrackResource = secondTrack.resourceURI(); + auto secondTrackRating = secondTrack.rating(); + auto secondIsSingleDiscAlbum = secondTrack.isSingleDiscAlbum(); + + QCOMPARE(secondTrack.isValid(), true); + QCOMPARE(secondTrackTitle, QStringLiteral("track19")); + QCOMPARE(secondTrackArtist, QStringLiteral("artist2")); + QCOMPARE(secondTrackAlbumArtist, QString()); + QCOMPARE(secondTrackAlbum, QString()); + QCOMPARE(secondTrackImage.isValid(), false); + QCOMPARE(secondTrackDuration, QTime::fromMSecsSinceStartOfDay(29)); + QCOMPARE(secondTrackMilliSecondsDuration, 29); + QCOMPARE(secondTrackTrackNumber, 0); + QCOMPARE(secondTrackDiscNumber, 0); + QCOMPARE(secondTrackChannels, 0); + QCOMPARE(secondTrackBitRate, 0); + QCOMPARE(secondTrackSampleRate, 0); + QCOMPARE(secondTrackResource.isValid(), true); + QCOMPARE(secondTrackResource, QUrl::fromLocalFile(QStringLiteral("/$29"))); + QCOMPARE(secondTrackRating, 9); + QCOMPARE(secondIsSingleDiscAlbum, true); + } }; QTEST_GUILESS_MAIN(DatabaseInterfaceTests) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/elisa-0.4.1/autotests/mediaplaylisttest.cpp new/elisa-0.4.2/autotests/mediaplaylisttest.cpp --- old/elisa-0.4.1/autotests/mediaplaylisttest.cpp 2019-06-19 22:40:52.000000000 +0200 +++ new/elisa-0.4.2/autotests/mediaplaylisttest.cpp 2019-06-29 15:02:46.000000000 +0200 @@ -2918,6 +2918,140 @@ QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::MilliSecondsDurationRole).toInt(), 3); } +void MediaPlayListTest::restoreTrackWithoutAlbum() +{ + QTemporaryFile databaseFile; + databaseFile.open(); + + qDebug() << "restoreTrackWithoutAlbum" << databaseFile.fileName(); + + MediaPlayList myPlayList; + QAbstractItemModelTester testModel(&myPlayList); + DatabaseInterface myDatabaseContent; + TracksListener myListener(&myDatabaseContent); + + QSignalSpy rowsAboutToBeMovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeMoved); + QSignalSpy rowsAboutToBeRemovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeRemoved); + QSignalSpy rowsAboutToBeInsertedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeInserted); + QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved); + QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved); + QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted); + QSignalSpy persistentStateChangedSpy(&myPlayList, &MediaPlayList::persistentStateChanged); + QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged); + QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList); + QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList); + + QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); + QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); + QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); + QCOMPARE(rowsRemovedSpy.count(), 0); + QCOMPARE(rowsMovedSpy.count(), 0); + QCOMPARE(rowsInsertedSpy.count(), 0); + QCOMPARE(persistentStateChangedSpy.count(), 0); + QCOMPARE(dataChangedSpy.count(), 0); + QCOMPARE(newTrackByNameInListSpy.count(), 0); + QCOMPARE(newEntryInListSpy.count(), 0); + + myDatabaseContent.init(QStringLiteral("restoreTrackWithoutAlbum"), databaseFile.fileName()); + + connect(&myListener, &TracksListener::trackHasChanged, + &myPlayList, &MediaPlayList::trackChanged, + Qt::QueuedConnection); + connect(&myListener, &TracksListener::tracksListAdded, + &myPlayList, &MediaPlayList::tracksListAdded, + Qt::QueuedConnection); + connect(&myPlayList, &MediaPlayList::newTrackByNameInList, + &myListener, &TracksListener::trackByNameInList, + Qt::QueuedConnection); + connect(&myPlayList, &MediaPlayList::newEntryInList, + &myListener, &TracksListener::newEntryInList, + Qt::QueuedConnection); + connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, + &myListener, &TracksListener::tracksAdded); + + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); + + QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); + QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); + QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); + QCOMPARE(rowsRemovedSpy.count(), 0); + QCOMPARE(rowsMovedSpy.count(), 0); + QCOMPARE(rowsInsertedSpy.count(), 0); + QCOMPARE(persistentStateChangedSpy.count(), 0); + QCOMPARE(dataChangedSpy.count(), 0); + QCOMPARE(newTrackByNameInListSpy.count(), 0); + QCOMPARE(newEntryInListSpy.count(), 0); + + auto newTrack = MusicAudioTrack{}; + + newTrack.setValid(true); + newTrack.setId(QStringLiteral("$29")); + newTrack.setParentId(QStringLiteral("0")); + newTrack.setTitle(QStringLiteral("track19")); + newTrack.setArtist(QStringLiteral("artist2")); + newTrack.setDuration(QTime::fromMSecsSinceStartOfDay(29)); + newTrack.setResourceURI(QUrl::fromLocalFile(QStringLiteral("/$29"))); + newTrack.setFileModificationTime(QDateTime::fromMSecsSinceEpoch(29)); + newTrack.setAlbumCover(QUrl::fromLocalFile(QStringLiteral("withoutAlbum"))); + newTrack.setRating(9); + newTrack.setIsSingleDiscAlbum(true); + newTrack.setGenre(QStringLiteral("genre1")); + newTrack.setComposer(QStringLiteral("composer1")); + newTrack.setLyricist(QStringLiteral("lyricist1")); + newTrack.setHasEmbeddedCover(false); + + myDatabaseContent.insertTracksList({newTrack}, mNewCovers); + + QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); + QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); + QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); + QCOMPARE(rowsRemovedSpy.count(), 0); + QCOMPARE(rowsMovedSpy.count(), 0); + QCOMPARE(rowsInsertedSpy.count(), 0); + QCOMPARE(persistentStateChangedSpy.count(), 0); + QCOMPARE(dataChangedSpy.count(), 0); + QCOMPARE(newTrackByNameInListSpy.count(), 0); + QCOMPARE(newEntryInListSpy.count(), 0); + + auto newEntry = MediaPlayListEntry{}; + + newEntry.mTitle = QStringLiteral("track19"); + newEntry.mArtist = QStringLiteral("artist2"); + + myPlayList.enqueueRestoredEntry(newEntry); + + QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); + QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); + QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); + QCOMPARE(rowsRemovedSpy.count(), 0); + QCOMPARE(rowsMovedSpy.count(), 0); + QCOMPARE(rowsInsertedSpy.count(), 1); + QCOMPARE(persistentStateChangedSpy.count(), 1); + QCOMPARE(dataChangedSpy.count(), 1); + QCOMPARE(newTrackByNameInListSpy.count(), 1); + QCOMPARE(newEntryInListSpy.count(), 0); + + QCOMPARE(dataChangedSpy.wait(), true); + + QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); + QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); + QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); + QCOMPARE(rowsRemovedSpy.count(), 0); + QCOMPARE(rowsMovedSpy.count(), 0); + QCOMPARE(rowsInsertedSpy.count(), 1); + QCOMPARE(persistentStateChangedSpy.count(), 1); + QCOMPARE(dataChangedSpy.count(), 2); + QCOMPARE(newTrackByNameInListSpy.count(), 1); + QCOMPARE(newEntryInListSpy.count(), 0); + + QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track19")); + QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::AlbumRole).toString(), {}); + QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist2")); + QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::TrackNumberRole).toInt(), 0); + QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::DiscNumberRole).toInt(), 0); + QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::MilliSecondsDurationRole).toInt(), 29); +} + void MediaPlayListTest::testHasHeaderAlbumWithSameTitle() { MediaPlayList myPlayList; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/elisa-0.4.1/autotests/mediaplaylisttest.h new/elisa-0.4.2/autotests/mediaplaylisttest.h --- old/elisa-0.4.1/autotests/mediaplaylisttest.h 2019-06-19 22:40:52.000000000 +0200 +++ new/elisa-0.4.2/autotests/mediaplaylisttest.h 2019-06-29 15:02:46.000000000 +0200 @@ -73,6 +73,8 @@ void restoreMultipleIdenticalTracks(); + void restoreTrackWithoutAlbum(); + void testHasHeaderAlbumWithSameTitle(); void testSavePersistentState(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/elisa-0.4.1/org.kde.elisa.appdata.xml new/elisa-0.4.2/org.kde.elisa.appdata.xml --- old/elisa-0.4.1/org.kde.elisa.appdata.xml 2019-06-19 22:40:52.000000000 +0200 +++ new/elisa-0.4.2/org.kde.elisa.appdata.xml 2019-06-29 15:02:46.000000000 +0200 @@ -140,6 +140,8 @@ <project_group>KDE</project_group> <content_rating type="oars-1.0"/> <releases> + <release version="0.4.2" date="2019-06-30"/> + <release version="0.4.1" date="2019-06-20"/> <release version="0.4.0" date="2019-05-20"/> <release version="0.3.80" date="2019-05-04"/> <release version="0.3.0" date="2018-09-29"/> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/elisa-0.4.1/po/de/elisa.po new/elisa-0.4.2/po/de/elisa.po --- old/elisa-0.4.1/po/de/elisa.po 2019-06-19 22:41:06.000000000 +0200 +++ new/elisa-0.4.2/po/de/elisa.po 2019-06-29 15:03:00.000000000 +0200 @@ -1,14 +1,14 @@ # Copyright (C) YEAR This_file_is_part_of_KDE # This file is distributed under the same license as the PACKAGE package. # -# Burkhard Lück <[email protected]>, 2016, 2017, 2018. +# Burkhard Lück <[email protected]>, 2016, 2017, 2018, 2019. # Frederik Schwarzer <[email protected]>, 2016, 2018. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2019-06-13 07:41+0200\n" -"PO-Revision-Date: 2018-09-23 20:42+0100\n" +"PO-Revision-Date: 2019-06-24 14:33+0200\n" "Last-Translator: Burkhard Lück <[email protected]>\n" "Language-Team: German <[email protected]>\n" "Language: de\n" @@ -16,7 +16,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Lokalize 2.0\n" +"X-Generator: Lokalize 18.12.3\n" #, kde-format msgctxt "NAME OF TRANSLATORS" @@ -69,10 +69,9 @@ msgstr "Ein einfacher Medienspieler geschrieben mit KDE Frameworks" #: main.cpp:118 -#, fuzzy, kde-format -#| msgid "(c) 2015-2018, Elisa contributors" +#, kde-format msgid "(c) 2015-2019, Elisa contributors" -msgstr "(c) 2015-2018, Elisa-Mitwirkende" +msgstr "(c) 2015-2019, Elisa-Mitwirkende" #: main.cpp:120 #, kde-format @@ -105,154 +104,118 @@ msgstr "Verschiedene Verbesserungen an der Bedienungsoberfläche" #: models/trackmetadatamodel.cpp:64 -#, fuzzy, kde-format -#| msgctxt "Track title for track metadata view" -#| msgid "Title:" +#, kde-format msgctxt "Track title for track metadata view" msgid "Title" -msgstr "Titel:" +msgstr "Titel" #: models/trackmetadatamodel.cpp:67 -#, fuzzy, kde-format -#| msgctxt "Duration label for track metadata view" -#| msgid "Duration:" +#, kde-format msgctxt "Duration label for track metadata view" msgid "Duration" -msgstr "Dauer:" +msgstr "Dauer" #: models/trackmetadatamodel.cpp:70 -#, fuzzy, kde-format -#| msgctxt "Track artist for track metadata view" -#| msgid "Artist:" +#, kde-format msgctxt "Track artist for track metadata view" msgid "Artist" -msgstr "Interpret:" +msgstr "Interpret" #: models/trackmetadatamodel.cpp:73 -#, fuzzy, kde-format -#| msgctxt "Album name for track metadata view" -#| msgid "Album:" +#, kde-format msgctxt "Album name for track metadata view" msgid "Album" -msgstr "Album:" +msgstr "Album" #: models/trackmetadatamodel.cpp:76 -#, fuzzy, kde-format -#| msgctxt "Album artist for track metadata view" -#| msgid "Album Artist:" +#, kde-format msgctxt "Album artist for track metadata view" msgid "Album Artist" -msgstr "Interpret des Albums:" +msgstr "Interpret des Albums" #: models/trackmetadatamodel.cpp:79 -#, fuzzy, kde-format -#| msgctxt "Track number for track metadata view" -#| msgid "Track Number:" +#, kde-format msgctxt "Track number for track metadata view" msgid "Track Number" -msgstr "Nummer des Stücks:" +msgstr "Nummer des Stücks" #: models/trackmetadatamodel.cpp:82 -#, fuzzy, kde-format -#| msgctxt "Disc number for track metadata view" -#| msgid "Disc Number:" +#, kde-format msgctxt "Disc number for track metadata view" msgid "Disc Number" -msgstr "CD-Nummer:" +msgstr "CD-Nummer" #: models/trackmetadatamodel.cpp:85 -#, fuzzy, kde-format -#| msgctxt "Rating label for information panel" -#| msgid "Rating:" +#, kde-format msgctxt "Rating label for information panel" msgid "Rating" -msgstr "Bewertung:" +msgstr "Bewertung" #: models/trackmetadatamodel.cpp:88 -#, fuzzy, kde-format -#| msgctxt "Genre label for track metadata view" -#| msgid "Genre:" +#, kde-format msgctxt "Genre label for track metadata view" msgid "Genre" -msgstr "Genre:" +msgstr "Genre" #: models/trackmetadatamodel.cpp:91 -#, fuzzy, kde-format -#| msgctxt "Lyricist label for track metadata view" -#| msgid "Lyricist:" +#, kde-format msgctxt "Lyricist label for track metadata view" msgid "Lyricist" -msgstr "Texter:" +msgstr "Texter" #: models/trackmetadatamodel.cpp:94 -#, fuzzy, kde-format -#| msgctxt "Composer name for track metadata view" -#| msgid "Composer:" +#, kde-format msgctxt "Composer name for track metadata view" msgid "Composer" -msgstr "Komponist:" +msgstr "Komponist" #: models/trackmetadatamodel.cpp:97 -#, fuzzy, kde-format -#| msgctxt "Comment label for track metadata view" -#| msgid "Comment:" +#, kde-format msgctxt "Comment label for track metadata view" msgid "Comment" -msgstr "Kommentar:" +msgstr "Kommentar" #: models/trackmetadatamodel.cpp:100 -#, fuzzy, kde-format -#| msgctxt "Year label for track metadata view" -#| msgid "Year:" +#, kde-format msgctxt "Year label for track metadata view" msgid "Year" -msgstr "Jahr:" +msgstr "Jahr" #: models/trackmetadatamodel.cpp:103 -#, fuzzy, kde-format -#| msgctxt "Channels label for track metadata view" -#| msgid "Channels:" +#, kde-format msgctxt "Channels label for track metadata view" msgid "Channels" -msgstr "Kanäle:" +msgstr "Kanäle" #: models/trackmetadatamodel.cpp:106 -#, fuzzy, kde-format -#| msgctxt "Bit rate label for track metadata view" -#| msgid "Bit Rate:" +#, kde-format msgctxt "Bit rate label for track metadata view" msgid "Bit Rate" -msgstr "Bitrate:" +msgstr "Bitrate" #: models/trackmetadatamodel.cpp:109 -#, fuzzy, kde-format -#| msgctxt "Sample Rate label for track metadata view" -#| msgid "Sample Rate:" +#, kde-format msgctxt "Sample Rate label for track metadata view" msgid "Sample Rate" -msgstr "Abtastrate:" +msgstr "Abtastrate" #: models/trackmetadatamodel.cpp:112 #, kde-format msgctxt "Last play date label for track metadata view" msgid "Last played" -msgstr "" +msgstr "Letzte Wiedergabe" #: models/trackmetadatamodel.cpp:115 -#, fuzzy, kde-format -#| msgctxt "Play now current track from play list" -#| msgid "Play Now" +#, kde-format msgctxt "Play counter label for track metadata view" msgid "Play count" -msgstr "Jetzt abspielen" +msgstr "Wiedergabezähler" #: models/trackmetadatamodel.cpp:118 qml/ContextViewLyrics.qml:32 -#, fuzzy, kde-format -#| msgctxt "Lyricist label for track metadata view" -#| msgid "Lyricist:" +#, kde-format msgctxt "Lyrics label for track metadata view" msgid "Lyrics" -msgstr "Texter:" +msgstr "Liedtext" #: models/viewsmodel.cpp:44 #, kde-format @@ -261,18 +224,16 @@ msgstr "Wiedergabe" #: models/viewsmodel.cpp:45 -#, fuzzy, kde-format -#| msgctxt "Clear playlist and play" -#| msgid "Replace and Play" +#, kde-format msgctxt "Title of the view of recently played tracks" msgid "Recently Played" -msgstr "Ersetzen und abspielen" +msgstr "Vor kurzem gespielt" #: models/viewsmodel.cpp:46 #, kde-format msgctxt "Title of the view of frequently played tracks" msgid "Frequently Played" -msgstr "" +msgstr "Oft gespielt" #: models/viewsmodel.cpp:51 qml/FileBrowserView.qml:70 #, kde-format @@ -284,7 +245,7 @@ #, kde-format msgctxt "explanation for sleep inhibit during play of music" msgid "Playing Music" -msgstr "" +msgstr "Musik-Wiedergabe" #: qml/ApplicationMenu.qml:26 qml/MediaPlayerControl.qml:62 #, kde-format @@ -296,7 +257,7 @@ #, kde-format msgctxt "Refresh Music Collection application menu entry" msgid "Refresh Music Collection" -msgstr "" +msgstr "Musik-Sammlung neu einlesen" #: qml/ApplicationMenu.qml:63 #, kde-format @@ -311,9 +272,7 @@ msgstr "Wiedergabeliste anzeigen" #: qml/ContextView.qml:55 -#, fuzzy, kde-format -#| msgctxt "Title of the view of the playlist" -#| msgid "Now Playing" +#, kde-format msgctxt "Title of the context view related to the currently playing track" msgid "Now Playing" msgstr "Wiedergabe" @@ -352,12 +311,10 @@ msgstr "Jetzt abspielen und Wiedergabeliste ersetzen" #: qml/GridBrowserDelegate.qml:162 -#, fuzzy, kde-format -#| msgctxt "Hide playlist" -#| msgid "Hide Playlist" +#, kde-format msgctxt "Add whole container to play list" msgid "Add to playlist" -msgstr "Wiedergabeliste ausblenden" +msgstr "Zur Wiedergabeliste hinzufügen" #: qml/HeaderBar.qml:335 #, kde-format @@ -461,9 +418,7 @@ msgstr "Wiedergabeliste" #: qml/MediaPlayListView.qml:131 -#, fuzzy, kde-format -#| msgid "1 track" -#| msgid_plural "%1 track" +#, kde-format msgid "1 track" msgid_plural "%1 tracks" msgstr[0] "1 Stück" @@ -484,18 +439,16 @@ msgstr "" #: qml/MediaPlayListView.qml:273 -#, fuzzy, kde-format -#| msgctxt "Title of the view of the playlist" -#| msgid "Playlist" +#, kde-format msgctxt "Playlist cleared" msgid "Playlist cleared" -msgstr "Wiedergabeliste" +msgstr "Wiedergabeliste geleert" #: qml/MediaPlayListView.qml:292 #, kde-format msgctxt "Undo" msgid "Undo" -msgstr "" +msgstr "Zurücknehmen" #: qml/MediaTrackDelegate.qml:134 #, kde-format @@ -629,4 +582,4 @@ #, kde-format msgctxt "message to show when Elisa is scanning music files" msgid "Scanning music" -msgstr "" \ No newline at end of file +msgstr "Musik wird durchsucht" \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/elisa-0.4.1/po/it/elisa.po new/elisa-0.4.2/po/it/elisa.po --- old/elisa-0.4.1/po/it/elisa.po 2019-06-19 22:41:12.000000000 +0200 +++ new/elisa-0.4.2/po/it/elisa.po 2019-06-29 15:03:06.000000000 +0200 @@ -16,7 +16,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Lokalize 2.0\n" +"X-Generator: Lokalize 18.12.2\n" #, kde-format msgctxt "NAME OF TRANSLATORS" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/elisa-0.4.1/po/pl/elisa.po new/elisa-0.4.2/po/pl/elisa.po --- old/elisa-0.4.1/po/pl/elisa.po 2019-06-19 22:41:18.000000000 +0200 +++ new/elisa-0.4.2/po/pl/elisa.po 2019-06-29 15:03:11.000000000 +0200 @@ -7,7 +7,7 @@ "Project-Id-Version: \n" "Report-Msgid-Bugs-To: https://bugs.kde.org\n" "POT-Creation-Date: 2019-06-13 07:41+0200\n" -"PO-Revision-Date: 2019-05-25 07:50+0200\n" +"PO-Revision-Date: 2019-06-20 20:56+0200\n" "Last-Translator: Łukasz Wojniłowicz <[email protected]>\n" "Language-Team: Polish <[email protected]>\n" "Language: pl\n" @@ -203,15 +203,13 @@ #, kde-format msgctxt "Last play date label for track metadata view" msgid "Last played" -msgstr "" +msgstr "Ostatnie odtworzenie" #: models/trackmetadatamodel.cpp:115 -#, fuzzy, kde-format -#| msgctxt "Play now current track from play list" -#| msgid "Play Now" +#, kde-format msgctxt "Play counter label for track metadata view" msgid "Play count" -msgstr "Odtwórz teraz" +msgstr "Licznik odtworzeń" #: models/trackmetadatamodel.cpp:118 qml/ContextViewLyrics.qml:32 #, kde-format @@ -226,18 +224,16 @@ msgstr "Teraz odtwarzany" #: models/viewsmodel.cpp:45 -#, fuzzy, kde-format -#| msgctxt "Clear playlist and play" -#| msgid "Replace and Play" +#, kde-format msgctxt "Title of the view of recently played tracks" msgid "Recently Played" -msgstr "Zastąp i odtwarzaj" +msgstr "Ostatnio odtwarzane" #: models/viewsmodel.cpp:46 #, kde-format msgctxt "Title of the view of frequently played tracks" msgid "Frequently Played" -msgstr "" +msgstr "Najczęściej odtwarzane" #: models/viewsmodel.cpp:51 qml/FileBrowserView.qml:70 #, kde-format @@ -261,7 +257,7 @@ #, kde-format msgctxt "Refresh Music Collection application menu entry" msgid "Refresh Music Collection" -msgstr "" +msgstr "Odśwież zbiór muzyki" #: qml/ApplicationMenu.qml:63 #, kde-format @@ -327,50 +323,46 @@ msgstr[2] "jeszcze %1 utworów" #: qml/MediaPlayerControl.qml:69 -#, fuzzy, kde-format -#| msgid "Repeat" +#, kde-format msgctxt "toggle repeat mode for playlist" msgid "Toggle Repeat" -msgstr "Powtórz" +msgstr "Włącz/wyłącz powtarzanie" #: qml/MediaPlayerControl.qml:76 -#, fuzzy, kde-format -#| msgid "Shuffle" +#, kde-format msgctxt "toggle shuffle mode for playlist" msgid "Toggle Shuffle" -msgstr "Kolejność losowa" +msgstr "Przełącz losową kolejność" #: qml/MediaPlayerControl.qml:83 -#, fuzzy, kde-format -#| msgctxt "Toggle between ascending and descending order" -#| msgid "Toggle sort order" +#, kde-format msgctxt "toggle mute mode for player" msgid "Toggle Mute" -msgstr "Przełącz porządek szeregowania" +msgstr "Przełącz wyciszenie" #: qml/MediaPlayerControl.qml:90 #, kde-format msgctxt "toggle play and pause for the audio player" msgid "Toggle Play and Pause" -msgstr "" +msgstr "Odtwarzaj/Wstrzymaj" #: qml/MediaPlayerControl.qml:98 #, kde-format msgctxt "skip backward in playlists" msgid "Skip Backward" -msgstr "" +msgstr "Przejdź wstecz" #: qml/MediaPlayerControl.qml:106 #, kde-format msgctxt "skip forward in playlists" msgid "Skip Forward" -msgstr "" +msgstr "Przejdź naprzód" #: qml/MediaPlayerControl.qml:114 #, kde-format msgctxt "toggle between maximized and minimized ivre" msgid "Toggle Maximize" -msgstr "" +msgstr "Przełącz maksymalizację" #: qml/MediaPlayerControl.qml:189 #, kde-format @@ -432,7 +424,7 @@ #, kde-format msgctxt "Your playlist is empty" msgid "Your playlist is empty" -msgstr "" +msgstr "Twoja lista odtwarzania jest pusta" #: qml/MediaPlayListView.qml:222 #, kde-format @@ -441,6 +433,8 @@ "Add some songs to get started. You can browse your music using the views on " "the left." msgstr "" +"Dodaj jakieś utwory, aby zacząć. Swoją muzykę możesz przeglądać w widokach " +"po lewej." #: qml/MediaPlayListView.qml:273 #, kde-format diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/elisa-0.4.1/src/databaseinterface.cpp new/elisa-0.4.2/src/databaseinterface.cpp --- old/elisa-0.4.1/src/databaseinterface.cpp 2019-06-19 22:40:52.000000000 +0200 +++ new/elisa-0.4.2/src/databaseinterface.cpp 2019-06-29 15:02:46.000000000 +0200 @@ -702,8 +702,8 @@ return result; } -qulonglong DatabaseInterface::trackIdFromTitleAlbumTrackDiscNumber(const QString &title, const QString &artist, const QString &album, - int trackNumber, int discNumber) +qulonglong DatabaseInterface::trackIdFromTitleAlbumTrackDiscNumber(const QString &title, const QString &artist, const std::optional<QString> &album, + std::optional<int> trackNumber, std::optional<int> discNumber) { auto result = qulonglong(0); @@ -3070,6 +3070,20 @@ "GROUP_CONCAT(tracks.`ArtistName`, ', ') as AllArtists, " "MAX(tracks.`Rating`) as HighestRating, " "GROUP_CONCAT(genres.`Name`, ', ') as AllGenres, " + "(" + "SELECT " + "COUNT(DISTINCT tracks2.DiscNumber) <= 1 " + "FROM " + "`Tracks` tracks2 " + "WHERE " + "tracks2.`AlbumTitle` = album.`Title` AND " + "(tracks2.`AlbumArtistName` = album.`ArtistName` OR " + "(tracks2.`AlbumArtistName` IS NULL AND " + "album.`ArtistName` IS NULL" + ")" + ") AND " + "tracks2.`AlbumPath` = album.`AlbumPath` " + ") as `IsSingleDiscAlbum`, " "( " "SELECT tracksCover.`FileName` " "FROM " @@ -3131,6 +3145,20 @@ "GROUP_CONCAT(tracks.`ArtistName`, ', ') as AllArtists, " "MAX(tracks.`Rating`) as HighestRating, " "GROUP_CONCAT(genres.`Name`, ', ') as AllGenres, " + "(" + "SELECT " + "COUNT(DISTINCT tracks2.DiscNumber) <= 1 " + "FROM " + "`Tracks` tracks2 " + "WHERE " + "tracks2.`AlbumTitle` = album.`Title` AND " + "(tracks2.`AlbumArtistName` = album.`ArtistName` OR " + "(tracks2.`AlbumArtistName` IS NULL AND " + "album.`ArtistName` IS NULL" + ")" + ") AND " + "tracks2.`AlbumPath` = album.`AlbumPath` " + ") as `IsSingleDiscAlbum`, " "( " "SELECT tracksCover.`FileName` " "FROM " @@ -4770,9 +4798,9 @@ "`Tracks` tracks " "WHERE " "tracks.`Title` = :title AND " - "tracks.`AlbumTitle` = :album AND " - "tracks.`TrackNumber` = :trackNumber AND " - "tracks.`DiscNumber` = :discNumber AND " + "(tracks.`AlbumTitle` = :album OR (:album IS NULL AND tracks.`AlbumTitle` IS NULL)) AND " + "(tracks.`TrackNumber` = :trackNumber OR (:trackNumber IS NULL AND tracks.`TrackNumber` IS NULL)) AND " + "(tracks.`DiscNumber` = :discNumber OR (:discNumber IS NULL AND tracks.`DiscNumber` IS NULL)) AND " "tracks.`ArtistName` = :artist"); auto result = prepareQuery(d->mSelectTrackIdFromTitleArtistAlbumTrackDiscNumberQuery, selectTrackQueryText); @@ -5632,9 +5660,13 @@ d->mInsertTrackQuery.bindValue(QStringLiteral(":albumPath"), trackPath); if (oneTrack.trackNumberIsValid()) { d->mInsertTrackQuery.bindValue(QStringLiteral(":trackNumber"), oneTrack.trackNumber()); + } else { + d->mInsertTrackQuery.bindValue(QStringLiteral(":trackNumber"), {}); } if (oneTrack.discNumberIsValid()) { d->mInsertTrackQuery.bindValue(QStringLiteral(":discNumber"), oneTrack.discNumber()); + } else { + d->mInsertTrackQuery.bindValue(QStringLiteral(":discNumber"), {}); } d->mInsertTrackQuery.bindValue(QStringLiteral(":trackDuration"), QVariant::fromValue<qlonglong>(oneTrack.duration().msecsSinceStartOfDay())); d->mInsertTrackQuery.bindValue(QStringLiteral(":trackRating"), oneTrack.rating()); @@ -5657,12 +5689,18 @@ d->mInsertTrackQuery.bindValue(QStringLiteral(":year"), oneTrack.year()); if (oneTrack.channelsIsValid()) { d->mInsertTrackQuery.bindValue(QStringLiteral(":channels"), oneTrack.channels()); + } else { + d->mInsertTrackQuery.bindValue(QStringLiteral(":channels"), {}); } if (oneTrack.bitRateIsValid()) { d->mInsertTrackQuery.bindValue(QStringLiteral(":bitRate"), oneTrack.bitRate()); + } else { + d->mInsertTrackQuery.bindValue(QStringLiteral(":bitRate"), {}); } if (oneTrack.sampleRateIsValid()) { d->mInsertTrackQuery.bindValue(QStringLiteral(":sampleRate"), oneTrack.sampleRate()); + } else { + d->mInsertTrackQuery.bindValue(QStringLiteral(":sampleRate"), {}); } d->mInsertTrackQuery.bindValue(QStringLiteral(":hasEmbeddedCover"), oneTrack.hasEmbeddedCover()); @@ -6455,8 +6493,8 @@ return result; } -qulonglong DatabaseInterface::internalTrackIdFromTitleAlbumTracDiscNumber(const QString &title, const QString &artist, const QString &album, - int trackNumber, int discNumber) +qulonglong DatabaseInterface::internalTrackIdFromTitleAlbumTracDiscNumber(const QString &title, const QString &artist, const std::optional<QString> &album, + std::optional<int> trackNumber, std::optional<int> discNumber) { auto result = qulonglong(0); @@ -6466,9 +6504,21 @@ d->mSelectTrackIdFromTitleArtistAlbumTrackDiscNumberQuery.bindValue(QStringLiteral(":title"), title); d->mSelectTrackIdFromTitleArtistAlbumTrackDiscNumberQuery.bindValue(QStringLiteral(":artist"), artist); - d->mSelectTrackIdFromTitleArtistAlbumTrackDiscNumberQuery.bindValue(QStringLiteral(":album"), album); - d->mSelectTrackIdFromTitleArtistAlbumTrackDiscNumberQuery.bindValue(QStringLiteral(":trackNumber"), trackNumber); - d->mSelectTrackIdFromTitleArtistAlbumTrackDiscNumberQuery.bindValue(QStringLiteral(":discNumber"), discNumber); + if (album.has_value()) { + d->mSelectTrackIdFromTitleArtistAlbumTrackDiscNumberQuery.bindValue(QStringLiteral(":album"), album.value()); + } else { + d->mSelectTrackIdFromTitleArtistAlbumTrackDiscNumberQuery.bindValue(QStringLiteral(":album"), {}); + } + if (trackNumber.has_value()) { + d->mSelectTrackIdFromTitleArtistAlbumTrackDiscNumberQuery.bindValue(QStringLiteral(":trackNumber"), trackNumber.value()); + } else { + d->mSelectTrackIdFromTitleArtistAlbumTrackDiscNumberQuery.bindValue(QStringLiteral(":trackNumber"), {}); + } + if (discNumber.has_value()) { + d->mSelectTrackIdFromTitleArtistAlbumTrackDiscNumberQuery.bindValue(QStringLiteral(":discNumber"), discNumber.value()); + } else { + d->mSelectTrackIdFromTitleArtistAlbumTrackDiscNumberQuery.bindValue(QStringLiteral(":discNumber"), {}); + } auto queryResult = execQuery(d->mSelectTrackIdFromTitleArtistAlbumTrackDiscNumberQuery); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/elisa-0.4.1/src/databaseinterface.h new/elisa-0.4.2/src/databaseinterface.h --- old/elisa-0.4.1/src/databaseinterface.h 2019-06-19 22:40:52.000000000 +0200 +++ new/elisa-0.4.2/src/databaseinterface.h 2019-06-29 15:02:46.000000000 +0200 @@ -33,6 +33,7 @@ #include <QPair> #include <memory> +#include <optional> class DatabaseInterfacePrivate; class QMutex; @@ -127,6 +128,11 @@ return operator[](key_type::AlbumIdRole).toULongLong(); } + bool hasAlbum() const + { + return find(key_type::AlbumRole) != end(); + } + QString album() const { return operator[](key_type::AlbumRole).toString(); @@ -137,11 +143,21 @@ return operator[](key_type::AlbumArtistRole).toString(); } + bool hasTrackNumber() const + { + return find(key_type::TrackNumberRole) != end(); + } + int trackNumber() const { return operator[](key_type::TrackNumberRole).toInt(); } + bool hasDiscNumber() const + { + return find(key_type::DiscNumberRole) != end(); + } + int discNumber() const { return operator[](key_type::DiscNumberRole).toInt(); @@ -367,8 +383,8 @@ TrackDataType trackDataFromDatabaseId(qulonglong id); - qulonglong trackIdFromTitleAlbumTrackDiscNumber(const QString &title, const QString &artist, const QString &album, - int trackNumber, int discNumber); + qulonglong trackIdFromTitleAlbumTrackDiscNumber(const QString &title, const QString &artist, const std::optional<QString> &album, + std::optional<int> trackNumber, std::optional<int> discNumber); qulonglong trackIdFromFileName(const QUrl &fileName); @@ -447,8 +463,8 @@ MusicAudioTrack internalTrackFromDatabaseId(qulonglong id); - qulonglong internalTrackIdFromTitleAlbumTracDiscNumber(const QString &title, const QString &artist, const QString &album, - int trackNumber, int discNumber); + qulonglong internalTrackIdFromTitleAlbumTracDiscNumber(const QString &title, const QString &artist, const std::optional<QString> &album, + std::optional<int> trackNumber, std::optional<int> discNumber); qulonglong getDuplicateTrackIdFromTitleAlbumTrackDiscNumber(const QString &title, const QString &trackArtist, const QString &album, const QString &albumArtist, const QString &trackPath, int trackNumber, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/elisa-0.4.1/src/manageaudioplayer.cpp new/elisa-0.4.2/src/manageaudioplayer.cpp --- old/elisa-0.4.1/src/manageaudioplayer.cpp 2019-06-19 22:40:52.000000000 +0200 +++ new/elisa-0.4.2/src/manageaudioplayer.cpp 2019-06-29 15:02:46.000000000 +0200 @@ -557,8 +557,9 @@ return; } - if (*itTitle != mCurrentTrack.data(mTitleRole) || *itArtistName != mCurrentTrack.data(mArtistNameRole) || - *itAlbumName != mCurrentTrack.data(mAlbumNameRole)) { + if (*itTitle != mCurrentTrack.data(mTitleRole) || + (itArtistName->isValid() && *itArtistName != mCurrentTrack.data(mArtistNameRole)) || + (itAlbumName->isValid() && *itAlbumName != mCurrentTrack.data(mAlbumNameRole))) { if (mCurrentTrack.isValid() && mCurrentTrack.data(mTitleRole).isValid() && mCurrentTrack.data(mArtistNameRole).isValid() && mCurrentTrack.data(mAlbumNameRole).isValid()) { mPersistentState.clear(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/elisa-0.4.1/src/mediaplaylist.cpp new/elisa-0.4.2/src/mediaplaylist.cpp --- old/elisa-0.4.1/src/mediaplaylist.cpp 2019-06-19 22:40:52.000000000 +0200 +++ new/elisa-0.4.2/src/mediaplaylist.cpp 2019-06-29 15:02:46.000000000 +0200 @@ -146,7 +146,14 @@ d->mTrackData[index.row()][TrackDataType::key_type::ImageUrlRole].toUrl().toString()}}.toJson(); break; default: - result = d->mTrackData[index.row()][static_cast<TrackDataType::key_type>(role)]; + const auto &trackData = d->mTrackData[index.row()]; + auto roleEnum = static_cast<TrackDataType::key_type>(role); + auto itData = trackData.find(roleEnum); + if (itData != trackData.end()) { + result = itData.value(); + } else { + result = {}; + } } } else { switch(role) @@ -338,11 +345,11 @@ Q_EMIT newEntryInList(0, entryString, ElisaUtils::FileName); } } else { - Q_EMIT newTrackByNameInList(newEntry.mTitle.toString(), - newEntry.mArtist.toString(), - newEntry.mAlbum.toString(), - newEntry.mTrackNumber.toInt(), - newEntry.mDiscNumber.toInt()); + Q_EMIT newTrackByNameInList(newEntry.mTitle, + newEntry.mArtist, + newEntry.mAlbum, + newEntry.mTrackNumber, + newEntry.mDiscNumber); } } else { Q_EMIT newEntryInList(newEntry.mId, {}, ElisaUtils::Track); @@ -710,9 +717,21 @@ oneData.push_back(oneTrack.title()); oneData.push_back(oneTrack.artist()); - oneData.push_back(oneTrack.album()); - oneData.push_back(QString::number(oneTrack.trackNumber())); - oneData.push_back(QString::number(oneTrack.discNumber())); + if (oneTrack.hasAlbum()) { + oneData.push_back(oneTrack.album()); + } else { + oneData.push_back({}); + } + if (oneTrack.hasTrackNumber()) { + oneData.push_back(QString::number(oneTrack.trackNumber())); + } else { + oneData.push_back({}); + } + if (oneTrack.hasDiscNumber()) { + oneData.push_back(QString::number(oneTrack.discNumber())); + } else { + oneData.push_back({}); + } oneData.push_back(QString::number(oneEntry.mEntryType)); result.push_back(QVariant(oneData)); @@ -778,10 +797,10 @@ auto restoredTitle = trackData[0]; auto restoredArtist = trackData[1]; auto restoredAlbum = trackData[2]; - auto restoredTrackNumber = trackData[3].toInt(); - auto restoredDiscNumber = trackData[4].toInt(); + auto restoredTrackNumber = trackData[3]; + auto restoredDiscNumber = trackData[4]; - ElisaUtils::PlayListEntryType mEntryType = static_cast<ElisaUtils::PlayListEntryType>(trackData[5].toInt()); + auto mEntryType = static_cast<ElisaUtils::PlayListEntryType>(trackData[5].toInt()); enqueueRestoredEntry({restoredTitle, restoredArtist, restoredAlbum, restoredTrackNumber, restoredDiscNumber, mEntryType}); } @@ -893,19 +912,23 @@ } continue; } else if (oneEntry.mEntryType != ElisaUtils::Artist && !oneEntry.mIsValid && !oneEntry.mTrackUrl.isValid()) { - if (track.title() != oneEntry.mTitle) { + if (track.find(TrackDataType::key_type::TitleRole) != track.end() && + track.title() != oneEntry.mTitle) { continue; } - if (track.album() != oneEntry.mAlbum) { + if (track.find(TrackDataType::key_type::AlbumRole) != track.end() && + track.album() != oneEntry.mAlbum) { continue; } - if (track.trackNumber() != oneEntry.mTrackNumber) { + if (track.find(TrackDataType::key_type::TrackNumberRole) != track.end() && + track.trackNumber() != oneEntry.mTrackNumber) { continue; } - if (track.discNumber() != oneEntry.mDiscNumber) { + if (track.find(TrackDataType::key_type::DiscNumberRole) != track.end() && + track.discNumber() != oneEntry.mDiscNumber) { continue; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/elisa-0.4.1/src/mediaplaylist.h new/elisa-0.4.2/src/mediaplaylist.h --- old/elisa-0.4.1/src/mediaplaylist.h 2019-06-19 22:40:52.000000000 +0200 +++ new/elisa-0.4.2/src/mediaplaylist.h 2019-06-29 15:02:46.000000000 +0200 @@ -175,7 +175,7 @@ void hideUndoInline(); - void newTrackByNameInList(const QString &title, const QString &artist, const QString &album, int trackNumber, int discNumber); + void newTrackByNameInList(const QVariant &title, const QVariant &artist, const QVariant &album, const QVariant &trackNumber, const QVariant &discNumber); void newEntryInList(qulonglong newDatabaseId, const QString &entryTitle, @@ -319,6 +319,12 @@ mTrackNumber(trackNumber), mDiscNumber(discNumber), mEntryType(entryType) { } + MediaPlayListEntry(QVariant title, QVariant artist, QVariant album, QVariant trackNumber, + QVariant discNumber, ElisaUtils::PlayListEntryType entryType = ElisaUtils::Unknown) + : mTitle(std::move(title)), mAlbum(std::move(album)), mArtist(std::move(artist)), + mTrackNumber(std::move(trackNumber)), mDiscNumber(std::move(discNumber)), mEntryType(entryType) { + } + explicit MediaPlayListEntry(const MusicAudioTrack &track) : mTitle(track.title()), mAlbum(track.albumName()), mTrackNumber(track.trackNumber()), mDiscNumber(track.discNumber()), mId(track.databaseId()), mIsValid(true) { @@ -353,9 +359,9 @@ QVariant mTrackUrl; - QVariant mTrackNumber = -1; + QVariant mTrackNumber; - QVariant mDiscNumber = -1; + QVariant mDiscNumber; qulonglong mId = 0; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/elisa-0.4.1/src/qml/ViewSelector.qml new/elisa-0.4.2/src/qml/ViewSelector.qml --- old/elisa-0.4.1/src/qml/ViewSelector.qml 2019-06-19 22:40:52.000000000 +0200 +++ new/elisa-0.4.2/src/qml/ViewSelector.qml 2019-06-29 15:02:46.000000000 +0200 @@ -40,19 +40,6 @@ implicitWidth: elisaTheme.dp(225) - Rectangle { - anchors.fill: parent - z: 1 - - border.color: myPalette.base - - Behavior on border.color { - ColorAnimation { - duration: 300 - } - } - } - ScrollView { focus: true diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/elisa-0.4.1/src/trackslistener.cpp new/elisa-0.4.2/src/trackslistener.cpp --- old/elisa-0.4.1/src/trackslistener.cpp 2019-06-19 22:40:52.000000000 +0200 +++ new/elisa-0.4.2/src/trackslistener.cpp 2019-06-29 15:02:46.000000000 +0200 @@ -66,17 +66,17 @@ } for (auto itTrack = d->mTracksByNameSet.begin(); itTrack != d->mTracksByNameSet.end(); ) { - if (std::get<0>(*itTrack) != oneTrack.title()) { + if (!std::get<0>(*itTrack).isEmpty() && std::get<0>(*itTrack) != oneTrack.title()) { ++itTrack; continue; } - if (std::get<1>(*itTrack) != oneTrack.artist()) { + if (!std::get<1>(*itTrack).isEmpty() && std::get<1>(*itTrack) != oneTrack.artist()) { ++itTrack; continue; } - if (std::get<2>(*itTrack) != oneTrack.album()) { + if (!std::get<2>(*itTrack).isEmpty() && std::get<2>(*itTrack) != oneTrack.album()) { ++itTrack; continue; } @@ -113,11 +113,33 @@ } } -void TracksListener::trackByNameInList(const QString &title, const QString &artist, const QString &album, int trackNumber, int discNumber) +void TracksListener::trackByNameInList(const QVariant &title, const QVariant &artist, const QVariant &album, + const QVariant &trackNumber, const QVariant &discNumber) { - auto newTrackId = d->mDatabase->trackIdFromTitleAlbumTrackDiscNumber(title, artist, album, trackNumber, discNumber); + const auto realTitle = title.toString(); + const auto realArtist = artist.toString(); + const auto albumIsValid = !album.isNull() && album.isValid() && !album.toString().isEmpty(); + auto realAlbum = std::optional<QString>{}; + if (albumIsValid) { + realAlbum = album.toString(); + } + auto trackNumberIsValid = bool{}; + const auto trackNumberValue = trackNumber.toInt(&trackNumberIsValid); + auto realTrackNumber = std::optional<int>{}; + if (trackNumberIsValid) { + realTrackNumber = trackNumberValue; + } + auto discNumberIsValid = bool{}; + const auto discNumberValue = discNumber.toInt(&discNumberIsValid); + auto realDiscNumber = std::optional<int>{}; + if (discNumberIsValid) { + realDiscNumber = discNumberValue; + } + + auto newTrackId = d->mDatabase->trackIdFromTitleAlbumTrackDiscNumber(realTitle, realArtist, realAlbum, + realTrackNumber, realDiscNumber); if (newTrackId == 0) { - auto newTrack = std::tuple<QString, QString, QString, int, int>(title, artist, album, trackNumber, discNumber); + auto newTrack = std::tuple<QString, QString, QString, int, int>(realTitle, realArtist, album.toString(), trackNumber.toInt(), discNumber.toInt()); d->mTracksByNameSet.push_back(newTrack); return; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/elisa-0.4.1/src/trackslistener.h new/elisa-0.4.2/src/trackslistener.h --- old/elisa-0.4.1/src/trackslistener.h 2019-06-19 22:40:52.000000000 +0200 +++ new/elisa-0.4.2/src/trackslistener.h 2019-06-29 15:02:46.000000000 +0200 @@ -63,7 +63,7 @@ void trackModified(const TracksListener::TrackDataType &modifiedTrack); - void trackByNameInList(const QString &title, const QString &artist, const QString &album, int trackNumber, int discNumber); + void trackByNameInList(const QVariant &title, const QVariant &artist, const QVariant &album, const QVariant &trackNumber, const QVariant &discNumber); void newEntryInList(qulonglong newDatabaseId, const QString &entryTitle,
