FINALLY removed IRetainedTrack and RetainedTrack. Now we just have

ITrack.
This commit is contained in:
casey langen 2017-10-01 21:40:10 -07:00
parent 6f2af2cb16
commit fae098b668
22 changed files with 127 additions and 265 deletions

View File

@ -38,7 +38,7 @@
#include <core/audio/ITransport.h>
#include <core/library/LocalLibraryConstants.h>
#include <core/library/track/RetainedTrack.h>
#include <core/library/track/Track.h>
#include <core/plugin/PluginFactory.h>
#include <core/runtime/MessageQueue.h>
#include <core/runtime/Message.h>
@ -711,23 +711,23 @@ double PlaybackService::GetDuration() {
return 0.0f;
}
IRetainedTrack* PlaybackService::GetTrack(size_t index) {
ITrack* PlaybackService::GetTrack(size_t index) {
std::unique_lock<std::recursive_mutex> lock(this->playlistMutex);
const size_t count = this->playlist.Count();
if (count && index < this->playlist.Count()) {
return new RetainedTrack(this->playlist.Get(index));
return this->playlist.Get(index)->GetSdkValue();
}
return nullptr;
}
IRetainedTrack* PlaybackService::GetPlayingTrack() {
ITrack* PlaybackService::GetPlayingTrack() {
std::unique_lock<std::recursive_mutex> lock(this->playlistMutex);
if (this->playingTrack) {
return new RetainedTrack(this->playingTrack);
return this->playingTrack->GetSdkValue();
}
return nullptr;

View File

@ -98,8 +98,8 @@ namespace musik { namespace core { namespace audio {
virtual double GetPosition();
virtual void SetPosition(double seconds);
virtual double GetDuration();
virtual musik::core::sdk::IRetainedTrack* GetTrack(size_t index);
virtual musik::core::sdk::IRetainedTrack* GetPlayingTrack();
virtual musik::core::sdk::ITrack* GetTrack(size_t index);
virtual musik::core::sdk::ITrack* GetPlayingTrack();
virtual void CopyFrom(const musik::core::sdk::ITrackList* source);
virtual void Play(const musik::core::sdk::ITrackList* source, size_t index);
virtual musik::core::sdk::ITrackListEditor* EditPlaylist();

View File

@ -117,7 +117,6 @@
<ClCompile Include="library\query\local\TrackMetadataQuery.cpp" />
<ClCompile Include="library\track\IndexerTrack.cpp" />
<ClCompile Include="library\track\LibraryTrack.cpp" />
<ClCompile Include="library\track\RetainedTrack.cpp" />
<ClCompile Include="library\track\Track.cpp" />
<ClCompile Include="library\track\TrackList.cpp" />
<ClCompile Include="pch.cpp">
@ -175,7 +174,6 @@
<ClInclude Include="library\query\local\TrackMetadataQuery.h" />
<ClInclude Include="library\track\IndexerTrack.h" />
<ClInclude Include="library\track\LibraryTrack.h" />
<ClInclude Include="library\track\RetainedTrack.h" />
<ClInclude Include="library\track\Track.h" />
<ClInclude Include="library\track\TrackList.h" />
<ClInclude Include="pch.hpp" />
@ -219,7 +217,6 @@
<ClInclude Include="audio\Player.h" />
<ClInclude Include="audio\Stream.h" />
<ClInclude Include="sdk\IPreferences.h" />
<ClInclude Include="sdk\IRetainedTrack.h" />
<ClInclude Include="sdk\ISimpleDataProvider.h" />
<ClInclude Include="sdk\ISpectrumVisualizer.h" />
<ClInclude Include="sdk\ITrack.h" />

View File

@ -124,9 +124,6 @@
<ClCompile Include="audio\Visualizer.cpp">
<Filter>src\audio</Filter>
</ClCompile>
<ClCompile Include="library\track\RetainedTrack.cpp">
<Filter>src\library\track</Filter>
</ClCompile>
<ClCompile Include="audio\Stream.cpp">
<Filter>src\audio</Filter>
</ClCompile>
@ -288,9 +285,6 @@
<ClInclude Include="sdk\constants.h">
<Filter>src\sdk</Filter>
</ClInclude>
<ClInclude Include="library\track\RetainedTrack.h">
<Filter>src\library\track</Filter>
</ClInclude>
<ClInclude Include="audio\IStream.h">
<Filter>src\audio</Filter>
</ClInclude>
@ -447,9 +441,6 @@
<ClInclude Include="sdk\ITrack.h">
<Filter>src\sdk\library</Filter>
</ClInclude>
<ClInclude Include="sdk\IRetainedTrack.h">
<Filter>src\sdk\library</Filter>
</ClInclude>
<ClInclude Include="sdk\IDevice.h">
<Filter>src\sdk\audio</Filter>
</ClInclude>

View File

@ -41,7 +41,6 @@
#include <core/config.h>
#include <core/library/track/IndexerTrack.h>
#include <core/library/track/LibraryTrack.h>
#include <core/library/track/RetainedTrack.h>
#include <core/library/LocalLibraryConstants.h>
#include <core/db/Connection.h>
#include <core/db/Statement.h>

View File

@ -46,7 +46,6 @@
#include <core/library/query/local/SavePlaylistQuery.h>
#include <core/library/query/local/TrackMetadataQuery.h>
#include <core/library/track/LibraryTrack.h>
#include <core/library/track/RetainedTrack.h>
#include <core/library/LocalLibraryConstants.h>
#define TAG "LocalSimpleDataProvider"
@ -141,7 +140,7 @@ ITrackList* LocalSimpleDataProvider::QueryTracks(const char* query, int limit, i
return nullptr;
}
IRetainedTrack* LocalSimpleDataProvider::QueryTrackById(int64_t trackId) {
ITrack* LocalSimpleDataProvider::QueryTrackById(int64_t trackId) {
try {
TrackPtr target(new LibraryTrack(trackId, this->library));
@ -151,7 +150,7 @@ IRetainedTrack* LocalSimpleDataProvider::QueryTrackById(int64_t trackId) {
this->library->Enqueue(search, ILibrary::QuerySynchronous);
if (search->GetStatus() == IQuery::Finished) {
return new RetainedTrack(target);
return target->GetSdkValue();
}
}
catch (...) {
@ -161,7 +160,7 @@ IRetainedTrack* LocalSimpleDataProvider::QueryTrackById(int64_t trackId) {
return nullptr;
}
IRetainedTrack* LocalSimpleDataProvider::QueryTrackByExternalId(const char* externalId) {
ITrack* LocalSimpleDataProvider::QueryTrackByExternalId(const char* externalId) {
if (strlen(externalId)) {
try {
TrackPtr target(new LibraryTrack(0, this->library));
@ -173,7 +172,7 @@ IRetainedTrack* LocalSimpleDataProvider::QueryTrackByExternalId(const char* exte
this->library->Enqueue(search, ILibrary::QuerySynchronous);
if (search->GetStatus() == IQuery::Finished) {
return new RetainedTrack(target);
return target->GetSdkValue();
}
}
catch (...) {

View File

@ -51,10 +51,10 @@ namespace musik { namespace core { namespace db { namespace local {
int limit = -1,
int offset = 0) override;
virtual musik::core::sdk::IRetainedTrack*
virtual musik::core::sdk::ITrack*
QueryTrackById(int64_t trackId) override;
virtual musik::core::sdk::IRetainedTrack*
virtual musik::core::sdk::ITrack*
QueryTrackByExternalId(const char* externalId) override;
virtual musik::core::sdk::ITrackList*

View File

@ -93,10 +93,6 @@ namespace musik { namespace core { namespace db { namespace local {
return this->wrapped->Count();
}
virtual musik::core::sdk::IRetainedTrack* GetRetainedTrack(size_t index) const {
return this->wrapped->GetRetainedTrack(index);
}
virtual int64_t GetId(size_t index) const {
return this->wrapped->GetId(index);
}

View File

@ -1,85 +0,0 @@
//////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2007-2017 musikcube team
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// * Neither the name of the author nor the names of other contributors may
// be used to endorse or promote products derived from this software
// without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//
//////////////////////////////////////////////////////////////////////////////
#include "pch.hpp"
#include "RetainedTrack.h"
using namespace musik::core;
/* * * * RetainedTrack * * * */
RetainedTrack::RetainedTrack(TrackPtr track) {
this->count = 1;
this->track = track;
}
RetainedTrack::~RetainedTrack() {
}
void RetainedTrack::Release() {
int c = this->count.fetch_sub(1);
if (c == 1) { /* value before fetch */
this->count = 0;
this->track.reset();
delete this;
}
}
void RetainedTrack::Retain() {
++this->count;
}
int RetainedTrack::GetString(const char* key, char* dst, int size) {
return track->GetString(key, dst, size);
}
int RetainedTrack::Uri(char* dst, int size) {
return track->Uri(dst, size);
}
long long RetainedTrack::GetInt64(const char* key, long long defaultValue) {
return track->GetInt64(key, defaultValue);
}
int RetainedTrack::GetInt32(const char* key, unsigned int defaultValue) {
return track->GetInt32(key, defaultValue);
}
double RetainedTrack::GetDouble(const char* key, double defaultValue) {
return track->GetDouble(key, defaultValue);
}
int64_t RetainedTrack::GetId() {
return track->GetId();
}

View File

@ -1,64 +0,0 @@
//////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2007-2017 musikcube team
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// * Neither the name of the author nor the names of other contributors may
// be used to endorse or promote products derived from this software
// without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//
//////////////////////////////////////////////////////////////////////////////
#include <core/sdk/IRetainedTrack.h>
#include "Track.h"
#include <atomic>
namespace musik { namespace core {
class RetainedTrack : public musik::core::sdk::IRetainedTrack {
public:
RetainedTrack(TrackPtr track);
virtual ~RetainedTrack();
/* IRetainedTrack */
virtual void Release();
virtual void Retain();
/* ITrack */
virtual int64_t GetId();
virtual int GetString(const char* key, char* dst, int size);
virtual long long GetInt64(const char* key, long long defaultValue = 0LL);
virtual int GetInt32(const char* key, unsigned int defaultValue = 0);
virtual double GetDouble(const char* key, double defaultValue = 0.0f);
virtual int Uri(char* dst, int size);
private:
std::atomic<int> count;
TrackPtr track;
};
} }

View File

@ -39,6 +39,70 @@
using namespace musik::core;
/* * * * SdkWrapper * * * */
class SdkWrapper : public Track {
public:
SdkWrapper(TrackPtr track) {
this->track = track;
this->count = 0;
}
virtual ~SdkWrapper() {
}
virtual void Retain() {
++this->count;
}
virtual void Release() {
int c = this->count.fetch_sub(1);
if (c == 1) { /* fetched before sub */
this->count = 0;
this->track.reset();
delete this;
}
}
virtual int GetString(const char* key, char* dst, int size) {
return track->GetString(key, dst, size);
}
virtual long long GetInt64(const char* key, long long defaultValue) {
return track->GetInt64(key, defaultValue);
}
virtual int GetInt32(const char* key, unsigned int defaultValue) {
return track->GetInt32(key, defaultValue);
}
virtual double GetDouble(const char* key, double defaultValue) {
return track->GetDouble(key, defaultValue);
}
virtual int Uri(char* dst, int size) {
return track->Uri(dst, size);
}
/* pure virtual methods defined by Track, but not defined in ITrack. therefore,
these methods cannot be called by the SDK, and should throw. */
#define NO_IMPL throw std::runtime_error("not implemented");
virtual void SetValue(const char* key, const char* value) override { NO_IMPL }
virtual void ClearValue(const char* key) override { NO_IMPL }
virtual void SetThumbnail(const char *data, long size) override { NO_IMPL }
virtual void SetId(int64_t id) override { NO_IMPL }
virtual std::string GetString(const char* metakey) override { NO_IMPL }
virtual std::string Uri() override { NO_IMPL }
virtual MetadataIteratorRange GetValues(const char* metakey) override { NO_IMPL }
virtual MetadataIteratorRange GetAllValues() override { NO_IMPL }
virtual TrackPtr Copy() override { NO_IMPL }
#undef NO_IMPL
private:
std::atomic<int> count;
std::shared_ptr<Track> track;
};
/* * * * Track * * * */
Track::~Track() {
@ -57,6 +121,18 @@ int Track::LibraryId() {
return 0;
}
void Track::Retain() {
/* nothing. SdkWrapper implements as necessary */
}
void Track::Release() {
/* same as Retain() */
}
musik::core::sdk::ITrack* Track::GetSdkValue() {
return new SdkWrapper(shared_from_this());
}
/* * * * TagStore * * * */
template<typename T>
@ -98,4 +174,4 @@ void TagStore::Release() {
void TagStore::Retain() {
++this->count;
}
}

View File

@ -47,22 +47,19 @@ namespace musik { namespace core {
class Track;
typedef std::shared_ptr<Track> TrackPtr;
class Track : public musik::core::sdk::ITrack {
class Track :
public musik::core::sdk::ITrack,
public std::enable_shared_from_this<Track>
{
public:
typedef std::multimap<std::string, std::string> MetadataMap;
typedef std::pair<MetadataMap::iterator, MetadataMap::iterator> MetadataIteratorRange;
virtual ~Track();
virtual int64_t GetId();
virtual void SetId(int64_t id) = 0;
virtual musik::core::ILibraryPtr Library();
virtual int LibraryId();
virtual std::string GetString(const char* metakey) = 0;
virtual std::string Uri() = 0;
/* ITrack is a ready only interface; we use the ITagStore interface
for writing. we replicate the interface here, and have TagStore pass
through to us */
@ -71,6 +68,9 @@ namespace musik { namespace core {
virtual void SetThumbnail(const char *data, long size) = 0;
/* ITrack */
virtual void Retain();
virtual void Release();
virtual int64_t GetId();
virtual int GetString(const char* key, char* dst, int size) = 0;
virtual long long GetInt64(const char* key, long long defaultValue = 0LL) = 0;
virtual int GetInt32(const char* key, unsigned int defaultValue = 0) = 0;
@ -78,9 +78,15 @@ namespace musik { namespace core {
virtual int Uri(char* dst, int size) = 0;
/* implementation specific */
virtual void SetId(int64_t id) = 0;
virtual std::string GetString(const char* metakey) = 0;
virtual std::string Uri() = 0;
virtual MetadataIteratorRange GetValues(const char* metakey) = 0;
virtual MetadataIteratorRange GetAllValues() = 0;
virtual TrackPtr Copy() = 0;
/* for SDK interop */
ITrack* GetSdkValue();
};
class TagStore : public musik::core::sdk::ITagStore {

View File

@ -38,7 +38,7 @@
#include <core/library/query/local/LocalQueryBase.h>
#include <core/library/track/LibraryTrack.h>
#include <core/library/LocalLibraryConstants.h>
#include <core/library/track/RetainedTrack.h>
#include <core/library/track/Track.h>
#include <core/library/query/local/TrackMetadataQuery.h>
#include <core/db/Connection.h>
#include <core/db/Statement.h>
@ -148,12 +148,10 @@ TrackPtr TrackList::Get(size_t index) const {
return TrackPtr();
}
IRetainedTrack* TrackList::GetRetainedTrack(size_t index) const {
return new RetainedTrack(this->Get(index));
}
ITrack* TrackList::GetTrack(size_t index) const {
return this->Get(index).get();
auto track = this->Get(index).get();
track->Retain();
return track;
}
int64_t TrackList::GetId(size_t index) const {

View File

@ -55,7 +55,6 @@ namespace musik { namespace core {
/* ITrackList */
virtual size_t Count() const;
virtual musik::core::sdk::IRetainedTrack* GetRetainedTrack(size_t index) const;
virtual int64_t GetId(size_t index) const;
virtual int IndexOf(int64_t id) const;
virtual musik::core::sdk::ITrack* GetTrack(size_t index) const;

View File

@ -35,7 +35,7 @@
#pragma once
#include "constants.h"
#include "IRetainedTrack.h"
#include "ITrack.h"
#include "ITrackList.h"
#include "ITrackListEditor.h"
@ -72,10 +72,10 @@ namespace musik { namespace core { namespace sdk {
virtual size_t GetIndex() = 0;
virtual size_t Count() = 0;
virtual IRetainedTrack* GetTrack(size_t index) = 0;
virtual ITrack* GetTrack(size_t index) = 0;
/* sdk v2 */
virtual IRetainedTrack* GetPlayingTrack() = 0;
virtual ITrack* GetPlayingTrack() = 0;
/* sdk v3 */
virtual void CopyFrom(const ITrackList* trackList) = 0;

View File

@ -1,48 +0,0 @@
//////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2007-2017 musikcube team
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// * Neither the name of the author nor the names of other contributors may
// be used to endorse or promote products derived from this software
// without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//
//////////////////////////////////////////////////////////////////////////////
#pragma once
#include "ITrack.h"
namespace musik { namespace core { namespace sdk {
class IRetainedTrack : public ITrack {
public:
virtual void Release() = 0;
virtual void Retain() = 0;
};
} } }

View File

@ -37,7 +37,7 @@
#include "ITrackList.h"
#include "IValueList.h"
#include "IMapList.h"
#include "IRetainedTrack.h"
#include "ITrack.h"
namespace musik { namespace core { namespace sdk {
@ -48,9 +48,9 @@ namespace musik { namespace core { namespace sdk {
int limit = -1,
int offset = 0) = 0;
virtual IRetainedTrack* QueryTrackById(int64_t trackId) = 0;
virtual ITrack* QueryTrackById(int64_t trackId) = 0;
virtual IRetainedTrack* QueryTrackByExternalId(const char* externalId) = 0;
virtual ITrack* QueryTrackByExternalId(const char* externalId) = 0;
virtual ITrackList* QueryTracksByCategory(
const char* categoryType,

View File

@ -40,6 +40,8 @@ namespace musik { namespace core { namespace sdk {
class ITrack {
public:
virtual void Retain() = 0;
virtual void Release() = 0;
virtual int64_t GetId() = 0;
virtual int GetString(const char* key, char* dst, int size) = 0;
virtual long long GetInt64(const char* key, long long defaultValue = 0LL) = 0;

View File

@ -35,20 +35,16 @@
#pragma once
#include <stddef.h>
#include "IRetainedTrack.h"
#include "ITrack.h"
namespace musik { namespace core { namespace sdk {
class ITrackList {
public:
/* sdk v1 */
virtual void Release() = 0;
virtual size_t Count() const = 0;
virtual IRetainedTrack* GetRetainedTrack(size_t index) const = 0;
virtual int64_t GetId(size_t index) const = 0;
virtual int IndexOf(int64_t id) const = 0;
/* sdk v3 */
virtual ITrack* GetTrack(size_t index) const = 0;
};

View File

@ -38,7 +38,7 @@
#include "Transcoder.h"
#include "TranscodingDataStream.h"
#include <core/sdk/IRetainedTrack.h>
#include <core/sdk/ITrack.h>
#include <boost/filesystem.hpp>
#include <boost/algorithm/string.hpp>
@ -337,7 +337,7 @@ int HttpServer::HandleRequest(
boost::split(parts, urlStr, boost::is_any_of("/"));
if (parts.size() > 0) {
if (parts.at(0) == fragment::audio && parts.size() == 3) {
IRetainedTrack* track = nullptr;
ITrack* track = nullptr;
bool byExternalId = (parts.at(1) == fragment::external_id);
if (byExternalId) {

View File

@ -484,13 +484,13 @@ bool WebSocketServer::RespondWithTracks(
else {
json data = json::array();
IRetainedTrack* track = nullptr;
ITrack* track = nullptr;
for (size_t i = 0; i < tracks->Count(); i++) {
if (idsOnly) {
data.push_back({ {key::id, tracks->GetId(i) } });
}
else {
track = tracks->GetRetainedTrack(i);
track = tracks->GetTrack(i);
data.push_back(this->ReadTrackMetadata(track));
}
@ -563,8 +563,8 @@ void WebSocketServer::RespondWithPlayQueueTracks(connection_hdl connection, json
});
}
else {
static auto deleter = [](IRetainedTrack* track) { track->Release(); };
std::vector<std::shared_ptr<IRetainedTrack>> tracks;
static auto deleter = [](ITrack* track) { track->Release(); };
std::vector<std::shared_ptr<ITrack>> tracks;
/* edit the playlist so it can be changed while we're getting the tracks
out of it. */
@ -574,7 +574,7 @@ void WebSocketServer::RespondWithPlayQueueTracks(connection_hdl connection, json
int to = std::min(trackCount, offset + limit);
for (int i = offset; i < to; i++) {
tracks.push_back(std::shared_ptr<IRetainedTrack>(context.playback->GetTrack(i), deleter));
tracks.push_back(std::shared_ptr<ITrack>(context.playback->GetTrack(i), deleter));
}
editor->Release();
@ -908,7 +908,7 @@ void WebSocketServer::BroadcastPlayQueueChanged() {
this->Broadcast(broadcast::play_queue_changed, options);
}
json WebSocketServer::WebSocketServer::ReadTrackMetadata(IRetainedTrack* track) {
json WebSocketServer::WebSocketServer::ReadTrackMetadata(ITrack* track) {
return {
{ key::id, track->GetId() },
{ key::external_id, GetMetadataString(track, key::external_id) },
@ -937,7 +937,7 @@ void WebSocketServer::BuildPlaybackOverview(json& options) {
options[key::playing_duration] = context.playback->GetDuration();
options[key::playing_current_time] = context.playback->GetPosition();
IRetainedTrack* track = context.playback->GetPlayingTrack();
ITrack* track = context.playback->GetPlayingTrack();
if (track) {
options[key::playing_track] = this->ReadTrackMetadata(track);
track->Release();

View File

@ -109,7 +109,7 @@ class WebSocketServer {
using ConnectionList = std::map<connection_hdl, bool, std::owner_less<connection_hdl>>;
using json = nlohmann::json;
using ITrackList = musik::core::sdk::ITrackList;
using IRetainedTrack = musik::core::sdk::IRetainedTrack;
using ITrack = musik::core::sdk::ITrack;
/* vars */
Context& context;
@ -155,7 +155,7 @@ class WebSocketServer {
void GetLimitAndOffset(json& options, int& limit, int& offset);
ITrackList* QueryTracksByCategory(json& request, int& limit, int& offset);
json ReadTrackMetadata(IRetainedTrack* track);
json ReadTrackMetadata(ITrack* track);
void BuildPlaybackOverview(json& options);
void OnOpen(connection_hdl connection);