diff --git a/lib/controller/audio_handler.dart b/lib/controller/audio_handler.dart index 106220d3..a419ce05 100644 --- a/lib/controller/audio_handler.dart +++ b/lib/controller/audio_handler.dart @@ -750,7 +750,8 @@ class NamidaAudioVideoHandler extends BasicAudioHandler { streams.audioOnlyStreams?.firstWhereEff((e) => e.formatSuffix != 'webm') ?? streams.audioOnlyStreams?.firstOrNull; if (prefferedAudioStream?.url != null || prefferedVideoStream?.url != null) { - final isStreamRequiredBetterThanCachedSet = playedFromCacheDetails.$2 != null && (prefferedVideoStream?.width ?? 0) > (playedFromCacheDetails.$2?.width ?? 0); + final isStreamRequiredBetterThanCachedSet = + playedFromCacheDetails.$2 == null ? true : playedFromCacheDetails.$2 != null && (prefferedVideoStream?.width ?? 0) > (playedFromCacheDetails.$2?.width ?? 0); currentVideoStream.value = isStreamRequiredBetterThanCachedSet ? prefferedVideoStream : vos?.firstWhereEff((e) => e.width == (playedFromCacheDetails.$2?.width)); @@ -1113,6 +1114,9 @@ class NamidaAudioVideoHandler extends BasicAudioHandler { }, youtubeID: (finalItem) async { await plsPause(); + if (position == Duration.zero) { + // -- try putting cache version if it was cached + } await plsSeek(); }, ); diff --git a/lib/controller/search_sort_controller.dart b/lib/controller/search_sort_controller.dart index ac70cd26..bf2ec14c 100644 --- a/lib/controller/search_sort_controller.dart +++ b/lib/controller/search_sort_controller.dart @@ -112,9 +112,9 @@ class SearchSortController { final tsf = settings.trackSearchFilter; final cleanup = settings.enableSearchCleanup.value; final result = await _searchTracksIsolate.thready({ - 'tsf': tsf, + 'tsf': tsf.toList(), 'cleanup': cleanup, - 'tracks': tracksInfoList, + 'tracks': tracksInfoList.toList(), 'text': text, }); final finalList = temp ? trackSearchTemp : trackSearchList; diff --git a/lib/ui/widgets/custom_widgets.dart b/lib/ui/widgets/custom_widgets.dart index e32192be..a5f75a40 100644 --- a/lib/ui/widgets/custom_widgets.dart +++ b/lib/ui/widgets/custom_widgets.dart @@ -1244,7 +1244,7 @@ class NamidaWheelSlider extends StatelessWidget { initValue: initValue, itemSize: itemSize, squeeze: squeeze, - isInfinite: false, + isInfinite: isInfinite, lineColor: Get.iconColor, pointerColor: context.theme.listTileTheme.textColor!, pointerHeight: 38.0, diff --git a/lib/ui/widgets/settings/advanced_settings.dart b/lib/ui/widgets/settings/advanced_settings.dart index 91f0cd62..405e22cb 100644 --- a/lib/ui/widgets/settings/advanced_settings.dart +++ b/lib/ui/widgets/settings/advanced_settings.dart @@ -565,6 +565,7 @@ class __ClearImageCacheListTileState extends State<_ClearImageCacheListTile> { onPressed: () async { NamidaNavigator.inst.closeDialog(); await Indexer.inst.clearImageCache(); + _fillSizes(); }, ); }, diff --git a/lib/ui/widgets/video_widget.dart b/lib/ui/widgets/video_widget.dart index d310bdeb..55c4b1eb 100644 --- a/lib/ui/widgets/video_widget.dart +++ b/lib/ui/widgets/video_widget.dart @@ -253,17 +253,20 @@ class NamidaVideoControlsState extends State with TickerPro upperBound: 1.0, ); - FlutterVolumeController.addListener( - (value) async { - if (widget.showControls) { - final ast = await FlutterVolumeController.getAndroidAudioStream(); - if (ast == AudioStream.music) { - _currentDeviceVolume.value = value; + if (widget.isFullScreen) { + FlutterVolumeController.addListener( + (value) async { + if (widget.showControls) { + final ast = await FlutterVolumeController.getAndroidAudioStream(); + if (ast == AudioStream.music) { + _currentDeviceVolume.value = value; + if (!_isPointerDown) _startVolumeSwipeTimer(); // only start timer if not handled by pointer down/up + } } - } - }, - emitOnStart: false, - ); + }, + emitOnStart: false, + ); + } } @override @@ -417,8 +420,12 @@ class NamidaVideoControlsState extends State with TickerPro return isSafeFromDown && isSafeFromUp; } + /// used to disable slider if user swiped too close to the edge. bool _disableSliderVolume = false; + /// used to hide slider if wasnt handled by pointer down/up. + bool _isPointerDown = false; + @override Widget build(BuildContext context) { final dummyWidget = widget.fallbackChild ?? @@ -433,18 +440,21 @@ class NamidaVideoControlsState extends State with TickerPro return Listener( behavior: HitTestBehavior.translucent, onPointerCancel: (event) { + _isPointerDown = false; _disableSliderVolume = false; if (shouldShowVolumeSlider) { _startVolumeSwipeTimer(); } }, onPointerUp: (event) { + _isPointerDown = false; _disableSliderVolume = false; if (shouldShowVolumeSlider) { _startVolumeSwipeTimer(); } }, onPointerDown: (event) { + _isPointerDown = true; if (_shouldSeekOnTap) { _onDoubleTap(event.position); _startTimer();