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
|
// `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 {
|
||||||
|
|
|
@ -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) {
|
||||||
|
final fontSize = min(extent, constraints.biggest.width) / 5;
|
||||||
|
return Text(
|
||||||
MimeUtils.displayType(entry.mimeType),
|
MimeUtils.displayType(entry.mimeType),
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: color,
|
color: color,
|
||||||
fontSize: extent / 5,
|
fontSize: fontSize,
|
||||||
),
|
),
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
)
|
);
|
||||||
|
})
|
||||||
: Icon(
|
: Icon(
|
||||||
AIcons.broken,
|
AIcons.broken,
|
||||||
size: extent / 2,
|
size: extent / 2,
|
||||||
|
|
|
@ -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,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue