Skip to content

Commit 1d7c01c

Browse files
authored
fix: write CD and genres for MP3 (#70)
* add a setter for the CDs * write the genres for MP3
1 parent d55ea0a commit 1d7c01c

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

lib/src/metadata/base.dart

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,4 +263,26 @@ extension CommonMetadataSetters on ParserTag {
263263
break;
264264
}
265265
}
266+
267+
/// Has no effect on RIFF metadata (`.wav`)
268+
void setCD(int? cdNumber, int? discTotal) {
269+
switch (this) {
270+
case Mp3Metadata m:
271+
if (cdNumber != null && discTotal == null)
272+
m.partOfSet = "$cdNumber";
273+
else if (cdNumber != null && discTotal != null)
274+
m.partOfSet = "$cdNumber/$discTotal";
275+
break;
276+
case Mp4Metadata m:
277+
m.discNumber = cdNumber;
278+
m.totalDiscs = discTotal;
279+
break;
280+
case VorbisMetadata m:
281+
m.discNumber = cdNumber;
282+
m.discTotal = discTotal;
283+
break;
284+
case RiffMetadata():
285+
break;
286+
}
287+
}
266288
}

lib/src/writers/id3v4_writer.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,12 @@ class Id3v4Writer extends BaseMetadataWriter<Mp3Metadata> {
173173
if (metadata.year != null) {
174174
_writeFrame(builder, "TYER", metadata.year!.toString());
175175
}
176+
if (metadata.genres.isNotEmpty) {
177+
final genresString = metadata.genres.join('/');
178+
_writeFrame(builder, "TCON", genresString);
179+
} else if (metadata.contentType != null) {
180+
_writeFrame(builder, "TCON", metadata.contentType!);
181+
}
176182
}
177183

178184
void _writeFrame(BytesBuilder builder, String frameId, String data) {

0 commit comments

Comments
 (0)