fix(web): cancel uploads on logout (#21760)

This commit is contained in:
Jason Rasmussen 2025-09-10 08:15:03 -04:00 committed by GitHub
parent 00c88b2636
commit e52cc259d5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 12 additions and 1 deletions

View File

@ -1,11 +1,16 @@
import { eventManager } from '$lib/managers/event-manager.svelte'; import { eventManager } from '$lib/managers/event-manager.svelte';
import { uploadAssetsStore } from '$lib/stores/upload';
import { getSupportedMediaTypes, type ServerMediaTypesResponseDto } from '@immich/sdk'; import { getSupportedMediaTypes, type ServerMediaTypesResponseDto } from '@immich/sdk';
class UploadManager { class UploadManager {
mediaTypes = $state<ServerMediaTypesResponseDto>({ image: [], sidecar: [], video: [] }); mediaTypes = $state<ServerMediaTypesResponseDto>({ image: [], sidecar: [], video: [] });
constructor() { constructor() {
eventManager.on('app.init', () => void this.#loadExtensions()); eventManager.on('app.init', () => void this.#loadExtensions()).on('auth.logout', () => void this.reset());
}
reset() {
uploadAssetsStore.reset();
} }
async #loadExtensions() { async #loadExtensions() {

View File

@ -2,6 +2,7 @@ import { authManager } from '$lib/managers/auth-manager.svelte';
import { uploadManager } from '$lib/managers/upload-manager.svelte'; import { uploadManager } from '$lib/managers/upload-manager.svelte';
import { UploadState } from '$lib/models/upload-asset'; import { UploadState } from '$lib/models/upload-asset';
import { uploadAssetsStore } from '$lib/stores/upload'; import { uploadAssetsStore } from '$lib/stores/upload';
import { user } from '$lib/stores/user.store';
import { uploadRequest } from '$lib/utils'; import { uploadRequest } from '$lib/utils';
import { addAssetsToAlbum } from '$lib/utils/asset-utils'; import { addAssetsToAlbum } from '$lib/utils/asset-utils';
import { ExecutorQueue } from '$lib/utils/executor-queue'; import { ExecutorQueue } from '$lib/utils/executor-queue';
@ -231,6 +232,11 @@ async function fileUploader({
return responseData.id; return responseData.id;
} catch (error) { } catch (error) {
// ignore errors if the user logs out during uploads
if (!get(user)) {
return;
}
const errorMessage = handleError(error, $t('errors.unable_to_upload_file')); const errorMessage = handleError(error, $t('errors.unable_to_upload_file'));
uploadAssetsStore.track('error'); uploadAssetsStore.track('error');
uploadAssetsStore.updateItem(deviceAssetId, { state: UploadState.ERROR, error: errorMessage }); uploadAssetsStore.updateItem(deviceAssetId, { state: UploadState.ERROR, error: errorMessage });