chore: bump line length to 120 (#20191)
This commit is contained in:
@@ -15,8 +15,7 @@ class ActivityApiRepository extends ApiRepository {
|
||||
ActivityApiRepository(this._api);
|
||||
|
||||
Future<List<Activity>> getAll(String albumId, {String? assetId}) async {
|
||||
final response =
|
||||
await checkNull(_api.getActivities(albumId, assetId: assetId));
|
||||
final response = await checkNull(_api.getActivities(albumId, assetId: assetId));
|
||||
return response.map(_toActivity).toList();
|
||||
}
|
||||
|
||||
@@ -28,9 +27,7 @@ class ActivityApiRepository extends ApiRepository {
|
||||
}) async {
|
||||
final dto = ActivityCreateDto(
|
||||
albumId: albumId,
|
||||
type: type == ActivityType.comment
|
||||
? ReactionType.comment
|
||||
: ReactionType.like,
|
||||
type: type == ActivityType.comment ? ReactionType.comment : ReactionType.like,
|
||||
assetId: assetId,
|
||||
comment: comment,
|
||||
);
|
||||
@@ -43,17 +40,14 @@ class ActivityApiRepository extends ApiRepository {
|
||||
}
|
||||
|
||||
Future<ActivityStats> getStats(String albumId, {String? assetId}) async {
|
||||
final response =
|
||||
await checkNull(_api.getActivityStatistics(albumId, assetId: assetId));
|
||||
final response = await checkNull(_api.getActivityStatistics(albumId, assetId: assetId));
|
||||
return ActivityStats(comments: response.comments);
|
||||
}
|
||||
|
||||
static Activity _toActivity(ActivityResponseDto dto) => Activity(
|
||||
id: dto.id,
|
||||
createdAt: dto.createdAt,
|
||||
type: dto.type == ReactionType.comment
|
||||
? ActivityType.comment
|
||||
: ActivityType.like,
|
||||
type: dto.type == ReactionType.comment ? ActivityType.comment : ActivityType.like,
|
||||
user: UserConverter.fromSimpleUserDto(dto.user),
|
||||
assetId: dto.assetId,
|
||||
comment: dto.comment,
|
||||
|
||||
@@ -4,8 +4,7 @@ import 'package:immich_mobile/domain/models/user.model.dart';
|
||||
import 'package:immich_mobile/entities/album.entity.dart';
|
||||
import 'package:immich_mobile/entities/asset.entity.dart';
|
||||
import 'package:immich_mobile/entities/store.entity.dart';
|
||||
import 'package:immich_mobile/infrastructure/entities/user.entity.dart'
|
||||
as entity;
|
||||
import 'package:immich_mobile/infrastructure/entities/user.entity.dart' as entity;
|
||||
import 'package:immich_mobile/models/albums/album_search.model.dart';
|
||||
import 'package:immich_mobile/providers/db.provider.dart';
|
||||
import 'package:immich_mobile/repositories/database.repository.dart';
|
||||
@@ -14,8 +13,7 @@ import 'package:isar/isar.dart';
|
||||
|
||||
enum AlbumSort { remoteId, localId }
|
||||
|
||||
final albumRepositoryProvider =
|
||||
Provider((ref) => AlbumRepository(ref.watch(dbProvider)));
|
||||
final albumRepositoryProvider = Provider((ref) => AlbumRepository(ref.watch(dbProvider)));
|
||||
|
||||
class AlbumRepository extends DatabaseRepository {
|
||||
const AlbumRepository(super.db);
|
||||
@@ -75,8 +73,7 @@ class AlbumRepository extends DatabaseRepository {
|
||||
} else {
|
||||
afterWhere = baseQuery.localIdIsNotNull();
|
||||
}
|
||||
QueryBuilder<Album, Album, QAfterFilterCondition> filterQuery =
|
||||
afterWhere.filter().noOp();
|
||||
QueryBuilder<Album, Album, QAfterFilterCondition> filterQuery = afterWhere.filter().noOp();
|
||||
if (shared != null) {
|
||||
filterQuery = filterQuery.sharedEqualTo(true);
|
||||
}
|
||||
@@ -101,34 +98,27 @@ class AlbumRepository extends DatabaseRepository {
|
||||
() => album.sharedUsers.update(unlink: users.map(entity.User.fromDto)),
|
||||
);
|
||||
|
||||
Future<void> addAssets(Album album, List<Asset> assets) =>
|
||||
txn(() => album.assets.update(link: assets));
|
||||
Future<void> addAssets(Album album, List<Asset> assets) => txn(() => album.assets.update(link: assets));
|
||||
|
||||
Future<void> removeAssets(Album album, List<Asset> assets) =>
|
||||
txn(() => album.assets.update(unlink: assets));
|
||||
Future<void> removeAssets(Album album, List<Asset> assets) => txn(() => album.assets.update(unlink: assets));
|
||||
|
||||
Future<Album> recalculateMetadata(Album album) async {
|
||||
album.startDate = await album.assets.filter().fileCreatedAtProperty().min();
|
||||
album.endDate = await album.assets.filter().fileCreatedAtProperty().max();
|
||||
album.lastModifiedAssetTimestamp =
|
||||
await album.assets.filter().updatedAtProperty().max();
|
||||
album.lastModifiedAssetTimestamp = await album.assets.filter().updatedAtProperty().max();
|
||||
return album;
|
||||
}
|
||||
|
||||
Future<void> addUsers(Album album, List<UserDto> users) =>
|
||||
txn(() => album.sharedUsers.update(link: users.map(entity.User.fromDto)));
|
||||
|
||||
Future<void> deleteAllLocal() =>
|
||||
txn(() => db.albums.where().localIdIsNotNull().deleteAll());
|
||||
Future<void> deleteAllLocal() => txn(() => db.albums.where().localIdIsNotNull().deleteAll());
|
||||
|
||||
Future<List<Album>> search(
|
||||
String searchTerm,
|
||||
QuickFilterMode filterMode,
|
||||
) async {
|
||||
var query = db.albums
|
||||
.filter()
|
||||
.nameContains(searchTerm, caseSensitive: false)
|
||||
.remoteIdIsNotNull();
|
||||
var query = db.albums.filter().nameContains(searchTerm, caseSensitive: false).remoteIdIsNotNull();
|
||||
final isarUserId = fastHash(Store.get(StoreKey.currentUser).id);
|
||||
|
||||
switch (filterMode) {
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:immich_mobile/constants/enums.dart';
|
||||
import 'package:immich_mobile/domain/models/album/album.model.dart'
|
||||
show AlbumAssetOrder, RemoteAlbum;
|
||||
import 'package:immich_mobile/domain/models/album/album.model.dart' show AlbumAssetOrder, RemoteAlbum;
|
||||
import 'package:immich_mobile/entities/album.entity.dart';
|
||||
import 'package:immich_mobile/entities/asset.entity.dart';
|
||||
import 'package:immich_mobile/infrastructure/entities/user.entity.dart'
|
||||
as entity;
|
||||
import 'package:immich_mobile/infrastructure/entities/user.entity.dart' as entity;
|
||||
import 'package:immich_mobile/infrastructure/utils/user.converter.dart';
|
||||
import 'package:immich_mobile/providers/api.provider.dart';
|
||||
import 'package:immich_mobile/repositories/api.repository.dart';
|
||||
@@ -150,8 +148,7 @@ class AlbumApiRepository extends ApiRepository {
|
||||
}
|
||||
|
||||
Future<Album> addUsers(String albumId, Iterable<String> userIds) async {
|
||||
final albumUsers =
|
||||
userIds.map((userId) => AlbumUserAddDto(userId: userId)).toList();
|
||||
final albumUsers = userIds.map((userId) => AlbumUserAddDto(userId: userId)).toList();
|
||||
final response = await checkNull(
|
||||
_api.addUsersToAlbum(
|
||||
albumId,
|
||||
@@ -180,11 +177,9 @@ class AlbumApiRepository extends ApiRepository {
|
||||
sortOrder: dto.order == AssetOrder.asc ? SortOrder.asc : SortOrder.desc,
|
||||
);
|
||||
album.remoteAssetCount = dto.assetCount;
|
||||
album.owner.value =
|
||||
entity.User.fromDto(UserConverter.fromSimpleUserDto(dto.owner));
|
||||
album.owner.value = entity.User.fromDto(UserConverter.fromSimpleUserDto(dto.owner));
|
||||
album.remoteThumbnailAssetId = dto.albumThumbnailAssetId;
|
||||
final users = dto.albumUsers
|
||||
.map((albumUser) => UserConverter.fromSimpleUserDto(albumUser.user));
|
||||
final users = dto.albumUsers.map((albumUser) => UserConverter.fromSimpleUserDto(albumUser.user));
|
||||
album.sharedUsers.addAll(users.map(entity.User.fromDto));
|
||||
final assets = dto.assets.map(Asset.remote).toList();
|
||||
album.assets.addAll(assets);
|
||||
@@ -202,9 +197,7 @@ class AlbumApiRepository extends ApiRepository {
|
||||
updatedAt: dto.updatedAt,
|
||||
thumbnailAssetId: dto.albumThumbnailAssetId,
|
||||
isActivityEnabled: dto.isActivityEnabled,
|
||||
order: dto.order == AssetOrder.asc
|
||||
? AlbumAssetOrder.asc
|
||||
: AlbumAssetOrder.desc,
|
||||
order: dto.order == AssetOrder.asc ? AlbumAssetOrder.asc : AlbumAssetOrder.desc,
|
||||
assetCount: dto.assetCount,
|
||||
ownerName: dto.owner.name,
|
||||
);
|
||||
|
||||
@@ -7,14 +7,12 @@ import 'package:immich_mobile/infrastructure/entities/user.entity.dart';
|
||||
import 'package:immich_mobile/repositories/asset_media.repository.dart';
|
||||
import 'package:photo_manager/photo_manager.dart' hide AssetType;
|
||||
|
||||
final albumMediaRepositoryProvider =
|
||||
Provider((ref) => const AlbumMediaRepository());
|
||||
final albumMediaRepositoryProvider = Provider((ref) => const AlbumMediaRepository());
|
||||
|
||||
class AlbumMediaRepository {
|
||||
const AlbumMediaRepository();
|
||||
|
||||
bool get useCustomFilter =>
|
||||
Store.get(StoreKey.photoManagerCustomFilter, true);
|
||||
bool get useCustomFilter => Store.get(StoreKey.photoManagerCustomFilter, true);
|
||||
|
||||
FilterOptionGroup? _getAlbumFilter({
|
||||
DateTimeCond? updateTimeCond,
|
||||
@@ -34,8 +32,7 @@ class AlbumMediaRepository {
|
||||
),
|
||||
containsPathModified: containsPathModified ?? false,
|
||||
createTimeCond: DateTimeCond.def().copyWith(ignore: true),
|
||||
updateTimeCond:
|
||||
updateTimeCond ?? DateTimeCond.def().copyWith(ignore: true),
|
||||
updateTimeCond: updateTimeCond ?? DateTimeCond.def().copyWith(ignore: true),
|
||||
orders: orderBy ?? [],
|
||||
)
|
||||
: null;
|
||||
@@ -51,16 +48,13 @@ class AlbumMediaRepository {
|
||||
}
|
||||
|
||||
Future<List<String>> getAssetIds(String albumId) async {
|
||||
final album =
|
||||
await AssetPathEntity.fromId(albumId, filterOption: _getAlbumFilter());
|
||||
final List<AssetEntity> assets =
|
||||
await album.getAssetListRange(start: 0, end: 0x7fffffffffffffff);
|
||||
final album = await AssetPathEntity.fromId(albumId, filterOption: _getAlbumFilter());
|
||||
final List<AssetEntity> assets = await album.getAssetListRange(start: 0, end: 0x7fffffffffffffff);
|
||||
return assets.map((e) => e.id).toList();
|
||||
}
|
||||
|
||||
Future<int> getAssetCount(String albumId) async {
|
||||
final album =
|
||||
await AssetPathEntity.fromId(albumId, filterOption: _getAlbumFilter());
|
||||
final album = await AssetPathEntity.fromId(albumId, filterOption: _getAlbumFilter());
|
||||
return album.assetCountAsync;
|
||||
}
|
||||
|
||||
@@ -81,14 +75,11 @@ class AlbumMediaRepository {
|
||||
min: modifiedFrom ?? DateTime.utc(-271820),
|
||||
max: modifiedUntil ?? DateTime.utc(275760),
|
||||
),
|
||||
orderBy: orderByModificationDate
|
||||
? [const OrderOption(type: OrderOptionType.updateDate)]
|
||||
: [],
|
||||
orderBy: orderByModificationDate ? [const OrderOption(type: OrderOptionType.updateDate)] : [],
|
||||
),
|
||||
);
|
||||
|
||||
final List<AssetEntity> assets =
|
||||
await onDevice.getAssetListRange(start: start, end: end);
|
||||
final List<AssetEntity> assets = await onDevice.getAssetListRange(start: start, end: end);
|
||||
return assets.map(AssetMediaRepository.toAsset).toList().cast();
|
||||
}
|
||||
|
||||
@@ -103,10 +94,8 @@ class AlbumMediaRepository {
|
||||
static Album _toAlbum(AssetPathEntity assetPathEntity) {
|
||||
final Album album = Album(
|
||||
name: assetPathEntity.name,
|
||||
createdAt:
|
||||
assetPathEntity.lastModified?.toUtc() ?? DateTime.now().toUtc(),
|
||||
modifiedAt:
|
||||
assetPathEntity.lastModified?.toUtc() ?? DateTime.now().toUtc(),
|
||||
createdAt: assetPathEntity.lastModified?.toUtc() ?? DateTime.now().toUtc(),
|
||||
modifiedAt: assetPathEntity.lastModified?.toUtc() ?? DateTime.now().toUtc(),
|
||||
shared: false,
|
||||
activityEnabled: false,
|
||||
);
|
||||
|
||||
@@ -11,8 +11,7 @@ import 'package:isar/isar.dart';
|
||||
|
||||
enum AssetSort { checksum, ownerIdChecksum }
|
||||
|
||||
final assetRepositoryProvider =
|
||||
Provider((ref) => AssetRepository(ref.watch(dbProvider)));
|
||||
final assetRepositoryProvider = Provider((ref) => AssetRepository(ref.watch(dbProvider)));
|
||||
|
||||
class AssetRepository extends DatabaseRepository {
|
||||
const AssetRepository(super.db);
|
||||
@@ -29,8 +28,7 @@ class AssetRepository extends DatabaseRepository {
|
||||
if (notOwnedBy.length == 1) {
|
||||
query = query.not().ownerIdEqualTo(isarUserIds.first);
|
||||
} else if (notOwnedBy.isNotEmpty) {
|
||||
query =
|
||||
query.not().anyOf(isarUserIds, (q, int id) => q.ownerIdEqualTo(id));
|
||||
query = query.not().anyOf(isarUserIds, (q, int id) => q.ownerIdEqualTo(id));
|
||||
}
|
||||
if (ownerId != null) {
|
||||
query = query.ownerIdEqualTo(fastHash(ownerId));
|
||||
@@ -44,8 +42,7 @@ class AssetRepository extends DatabaseRepository {
|
||||
};
|
||||
}
|
||||
|
||||
final QueryBuilder<Asset, Asset, QAfterSortBy> sortedQuery =
|
||||
switch (sortBy) {
|
||||
final QueryBuilder<Asset, Asset, QAfterSortBy> sortedQuery = switch (sortBy) {
|
||||
null => query.noOp(),
|
||||
AssetSort.checksum => query.sortByChecksum(),
|
||||
AssetSort.ownerIdChecksum => query.sortByOwnerId().thenByChecksum(),
|
||||
@@ -93,31 +90,18 @@ class AssetRepository extends DatabaseRepository {
|
||||
}) {
|
||||
final baseQuery = db.assets.where();
|
||||
final isarUserIds = fastHash(ownerId);
|
||||
final QueryBuilder<Asset, Asset, QAfterFilterCondition> filteredQuery =
|
||||
switch (state) {
|
||||
final QueryBuilder<Asset, Asset, QAfterFilterCondition> filteredQuery = switch (state) {
|
||||
null => baseQuery.ownerIdEqualToAnyChecksum(isarUserIds).noOp(),
|
||||
AssetState.local => baseQuery
|
||||
.remoteIdIsNull()
|
||||
.filter()
|
||||
.localIdIsNotNull()
|
||||
.ownerIdEqualTo(isarUserIds),
|
||||
AssetState.remote => baseQuery
|
||||
.localIdIsNull()
|
||||
.filter()
|
||||
.remoteIdIsNotNull()
|
||||
.ownerIdEqualTo(isarUserIds),
|
||||
AssetState.merged => baseQuery
|
||||
.ownerIdEqualToAnyChecksum(isarUserIds)
|
||||
.filter()
|
||||
.remoteIdIsNotNull()
|
||||
.localIdIsNotNull(),
|
||||
AssetState.local => baseQuery.remoteIdIsNull().filter().localIdIsNotNull().ownerIdEqualTo(isarUserIds),
|
||||
AssetState.remote => baseQuery.localIdIsNull().filter().remoteIdIsNotNull().ownerIdEqualTo(isarUserIds),
|
||||
AssetState.merged =>
|
||||
baseQuery.ownerIdEqualToAnyChecksum(isarUserIds).filter().remoteIdIsNotNull().localIdIsNotNull(),
|
||||
};
|
||||
|
||||
final QueryBuilder<Asset, Asset, QAfterSortBy> query = switch (sortBy) {
|
||||
null => filteredQuery.noOp(),
|
||||
AssetSort.checksum => filteredQuery.sortByChecksum(),
|
||||
AssetSort.ownerIdChecksum =>
|
||||
filteredQuery.sortByOwnerId().thenByChecksum(),
|
||||
AssetSort.ownerIdChecksum => filteredQuery.sortByOwnerId().thenByChecksum(),
|
||||
};
|
||||
|
||||
return limit == null ? query.findAll() : query.limit(limit).findAll();
|
||||
@@ -135,15 +119,11 @@ class AssetRepository extends DatabaseRepository {
|
||||
int limit = 100,
|
||||
}) {
|
||||
final baseQuery = db.assets.where();
|
||||
final QueryBuilder<Asset, Asset, QAfterFilterCondition> query =
|
||||
switch (state) {
|
||||
final QueryBuilder<Asset, Asset, QAfterFilterCondition> query = switch (state) {
|
||||
null => baseQuery.noOp(),
|
||||
AssetState.local =>
|
||||
baseQuery.remoteIdIsNull().filter().localIdIsNotNull(),
|
||||
AssetState.remote =>
|
||||
baseQuery.localIdIsNull().filter().remoteIdIsNotNull(),
|
||||
AssetState.merged =>
|
||||
baseQuery.localIdIsNotNull().filter().remoteIdIsNotNull(),
|
||||
AssetState.local => baseQuery.remoteIdIsNull().filter().localIdIsNotNull(),
|
||||
AssetState.remote => baseQuery.localIdIsNull().filter().remoteIdIsNotNull(),
|
||||
AssetState.merged => baseQuery.localIdIsNotNull().filter().remoteIdIsNotNull(),
|
||||
};
|
||||
return _getMatchesImpl(query, fastHash(ownerId), assets, limit);
|
||||
}
|
||||
@@ -154,12 +134,10 @@ class AssetRepository extends DatabaseRepository {
|
||||
}
|
||||
|
||||
Future<void> upsertDuplicatedAssets(Iterable<String> duplicatedAssets) => txn(
|
||||
() => db.duplicatedAssets
|
||||
.putAll(duplicatedAssets.map(DuplicatedAsset.new).toList()),
|
||||
() => db.duplicatedAssets.putAll(duplicatedAssets.map(DuplicatedAsset.new).toList()),
|
||||
);
|
||||
|
||||
Future<List<String>> getAllDuplicatedAssetIds() =>
|
||||
db.duplicatedAssets.where().idProperty().findAll();
|
||||
Future<List<String>> getAllDuplicatedAssetIds() => db.duplicatedAssets.where().idProperty().findAll();
|
||||
|
||||
Future<Asset?> getByOwnerIdChecksum(int ownerId, String checksum) =>
|
||||
db.assets.getByOwnerIdChecksum(ownerId, checksum);
|
||||
@@ -170,8 +148,7 @@ class AssetRepository extends DatabaseRepository {
|
||||
) =>
|
||||
db.assets.getAllByOwnerIdChecksum(ownerIds, checksums);
|
||||
|
||||
Future<List<Asset>> getAllLocal() =>
|
||||
db.assets.where().localIdIsNotNull().findAll();
|
||||
Future<List<Asset>> getAllLocal() => db.assets.where().localIdIsNotNull().findAll();
|
||||
|
||||
Future<void> deleteAllByRemoteId(List<String> ids, {AssetState? state}) =>
|
||||
txn(() => _getAllByRemoteIdImpl(ids, state).deleteAll());
|
||||
|
||||
@@ -99,8 +99,7 @@ class AssetApiRepository extends ApiRepository {
|
||||
}
|
||||
|
||||
Future<StackResponse> stack(List<String> ids) async {
|
||||
final responseDto =
|
||||
await checkNull(_stacksApi.createStack(StackCreateDto(assetIds: ids)));
|
||||
final responseDto = await checkNull(_stacksApi.createStack(StackCreateDto(assetIds: ids)));
|
||||
|
||||
return responseDto.toStack();
|
||||
}
|
||||
|
||||
@@ -24,8 +24,7 @@ class AssetMediaRepository {
|
||||
|
||||
const AssetMediaRepository(this._assetApiRepository);
|
||||
|
||||
Future<List<String>> deleteAll(List<String> ids) =>
|
||||
PhotoManager.editor.deleteWithIds(ids);
|
||||
Future<List<String>> deleteAll(List<String> ids) => PhotoManager.editor.deleteWithIds(ids);
|
||||
|
||||
Future<asset_entity.Asset?> get(String id) async {
|
||||
final entity = await AssetEntity.fromId(id);
|
||||
@@ -52,8 +51,7 @@ class AssetMediaRepository {
|
||||
asset.fileCreatedAt = asset.fileModifiedAt;
|
||||
}
|
||||
if (local.latitude != null) {
|
||||
asset.exifInfo =
|
||||
ExifInfo(latitude: local.latitude, longitude: local.longitude);
|
||||
asset.exifInfo = ExifInfo(latitude: local.latitude, longitude: local.longitude);
|
||||
}
|
||||
asset.local = local;
|
||||
return asset;
|
||||
@@ -82,9 +80,7 @@ class AssetMediaRepository {
|
||||
? asset.localId
|
||||
: null;
|
||||
if (localId != null) {
|
||||
File? f =
|
||||
await AssetEntity(id: localId, width: 1, height: 1, typeInt: 0)
|
||||
.originFile;
|
||||
File? f = await AssetEntity(id: localId, width: 1, height: 1, typeInt: 0).originFile;
|
||||
downloadedXFiles.add(XFile(f!.path));
|
||||
} else if (asset is RemoteAsset) {
|
||||
final tempDir = await getTemporaryDirectory();
|
||||
@@ -119,8 +115,6 @@ class AssetMediaRepository {
|
||||
_log.warning("Failed to delete temporary file: ${file.path}", e);
|
||||
}
|
||||
}
|
||||
return result.status == ShareResultStatus.success
|
||||
? downloadedXFiles.length
|
||||
: 0;
|
||||
return result.status == ShareResultStatus.success ? downloadedXFiles.length : 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -80,8 +80,7 @@ class AuthRepository extends DatabaseRepository {
|
||||
}
|
||||
|
||||
final List<dynamic> jsonList = jsonDecode(jsonString);
|
||||
final endpointList =
|
||||
jsonList.map((e) => AuxilaryEndpoint.fromJson(e)).toList();
|
||||
final endpointList = jsonList.map((e) => AuxilaryEndpoint.fromJson(e)).toList();
|
||||
|
||||
return endpointList;
|
||||
}
|
||||
|
||||
@@ -5,8 +5,7 @@ import 'package:immich_mobile/repositories/api.repository.dart';
|
||||
import 'package:immich_mobile/services/api.service.dart';
|
||||
import 'package:openapi/api.dart';
|
||||
|
||||
final authApiRepositoryProvider =
|
||||
Provider((ref) => AuthApiRepository(ref.watch(apiServiceProvider)));
|
||||
final authApiRepositoryProvider = Provider((ref) => AuthApiRepository(ref.watch(apiServiceProvider)));
|
||||
|
||||
class AuthApiRepository extends ApiRepository {
|
||||
final ApiService _apiService;
|
||||
@@ -35,9 +34,7 @@ class AuthApiRepository extends ApiRepository {
|
||||
}
|
||||
|
||||
Future<void> logout() async {
|
||||
await _apiService.authenticationApi
|
||||
.logout()
|
||||
.timeout(const Duration(seconds: 7));
|
||||
await _apiService.authenticationApi.logout().timeout(const Duration(seconds: 7));
|
||||
}
|
||||
|
||||
_mapLoginReponse(LoginResponseDto dto) {
|
||||
@@ -54,8 +51,7 @@ class AuthApiRepository extends ApiRepository {
|
||||
|
||||
Future<bool> unlockPinCode(String pinCode) async {
|
||||
try {
|
||||
await _apiService.authenticationApi
|
||||
.unlockAuthSession(SessionUnlockDto(pinCode: pinCode));
|
||||
await _apiService.authenticationApi.unlockAuthSession(SessionUnlockDto(pinCode: pinCode));
|
||||
return true;
|
||||
} catch (_) {
|
||||
return false;
|
||||
@@ -63,8 +59,7 @@ class AuthApiRepository extends ApiRepository {
|
||||
}
|
||||
|
||||
Future<void> setupPinCode(String pinCode) {
|
||||
return _apiService.authenticationApi
|
||||
.setupPinCode(PinCodeSetupDto(pinCode: pinCode));
|
||||
return _apiService.authenticationApi.setupPinCode(PinCodeSetupDto(pinCode: pinCode));
|
||||
}
|
||||
|
||||
Future<void> lockPinCode() {
|
||||
|
||||
@@ -6,16 +6,14 @@ import 'package:isar/isar.dart';
|
||||
|
||||
enum BackupAlbumSort { id }
|
||||
|
||||
final backupAlbumRepositoryProvider =
|
||||
Provider((ref) => BackupAlbumRepository(ref.watch(dbProvider)));
|
||||
final backupAlbumRepositoryProvider = Provider((ref) => BackupAlbumRepository(ref.watch(dbProvider)));
|
||||
|
||||
class BackupAlbumRepository extends DatabaseRepository {
|
||||
const BackupAlbumRepository(super.db);
|
||||
|
||||
Future<List<BackupAlbum>> getAll({BackupAlbumSort? sort}) {
|
||||
final baseQuery = db.backupAlbums.where();
|
||||
final QueryBuilder<BackupAlbum, BackupAlbum, QAfterSortBy> query =
|
||||
switch (sort) {
|
||||
final QueryBuilder<BackupAlbum, BackupAlbum, QAfterSortBy> query = switch (sort) {
|
||||
null => baseQuery.noOp(),
|
||||
BackupAlbumSort.id => baseQuery.sortById(),
|
||||
};
|
||||
@@ -28,9 +26,7 @@ class BackupAlbumRepository extends DatabaseRepository {
|
||||
Future<List<BackupAlbum>> getAllBySelection(BackupSelection backup) =>
|
||||
db.backupAlbums.filter().selectionEqualTo(backup).findAll();
|
||||
|
||||
Future<void> deleteAll(List<int> ids) =>
|
||||
txn(() => db.backupAlbums.deleteAll(ids));
|
||||
Future<void> deleteAll(List<int> ids) => txn(() => db.backupAlbums.deleteAll(ids));
|
||||
|
||||
Future<void> updateAll(List<BackupAlbum> backupAlbums) =>
|
||||
txn(() => db.backupAlbums.putAll(backupAlbums));
|
||||
Future<void> updateAll(List<BackupAlbum> backupAlbums) => txn(() => db.backupAlbums.putAll(backupAlbums));
|
||||
}
|
||||
|
||||
@@ -3,8 +3,7 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:immich_mobile/models/auth/biometric_status.model.dart';
|
||||
import 'package:local_auth/local_auth.dart';
|
||||
|
||||
final biometricRepositoryProvider =
|
||||
Provider((ref) => BiometricRepository(LocalAuthentication()));
|
||||
final biometricRepositoryProvider = Provider((ref) => BiometricRepository(LocalAuthentication()));
|
||||
|
||||
class BiometricRepository {
|
||||
final LocalAuthentication _localAuth;
|
||||
@@ -12,10 +11,8 @@ class BiometricRepository {
|
||||
const BiometricRepository(this._localAuth);
|
||||
|
||||
Future<BiometricStatus> getStatus() async {
|
||||
final bool canAuthenticateWithBiometrics =
|
||||
await _localAuth.canCheckBiometrics;
|
||||
final bool canAuthenticate =
|
||||
canAuthenticateWithBiometrics || await _localAuth.isDeviceSupported();
|
||||
final bool canAuthenticateWithBiometrics = await _localAuth.canCheckBiometrics;
|
||||
final bool canAuthenticate = canAuthenticateWithBiometrics || await _localAuth.isDeviceSupported();
|
||||
final availableBiometric = await _localAuth.getAvailableBiometrics();
|
||||
|
||||
return BiometricStatus(
|
||||
|
||||
@@ -11,12 +11,10 @@ abstract class DatabaseRepository implements IDatabaseRepository {
|
||||
|
||||
bool get inTxn => Zone.current[_zoneTxn] != null;
|
||||
|
||||
Future<T> txn<T>(Future<T> Function() callback) =>
|
||||
inTxn ? callback() : transaction(callback);
|
||||
Future<T> txn<T>(Future<T> Function() callback) => inTxn ? callback() : transaction(callback);
|
||||
|
||||
@override
|
||||
Future<T> transaction<T>(Future<T> Function() callback) =>
|
||||
db.writeTxn(callback);
|
||||
Future<T> transaction<T>(Future<T> Function() callback) => db.writeTxn(callback);
|
||||
}
|
||||
|
||||
extension Asd<T> on QueryBuilder<T, dynamic, dynamic> {
|
||||
|
||||
@@ -122,9 +122,7 @@ class DownloadRepository {
|
||||
taskId: livePhotoVideoId,
|
||||
url: url,
|
||||
headers: headers,
|
||||
filename: asset.name
|
||||
.toUpperCase()
|
||||
.replaceAll(RegExp(r"\.(JPG|HEIC)$"), '.MOV'),
|
||||
filename: asset.name.toUpperCase().replaceAll(RegExp(r"\.(JPG|HEIC)$"), '.MOV'),
|
||||
updates: Updates.statusAndProgress,
|
||||
group: kDownloadGroupLivePhoto,
|
||||
metaData: json.encode(_dummyMetadata),
|
||||
|
||||
@@ -85,8 +85,7 @@ class DriftAlbumApiRepository extends ApiRepository {
|
||||
}) async {
|
||||
AssetOrder? apiOrder;
|
||||
if (order != null) {
|
||||
apiOrder =
|
||||
order == AlbumAssetOrder.asc ? AssetOrder.asc : AssetOrder.desc;
|
||||
apiOrder = order == AlbumAssetOrder.asc ? AssetOrder.asc : AssetOrder.desc;
|
||||
}
|
||||
|
||||
final responseDto = await checkNull(
|
||||
@@ -113,8 +112,7 @@ class DriftAlbumApiRepository extends ApiRepository {
|
||||
String albumId,
|
||||
Iterable<String> userIds,
|
||||
) async {
|
||||
final albumUsers =
|
||||
userIds.map((userId) => AlbumUserAddDto(userId: userId)).toList();
|
||||
final albumUsers = userIds.map((userId) => AlbumUserAddDto(userId: userId)).toList();
|
||||
final response = await checkNull(
|
||||
_api.addUsersToAlbum(
|
||||
albumId,
|
||||
@@ -136,8 +134,7 @@ extension on AlbumResponseDto {
|
||||
updatedAt: updatedAt,
|
||||
thumbnailAssetId: albumThumbnailAssetId,
|
||||
isActivityEnabled: isActivityEnabled,
|
||||
order:
|
||||
order == AssetOrder.asc ? AlbumAssetOrder.asc : AlbumAssetOrder.desc,
|
||||
order: order == AssetOrder.asc ? AlbumAssetOrder.asc : AlbumAssetOrder.desc,
|
||||
assetCount: assetCount,
|
||||
ownerName: owner.name,
|
||||
);
|
||||
|
||||
@@ -4,8 +4,7 @@ import 'package:immich_mobile/providers/db.provider.dart';
|
||||
import 'package:immich_mobile/repositories/database.repository.dart';
|
||||
import 'package:isar/isar.dart';
|
||||
|
||||
final etagRepositoryProvider =
|
||||
Provider((ref) => ETagRepository(ref.watch(dbProvider)));
|
||||
final etagRepositoryProvider = Provider((ref) => ETagRepository(ref.watch(dbProvider)));
|
||||
|
||||
class ETagRepository extends DatabaseRepository {
|
||||
const ETagRepository(super.db);
|
||||
@@ -16,8 +15,7 @@ class ETagRepository extends DatabaseRepository {
|
||||
|
||||
Future<void> upsertAll(List<ETag> etags) => txn(() => db.eTags.putAll(etags));
|
||||
|
||||
Future<void> deleteByIds(List<String> ids) =>
|
||||
txn(() => db.eTags.deleteAllById(ids));
|
||||
Future<void> deleteByIds(List<String> ids) => txn(() => db.eTags.deleteAllById(ids));
|
||||
|
||||
Future<ETag?> getById(String id) => db.eTags.getById(id);
|
||||
|
||||
|
||||
@@ -6,8 +6,7 @@ import 'package:immich_mobile/entities/asset.entity.dart';
|
||||
import 'package:immich_mobile/repositories/asset_media.repository.dart';
|
||||
import 'package:photo_manager/photo_manager.dart' hide AssetType;
|
||||
|
||||
final fileMediaRepositoryProvider =
|
||||
Provider((ref) => const FileMediaRepository());
|
||||
final fileMediaRepositoryProvider = Provider((ref) => const FileMediaRepository());
|
||||
|
||||
class FileMediaRepository {
|
||||
const FileMediaRepository();
|
||||
@@ -66,9 +65,7 @@ class FileMediaRepository {
|
||||
|
||||
Future<void> clearFileCache() => PhotoManager.clearFileCache();
|
||||
|
||||
Future<void> enableBackgroundAccess() =>
|
||||
PhotoManager.setIgnorePermissionCheck(true);
|
||||
Future<void> enableBackgroundAccess() => PhotoManager.setIgnorePermissionCheck(true);
|
||||
|
||||
Future<void> requestExtendedPermissions() =>
|
||||
PhotoManager.requestPermissionExtend();
|
||||
Future<void> requestExtendedPermissions() => PhotoManager.requestPermissionExtend();
|
||||
}
|
||||
|
||||
@@ -69,7 +69,6 @@ class GCastRepository {
|
||||
}
|
||||
|
||||
Future<List<CastDevice>> listDestinations() async {
|
||||
return await CastDiscoveryService()
|
||||
.search(timeout: const Duration(seconds: 3));
|
||||
return await CastDiscoveryService().search(timeout: const Duration(seconds: 3));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,8 +2,7 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:immich_mobile/services/local_files_manager.service.dart';
|
||||
|
||||
final localFilesManagerRepositoryProvider = Provider(
|
||||
(ref) =>
|
||||
LocalFilesManagerRepository(ref.watch(localFileManagerServiceProvider)),
|
||||
(ref) => LocalFilesManagerRepository(ref.watch(localFileManagerServiceProvider)),
|
||||
);
|
||||
|
||||
class LocalFilesManagerRepository {
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:immich_mobile/domain/models/user.model.dart';
|
||||
import 'package:immich_mobile/infrastructure/entities/user.entity.dart'
|
||||
as entity;
|
||||
import 'package:immich_mobile/infrastructure/entities/user.entity.dart' as entity;
|
||||
import 'package:immich_mobile/providers/db.provider.dart';
|
||||
import 'package:immich_mobile/repositories/database.repository.dart';
|
||||
import 'package:isar/isar.dart';
|
||||
@@ -14,21 +13,11 @@ class PartnerRepository extends DatabaseRepository {
|
||||
const PartnerRepository(super.db);
|
||||
|
||||
Future<List<UserDto>> getSharedBy() async {
|
||||
return (await db.users
|
||||
.filter()
|
||||
.isPartnerSharedByEqualTo(true)
|
||||
.sortById()
|
||||
.findAll())
|
||||
.map((u) => u.toDto())
|
||||
.toList();
|
||||
return (await db.users.filter().isPartnerSharedByEqualTo(true).sortById().findAll()).map((u) => u.toDto()).toList();
|
||||
}
|
||||
|
||||
Future<List<UserDto>> getSharedWith() async {
|
||||
return (await db.users
|
||||
.filter()
|
||||
.isPartnerSharedWithEqualTo(true)
|
||||
.sortById()
|
||||
.findAll())
|
||||
return (await db.users.filter().isPartnerSharedWithEqualTo(true).sortById().findAll())
|
||||
.map((u) => u.toDto())
|
||||
.toList();
|
||||
}
|
||||
@@ -39,11 +28,7 @@ class PartnerRepository extends DatabaseRepository {
|
||||
}
|
||||
|
||||
Stream<List<UserDto>> watchSharedWith() {
|
||||
return (db.users
|
||||
.filter()
|
||||
.isPartnerSharedWithEqualTo(true)
|
||||
.sortById()
|
||||
.watch())
|
||||
return (db.users.filter().isPartnerSharedWithEqualTo(true).sortById().watch())
|
||||
.map((users) => users.map((u) => u.toDto()).toList());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,9 +24,7 @@ class PartnerApiRepository extends ApiRepository {
|
||||
Future<List<UserDto>> getAll(Direction direction) async {
|
||||
final response = await checkNull(
|
||||
_api.getPartners(
|
||||
direction == Direction.sharedByMe
|
||||
? PartnerDirection.by
|
||||
: PartnerDirection.with_,
|
||||
direction == Direction.sharedByMe ? PartnerDirection.by : PartnerDirection.with_,
|
||||
),
|
||||
);
|
||||
return response.map(UserConverter.fromPartnerDto).toList();
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
|
||||
final secureStorageRepositoryProvider =
|
||||
Provider((ref) => const SecureStorageRepository(FlutterSecureStorage()));
|
||||
final secureStorageRepositoryProvider = Provider((ref) => const SecureStorageRepository(FlutterSecureStorage()));
|
||||
|
||||
class SecureStorageRepository {
|
||||
final FlutterSecureStorage _secureStorage;
|
||||
|
||||
@@ -9,30 +9,17 @@ import 'package:immich_mobile/utils/hash.dart';
|
||||
import 'package:immich_mobile/widgets/asset_grid/asset_grid_data_structure.dart';
|
||||
import 'package:isar/isar.dart';
|
||||
|
||||
final timelineRepositoryProvider =
|
||||
Provider((ref) => TimelineRepository(ref.watch(dbProvider)));
|
||||
final timelineRepositoryProvider = Provider((ref) => TimelineRepository(ref.watch(dbProvider)));
|
||||
|
||||
class TimelineRepository extends DatabaseRepository {
|
||||
const TimelineRepository(super.db);
|
||||
|
||||
Future<List<String>> getTimelineUserIds(String id) {
|
||||
return db.users
|
||||
.filter()
|
||||
.inTimelineEqualTo(true)
|
||||
.or()
|
||||
.idEqualTo(id)
|
||||
.idProperty()
|
||||
.findAll();
|
||||
return db.users.filter().inTimelineEqualTo(true).or().idEqualTo(id).idProperty().findAll();
|
||||
}
|
||||
|
||||
Stream<List<String>> watchTimelineUsers(String id) {
|
||||
return db.users
|
||||
.filter()
|
||||
.inTimelineEqualTo(true)
|
||||
.or()
|
||||
.idEqualTo(id)
|
||||
.idProperty()
|
||||
.watch();
|
||||
return db.users.filter().inTimelineEqualTo(true).or().idEqualTo(id).idProperty().watch();
|
||||
}
|
||||
|
||||
Stream<RenderList> watchArchiveTimeline(String userId) {
|
||||
@@ -65,11 +52,7 @@ class TimelineRepository extends DatabaseRepository {
|
||||
Album album,
|
||||
GroupAssetsBy groupAssetByOption,
|
||||
) {
|
||||
final query = album.assets
|
||||
.filter()
|
||||
.isTrashedEqualTo(false)
|
||||
.not()
|
||||
.visibilityEqualTo(AssetVisibilityEnum.locked);
|
||||
final query = album.assets.filter().isTrashedEqualTo(false).not().visibilityEqualTo(AssetVisibilityEnum.locked);
|
||||
|
||||
final withSortedOption = switch (album.sortOrder) {
|
||||
SortOrder.asc => query.sortByFileCreatedAt(),
|
||||
@@ -80,11 +63,7 @@ class TimelineRepository extends DatabaseRepository {
|
||||
}
|
||||
|
||||
Stream<RenderList> watchTrashTimeline(String userId) {
|
||||
final query = db.assets
|
||||
.filter()
|
||||
.ownerIdEqualTo(fastHash(userId))
|
||||
.isTrashedEqualTo(true)
|
||||
.sortByFileCreatedAtDesc();
|
||||
final query = db.assets.filter().ownerIdEqualTo(fastHash(userId)).isTrashedEqualTo(true).sortByFileCreatedAtDesc();
|
||||
|
||||
return _watchRenderList(query, GroupAssetsBy.none);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user