Files
immich/mobile-v2/lib/utils/immich_api_client.dart
2025-02-26 08:58:19 +05:30

75 lines
2.3 KiB
Dart

import 'dart:io';
import 'package:device_info_plus/device_info_plus.dart';
import 'package:http/http.dart';
import 'package:immich_mobile/domain/interfaces/store.interface.dart';
import 'package:immich_mobile/domain/models/store.model.dart';
import 'package:immich_mobile/domain/services/login.service.dart';
import 'package:immich_mobile/presentation/router/router.dart';
import 'package:immich_mobile/service_locator.dart';
import 'package:immich_mobile/utils/constants/globals.dart';
import 'package:immich_mobile/utils/mixins/log.mixin.dart';
import 'package:openapi/api.dart';
class ImApiClient extends ApiClient with LogMixin {
ImApiClient({required String endpoint}) : super(basePath: endpoint);
Map<String, String> get headers => defaultHeaderMap;
Future<void> init({String? accessToken}) async {
final token =
accessToken ?? (await di<IStoreRepository>().get(StoreKey.accessToken));
if (token != null) {
addDefaultHeader(kImmichHeaderAuthKey, token);
}
final deviceInfo = DeviceInfoPlugin();
final String deviceModel;
if (Platform.isIOS) {
deviceModel = (await deviceInfo.iosInfo).utsname.machine;
} else {
deviceModel = (await deviceInfo.androidInfo).model;
}
addDefaultHeader(kImmichHeaderDeviceModel, deviceModel);
addDefaultHeader(kImmichHeaderDeviceType, Platform.operatingSystem);
}
@override
Future<Response> invokeAPI(
String path,
String method,
List<QueryParam> queryParams,
Object? body,
Map<String, String> headerParams,
Map<String, String> formParams,
String? contentType,
) async {
final res = await super.invokeAPI(
path,
method,
queryParams,
body,
headerParams,
formParams,
contentType,
);
if (res.statusCode == HttpStatus.unauthorized) {
log.e("Token invalid. Redirecting to login route");
await di<LoginService>().logout();
await di<AppRouter>().replaceAll([const LoginRoute()]);
throw ApiException(res.statusCode, "Unauthorized");
}
return res;
}
UsersApi get usersApi => UsersApi(this);
ServerApi get serverApi => ServerApi(this);
AuthenticationApi get authenticationApi => AuthenticationApi(this);
OAuthApi get oAuthApi => OAuthApi(this);
SyncApi get syncApi => SyncApi(this);
}