mirror of
https://github.com/austinried/subtracks.git
synced 2025-12-27 09:09:29 +01:00
show snackbar error for sync
log http errors log sync errors
This commit is contained in:
parent
67f0c926c4
commit
c2733482e5
@ -4,6 +4,7 @@ import 'package:infinite_scroll_pagination/infinite_scroll_pagination.dart';
|
|||||||
|
|
||||||
import '../services/sync_service.dart';
|
import '../services/sync_service.dart';
|
||||||
import 'items.dart';
|
import 'items.dart';
|
||||||
|
import 'snackbars.dart';
|
||||||
|
|
||||||
class PagedListQueryView<T> extends HookConsumerWidget {
|
class PagedListQueryView<T> extends HookConsumerWidget {
|
||||||
final PagingController<int, T> pagingController;
|
final PagingController<int, T> pagingController;
|
||||||
@ -122,7 +123,13 @@ class SyncAllRefresh extends HookConsumerWidget {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
return RefreshIndicator(
|
return RefreshIndicator(
|
||||||
onRefresh: () => ref.read(syncServiceProvider.notifier).syncAll(),
|
onRefresh: () async {
|
||||||
|
try {
|
||||||
|
await ref.read(syncServiceProvider.notifier).syncAll();
|
||||||
|
} catch (e) {
|
||||||
|
showErrorSnackbar(context, e.toString());
|
||||||
|
}
|
||||||
|
},
|
||||||
child: child,
|
child: child,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -16,7 +16,14 @@ class SubtracksHttpClient extends BaseClient {
|
|||||||
Future<StreamedResponse> send(BaseRequest request) {
|
Future<StreamedResponse> send(BaseRequest request) {
|
||||||
request.headers.addAll(subtracksHeaders);
|
request.headers.addAll(subtracksHeaders);
|
||||||
log.info('${request.method} ${_redactUri(request.url)}');
|
log.info('${request.method} ${_redactUri(request.url)}');
|
||||||
return request.send();
|
|
||||||
|
try {
|
||||||
|
return request.send();
|
||||||
|
} catch (e, st) {
|
||||||
|
log.severe(
|
||||||
|
'HTTP client: ${request.method} ${_redactUri(request.url)}', e, st);
|
||||||
|
rethrow;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -95,36 +95,36 @@ class AudioControl extends BaseAudioHandler with QueueHandler, SeekHandler {
|
|||||||
int get _sourceId => _ref.read(sourceIdProvider);
|
int get _sourceId => _ref.read(sourceIdProvider);
|
||||||
|
|
||||||
AudioControl(this._player, this._ref) {
|
AudioControl(this._player, this._ref) {
|
||||||
_player.playbackEventStream.listen(
|
_player.playbackEventStream.listen((PlaybackEvent event) {
|
||||||
(PlaybackEvent event) {
|
final playing = _player.playing;
|
||||||
final playing = _player.playing;
|
playbackState.add(playbackState.value.copyWith(
|
||||||
playbackState.add(playbackState.value.copyWith(
|
controls: [
|
||||||
controls: [
|
MediaControl.skipToPrevious,
|
||||||
MediaControl.skipToPrevious,
|
if (playing) MediaControl.pause else MediaControl.play,
|
||||||
if (playing) MediaControl.pause else MediaControl.play,
|
MediaControl.stop,
|
||||||
MediaControl.stop,
|
MediaControl.skipToNext,
|
||||||
MediaControl.skipToNext,
|
],
|
||||||
],
|
systemActions: const {
|
||||||
systemActions: const {
|
MediaAction.seek,
|
||||||
MediaAction.seek,
|
},
|
||||||
},
|
androidCompactActionIndices: const [0, 1, 3],
|
||||||
androidCompactActionIndices: const [0, 1, 3],
|
processingState: const {
|
||||||
processingState: const {
|
ProcessingState.idle: AudioProcessingState.idle,
|
||||||
ProcessingState.idle: AudioProcessingState.idle,
|
ProcessingState.loading: AudioProcessingState.loading,
|
||||||
ProcessingState.loading: AudioProcessingState.loading,
|
ProcessingState.buffering: AudioProcessingState.buffering,
|
||||||
ProcessingState.buffering: AudioProcessingState.buffering,
|
ProcessingState.ready: AudioProcessingState.ready,
|
||||||
ProcessingState.ready: AudioProcessingState.ready,
|
ProcessingState.completed: AudioProcessingState.completed,
|
||||||
ProcessingState.completed: AudioProcessingState.completed,
|
}[_player.processingState]!,
|
||||||
}[_player.processingState]!,
|
playing: playing,
|
||||||
playing: playing,
|
updatePosition: _player.position,
|
||||||
updatePosition: _player.position,
|
bufferedPosition: _player.bufferedPosition,
|
||||||
bufferedPosition: _player.bufferedPosition,
|
queueIndex: event.currentIndex,
|
||||||
queueIndex: event.currentIndex,
|
));
|
||||||
));
|
});
|
||||||
},
|
|
||||||
onError: (e, st) => log.warning('Audio playback error', e, st),
|
_player.playbackEventStream.doOnError((e, st) async {
|
||||||
cancelOnError: false,
|
log.warning('playbackEventStream', e, st);
|
||||||
);
|
});
|
||||||
|
|
||||||
shuffleIndicies.listen((value) {
|
shuffleIndicies.listen((value) {
|
||||||
playbackState.add(playbackState.value.copyWith(
|
playbackState.add(playbackState.value.copyWith(
|
||||||
|
|||||||
@ -1,6 +1,8 @@
|
|||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
|
import 'package:rxdart/rxdart.dart';
|
||||||
|
|
||||||
import '../database/database.dart';
|
import '../database/database.dart';
|
||||||
|
import '../log.dart';
|
||||||
import '../state/settings.dart';
|
import '../state/settings.dart';
|
||||||
|
|
||||||
abstract class BaseMusicSource {
|
abstract class BaseMusicSource {
|
||||||
@ -40,25 +42,33 @@ class MusicSource implements BaseMusicSource {
|
|||||||
@override
|
@override
|
||||||
Stream<Iterable<AlbumsCompanion>> allAlbums() {
|
Stream<Iterable<AlbumsCompanion>> allAlbums() {
|
||||||
_testOnline();
|
_testOnline();
|
||||||
return _source.allAlbums();
|
return _source
|
||||||
|
.allAlbums()
|
||||||
|
.doOnError((e, st) => log.severe('allAlbums', e, st));
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Stream<Iterable<ArtistsCompanion>> allArtists() {
|
Stream<Iterable<ArtistsCompanion>> allArtists() {
|
||||||
_testOnline();
|
_testOnline();
|
||||||
return _source.allArtists();
|
return _source
|
||||||
|
.allArtists()
|
||||||
|
.doOnError((e, st) => log.severe('allArtists', e, st));
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Stream<Iterable<PlaylistWithSongsCompanion>> allPlaylists() {
|
Stream<Iterable<PlaylistWithSongsCompanion>> allPlaylists() {
|
||||||
_testOnline();
|
_testOnline();
|
||||||
return _source.allPlaylists();
|
return _source
|
||||||
|
.allPlaylists()
|
||||||
|
.doOnError((e, st) => log.severe('allPlaylists', e, st));
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Stream<Iterable<SongsCompanion>> allSongs() {
|
Stream<Iterable<SongsCompanion>> allSongs() {
|
||||||
_testOnline();
|
_testOnline();
|
||||||
return _source.allSongs();
|
return _source
|
||||||
|
.allSongs()
|
||||||
|
.doOnError((e, st) => log.severe('allSongs', e, st));
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user