Skip to content

Commit

Permalink
chore: fixes/tweaks
Browse files Browse the repository at this point in the history
  • Loading branch information
MSOB7YY committed Feb 29, 2024
1 parent 9a9b25c commit 13c374c
Show file tree
Hide file tree
Showing 10 changed files with 141 additions and 42 deletions.
11 changes: 10 additions & 1 deletion lib/controller/ffmpeg_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,16 @@ class NamidaFFMPEG {
map["PATH"] = path;
final miBackup = MediaInfo.fromMap(map);
final format = miBackup.format;
final tags = information?.getTags() ?? (map['streams'] as List?)?.firstWhereEff((e) => e['tags'].isNotEmpty)?['tags'];
Map? tags = information?.getTags();
if (tags == null) {
try {
final mainTags = (map['streams'] as List?)?.firstWhereEff((e) {
final t = e['tags'];
return t is List && t.isNotEmpty;
});
tags = mainTags?['tags'];
} catch (_) {}
}
final mi = MediaInfo(
path: path,
streams: miBackup.streams,
Expand Down
2 changes: 1 addition & 1 deletion lib/packages/lyrics_lrc_parsed_view.dart
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ class LyricsLRCParsedViewState extends State<LyricsLRCParsedView> {
// NamidaOpacity causes rebuilds
Opacity(
opacity: widget.cp,
child: ClipRRect(
child: BorderRadiusClip(
borderRadius: fullscreen ? BorderRadius.zero : BorderRadius.circular(16.0.multipliedRadius),
child: NamidaBgBlur(
blur: fullscreen ? 0.0 : 14.0,
Expand Down
8 changes: 4 additions & 4 deletions lib/packages/miniplayer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -622,9 +622,9 @@ class _AnimatingTrackImage extends StatelessWidget {
AnimatedSwitcher(
duration: const Duration(milliseconds: 300),
child: videoInfo != null && videoInfo.isInitialized
? ClipRRect(
? BorderRadiusClip(
borderRadius: BorderRadius.circular((6.0 + 10.0 * cp).multipliedRadius),
child: GestureDetector(
child: DoubleTapDetector(
onDoubleTap: () => VideoController.inst.toggleFullScreenVideoView(isLocal: true),
child: NamidaAspectRatio(
aspectRatio: videoInfo.aspectRatio,
Expand Down Expand Up @@ -780,9 +780,9 @@ class _AnimatingYoutubeIDImage extends StatelessWidget {
child: AnimatedSwitcher(
duration: const Duration(milliseconds: 300),
child: videoInfo != null && videoInfo.isInitialized
? ClipRRect(
? BorderRadiusClip(
borderRadius: BorderRadius.circular((6.0 + 10.0 * cp).multipliedRadius),
child: GestureDetector(
child: DoubleTapDetector(
onDoubleTap: () => VideoController.inst.toggleFullScreenVideoView(isLocal: true),
child: NamidaAspectRatio(
aspectRatio: videoInfo.aspectRatio,
Expand Down
2 changes: 1 addition & 1 deletion lib/packages/miniplayer_base.dart
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ class _NamidaMiniPlayerBaseState<E> extends State<NamidaMiniPlayerBase<E>> {
children: [
SizedBox(
height: MiniPlayerController.inst.maxOffset - 100.0 - MiniPlayerController.inst.topInset - 12.0,
child: ClipRRect(
child: BorderRadiusClip(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(32.0.multipliedRadius),
topRight: Radius.circular(32.0.multipliedRadius),
Expand Down
8 changes: 4 additions & 4 deletions lib/ui/dialogs/general_popup_dialog.dart
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,11 @@ Future<void> showGeneralPopupDialog(
String? heroTag,
String? additionalHero,
}) async {
final isSingle = tracks.length == 1;
forceSingleArtwork ??= isSingle;

final tracksExisting = <Track>[];
if (errorPlayingTrack != null) {
if (isSingle || errorPlayingTrack != null) {
// -- fill using real-time checks if there was an error.
tracks.loop((t, index) {
if (File(t.path).existsSync()) tracksExisting.add(t);
Expand All @@ -77,9 +80,6 @@ Future<void> showGeneralPopupDialog(
});
}

final isSingle = tracks.length == 1;
forceSingleArtwork ??= isSingle;

final trackToExtractColorFrom = tracks.isEmpty
? null
: forceSingleArtwork
Expand Down
81 changes: 81 additions & 0 deletions lib/ui/widgets/custom_widgets.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3704,6 +3704,41 @@ class TapDetector extends StatelessWidget {
}
}

class DoubleTapDetector extends StatelessWidget {
final VoidCallback? onDoubleTap;
final void Function(DoubleTapGestureRecognizer instance)? initializer;
final Widget? child;
final HitTestBehavior? behavior;

const DoubleTapDetector({
super.key,
required this.onDoubleTap,
this.initializer,
this.child,
this.behavior,
});

@override
Widget build(BuildContext context) {
final Map<Type, GestureRecognizerFactory> gestures = <Type, GestureRecognizerFactory>{};
gestures[DoubleTapGestureRecognizer] = GestureRecognizerFactoryWithHandlers<DoubleTapGestureRecognizer>(
() => DoubleTapGestureRecognizer(debugOwner: this),
initializer ??
(DoubleTapGestureRecognizer instance) {
instance
..onDoubleTap = onDoubleTap
..gestureSettings = MediaQuery.maybeGestureSettingsOf(context);
},
);

return RawGestureDetector(
behavior: behavior,
gestures: gestures,
child: child,
);
}
}

class LongPressDetector extends StatelessWidget {
final VoidCallback? onLongPress;
final void Function(LongPressGestureRecognizer instance)? initializer;
Expand Down Expand Up @@ -3776,3 +3811,49 @@ class ScaleDetector extends StatelessWidget {
);
}
}

class DecorationClipper extends CustomClipper<Path> {
const DecorationClipper({
this.textDirection = TextDirection.ltr,
required this.decoration,
});

final TextDirection textDirection;
final Decoration decoration;

@override
Path getClip(Size size) {
return decoration.getClipPath(Offset.zero & size, textDirection);
}

@override
bool shouldReclip(DecorationClipper oldClipper) {
return oldClipper.decoration != decoration || oldClipper.textDirection != textDirection;
}
}

class BorderRadiusClip extends StatelessWidget {
final TextDirection textDirection;
final BorderRadius borderRadius;
final Widget child;

const BorderRadiusClip({
super.key,
this.textDirection = TextDirection.ltr,
required this.borderRadius,
required this.child,
});

@override
Widget build(BuildContext context) {
return ClipPath(
clipper: DecorationClipper(
textDirection: textDirection,
decoration: BoxDecoration(
borderRadius: borderRadius,
),
),
child: child,
);
}
}
35 changes: 29 additions & 6 deletions lib/ui/widgets/inner_drawer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,15 @@ class NamidaInnerDrawerState extends State<NamidaInnerDrawer> with SingleTickerP

@override
Widget build(BuildContext context) {
const scaffoldShadows = [
BoxShadow(
color: Color(0x20202020),
blurRadius: 4.0,
spreadRadius: 2.0,
offset: Offset(-2.0, 0),
),
];

return AnimatedBuilderMulti(
animation: controller,
children: [
Expand All @@ -95,7 +104,7 @@ class NamidaInnerDrawerState extends State<NamidaInnerDrawer> with SingleTickerP
child: IgnorePointer(
ignoring: controller.value == controller.lowerBound,
child: ColoredBox(
color: Colors.black.withOpacity(controller.value),
color: Colors.black.withOpacity(controller.value * 1.2),
),
),
),
Expand Down Expand Up @@ -132,7 +141,7 @@ class NamidaInnerDrawerState extends State<NamidaInnerDrawer> with SingleTickerP
Positioned.fill(
child: IgnorePointer(
child: ColoredBox(
color: Colors.black.withOpacity(controller.upperBound - controller.value),
color: Colors.black.withOpacity((controller.upperBound - controller.value) * 1.8),
),
),
),
Expand All @@ -142,11 +151,25 @@ class NamidaInnerDrawerState extends State<NamidaInnerDrawer> with SingleTickerP
Transform.translate(
offset: Offset(context.width * controller.value, 0),
child: widget.borderRadius > 0
? ClipRRect(
borderRadius: BorderRadius.circular(widget.borderRadius * controller.value),
child: child,
? DecoratedBox(
decoration: const BoxDecoration(
boxShadow: scaffoldShadows,
),
child: ClipPath(
clipper: DecorationClipper(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(widget.borderRadius * controller.value),
),
),
child: child,
),
)
: child,
: DecoratedBox(
decoration: const BoxDecoration(
boxShadow: scaffoldShadows,
),
child: child,
),
),
],
);
Expand Down
4 changes: 2 additions & 2 deletions lib/ui/widgets/settings/backup_restore_settings.dart
Original file line number Diff line number Diff line change
Expand Up @@ -551,7 +551,7 @@ class BackupAndRestore extends SettingSubpageProvider {
title: lang.IMPORT_YOUTUBE_HISTORY,
leading: StackedIcon(
baseIcon: Broken.import_2,
smallChild: ClipRRect(
smallChild: BorderRadiusClip(
borderRadius: BorderRadius.circular(12.0.multipliedRadius),
child: Image.asset(
'assets/icons/youtube.png',
Expand Down Expand Up @@ -707,7 +707,7 @@ class BackupAndRestore extends SettingSubpageProvider {
title: lang.IMPORT_LAST_FM_HISTORY,
leading: StackedIcon(
baseIcon: Broken.import_2,
smallChild: ClipRRect(
smallChild: BorderRadiusClip(
borderRadius: BorderRadius.circular(12.0.multipliedRadius),
child: Image.asset(
'assets/icons/lastfm.png',
Expand Down
2 changes: 1 addition & 1 deletion lib/ui/widgets/settings/customization_settings.dart
Original file line number Diff line number Diff line change
Expand Up @@ -797,7 +797,7 @@ class CustomizationSettings extends SettingSubpageProvider {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
GestureDetector(
DoubleTapDetector(
onDoubleTap: () {
settings.save(didSupportNamida: true);
},
Expand Down
30 changes: 8 additions & 22 deletions lib/ui/widgets/video_widget.dart
Original file line number Diff line number Diff line change
Expand Up @@ -440,11 +440,6 @@ class NamidaVideoControlsState extends State<NamidaVideoControls> with TickerPro

bool _isDraggingSeekBar = false;

bool get _showLoadingIndicator {
final isLoading = Player.inst.isBuffering || Player.inst.isLoading;
return isLoading && !Player.inst.isPlaying;
}

RxDouble get _currentBrigthnessDim => VideoController.inst.currentBrigthnessDim;

Widget _getVerticalSliderWidget(String key, double? perc, IconData icon, ui.FlutterView view) {
Expand Down Expand Up @@ -813,7 +808,7 @@ class NamidaVideoControlsState extends State<NamidaVideoControls> with TickerPro
],
child: Padding(
padding: const EdgeInsets.all(4.0),
child: ClipRRect(
child: BorderRadiusClip(
borderRadius: BorderRadius.circular(6.0.multipliedRadius),
child: NamidaBgBlur(
blur: 3.0,
Expand Down Expand Up @@ -895,7 +890,7 @@ class NamidaVideoControlsState extends State<NamidaVideoControls> with TickerPro
],
child: Padding(
padding: const EdgeInsets.all(4.0),
child: ClipRRect(
child: BorderRadiusClip(
borderRadius: BorderRadius.circular(6.0.multipliedRadius),
child: NamidaBgBlur(
blur: 3.0,
Expand Down Expand Up @@ -1051,7 +1046,7 @@ class NamidaVideoControlsState extends State<NamidaVideoControls> with TickerPro
],
child: Padding(
padding: const EdgeInsets.all(4.0),
child: ClipRRect(
child: BorderRadiusClip(
borderRadius: BorderRadius.circular(6.0.multipliedRadius),
child: NamidaBgBlur(
blur: 3.0,
Expand Down Expand Up @@ -1157,7 +1152,7 @@ class NamidaVideoControlsState extends State<NamidaVideoControls> with TickerPro
),
Row(
children: [
ClipRRect(
BorderRadiusClip(
borderRadius: borr8,
child: NamidaBgBlur(
blur: 3.0,
Expand Down Expand Up @@ -1215,7 +1210,7 @@ class NamidaVideoControlsState extends State<NamidaVideoControls> with TickerPro
() {
final queueL = (widget.isLocal ? Player.inst.currentQueue : Player.inst.currentQueueYoutube).length;
if (queueL <= 1) return const SizedBox();
return ClipRRect(
return BorderRadiusClip(
borderRadius: borr8,
child: NamidaBgBlur(
blur: 3.0,
Expand All @@ -1240,7 +1235,7 @@ class NamidaVideoControlsState extends State<NamidaVideoControls> with TickerPro
],
const Spacer(),
const SizedBox(width: 4.0),
ClipRRect(
BorderRadiusClip(
borderRadius: borr8,
child: NamidaBgBlur(
blur: 3.0,
Expand Down Expand Up @@ -1357,15 +1352,6 @@ class NamidaVideoControlsState extends State<NamidaVideoControls> with TickerPro
color: Colors.black.withOpacity(0.3),
child: Obx(
() {
if (_showLoadingIndicator) {
return Padding(
padding: const EdgeInsets.all(14.0),
child: ThreeArchedCircle(
color: itemsColor,
size: 40.0,
),
);
}
final currentPosition = Player.inst.nowPlayingPosition;
final currentTotalDur = Player.inst.currentItemDuration?.inMilliseconds ?? 0;
final reachedLastPosition = currentPosition != 0 && (currentPosition - currentTotalDur).abs() < 100; // 100ms allowance
Expand Down Expand Up @@ -1465,10 +1451,10 @@ class NamidaVideoControlsState extends State<NamidaVideoControls> with TickerPro
),
),
Obx(
() => _showLoadingIndicator
() => Player.inst.isBuffering || Player.inst.isLoading
? ThreeArchedCircle(
color: itemsColor,
size: 40.0,
size: 52.0,
)
: const SizedBox(),
),
Expand Down

0 comments on commit 13c374c

Please sign in to comment.