various fixes

This commit is contained in:
Thibault Deckers 2021-06-28 13:56:46 +09:00
parent 752e34b765
commit a4d142b6d0
5 changed files with 28 additions and 18 deletions

View file

@ -34,7 +34,7 @@ class AvesEntry {
// `dateModifiedSecs` can be missing in viewer mode
int? _dateModifiedSecs;
final int? sourceDateTakenMillis;
int? durationMillis;
int? _durationMillis;
int? _catalogDateMillis;
CatalogMetadata? _catalogMetadata;
AddressDetails? _addressDetails;
@ -63,11 +63,12 @@ class AvesEntry {
required String? sourceTitle,
required int? dateModifiedSecs,
required this.sourceDateTakenMillis,
required this.durationMillis,
required int? durationMillis,
}) {
this.path = path;
this.sourceTitle = sourceTitle;
this.dateModifiedSecs = dateModifiedSecs;
this.durationMillis = durationMillis;
}
bool get canDecode => !undecodable.contains(mimeType);
@ -353,6 +354,13 @@ class AvesEntry {
return d == null ? null : DateTime(d.year, d.month, d.day);
}
int? get durationMillis => _durationMillis;
set durationMillis(int? durationMillis) {
_durationMillis = durationMillis;
_durationText = null;
}
String? _durationText;
String get durationText {

View file

@ -1,4 +1,5 @@
import 'dart:io';
import 'dart:math';
import 'package:aves/model/entry.dart';
import 'package:aves/theme/icons.dart';
@ -51,14 +52,17 @@ class _ErrorThumbnailState extends State<ErrorThumbnail> {
message: exists ? widget.tooltip : context.l10n.viewerErrorDoesNotExist,
preferBelow: false,
child: exists
? Text(
MimeUtils.displayType(entry.mimeType),
style: TextStyle(
color: color,
fontSize: extent / 5,
),
textAlign: TextAlign.center,
)
? LayoutBuilder(builder: (context, constraints) {
final fontSize = min(extent, constraints.biggest.width) / 5;
return Text(
MimeUtils.displayType(entry.mimeType),
style: TextStyle(
color: color,
fontSize: fontSize,
),
textAlign: TextAlign.center,
);
})
: Icon(
AIcons.broken,
size: extent / 2,

View file

@ -33,11 +33,6 @@ abstract class SectionedListLayoutProvider<T> extends StatelessWidget {
Widget build(BuildContext context) {
return ProxyProvider0<SectionedListLayout<T>>(
update: (context, _) => _updateLayouts(context),
updateShouldNotify: (previous, current) {
final previousLayouts = previous.sectionLayouts;
final currentLayouts = current.sectionLayouts;
return previousLayouts.length != currentLayouts.length || !previousLayouts.every(currentLayouts.contains);
},
child: child,
);
}

View file

@ -35,7 +35,10 @@ abstract class AvesVideoController {
int get currentPosition;
double get progress => currentPosition.toDouble() / duration;
double get progress {
final _duration = duration;
return _duration != 0 ? currentPosition.toDouble() / _duration : 0;
}
Stream<int> get positionStream;

View file

@ -118,7 +118,7 @@ class IjkPlayerAvesVideoController extends AvesVideoController {
// playing with HW acceleration seems to skip the last frames of some videos
// so HW acceleration is always disabled for GIF-like videos where the last frames may be significant
final hwAccelerationEnabled = settings.enableVideoHardwareAcceleration && entry.durationMillis! > gifLikeVideoDurationThreshold.inMilliseconds;
final hwAccelerationEnabled = settings.enableVideoHardwareAcceleration && (entry.durationMillis ?? 0) > gifLikeVideoDurationThreshold.inMilliseconds;
// TODO TLAD [video] flaky: HW codecs sometimes fail when seek-starting some videos, e.g. MP2TS/h264(HDPR)
if (hwAccelerationEnabled) {
@ -285,7 +285,7 @@ class IjkPlayerAvesVideoController extends AvesVideoController {
int get duration {
final controllerDuration = _instance.value.duration.inMilliseconds;
// use expected duration when controller duration is not set yet
return (controllerDuration == 0) ? entry.durationMillis! : controllerDuration;
return controllerDuration == 0 ? (entry.durationMillis ?? 0) : controllerDuration;
}
@override