various fixes
This commit is contained in:
parent
752e34b765
commit
a4d142b6d0
5 changed files with 28 additions and 18 deletions
|
@ -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 {
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue