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:
parent
390919c439
commit
6b3892987a
13 changed files with 53 additions and 18 deletions
|
@ -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)) {
|
||||||
|
|
|
@ -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
BIN
mobile/openapi/README.md
generated
Binary file not shown.
BIN
mobile/openapi/lib/api.dart
generated
BIN
mobile/openapi/lib/api.dart
generated
Binary file not shown.
BIN
mobile/openapi/lib/api_client.dart
generated
BIN
mobile/openapi/lib/api_client.dart
generated
Binary file not shown.
|
@ -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 {
|
||||||
|
|
8
server/openapi-generator/patch/api.dart.patch
Normal file
8
server/openapi-generator/patch/api.dart.patch
Normal 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';
|
21
server/openapi-generator/patch/api_client.dart.patch
Normal file
21
server/openapi-generator/patch/api_client.dart.patch
Normal 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);
|
||||||
|
}
|
2
web/src/api/open-api/api.ts
generated
2
web/src/api/open-api/api.ts
generated
|
@ -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).
|
||||||
|
|
2
web/src/api/open-api/base.ts
generated
2
web/src/api/open-api/base.ts
generated
|
@ -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).
|
||||||
|
|
2
web/src/api/open-api/common.ts
generated
2
web/src/api/open-api/common.ts
generated
|
@ -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).
|
||||||
|
|
2
web/src/api/open-api/configuration.ts
generated
2
web/src/api/open-api/configuration.ts
generated
|
@ -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).
|
||||||
|
|
2
web/src/api/open-api/index.ts
generated
2
web/src/api/open-api/index.ts
generated
|
@ -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).
|
||||||
|
|
Loading…
Reference in a new issue