Compare commits

..

3 Commits

Author SHA1 Message Date
shenlong-tanwen
2f1ec5b724 fix: prune stale assets 2025-10-02 17:32:43 +05:30
renovate[bot]
00ce6354f0 chore(deps): update node.js to v22.20.0 (#22496)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-02 09:17:40 +00:00
Kenny at FUTO
9b938d8954 feat(docs): add one-click install docs page (#22553)
* feat(docs): add one-click install docs page
2025-10-01 17:24:21 -05:00
17 changed files with 82 additions and 16 deletions

2
.github/.nvmrc vendored
View File

@@ -1 +1 @@
22.19.0
22.20.0

View File

@@ -1 +1 @@
22.19.0
22.20.0

View File

@@ -68,6 +68,6 @@
"micromatch": "^4.0.8"
},
"volta": {
"node": "22.19.0"
"node": "22.20.0"
}
}

View File

@@ -1 +1 @@
22.19.0
22.20.0

View File

@@ -0,0 +1,32 @@
---
sidebar_position: 65
---
# One-Click [Cloud Service]
:::note
This version of Immich is provided via cloud service provider's one-click marketplaces. Hosting costs are set by the cloud service providers.
Support for these are provided by the individual cloud service providers.
**Please report issues to the corresponding [Github Repository][github].**
:::
## Installation
Simply goto the providers marketplace and choose Immich, then follow the provided instructions.
## One-Click Immich marketplace providers
### DigitalOcean
https://marketplace.digitalocean.com/apps/immich
### Vultr
https://www.vultr.com/marketplace/apps/immich
## Issues
For issues, open an issue on the associated [GitHub Repository][github].
[github]: https://github.com/imagegenius/docker-immich/

View File

@@ -57,6 +57,6 @@
"node": ">=20"
},
"volta": {
"node": "22.19.0"
"node": "22.20.0"
}
}

View File

@@ -1 +1 @@
22.19.0
22.20.0

View File

@@ -52,6 +52,6 @@
"vitest": "^3.0.0"
},
"volta": {
"node": "22.19.0"
"node": "22.20.0"
}
}

View File

@@ -1,5 +1,5 @@
[tools]
node = "22.19.0"
node = "22.20.0"
flutter = "3.35.4"
pnpm = "10.15.1"

View File

@@ -130,9 +130,9 @@ class SyncStreamService {
// to acknowledge that the client has processed all the backfill events
case SyncEntityType.syncAckV1:
return;
// No-op. SyncCompleteV1 is used to signal the completion of the sync process
// SyncCompleteV1 is used to signal the completion of the sync process. Cleanup stale assets and signal completion
case SyncEntityType.syncCompleteV1:
return;
return _syncStreamRepository.pruneAssets();
// Request to reset the client state. Clear everything related to remote entities
case SyncEntityType.syncResetV1:
return _syncStreamRepository.reset();

View File

@@ -591,6 +591,40 @@ class SyncStreamRepository extends DriftDatabaseRepository {
rethrow;
}
}
Future<void> pruneAssets() async {
try {
await _db.transaction(() async {
final authQuery = _db.authUserEntity.selectOnly()
..addColumns([_db.authUserEntity.id])
..limit(1);
final currentUserId = await authQuery.map((row) => row.read(_db.authUserEntity.id)).getSingleOrNull();
if (currentUserId == null) {
_logger.warning('No authenticated user found during pruneAssets. Skipping asset pruning.');
return;
}
final partnerQuery = _db.partnerEntity.selectOnly()
..addColumns([_db.partnerEntity.sharedById])
..where(_db.partnerEntity.sharedWithId.equals(currentUserId));
final partnerIds = await partnerQuery.map((row) => row.read(_db.partnerEntity.sharedById)).get();
final validUsers = {currentUserId, ...partnerIds.nonNulls};
// Asset is not owned by the current user or any of their partners and is not part of any (shared) album
// Likely a stale asset that was previously shared but has been removed
await _db.remoteAssetEntity.deleteWhere((asset) {
return asset.ownerId.isNotIn(validUsers) &
asset.id.isNotInQuery(
_db.remoteAlbumAssetEntity.selectOnly()..addColumns([_db.remoteAlbumAssetEntity.assetId]),
);
});
});
} catch (error, stack) {
_logger.severe('Error: pruneAssets', error, stack);
// We do not rethrow here as this is a client-only cleanup and should not affect the sync process
}
}
}
extension on AssetTypeEnum {

View File

@@ -1 +1 @@
22.19.0
22.20.0

View File

@@ -28,6 +28,6 @@
"directory": "open-api/typescript-sdk"
},
"volta": {
"node": "22.19.0"
"node": "22.20.0"
}
}

View File

@@ -1 +1 @@
22.19.0
22.20.0

View File

@@ -161,7 +161,7 @@
"vitest": "^3.0.0"
},
"volta": {
"node": "22.19.0"
"node": "22.20.0"
},
"overrides": {
"sharp": "^0.34.3"

View File

@@ -1 +1 @@
22.19.0
22.20.0

View File

@@ -107,6 +107,6 @@
"vitest": "^3.0.0"
},
"volta": {
"node": "22.19.0"
"node": "22.20.0"
}
}