diff options
Diffstat (limited to 'Src/replicant/metadata/ifc_metadata.h')
-rw-r--r-- | Src/replicant/metadata/ifc_metadata.h | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/Src/replicant/metadata/ifc_metadata.h b/Src/replicant/metadata/ifc_metadata.h new file mode 100644 index 00000000..039d69b6 --- /dev/null +++ b/Src/replicant/metadata/ifc_metadata.h @@ -0,0 +1,65 @@ +#pragma once +#include "foundation/dispatch.h" +#include "nx/nxstring.h" +#include "nx/nxdata.h" +#include "foundation/error.h" +#include "metadata/MetadataKeys.h" +#include "metadata/types.h" + +class NOVTABLE ifc_metadata : public Wasabi2::Dispatchable +{ +protected: + ifc_metadata() : Dispatchable(DISPATCHABLE_VERSION) {} +public: + virtual ~ifc_metadata() {} + + enum + { + INDEX_DEFAULT = -1, + }; + + /* Fields */ + ns_error_t GetField(int field, unsigned int index, nx_string_t *value) { return Metadata_GetField(field, index, value); } + ns_error_t GetInteger(int field, unsigned int index, int64_t *value) { return Metadata_GetInteger(field, index, value); } + ns_error_t GetReal(int field, unsigned int index, double *value) { return Metadata_GetReal(field, index, value); } + + ns_error_t SetField(int field, unsigned int index, nx_string_t value) { return Metadata_SetField(field, index, value); } + ns_error_t SetInteger(int field, unsigned int index, int64_t value) { return Metadata_SetInteger(field, index, value); } + ns_error_t SetReal(int field, unsigned int index, double value) { return Metadata_SetReal(field, index, value); } + + /* Art */ + ns_error_t GetArtwork(int field, unsigned int index, artwork_t *artwork, data_flags_t flags=DATA_FLAG_ALL) { return Metadata_GetArtwork(field, index, artwork, flags); } + + /* Binary Data */ + ns_error_t GetBinary(int field, unsigned int index, nx_data_t *data) { return Metadata_GetBinary(field, index, data); } + + /* sub-tracks */ + ns_error_t GetMetadata(int field, unsigned int index, ifc_metadata **metadata) { return Metadata_GetMetadata(field, index, metadata); } + + ns_error_t Serialize(nx_data_t *data) { return Metadata_Serialize(data); } + + enum + { + DISPATCHABLE_VERSION, + }; +protected: + virtual ns_error_t WASABICALL Metadata_GetField(int field, unsigned int index, nx_string_t *value)=0; + virtual ns_error_t WASABICALL Metadata_GetInteger(int field, unsigned int index, int64_t *value)=0; + virtual ns_error_t WASABICALL Metadata_GetReal(int field, unsigned int index, double *value)=0; + + virtual ns_error_t WASABICALL Metadata_SetField(int field, unsigned int index, nx_string_t value){ return NErr_NotImplemented; }; + virtual ns_error_t WASABICALL Metadata_SetInteger(int field, unsigned int index, int64_t value){ return NErr_NotImplemented; }; + virtual ns_error_t WASABICALL Metadata_SetReal(int field, unsigned int index, double value){ return NErr_NotImplemented; }; + + /* notes: + passing NULL for any of the pointers (most notably, data) indicates that it's not needed + width and height aren't guaranteed to be actually accurate. they will be set only if it was marked in the file, otherwise they will be set to 0 + mime_type might also come back as 0 if it wasn't stored in the metadata. and again, mime_type isn't guaranteed to be accurate + for type, MetadataKeys::ALBUM is for album art. use Metadata::UNKNOWN for unknown types, such as id3v2 tags with Picture types marked as "other" ($00) + index should be as stored in the file, do not re-arrange. */ + virtual ns_error_t WASABICALL Metadata_GetArtwork(int field, unsigned int index, artwork_t *artwork, data_flags_t flags)=0; + virtual ns_error_t WASABICALL Metadata_GetBinary(int field, unsigned int index, nx_data_t *data)=0; + virtual ns_error_t WASABICALL Metadata_GetMetadata(int field, unsigned int index, ifc_metadata **metadata) { return NErr_NotImplemented; } + + virtual ns_error_t WASABICALL Metadata_Serialize(nx_data_t *data) { return NErr_NotImplemented; } +}; |