Use std::make_shared

This commit is contained in:
Jonas Kvinge
2021-07-11 19:57:18 +02:00
parent 10fc6b4562
commit c6da0864f2
5 changed files with 25 additions and 23 deletions

View File

@@ -183,7 +183,7 @@ void Playlist::InsertSongItems(const SongList &songs, const int pos, const bool
PlaylistItemList items; PlaylistItemList items;
items.reserve(songs.count()); items.reserve(songs.count());
for (const Song &song : songs) { for (const Song &song : songs) {
items << PlaylistItemPtr(new T(song)); items << std::make_shared<T>(song);
} }
InsertItems(items, pos, play_now, enqueue, enqueue_next); InsertItems(items, pos, play_now, enqueue, enqueue_next);
@@ -1140,10 +1140,10 @@ void Playlist::InsertSongsOrCollectionItems(const SongList &songs, const int pos
PlaylistItemList items; PlaylistItemList items;
for (const Song &song : songs) { for (const Song &song : songs) {
if (song.is_collection_song()) { if (song.is_collection_song()) {
items << PlaylistItemPtr(new CollectionPlaylistItem(song)); items << std::make_shared<CollectionPlaylistItem>(song);
} }
else { else {
items << PlaylistItemPtr(new SongPlaylistItem(song)); items << std::make_shared<SongPlaylistItem>(song);
} }
} }
InsertItems(items, pos, play_now, enqueue, enqueue_next); InsertItems(items, pos, play_now, enqueue, enqueue_next);
@@ -1195,12 +1195,12 @@ void Playlist::UpdateItems(SongList songs) {
if (item->Metadata().url() == song.url() && (item->Metadata().filetype() == Song::FileType_Unknown || item->Metadata().filetype() == Song::FileType_Stream || item->Metadata().filetype() == Song::FileType_CDDA)) { if (item->Metadata().url() == song.url() && (item->Metadata().filetype() == Song::FileType_Unknown || item->Metadata().filetype() == Song::FileType_Stream || item->Metadata().filetype() == Song::FileType_CDDA)) {
PlaylistItemPtr new_item; PlaylistItemPtr new_item;
if (song.is_collection_song()) { if (song.is_collection_song()) {
new_item = PlaylistItemPtr(new CollectionPlaylistItem(song)); new_item = std::make_shared<CollectionPlaylistItem>(song);
if (collection_items_by_id_.contains(song.id(), item)) collection_items_by_id_.remove(song.id(), item); if (collection_items_by_id_.contains(song.id(), item)) collection_items_by_id_.remove(song.id(), item);
collection_items_by_id_.insert(song.id(), new_item); collection_items_by_id_.insert(song.id(), new_item);
} }
else { else {
new_item = PlaylistItemPtr(new SongPlaylistItem(song)); new_item = std::make_shared<SongPlaylistItem>(song);
} }
items_[i] = new_item; items_[i] = new_item;
emit dataChanged(index(i, 0), index(i, ColumnCount - 1)); emit dataChanged(index(i, 0), index(i, ColumnCount - 1));

View File

@@ -304,7 +304,7 @@ PlaylistItemPtr PlaylistBackend::RestoreCueData(PlaylistItemPtr item, std::share
for (const Song &from_list : song_list) { for (const Song &from_list : song_list) {
if (from_list.url().toEncoded() == song.url().toEncoded() && from_list.beginning_nanosec() == song.beginning_nanosec()) { if (from_list.url().toEncoded() == song.url().toEncoded() && from_list.beginning_nanosec() == song.beginning_nanosec()) {
// We found a matching section; replace the input item with a new one containing CUE metadata // We found a matching section; replace the input item with a new one containing CUE metadata
return PlaylistItemPtr(new SongPlaylistItem(from_list)); return std::make_shared<SongPlaylistItem>(from_list);
} }
} }

View File

@@ -21,6 +21,8 @@
#include "config.h" #include "config.h"
#include <memory>
#include <QtConcurrentRun> #include <QtConcurrentRun>
#include <QFuture> #include <QFuture>
#include <QString> #include <QString>
@@ -39,19 +41,19 @@
#include "internet/internetplaylistitem.h" #include "internet/internetplaylistitem.h"
#include "radios/radioplaylistitem.h" #include "radios/radioplaylistitem.h"
PlaylistItem *PlaylistItem::NewFromSource(const Song::Source source) { PlaylistItemPtr PlaylistItem::NewFromSource(const Song::Source source) {
switch (source) { switch (source) {
case Song::Source_Collection: case Song::Source_Collection:
return new CollectionPlaylistItem(); return std::make_shared<CollectionPlaylistItem>();
case Song::Source_Subsonic: case Song::Source_Subsonic:
case Song::Source_Tidal: case Song::Source_Tidal:
case Song::Source_Qobuz: case Song::Source_Qobuz:
return std::make_shared<InternetPlaylistItem>(source);
case Song::Source_Stream: case Song::Source_Stream:
return new InternetPlaylistItem(source);
case Song::Source_RadioParadise: case Song::Source_RadioParadise:
case Song::Source_SomaFM: case Song::Source_SomaFM:
return new RadioPlaylistItem(source); return std::make_shared<RadioPlaylistItem>(source);
case Song::Source_LocalFile: case Song::Source_LocalFile:
case Song::Source_CDDA: case Song::Source_CDDA:
case Song::Source_Device: case Song::Source_Device:
@@ -59,23 +61,23 @@ PlaylistItem *PlaylistItem::NewFromSource(const Song::Source source) {
break; break;
} }
return new SongPlaylistItem(source); return std::make_shared<SongPlaylistItem>(source);
} }
PlaylistItem *PlaylistItem::NewFromSong(const Song &song) { PlaylistItemPtr PlaylistItem::NewFromSong(const Song &song) {
switch (song.source()) { switch (song.source()) {
case Song::Source_Collection: case Song::Source_Collection:
return new CollectionPlaylistItem(song); return std::make_shared<CollectionPlaylistItem>(song);
case Song::Source_Subsonic: case Song::Source_Subsonic:
case Song::Source_Tidal: case Song::Source_Tidal:
case Song::Source_Qobuz: case Song::Source_Qobuz:
return std::make_shared<InternetPlaylistItem>(song);
case Song::Source_Stream: case Song::Source_Stream:
return new InternetPlaylistItem(song);
case Song::Source_RadioParadise: case Song::Source_RadioParadise:
case Song::Source_SomaFM: case Song::Source_SomaFM:
return new RadioPlaylistItem(song); return std::make_shared<RadioPlaylistItem>(song);
case Song::Source_LocalFile: case Song::Source_LocalFile:
case Song::Source_CDDA: case Song::Source_CDDA:
case Song::Source_Device: case Song::Source_Device:
@@ -83,7 +85,7 @@ PlaylistItem *PlaylistItem::NewFromSong(const Song &song) {
break; break;
} }
return new SongPlaylistItem(song); return std::make_shared<SongPlaylistItem>(song);
} }

View File

@@ -48,8 +48,8 @@ class PlaylistItem : public std::enable_shared_from_this<PlaylistItem> {
explicit PlaylistItem(const Song::Source source) : should_skip_(false), source_(source) {} explicit PlaylistItem(const Song::Source source) : should_skip_(false), source_(source) {}
virtual ~PlaylistItem(); virtual ~PlaylistItem();
static PlaylistItem *NewFromSource(const Song::Source source); static std::shared_ptr<PlaylistItem> NewFromSource(const Song::Source source);
static PlaylistItem *NewFromSong(const Song &song); static std::shared_ptr<PlaylistItem> NewFromSong(const Song &song);
enum Option { enum Option {
Default = 0x00, Default = 0x00,

View File

@@ -480,7 +480,7 @@ TEST_F(PlaylistTest, CollectionIdMapSingle) {
song.Init("title", "artist", "album", 123); song.Init("title", "artist", "album", 123);
song.set_id(1); song.set_id(1);
PlaylistItemPtr item(new CollectionPlaylistItem(song)); PlaylistItemPtr item(std::make_shared<CollectionPlaylistItem>(song));
playlist_.InsertItems(PlaylistItemList() << item); playlist_.InsertItems(PlaylistItemList() << item);
EXPECT_EQ(0, playlist_.collection_items_by_id(-1).count()); EXPECT_EQ(0, playlist_.collection_items_by_id(-1).count());
@@ -501,7 +501,7 @@ TEST_F(PlaylistTest, CollectionIdMapInvalid) {
invalid.Init("title", "artist", "album", 123); invalid.Init("title", "artist", "album", 123);
ASSERT_EQ(-1, invalid.id()); ASSERT_EQ(-1, invalid.id());
PlaylistItemPtr item(new CollectionPlaylistItem(invalid)); PlaylistItemPtr item(std::make_shared<CollectionPlaylistItem>(invalid));
playlist_.InsertItems(PlaylistItemList() << item); playlist_.InsertItems(PlaylistItemList() << item);
EXPECT_EQ(0, playlist_.collection_items_by_id(-1).count()); EXPECT_EQ(0, playlist_.collection_items_by_id(-1).count());
@@ -521,9 +521,9 @@ TEST_F(PlaylistTest, CollectionIdMapMulti) {
two.Init("title 2", "artist 2", "album 2", 123); two.Init("title 2", "artist 2", "album 2", 123);
two.set_id(2); two.set_id(2);
PlaylistItemPtr item_one(new CollectionPlaylistItem(one)); PlaylistItemPtr item_one(std::make_shared<CollectionPlaylistItem>(one));
PlaylistItemPtr item_two(new CollectionPlaylistItem(two)); PlaylistItemPtr item_two(std::make_shared<CollectionPlaylistItem>(two));
PlaylistItemPtr item_three(new CollectionPlaylistItem(one)); PlaylistItemPtr item_three(std::make_shared<CollectionPlaylistItem>(one));
playlist_.InsertItems(PlaylistItemList() << item_one << item_two << item_three); playlist_.InsertItems(PlaylistItemList() << item_one << item_two << item_three);
EXPECT_EQ(2, playlist_.collection_items_by_id(1).count()); EXPECT_EQ(2, playlist_.collection_items_by_id(1).count());