123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- #include "apev2.h"
- APE::APE()
- {
- hasData=false;
- dirty=false;
- }
- int APE::Decode(const void *data, size_t len)
- {
- if (APEv2::Tag::Parse(data, len) == APEv2::APEV2_SUCCESS)
- {
- hasData=true;
- return 1;
- }
- return 0;
- }
- // return -1 for empty, 1 for OK, 0 for "don't understand metadata name"
- int APE::GetString(const char *metadata, wchar_t *data, int dataLen)
- {
- if (!hasData)
- return 0;
- if (!_stricmp(metadata, "replaygain_track_gain")
- || !_stricmp(metadata, "replaygain_track_peak")
- || !_stricmp(metadata, "replaygain_album_gain")
- || !_stricmp(metadata, "replaygain_album_peak"))
- {
- if (APEv2::Tag::GetString(metadata, data, dataLen) == APEv2::APEV2_SUCCESS)
- return 1;
- return -1;
- }
- else
- {
- const char *ape_key = MapWinampKeyToApeKey(metadata);
- if (ape_key)
- {
- if (APEv2::Tag::GetString(ape_key, data, dataLen) == APEv2::APEV2_SUCCESS)
- return 1;
- return -1;
- }
- }
- return 0;
- }
- int APE::SetString(const char *metadata, const wchar_t *data)
- {
- if (!_stricmp(metadata, "replaygain_track_gain")
- || !_stricmp(metadata, "replaygain_track_peak")
- || !_stricmp(metadata, "replaygain_album_gain")
- || !_stricmp(metadata, "replaygain_album_peak"))
- {
- APEv2::Tag::SetString(metadata, data);
- dirty=true;
- hasData=true;
- return 1;
- }
- else
- {
- const char *ape_key = MapWinampKeyToApeKey(metadata);
- if (ape_key)
- {
- APEv2::Tag::SetString(ape_key, data);
- dirty=true;
- hasData=true;
- return 1;
- }
- }
- return 0;
- }
- void APE::Clear()
- {
- APEv2::Tag::Clear();
- dirty=true;
- hasData=false;
- }
- void APE::MarkClear()
- {
- dirty=true;
- hasData=false;
- }
- int APE::SetKeyValueByIndex(size_t index, const char *key, const wchar_t *data)
- {
- dirty=true;
- return APEv2::Tag::SetKeyValueByIndex(index, key, data);
- }
- int APE::RemoveItem(size_t index)
- {
- dirty=true;
- return APEv2::Tag::RemoveItem(index);
- }
- int APE::AddItem()
- {
- dirty=true;
- hasData=true;
- APEv2::Tag::AddItem();
- return APEv2::APEV2_SUCCESS;
- }
- struct ApeKeyMapping
- {
- const char *ape_key;
- const char *winamp_key;
- const wchar_t *winamp_keyW;
- };
- static ApeKeyMapping apeKeyMapping[] =
- {
- { "Track", "track", L"track" },
- {"Album", "album", L"album" },
- {"Artist", "artist", L"artist" },
- {"Comment", "comment", L"comment" },
- {"Year", "year", L"year" },
- {"Genre", "genre", L"genre" },
- {"Title", "title", L"title"},
- {"Composer", "composer", L"composer"},
- {"Performer", "performer", L"performer"},
- {"Album artist", "albumartist", L"albumartist"},
- };
- const wchar_t *APE::MapApeKeyToWinampKeyW(const char *ape_key)
- {
- size_t num_mappings = sizeof(apeKeyMapping)/sizeof(apeKeyMapping[0]);
- for (size_t i=0;i!=num_mappings;i++)
- {
- if (!_stricmp(ape_key, apeKeyMapping[i].ape_key))
- return apeKeyMapping[i].winamp_keyW;
- }
- return NULL;
- }
- const char *APE::MapApeKeyToWinampKey(const char *ape_key)
- {
- size_t num_mappings = sizeof(apeKeyMapping)/sizeof(apeKeyMapping[0]);
- for (size_t i=0;i!=num_mappings;i++)
- {
- if (!_stricmp(ape_key, apeKeyMapping[i].ape_key))
- return apeKeyMapping[i].winamp_key;
- }
- return NULL;
- }
- const char *APE::MapWinampKeyToApeKey(const char *winamp_key)
- {
- size_t num_mappings = sizeof(apeKeyMapping)/sizeof(apeKeyMapping[0]);
- for (size_t i=0;i!=num_mappings;i++)
- {
- if (!_stricmp(winamp_key, apeKeyMapping[i].winamp_key))
- return apeKeyMapping[i].ape_key;
- }
- return NULL;
- }
- int APE::AddKeyValue(const char *key, const wchar_t *data)
- {
- dirty=true;
- hasData=true;
- APEv2::Item *newItem = APEv2::Tag::AddItem();
- newItem->SetKey(key);
- return APEv2::Tag::SetItemData(newItem, data);
- }
|