Refactor mobile to use OpenApi generated SDK (#336)

This commit is contained in:
Alex
2022-07-13 07:23:48 -05:00
committed by GitHub
parent d69470e207
commit ae7e582ec8
276 changed files with 14513 additions and 3003 deletions

View File

@@ -1,21 +1,20 @@
import 'package:flutter/foundation.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/modules/home/models/delete_asset_response.model.dart';
import 'package:immich_mobile/modules/home/services/asset.service.dart';
import 'package:immich_mobile/shared/models/immich_asset.model.dart';
import 'package:immich_mobile/shared/services/device_info.service.dart';
import 'package:collection/collection.dart';
import 'package:intl/intl.dart';
import 'package:openapi/api.dart';
import 'package:photo_manager/photo_manager.dart';
class AssetNotifier extends StateNotifier<List<ImmichAsset>> {
class AssetNotifier extends StateNotifier<List<AssetResponseDto>> {
final AssetService _assetService;
final DeviceInfoService _deviceInfoService = DeviceInfoService();
AssetNotifier(this._assetService) : super([]);
getAllAsset() async {
List<ImmichAsset>? allAssets = await _assetService.getAllAsset();
var allAssets = await _assetService.getAllAsset();
if (allAssets != null) {
state = allAssets;
@@ -26,11 +25,11 @@ class AssetNotifier extends StateNotifier<List<ImmichAsset>> {
state = [];
}
onNewAssetUploaded(ImmichAsset newAsset) {
onNewAssetUploaded(AssetResponseDto newAsset) {
state = [...state, newAsset];
}
deleteAssets(Set<ImmichAsset> deleteAssets) async {
deleteAssets(Set<AssetResponseDto> deleteAssets) async {
var deviceInfo = await _deviceInfoService.getDeviceInfo();
var deviceId = deviceInfo["deviceId"];
var deleteIdList = <String>[];
@@ -53,14 +52,15 @@ class AssetNotifier extends StateNotifier<List<ImmichAsset>> {
}
// Delete asset on server
List<DeleteAssetResponse>? deleteAssetResult =
List<DeleteAssetResponseDto>? deleteAssetResult =
await _assetService.deleteAssets(deleteAssets);
if (deleteAssetResult == null) {
return;
}
for (var asset in deleteAssetResult) {
if (asset.status == 'success') {
if (asset.status == DeleteAssetStatus.SUCCESS) {
state =
state.where((immichAsset) => immichAsset.id != asset.id).toList();
}
@@ -69,7 +69,7 @@ class AssetNotifier extends StateNotifier<List<ImmichAsset>> {
}
final assetProvider =
StateNotifierProvider<AssetNotifier, List<ImmichAsset>>((ref) {
StateNotifierProvider<AssetNotifier, List<AssetResponseDto>>((ref) {
return AssetNotifier(ref.watch(assetServiceProvider));
});
@@ -77,17 +77,25 @@ final assetGroupByDateTimeProvider = StateProvider((ref) {
var assets = ref.watch(assetProvider);
assets.sortByCompare<DateTime>(
(e) => DateTime.parse(e.createdAt), (a, b) => b.compareTo(a));
return assets.groupListsBy((element) =>
DateFormat('y-MM-dd').format(DateTime.parse(element.createdAt)));
(e) => DateTime.parse(e.createdAt),
(a, b) => b.compareTo(a),
);
return assets.groupListsBy(
(element) =>
DateFormat('y-MM-dd').format(DateTime.parse(element.createdAt)),
);
});
final assetGroupByMonthYearProvider = StateProvider((ref) {
var assets = ref.watch(assetProvider);
assets.sortByCompare<DateTime>(
(e) => DateTime.parse(e.createdAt), (a, b) => b.compareTo(a));
(e) => DateTime.parse(e.createdAt),
(a, b) => b.compareTo(a),
);
return assets.groupListsBy((element) =>
DateFormat('MMMM, y').format(DateTime.parse(element.createdAt)));
return assets.groupListsBy(
(element) =>
DateFormat('MMMM, y').format(DateTime.parse(element.createdAt)),
);
});

View File

@@ -56,4 +56,5 @@ class ReleaseInfoNotifier extends StateNotifier<String> {
}
final releaseInfoProvider = StateNotifierProvider<ReleaseInfoNotifier, String>(
(ref) => ReleaseInfoNotifier());
(ref) => ReleaseInfoNotifier(),
);

View File

@@ -1,18 +1,20 @@
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/shared/models/mapbox_info.model.dart';
import 'package:immich_mobile/shared/models/server_info_state.model.dart';
import 'package:immich_mobile/shared/models/server_version.model.dart';
import 'package:immich_mobile/shared/services/server_info.service.dart';
import 'package:openapi/api.dart';
import 'package:package_info_plus/package_info_plus.dart';
class ServerInfoNotifier extends StateNotifier<ServerInfoState> {
ServerInfoNotifier(this._serverInfoService)
: super(
ServerInfoState(
mapboxInfo: MapboxInfo(isEnable: false, mapboxSecret: ""),
serverVersion:
ServerVersion(major: 0, patch: 0, minor: 0, build: 0),
serverVersion: ServerVersionReponseDto(
major: 0,
patch_: 0,
minor: 0,
build: 0,
),
isVersionMismatch: false,
versionMismatchErrorMessage: "",
),
@@ -21,7 +23,8 @@ class ServerInfoNotifier extends StateNotifier<ServerInfoState> {
final ServerInfoService _serverInfoService;
getServerVersion() async {
ServerVersion? serverVersion = await _serverInfoService.getServerVersion();
ServerVersionReponseDto? serverVersion =
await _serverInfoService.getServerVersion();
if (serverVersion == null) {
state = state.copyWith(
@@ -59,7 +62,9 @@ class ServerInfoNotifier extends StateNotifier<ServerInfoState> {
}
state = state.copyWith(
isVersionMismatch: false, versionMismatchErrorMessage: "");
isVersionMismatch: false,
versionMismatchErrorMessage: "",
);
}
Map<String, int> _getDetailVersion(String version) {

View File

@@ -5,8 +5,8 @@ import 'package:hive/hive.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/constants/hive_box.dart';
import 'package:immich_mobile/modules/login/providers/authentication.provider.dart';
import 'package:immich_mobile/shared/models/immich_asset.model.dart';
import 'package:immich_mobile/shared/providers/asset.provider.dart';
import 'package:openapi/api.dart';
import 'package:socket_io_client/socket_io_client.dart';
class WebscoketState {
@@ -92,8 +92,11 @@ class WebsocketNotifier extends StateNotifier<WebscoketState> {
socket.on('on_upload_success', (data) {
var jsonString = jsonDecode(data.toString());
ImmichAsset newAsset = ImmichAsset.fromMap(jsonString);
ref.watch(assetProvider.notifier).onNewAssetUploaded(newAsset);
AssetResponseDto? newAsset = AssetResponseDto.fromJson(jsonString);
if (newAsset != null) {
ref.watch(assetProvider.notifier).onNewAssetUploaded(newAsset);
}
});
} catch (e) {
debugPrint("[WEBSOCKET] Catch Websocket Error - ${e.toString()}");
@@ -119,8 +122,11 @@ class WebsocketNotifier extends StateNotifier<WebscoketState> {
debugPrint("[Websocket] Start listening to event on_upload_success");
state.socket?.on('on_upload_success', (data) {
var jsonString = jsonDecode(data.toString());
ImmichAsset newAsset = ImmichAsset.fromMap(jsonString);
ref.watch(assetProvider.notifier).onNewAssetUploaded(newAsset);
AssetResponseDto? newAsset = AssetResponseDto.fromJson(jsonString);
if (newAsset != null) {
ref.watch(assetProvider.notifier).onNewAssetUploaded(newAsset);
}
});
}
}