mirror of
https://github.com/KevinMidboe/immich.git
synced 2025-10-29 17:40:28 +00:00
Optimize android's Gradle settings and clean up mobile source code (#240)
* optimize android side gradle settings * android minsdk back to 21 * remove unused package, update linter and fix lint error
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
import 'dart:convert';
|
||||
import 'dart:ffi';
|
||||
|
||||
class DeviceInfoRemote {
|
||||
final int id;
|
||||
@@ -66,7 +65,8 @@ class DeviceInfoRemote {
|
||||
|
||||
String toJson() => json.encode(toMap());
|
||||
|
||||
factory DeviceInfoRemote.fromJson(String source) => DeviceInfoRemote.fromMap(json.decode(source));
|
||||
factory DeviceInfoRemote.fromJson(String source) =>
|
||||
DeviceInfoRemote.fromMap(json.decode(source));
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
|
||||
@@ -46,37 +46,45 @@ class AssetNotifier extends StateNotifier<List<ImmichAsset>> {
|
||||
}
|
||||
}
|
||||
|
||||
final List<String> result = await PhotoManager.editor.deleteWithIds(deleteIdList);
|
||||
// final List<String> result = await PhotoManager.editor.deleteWithIds(deleteIdList);
|
||||
await PhotoManager.editor.deleteWithIds(deleteIdList);
|
||||
|
||||
// Delete asset on server
|
||||
List<DeleteAssetResponse>? deleteAssetResult = await _assetService.deleteAssets(deleteAssets);
|
||||
List<DeleteAssetResponse>? deleteAssetResult =
|
||||
await _assetService.deleteAssets(deleteAssets);
|
||||
if (deleteAssetResult == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (var asset in deleteAssetResult) {
|
||||
if (asset.status == 'success') {
|
||||
state = state.where((immichAsset) => immichAsset.id != asset.id).toList();
|
||||
state =
|
||||
state.where((immichAsset) => immichAsset.id != asset.id).toList();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
final assetProvider = StateNotifierProvider<AssetNotifier, List<ImmichAsset>>((ref) {
|
||||
final assetProvider =
|
||||
StateNotifierProvider<AssetNotifier, List<ImmichAsset>>((ref) {
|
||||
return AssetNotifier(ref);
|
||||
});
|
||||
|
||||
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)));
|
||||
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)));
|
||||
});
|
||||
|
||||
final assetGroupByMonthYearProvider = StateProvider((ref) {
|
||||
var assets = ref.watch(assetProvider);
|
||||
|
||||
assets.sortByCompare<DateTime>((e) => DateTime.parse(e.createdAt), (a, b) => b.compareTo(a));
|
||||
assets.sortByCompare<DateTime>(
|
||||
(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)));
|
||||
});
|
||||
|
||||
@@ -34,7 +34,8 @@ class ReleaseInfoNotifier extends StateNotifier<String> {
|
||||
return;
|
||||
}
|
||||
|
||||
if (latestTagVersion.isNotEmpty && localReleaseVersion != latestTagVersion) {
|
||||
if (latestTagVersion.isNotEmpty &&
|
||||
localReleaseVersion != latestTagVersion) {
|
||||
VersionAnnouncementOverlayController.appLoader.show();
|
||||
return;
|
||||
}
|
||||
@@ -54,4 +55,5 @@ class ReleaseInfoNotifier extends StateNotifier<String> {
|
||||
}
|
||||
}
|
||||
|
||||
final releaseInfoProvider = StateNotifierProvider<ReleaseInfoNotifier, String>((ref) => ReleaseInfoNotifier());
|
||||
final releaseInfoProvider = StateNotifierProvider<ReleaseInfoNotifier, String>(
|
||||
(ref) => ReleaseInfoNotifier());
|
||||
|
||||
@@ -3,12 +3,11 @@ import 'dart:convert';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:hive/hive.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:immich_mobile/shared/providers/asset.provider.dart';
|
||||
import 'package:immich_mobile/shared/models/immich_asset.model.dart';
|
||||
import 'package:socket_io_client/socket_io_client.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:socket_io_client/socket_io_client.dart';
|
||||
|
||||
class WebscoketState {
|
||||
final Socket? socket;
|
||||
@@ -30,13 +29,16 @@ class WebscoketState {
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() => 'WebscoketState(socket: $socket, isConnected: $isConnected)';
|
||||
String toString() =>
|
||||
'WebscoketState(socket: $socket, isConnected: $isConnected)';
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
if (identical(this, other)) return true;
|
||||
|
||||
return other is WebscoketState && other.socket == socket && other.isConnected == isConnected;
|
||||
return other is WebscoketState &&
|
||||
other.socket == socket &&
|
||||
other.isConnected == isConnected;
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -44,7 +46,8 @@ class WebscoketState {
|
||||
}
|
||||
|
||||
class WebsocketNotifier extends StateNotifier<WebscoketState> {
|
||||
WebsocketNotifier(this.ref) : super(WebscoketState(socket: null, isConnected: false)) {
|
||||
WebsocketNotifier(this.ref)
|
||||
: super(WebscoketState(socket: null, isConnected: false)) {
|
||||
debugPrint("Init websocket instance");
|
||||
}
|
||||
|
||||
@@ -59,6 +62,7 @@ class WebsocketNotifier extends StateNotifier<WebscoketState> {
|
||||
try {
|
||||
debugPrint("[WEBSOCKET] Attempting to connect to ws");
|
||||
// Configure socket transports must be sepecified
|
||||
|
||||
Socket socket = io(
|
||||
endpoint,
|
||||
OptionBuilder()
|
||||
@@ -122,6 +126,7 @@ class WebsocketNotifier extends StateNotifier<WebscoketState> {
|
||||
}
|
||||
}
|
||||
|
||||
final websocketProvider = StateNotifierProvider<WebsocketNotifier, WebscoketState>((ref) {
|
||||
final websocketProvider =
|
||||
StateNotifierProvider<WebsocketNotifier, WebscoketState>((ref) {
|
||||
return WebsocketNotifier(ref);
|
||||
});
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:immich_mobile/shared/models/mapbox_info.model.dart';
|
||||
import 'package:immich_mobile/shared/models/server_info.model.dart';
|
||||
import 'package:immich_mobile/shared/models/server_version.model.dart';
|
||||
import 'package:immich_mobile/shared/services/network.service.dart';
|
||||
import 'package:immich_mobile/shared/models/server_info.model.dart';
|
||||
|
||||
class ServerInfoService {
|
||||
final NetworkService _networkService = NetworkService();
|
||||
|
||||
@@ -12,8 +12,9 @@ class VersionAnnouncementOverlay extends HookConsumerWidget {
|
||||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
void goToReleaseNote() async {
|
||||
final Uri _url = Uri.parse('https://github.com/alextran1502/immich/releases/latest');
|
||||
await launchUrl(_url);
|
||||
final Uri url =
|
||||
Uri.parse('https://github.com/alextran1502/immich/releases/latest');
|
||||
await launchUrl(url);
|
||||
}
|
||||
|
||||
void onAcknowledgeTapped() {
|
||||
@@ -21,7 +22,8 @@ class VersionAnnouncementOverlay extends HookConsumerWidget {
|
||||
}
|
||||
|
||||
return ValueListenableBuilder<bool>(
|
||||
valueListenable: VersionAnnouncementOverlayController.appLoader.loaderShowingNotifier,
|
||||
valueListenable:
|
||||
VersionAnnouncementOverlayController.appLoader.loaderShowingNotifier,
|
||||
builder: (context, shouldShow, child) {
|
||||
if (shouldShow) {
|
||||
return Scaffold(
|
||||
@@ -51,10 +53,14 @@ class VersionAnnouncementOverlay extends HookConsumerWidget {
|
||||
child: RichText(
|
||||
text: TextSpan(
|
||||
style: const TextStyle(
|
||||
fontSize: 14, fontFamily: 'WorkSans', color: Colors.black87, height: 1.2),
|
||||
fontSize: 14,
|
||||
fontFamily: 'WorkSans',
|
||||
color: Colors.black87,
|
||||
height: 1.2),
|
||||
children: <TextSpan>[
|
||||
const TextSpan(
|
||||
text: 'Hi friend, there is a new release of',
|
||||
text:
|
||||
'Hi friend, there is a new release of',
|
||||
),
|
||||
const TextSpan(
|
||||
text: ' Immich ',
|
||||
@@ -65,14 +71,16 @@ class VersionAnnouncementOverlay extends HookConsumerWidget {
|
||||
),
|
||||
),
|
||||
const TextSpan(
|
||||
text: "please take your time to visit the ",
|
||||
text:
|
||||
"please take your time to visit the ",
|
||||
),
|
||||
TextSpan(
|
||||
text: "release note",
|
||||
style: const TextStyle(
|
||||
decoration: TextDecoration.underline,
|
||||
),
|
||||
recognizer: TapGestureRecognizer()..onTap = goToReleaseNote,
|
||||
recognizer: TapGestureRecognizer()
|
||||
..onTap = goToReleaseNote,
|
||||
),
|
||||
const TextSpan(
|
||||
text:
|
||||
@@ -91,7 +99,8 @@ class VersionAnnouncementOverlay extends HookConsumerWidget {
|
||||
primary: Colors.indigo,
|
||||
onPrimary: Colors.grey[50],
|
||||
elevation: 2,
|
||||
padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 25),
|
||||
padding: const EdgeInsets.symmetric(
|
||||
vertical: 10, horizontal: 25),
|
||||
),
|
||||
onPressed: onAcknowledgeTapped,
|
||||
child: const Text(
|
||||
@@ -119,7 +128,8 @@ class VersionAnnouncementOverlay extends HookConsumerWidget {
|
||||
}
|
||||
|
||||
class VersionAnnouncementOverlayController {
|
||||
static final VersionAnnouncementOverlayController appLoader = VersionAnnouncementOverlayController();
|
||||
static final VersionAnnouncementOverlayController appLoader =
|
||||
VersionAnnouncementOverlayController();
|
||||
ValueNotifier<bool> loaderShowingNotifier = ValueNotifier(false);
|
||||
ValueNotifier<String> loaderTextNotifier = ValueNotifier('error message');
|
||||
|
||||
|
||||
Reference in New Issue
Block a user