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

View file

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

View file

@ -33,11 +33,6 @@ abstract class SectionedListLayoutProvider<T> extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return ProxyProvider0<SectionedListLayout<T>>( return ProxyProvider0<SectionedListLayout<T>>(
update: (context, _) => _updateLayouts(context), 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, child: child,
); );
} }

View file

@ -35,7 +35,10 @@ abstract class AvesVideoController {
int get currentPosition; 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; 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 // 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 // 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) // TODO TLAD [video] flaky: HW codecs sometimes fail when seek-starting some videos, e.g. MP2TS/h264(HDPR)
if (hwAccelerationEnabled) { if (hwAccelerationEnabled) {
@ -285,7 +285,7 @@ class IjkPlayerAvesVideoController extends AvesVideoController {
int get duration { int get duration {
final controllerDuration = _instance.value.duration.inMilliseconds; final controllerDuration = _instance.value.duration.inMilliseconds;
// use expected duration when controller duration is not set yet // use expected duration when controller duration is not set yet
return (controllerDuration == 0) ? entry.durationMillis! : controllerDuration; return controllerDuration == 0 ? (entry.durationMillis ?? 0) : controllerDuration;
} }
@override @override