mirror of
https://github.com/immich-app/immich
synced 2025-10-17 18:19:27 +00:00
fix(web): do not notify on patch releases (#22591)
This commit is contained in:
parent
06335612f8
commit
91a4b6dcec
4 changed files with 49 additions and 3 deletions
|
|
@ -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
25
web/src/lib/utils.spec.ts
Normal 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');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
@ -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';
|
||||||
|
};
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue