mirror of
https://github.com/immich-app/immich.git
synced 2026-07-06 04:34:45 -07:00
Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 49d5055a70 | |||
| 103585ceb9 | |||
| 6da890ee37 | |||
| e7ba8d3632 | |||
| 5645149e09 | |||
| 5a104f9dbe | |||
| 13d17b3a11 |
@@ -426,7 +426,7 @@ export class AuthService extends BaseService {
|
||||
throw new BadRequestException('This OAuth account has already been linked to another user.');
|
||||
}
|
||||
|
||||
if (auth.session) {
|
||||
if (auth.session && sid) {
|
||||
await this.sessionRepository.update(auth.session.id, { oauthSid: sid });
|
||||
}
|
||||
|
||||
|
||||
@@ -381,6 +381,8 @@ describe(TranscodingService.name, () => {
|
||||
'50',
|
||||
'-keyint_min',
|
||||
'50',
|
||||
'-ac',
|
||||
'2',
|
||||
'-copyts',
|
||||
'-r',
|
||||
'50130000/2012441',
|
||||
|
||||
@@ -200,6 +200,11 @@ export class BaseConfig implements VideoCodecSWConfig {
|
||||
const options = ['-c:v', videoCodec, '-c:a', audioCodec, '-map', `0:${videoStream.index}`, '-map_metadata', '-1'];
|
||||
if (audioStream) {
|
||||
options.push('-map', `0:${audioStream.index}`);
|
||||
// If there are more than 2 channels sometimes the channel config is broken when re-encoded
|
||||
// TODO: Store the number of channels in the db and then set it during the transcoding: -channel_layout 5.1
|
||||
if ([TranscodeTarget.All, TranscodeTarget.Audio].includes(target)) {
|
||||
options.push('-ac', '2');
|
||||
}
|
||||
}
|
||||
if (this.getBFrames() > -1) {
|
||||
options.push('-bf', `${this.getBFrames()}`);
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
import { assetViewerManager } from '$lib/managers/asset-viewer-manager.svelte';
|
||||
import { castManager } from '$lib/managers/cast-manager.svelte';
|
||||
import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte';
|
||||
import { authManager } from '$lib/managers/auth-manager.svelte';
|
||||
import { mediaCapabilitiesManager } from '$lib/managers/media-capabilities-manager.svelte';
|
||||
import { autoPlayVideo, lang, loopVideo as loopVideoPreference } from '$lib/stores/preferences.store';
|
||||
import { getAssetHlsSessionUrl, getAssetHlsUrl, getAssetMediaUrl, getAssetPlaybackUrl } from '$lib/utils';
|
||||
@@ -150,6 +151,15 @@
|
||||
},
|
||||
},
|
||||
useMediaCapabilities: false,
|
||||
xhrSetup: (xhr: XMLHttpRequest, url: string) => {
|
||||
const authenticatedUrl = new URL(url, globalThis.location.origin);
|
||||
for (const [key, value] of Object.entries(authManager.params)) {
|
||||
if (value) {
|
||||
authenticatedUrl.searchParams.set(key, value as string);
|
||||
}
|
||||
}
|
||||
xhr.open('GET', authenticatedUrl.toString());
|
||||
},
|
||||
};
|
||||
|
||||
const releaseSession = () => {
|
||||
|
||||
@@ -37,18 +37,18 @@
|
||||
</div>
|
||||
|
||||
{#await valuePromise}
|
||||
<div class="relative mx-auto font-mono text-2xl font-medium">
|
||||
<div class="relative mx-auto font-mono text-2xl font-medium" aria-label="0">
|
||||
<span class="shimmer-text text-gray-300 dark:text-gray-600">{zeros()}</span>
|
||||
</div>
|
||||
{:then data}
|
||||
<div class="relative mx-auto font-mono text-2xl font-medium">
|
||||
<div class="relative mx-auto font-mono text-2xl font-medium" aria-label="{data.value} {data.unit ?? ''}">
|
||||
<span class="text-gray-300 dark:text-gray-600">{zeros(data)}</span><span>{data.value}</span>
|
||||
{#if data.unit}
|
||||
<code class="font-mono text-base font-normal">{data.unit}</code>
|
||||
{/if}
|
||||
</div>
|
||||
{:catch _}
|
||||
<div class="relative mx-auto font-mono text-2xl font-medium">
|
||||
<div class="relative mx-auto font-mono text-2xl font-medium" aria-label="0">
|
||||
<span class="text-gray-300 dark:text-gray-600">{zeros()}</span>
|
||||
</div>
|
||||
{/await}
|
||||
|
||||
@@ -25,7 +25,7 @@ export class GCastDestination implements ICastDestination {
|
||||
private currentUrl: string | null = null;
|
||||
|
||||
async initialize(): Promise<boolean> {
|
||||
if (!authManager.authenticated || authManager.preferences.cast.gCastEnabled) {
|
||||
if (!authManager.authenticated || !authManager.preferences.cast.gCastEnabled) {
|
||||
this.isAvailable = false;
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
import {
|
||||
type AlbumResponseDto,
|
||||
type AssetResponseDto,
|
||||
AssetVisibility,
|
||||
getPerson,
|
||||
getTagById,
|
||||
type MetadataSearchDto,
|
||||
@@ -141,8 +142,10 @@
|
||||
try {
|
||||
const { albums, assets } =
|
||||
('query' in searchDto || 'queryAssetId' in searchDto) && smartSearchEnabled
|
||||
? await searchSmart({ smartSearchDto: { ...searchDto, language: $lang } })
|
||||
: await searchAssets({ metadataSearchDto: searchDto });
|
||||
? await searchSmart({
|
||||
smartSearchDto: { visibility: AssetVisibility.Timeline, ...searchDto, language: $lang },
|
||||
})
|
||||
: await searchAssets({ metadataSearchDto: { visibility: AssetVisibility.Timeline, ...searchDto } });
|
||||
|
||||
searchResultAlbums.push(...albums.items);
|
||||
searchResultAssets.push(...assets.items);
|
||||
|
||||
Reference in New Issue
Block a user