aboutsummaryrefslogtreecommitdiff
path: root/Src/replicant/metadata/ifc_metadata.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/replicant/metadata/ifc_metadata.h')
-rw-r--r--Src/replicant/metadata/ifc_metadata.h65
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; }
+};