This commit is contained in:
Moritz Weber 2023-05-02 17:48:10 +02:00
parent 8534d44c8b
commit 60cd56a6c0
3 changed files with 47 additions and 6 deletions

View file

@ -5,6 +5,7 @@
- Migration to Material 3 widgets including extensive UI changes
- New Icons for linked songs
- Added German translation (#51)
- Fixed track number parsing for three digits (#76)
## 1.2.0

View file

@ -84,7 +84,7 @@ class SongModel extends Song {
required DateTime lastModified,
}) {
final data = songModel.getMap;
final trackNumber = _parseTrackNumber(songModel.track);
final trackNumber = parseTrackNumber(songModel.track);
return SongModel(
title: songModel.title,
@ -214,18 +214,18 @@ class SongModel extends Song {
'color': color?.value,
});
static List<int> _parseTrackNumber(int? number) {
static List<int> parseTrackNumber(int? number) {
if (number == null) return [1, 1];
final numString = number.toString();
final firstZero = numString.indexOf('0');
if (firstZero < 0 || firstZero == numString.length - 1) {
if (numString.length < 4) {
// does not contain a disc number
return [1, number];
}
final disc = numString.substring(0, firstZero);
final track = numString.substring(firstZero + 1);
final disc = numString.substring(0, numString.length - 3);
final track = numString.substring(numString.length - 3);
return [int.parse(disc), int.parse(track)];
}

View file

@ -0,0 +1,40 @@
import 'package:mucke/system/models/song_model.dart';
import 'package:test/test.dart';
void main() {
// four digits lead to invalid numbers from plugin:
// x-1234:1234 (ok in theory but not unambiguous)
// 1-4444:5444
// 123-4567:127567
test('Base case: single digit disc & <3 digit track', () {
expect(SongModel.parseTrackNumber(1001), [1, 1]);
expect(SongModel.parseTrackNumber(2003), [2, 3]);
expect(SongModel.parseTrackNumber(1010), [1, 10]);
});
test('double digit disc', () {
expect(SongModel.parseTrackNumber(10001), [10, 1]);
expect(SongModel.parseTrackNumber(10010), [10, 10]);
expect(SongModel.parseTrackNumber(10100), [10, 100]);
expect(SongModel.parseTrackNumber(12999), [12, 999]);
});
test('triple digit track', () {
expect(SongModel.parseTrackNumber(1100), [1, 100]);
expect(SongModel.parseTrackNumber(1101), [1, 101]);
expect(SongModel.parseTrackNumber(1999), [1, 999]);
expect(SongModel.parseTrackNumber(12999), [12, 999]);
});
test('no disc', () {
expect(SongModel.parseTrackNumber(10), [1, 10]);
expect(SongModel.parseTrackNumber(40), [1, 40]);
expect(SongModel.parseTrackNumber(1), [1, 1]);
});
test('triple digit disc', () {
expect(SongModel.parseTrackNumber(123004), [123, 4]);
expect(SongModel.parseTrackNumber(123045), [123, 45]);
expect(SongModel.parseTrackNumber(123456), [123, 456]);
});
}