Skip to content

Commit 97bc509

Browse files
junklib: cleanup junk_rewrite_tags, make sure that known field names are written upper case / as specified in remapping table
1 parent ace64c7 commit 97bc509

File tree

1 file changed

+54
-39
lines changed

1 file changed

+54
-39
lines changed

src/junklib.c

Lines changed: 54 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -4689,6 +4689,9 @@ junk_recode (const char *in, int inlen, char *out, int outlen, const char *cs) {
46894689

46904690
int
46914691
junk_rewrite_tags (playItem_t *it, uint32_t junk_flags, int id3v2_version, const char *id3v1_encoding) {
4692+
if (id3v2_version != 3 && id3v2_version != 4) {
4693+
trace ("junk_rewrite_tags: can't write id3v2 version %d\n", id3v2_version);
4694+
}
46924695
trace ("junk_rewrite_tags %X\n", junk_flags);
46934696
int err = -1;
46944697
char *buffer = NULL;
@@ -4927,53 +4930,57 @@ junk_rewrite_tags (playItem_t *it, uint32_t junk_flags, int id3v2_version, const
49274930
}
49284931
}
49294932

4930-
// frames which should not remap to TXXX
4931-
static const char *txxx_no_fallbacks[] = {
4932-
"comment",
4933-
"unsynced lyrics",
4934-
"track"
4935-
"numtracks"
4936-
"disc"
4937-
"numdiscs",
4938-
NULL
4939-
};
4940-
4941-
if (!noremap) {
4942-
if (mapidx >= 0) {
4943-
for (int i = 0; txxx_no_fallbacks[i]; i++) {
4944-
if (!strcasecmp (txxx_no_fallbacks[i], meta->key)) {
4945-
noremap = 1;
4946-
break;
4947-
}
4948-
}
4949-
}
4950-
}
4951-
49524933
// is this a text frame that needs remapping to TXXX?
4953-
if (!noremap) {
4934+
if (!noremap && mapidx >= 0) {
49544935
if (!frame_mapping[mapidx+MAP_ID3V24] || frame_mapping[mapidx+MAP_ID3V24][0] != 'T') {
49554936
noremap = 1;
49564937
}
49574938
}
49584939

4940+
if (!noremap && mapidx >= 0) {
4941+
// frames which should not remap to TXXX
4942+
static const char *txxx_no_fallbacks[] = {
4943+
"comment",
4944+
"unsynced lyrics",
4945+
"track"
4946+
"numtracks"
4947+
"disc"
4948+
"numdiscs",
4949+
NULL
4950+
};
4951+
4952+
for (int i = 0; txxx_no_fallbacks[i]; i++) {
4953+
if (!strcasecmp (txxx_no_fallbacks[i], meta->key)) {
4954+
noremap = 1;
4955+
break;
4956+
}
4957+
}
4958+
}
4959+
49594960
if (!noremap) {
49604961
// add as txxx
4961-
int out_size;
4962+
int out_size = 0;
4963+
int needs_free = 0;
4964+
const char *tag_value = NULL;
49624965

4963-
int needs_free;
4964-
const char *tag_value;
4965-
if (id3v2.version[0] == 4) {
4966+
if (id3v2_version == 4) {
49664967
tag_value = _get_combined_meta_value (meta, &out_size, "\0", 1, &needs_free);
49674968
}
4968-
else if (id3v2.version[0] == 3) {
4969+
else if (id3v2_version == 3) {
49694970
tag_value = _get_combined_meta_value (meta, &out_size, " / ", 3, &needs_free);
49704971
}
4971-
else {
4972-
assert (0);
4972+
4973+
const char *key;
4974+
if (mapidx >= 0) {
4975+
trace ("remapping unsupported text frame to TXXX %s=%s\n", key, tag_value);
4976+
key = frame_mapping[mapidx];
4977+
} else {
4978+
trace ("adding unknown/custom text frame as TXXX %s=%s\n", key, tag_value);
4979+
key = meta->key;
49734980
}
4974-
trace ("adding unknown frame as TXX %s=%s\n", meta->key, tag_value);
4975-
junk_id3v2_remove_txxx_frame (&id3v2, meta->key);
4976-
junk_id3v2_add_txxx_frame (&id3v2, meta->key, tag_value, out_size);
4981+
4982+
junk_id3v2_remove_txxx_frame (&id3v2, key);
4983+
junk_id3v2_add_txxx_frame (&id3v2, key, tag_value, out_size);
49774984
if (needs_free) {
49784985
free ((char *)tag_value);
49794986
}
@@ -5106,22 +5113,30 @@ junk_rewrite_tags (playItem_t *it, uint32_t junk_flags, int id3v2_version, const
51065113
if (strchr (":!_", meta->key[0])) {
51075114
break;
51085115
}
5116+
const char *key = NULL;
51095117
int i;
51105118
for (i = 0; frame_mapping[i]; i += FRAME_MAPPINGS) {
5111-
if (!strcasecmp (meta->key, frame_mapping[i+MAP_DDB]) && frame_mapping[i+MAP_APEV2]) {
5112-
trace ("apev2 appending known field: %s=%s\n", meta->key, meta->value);
5113-
_apev2_append_combined_text_frame_from_meta (&apev2, frame_mapping[i+MAP_APEV2], meta);
5119+
if (!strcasecmp (meta->key, frame_mapping[i+MAP_DDB])) {
5120+
if (frame_mapping[i+MAP_APEV2]) {
5121+
trace ("apev2 appending known field: %s=%s\n", meta->key, meta->value);
5122+
_apev2_append_combined_text_frame_from_meta (&apev2, frame_mapping[i+MAP_APEV2], meta);
5123+
} else {
5124+
key = frame_mapping[i];
5125+
}
51145126
break;
51155127
}
51165128
}
5117-
if (!frame_mapping[i]
5129+
if ((key != NULL || !frame_mapping[i])
51185130
&& strcasecmp (meta->key, "track")
51195131
&& strcasecmp (meta->key, "numtracks")
51205132
&& strcasecmp (meta->key, "disc")
51215133
&& strcasecmp (meta->key, "numdiscs")
51225134
) {
5123-
trace ("apev2 writing unknown field: %s=%s\n", meta->key, meta->value);
5124-
_apev2_append_combined_text_frame_from_meta (&apev2, meta->key, meta);
5135+
if (key == NULL) {
5136+
key = meta->key;
5137+
}
5138+
trace ("apev2 writing unknown field: %s=%s\n", key, meta->value);
5139+
_apev2_append_combined_text_frame_from_meta (&apev2, key, meta);
51255140
}
51265141
meta = meta->next;
51275142
}

0 commit comments

Comments
 (0)