123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- #include "ID3v1Metadata.h"
- #include "metadata/MetadataKeys.h"
- #include <stdlib.h>
- api_metadata *ID3v1Metadata::metadata_api=0;
- ID3v1Metadata::ID3v1Metadata()
- {
- id3v1_tag=0;
- }
- ID3v1Metadata::~ID3v1Metadata()
- {
- }
- int ID3v1Metadata::Initialize(api_metadata *metadata_api)
- {
- ID3v1Metadata::metadata_api = metadata_api;
- return NErr_Success;
- }
- int ID3v1Metadata::Initialize(nsid3v1_tag_t tag)
- {
- id3v1_tag = tag;
- this->metadata_api = metadata_api;
- return NErr_Success;
- }
- /* ifc_metadata implementation */
- int ID3v1Metadata::Metadata_GetField(int field, unsigned int index, nx_string_t *value)
- {
- if (!id3v1_tag)
- return NErr_Unknown;
- switch (field)
- {
- case MetadataKeys::TITLE:
- return index?NErr_EndOfEnumeration:NSID3v1_Get_Title(id3v1_tag, value);
- case MetadataKeys::ARTIST:
- return index?NErr_EndOfEnumeration:NSID3v1_Get_Artist(id3v1_tag, value);
- case MetadataKeys::ALBUM:
- return index?NErr_EndOfEnumeration:NSID3v1_Get_Album(id3v1_tag, value);
- case MetadataKeys::YEAR:
- return index?NErr_EndOfEnumeration:NSID3v1_Get_Year(id3v1_tag, value);
- case MetadataKeys::COMMENT:
- return index?NErr_EndOfEnumeration:NSID3v1_Get_Comment(id3v1_tag, value);
- case MetadataKeys::TRACK:
- return index?NErr_EndOfEnumeration:NSID3v1_Get_Track(id3v1_tag, value);
- case MetadataKeys::GENRE:
- {
- if (!metadata_api)
- return NErr_Unknown;
- if (index > 0)
- return NErr_EndOfEnumeration;
- uint8_t genre_id;
- int ret = NSID3v1_Int_Get_Genre(id3v1_tag, &genre_id);
- if (ret != NErr_Success)
- return ret;
- nx_string_t genre;
- ret = metadata_api->GetGenre(genre_id, &genre);
- if (ret == NErr_Success)
- {
- *value = NXStringRetain(genre);
- return NErr_Success;
- }
- else if (ret == NErr_Unknown)
- {
- return NErr_Empty;
- }
- else
- {
- return ret;
- }
- }
- }
- return NErr_Unknown;
- }
- int ID3v1Metadata::Metadata_GetInteger(int field, unsigned int index, int64_t *value)
- {
- if (!id3v1_tag)
- return NErr_Unknown;
- switch (field)
- {
- case MetadataKeys::YEAR:
- {
- if (index > 0)
- return NErr_EndOfEnumeration;
- unsigned int year;
- int ret = NSID3v1_Int_Get_Year(id3v1_tag, &year);
- if (ret == NErr_Success)
- *value = (int64_t)year;
- return ret;
- }
- case MetadataKeys::TRACK:
- {
- if (index > 0)
- return NErr_EndOfEnumeration;
- uint8_t track;
- int ret = NSID3v1_Int_Get_Track(id3v1_tag, &track);
- if (ret == NErr_Success)
- *value = (int64_t)track;
- return ret;
- }
- }
- return NErr_Unknown;
- }
- int ID3v1Metadata::Metadata_GetReal(int field, unsigned int index, double *value)
- {
- if (!id3v1_tag)
- return NErr_Unknown;
- return NErr_Unknown;
- }
- int ID3v1Metadata::MetadataEditor_SetField(int field, unsigned int index, nx_string_t value)
- {
- if (!id3v1_tag)
- return NErr_NullPointer;
- switch (field)
- {
- case MetadataKeys::TITLE:
- return index?NErr_EndOfEnumeration:NSID3v1_Set_Title(id3v1_tag, value);
- case MetadataKeys::ARTIST:
- return index?NErr_EndOfEnumeration:NSID3v1_Set_Artist(id3v1_tag, value);
- case MetadataKeys::ALBUM:
- return index?NErr_EndOfEnumeration:NSID3v1_Set_Album(id3v1_tag, value);
- case MetadataKeys::YEAR:
- return index?NErr_EndOfEnumeration:NSID3v1_Set_Year(id3v1_tag, value);
- case MetadataKeys::COMMENT:
- return index?NErr_EndOfEnumeration:NSID3v1_Set_Comment(id3v1_tag, value);
- case MetadataKeys::TRACK:
- return index?NErr_EndOfEnumeration:NSID3v1_Set_Track(id3v1_tag, value);
- case MetadataKeys::GENRE:
- {
- if (!metadata_api)
- return NErr_Unknown;
- if (index > 0)
- return NErr_EndOfEnumeration;
- uint8_t genre_id;
- int ret = metadata_api->GetGenreID(value, &genre_id);
- if (ret == NErr_Success)
- return NSID3v1_Int_Set_Genre(id3v1_tag, genre_id);
- else
- return NSID3v1_Int_Set_Genre(id3v1_tag, 0xFF);
- }
-
- }
- return NErr_Unknown;
- }
- int ID3v1Metadata::MetadataEditor_SetInteger(int field, unsigned int index, int64_t value)
- {
- if (!id3v1_tag)
- return NErr_NullPointer;
- if (index != 0)
- return NErr_EndOfEnumeration;
- switch (field)
- {
- case MetadataKeys::YEAR:
- return NSID3v1_Int_Set_Year(id3v1_tag, (unsigned int)value);
- case MetadataKeys::TRACK:
- if (value < 0 || value > 255)
- return NErr_ParameterOutOfRange;
- return NSID3v1_Int_Set_Track(id3v1_tag, (uint8_t)value);
- case MetadataKeys::GENRE:
- if (value < 0 || value > 255)
- return NErr_ParameterOutOfRange;
- return NSID3v1_Int_Set_Genre(id3v1_tag, (uint8_t)value);
- }
- return NErr_Unknown;
- }
- #undef DESCRIPTION
|