mirror of
https://github.com/immich-app/immich
synced 2025-11-14 17:36:12 +00:00
refactor(mobile): server info to use data classes instead of dtos (#4591)
* refactor: server info model to use data classes instead of dtos * mobile: add return types and refactor private variables in map / stack --------- Co-authored-by: shalong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
This commit is contained in:
parent
9b418642a6
commit
b05132a01a
15 changed files with 294 additions and 86 deletions
|
|
@ -0,0 +1,44 @@
|
|||
import 'package:openapi/api.dart';
|
||||
|
||||
class ServerConfig {
|
||||
final int trashDays;
|
||||
final String mapTileUrl;
|
||||
|
||||
const ServerConfig({
|
||||
required this.trashDays,
|
||||
required this.mapTileUrl,
|
||||
});
|
||||
|
||||
ServerConfig copyWith({
|
||||
int? trashDays,
|
||||
String? mapTileUrl,
|
||||
}) {
|
||||
return ServerConfig(
|
||||
trashDays: trashDays ?? this.trashDays,
|
||||
mapTileUrl: mapTileUrl ?? this.mapTileUrl,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'ServerConfig(trashDays: $trashDays, mapTileUrl: $mapTileUrl)';
|
||||
}
|
||||
|
||||
ServerConfig.fromDto(ServerConfigDto dto)
|
||||
: trashDays = dto.trashDays,
|
||||
mapTileUrl = dto.mapTileUrl;
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
if (identical(this, other)) return true;
|
||||
|
||||
return other is ServerConfig &&
|
||||
other.trashDays == trashDays &&
|
||||
other.mapTileUrl == mapTileUrl;
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return trashDays.hashCode ^ mapTileUrl.hashCode;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
import 'package:openapi/api.dart';
|
||||
|
||||
class ServerDiskInfo {
|
||||
final String diskAvailable;
|
||||
final String diskSize;
|
||||
final String diskUse;
|
||||
final double diskUsagePercentage;
|
||||
|
||||
const ServerDiskInfo({
|
||||
required this.diskAvailable,
|
||||
required this.diskSize,
|
||||
required this.diskUse,
|
||||
required this.diskUsagePercentage,
|
||||
});
|
||||
|
||||
ServerDiskInfo copyWith({
|
||||
String? diskAvailable,
|
||||
String? diskSize,
|
||||
String? diskUse,
|
||||
double? diskUsagePercentage,
|
||||
}) {
|
||||
return ServerDiskInfo(
|
||||
diskAvailable: diskAvailable ?? this.diskAvailable,
|
||||
diskSize: diskSize ?? this.diskSize,
|
||||
diskUse: diskUse ?? this.diskUse,
|
||||
diskUsagePercentage: diskUsagePercentage ?? this.diskUsagePercentage,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'ServerDiskInfo(diskAvailable: $diskAvailable, diskSize: $diskSize, diskUse: $diskUse, diskUsagePercentage: $diskUsagePercentage)';
|
||||
}
|
||||
|
||||
ServerDiskInfo.fromDto(ServerInfoResponseDto dto)
|
||||
: diskAvailable = dto.diskAvailable,
|
||||
diskSize = dto.diskSize,
|
||||
diskUse = dto.diskUse,
|
||||
diskUsagePercentage = dto.diskUsagePercentage;
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
if (identical(this, other)) return true;
|
||||
|
||||
return other is ServerDiskInfo &&
|
||||
other.diskAvailable == diskAvailable &&
|
||||
other.diskSize == diskSize &&
|
||||
other.diskUse == diskUse &&
|
||||
other.diskUsagePercentage == diskUsagePercentage;
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return diskAvailable.hashCode ^
|
||||
diskSize.hashCode ^
|
||||
diskUse.hashCode ^
|
||||
diskUsagePercentage.hashCode;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
import 'package:openapi/api.dart';
|
||||
|
||||
class ServerFeatures {
|
||||
final bool trash;
|
||||
final bool map;
|
||||
|
||||
const ServerFeatures({
|
||||
required this.trash,
|
||||
required this.map,
|
||||
});
|
||||
|
||||
ServerFeatures copyWith({
|
||||
bool? trash,
|
||||
bool? map,
|
||||
}) {
|
||||
return ServerFeatures(
|
||||
trash: trash ?? this.trash,
|
||||
map: map ?? this.map,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'ServerFeatures(trash: $trash, map: $map)';
|
||||
}
|
||||
|
||||
ServerFeatures.fromDto(ServerFeaturesDto dto)
|
||||
: trash = dto.trash,
|
||||
map = dto.map;
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
if (identical(this, other)) return true;
|
||||
|
||||
return other is ServerFeatures && other.trash == trash && other.map == map;
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return trash.hashCode ^ map.hashCode;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,50 +1,58 @@
|
|||
import 'package:openapi/api.dart';
|
||||
import 'package:immich_mobile/shared/models/server_info/server_config.model.dart';
|
||||
import 'package:immich_mobile/shared/models/server_info/server_disk_info.model.dart';
|
||||
import 'package:immich_mobile/shared/models/server_info/server_features.model.dart';
|
||||
import 'package:immich_mobile/shared/models/server_info/server_version.model.dart';
|
||||
|
||||
class ServerInfoState {
|
||||
final ServerVersionResponseDto serverVersion;
|
||||
final ServerFeaturesDto serverFeatures;
|
||||
final ServerConfigDto serverConfig;
|
||||
class ServerInfo {
|
||||
final ServerVersion serverVersion;
|
||||
final ServerFeatures serverFeatures;
|
||||
final ServerConfig serverConfig;
|
||||
final ServerDiskInfo serverDiskInfo;
|
||||
final bool isVersionMismatch;
|
||||
final String versionMismatchErrorMessage;
|
||||
|
||||
ServerInfoState({
|
||||
ServerInfo({
|
||||
required this.serverVersion,
|
||||
required this.serverFeatures,
|
||||
required this.serverConfig,
|
||||
required this.isVersionMismatch,
|
||||
required this.serverDiskInfo,
|
||||
required this.versionMismatchErrorMessage,
|
||||
});
|
||||
|
||||
ServerInfoState copyWith({
|
||||
ServerVersionResponseDto? serverVersion,
|
||||
ServerFeaturesDto? serverFeatures,
|
||||
ServerConfigDto? serverConfig,
|
||||
ServerInfo copyWith({
|
||||
ServerVersion? serverVersion,
|
||||
ServerFeatures? serverFeatures,
|
||||
ServerConfig? serverConfig,
|
||||
ServerDiskInfo? serverDiskInfo,
|
||||
bool? isVersionMismatch,
|
||||
String? versionMismatchErrorMessage,
|
||||
}) {
|
||||
return ServerInfoState(
|
||||
return ServerInfo(
|
||||
serverVersion: serverVersion ?? this.serverVersion,
|
||||
serverFeatures: serverFeatures ?? this.serverFeatures,
|
||||
serverConfig: serverConfig ?? this.serverConfig,
|
||||
isVersionMismatch: isVersionMismatch ?? this.isVersionMismatch,
|
||||
versionMismatchErrorMessage:
|
||||
versionMismatchErrorMessage ?? this.versionMismatchErrorMessage,
|
||||
serverDiskInfo: serverDiskInfo ?? this.serverDiskInfo,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'ServerInfoState( serverVersion: $serverVersion, serverFeatures: $serverFeatures, serverConfig: $serverConfig, isVersionMismatch: $isVersionMismatch, versionMismatchErrorMessage: $versionMismatchErrorMessage)';
|
||||
return 'ServerInfo(serverVersion: $serverVersion, serverFeatures: $serverFeatures, serverConfig: $serverConfig, isVersionMismatch: $isVersionMismatch, versionMismatchErrorMessage: $versionMismatchErrorMessage, serverDiskInfo: $serverDiskInfo)';
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
if (identical(this, other)) return true;
|
||||
|
||||
return other is ServerInfoState &&
|
||||
return other is ServerInfo &&
|
||||
other.serverVersion == serverVersion &&
|
||||
other.serverFeatures == serverFeatures &&
|
||||
other.serverConfig == serverConfig &&
|
||||
other.serverDiskInfo == serverDiskInfo &&
|
||||
other.isVersionMismatch == isVersionMismatch &&
|
||||
other.versionMismatchErrorMessage == versionMismatchErrorMessage;
|
||||
}
|
||||
|
|
@ -55,6 +63,7 @@ class ServerInfoState {
|
|||
serverFeatures.hashCode ^
|
||||
serverConfig.hashCode ^
|
||||
isVersionMismatch.hashCode ^
|
||||
versionMismatchErrorMessage.hashCode;
|
||||
versionMismatchErrorMessage.hashCode ^
|
||||
serverDiskInfo.hashCode;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
import 'package:openapi/api.dart';
|
||||
|
||||
class ServerVersion {
|
||||
final int major;
|
||||
final int minor;
|
||||
final int patch;
|
||||
|
||||
const ServerVersion({
|
||||
required this.major,
|
||||
required this.minor,
|
||||
required this.patch,
|
||||
});
|
||||
|
||||
ServerVersion copyWith({
|
||||
int? major,
|
||||
int? minor,
|
||||
int? patch,
|
||||
}) {
|
||||
return ServerVersion(
|
||||
major: major ?? this.major,
|
||||
minor: minor ?? this.minor,
|
||||
patch: patch ?? this.patch,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'ServerVersion(major: $major, minor: $minor, patch: $patch)';
|
||||
}
|
||||
|
||||
ServerVersion.fromDto(ServerVersionResponseDto dto)
|
||||
: major = dto.major,
|
||||
minor = dto.minor,
|
||||
patch = dto.patch_;
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
if (identical(this, other)) return true;
|
||||
|
||||
return other is ServerVersion &&
|
||||
other.major == major &&
|
||||
other.minor == minor &&
|
||||
other.patch == patch;
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return major.hashCode ^ minor.hashCode ^ patch.hashCode;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,40 +1,36 @@
|
|||
import 'package:easy_localization/easy_localization.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:immich_mobile/shared/models/server_info/server_disk_info.model.dart';
|
||||
|
||||
import 'package:immich_mobile/shared/models/server_info_state.model.dart';
|
||||
import 'package:immich_mobile/shared/models/server_info/server_info.model.dart';
|
||||
import 'package:immich_mobile/shared/services/server_info.service.dart';
|
||||
import 'package:openapi/api.dart';
|
||||
import 'package:immich_mobile/shared/models/server_info/server_config.model.dart';
|
||||
import 'package:immich_mobile/shared/models/server_info/server_features.model.dart';
|
||||
import 'package:immich_mobile/shared/models/server_info/server_version.model.dart';
|
||||
import 'package:package_info_plus/package_info_plus.dart';
|
||||
|
||||
class ServerInfoNotifier extends StateNotifier<ServerInfoState> {
|
||||
class ServerInfoNotifier extends StateNotifier<ServerInfo> {
|
||||
ServerInfoNotifier(this._serverInfoService)
|
||||
: super(
|
||||
ServerInfoState(
|
||||
serverVersion: ServerVersionResponseDto(
|
||||
ServerInfo(
|
||||
serverVersion: const ServerVersion(
|
||||
major: 0,
|
||||
patch_: 0,
|
||||
minor: 0,
|
||||
patch: 0,
|
||||
),
|
||||
serverFeatures: ServerFeaturesDto(
|
||||
clipEncode: true,
|
||||
configFile: false,
|
||||
facialRecognition: true,
|
||||
serverFeatures: const ServerFeatures(
|
||||
map: true,
|
||||
oauth: false,
|
||||
oauthAutoLaunch: false,
|
||||
passwordLogin: true,
|
||||
search: true,
|
||||
sidecar: true,
|
||||
tagImage: true,
|
||||
trash: true,
|
||||
reverseGeocoding: true,
|
||||
),
|
||||
serverConfig: ServerConfigDto(
|
||||
loginPageMessage: "",
|
||||
serverConfig: const ServerConfig(
|
||||
mapTileUrl: "https://tile.openstreetmap.org/{z}/{x}/{y}.png",
|
||||
oauthButtonText: "",
|
||||
trashDays: 30,
|
||||
isInitialized: false,
|
||||
),
|
||||
serverDiskInfo: const ServerDiskInfo(
|
||||
diskAvailable: "0",
|
||||
diskSize: "0",
|
||||
diskUse: "0",
|
||||
diskUsagePercentage: 0,
|
||||
),
|
||||
isVersionMismatch: false,
|
||||
versionMismatchErrorMessage: "",
|
||||
|
|
@ -50,8 +46,7 @@ class ServerInfoNotifier extends StateNotifier<ServerInfoState> {
|
|||
}
|
||||
|
||||
getServerVersion() async {
|
||||
ServerVersionResponseDto? serverVersion =
|
||||
await _serverInfoService.getServerVersion();
|
||||
final serverVersion = await _serverInfoService.getServerVersion();
|
||||
|
||||
if (serverVersion == null) {
|
||||
state = state.copyWith(
|
||||
|
|
@ -94,8 +89,7 @@ class ServerInfoNotifier extends StateNotifier<ServerInfoState> {
|
|||
}
|
||||
|
||||
getServerFeatures() async {
|
||||
ServerFeaturesDto? serverFeatures =
|
||||
await _serverInfoService.getServerFeatures();
|
||||
final serverFeatures = await _serverInfoService.getServerFeatures();
|
||||
if (serverFeatures == null) {
|
||||
return;
|
||||
}
|
||||
|
|
@ -103,7 +97,7 @@ class ServerInfoNotifier extends StateNotifier<ServerInfoState> {
|
|||
}
|
||||
|
||||
getServerConfig() async {
|
||||
ServerConfigDto? serverConfig = await _serverInfoService.getServerConfig();
|
||||
final serverConfig = await _serverInfoService.getServerConfig();
|
||||
if (serverConfig == null) {
|
||||
return;
|
||||
}
|
||||
|
|
@ -126,6 +120,6 @@ class ServerInfoNotifier extends StateNotifier<ServerInfoState> {
|
|||
}
|
||||
|
||||
final serverInfoProvider =
|
||||
StateNotifierProvider<ServerInfoNotifier, ServerInfoState>((ref) {
|
||||
StateNotifierProvider<ServerInfoNotifier, ServerInfo>((ref) {
|
||||
return ServerInfoNotifier(ref.watch(serverInfoServiceProvider));
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,8 +1,11 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:immich_mobile/shared/models/server_info/server_config.model.dart';
|
||||
import 'package:immich_mobile/shared/models/server_info/server_disk_info.model.dart';
|
||||
import 'package:immich_mobile/shared/models/server_info/server_features.model.dart';
|
||||
import 'package:immich_mobile/shared/models/server_info/server_version.model.dart';
|
||||
import 'package:immich_mobile/shared/providers/api.provider.dart';
|
||||
import 'package:immich_mobile/shared/services/api.service.dart';
|
||||
import 'package:openapi/api.dart';
|
||||
|
||||
final serverInfoServiceProvider = Provider(
|
||||
(ref) => ServerInfoService(
|
||||
|
|
@ -15,39 +18,51 @@ class ServerInfoService {
|
|||
|
||||
ServerInfoService(this._apiService);
|
||||
|
||||
Future<ServerInfoResponseDto?> getServerInfo() async {
|
||||
Future<ServerDiskInfo?> getServerInfo() async {
|
||||
try {
|
||||
return await _apiService.serverInfoApi.getServerInfo();
|
||||
final dto = await _apiService.serverInfoApi.getServerInfo();
|
||||
if (dto != null) {
|
||||
return ServerDiskInfo.fromDto(dto);
|
||||
}
|
||||
} catch (e) {
|
||||
debugPrint("Error [getServerInfo] ${e.toString()}");
|
||||
return null;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
Future<ServerVersionResponseDto?> getServerVersion() async {
|
||||
Future<ServerVersion?> getServerVersion() async {
|
||||
try {
|
||||
return await _apiService.serverInfoApi.getServerVersion();
|
||||
final dto = await _apiService.serverInfoApi.getServerVersion();
|
||||
if (dto != null) {
|
||||
return ServerVersion.fromDto(dto);
|
||||
}
|
||||
} catch (e) {
|
||||
debugPrint("Error [getServerVersion] ${e.toString()}");
|
||||
return null;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
Future<ServerFeaturesDto?> getServerFeatures() async {
|
||||
Future<ServerFeatures?> getServerFeatures() async {
|
||||
try {
|
||||
return await _apiService.serverInfoApi.getServerFeatures();
|
||||
final dto = await _apiService.serverInfoApi.getServerFeatures();
|
||||
if (dto != null) {
|
||||
return ServerFeatures.fromDto(dto);
|
||||
}
|
||||
} catch (e) {
|
||||
debugPrint("Error [getServerFeatures] ${e.toString()}");
|
||||
return null;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
Future<ServerConfigDto?> getServerConfig() async {
|
||||
Future<ServerConfig?> getServerConfig() async {
|
||||
try {
|
||||
return await _apiService.serverInfoApi.getServerConfig();
|
||||
final dto = await _apiService.serverInfoApi.getServerConfig();
|
||||
if (dto != null) {
|
||||
return ServerConfig.fromDto(dto);
|
||||
}
|
||||
} catch (e) {
|
||||
debugPrint("Error [getServerConfig] ${e.toString()}");
|
||||
return null;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue