chore: run dart format
Some checks are pending
Flutter CI & Release / Test (push) Waiting to run
Flutter CI & Release / Build Android APKs (push) Blocked by required conditions
Flutter CI & Release / build_linux (push) Blocked by required conditions
Flutter CI & Release / Create GitHub Release (push) Blocked by required conditions

This commit is contained in:
Dr.Blank 2026-01-10 16:51:05 +05:30
parent a520136e01
commit e23c0b6c5f
No known key found for this signature in database
GPG key ID: BA5F87FF0560C57B
84 changed files with 1565 additions and 1945 deletions

View file

@ -23,7 +23,9 @@ Duration sumOfTracks(BookExpanded book, int? index) {
_logger.warning('Index is null or less than 0, returning 0');
return Duration.zero;
}
final total = book.tracks.sublist(0, index).fold<Duration>(
final total = book.tracks
.sublist(0, index)
.fold<Duration>(
Duration.zero,
(previousValue, element) => previousValue + element.duration,
);
@ -34,13 +36,10 @@ Duration sumOfTracks(BookExpanded book, int? index) {
/// returns the [AudioTrack] to play based on the [position] in the [book]
AudioTrack getTrackToPlay(BookExpanded book, Duration position) {
_logger.fine('Getting track to play for position: $position');
final track = book.tracks.firstWhere(
(element) {
return element.startOffset <= position &&
(element.startOffset + element.duration) >= position;
},
orElse: () => book.tracks.last,
);
final track = book.tracks.firstWhere((element) {
return element.startOffset <= position &&
(element.startOffset + element.duration) >= position;
}, orElse: () => book.tracks.last);
_logger.fine('Track to play for position: $position is $track');
return track;
}
@ -126,8 +125,12 @@ class AudiobookPlayer extends AudioPlayer {
ConcatenatingAudioSource(
useLazyPreparation: true,
children: book.tracks.map((track) {
final retrievedUri =
_getUri(track, downloadedUris, baseUrl: baseUrl, token: token);
final retrievedUri = _getUri(
track,
downloadedUris,
baseUrl: baseUrl,
token: token,
);
_logger.fine(
'Setting source for track: ${track.title}, URI: ${retrievedUri.obfuscate()}',
);
@ -141,7 +144,8 @@ class AudiobookPlayer extends AudioPlayer {
.formatNotificationTitle(book),
album: appSettings.notificationSettings.secondaryTitle
.formatNotificationTitle(book),
artUri: artworkUri ??
artUri:
artworkUri ??
Uri.parse(
'$baseUrl/api/items/${book.libraryItemId}/cover?token=$token&width=800',
),
@ -255,12 +259,9 @@ class AudiobookPlayer extends AudioPlayer {
if (_book!.chapters.isEmpty) {
return null;
}
return _book!.chapters.firstWhere(
(element) {
return element.start <= positionInBook && element.end >= positionInBook;
},
orElse: () => _book!.chapters.first,
);
return _book!.chapters.firstWhere((element) {
return element.start <= positionInBook && element.end >= positionInBook;
}, orElse: () => _book!.chapters.first);
}
}
@ -271,11 +272,9 @@ Uri _getUri(
required String token,
}) {
// check if the track is in the downloadedUris
final uri = downloadedUris?.firstWhereOrNull(
(element) {
return element.pathSegments.last == track.metadata?.filename;
},
);
final uri = downloadedUris?.firstWhereOrNull((element) {
return element.pathSegments.last == track.metadata?.filename;
});
return uri ??
Uri.parse('${baseUrl.toString()}${track.contentUrl}?token=$token');
@ -283,17 +282,14 @@ Uri _getUri(
extension FormatNotificationTitle on String {
String formatNotificationTitle(BookExpanded book) {
return replaceAllMapped(
RegExp(r'\$(\w+)'),
(match) {
final type = match.group(1);
return NotificationTitleType.values
.firstWhere((element) => element.name == type)
.extractFrom(book) ??
match.group(0) ??
'';
},
);
return replaceAllMapped(RegExp(r'\$(\w+)'), (match) {
final type = match.group(1);
return NotificationTitleType.values
.firstWhere((element) => element.name == type)
.extractFrom(book) ??
match.group(0) ??
'';
});
}
}

View file

@ -30,23 +30,28 @@ Future<void> configurePlayer() async {
androidShowNotificationBadge: false,
notificationConfigBuilder: (state) {
final controls = [
if (appSettings.notificationSettings.mediaControls
.contains(NotificationMediaControl.skipToPreviousChapter) &&
if (appSettings.notificationSettings.mediaControls.contains(
NotificationMediaControl.skipToPreviousChapter,
) &&
state.hasPrevious)
MediaControl.skipToPrevious,
if (appSettings.notificationSettings.mediaControls
.contains(NotificationMediaControl.rewind))
if (appSettings.notificationSettings.mediaControls.contains(
NotificationMediaControl.rewind,
))
MediaControl.rewind,
if (state.playing) MediaControl.pause else MediaControl.play,
if (appSettings.notificationSettings.mediaControls
.contains(NotificationMediaControl.fastForward))
if (appSettings.notificationSettings.mediaControls.contains(
NotificationMediaControl.fastForward,
))
MediaControl.fastForward,
if (appSettings.notificationSettings.mediaControls
.contains(NotificationMediaControl.skipToNextChapter) &&
if (appSettings.notificationSettings.mediaControls.contains(
NotificationMediaControl.skipToNextChapter,
) &&
state.hasNext)
MediaControl.skipToNext,
if (appSettings.notificationSettings.mediaControls
.contains(NotificationMediaControl.stop))
if (appSettings.notificationSettings.mediaControls.contains(
NotificationMediaControl.stop,
))
MediaControl.stop,
];
return NotificationConfig(