fix: preserve embedded metadata details

This commit is contained in:
zarzet
2026-04-04 18:06:52 +07:00
parent 4b213f47d9
commit 4bac38ef2a
5 changed files with 60 additions and 14 deletions
+15 -3
View File
@@ -1760,9 +1760,13 @@ class FFmpegService {
if (value != '0') vorbis['DISCNUMBER'] = value;
break;
case 'DATE':
case 'YEAR':
vorbis['DATE'] = value;
break;
case 'YEAR':
if (!vorbis.containsKey('DATE') || vorbis['DATE']!.isEmpty) {
vorbis['DATE'] = value;
}
break;
case 'GENRE':
vorbis['GENRE'] = value;
break;
@@ -1921,9 +1925,13 @@ class FFmpegService {
m4aMap['disc'] = value;
break;
case 'DATE':
case 'YEAR':
m4aMap['date'] = value;
break;
case 'YEAR':
if (!m4aMap.containsKey('date') || m4aMap['date']!.isEmpty) {
m4aMap['date'] = value;
}
break;
case 'GENRE':
m4aMap['genre'] = value;
break;
@@ -2004,9 +2012,13 @@ class FFmpegService {
}
break;
case 'DATE':
case 'YEAR':
id3Map['date'] = value;
break;
case 'YEAR':
if (!id3Map.containsKey('date') || id3Map['date']!.isEmpty) {
id3Map['date'] = value;
}
break;
case 'ISRC':
id3Map['TSRC'] = value;
break;
+21 -1
View File
@@ -27,6 +27,8 @@ class LocalLibraryItem {
final int? sampleRate;
final int? bitrate; // kbps, for lossy formats (mp3, opus, ogg)
final String? genre;
final String? label;
final String? copyright;
final String? format; // flac, mp3, opus, m4a
const LocalLibraryItem({
@@ -48,6 +50,8 @@ class LocalLibraryItem {
this.sampleRate,
this.bitrate,
this.genre,
this.label,
this.copyright,
this.format,
});
@@ -70,6 +74,8 @@ class LocalLibraryItem {
'sampleRate': sampleRate,
'bitrate': bitrate,
'genre': genre,
'label': label,
'copyright': copyright,
'format': format,
};
@@ -93,6 +99,8 @@ class LocalLibraryItem {
sampleRate: json['sampleRate'] as int?,
bitrate: (json['bitrate'] as num?)?.toInt(),
genre: json['genre'] as String?,
label: json['label'] as String?,
copyright: json['copyright'] as String?,
format: json['format'] as String?,
);
@@ -122,7 +130,7 @@ class LibraryDatabase {
return await openDatabase(
path,
version: 4,
version: 5,
onConfigure: (db) async {
await db.rawQuery('PRAGMA journal_mode = WAL');
await db.execute('PRAGMA synchronous = NORMAL');
@@ -155,6 +163,8 @@ class LibraryDatabase {
sample_rate INTEGER,
bitrate INTEGER,
genre TEXT,
label TEXT,
copyright TEXT,
format TEXT
)
''');
@@ -190,6 +200,12 @@ class LibraryDatabase {
await db.execute('ALTER TABLE library ADD COLUMN bitrate INTEGER');
_log.i('Added bitrate column for lossy format quality');
}
if (oldVersion < 5) {
await db.execute('ALTER TABLE library ADD COLUMN label TEXT');
await db.execute('ALTER TABLE library ADD COLUMN copyright TEXT');
_log.i('Added label/copyright columns');
}
}
Map<String, dynamic> _jsonToDbRow(Map<String, dynamic> json) {
@@ -212,6 +228,8 @@ class LibraryDatabase {
'sample_rate': json['sampleRate'],
'bitrate': json['bitrate'],
'genre': json['genre'],
'label': json['label'],
'copyright': json['copyright'],
'format': json['format'],
};
}
@@ -236,6 +254,8 @@ class LibraryDatabase {
'sampleRate': row['sample_rate'],
'bitrate': row['bitrate'],
'genre': row['genre'],
'label': row['label'],
'copyright': row['copyright'],
'format': row['format'],
};
}