minor fixes

This commit is contained in:
Thibault Deckers 2020-11-14 09:47:39 +09:00
parent e99e648753
commit 5632570452
10 changed files with 63 additions and 28 deletions

View file

@ -1,5 +1,6 @@
import 'package:aves/model/filters/filters.dart';
import 'package:aves/model/image_entry.dart';
import 'package:aves/model/mime_types.dart';
import 'package:aves/widgets/common/icons.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';
@ -34,7 +35,7 @@ class MimeFilter extends CollectionFilter {
_label ??= lowMime.split('/')[0].toUpperCase();
} else {
_filter = (entry) => entry.mimeType == lowMime;
_label = displayType(lowMime);
_label = MimeTypes.displayType(lowMime);
}
_icon ??= AIcons.vector;
}
@ -50,18 +51,6 @@ class MimeFilter extends CollectionFilter {
'mime': mime,
};
static String displayType(String mime) {
final patterns = [
RegExp('.*/'), // remove type, keep subtype
RegExp('(X-|VND.(WAP.)?)'), // noisy prefixes
'+XML', // noisy suffix
RegExp('ADOBE\\\.'), // for PSD
];
mime = mime.toUpperCase();
patterns.forEach((pattern) => mime = mime.replaceFirst(pattern, ''));
return mime;
}
@override
bool filter(ImageEntry entry) => _filter(entry);

View file

@ -42,4 +42,16 @@ class MimeTypes {
// groups
static const List<String> rawImages = [arw, cr2, crw, dcr, dng, erf, k25, kdc, mrw, nef, nrw, orf, pef, raf, raw, rw2, sr2, srf, srw, x3f];
static const List<String> undecodable = [crw, psd]; // TODO TLAD make it dynamic if it depends on OS/lib versions
static String displayType(String mime) {
final patterns = [
RegExp('.*/'), // remove type, keep subtype
RegExp('(X-|VND.(WAP.)?)'), // noisy prefixes
'+XML', // noisy suffix
RegExp('ADOBE\\\.'), // for PSD
];
mime = mime.toUpperCase();
patterns.forEach((pattern) => mime = mime.replaceFirst(pattern, ''));
return mime;
}
}

View file

@ -12,11 +12,11 @@ String formatDuration(Duration d) {
}
extension ExtraDateTime on DateTime {
bool isAtSameYearAs(DateTime other) => this != null && other != null && year == other.year;
bool isAtSameYearAs(DateTime other) => this?.year == other?.year;
bool isAtSameMonthAs(DateTime other) => isAtSameYearAs(other) && month == other.month;
bool isAtSameMonthAs(DateTime other) => isAtSameYearAs(other) && this?.month == other?.month;
bool isAtSameDayAs(DateTime other) => isAtSameMonthAs(other) && day == other.day;
bool isAtSameDayAs(DateTime other) => isAtSameMonthAs(other) && this?.day == other?.day;
bool get isToday => isAtSameDayAs(DateTime.now());

View file

@ -56,6 +56,7 @@ class MonthSectionHeader extends StatelessWidget {
static DateFormat ym = DateFormat.yMMMM();
static String _formatDate(DateTime date) {
if (date == null) return 'Unknown';
if (date.isThisMonth) return 'This month';
if (date.isThisYear) return m.format(date);
return ym.format(date);

View file

@ -226,10 +226,13 @@ class _ScaleOverlayState extends State<ScaleOverlay> {
Positioned(
left: clampedCenter.dx - extent / 2,
top: clampedCenter.dy - extent / 2,
child: DecoratedThumbnail(
entry: widget.imageEntry,
extent: extent,
showOverlay: false,
child: DefaultTextStyle(
style: TextStyle(),
child: DecoratedThumbnail(
entry: widget.imageEntry,
extent: extent,
showOverlay: false,
),
),
),
],

View file

@ -1,11 +1,17 @@
import 'package:aves/widgets/common/icons.dart';
import 'package:aves/model/image_entry.dart';
import 'package:aves/model/mime_types.dart';
import 'package:flutter/material.dart';
class ErrorThumbnail extends StatelessWidget {
final ImageEntry entry;
final double extent;
final String tooltip;
const ErrorThumbnail({@required this.extent, @required this.tooltip});
const ErrorThumbnail({
@required this.entry,
@required this.extent,
@required this.tooltip,
});
@override
Widget build(BuildContext context) {
@ -13,10 +19,13 @@ class ErrorThumbnail extends StatelessWidget {
child: Tooltip(
message: tooltip,
preferBelow: false,
child: Icon(
AIcons.error,
size: extent / 2,
color: Colors.blueGrey,
child: Text(
MimeTypes.displayType(entry.mimeType),
style: TextStyle(
color: Colors.blueGrey,
fontSize: extent / 5,
),
textAlign: TextAlign.center,
),
),
);

View file

@ -99,6 +99,7 @@ class _ThumbnailRasterImageState extends State<ThumbnailRasterImage> {
Widget build(BuildContext context) {
if (!entry.canDecode) {
return ErrorThumbnail(
entry: entry,
extent: extent,
tooltip: '${entry.mimeType} not supported',
);
@ -137,6 +138,7 @@ class _ThumbnailRasterImageState extends State<ThumbnailRasterImage> {
);
},
errorBuilder: (context, error, stackTrace) => ErrorThumbnail(
entry: entry,
extent: extent,
tooltip: error.toString(),
),

View file

@ -272,7 +272,7 @@ class _DateRow extends StatelessWidget {
@override
Widget build(BuildContext context) {
final date = entry.bestDate;
final dateText = date != null ? '${DateFormat.yMMMd().format(date)}${DateFormat.Hm().format(date)}' : Constants.infoUnknown;
final dateText = date != null ? '${DateFormat.yMMMd().format(date)}${DateFormat.Hm().format(date)}' : Constants.overlayUnknown;
return Row(
children: [
DecoratedIcon(AIcons.date, shadows: [Constants.embossShadow], size: _iconSize),

View file

@ -5,6 +5,7 @@ import 'package:aves/model/filters/location.dart';
import 'package:aves/model/filters/mime.dart';
import 'package:aves/model/filters/tag.dart';
import 'package:aves/model/image_entry.dart';
import 'package:aves/model/mime_types.dart';
import 'package:aves/model/settings/settings.dart';
import 'package:aves/model/source/collection_lens.dart';
import 'package:aves/utils/color_utils.dart';
@ -260,7 +261,7 @@ class EntryByMimeDatum {
EntryByMimeDatum({
@required this.mimeType,
@required this.entryCount,
}) : displayText = MimeFilter.displayType(mimeType);
}) : displayText = MimeTypes.displayType(mimeType);
Color get color => stringToColor(displayText);

View file

@ -0,0 +1,18 @@
import 'package:test/test.dart';
import 'package:aves/utils/time_utils.dart';
void main() {
test('Comparison extension functions', () {
expect(DateTime(1593, 7, 8).isAtSameYearAs(null), false);
expect(DateTime(1903, 9, 25).isAtSameYearAs(DateTime(1970, 2, 25)), false);
expect(DateTime(1929, 3, 22).isAtSameYearAs(DateTime(1929, 3, 22)), true);
expect(DateTime(1593, 7, 8).isAtSameMonthAs(null), false);
expect(DateTime(1903, 9, 25).isAtSameMonthAs(DateTime(1970, 2, 25)), false);
expect(DateTime(1929, 3, 22).isAtSameMonthAs(DateTime(1929, 3, 22)), true);
expect(DateTime(1593, 7, 8).isAtSameDayAs(null), false);
expect(DateTime(1903, 9, 25).isAtSameDayAs(DateTime(1970, 2, 25)), false);
expect(DateTime(1929, 3, 22).isAtSameDayAs(DateTime(1929, 3, 22)), true);
});
}