Updated IMetadataMap's interface with the same type-related changes as

ITrack. May s well while we're bumping the SDK version. This allows us to
remove some type conversion code from the websocket remote's plugin.
This commit is contained in:
casey langen 2017-03-20 22:22:01 -07:00
parent bde694e9a8
commit 6188fce615
6 changed files with 67 additions and 37 deletions

View File

@ -673,7 +673,7 @@ class PlaybackRemote : public IPlaybackRemote {
{ key::title, album->GetDescription() },
{ key::id, album->GetId() },
{ key::thumbnail_id, 0 }, /* note: thumbnails aren't supported at the album level yet */
{ key::album_artist_id, this->GetMetadataInt64(album, key::album_artist_id) },
{ key::album_artist_id, album->GetInt64(key::album_artist_id.c_str()) },
{ key::album_artist, this->GetMetadataString(album, key::album_artist) }
});
@ -852,14 +852,14 @@ class PlaybackRemote : public IPlaybackRemote {
{ key::id, track->GetId() },
{ key::title, this->GetMetadataString(track, key::title) },
{ key::album, this->GetMetadataString(track, key::album) },
{ key::album_id, this->GetMetadataInt64(track, key::album_id) },
{ key::album_id, track->GetInt64(key::album_id.c_str()) },
{ key::album_artist, this->GetMetadataString(track, key::album_artist) },
{ key::album_artist_id, this->GetMetadataInt64(track, key::album_artist_id) },
{ key::album_artist_id, track->GetInt64(key::album_artist_id.c_str()) },
{ key::artist, this->GetMetadataString(track, key::artist) },
{ key::artist_id, this->GetMetadataInt64(track, key::artist_id) },
{ key::artist_id, track->GetInt64(key::artist_id.c_str()) },
{ key::genre, this->GetMetadataString(track, key::genre) },
{ key::genre_id, this->GetMetadataInt64(track, key::genre_id) },
{ key::thumbnail_id, this->GetMetadataInt64(track, key::thumbnail_id) },
{ key::genre_id, track->GetInt64(key::genre_id.c_str()) },
{ key::thumbnail_id, track->GetInt64(key::thumbnail_id.c_str()) },
};
}
@ -896,16 +896,6 @@ class PlaybackRemote : public IPlaybackRemote {
return std::string(threadLocalBuffer);
}
template <typename MetadataT>
unsigned long long GetMetadataInt64(MetadataT* metadata, const std::string& idKey) {
try {
return std::stoull(this->GetMetadataString(metadata, idKey));
}
catch (...) {
return -1;
}
}
void ThreadProc() {
try {
if (preferences->GetBool("debug")) {

View File

@ -57,6 +57,11 @@ namespace {
virtual void Release() { this->wrapped.reset(); }
virtual unsigned long long GetId() { return this->wrapped->GetId(); }
virtual int GetValue(const char* key, char* dst, int size) { return this->wrapped->GetValue(key, dst, size); }
virtual unsigned long long GetUint64(const char* key, unsigned long long defaultValue) { return this->wrapped->GetUint64(key, defaultValue); }
virtual long long GetInt64(const char* key, long long defaultValue) { return this->wrapped->GetInt64(key, defaultValue); }
virtual unsigned long GetUint32(const char* key, unsigned long defaultValue) { return this->wrapped->GetUint32(key, defaultValue); }
virtual long GetInt32(const char* key, unsigned int defaultValue) { return this->wrapped->GetInt32(key, defaultValue); }
virtual double GetDouble(const char* key, double defaultValue) { return this->wrapped->GetDouble(key, defaultValue); }
virtual const char* GetDescription() { return this->wrapped->GetDescription(); }
virtual const char* GetType() { return this->wrapped->GetType(); }
MetadataMapPtr wrapped;
@ -98,6 +103,39 @@ int MetadataMap::GetValue(const char* key, char* dst, int size) {
return 0;
}
std::string MetadataMap::GetValue(const char* key) {
auto it = metadata.find(key);
if (it != metadata.end()) {
return it->second;
}
return "";
}
unsigned long long MetadataMap::GetUint64(const char* key, unsigned long long defaultValue) {
try { return std::stoull(GetValue(key)); } catch (...) { }
return defaultValue;
}
long long MetadataMap::GetInt64(const char* key, long long defaultValue) {
try { return std::stoll(GetValue(key)); } catch (...) { }
return defaultValue;
}
unsigned long MetadataMap::GetUint32(const char* key, unsigned long defaultValue) {
try { return std::stoul(GetValue(key)); } catch (...) { }
return defaultValue;
}
long MetadataMap::GetInt32(const char* key, unsigned int defaultValue) {
try { return std::stol(GetValue(key)); } catch (...) { }
return defaultValue;
}
double MetadataMap::GetDouble(const char* key, double defaultValue) {
try { return std::stod(GetValue(key)); } catch (...) { }
return defaultValue;
}
const char* MetadataMap::GetDescription() {
return this->description.c_str();
}

View File

@ -56,12 +56,19 @@ namespace musik { namespace core {
/* IMetadataMap */
virtual void Release();
virtual unsigned long long GetId();
virtual int GetValue(const char* key, char* dst, int size);
virtual const char* GetDescription();
virtual const char* GetType();
virtual int GetValue(const char* key, char* dst, int size);
virtual unsigned long long GetUint64(const char* key, unsigned long long defaultValue = 0ULL);
virtual long long GetInt64(const char* key, long long defaultValue = 0LL);
virtual unsigned long GetUint32(const char* key, unsigned long defaultValue = 0);
virtual long GetInt32(const char* key, unsigned int defaultValue = 0);
virtual double GetDouble(const char* key, double defaultValue = 0.0f);
/* implementation specific */
void SetValue(const char* key, const std::string& value);
std::string GetValue(const char* key);
musik::core::sdk::IMetadataMap* GetSdkValue();
private:

View File

@ -88,32 +88,27 @@ std::string IndexerTrack::GetValue(const char* metakey) {
}
unsigned long long IndexerTrack::GetUint64(const char* key, unsigned long long defaultValue) {
try { return std::stoull(GetValue(key)); }
catch (...) { }
try { return std::stoull(GetValue(key)); } catch (...) { }
return defaultValue;
}
long long IndexerTrack::GetInt64(const char* key, long long defaultValue) {
try { return std::stoll(GetValue(key)); }
catch (...) {}
try { return std::stoll(GetValue(key)); } catch (...) { }
return defaultValue;
}
unsigned long IndexerTrack::GetUint32(const char* key, unsigned long defaultValue) {
try { return std::stoul(GetValue(key)); }
catch (...) {}
try { return std::stoul(GetValue(key)); } catch (...) { }
return defaultValue;
}
long IndexerTrack::GetInt32(const char* key, unsigned int defaultValue) {
try { return std::stol(GetValue(key)); }
catch (...) {}
try { return std::stol(GetValue(key)); } catch (...) { }
return defaultValue;
}
double IndexerTrack::GetDouble(const char* key, double defaultValue) {
try { return std::stod(GetValue(key)); }
catch (...) {}
try { return std::stod(GetValue(key)); } catch (...) { }
return defaultValue;
}

View File

@ -72,32 +72,27 @@ std::string LibraryTrack::GetValue(const char* metakey) {
}
unsigned long long LibraryTrack::GetUint64(const char* key, unsigned long long defaultValue) {
try { return std::stoull(GetValue(key)); }
catch (...) {}
try { return std::stoull(GetValue(key)); } catch (...) { }
return defaultValue;
}
long long LibraryTrack::GetInt64(const char* key, long long defaultValue) {
try { return std::stoll(GetValue(key)); }
catch (...) {}
try { return std::stoll(GetValue(key)); } catch (...) { }
return defaultValue;
}
unsigned long LibraryTrack::GetUint32(const char* key, unsigned long defaultValue) {
try { return std::stoul(GetValue(key)); }
catch (...) {}
try { return std::stoul(GetValue(key)); } catch (...) { }
return defaultValue;
}
long LibraryTrack::GetInt32(const char* key, unsigned int defaultValue) {
try { return std::stol(GetValue(key)); }
catch (...) {}
try { return std::stol(GetValue(key)); } catch (...) { }
return defaultValue;
}
double LibraryTrack::GetDouble(const char* key, double defaultValue) {
try { return std::stod(GetValue(key)); }
catch (...) {}
try { return std::stod(GetValue(key)); } catch (...) { }
return defaultValue;
}

View File

@ -41,6 +41,11 @@ namespace musik { namespace core { namespace sdk {
virtual void Release() = 0;
virtual unsigned long long GetId() = 0;
virtual int GetValue(const char* key, char* dst, int size) = 0;
virtual unsigned long long GetUint64(const char* key, unsigned long long defaultValue = 0ULL) = 0;
virtual long long GetInt64(const char* key, long long defaultValue = 0LL) = 0;
virtual unsigned long GetUint32(const char* key, unsigned long defaultValue = 0) = 0;
virtual long GetInt32(const char* key, unsigned int defaultValue = 0) = 0;
virtual double GetDouble(const char* key, double defaultValue = 0.0f) = 0;
virtual const char* GetDescription() = 0;
virtual const char* GetType() = 0;
};