diff --git a/src/collection/collectionmodel.cpp b/src/collection/collectionmodel.cpp index 8ca243b05..16bee9a89 100644 --- a/src/collection/collectionmodel.cpp +++ b/src/collection/collectionmodel.cpp @@ -119,10 +119,11 @@ CollectionModel::CollectionModel(CollectionBackend *backend, Application *app, Q } QIcon nocover = IconLoader::Load("cdcase"); - no_cover_icon_ = nocover.pixmap(nocover.availableSizes().last()).scaled(kPrettyCoverSize, kPrettyCoverSize, Qt::KeepAspectRatio, Qt::SmoothTransformation); - //no_cover_icon_ = QPixmap(":/pictures/noalbumart.png").scaled(kPrettyCoverSize, kPrettyCoverSize, Qt::KeepAspectRatio, Qt::SmoothTransformation); + if (!nocover.isNull()) { + no_cover_icon_ = nocover.pixmap(nocover.availableSizes().last()).scaled(kPrettyCoverSize, kPrettyCoverSize, Qt::KeepAspectRatio, Qt::SmoothTransformation); + } - if (sIconCache == nullptr) { + if (app_ && !sIconCache) { sIconCache = new QNetworkDiskCache(this); sIconCache->setCacheDirectory(QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + "/" + kPixmapDiskCacheDir); } @@ -191,7 +192,9 @@ void CollectionModel::ReloadSettings() { QPixmapCache::setCacheLimit(MaximumCacheSize(&s, CollectionSettingsPage::kSettingsCacheSize, CollectionSettingsPage::kSettingsCacheSizeUnit, CollectionSettingsPage::kSettingsCacheSizeDefault) / 1024); - sIconCache->setMaximumCacheSize(MaximumCacheSize(&s, CollectionSettingsPage::kSettingsDiskCacheSize, CollectionSettingsPage::kSettingsDiskCacheSizeUnit, CollectionSettingsPage::kSettingsDiskCacheSizeDefault)); + if (sIconCache) { + sIconCache->setMaximumCacheSize(MaximumCacheSize(&s, CollectionSettingsPage::kSettingsDiskCacheSize, CollectionSettingsPage::kSettingsDiskCacheSizeUnit, CollectionSettingsPage::kSettingsDiskCacheSizeDefault)); + } s.endGroup(); @@ -512,7 +515,7 @@ void CollectionModel::SongsDeleted(const SongList &songs) { // Remove from pixmap cache const QString cache_key = AlbumIconPixmapCacheKey(ItemToIndex(node)); QPixmapCache::remove(cache_key); - if (use_disk_cache_) sIconCache->remove(QUrl(cache_key)); + if (use_disk_cache_ && sIconCache) sIconCache->remove(QUrl(cache_key)); if (pending_cache_keys_.contains(cache_key)) { pending_cache_keys_.remove(cache_key); } @@ -587,7 +590,7 @@ QVariant CollectionModel::AlbumIcon(const QModelIndex &idx) { } // Try to load it from the disk cache - if (use_disk_cache_) { + if (use_disk_cache_ && sIconCache) { std::unique_ptr cache(sIconCache->data(QUrl(cache_key))); if (cache) { QImage cached_image; @@ -639,7 +642,7 @@ void CollectionModel::AlbumCoverLoaded(const quint64 id, const AlbumCoverLoaderR } // If we have a valid cover not already in the disk cache - if (use_disk_cache_) { + if (use_disk_cache_ && sIconCache) { std::unique_ptr cached_img(sIconCache->data(QUrl(cache_key))); if (!cached_img && !result.image_scaled.isNull()) { QNetworkCacheMetaData item_metadata; @@ -1558,6 +1561,7 @@ int CollectionModel::MaximumCacheSize(QSettings *s, const char *size_id, const c } while (unit > 0); return size; + } void CollectionModel::GetChildSongs(CollectionItem *item, QList *urls, SongList *songs, QSet *song_ids) const { @@ -1688,7 +1692,7 @@ void CollectionModel::TotalAlbumCountUpdatedSlot(const int count) { } void CollectionModel::ClearDiskCache() { - sIconCache->clear(); + if (sIconCache) sIconCache->clear(); } QDataStream &operator<<(QDataStream &s, const CollectionModel::Grouping &g) { diff --git a/src/organise/organiseformat.cpp b/src/organise/organiseformat.cpp index 25e56a582..e7df94d3c 100644 --- a/src/organise/organiseformat.cpp +++ b/src/organise/organiseformat.cpp @@ -35,6 +35,7 @@ #include #include #include +#include #include #include "core/arraysize.h" @@ -44,8 +45,6 @@ #include "organiseformat.h" -class QTextDocument; - const char *OrganiseFormat::kTagPattern = "\\%([a-zA-Z]*)"; const char *OrganiseFormat::kBlockPattern = "\\{([^{}]+)\\}"; const QStringList OrganiseFormat::kKnownTags = QStringList() << "title" @@ -145,7 +144,12 @@ QString OrganiseFormat::GetFilenameForSong(const Song &song) const { QFileInfo info(filename); QString extension = info.suffix(); - QString filepath = info.path() + "/" + info.completeBaseName(); + QString filepath; + if (!info.path().isEmpty() && info.path() != ".") { + filepath.append(info.path()); + filepath.append("/"); + } + filepath.append(info.completeBaseName()); // Fix any parts of the path that start with dots. QStringList parts_old = filepath.split("/"); diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index ebc60825a..f5105fe35 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -87,7 +87,6 @@ if(Qt5Test_FOUND AND GTEST_FOUND AND GMOCK_LIBRARY) add_test_file(src/song_test.cpp false) add_test_file(src/collectionbackend_test.cpp false) add_test_file(src/collectionmodel_test.cpp true) - add_test_file(src/playlist_test.cpp true) add_test_file(src/songplaylistitem_test.cpp false) add_test_file(src/organiseformat_test.cpp false) diff --git a/tests/src/collectionmodel_test.cpp b/tests/src/collectionmodel_test.cpp index e609410f5..c02adb93c 100644 --- a/tests/src/collectionmodel_test.cpp +++ b/tests/src/collectionmodel_test.cpp @@ -75,6 +75,8 @@ class CollectionModelTest : public ::testing::Test { Song AddSong(const QString& title, const QString& artist, const QString& album, int length) { Song song; song.Init(title, artist, album, length); + song.set_mtime(0); + song.set_ctime(0); return AddSong(song); } @@ -111,6 +113,8 @@ TEST_F(CollectionModelTest, CompilationAlbums) { Song song; song.Init("Title", "Artist", "Album", 123); song.set_compilation(true); + song.set_mtime(0); + song.set_ctime(0); AddSong(song); model_->Init(false); @@ -200,6 +204,8 @@ TEST_F(CollectionModelTest, VariousArtistSongs) { QString n = QString::number(i+1); Song song; song.Init("Title " + n, "Artist " + n, "Album", 0); + song.set_mtime(0); + song.set_ctime(0); songs << song; } diff --git a/tests/src/organiseformat_test.cpp b/tests/src/organiseformat_test.cpp index 04f2b9b33..3f6dc90b7 100644 --- a/tests/src/organiseformat_test.cpp +++ b/tests/src/organiseformat_test.cpp @@ -59,6 +59,7 @@ TEST_F(OrganiseFormatTest, BasicReplace) { format_.set_format("%album %albumartist %artist %bitrate %comment %composer %performer %grouping %disc %genre %length %samplerate %bitdepth %title %track %year"); ASSERT_TRUE(format_.IsValid()); + EXPECT_EQ("album_albumartist_artist_123_comment_composer_performer_grouping_789_genre_987_654_32_title_321_2010", format_.GetFilenameForSong(song_)); } @@ -135,11 +136,12 @@ TEST_F(OrganiseFormatTest, ReplaceNonAscii) { format_.set_remove_non_ascii(false); EXPECT_EQ(QString::fromUtf8("Röyksopp"), format_.GetFilenameForSong(song_)); + format_.set_remove_non_ascii(true); EXPECT_EQ("Royksopp", format_.GetFilenameForSong(song_)); song_.set_artist(QString::fromUtf8("Владимир Высоцкий")); - EXPECT_EQ("_________________", format_.GetFilenameForSong(song_)); + EXPECT_EQ("????????_????????", format_.GetFilenameForSong(song_)); } diff --git a/tests/src/playlist_test.cpp b/tests/src/playlist_test.cpp index 3b9340a50..c9d18b57b 100644 --- a/tests/src/playlist_test.cpp +++ b/tests/src/playlist_test.cpp @@ -53,15 +53,15 @@ class PlaylistTest : public ::testing::Test { Song metadata; metadata.Init(title, artist, album, length); - //MockPlaylistItem* ret = new MockPlaylistItem; + MockPlaylistItem *ret = new MockPlaylistItem; //EXPECT_CALL(*ret, Metadata()).WillRepeatedly(Return(metadata)); - //return ret; + return ret; return nullptr; } - std::shared_ptr MakeMockItemP(const QString& title, const QString& artist = QString(), const QString& album = QString(), int length = 123) const { - return std::shared_ptr(MakeMockItem(title, artist, album, length)); + PlaylistItemPtr MakeMockItemP(const QString& title, const QString& artist = QString(), const QString& album = QString(), int length = 123) const { + return PlaylistItemPtr(MakeMockItem(title, artist, album, length)); } Playlist playlist_; @@ -76,7 +76,7 @@ TEST_F(PlaylistTest, Basic) { TEST_F(PlaylistTest, InsertItems) { MockPlaylistItem* item = MakeMockItem("Title", "Artist", "Album", 123); - std::shared_ptr item_ptr(item); + PlaylistItemPtr item_ptr(item); // Insert the item EXPECT_EQ(0, playlist_.rowCount(QModelIndex()));