fix #76
This commit is contained in:
parent
8534d44c8b
commit
60cd56a6c0
3 changed files with 47 additions and 6 deletions
|
@ -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
|
||||
|
||||
|
|
|
@ -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)];
|
||||
}
|
||||
|
|
40
src/test/track_number_test.dart
Normal file
40
src/test/track_number_test.dart
Normal 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]);
|
||||
});
|
||||
}
|
Loading…
Add table
Reference in a new issue