IRetainedTrackWriter -> IRetainedTrackStore. Also fixed Release()

methods that use reference counts.
This commit is contained in:
casey langen 2017-10-01 16:11:21 -07:00
parent d87d3f3f2c
commit b8069098af
12 changed files with 40 additions and 44 deletions

View File

@ -220,7 +220,7 @@
<ClInclude Include="audio\Stream.h" />
<ClInclude Include="sdk\IPreferences.h" />
<ClInclude Include="sdk\IRetainedTrack.h" />
<ClInclude Include="sdk\IRetainedTrackWriter.h" />
<ClInclude Include="sdk\IRetainedTagStore.h" />
<ClInclude Include="sdk\ISimpleDataProvider.h" />
<ClInclude Include="sdk\ISpectrumVisualizer.h" />
<ClInclude Include="sdk\ITrack.h" />

View File

@ -447,9 +447,6 @@
<ClInclude Include="sdk\ITrack.h">
<Filter>src\sdk\library</Filter>
</ClInclude>
<ClInclude Include="sdk\IRetainedTrackWriter.h">
<Filter>src\sdk\library</Filter>
</ClInclude>
<ClInclude Include="sdk\IRetainedTrack.h">
<Filter>src\sdk\library</Filter>
</ClInclude>
@ -477,5 +474,8 @@
<ClInclude Include="sdk\ITagStore.h">
<Filter>src\sdk\library</Filter>
</ClInclude>
<ClInclude Include="sdk\IRetainedTagStore.h">
<Filter>src\sdk\library</Filter>
</ClInclude>
</ItemGroup>
</Project>

View File

@ -534,7 +534,7 @@ ScanResult Indexer::SyncSource(IIndexerSource* source) {
fprintf(logFile, " - %s\n", track->GetString(constants::Track::FILENAME).c_str());
}
source->ScanTrack(this, new RetainedTrackWriter(track), tracks.ColumnText(2));
source->ScanTrack(this, new RetainedTagStore(track), tracks.ColumnText(2));
this->IncrementTracksScanned();
}
}
@ -859,12 +859,12 @@ bool Indexer::Exited() {
return this->exit;
}
IRetainedTrackWriter* Indexer::CreateWriter() {
IRetainedTagStore* Indexer::CreateWriter() {
std::shared_ptr<Track> track(new IndexerTrack(0));
return new RetainedTrackWriter(track);
return new RetainedTagStore(track);
}
bool Indexer::Save(IIndexerSource* source, IRetainedTrackWriter* track, const char* externalId) {
bool Indexer::Save(IIndexerSource* source, IRetainedTagStore* track, const char* externalId) {
if (source->SourceId() == 0) {
return false;
}
@ -875,7 +875,7 @@ bool Indexer::Save(IIndexerSource* source, IRetainedTrackWriter* track, const ch
/* two levels of unpacking with dynamic_casts. don't tell anyone,
it'll be our little secret. */
RetainedTrackWriter* rtw = dynamic_cast<RetainedTrackWriter*>(track);
RetainedTagStore* rtw = dynamic_cast<RetainedTagStore*>(track);
if (rtw) {
IndexerTrack* it = rtw->As<IndexerTrack*>();
if (it) {

View File

@ -78,14 +78,14 @@ namespace musik { namespace core {
virtual State GetState() { return this->state; }
/* IIndexerWriter */
virtual musik::core::sdk::IRetainedTrackWriter* CreateWriter();
virtual musik::core::sdk::IRetainedTagStore* CreateWriter();
virtual bool RemoveByUri(musik::core::sdk::IIndexerSource* source, const char* uri);
virtual bool RemoveByExternalId(musik::core::sdk::IIndexerSource* source, const char* id);
virtual int RemoveAll(musik::core::sdk::IIndexerSource* source);
virtual bool Save(
musik::core::sdk::IIndexerSource* source,
musik::core::sdk::IRetainedTrackWriter* track,
musik::core::sdk::IRetainedTagStore* track,
const char* externalId = "");
/* IIndexerNotifier */

View File

@ -49,7 +49,7 @@ RetainedTrack::~RetainedTrack() {
void RetainedTrack::Release() {
int c = this->count.fetch_sub(1);
if (c > 0) {
if (c == 1) { /* value before fetch */
this->count = 0;
this->track.reset();
delete this;
@ -84,37 +84,37 @@ int64_t RetainedTrack::GetId() {
return track->GetId();
}
/* * * * RetainedTrackWriter * * * */
/* * * * RetainedTagStore * * * */
RetainedTrackWriter::RetainedTrackWriter(TrackPtr track) {
RetainedTagStore::RetainedTagStore(TrackPtr track) {
this->count = 1;
this->track = track;
}
RetainedTrackWriter::~RetainedTrackWriter() {
RetainedTagStore::~RetainedTagStore() {
}
void RetainedTrackWriter::Release() {
void RetainedTagStore::Release() {
int c = this->count.fetch_sub(1);
if (c > 0) {
if (c == 1) { /* fetched before sub */
this->count = 0;
this->track.reset();
delete this;
}
}
void RetainedTrackWriter::Retain() {
void RetainedTagStore::Retain() {
++this->count;
}
void RetainedTrackWriter::SetValue(const char* metakey, const char* value) {
void RetainedTagStore::SetValue(const char* metakey, const char* value) {
this->track->SetValue(metakey, value);
}
void RetainedTrackWriter::ClearValue(const char* metakey) {
void RetainedTagStore::ClearValue(const char* metakey) {
this->track->ClearValue(metakey);
}
void RetainedTrackWriter::SetThumbnail(const char *data, long size) {
void RetainedTagStore::SetThumbnail(const char *data, long size) {
this->track->SetThumbnail(data, size);
}

View File

@ -33,7 +33,7 @@
//////////////////////////////////////////////////////////////////////////////
#include <core/sdk/IRetainedTrack.h>
#include <core/sdk/IRetainedTrackWriter.h>
#include <core/sdk/IRetainedTagStore.h>
#include "Track.h"
#include <atomic>
@ -61,16 +61,16 @@ namespace musik { namespace core {
TrackPtr track;
};
class RetainedTrackWriter : public musik::core::sdk::IRetainedTrackWriter {
class RetainedTagStore : public musik::core::sdk::IRetainedTagStore {
public:
RetainedTrackWriter(TrackPtr track);
virtual ~RetainedTrackWriter();
RetainedTagStore(TrackPtr track);
virtual ~RetainedTagStore();
template <typename T> T As() {
return dynamic_cast<T>(track.get());
}
/* IRetainedTrackWriter */
/* IRetainedTagStore */
virtual void Release();
virtual void Retain();

View File

@ -66,7 +66,7 @@ namespace musik { namespace core {
virtual std::string GetString(const char* metakey) = 0;
virtual std::string Uri() = 0;
/* IWritableTrack */
/* ITagStore */
virtual void SetValue(const char* metakey, const char* value) = 0;
virtual void ClearValue(const char* metakey) = 0;
virtual void SetThumbnail(const char *data, long size) = 0;

View File

@ -52,7 +52,7 @@ namespace musik { namespace core { namespace sdk {
virtual void ScanTrack(
IIndexerWriter* indexer,
IRetainedTrackWriter* track,
IRetainedTagStore* track,
const char* externalId) = 0;
virtual void Interrupt() = 0;

View File

@ -34,7 +34,7 @@
#pragma once
#include "IRetainedTrackWriter.h"
#include "IRetainedTagStore.h"
namespace musik { namespace core { namespace sdk {
@ -42,11 +42,11 @@ namespace musik { namespace core { namespace sdk {
class IIndexerWriter {
public:
virtual IRetainedTrackWriter* CreateWriter() = 0;
virtual IRetainedTagStore* CreateWriter() = 0;
virtual bool Save(
IIndexerSource* source,
IRetainedTrackWriter* track,
IRetainedTagStore* track,
const char* externalId = "") = 0;
virtual bool RemoveByUri(IIndexerSource* source, const char* uri) = 0;

View File

@ -36,17 +36,13 @@
#include "ITagStore.h"
namespace musik {
namespace core {
namespace sdk {
namespace musik { namespace core { namespace sdk {
class IRetainedTrackWriter : public ITagStore {
class IRetainedTagStore : public ITagStore {
public:
virtual void Release() = 0;
virtual void Retain() = 0;
};
}
}
}
} } }

View File

@ -373,7 +373,7 @@ void CddaIndexerSource::Interrupt() {
void CddaIndexerSource::ScanTrack(
IIndexerWriter* indexer,
IRetainedTrackWriter* track,
IRetainedTagStore* track,
const char* externalId)
{
if (!exists(this->discIds, this->model, externalId)) {

View File

@ -56,7 +56,7 @@ class CddaIndexerSource :
virtual void ScanTrack(
musik::core::sdk::IIndexerWriter* indexer,
musik::core::sdk::IRetainedTrackWriter* track,
musik::core::sdk::IRetainedTagStore* track,
const char* externalId);
virtual void Interrupt();