1
0
Fork 0
mirror of https://github.com/immich-app/immich.git synced 2024-12-29 15:11:58 +00:00

dev(mobile): Fix freeze bug on app start (#1732)

* Group by date objects instead of strings

* Change OpenAPI code generation to wrap json decoding in
Change OpenAPI code generation to wrap decodeJson in compute

* Remove orig file

* Fix linter error

* Change drag handle date format

* Order timeline explictly from new to old

---------

Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
This commit is contained in:
Matthias Rupp 2023-02-12 04:37:48 +01:00 committed by GitHub
parent 390919c439
commit 6b3892987a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 53 additions and 18 deletions

View file

@ -75,22 +75,23 @@ class RenderList {
RenderList(this.elements); RenderList(this.elements);
static Map<String, List<Asset>> _groupAssets( static Map<DateTime, List<Asset>> _groupAssets(
List<Asset> assets, List<Asset> assets,
GroupAssetsBy groupBy, GroupAssetsBy groupBy,
) { ) {
assets.sortByCompare<DateTime>(
(e) => e.createdAt,
(a, b) => b.compareTo(a),
);
if (groupBy == GroupAssetsBy.day) { if (groupBy == GroupAssetsBy.day) {
return assets.groupListsBy( return assets.groupListsBy(
(element) => DateFormat('y-MM-dd').format(element.createdAt.toLocal()), (element) {
final date = element.createdAt.toLocal();
return DateTime(date.year, date.month, date.day);
},
); );
} else if (groupBy == GroupAssetsBy.month) { } else if (groupBy == GroupAssetsBy.month) {
return assets.groupListsBy( return assets.groupListsBy(
(element) => DateFormat('y-MM').format(element.createdAt.toLocal()), (element) {
final date = element.createdAt.toLocal();
return DateTime(date.year, date.month);
},
); );
} }
@ -113,10 +114,11 @@ class RenderList {
final groups = _groupAssets(allAssets, groupBy); final groups = _groupAssets(allAssets, groupBy);
groups.forEach((groupName, assets) { groups.entries.sortedBy((e) =>e.key).reversed.forEach((entry) {
try { final date = entry.key;
final date = assets.first.createdAt.toLocal(); final assets = entry.value;
try {
// Month title // Month title
if (groupBy == GroupAssetsBy.day && if (groupBy == GroupAssetsBy.day &&
(lastDate == null || lastDate!.month != date.month)) { (lastDate == null || lastDate!.month != date.month)) {

View file

@ -163,7 +163,7 @@ class ImmichAssetGridState extends State<ImmichAssetGrid> {
Text _labelBuilder(int pos) { Text _labelBuilder(int pos) {
final date = widget.renderList.elements[pos].date; final date = widget.renderList.elements[pos].date;
return Text( return Text(
DateFormat.yMMMd().format(date), DateFormat.yMMMM().format(date),
style: const TextStyle( style: const TextStyle(
color: Colors.white, color: Colors.white,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,

BIN
mobile/openapi/README.md generated

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
function mobile { function mobile {
rm -rf ../mobile/openapi rm -rf ../mobile/openapi
@ -7,6 +7,10 @@ function mobile {
patch -u native_class.mustache <native_class.mustache.patch patch -u native_class.mustache <native_class.mustache.patch
cd ../../../.. cd ../../../..
npx openapi-generator-cli generate -g dart -i ./immich-openapi-specs.json -o ../mobile/openapi -t ./openapi-generator/templates npx openapi-generator-cli generate -g dart -i ./immich-openapi-specs.json -o ../mobile/openapi -t ./openapi-generator/templates
# Post generate patches
patch --no-backup-if-mismatch -u ../mobile/openapi/lib/api_client.dart <./openapi-generator/patch/api_client.dart.patch
patch --no-backup-if-mismatch -u ../mobile/openapi/lib/api.dart <./openapi-generator/patch/api.dart.patch
} }
function web { function web {

View file

@ -0,0 +1,8 @@
@@ -14,6 +14,7 @@ import 'dart:async';
import 'dart:convert';
import 'dart:io';
+import 'package:flutter/foundation.dart';
import 'package:http/http.dart';
import 'package:intl/intl.dart';
import 'package:meta/meta.dart';

View file

@ -0,0 +1,21 @@
@@ -144,19 +144,19 @@ class ApiClient {
);
}
- Future<dynamic> deserializeAsync(String json, String targetType, {bool growable = false,}) async =>
+ Future<dynamic> deserializeAsync(String json, String targetType, {bool growable = false,}) =>
// ignore: deprecated_member_use_from_same_package
deserialize(json, targetType, growable: growable);
@Deprecated('Scheduled for removal in OpenAPI Generator 6.x. Use deserializeAsync() instead.')
- dynamic deserialize(String json, String targetType, {bool growable = false,}) {
+ Future<dynamic> deserialize(String json, String targetType, {bool growable = false,}) async {
// Remove all spaces. Necessary for regular expressions as well.
targetType = targetType.replaceAll(' ', ''); // ignore: parameter_assignments
// If the expected target type is String, nothing to do...
return targetType == 'String'
? json
- : _deserialize(jsonDecode(json), targetType, growable: growable);
+ : _deserialize(await compute((String j) => jsonDecode(j), json), targetType, growable: growable);
}

View file

@ -4,7 +4,7 @@
* Immich * Immich
* Immich API * Immich API
* *
* The version of the OpenAPI document: 1.45.0 * The version of the OpenAPI document: 1.46.1
* *
* *
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).

View file

@ -4,7 +4,7 @@
* Immich * Immich
* Immich API * Immich API
* *
* The version of the OpenAPI document: 1.45.0 * The version of the OpenAPI document: 1.46.1
* *
* *
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).

View file

@ -4,7 +4,7 @@
* Immich * Immich
* Immich API * Immich API
* *
* The version of the OpenAPI document: 1.45.0 * The version of the OpenAPI document: 1.46.1
* *
* *
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).

View file

@ -4,7 +4,7 @@
* Immich * Immich
* Immich API * Immich API
* *
* The version of the OpenAPI document: 1.45.0 * The version of the OpenAPI document: 1.46.1
* *
* *
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).

View file

@ -4,7 +4,7 @@
* Immich * Immich
* Immich API * Immich API
* *
* The version of the OpenAPI document: 1.45.0 * The version of the OpenAPI document: 1.46.1
* *
* *
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).