fix(web): do not notify on patch releases (#22591)

This commit is contained in:
Jason Rasmussen 2025-10-06 12:00:37 -05:00 committed by Chaoscontrol
parent 06335612f8
commit 91a4b6dcec
4 changed files with 49 additions and 3 deletions

View file

@ -25,7 +25,7 @@ export interface Events {
on_person_thumbnail: (personId: string) => void; on_person_thumbnail: (personId: string) => void;
on_server_version: (serverVersion: ServerVersionResponseDto) => void; on_server_version: (serverVersion: ServerVersionResponseDto) => void;
on_config_update: () => void; on_config_update: () => void;
on_new_release: (newRelase: ReleaseEvent) => void; on_new_release: (newRelease: ReleaseEvent) => void;
on_session_delete: (sessionId: string) => void; on_session_delete: (sessionId: string) => void;
on_notification: (notification: NotificationDto) => void; on_notification: (notification: NotificationDto) => void;
} }

25
web/src/lib/utils.spec.ts Normal file
View file

@ -0,0 +1,25 @@
import { getReleaseType } from '$lib/utils';
describe('utils', () => {
describe(getReleaseType.name, () => {
it('should return "major" for major version changes', () => {
expect(getReleaseType({ major: 1, minor: 0, patch: 0 }, { major: 2, minor: 0, patch: 0 })).toBe('major');
expect(getReleaseType({ major: 1, minor: 0, patch: 0 }, { major: 3, minor: 2, patch: 1 })).toBe('major');
});
it('should return "minor" for minor version changes', () => {
expect(getReleaseType({ major: 1, minor: 0, patch: 0 }, { major: 1, minor: 1, patch: 0 })).toBe('minor');
expect(getReleaseType({ major: 1, minor: 0, patch: 0 }, { major: 1, minor: 2, patch: 1 })).toBe('minor');
});
it('should return "patch" for patch version changes', () => {
expect(getReleaseType({ major: 1, minor: 0, patch: 0 }, { major: 1, minor: 0, patch: 1 })).toBe('patch');
expect(getReleaseType({ major: 1, minor: 0, patch: 0 }, { major: 1, minor: 0, patch: 5 })).toBe('patch');
});
it('should return "none" for matching versions', () => {
expect(getReleaseType({ major: 1, minor: 0, patch: 0 }, { major: 1, minor: 0, patch: 0 })).toBe('none');
expect(getReleaseType({ major: 1, minor: 2, patch: 3 }, { major: 1, minor: 2, patch: 3 })).toBe('none');
});
});
});

View file

@ -21,6 +21,7 @@ import {
unlinkOAuthAccount, unlinkOAuthAccount,
type MemoryResponseDto, type MemoryResponseDto,
type PersonResponseDto, type PersonResponseDto,
type ServerVersionResponseDto,
type SharedLinkResponseDto, type SharedLinkResponseDto,
type UserResponseDto, type UserResponseDto,
} from '@immich/sdk'; } from '@immich/sdk';
@ -385,3 +386,22 @@ export function createDateFormatter(localeCode: string | undefined): DateFormatt
}, },
}; };
} }
export const getReleaseType = (
current: ServerVersionResponseDto,
newVersion: ServerVersionResponseDto,
): 'major' | 'minor' | 'patch' | 'none' => {
if (current.major !== newVersion.major) {
return 'major';
}
if (current.minor !== newVersion.minor) {
return 'minor';
}
if (current.patch !== newVersion.patch) {
return 'patch';
}
return 'none';
};

View file

@ -18,7 +18,7 @@
websocketStore, websocketStore,
type ReleaseEvent, type ReleaseEvent,
} from '$lib/stores/websocket'; } from '$lib/stores/websocket';
import { copyToClipboard } from '$lib/utils'; import { copyToClipboard, getReleaseType } from '$lib/utils';
import { isAssetViewerRoute } from '$lib/utils/navigation'; import { isAssetViewerRoute } from '$lib/utils/navigation';
import type { ServerVersionResponseDto } from '@immich/sdk'; import type { ServerVersionResponseDto } from '@immich/sdk';
import { modalManager, setTranslations } from '@immich/ui'; import { modalManager, setTranslations } from '@immich/ui';
@ -85,8 +85,9 @@
const releaseVersion = semverToName(release.releaseVersion); const releaseVersion = semverToName(release.releaseVersion);
const serverVersion = semverToName(release.serverVersion); const serverVersion = semverToName(release.serverVersion);
const type = getReleaseType(release.serverVersion, release.releaseVersion);
if (localStorage.getItem('appVersion') === releaseVersion) { if (type === 'none' || type === 'patch' || localStorage.getItem('appVersion') === releaseVersion) {
return; return;
} }