mirror of
https://github.com/WinampDesktop/winamp.git
synced 2024-09-24 15:54:12 +00:00
100 lines
2.4 KiB
C
100 lines
2.4 KiB
C
|
#pragma once
|
||
|
#include "metadata/ifc_metadata_editor.h"
|
||
|
|
||
|
|
||
|
template <class metadata_t>
|
||
|
class MetadataEditorChain : public metadata_t
|
||
|
{
|
||
|
public:
|
||
|
MetadataEditorChain()
|
||
|
{
|
||
|
parent_metadata=0;
|
||
|
}
|
||
|
|
||
|
~MetadataEditorChain()
|
||
|
{
|
||
|
if (parent_metadata)
|
||
|
parent_metadata->Release();
|
||
|
}
|
||
|
|
||
|
static bool Unhandled(ns_error_t ret)
|
||
|
{
|
||
|
return (ret == NErr_NotImplemented || ret == NErr_Empty || ret == NErr_Unknown);
|
||
|
}
|
||
|
|
||
|
ns_error_t SetParentMetadata(ifc_metadata_editor *new_parent_metadata)
|
||
|
{
|
||
|
if (parent_metadata)
|
||
|
parent_metadata->Release();
|
||
|
parent_metadata=new_parent_metadata;
|
||
|
if (parent_metadata)
|
||
|
parent_metadata->Retain();
|
||
|
return NErr_Success;
|
||
|
}
|
||
|
protected:
|
||
|
ifc_metadata_editor *parent_metadata;
|
||
|
private:
|
||
|
int WASABICALL MetadataEditor_Save()
|
||
|
{
|
||
|
if (parent_metadata)
|
||
|
return parent_metadata->Save();
|
||
|
else
|
||
|
return NErr_NotImplemented;
|
||
|
}
|
||
|
|
||
|
int WASABICALL MetadataEditor_SetField(int field, unsigned int index, nx_string_t value)
|
||
|
{
|
||
|
bool known=false;
|
||
|
if (parent_metadata && parent_metadata->SetField(field, index, value) == NErr_Success)
|
||
|
known=true;
|
||
|
if (metadata_t::MetadataEditor_SetField(field, index, value) == NErr_Success)
|
||
|
known=true;
|
||
|
|
||
|
if (known)
|
||
|
return NErr_Success;
|
||
|
else
|
||
|
return NErr_Unknown;
|
||
|
}
|
||
|
|
||
|
int WASABICALL MetadataEditor_SetInteger(int field, unsigned int index, int64_t value)
|
||
|
{
|
||
|
bool known=false;
|
||
|
if (parent_metadata && parent_metadata->SetInteger(field, index, value) == NErr_Success)
|
||
|
known=true;
|
||
|
if (metadata_t::MetadataEditor_SetInteger(field, index, value) == NErr_Success)
|
||
|
known=true;
|
||
|
|
||
|
if (known)
|
||
|
return NErr_Success;
|
||
|
else
|
||
|
return NErr_Unknown;
|
||
|
}
|
||
|
|
||
|
int WASABICALL MetadataEditor_SetReal(int field, unsigned int index, double value)
|
||
|
{
|
||
|
bool known=false;
|
||
|
if (parent_metadata && parent_metadata->SetReal(field, index, value) == NErr_Success)
|
||
|
known=true;
|
||
|
if (metadata_t::MetadataEditor_SetReal(field, index, value) == NErr_Success)
|
||
|
known=true;
|
||
|
|
||
|
if (known)
|
||
|
return NErr_Success;
|
||
|
else
|
||
|
return NErr_Unknown;
|
||
|
}
|
||
|
|
||
|
int WASABICALL MetadataEditor_SetArtwork(int field, unsigned int index, artwork_t *data, data_flags_t flags)
|
||
|
{
|
||
|
bool known=false;
|
||
|
if (parent_metadata && parent_metadata->SetArtwork(field, index, data, flags) == NErr_Success)
|
||
|
known=true;
|
||
|
if (metadata_t::MetadataEditor_SetArtwork(field, index, data, flags) == NErr_Success)
|
||
|
known=true;
|
||
|
|
||
|
if (known)
|
||
|
return NErr_Success;
|
||
|
else
|
||
|
return NErr_Unknown;
|
||
|
}
|
||
|
};
|