diff --git a/mobile/lib/modules/home/ui/asset_grid/asset_grid_data_structure.dart b/mobile/lib/modules/home/ui/asset_grid/asset_grid_data_structure.dart index 6c652409f1..4db0b1eb82 100644 --- a/mobile/lib/modules/home/ui/asset_grid/asset_grid_data_structure.dart +++ b/mobile/lib/modules/home/ui/asset_grid/asset_grid_data_structure.dart @@ -75,22 +75,23 @@ class RenderList { RenderList(this.elements); - static Map> _groupAssets( + static Map> _groupAssets( List assets, GroupAssetsBy groupBy, ) { - assets.sortByCompare( - (e) => e.createdAt, - (a, b) => b.compareTo(a), - ); - if (groupBy == GroupAssetsBy.day) { 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) { 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); - groups.forEach((groupName, assets) { - try { - final date = assets.first.createdAt.toLocal(); + groups.entries.sortedBy((e) =>e.key).reversed.forEach((entry) { + final date = entry.key; + final assets = entry.value; + try { // Month title if (groupBy == GroupAssetsBy.day && (lastDate == null || lastDate!.month != date.month)) { diff --git a/mobile/lib/modules/home/ui/asset_grid/immich_asset_grid.dart b/mobile/lib/modules/home/ui/asset_grid/immich_asset_grid.dart index ff43b7f75c..5a2787ecf8 100644 --- a/mobile/lib/modules/home/ui/asset_grid/immich_asset_grid.dart +++ b/mobile/lib/modules/home/ui/asset_grid/immich_asset_grid.dart @@ -163,7 +163,7 @@ class ImmichAssetGridState extends State { Text _labelBuilder(int pos) { final date = widget.renderList.elements[pos].date; return Text( - DateFormat.yMMMd().format(date), + DateFormat.yMMMM().format(date), style: const TextStyle( color: Colors.white, fontWeight: FontWeight.bold, diff --git a/mobile/openapi/README.md b/mobile/openapi/README.md index 891c64cc9a..6e2f5c856d 100644 Binary files a/mobile/openapi/README.md and b/mobile/openapi/README.md differ diff --git a/mobile/openapi/lib/api.dart b/mobile/openapi/lib/api.dart index 7948c769ea..edec2eb973 100644 Binary files a/mobile/openapi/lib/api.dart and b/mobile/openapi/lib/api.dart differ diff --git a/mobile/openapi/lib/api_client.dart b/mobile/openapi/lib/api_client.dart index 417c8ecc2f..632c79f6c9 100644 Binary files a/mobile/openapi/lib/api_client.dart and b/mobile/openapi/lib/api_client.dart differ diff --git a/server/bin/generate-open-api.sh b/server/bin/generate-open-api.sh index bc693269e9..fb37bf22d3 100755 --- a/server/bin/generate-open-api.sh +++ b/server/bin/generate-open-api.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash function mobile { rm -rf ../mobile/openapi @@ -7,6 +7,10 @@ function mobile { patch -u native_class.mustache deserializeAsync(String json, String targetType, {bool growable = false,}) async => ++ Future 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 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); + } \ No newline at end of file diff --git a/web/src/api/open-api/api.ts b/web/src/api/open-api/api.ts index 4789ee960e..0c0e98ea70 100644 --- a/web/src/api/open-api/api.ts +++ b/web/src/api/open-api/api.ts @@ -4,7 +4,7 @@ * Immich * 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). diff --git a/web/src/api/open-api/base.ts b/web/src/api/open-api/base.ts index eb55f2cd71..1ffb5e4ffc 100644 --- a/web/src/api/open-api/base.ts +++ b/web/src/api/open-api/base.ts @@ -4,7 +4,7 @@ * Immich * 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). diff --git a/web/src/api/open-api/common.ts b/web/src/api/open-api/common.ts index 974b67d37d..4d7d11c836 100644 --- a/web/src/api/open-api/common.ts +++ b/web/src/api/open-api/common.ts @@ -4,7 +4,7 @@ * Immich * 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). diff --git a/web/src/api/open-api/configuration.ts b/web/src/api/open-api/configuration.ts index 7223695d8b..e0596e4b17 100644 --- a/web/src/api/open-api/configuration.ts +++ b/web/src/api/open-api/configuration.ts @@ -4,7 +4,7 @@ * Immich * 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). diff --git a/web/src/api/open-api/index.ts b/web/src/api/open-api/index.ts index 382b9a0b88..49f0b7a38f 100644 --- a/web/src/api/open-api/index.ts +++ b/web/src/api/open-api/index.ts @@ -4,7 +4,7 @@ * Immich * 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).