Compare commits
45 Commits
sqlite-flu
...
v1.114.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
068904f746 | ||
|
|
5d8052202e | ||
|
|
2dc95704c5 | ||
|
|
529b7fe748 | ||
|
|
a653d9d29f | ||
|
|
ecc85ff6c6 | ||
|
|
639bc0c660 | ||
|
|
9fc30d6bf6 | ||
|
|
aa0097bde2 | ||
|
|
02803816f4 | ||
|
|
eb7777639d | ||
|
|
649897f737 | ||
|
|
b0af9be513 | ||
|
|
d6729c50c9 | ||
|
|
77904a54d8 | ||
|
|
0148005931 | ||
|
|
dfcdaefa22 | ||
|
|
d7d3b8dfec | ||
|
|
27e283e724 | ||
|
|
259bc8a6b0 | ||
|
|
c5848112bb | ||
|
|
ce2349d496 | ||
|
|
f26d47c8d9 | ||
|
|
f4ec842577 | ||
|
|
0d6bef2c05 | ||
|
|
77e6a6d78b | ||
|
|
720412645f | ||
|
|
0a8bd7dc66 | ||
|
|
f8211a128e | ||
|
|
12b65e3c24 | ||
|
|
1783dfd393 | ||
|
|
d685bc1f34 | ||
|
|
4bf82fb4c4 | ||
|
|
cbb0a7f8d4 | ||
|
|
ee6550c02c | ||
|
|
69cedef772 | ||
|
|
1e509d97f6 | ||
|
|
c7ddd0b44a | ||
|
|
c3a8ddaaf2 | ||
|
|
526cf23a9e | ||
|
|
e1ed7fa6ed | ||
|
|
0b6cd74e4d | ||
|
|
7ca53ba507 | ||
|
|
a96f41aa11 | ||
|
|
ddd73b9911 |
2
.github/workflows/cli.yml
vendored
2
.github/workflows/cli.yml
vendored
@@ -22,7 +22,7 @@ permissions:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
publish:
|
publish:
|
||||||
name: Publish
|
name: CLI Publish
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
|
|||||||
13
.github/workflows/docker.yml
vendored
13
.github/workflows/docker.yml
vendored
@@ -234,3 +234,16 @@ jobs:
|
|||||||
BUILD_IMAGE=${{ github.event_name == 'release' && github.ref_name || steps.metadata.outputs.tags }}
|
BUILD_IMAGE=${{ github.event_name == 'release' && github.ref_name || steps.metadata.outputs.tags }}
|
||||||
BUILD_SOURCE_REF=${{ github.ref_name }}
|
BUILD_SOURCE_REF=${{ github.ref_name }}
|
||||||
BUILD_SOURCE_COMMIT=${{ github.sha }}
|
BUILD_SOURCE_COMMIT=${{ github.sha }}
|
||||||
|
|
||||||
|
success-check:
|
||||||
|
name: Docker Build & Push Success
|
||||||
|
needs: [build_and_push_ml, build_and_push_server]
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: always()
|
||||||
|
steps:
|
||||||
|
- name: Any jobs failed?
|
||||||
|
if: ${{ contains(needs.*.result, 'failure') }}
|
||||||
|
run: exit 1
|
||||||
|
- name: All jobs passed or skipped
|
||||||
|
if: ${{ !(contains(needs.*.result, 'failure')) }}
|
||||||
|
run: echo "All jobs passed or skipped" && echo "${{ toJSON(needs.*.result) }}"
|
||||||
|
|||||||
1
.github/workflows/docs-build.yml
vendored
1
.github/workflows/docs-build.yml
vendored
@@ -30,6 +30,7 @@ jobs:
|
|||||||
run: echo "should_force=${{ github.event_name == 'release' }}" >> "$GITHUB_OUTPUT"
|
run: echo "should_force=${{ github.event_name == 'release' }}" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
build:
|
build:
|
||||||
|
name: Docs Build
|
||||||
needs: pre-job
|
needs: pre-job
|
||||||
if: ${{ needs.pre-job.outputs.should_run == 'true' }}
|
if: ${{ needs.pre-job.outputs.should_run == 'true' }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|||||||
2
.github/workflows/docs-deploy.yml
vendored
2
.github/workflows/docs-deploy.yml
vendored
@@ -7,6 +7,7 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
checks:
|
checks:
|
||||||
|
name: Docs Deploy Checks
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
outputs:
|
outputs:
|
||||||
parameters: ${{ steps.parameters.outputs.result }}
|
parameters: ${{ steps.parameters.outputs.result }}
|
||||||
@@ -91,6 +92,7 @@ jobs:
|
|||||||
return parameters;
|
return parameters;
|
||||||
|
|
||||||
deploy:
|
deploy:
|
||||||
|
name: Docs Deploy
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: checks
|
needs: checks
|
||||||
if: ${{ fromJson(needs.checks.outputs.artifact).found && fromJson(needs.checks.outputs.parameters).shouldDeploy }}
|
if: ${{ fromJson(needs.checks.outputs.artifact).found && fromJson(needs.checks.outputs.parameters).shouldDeploy }}
|
||||||
|
|||||||
1
.github/workflows/docs-destroy.yml
vendored
1
.github/workflows/docs-destroy.yml
vendored
@@ -5,6 +5,7 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
deploy:
|
deploy:
|
||||||
|
name: Docs Destroy
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
|
|||||||
12
.github/workflows/test.yml
vendored
12
.github/workflows/test.yml
vendored
@@ -48,7 +48,7 @@ jobs:
|
|||||||
run: echo "should_force=${{ github.event_name == 'workflow_dispatch' }}" >> "$GITHUB_OUTPUT"
|
run: echo "should_force=${{ github.event_name == 'workflow_dispatch' }}" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
server-unit-tests:
|
server-unit-tests:
|
||||||
name: Server
|
name: Test & Lint Server
|
||||||
needs: pre-job
|
needs: pre-job
|
||||||
if: ${{ needs.pre-job.outputs.should_run_server == 'true' }}
|
if: ${{ needs.pre-job.outputs.should_run_server == 'true' }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@@ -85,7 +85,7 @@ jobs:
|
|||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
|
|
||||||
cli-unit-tests:
|
cli-unit-tests:
|
||||||
name: CLI
|
name: Unit Test CLI
|
||||||
needs: pre-job
|
needs: pre-job
|
||||||
if: ${{ needs.pre-job.outputs.should_run_cli == 'true' }}
|
if: ${{ needs.pre-job.outputs.should_run_cli == 'true' }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@@ -126,7 +126,7 @@ jobs:
|
|||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
|
|
||||||
cli-unit-tests-win:
|
cli-unit-tests-win:
|
||||||
name: CLI (Windows)
|
name: Unit Test CLI (Windows)
|
||||||
needs: pre-job
|
needs: pre-job
|
||||||
if: ${{ needs.pre-job.outputs.should_run_cli == 'true' }}
|
if: ${{ needs.pre-job.outputs.should_run_cli == 'true' }}
|
||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
@@ -160,7 +160,7 @@ jobs:
|
|||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
|
|
||||||
web-unit-tests:
|
web-unit-tests:
|
||||||
name: Web
|
name: Test & Lint Web
|
||||||
needs: pre-job
|
needs: pre-job
|
||||||
if: ${{ needs.pre-job.outputs.should_run_web == 'true' }}
|
if: ${{ needs.pre-job.outputs.should_run_web == 'true' }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@@ -327,7 +327,7 @@ jobs:
|
|||||||
if: ${{ !cancelled() }}
|
if: ${{ !cancelled() }}
|
||||||
|
|
||||||
mobile-unit-tests:
|
mobile-unit-tests:
|
||||||
name: Mobile
|
name: Unit Test Mobile
|
||||||
needs: pre-job
|
needs: pre-job
|
||||||
if: ${{ needs.pre-job.outputs.should_run_mobile == 'true' }}
|
if: ${{ needs.pre-job.outputs.should_run_mobile == 'true' }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@@ -343,7 +343,7 @@ jobs:
|
|||||||
run: flutter test -j 1
|
run: flutter test -j 1
|
||||||
|
|
||||||
ml-unit-tests:
|
ml-unit-tests:
|
||||||
name: Machine Learning
|
name: Unit Test ML
|
||||||
needs: pre-job
|
needs: pre-job
|
||||||
if: ${{ needs.pre-job.outputs.should_run_ml == 'true' }}
|
if: ${{ needs.pre-job.outputs.should_run_ml == 'true' }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|||||||
6
cli/package-lock.json
generated
6
cli/package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "@immich/cli",
|
"name": "@immich/cli",
|
||||||
"version": "2.2.17",
|
"version": "2.2.18",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "@immich/cli",
|
"name": "@immich/cli",
|
||||||
"version": "2.2.17",
|
"version": "2.2.18",
|
||||||
"license": "GNU Affero General Public License version 3",
|
"license": "GNU Affero General Public License version 3",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"fast-glob": "^3.3.2",
|
"fast-glob": "^3.3.2",
|
||||||
@@ -52,7 +52,7 @@
|
|||||||
},
|
},
|
||||||
"../open-api/typescript-sdk": {
|
"../open-api/typescript-sdk": {
|
||||||
"name": "@immich/sdk",
|
"name": "@immich/sdk",
|
||||||
"version": "1.113.1",
|
"version": "1.114.0",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "GNU Affero General Public License version 3",
|
"license": "GNU Affero General Public License version 3",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@immich/cli",
|
"name": "@immich/cli",
|
||||||
"version": "2.2.17",
|
"version": "2.2.18",
|
||||||
"description": "Command Line Interface (CLI) for Immich",
|
"description": "Command Line Interface (CLI) for Immich",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"exports": "./dist/index.js",
|
"exports": "./dist/index.js",
|
||||||
|
|||||||
@@ -78,4 +78,4 @@ borg mount "$REMOTE_HOST:$REMOTE_BACKUP_PATH"/immich-borg /tmp/immich-mountpoint
|
|||||||
cd /tmp/immich-mountpoint
|
cd /tmp/immich-mountpoint
|
||||||
```
|
```
|
||||||
|
|
||||||
You can find available snapshots in seperate sub-directories at `/tmp/immich-mountpoint`. Restore the files you need, and unmount the Borg repository using `borg umount /tmp/immich-mountpoint`
|
You can find available snapshots in separate sub-directories at `/tmp/immich-mountpoint`. Restore the files you need, and unmount the Borg repository using `borg umount /tmp/immich-mountpoint`
|
||||||
|
|||||||
@@ -125,7 +125,7 @@ When `DB_URL` is defined, the `DB_HOSTNAME`, `DB_PORT`, `DB_USERNAME`, `DB_PASSW
|
|||||||
All `REDIS_` variables must be provided to all Immich workers, including `api` and `microservices`.
|
All `REDIS_` variables must be provided to all Immich workers, including `api` and `microservices`.
|
||||||
|
|
||||||
`REDIS_URL` must start with `ioredis://` and then include a `base64` encoded JSON string for the configuration.
|
`REDIS_URL` must start with `ioredis://` and then include a `base64` encoded JSON string for the configuration.
|
||||||
More info can be found in the upstream [ioredis][redis-api] documentation.
|
More info can be found in the upstream [ioredis] documentation.
|
||||||
|
|
||||||
When `REDIS_URL` or `REDIS_SOCKET` are defined, the `REDIS_HOSTNAME`, `REDIS_PORT`, `REDIS_USERNAME`, `REDIS_PASSWORD`, and `REDIS_DBINDEX` variables are ignored.
|
When `REDIS_URL` or `REDIS_SOCKET` are defined, the `REDIS_HOSTNAME`, `REDIS_PORT`, `REDIS_USERNAME`, `REDIS_PASSWORD`, and `REDIS_DBINDEX` variables are ignored.
|
||||||
:::
|
:::
|
||||||
@@ -226,4 +226,4 @@ to use use a Docker secret for the password in the Redis container.
|
|||||||
[docker-secrets-example]: https://github.com/docker-library/redis/issues/46#issuecomment-335326234
|
[docker-secrets-example]: https://github.com/docker-library/redis/issues/46#issuecomment-335326234
|
||||||
[docker-secrets-docs]: https://github.com/docker-library/docs/tree/master/postgres#docker-secrets
|
[docker-secrets-docs]: https://github.com/docker-library/docs/tree/master/postgres#docker-secrets
|
||||||
[docker-secrets]: https://docs.docker.com/engine/swarm/secrets/
|
[docker-secrets]: https://docs.docker.com/engine/swarm/secrets/
|
||||||
[redis-api]: https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository
|
[ioredis]: https://ioredis.readthedocs.io/en/latest/README/#connect-to-redis
|
||||||
|
|||||||
@@ -27,3 +27,9 @@ If an asset is in multiple albums, `{{album}}` will be set to the name of the al
|
|||||||
:::
|
:::
|
||||||
|
|
||||||
Immich also provides a mechanism to migrate between templates so that if the template you set now doesn't work in the future, you can always migrate all the existing files to the new template. The mechanism is run as a job on the Job page.
|
Immich also provides a mechanism to migrate between templates so that if the template you set now doesn't work in the future, you can always migrate all the existing files to the new template. The mechanism is run as a job on the Job page.
|
||||||
|
|
||||||
|
If you want to store assets in album folders, but you also have assets that do not belong to any album, you can use `{{#if album}}`, `{{else}}` and `{{/if}}` to create a conditional statement. For example, the following template will store assets in album folders if they belong to an album, and in a folder named "Other/Month" if they do not belong to an album:
|
||||||
|
|
||||||
|
```
|
||||||
|
{{y}}/{{#if album}}{{album}}{{else}}Other/{{MM}}{{/if}}/{{filename}}
|
||||||
|
```
|
||||||
|
|||||||
7
docs/package-lock.json
generated
7
docs/package-lock.json
generated
@@ -13698,9 +13698,10 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/prism-react-renderer": {
|
"node_modules/prism-react-renderer": {
|
||||||
"version": "2.3.1",
|
"version": "2.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.4.0.tgz",
|
||||||
"integrity": "sha512-Rdf+HzBLR7KYjzpJ1rSoxT9ioO85nZngQEoFIhL07XhtJHlCU3SOz0GJ6+qvMyQe0Se+BV3qpe6Yd/NmQF5Juw==",
|
"integrity": "sha512-327BsVCD/unU4CNLZTWVHyUHKnsqcvj2qbPlQ8MiBE2eq2rgctjigPA1Gp9HLF83kZ20zNN6jgizHJeEsyFYOw==",
|
||||||
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/prismjs": "^1.26.0",
|
"@types/prismjs": "^1.26.0",
|
||||||
"clsx": "^2.0.0"
|
"clsx": "^2.0.0"
|
||||||
|
|||||||
4
docs/static/archived-versions.json
vendored
4
docs/static/archived-versions.json
vendored
@@ -1,4 +1,8 @@
|
|||||||
[
|
[
|
||||||
|
{
|
||||||
|
"label": "v1.114.0",
|
||||||
|
"url": "https://v1.114.0.archive.immich.app"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"label": "v1.113.1",
|
"label": "v1.113.1",
|
||||||
"url": "https://v1.113.1.archive.immich.app"
|
"url": "https://v1.113.1.archive.immich.app"
|
||||||
|
|||||||
8
e2e/package-lock.json
generated
8
e2e/package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "immich-e2e",
|
"name": "immich-e2e",
|
||||||
"version": "1.113.1",
|
"version": "1.114.0",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "immich-e2e",
|
"name": "immich-e2e",
|
||||||
"version": "1.113.1",
|
"version": "1.114.0",
|
||||||
"license": "GNU Affero General Public License version 3",
|
"license": "GNU Affero General Public License version 3",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@eslint/eslintrc": "^3.1.0",
|
"@eslint/eslintrc": "^3.1.0",
|
||||||
@@ -45,7 +45,7 @@
|
|||||||
},
|
},
|
||||||
"../cli": {
|
"../cli": {
|
||||||
"name": "@immich/cli",
|
"name": "@immich/cli",
|
||||||
"version": "2.2.17",
|
"version": "2.2.18",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "GNU Affero General Public License version 3",
|
"license": "GNU Affero General Public License version 3",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -92,7 +92,7 @@
|
|||||||
},
|
},
|
||||||
"../open-api/typescript-sdk": {
|
"../open-api/typescript-sdk": {
|
||||||
"name": "@immich/sdk",
|
"name": "@immich/sdk",
|
||||||
"version": "1.113.1",
|
"version": "1.114.0",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "GNU Affero General Public License version 3",
|
"license": "GNU Affero General Public License version 3",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "immich-e2e",
|
"name": "immich-e2e",
|
||||||
"version": "1.113.1",
|
"version": "1.114.0",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
|||||||
@@ -6,7 +6,9 @@ import {
|
|||||||
LoginResponseDto,
|
LoginResponseDto,
|
||||||
SharedLinkType,
|
SharedLinkType,
|
||||||
getAssetInfo,
|
getAssetInfo,
|
||||||
|
getConfig,
|
||||||
getMyUser,
|
getMyUser,
|
||||||
|
updateConfig,
|
||||||
} from '@immich/sdk';
|
} from '@immich/sdk';
|
||||||
import { exiftool } from 'exiftool-vendored';
|
import { exiftool } from 'exiftool-vendored';
|
||||||
import { DateTime } from 'luxon';
|
import { DateTime } from 'luxon';
|
||||||
@@ -43,6 +45,9 @@ const TEN_TIMES = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
|
|||||||
|
|
||||||
const locationAssetFilepath = `${testAssetDir}/metadata/gps-position/thompson-springs.jpg`;
|
const locationAssetFilepath = `${testAssetDir}/metadata/gps-position/thompson-springs.jpg`;
|
||||||
const ratingAssetFilepath = `${testAssetDir}/metadata/rating/mongolels.jpg`;
|
const ratingAssetFilepath = `${testAssetDir}/metadata/rating/mongolels.jpg`;
|
||||||
|
const facesAssetFilepath = `${testAssetDir}/metadata/faces/portrait.jpg`;
|
||||||
|
|
||||||
|
const getSystemConfig = (accessToken: string) => getConfig({ headers: asBearerAuth(accessToken) });
|
||||||
|
|
||||||
const readTags = async (bytes: Buffer, filename: string) => {
|
const readTags = async (bytes: Buffer, filename: string) => {
|
||||||
const filepath = join(tempDir, filename);
|
const filepath = join(tempDir, filename);
|
||||||
@@ -71,6 +76,7 @@ describe('/asset', () => {
|
|||||||
let user2Assets: AssetMediaResponseDto[];
|
let user2Assets: AssetMediaResponseDto[];
|
||||||
let locationAsset: AssetMediaResponseDto;
|
let locationAsset: AssetMediaResponseDto;
|
||||||
let ratingAsset: AssetMediaResponseDto;
|
let ratingAsset: AssetMediaResponseDto;
|
||||||
|
let facesAsset: AssetMediaResponseDto;
|
||||||
|
|
||||||
const setupTests = async () => {
|
const setupTests = async () => {
|
||||||
await utils.resetDatabase();
|
await utils.resetDatabase();
|
||||||
@@ -224,6 +230,64 @@ describe('/asset', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should get the asset faces', async () => {
|
||||||
|
const config = await getSystemConfig(admin.accessToken);
|
||||||
|
config.metadata.faces.import = true;
|
||||||
|
await updateConfig({ systemConfigDto: config }, { headers: asBearerAuth(admin.accessToken) });
|
||||||
|
|
||||||
|
// asset faces
|
||||||
|
facesAsset = await utils.createAsset(admin.accessToken, {
|
||||||
|
assetData: {
|
||||||
|
filename: 'portrait.jpg',
|
||||||
|
bytes: await readFile(facesAssetFilepath),
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
await utils.waitForWebsocketEvent({ event: 'assetUpload', id: facesAsset.id });
|
||||||
|
|
||||||
|
const { status, body } = await request(app)
|
||||||
|
.get(`/assets/${facesAsset.id}`)
|
||||||
|
.set('Authorization', `Bearer ${admin.accessToken}`);
|
||||||
|
expect(status).toBe(200);
|
||||||
|
expect(body.id).toEqual(facesAsset.id);
|
||||||
|
expect(body.people).toMatchObject([
|
||||||
|
{
|
||||||
|
name: 'Marie Curie',
|
||||||
|
birthDate: null,
|
||||||
|
thumbnailPath: '',
|
||||||
|
isHidden: false,
|
||||||
|
faces: [
|
||||||
|
{
|
||||||
|
imageHeight: 700,
|
||||||
|
imageWidth: 840,
|
||||||
|
boundingBoxX1: 261,
|
||||||
|
boundingBoxX2: 356,
|
||||||
|
boundingBoxY1: 146,
|
||||||
|
boundingBoxY2: 284,
|
||||||
|
sourceType: 'exif',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Pierre Curie',
|
||||||
|
birthDate: null,
|
||||||
|
thumbnailPath: '',
|
||||||
|
isHidden: false,
|
||||||
|
faces: [
|
||||||
|
{
|
||||||
|
imageHeight: 700,
|
||||||
|
imageWidth: 840,
|
||||||
|
boundingBoxX1: 536,
|
||||||
|
boundingBoxX2: 618,
|
||||||
|
boundingBoxY1: 83,
|
||||||
|
boundingBoxY2: 252,
|
||||||
|
sourceType: 'exif',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
it('should work with a shared link', async () => {
|
it('should work with a shared link', async () => {
|
||||||
const sharedLink = await utils.createSharedLink(user1.accessToken, {
|
const sharedLink = await utils.createSharedLink(user1.accessToken, {
|
||||||
type: SharedLinkType.Individual,
|
type: SharedLinkType.Individual,
|
||||||
|
|||||||
@@ -102,6 +102,7 @@ describe('/server-info', () => {
|
|||||||
configFile: false,
|
configFile: false,
|
||||||
duplicateDetection: false,
|
duplicateDetection: false,
|
||||||
facialRecognition: false,
|
facialRecognition: false,
|
||||||
|
importFaces: false,
|
||||||
map: true,
|
map: true,
|
||||||
reverseGeocoding: true,
|
reverseGeocoding: true,
|
||||||
oauth: false,
|
oauth: false,
|
||||||
|
|||||||
@@ -110,6 +110,7 @@ describe('/server', () => {
|
|||||||
facialRecognition: false,
|
facialRecognition: false,
|
||||||
map: true,
|
map: true,
|
||||||
reverseGeocoding: true,
|
reverseGeocoding: true,
|
||||||
|
importFaces: false,
|
||||||
oauth: false,
|
oauth: false,
|
||||||
oauthAutoLaunch: false,
|
oauthAutoLaunch: false,
|
||||||
passwordLogin: true,
|
passwordLogin: true,
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ test.describe('Shared Links', () => {
|
|||||||
test('download from a shared link', async ({ page }) => {
|
test('download from a shared link', async ({ page }) => {
|
||||||
await page.goto(`/share/${sharedLink.key}`);
|
await page.goto(`/share/${sharedLink.key}`);
|
||||||
await page.getByRole('heading', { name: 'Test Album' }).waitFor();
|
await page.getByRole('heading', { name: 'Test Album' }).waitFor();
|
||||||
await page.locator('.group').first().hover();
|
await page.locator(`[data-asset-id="${asset.id}"]`).hover();
|
||||||
await page.waitForSelector('#asset-group-by-date svg');
|
await page.waitForSelector('#asset-group-by-date svg');
|
||||||
await page.getByRole('checkbox').click();
|
await page.getByRole('checkbox').click();
|
||||||
await page.getByRole('button', { name: 'Download' }).click();
|
await page.getByRole('button', { name: 'Download' }).click();
|
||||||
@@ -69,4 +69,15 @@ test.describe('Shared Links', () => {
|
|||||||
await page.goto('/share/invalid');
|
await page.goto('/share/invalid');
|
||||||
await page.getByRole('heading', { name: 'Invalid share key' }).waitFor();
|
await page.getByRole('heading', { name: 'Invalid share key' }).waitFor();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('auth on navigation from shared link to timeline', async ({ context, page }) => {
|
||||||
|
await utils.setAuthCookies(context, admin.accessToken);
|
||||||
|
|
||||||
|
await page.goto(`/share/${sharedLink.key}`);
|
||||||
|
await page.getByRole('heading', { name: 'Test Album' }).waitFor();
|
||||||
|
|
||||||
|
await page.locator('a[href="/"]').click();
|
||||||
|
await page.waitForURL('/photos');
|
||||||
|
await page.locator(`[data-asset-id="${asset.id}"]`).waitFor();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Submodule e2e/test-assets updated: 4e9731d3fc...3e057d2f58
@@ -1,6 +1,6 @@
|
|||||||
ARG DEVICE=cpu
|
ARG DEVICE=cpu
|
||||||
|
|
||||||
FROM python:3.11-bookworm@sha256:f7543d9969bdc112dd9819ca642e14433fdacfe857f170f6b803392fc7e451ad AS builder-cpu
|
FROM python:3.11-bookworm@sha256:20c1819af5af3acba0b2b66074a2615e398ceee6842adf03cd7ad5f8d0ee3daf AS builder-cpu
|
||||||
|
|
||||||
FROM builder-cpu AS builder-openvino
|
FROM builder-cpu AS builder-openvino
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@ RUN python3 -m venv /opt/venv
|
|||||||
COPY poetry.lock pyproject.toml ./
|
COPY poetry.lock pyproject.toml ./
|
||||||
RUN poetry install --sync --no-interaction --no-ansi --no-root --with ${DEVICE} --without dev
|
RUN poetry install --sync --no-interaction --no-ansi --no-root --with ${DEVICE} --without dev
|
||||||
|
|
||||||
FROM python:3.11-slim-bookworm@sha256:ad5dadd957a398226996bc4846e522c39f2a77340b531b28aaab85b2d361210b AS prod-cpu
|
FROM python:3.11-slim-bookworm@sha256:ed4e985674f478c90ce879e9aa224fbb772c84e39b4aed5155b9e2280f131039 AS prod-cpu
|
||||||
|
|
||||||
FROM prod-cpu AS prod-openvino
|
FROM prod-cpu AS prod-openvino
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
FROM mambaorg/micromamba:bookworm-slim@sha256:475730daef12ff9c0733e70092aeeefdf4c373a584c952dac3f7bdb739601990 AS builder
|
FROM mambaorg/micromamba:bookworm-slim@sha256:29174348bd09352e5f1b1f6756cf1d00021487b8340fae040e91e4f98e954ce5 AS builder
|
||||||
|
|
||||||
ENV TRANSFORMERS_CACHE=/cache \
|
ENV TRANSFORMERS_CACHE=/cache \
|
||||||
PYTHONDONTWRITEBYTECODE=1 \
|
PYTHONDONTWRITEBYTECODE=1 \
|
||||||
|
|||||||
123
machine-learning/poetry.lock
generated
123
machine-learning/poetry.lock
generated
@@ -680,13 +680,13 @@ test = ["pytest (>=6)"]
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fastapi-slim"
|
name = "fastapi-slim"
|
||||||
version = "0.112.1"
|
version = "0.112.2"
|
||||||
description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production"
|
description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8"
|
python-versions = ">=3.8"
|
||||||
files = [
|
files = [
|
||||||
{file = "fastapi_slim-0.112.1-py3-none-any.whl", hash = "sha256:cc227cf9402d0ba54a24f80eb205c33bcb25d3ea18d53fdac3fd76ea5af8e76d"},
|
{file = "fastapi_slim-0.112.2-py3-none-any.whl", hash = "sha256:c023f74768f187af142c2fe5ff9e4ca3c4c1940bbde7df008cb283532422a23f"},
|
||||||
{file = "fastapi_slim-0.112.1.tar.gz", hash = "sha256:876ebd24e72273986709db2d469b75dc18f04c3ab9140ffd78b29d7785d26687"},
|
{file = "fastapi_slim-0.112.2.tar.gz", hash = "sha256:75b8eb0c6ee05a20270da7a527ac7ad53b83414602f42b68f7027484dab3aedb"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
@@ -695,8 +695,8 @@ starlette = ">=0.37.2,<0.39.0"
|
|||||||
typing-extensions = ">=4.8.0"
|
typing-extensions = ">=4.8.0"
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
all = ["email_validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.7)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"]
|
all = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.7)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"]
|
||||||
standard = ["email_validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "jinja2 (>=2.11.2)", "python-multipart (>=0.0.7)", "uvicorn[standard] (>=0.12.0)"]
|
standard = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "jinja2 (>=2.11.2)", "python-multipart (>=0.0.7)", "uvicorn[standard] (>=0.12.0)"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "filelock"
|
name = "filelock"
|
||||||
@@ -1212,13 +1212,13 @@ test = ["Cython (>=0.29.24,<0.30.0)"]
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "httpx"
|
name = "httpx"
|
||||||
version = "0.27.0"
|
version = "0.27.2"
|
||||||
description = "The next generation HTTP client."
|
description = "The next generation HTTP client."
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8"
|
python-versions = ">=3.8"
|
||||||
files = [
|
files = [
|
||||||
{file = "httpx-0.27.0-py3-none-any.whl", hash = "sha256:71d5465162c13681bff01ad59b2cc68dd838ea1f10e51574bac27103f00c91a5"},
|
{file = "httpx-0.27.2-py3-none-any.whl", hash = "sha256:7bb2708e112d8fdd7829cd4243970f0c223274051cb35ee80c03301ee29a3df0"},
|
||||||
{file = "httpx-0.27.0.tar.gz", hash = "sha256:a0cb88a46f32dc874e04ee956e4c2764aba2aa228f650b06788ba6bda2962ab5"},
|
{file = "httpx-0.27.2.tar.gz", hash = "sha256:f7c2be1d2f3c3c3160d441802406b206c2b76f5947b11115e6df10c6c65e66c2"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
@@ -1233,6 +1233,7 @@ brotli = ["brotli", "brotlicffi"]
|
|||||||
cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"]
|
cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"]
|
||||||
http2 = ["h2 (>=3,<5)"]
|
http2 = ["h2 (>=3,<5)"]
|
||||||
socks = ["socksio (==1.*)"]
|
socks = ["socksio (==1.*)"]
|
||||||
|
zstd = ["zstandard (>=0.18.0)"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "huggingface-hub"
|
name = "huggingface-hub"
|
||||||
@@ -1530,13 +1531,13 @@ test = ["pytest (>=7.4)", "pytest-cov (>=4.1)"]
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "locust"
|
name = "locust"
|
||||||
version = "2.31.3"
|
version = "2.31.5"
|
||||||
description = "Developer-friendly load testing framework"
|
description = "Developer-friendly load testing framework"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.9"
|
python-versions = ">=3.9"
|
||||||
files = [
|
files = [
|
||||||
{file = "locust-2.31.3-py3-none-any.whl", hash = "sha256:03122e007519b371a5a553d578af502826755de83551d79ea8a412ea1c660115"},
|
{file = "locust-2.31.5-py3-none-any.whl", hash = "sha256:2904ff6307d54d3202c9ebd776f9170214f6dfbe4059504dad9e3ffaca03f600"},
|
||||||
{file = "locust-2.31.3.tar.gz", hash = "sha256:25f4603f24afa11ef1ee1f26b1c86a232eb9a1140be30b2a4642c12d7a7af8ae"},
|
{file = "locust-2.31.5.tar.gz", hash = "sha256:14b2fa6f95bf248668e6dc92d100a44f06c5dcb1c26f88a5442bcaaee18faceb"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
@@ -1794,38 +1795,38 @@ files = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "mypy"
|
name = "mypy"
|
||||||
version = "1.11.1"
|
version = "1.11.2"
|
||||||
description = "Optional static typing for Python"
|
description = "Optional static typing for Python"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8"
|
python-versions = ">=3.8"
|
||||||
files = [
|
files = [
|
||||||
{file = "mypy-1.11.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a32fc80b63de4b5b3e65f4be82b4cfa362a46702672aa6a0f443b4689af7008c"},
|
{file = "mypy-1.11.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d42a6dd818ffce7be66cce644f1dff482f1d97c53ca70908dff0b9ddc120b77a"},
|
||||||
{file = "mypy-1.11.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c1952f5ea8a5a959b05ed5f16452fddadbaae48b5d39235ab4c3fc444d5fd411"},
|
{file = "mypy-1.11.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:801780c56d1cdb896eacd5619a83e427ce436d86a3bdf9112527f24a66618fef"},
|
||||||
{file = "mypy-1.11.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e1e30dc3bfa4e157e53c1d17a0dad20f89dc433393e7702b813c10e200843b03"},
|
{file = "mypy-1.11.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41ea707d036a5307ac674ea172875f40c9d55c5394f888b168033177fce47383"},
|
||||||
{file = "mypy-1.11.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2c63350af88f43a66d3dfeeeb8d77af34a4f07d760b9eb3a8697f0386c7590b4"},
|
{file = "mypy-1.11.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6e658bd2d20565ea86da7d91331b0eed6d2eee22dc031579e6297f3e12c758c8"},
|
||||||
{file = "mypy-1.11.1-cp310-cp310-win_amd64.whl", hash = "sha256:a831671bad47186603872a3abc19634f3011d7f83b083762c942442d51c58d58"},
|
{file = "mypy-1.11.2-cp310-cp310-win_amd64.whl", hash = "sha256:478db5f5036817fe45adb7332d927daa62417159d49783041338921dcf646fc7"},
|
||||||
{file = "mypy-1.11.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7b6343d338390bb946d449677726edf60102a1c96079b4f002dedff375953fc5"},
|
{file = "mypy-1.11.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:75746e06d5fa1e91bfd5432448d00d34593b52e7e91a187d981d08d1f33d4385"},
|
||||||
{file = "mypy-1.11.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e4fe9f4e5e521b458d8feb52547f4bade7ef8c93238dfb5bbc790d9ff2d770ca"},
|
{file = "mypy-1.11.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a976775ab2256aadc6add633d44f100a2517d2388906ec4f13231fafbb0eccca"},
|
||||||
{file = "mypy-1.11.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:886c9dbecc87b9516eff294541bf7f3655722bf22bb898ee06985cd7269898de"},
|
{file = "mypy-1.11.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cd953f221ac1379050a8a646585a29574488974f79d8082cedef62744f0a0104"},
|
||||||
{file = "mypy-1.11.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fca4a60e1dd9fd0193ae0067eaeeb962f2d79e0d9f0f66223a0682f26ffcc809"},
|
{file = "mypy-1.11.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:57555a7715c0a34421013144a33d280e73c08df70f3a18a552938587ce9274f4"},
|
||||||
{file = "mypy-1.11.1-cp311-cp311-win_amd64.whl", hash = "sha256:0bd53faf56de9643336aeea1c925012837432b5faf1701ccca7fde70166ccf72"},
|
{file = "mypy-1.11.2-cp311-cp311-win_amd64.whl", hash = "sha256:36383a4fcbad95f2657642a07ba22ff797de26277158f1cc7bd234821468b1b6"},
|
||||||
{file = "mypy-1.11.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f39918a50f74dc5969807dcfaecafa804fa7f90c9d60506835036cc1bc891dc8"},
|
{file = "mypy-1.11.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e8960dbbbf36906c5c0b7f4fbf2f0c7ffb20f4898e6a879fcf56a41a08b0d318"},
|
||||||
{file = "mypy-1.11.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0bc71d1fb27a428139dd78621953effe0d208aed9857cb08d002280b0422003a"},
|
{file = "mypy-1.11.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:06d26c277962f3fb50e13044674aa10553981ae514288cb7d0a738f495550b36"},
|
||||||
{file = "mypy-1.11.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b868d3bcff720dd7217c383474008ddabaf048fad8d78ed948bb4b624870a417"},
|
{file = "mypy-1.11.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6e7184632d89d677973a14d00ae4d03214c8bc301ceefcdaf5c474866814c987"},
|
||||||
{file = "mypy-1.11.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a707ec1527ffcdd1c784d0924bf5cb15cd7f22683b919668a04d2b9c34549d2e"},
|
{file = "mypy-1.11.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3a66169b92452f72117e2da3a576087025449018afc2d8e9bfe5ffab865709ca"},
|
||||||
{file = "mypy-1.11.1-cp312-cp312-win_amd64.whl", hash = "sha256:64f4a90e3ea07f590c5bcf9029035cf0efeae5ba8be511a8caada1a4893f5525"},
|
{file = "mypy-1.11.2-cp312-cp312-win_amd64.whl", hash = "sha256:969ea3ef09617aff826885a22ece0ddef69d95852cdad2f60c8bb06bf1f71f70"},
|
||||||
{file = "mypy-1.11.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:749fd3213916f1751fff995fccf20c6195cae941dc968f3aaadf9bb4e430e5a2"},
|
{file = "mypy-1.11.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:37c7fa6121c1cdfcaac97ce3d3b5588e847aa79b580c1e922bb5d5d2902df19b"},
|
||||||
{file = "mypy-1.11.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b639dce63a0b19085213ec5fdd8cffd1d81988f47a2dec7100e93564f3e8fb3b"},
|
{file = "mypy-1.11.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4a8a53bc3ffbd161b5b2a4fff2f0f1e23a33b0168f1c0778ec70e1a3d66deb86"},
|
||||||
{file = "mypy-1.11.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c956b49c5d865394d62941b109728c5c596a415e9c5b2be663dd26a1ff07bc0"},
|
{file = "mypy-1.11.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ff93107f01968ed834f4256bc1fc4475e2fecf6c661260066a985b52741ddce"},
|
||||||
{file = "mypy-1.11.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45df906e8b6804ef4b666af29a87ad9f5921aad091c79cc38e12198e220beabd"},
|
{file = "mypy-1.11.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:edb91dded4df17eae4537668b23f0ff6baf3707683734b6a818d5b9d0c0c31a1"},
|
||||||
{file = "mypy-1.11.1-cp38-cp38-win_amd64.whl", hash = "sha256:d44be7551689d9d47b7abc27c71257adfdb53f03880841a5db15ddb22dc63edb"},
|
{file = "mypy-1.11.2-cp38-cp38-win_amd64.whl", hash = "sha256:ee23de8530d99b6db0573c4ef4bd8f39a2a6f9b60655bf7a1357e585a3486f2b"},
|
||||||
{file = "mypy-1.11.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2684d3f693073ab89d76da8e3921883019ea8a3ec20fa5d8ecca6a2db4c54bbe"},
|
{file = "mypy-1.11.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:801ca29f43d5acce85f8e999b1e431fb479cb02d0e11deb7d2abb56bdaf24fd6"},
|
||||||
{file = "mypy-1.11.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:79c07eb282cb457473add5052b63925e5cc97dfab9812ee65a7c7ab5e3cb551c"},
|
{file = "mypy-1.11.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:af8d155170fcf87a2afb55b35dc1a0ac21df4431e7d96717621962e4b9192e70"},
|
||||||
{file = "mypy-1.11.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11965c2f571ded6239977b14deebd3f4c3abd9a92398712d6da3a772974fad69"},
|
{file = "mypy-1.11.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f7821776e5c4286b6a13138cc935e2e9b6fde05e081bdebf5cdb2bb97c9df81d"},
|
||||||
{file = "mypy-1.11.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a2b43895a0f8154df6519706d9bca8280cda52d3d9d1514b2d9c3e26792a0b74"},
|
{file = "mypy-1.11.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:539c570477a96a4e6fb718b8d5c3e0c0eba1f485df13f86d2970c91f0673148d"},
|
||||||
{file = "mypy-1.11.1-cp39-cp39-win_amd64.whl", hash = "sha256:1a81cf05975fd61aec5ae16501a091cfb9f605dc3e3c878c0da32f250b74760b"},
|
{file = "mypy-1.11.2-cp39-cp39-win_amd64.whl", hash = "sha256:3f14cd3d386ac4d05c5a39a51b84387403dadbd936e17cb35882134d4f8f0d24"},
|
||||||
{file = "mypy-1.11.1-py3-none-any.whl", hash = "sha256:0624bdb940255d2dd24e829d99a13cfeb72e4e9031f9492148f410ed30bcab54"},
|
{file = "mypy-1.11.2-py3-none-any.whl", hash = "sha256:b499bc07dbdcd3de92b0a8b29fdf592c111276f6a12fe29c30f6c417dd546d12"},
|
||||||
{file = "mypy-1.11.1.tar.gz", hash = "sha256:f404a0b069709f18bbdb702eb3dcfe51910602995de00bd39cea3050b5772d08"},
|
{file = "mypy-1.11.2.tar.gz", hash = "sha256:7f9993ad3e0ffdc95c2a14b66dee63729f021968bff8ad911867579c65d13a79"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
@@ -2815,13 +2816,13 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rich"
|
name = "rich"
|
||||||
version = "13.7.1"
|
version = "13.8.0"
|
||||||
description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal"
|
description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7.0"
|
python-versions = ">=3.7.0"
|
||||||
files = [
|
files = [
|
||||||
{file = "rich-13.7.1-py3-none-any.whl", hash = "sha256:4edbae314f59eb482f54e9e30bf00d33350aaa94f4bfcd4e9e3110e64d0d7222"},
|
{file = "rich-13.8.0-py3-none-any.whl", hash = "sha256:2e85306a063b9492dffc86278197a60cbece75bcb766022f3436f567cae11bdc"},
|
||||||
{file = "rich-13.7.1.tar.gz", hash = "sha256:9be308cb1fe2f1f57d67ce99e95af38a1e2bc71ad9813b0e247cf7ffbcc3a432"},
|
{file = "rich-13.8.0.tar.gz", hash = "sha256:a5ac1f1cd448ade0d59cc3356f7db7a7ccda2c8cbae9c7a90c28ff463d3e91f4"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
@@ -2833,29 +2834,29 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"]
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ruff"
|
name = "ruff"
|
||||||
version = "0.6.2"
|
version = "0.6.3"
|
||||||
description = "An extremely fast Python linter and code formatter, written in Rust."
|
description = "An extremely fast Python linter and code formatter, written in Rust."
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
{file = "ruff-0.6.2-py3-none-linux_armv6l.whl", hash = "sha256:5c8cbc6252deb3ea840ad6a20b0f8583caab0c5ef4f9cca21adc5a92b8f79f3c"},
|
{file = "ruff-0.6.3-py3-none-linux_armv6l.whl", hash = "sha256:97f58fda4e309382ad30ede7f30e2791d70dd29ea17f41970119f55bdb7a45c3"},
|
||||||
{file = "ruff-0.6.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:17002fe241e76544448a8e1e6118abecbe8cd10cf68fde635dad480dba594570"},
|
{file = "ruff-0.6.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:3b061e49b5cf3a297b4d1c27ac5587954ccb4ff601160d3d6b2f70b1622194dc"},
|
||||||
{file = "ruff-0.6.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:3dbeac76ed13456f8158b8f4fe087bf87882e645c8e8b606dd17b0b66c2c1158"},
|
{file = "ruff-0.6.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:34e2824a13bb8c668c71c1760a6ac7d795ccbd8d38ff4a0d8471fdb15de910b1"},
|
||||||
{file = "ruff-0.6.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:094600ee88cda325988d3f54e3588c46de5c18dae09d683ace278b11f9d4d534"},
|
{file = "ruff-0.6.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bddfbb8d63c460f4b4128b6a506e7052bad4d6f3ff607ebbb41b0aa19c2770d1"},
|
||||||
{file = "ruff-0.6.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:316d418fe258c036ba05fbf7dfc1f7d3d4096db63431546163b472285668132b"},
|
{file = "ruff-0.6.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ced3eeb44df75353e08ab3b6a9e113b5f3f996bea48d4f7c027bc528ba87b672"},
|
||||||
{file = "ruff-0.6.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d72b8b3abf8a2d51b7b9944a41307d2f442558ccb3859bbd87e6ae9be1694a5d"},
|
{file = "ruff-0.6.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:47021dff5445d549be954eb275156dfd7c37222acc1e8014311badcb9b4ec8c1"},
|
||||||
{file = "ruff-0.6.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:2aed7e243be68487aa8982e91c6e260982d00da3f38955873aecd5a9204b1d66"},
|
{file = "ruff-0.6.3-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:7d7bd20dc07cebd68cc8bc7b3f5ada6d637f42d947c85264f94b0d1cd9d87384"},
|
||||||
{file = "ruff-0.6.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d371f7fc9cec83497fe7cf5eaf5b76e22a8efce463de5f775a1826197feb9df8"},
|
{file = "ruff-0.6.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:500f166d03fc6d0e61c8e40a3ff853fa8a43d938f5d14c183c612df1b0d6c58a"},
|
||||||
{file = "ruff-0.6.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8f310d63af08f583363dfb844ba8f9417b558199c58a5999215082036d795a1"},
|
{file = "ruff-0.6.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:42844ff678f9b976366b262fa2d1d1a3fe76f6e145bd92c84e27d172e3c34500"},
|
||||||
{file = "ruff-0.6.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7db6880c53c56addb8638fe444818183385ec85eeada1d48fc5abe045301b2f1"},
|
{file = "ruff-0.6.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70452a10eb2d66549de8e75f89ae82462159855e983ddff91bc0bce6511d0470"},
|
||||||
{file = "ruff-0.6.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:1175d39faadd9a50718f478d23bfc1d4da5743f1ab56af81a2b6caf0a2394f23"},
|
{file = "ruff-0.6.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:65a533235ed55f767d1fc62193a21cbf9e3329cf26d427b800fdeacfb77d296f"},
|
||||||
{file = "ruff-0.6.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:5b939f9c86d51635fe486585389f54582f0d65b8238e08c327c1534844b3bb9a"},
|
{file = "ruff-0.6.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d2e2c23cef30dc3cbe9cc5d04f2899e7f5e478c40d2e0a633513ad081f7361b5"},
|
||||||
{file = "ruff-0.6.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:d0d62ca91219f906caf9b187dea50d17353f15ec9bb15aae4a606cd697b49b4c"},
|
{file = "ruff-0.6.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:d8a136aa7d228975a6aee3dd8bea9b28e2b43e9444aa678fb62aeb1956ff2351"},
|
||||||
{file = "ruff-0.6.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:7438a7288f9d67ed3c8ce4d059e67f7ed65e9fe3aa2ab6f5b4b3610e57e3cb56"},
|
{file = "ruff-0.6.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:f92fe93bc72e262b7b3f2bba9879897e2d58a989b4714ba6a5a7273e842ad2f8"},
|
||||||
{file = "ruff-0.6.2-py3-none-win32.whl", hash = "sha256:279d5f7d86696df5f9549b56b9b6a7f6c72961b619022b5b7999b15db392a4da"},
|
{file = "ruff-0.6.3-py3-none-win32.whl", hash = "sha256:7a62d3b5b0d7f9143d94893f8ba43aa5a5c51a0ffc4a401aa97a81ed76930521"},
|
||||||
{file = "ruff-0.6.2-py3-none-win_amd64.whl", hash = "sha256:d9f3469c7dd43cd22eb1c3fc16926fb8258d50cb1b216658a07be95dd117b0f2"},
|
{file = "ruff-0.6.3-py3-none-win_amd64.whl", hash = "sha256:746af39356fee2b89aada06c7376e1aa274a23493d7016059c3a72e3b296befb"},
|
||||||
{file = "ruff-0.6.2-py3-none-win_arm64.whl", hash = "sha256:f28fcd2cd0e02bdf739297516d5643a945cc7caf09bd9bcb4d932540a5ea4fa9"},
|
{file = "ruff-0.6.3-py3-none-win_arm64.whl", hash = "sha256:14a9528a8b70ccc7a847637c29e56fd1f9183a9db743bbc5b8e0c4ad60592a82"},
|
||||||
{file = "ruff-0.6.2.tar.gz", hash = "sha256:239ee6beb9e91feb8e0ec384204a763f36cb53fb895a1a364618c6abb076b3be"},
|
{file = "ruff-0.6.3.tar.gz", hash = "sha256:183b99e9edd1ef63be34a3b51fee0a9f4ab95add123dbf89a71f7b1f0c991983"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[tool.poetry]
|
[tool.poetry]
|
||||||
name = "machine-learning"
|
name = "machine-learning"
|
||||||
version = "1.113.1"
|
version = "1.114.0"
|
||||||
description = ""
|
description = ""
|
||||||
authors = ["Hau Tran <alex.tran1502@gmail.com>"]
|
authors = ["Hau Tran <alex.tran1502@gmail.com>"]
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
|
|||||||
@@ -118,7 +118,9 @@ class BackupWorker(ctx: Context, params: WorkerParameters) : ListenableWorker(ct
|
|||||||
// called when the system has to stop this worker because constraints are
|
// called when the system has to stop this worker because constraints are
|
||||||
// no longer met or the system needs resources for more important tasks
|
// no longer met or the system needs resources for more important tasks
|
||||||
Handler(Looper.getMainLooper()).postAtFrontOfQueue {
|
Handler(Looper.getMainLooper()).postAtFrontOfQueue {
|
||||||
backgroundChannel.invokeMethod("systemStop", null)
|
if (::backgroundChannel.isInitialized) {
|
||||||
|
backgroundChannel.invokeMethod("systemStop", null)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
waitOnSetForegroundAsync()
|
waitOnSetForegroundAsync()
|
||||||
// cannot await/get(block) on resolvableFuture as its already cancelled (would throw CancellationException)
|
// cannot await/get(block) on resolvableFuture as its already cancelled (would throw CancellationException)
|
||||||
|
|||||||
@@ -35,8 +35,8 @@ platform :android do
|
|||||||
task: 'bundle',
|
task: 'bundle',
|
||||||
build_type: 'Release',
|
build_type: 'Release',
|
||||||
properties: {
|
properties: {
|
||||||
"android.injected.version.code" => 157,
|
"android.injected.version.code" => 158,
|
||||||
"android.injected.version.name" => "1.113.1",
|
"android.injected.version.name" => "1.114.0",
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
upload_to_play_store(skip_upload_apk: true, skip_upload_images: true, skip_upload_screenshots: true, aab: '../build/app/outputs/bundle/release/app-release.aab')
|
upload_to_play_store(skip_upload_apk: true, skip_upload_images: true, skip_upload_screenshots: true, aab: '../build/app/outputs/bundle/release/app-release.aab')
|
||||||
|
|||||||
@@ -210,6 +210,10 @@
|
|||||||
"delete_shared_link_dialog_title": "حذف الرابط المشترك",
|
"delete_shared_link_dialog_title": "حذف الرابط المشترك",
|
||||||
"description_input_hint_text": "اضف وصفا...",
|
"description_input_hint_text": "اضف وصفا...",
|
||||||
"description_input_submit_error": "خطأ تحديث الوصف ، تحقق من السجل لمزيد من التفاصيل",
|
"description_input_submit_error": "خطأ تحديث الوصف ، تحقق من السجل لمزيد من التفاصيل",
|
||||||
|
"download_error": "Download Error",
|
||||||
|
"download_started": "Download started",
|
||||||
|
"download_sucess": "Download success",
|
||||||
|
"download_sucess_android": "The media has been downloaded to DCIM/Immich",
|
||||||
"edit_date_time_dialog_date_time": "التاريخ و الوقت",
|
"edit_date_time_dialog_date_time": "التاريخ و الوقت",
|
||||||
"edit_date_time_dialog_timezone": "وحدة زمنية",
|
"edit_date_time_dialog_timezone": "وحدة زمنية",
|
||||||
"edit_image_title": "Edit",
|
"edit_image_title": "Edit",
|
||||||
|
|||||||
@@ -63,7 +63,7 @@
|
|||||||
"assets_trashed_from_server": "{} položek vyhozeno do koše na Immich serveru",
|
"assets_trashed_from_server": "{} položek vyhozeno do koše na Immich serveru",
|
||||||
"asset_viewer_settings_title": "Prohlížeč",
|
"asset_viewer_settings_title": "Prohlížeč",
|
||||||
"backup_album_selection_page_albums_device": "Alba v zařízení ({})",
|
"backup_album_selection_page_albums_device": "Alba v zařízení ({})",
|
||||||
"backup_album_selection_page_albums_tap": "Klepnutím na položku ji zahrnete, dvojím klepnutím ji vyloučíte",
|
"backup_album_selection_page_albums_tap": "Klepnutím na položku ji zahrnete, opětovným klepnutím ji vyloučíte",
|
||||||
"backup_album_selection_page_assets_scatter": "Položky mohou být roztroušeny ve více albech. To umožňuje zahrnout nebo vyloučit alba během procesu zálohování.",
|
"backup_album_selection_page_assets_scatter": "Položky mohou být roztroušeny ve více albech. To umožňuje zahrnout nebo vyloučit alba během procesu zálohování.",
|
||||||
"backup_album_selection_page_select_albums": "Vybraná alba",
|
"backup_album_selection_page_select_albums": "Vybraná alba",
|
||||||
"backup_album_selection_page_selection_info": "Informace o výběru",
|
"backup_album_selection_page_selection_info": "Informace o výběru",
|
||||||
@@ -210,6 +210,10 @@
|
|||||||
"delete_shared_link_dialog_title": "Odstranit sdílený odkaz",
|
"delete_shared_link_dialog_title": "Odstranit sdílený odkaz",
|
||||||
"description_input_hint_text": "Přidat popis...",
|
"description_input_hint_text": "Přidat popis...",
|
||||||
"description_input_submit_error": "Chyba aktualizace popisu, další podrobnosti najdete v logu",
|
"description_input_submit_error": "Chyba aktualizace popisu, další podrobnosti najdete v logu",
|
||||||
|
"download_error": "Download Error",
|
||||||
|
"download_started": "Download started",
|
||||||
|
"download_sucess": "Download success",
|
||||||
|
"download_sucess_android": "The media has been downloaded to DCIM/Immich",
|
||||||
"edit_date_time_dialog_date_time": "Datum a čas",
|
"edit_date_time_dialog_date_time": "Datum a čas",
|
||||||
"edit_date_time_dialog_timezone": "Časové pásmo",
|
"edit_date_time_dialog_timezone": "Časové pásmo",
|
||||||
"edit_image_title": "Upravit",
|
"edit_image_title": "Upravit",
|
||||||
|
|||||||
@@ -210,6 +210,10 @@
|
|||||||
"delete_shared_link_dialog_title": "Slet delt link",
|
"delete_shared_link_dialog_title": "Slet delt link",
|
||||||
"description_input_hint_text": "Tilføj en beskrivelse...",
|
"description_input_hint_text": "Tilføj en beskrivelse...",
|
||||||
"description_input_submit_error": "Fejl med at opdatere beskrivelsen. Tjek loggen for flere detaljer",
|
"description_input_submit_error": "Fejl med at opdatere beskrivelsen. Tjek loggen for flere detaljer",
|
||||||
|
"download_error": "Download Error",
|
||||||
|
"download_started": "Download started",
|
||||||
|
"download_sucess": "Download success",
|
||||||
|
"download_sucess_android": "The media has been downloaded to DCIM/Immich",
|
||||||
"edit_date_time_dialog_date_time": "Dato og klokkeslæt",
|
"edit_date_time_dialog_date_time": "Dato og klokkeslæt",
|
||||||
"edit_date_time_dialog_timezone": "Tidszone",
|
"edit_date_time_dialog_timezone": "Tidszone",
|
||||||
"edit_image_title": "Rediger",
|
"edit_image_title": "Rediger",
|
||||||
|
|||||||
@@ -210,6 +210,10 @@
|
|||||||
"delete_shared_link_dialog_title": "Geteilten Link löschen",
|
"delete_shared_link_dialog_title": "Geteilten Link löschen",
|
||||||
"description_input_hint_text": "Beschreibung hinzufügen...",
|
"description_input_hint_text": "Beschreibung hinzufügen...",
|
||||||
"description_input_submit_error": "Beschreibung konnte nicht geändert werden, bitte im Log für mehr Details nachsehen.",
|
"description_input_submit_error": "Beschreibung konnte nicht geändert werden, bitte im Log für mehr Details nachsehen.",
|
||||||
|
"download_error": "Download Error",
|
||||||
|
"download_started": "Download started",
|
||||||
|
"download_sucess": "Download success",
|
||||||
|
"download_sucess_android": "The media has been downloaded to DCIM/Immich",
|
||||||
"edit_date_time_dialog_date_time": "Datum und Uhrzeit",
|
"edit_date_time_dialog_date_time": "Datum und Uhrzeit",
|
||||||
"edit_date_time_dialog_timezone": "Zeitzone",
|
"edit_date_time_dialog_timezone": "Zeitzone",
|
||||||
"edit_image_title": "Bearbeiten",
|
"edit_image_title": "Bearbeiten",
|
||||||
|
|||||||
@@ -210,6 +210,10 @@
|
|||||||
"delete_shared_link_dialog_title": "Διαγραφή Κοινοποιημένου Συνδέσμου",
|
"delete_shared_link_dialog_title": "Διαγραφή Κοινοποιημένου Συνδέσμου",
|
||||||
"description_input_hint_text": "Προσθήκη περιγραφής...",
|
"description_input_hint_text": "Προσθήκη περιγραφής...",
|
||||||
"description_input_submit_error": "Σφάλμα κατά την ενημέρωση της περιγραφής, ελέγξτε το αρχείο καταγραφής για περισσότερες λεπτομέρειες",
|
"description_input_submit_error": "Σφάλμα κατά την ενημέρωση της περιγραφής, ελέγξτε το αρχείο καταγραφής για περισσότερες λεπτομέρειες",
|
||||||
|
"download_error": "Download Error",
|
||||||
|
"download_started": "Download started",
|
||||||
|
"download_sucess": "Download success",
|
||||||
|
"download_sucess_android": "The media has been downloaded to DCIM/Immich",
|
||||||
"edit_date_time_dialog_date_time": "Ημερομηνία και Ώρα",
|
"edit_date_time_dialog_date_time": "Ημερομηνία και Ώρα",
|
||||||
"edit_date_time_dialog_timezone": "Ζώνη ώρας",
|
"edit_date_time_dialog_timezone": "Ζώνη ώρας",
|
||||||
"edit_image_title": "Edit",
|
"edit_image_title": "Edit",
|
||||||
|
|||||||
@@ -210,6 +210,10 @@
|
|||||||
"delete_shared_link_dialog_title": "Delete Shared Link",
|
"delete_shared_link_dialog_title": "Delete Shared Link",
|
||||||
"description_input_hint_text": "Add description...",
|
"description_input_hint_text": "Add description...",
|
||||||
"description_input_submit_error": "Error updating description, check the log for more details",
|
"description_input_submit_error": "Error updating description, check the log for more details",
|
||||||
|
"download_error": "Download Error",
|
||||||
|
"download_started": "Download started",
|
||||||
|
"download_sucess": "Download success",
|
||||||
|
"download_sucess_android": "The media has been downloaded to DCIM/Immich",
|
||||||
"edit_date_time_dialog_date_time": "Date and Time",
|
"edit_date_time_dialog_date_time": "Date and Time",
|
||||||
"edit_date_time_dialog_timezone": "Timezone",
|
"edit_date_time_dialog_timezone": "Timezone",
|
||||||
"edit_image_title": "Edit",
|
"edit_image_title": "Edit",
|
||||||
|
|||||||
@@ -173,8 +173,8 @@
|
|||||||
"control_bottom_app_bar_delete": "Eliminar",
|
"control_bottom_app_bar_delete": "Eliminar",
|
||||||
"control_bottom_app_bar_delete_from_immich": "Borrar de Immich",
|
"control_bottom_app_bar_delete_from_immich": "Borrar de Immich",
|
||||||
"control_bottom_app_bar_delete_from_local": "Borrar del dispositivo",
|
"control_bottom_app_bar_delete_from_local": "Borrar del dispositivo",
|
||||||
"control_bottom_app_bar_download": "Download",
|
"control_bottom_app_bar_download": "Descargar",
|
||||||
"control_bottom_app_bar_edit": "Edit",
|
"control_bottom_app_bar_edit": "Editar",
|
||||||
"control_bottom_app_bar_edit_location": "Editar ubicación",
|
"control_bottom_app_bar_edit_location": "Editar ubicación",
|
||||||
"control_bottom_app_bar_edit_time": "Editar fecha y hora",
|
"control_bottom_app_bar_edit_time": "Editar fecha y hora",
|
||||||
"control_bottom_app_bar_favorite": "Favorito",
|
"control_bottom_app_bar_favorite": "Favorito",
|
||||||
@@ -190,7 +190,7 @@
|
|||||||
"create_shared_album_page_share": "Compartir",
|
"create_shared_album_page_share": "Compartir",
|
||||||
"create_shared_album_page_share_add_assets": "AGREGAR ELEMENTOS",
|
"create_shared_album_page_share_add_assets": "AGREGAR ELEMENTOS",
|
||||||
"create_shared_album_page_share_select_photos": "Seleccionar Fotos",
|
"create_shared_album_page_share_select_photos": "Seleccionar Fotos",
|
||||||
"crop": "Crop",
|
"crop": "Recortar",
|
||||||
"curated_location_page_title": "Lugares",
|
"curated_location_page_title": "Lugares",
|
||||||
"curated_object_page_title": "Objetos",
|
"curated_object_page_title": "Objetos",
|
||||||
"daily_title_text_date": "E dd, MMM",
|
"daily_title_text_date": "E dd, MMM",
|
||||||
@@ -210,9 +210,13 @@
|
|||||||
"delete_shared_link_dialog_title": "Eliminar enlace compartido",
|
"delete_shared_link_dialog_title": "Eliminar enlace compartido",
|
||||||
"description_input_hint_text": "Agregar descripción...",
|
"description_input_hint_text": "Agregar descripción...",
|
||||||
"description_input_submit_error": "Error al actualizar la descripción, verifica el registro para obtener más detalles",
|
"description_input_submit_error": "Error al actualizar la descripción, verifica el registro para obtener más detalles",
|
||||||
|
"download_error": "Download Error",
|
||||||
|
"download_started": "Download started",
|
||||||
|
"download_sucess": "Download success",
|
||||||
|
"download_sucess_android": "The media has been downloaded to DCIM/Immich",
|
||||||
"edit_date_time_dialog_date_time": "Fecha y Hora",
|
"edit_date_time_dialog_date_time": "Fecha y Hora",
|
||||||
"edit_date_time_dialog_timezone": "Zona horaria",
|
"edit_date_time_dialog_timezone": "Zona horaria",
|
||||||
"edit_image_title": "Edit",
|
"edit_image_title": "Editar",
|
||||||
"edit_location_dialog_title": "Ubicación",
|
"edit_location_dialog_title": "Ubicación",
|
||||||
"error_saving_image": "Error: {}",
|
"error_saving_image": "Error: {}",
|
||||||
"exif_bottom_sheet_description": "Agregar Descripción...",
|
"exif_bottom_sheet_description": "Agregar Descripción...",
|
||||||
@@ -251,13 +255,13 @@
|
|||||||
"home_page_first_time_notice": "Si esta es la primera vez que usas la app, por favor, asegúrate de elegir un álbum de respaldo para que la línea de tiempo pueda cargar fotos y videos en los álbumes.",
|
"home_page_first_time_notice": "Si esta es la primera vez que usas la app, por favor, asegúrate de elegir un álbum de respaldo para que la línea de tiempo pueda cargar fotos y videos en los álbumes.",
|
||||||
"home_page_share_err_local": "No se pueden compartir elementos locales a través de un enlace, omitiendo",
|
"home_page_share_err_local": "No se pueden compartir elementos locales a través de un enlace, omitiendo",
|
||||||
"home_page_upload_err_limit": "Solo se pueden subir 30 elementos simultáneamente, omitiendo",
|
"home_page_upload_err_limit": "Solo se pueden subir 30 elementos simultáneamente, omitiendo",
|
||||||
"image_saved_successfully": "Image saved",
|
"image_saved_successfully": "Imágenes guardas",
|
||||||
"image_viewer_page_state_provider_download_error": "Error de descarga",
|
"image_viewer_page_state_provider_download_error": "Error de descarga",
|
||||||
"image_viewer_page_state_provider_download_started": "Descarga Iniciada",
|
"image_viewer_page_state_provider_download_started": "Descarga Iniciada",
|
||||||
"image_viewer_page_state_provider_download_success": "Descarga exitosa",
|
"image_viewer_page_state_provider_download_success": "Descarga exitosa",
|
||||||
"image_viewer_page_state_provider_share_error": "Error al compartir",
|
"image_viewer_page_state_provider_share_error": "Error al compartir",
|
||||||
"invalid_date": "Invalid date",
|
"invalid_date": "Fecha incorrecta",
|
||||||
"invalid_date_format": "Invalid date format",
|
"invalid_date_format": "Formato de fecha incorrecto",
|
||||||
"library_page_albums": "Álbumes",
|
"library_page_albums": "Álbumes",
|
||||||
"library_page_archive": "Archivo",
|
"library_page_archive": "Archivo",
|
||||||
"library_page_device_albums": "Álbumes en el dispositivo",
|
"library_page_device_albums": "Álbumes en el dispositivo",
|
||||||
@@ -380,27 +384,27 @@
|
|||||||
"profile_drawer_sign_out": "Cerrar Sesión",
|
"profile_drawer_sign_out": "Cerrar Sesión",
|
||||||
"profile_drawer_trash": "Papelera",
|
"profile_drawer_trash": "Papelera",
|
||||||
"recently_added_page_title": "Recién Agregadas",
|
"recently_added_page_title": "Recién Agregadas",
|
||||||
"save_to_gallery": "Save to gallery",
|
"save_to_gallery": "Guardado en la galería",
|
||||||
"scaffold_body_error_occurred": "Ha ocurrido un error",
|
"scaffold_body_error_occurred": "Ha ocurrido un error",
|
||||||
"search_bar_hint": "Busca tus fotos",
|
"search_bar_hint": "Busca tus fotos",
|
||||||
"search_filter_apply": "Aplicar filtros",
|
"search_filter_apply": "Aplicar filtros",
|
||||||
"search_filter_camera": "Camera",
|
"search_filter_camera": "Cámara",
|
||||||
"search_filter_camera_make": "Marca",
|
"search_filter_camera_make": "Marca",
|
||||||
"search_filter_camera_model": "Modelo",
|
"search_filter_camera_model": "Modelo",
|
||||||
"search_filter_camera_title": "Select camera type",
|
"search_filter_camera_title": "Select camera type",
|
||||||
"search_filter_date": "Date",
|
"search_filter_date": "Fecha",
|
||||||
"search_filter_date_interval": "{start} to {end}",
|
"search_filter_date_interval": "{start} al {end}",
|
||||||
"search_filter_date_title": "Select a date range",
|
"search_filter_date_title": "Selecciona un intervalo de fechas",
|
||||||
"search_filter_display_option_archive": "Archivado",
|
"search_filter_display_option_archive": "Archivado",
|
||||||
"search_filter_display_option_favorite": "Favorito",
|
"search_filter_display_option_favorite": "Favorito",
|
||||||
"search_filter_display_option_not_in_album": "No en álbum",
|
"search_filter_display_option_not_in_album": "No en álbum",
|
||||||
"search_filter_display_options": "Display Options",
|
"search_filter_display_options": "Display Options",
|
||||||
"search_filter_display_options_title": "Display options",
|
"search_filter_display_options_title": "Display options",
|
||||||
"search_filter_location": "Location",
|
"search_filter_location": "Ubicación",
|
||||||
"search_filter_location_city": "Ciudad",
|
"search_filter_location_city": "Ciudad",
|
||||||
"search_filter_location_country": "País",
|
"search_filter_location_country": "País",
|
||||||
"search_filter_location_state": "Estado",
|
"search_filter_location_state": "Estado",
|
||||||
"search_filter_location_title": "Select location",
|
"search_filter_location_title": "Seleccionar una ubicación",
|
||||||
"search_filter_media_type": "Media Type",
|
"search_filter_media_type": "Media Type",
|
||||||
"search_filter_media_type_all": "Todos",
|
"search_filter_media_type_all": "Todos",
|
||||||
"search_filter_media_type_image": "Imagen",
|
"search_filter_media_type_image": "Imagen",
|
||||||
@@ -535,7 +539,7 @@
|
|||||||
"sharing_silver_appbar_create_shared_album": "Crear un álbum compartido",
|
"sharing_silver_appbar_create_shared_album": "Crear un álbum compartido",
|
||||||
"sharing_silver_appbar_shared_links": "Enlaces compartidos",
|
"sharing_silver_appbar_shared_links": "Enlaces compartidos",
|
||||||
"sharing_silver_appbar_share_partner": "Compartir con el compañero",
|
"sharing_silver_appbar_share_partner": "Compartir con el compañero",
|
||||||
"sync": "Sync",
|
"sync": "Sincronizar",
|
||||||
"sync_albums": "Sync albums",
|
"sync_albums": "Sync albums",
|
||||||
"sync_albums_manual_subtitle": "Sync all uploaded videos and photos to the selected backup albums",
|
"sync_albums_manual_subtitle": "Sync all uploaded videos and photos to the selected backup albums",
|
||||||
"sync_upload_album_setting_subtitle": "Create and upload your photos and videos to the selected albums on Immich",
|
"sync_upload_album_setting_subtitle": "Create and upload your photos and videos to the selected albums on Immich",
|
||||||
|
|||||||
@@ -210,6 +210,10 @@
|
|||||||
"delete_shared_link_dialog_title": "Eliminar enlace compartido",
|
"delete_shared_link_dialog_title": "Eliminar enlace compartido",
|
||||||
"description_input_hint_text": "Agregar descripción...",
|
"description_input_hint_text": "Agregar descripción...",
|
||||||
"description_input_submit_error": "Error al actualizar la descripción, verifica el registro para obtener más detalles",
|
"description_input_submit_error": "Error al actualizar la descripción, verifica el registro para obtener más detalles",
|
||||||
|
"download_error": "Download Error",
|
||||||
|
"download_started": "Download started",
|
||||||
|
"download_sucess": "Download success",
|
||||||
|
"download_sucess_android": "The media has been downloaded to DCIM/Immich",
|
||||||
"edit_date_time_dialog_date_time": "Date and Time",
|
"edit_date_time_dialog_date_time": "Date and Time",
|
||||||
"edit_date_time_dialog_timezone": "Timezone",
|
"edit_date_time_dialog_timezone": "Timezone",
|
||||||
"edit_image_title": "Edit",
|
"edit_image_title": "Edit",
|
||||||
|
|||||||
@@ -210,6 +210,10 @@
|
|||||||
"delete_shared_link_dialog_title": "Eliminar enlace compartido",
|
"delete_shared_link_dialog_title": "Eliminar enlace compartido",
|
||||||
"description_input_hint_text": "Agregar descripción...",
|
"description_input_hint_text": "Agregar descripción...",
|
||||||
"description_input_submit_error": "Error al actualizar la descripción, verifica el registro para obtener más detalles",
|
"description_input_submit_error": "Error al actualizar la descripción, verifica el registro para obtener más detalles",
|
||||||
|
"download_error": "Download Error",
|
||||||
|
"download_started": "Download started",
|
||||||
|
"download_sucess": "Download success",
|
||||||
|
"download_sucess_android": "The media has been downloaded to DCIM/Immich",
|
||||||
"edit_date_time_dialog_date_time": "Date and Time",
|
"edit_date_time_dialog_date_time": "Date and Time",
|
||||||
"edit_date_time_dialog_timezone": "Timezone",
|
"edit_date_time_dialog_timezone": "Timezone",
|
||||||
"edit_image_title": "Edit",
|
"edit_image_title": "Edit",
|
||||||
|
|||||||
@@ -210,6 +210,10 @@
|
|||||||
"delete_shared_link_dialog_title": "Eliminar enlace compartido",
|
"delete_shared_link_dialog_title": "Eliminar enlace compartido",
|
||||||
"description_input_hint_text": "Agregar descripción...",
|
"description_input_hint_text": "Agregar descripción...",
|
||||||
"description_input_submit_error": "Error al actualizar la descripción, verifica el registro para obtener más detalles",
|
"description_input_submit_error": "Error al actualizar la descripción, verifica el registro para obtener más detalles",
|
||||||
|
"download_error": "Download Error",
|
||||||
|
"download_started": "Download started",
|
||||||
|
"download_sucess": "Download success",
|
||||||
|
"download_sucess_android": "The media has been downloaded to DCIM/Immich",
|
||||||
"edit_date_time_dialog_date_time": "Date and Time",
|
"edit_date_time_dialog_date_time": "Date and Time",
|
||||||
"edit_date_time_dialog_timezone": "Timezone",
|
"edit_date_time_dialog_timezone": "Timezone",
|
||||||
"edit_image_title": "Edit",
|
"edit_image_title": "Edit",
|
||||||
|
|||||||
@@ -210,6 +210,10 @@
|
|||||||
"delete_shared_link_dialog_title": "Poista jaettu linkki",
|
"delete_shared_link_dialog_title": "Poista jaettu linkki",
|
||||||
"description_input_hint_text": "Lisää kuvaus...",
|
"description_input_hint_text": "Lisää kuvaus...",
|
||||||
"description_input_submit_error": "Virhe kuvauksen päivittämisessä, tarkista lisätiedot lokista",
|
"description_input_submit_error": "Virhe kuvauksen päivittämisessä, tarkista lisätiedot lokista",
|
||||||
|
"download_error": "Download Error",
|
||||||
|
"download_started": "Download started",
|
||||||
|
"download_sucess": "Download success",
|
||||||
|
"download_sucess_android": "The media has been downloaded to DCIM/Immich",
|
||||||
"edit_date_time_dialog_date_time": "Päivämäärä ja aika",
|
"edit_date_time_dialog_date_time": "Päivämäärä ja aika",
|
||||||
"edit_date_time_dialog_timezone": "Aikavyöhyke",
|
"edit_date_time_dialog_timezone": "Aikavyöhyke",
|
||||||
"edit_image_title": "Edit",
|
"edit_image_title": "Edit",
|
||||||
|
|||||||
@@ -210,6 +210,10 @@
|
|||||||
"delete_shared_link_dialog_title": "Supprimer le lien partagé",
|
"delete_shared_link_dialog_title": "Supprimer le lien partagé",
|
||||||
"description_input_hint_text": "Ajouter une description...",
|
"description_input_hint_text": "Ajouter une description...",
|
||||||
"description_input_submit_error": "Erreur de mise à jour de la description, vérifier le journal pour plus de détails",
|
"description_input_submit_error": "Erreur de mise à jour de la description, vérifier le journal pour plus de détails",
|
||||||
|
"download_error": "Download Error",
|
||||||
|
"download_started": "Download started",
|
||||||
|
"download_sucess": "Download success",
|
||||||
|
"download_sucess_android": "The media has been downloaded to DCIM/Immich",
|
||||||
"edit_date_time_dialog_date_time": "Date and Time",
|
"edit_date_time_dialog_date_time": "Date and Time",
|
||||||
"edit_date_time_dialog_timezone": "Timezone",
|
"edit_date_time_dialog_timezone": "Timezone",
|
||||||
"edit_image_title": "Edit",
|
"edit_image_title": "Edit",
|
||||||
|
|||||||
@@ -210,6 +210,10 @@
|
|||||||
"delete_shared_link_dialog_title": "Supprimer le lien partagé",
|
"delete_shared_link_dialog_title": "Supprimer le lien partagé",
|
||||||
"description_input_hint_text": "Ajouter une description…",
|
"description_input_hint_text": "Ajouter une description…",
|
||||||
"description_input_submit_error": "Erreur de mise à jour de la description, vérifier le journal pour plus de détails",
|
"description_input_submit_error": "Erreur de mise à jour de la description, vérifier le journal pour plus de détails",
|
||||||
|
"download_error": "Download Error",
|
||||||
|
"download_started": "Download started",
|
||||||
|
"download_sucess": "Download success",
|
||||||
|
"download_sucess_android": "The media has been downloaded to DCIM/Immich",
|
||||||
"edit_date_time_dialog_date_time": "Date et heure",
|
"edit_date_time_dialog_date_time": "Date et heure",
|
||||||
"edit_date_time_dialog_timezone": "Fuseau horaire",
|
"edit_date_time_dialog_timezone": "Fuseau horaire",
|
||||||
"edit_image_title": "Edit",
|
"edit_image_title": "Edit",
|
||||||
|
|||||||
@@ -190,7 +190,7 @@
|
|||||||
"create_shared_album_page_share": "שתף",
|
"create_shared_album_page_share": "שתף",
|
||||||
"create_shared_album_page_share_add_assets": "הוסף נכסים",
|
"create_shared_album_page_share_add_assets": "הוסף נכסים",
|
||||||
"create_shared_album_page_share_select_photos": "בחירת תמונות",
|
"create_shared_album_page_share_select_photos": "בחירת תמונות",
|
||||||
"crop": "Crop",
|
"crop": "חתוך",
|
||||||
"curated_location_page_title": "מקומות",
|
"curated_location_page_title": "מקומות",
|
||||||
"curated_object_page_title": "דברים",
|
"curated_object_page_title": "דברים",
|
||||||
"daily_title_text_date": "E, MMM dd",
|
"daily_title_text_date": "E, MMM dd",
|
||||||
@@ -210,11 +210,15 @@
|
|||||||
"delete_shared_link_dialog_title": "מחק קישור משותף",
|
"delete_shared_link_dialog_title": "מחק קישור משותף",
|
||||||
"description_input_hint_text": "הוסף תיאור...",
|
"description_input_hint_text": "הוסף תיאור...",
|
||||||
"description_input_submit_error": "שגיאה בעדכון תיאור, בדוק את היומן לפרטים נוספים",
|
"description_input_submit_error": "שגיאה בעדכון תיאור, בדוק את היומן לפרטים נוספים",
|
||||||
|
"download_error": "Download Error",
|
||||||
|
"download_started": "Download started",
|
||||||
|
"download_sucess": "Download success",
|
||||||
|
"download_sucess_android": "The media has been downloaded to DCIM/Immich",
|
||||||
"edit_date_time_dialog_date_time": "תאריך וזמן",
|
"edit_date_time_dialog_date_time": "תאריך וזמן",
|
||||||
"edit_date_time_dialog_timezone": "אזור זמן",
|
"edit_date_time_dialog_timezone": "אזור זמן",
|
||||||
"edit_image_title": "Edit",
|
"edit_image_title": "ערוך",
|
||||||
"edit_location_dialog_title": "מיקום",
|
"edit_location_dialog_title": "מיקום",
|
||||||
"error_saving_image": "Error: {}",
|
"error_saving_image": "שגיאה: {}",
|
||||||
"exif_bottom_sheet_description": "הוסף תיאור...",
|
"exif_bottom_sheet_description": "הוסף תיאור...",
|
||||||
"exif_bottom_sheet_details": "פרטים",
|
"exif_bottom_sheet_details": "פרטים",
|
||||||
"exif_bottom_sheet_location": "מיקום",
|
"exif_bottom_sheet_location": "מיקום",
|
||||||
@@ -251,7 +255,7 @@
|
|||||||
"home_page_first_time_notice": "אם זאת הפעם הראשונה שאת/ה משתמש/ת ביישום, נא להקפיד לבחור אלבומ(ים) לגיבוי כך שציר הזמן יוכל לאכלס תמונות וסרטונים באלבומ(ים)",
|
"home_page_first_time_notice": "אם זאת הפעם הראשונה שאת/ה משתמש/ת ביישום, נא להקפיד לבחור אלבומ(ים) לגיבוי כך שציר הזמן יוכל לאכלס תמונות וסרטונים באלבומ(ים)",
|
||||||
"home_page_share_err_local": "לא ניתן לשתף נכסים מקומיים על ידי קישור, מדלג",
|
"home_page_share_err_local": "לא ניתן לשתף נכסים מקומיים על ידי קישור, מדלג",
|
||||||
"home_page_upload_err_limit": "ניתן להעלות רק מקסימום של 30 נכסים בכל פעם, מדלג",
|
"home_page_upload_err_limit": "ניתן להעלות רק מקסימום של 30 נכסים בכל פעם, מדלג",
|
||||||
"image_saved_successfully": "Image saved",
|
"image_saved_successfully": "תמונה נשמרה",
|
||||||
"image_viewer_page_state_provider_download_error": "שגיאת הורדה",
|
"image_viewer_page_state_provider_download_error": "שגיאת הורדה",
|
||||||
"image_viewer_page_state_provider_download_started": "ההורדה החלה",
|
"image_viewer_page_state_provider_download_started": "ההורדה החלה",
|
||||||
"image_viewer_page_state_provider_download_success": "הצלחת הורדה",
|
"image_viewer_page_state_provider_download_success": "הצלחת הורדה",
|
||||||
@@ -380,7 +384,7 @@
|
|||||||
"profile_drawer_sign_out": "יציאה",
|
"profile_drawer_sign_out": "יציאה",
|
||||||
"profile_drawer_trash": "אשפה",
|
"profile_drawer_trash": "אשפה",
|
||||||
"recently_added_page_title": "נוסף לאחרונה",
|
"recently_added_page_title": "נוסף לאחרונה",
|
||||||
"save_to_gallery": "Save to gallery",
|
"save_to_gallery": "שמור לגלריה",
|
||||||
"scaffold_body_error_occurred": "אירעה שגיאה",
|
"scaffold_body_error_occurred": "אירעה שגיאה",
|
||||||
"search_bar_hint": "חפש/י בתמונות שלך",
|
"search_bar_hint": "חפש/י בתמונות שלך",
|
||||||
"search_filter_apply": "החל סינון",
|
"search_filter_apply": "החל סינון",
|
||||||
@@ -535,10 +539,10 @@
|
|||||||
"sharing_silver_appbar_create_shared_album": "אלבום משותף חדש",
|
"sharing_silver_appbar_create_shared_album": "אלבום משותף חדש",
|
||||||
"sharing_silver_appbar_shared_links": "קישורים משותפים",
|
"sharing_silver_appbar_shared_links": "קישורים משותפים",
|
||||||
"sharing_silver_appbar_share_partner": "שיתוף עם שותף",
|
"sharing_silver_appbar_share_partner": "שיתוף עם שותף",
|
||||||
"sync": "Sync",
|
"sync": "סנכרן",
|
||||||
"sync_albums": "Sync albums",
|
"sync_albums": "סנכרן אלבומים",
|
||||||
"sync_albums_manual_subtitle": "Sync all uploaded videos and photos to the selected backup albums",
|
"sync_albums_manual_subtitle": "סנכרן את כל הסרטונים והתמונות שהועלו לאלבומי הגיבוי שנבחרו",
|
||||||
"sync_upload_album_setting_subtitle": "Create and upload your photos and videos to the selected albums on Immich",
|
"sync_upload_album_setting_subtitle": "צור והעלה תמונות וסרטונים שלך לאלבומים שנבחרו ביישום",
|
||||||
"tab_controller_nav_library": "ספרייה",
|
"tab_controller_nav_library": "ספרייה",
|
||||||
"tab_controller_nav_photos": "תמונות",
|
"tab_controller_nav_photos": "תמונות",
|
||||||
"tab_controller_nav_search": "חיפוש",
|
"tab_controller_nav_search": "חיפוש",
|
||||||
|
|||||||
@@ -210,6 +210,10 @@
|
|||||||
"delete_shared_link_dialog_title": "साझा किए गए लिंक को हटाएं",
|
"delete_shared_link_dialog_title": "साझा किए गए लिंक को हटाएं",
|
||||||
"description_input_hint_text": "Add description...",
|
"description_input_hint_text": "Add description...",
|
||||||
"description_input_submit_error": "Error updating description, check the log for more details",
|
"description_input_submit_error": "Error updating description, check the log for more details",
|
||||||
|
"download_error": "Download Error",
|
||||||
|
"download_started": "Download started",
|
||||||
|
"download_sucess": "Download success",
|
||||||
|
"download_sucess_android": "The media has been downloaded to DCIM/Immich",
|
||||||
"edit_date_time_dialog_date_time": "Date and Time",
|
"edit_date_time_dialog_date_time": "Date and Time",
|
||||||
"edit_date_time_dialog_timezone": "Timezone",
|
"edit_date_time_dialog_timezone": "Timezone",
|
||||||
"edit_image_title": "Edit",
|
"edit_image_title": "Edit",
|
||||||
|
|||||||
@@ -210,6 +210,10 @@
|
|||||||
"delete_shared_link_dialog_title": "Megosztott Link Törlése",
|
"delete_shared_link_dialog_title": "Megosztott Link Törlése",
|
||||||
"description_input_hint_text": "Leírás hozzáadása...",
|
"description_input_hint_text": "Leírás hozzáadása...",
|
||||||
"description_input_submit_error": "Nem sikerült frissíteni a leírást. További információért kérjük, nézd meg az eseménynaplót",
|
"description_input_submit_error": "Nem sikerült frissíteni a leírást. További információért kérjük, nézd meg az eseménynaplót",
|
||||||
|
"download_error": "Download Error",
|
||||||
|
"download_started": "Download started",
|
||||||
|
"download_sucess": "Download success",
|
||||||
|
"download_sucess_android": "The media has been downloaded to DCIM/Immich",
|
||||||
"edit_date_time_dialog_date_time": "Dátum és Idő",
|
"edit_date_time_dialog_date_time": "Dátum és Idő",
|
||||||
"edit_date_time_dialog_timezone": "Időzóna",
|
"edit_date_time_dialog_timezone": "Időzóna",
|
||||||
"edit_image_title": "Edit",
|
"edit_image_title": "Edit",
|
||||||
|
|||||||
@@ -210,6 +210,10 @@
|
|||||||
"delete_shared_link_dialog_title": "Elimina link condiviso",
|
"delete_shared_link_dialog_title": "Elimina link condiviso",
|
||||||
"description_input_hint_text": "Aggiungi descrizione...",
|
"description_input_hint_text": "Aggiungi descrizione...",
|
||||||
"description_input_submit_error": "Errore modificare descrizione, controlli I log per maggiori dettagli",
|
"description_input_submit_error": "Errore modificare descrizione, controlli I log per maggiori dettagli",
|
||||||
|
"download_error": "Download Error",
|
||||||
|
"download_started": "Download started",
|
||||||
|
"download_sucess": "Download success",
|
||||||
|
"download_sucess_android": "The media has been downloaded to DCIM/Immich",
|
||||||
"edit_date_time_dialog_date_time": "Data e ora",
|
"edit_date_time_dialog_date_time": "Data e ora",
|
||||||
"edit_date_time_dialog_timezone": "Fuso orario",
|
"edit_date_time_dialog_timezone": "Fuso orario",
|
||||||
"edit_image_title": "Edit",
|
"edit_image_title": "Edit",
|
||||||
|
|||||||
@@ -210,6 +210,10 @@
|
|||||||
"delete_shared_link_dialog_title": "共有リンクを消す",
|
"delete_shared_link_dialog_title": "共有リンクを消す",
|
||||||
"description_input_hint_text": "説明を追加",
|
"description_input_hint_text": "説明を追加",
|
||||||
"description_input_submit_error": "説明の編集に失敗しました。詳細はログを確認してください。",
|
"description_input_submit_error": "説明の編集に失敗しました。詳細はログを確認してください。",
|
||||||
|
"download_error": "Download Error",
|
||||||
|
"download_started": "Download started",
|
||||||
|
"download_sucess": "Download success",
|
||||||
|
"download_sucess_android": "The media has been downloaded to DCIM/Immich",
|
||||||
"edit_date_time_dialog_date_time": "日付と時間",
|
"edit_date_time_dialog_date_time": "日付と時間",
|
||||||
"edit_date_time_dialog_timezone": "タイムゾーン",
|
"edit_date_time_dialog_timezone": "タイムゾーン",
|
||||||
"edit_image_title": "Edit",
|
"edit_image_title": "Edit",
|
||||||
|
|||||||
@@ -31,7 +31,7 @@
|
|||||||
"album_viewer_appbar_share_err_delete": "앨범을 삭제하지 못했습니다.",
|
"album_viewer_appbar_share_err_delete": "앨범을 삭제하지 못했습니다.",
|
||||||
"album_viewer_appbar_share_err_leave": "앨범에서 나가지 못했습니다.",
|
"album_viewer_appbar_share_err_leave": "앨범에서 나가지 못했습니다.",
|
||||||
"album_viewer_appbar_share_err_remove": "앨범에서 항목을 제거하지 못했습니다.",
|
"album_viewer_appbar_share_err_remove": "앨범에서 항목을 제거하지 못했습니다.",
|
||||||
"album_viewer_appbar_share_err_title": "앨범 이름을 변경하지 못했습니다.",
|
"album_viewer_appbar_share_err_title": "앨범명을 변경하지 못했습니다.",
|
||||||
"album_viewer_appbar_share_leave": "앨범 나가기",
|
"album_viewer_appbar_share_leave": "앨범 나가기",
|
||||||
"album_viewer_appbar_share_remove": "앨범에서 제거",
|
"album_viewer_appbar_share_remove": "앨범에서 제거",
|
||||||
"album_viewer_appbar_share_to": "공유 대상",
|
"album_viewer_appbar_share_to": "공유 대상",
|
||||||
@@ -55,12 +55,12 @@
|
|||||||
"asset_list_settings_subtitle": "사진 배열 레이아웃 설정",
|
"asset_list_settings_subtitle": "사진 배열 레이아웃 설정",
|
||||||
"asset_list_settings_title": "사진 배열",
|
"asset_list_settings_title": "사진 배열",
|
||||||
"asset_restored_successfully": "항목이 성공적으로 복원되었습니다.",
|
"asset_restored_successfully": "항목이 성공적으로 복원되었습니다.",
|
||||||
"assets_deleted_permanently": "{} 미디어가 영구 삭제됨",
|
"assets_deleted_permanently": "{}개 항목이 영구적으로 삭제됨",
|
||||||
"assets_deleted_permanently_from_server": "Immich 서버에서 {} 미디어가 영구 삭제되었습니다.",
|
"assets_deleted_permanently_from_server": "{}개 항목이 Immich 서버에서 영구적으로 삭제됨",
|
||||||
"assets_removed_permanently_from_device": "장치에서 {} 미디어가 영구적으로 제거되었습니다.",
|
"assets_removed_permanently_from_device": "{}개 항목이 기기에서 영구적으로 삭제됨",
|
||||||
"assets_restored_successfully": "{} 미디어가 성공적으로 복원되었습니다.",
|
"assets_restored_successfully": "항목 {}개를 복원했습니다.",
|
||||||
"assets_trashed": "{} 미디어가 휴지통에 버려졌습니다.",
|
"assets_trashed": "휴지통으로 {}개 항목이 이동되었습니다.",
|
||||||
"assets_trashed_from_server": "Immich 서버에서 {} 미디어를 삭제했습니다.",
|
"assets_trashed_from_server": "휴지통으로 Immich 서버의 {}개 항목이 이동되었습니다.",
|
||||||
"asset_viewer_settings_title": "보기 옵션",
|
"asset_viewer_settings_title": "보기 옵션",
|
||||||
"backup_album_selection_page_albums_device": "기기의 앨범 ({})",
|
"backup_album_selection_page_albums_device": "기기의 앨범 ({})",
|
||||||
"backup_album_selection_page_albums_tap": "한 번 눌러 선택, 두 번 눌러 제외하세요.",
|
"backup_album_selection_page_albums_tap": "한 번 눌러 선택, 두 번 눌러 제외하세요.",
|
||||||
@@ -69,55 +69,55 @@
|
|||||||
"backup_album_selection_page_selection_info": "선택한 앨범",
|
"backup_album_selection_page_selection_info": "선택한 앨범",
|
||||||
"backup_album_selection_page_total_assets": "전체 항목",
|
"backup_album_selection_page_total_assets": "전체 항목",
|
||||||
"backup_all": "모두",
|
"backup_all": "모두",
|
||||||
"backup_background_service_backup_failed_message": "백업하지 못했습니다. 다시 시도하는 중...",
|
"backup_background_service_backup_failed_message": "항목을 백업하지 못했습니다. 다시 시도하는 중...",
|
||||||
"backup_background_service_connection_failed_message": "서버에 연결하지 못했습니다. 다시 시도하는 중...",
|
"backup_background_service_connection_failed_message": "서버에 연결하지 못했습니다. 다시 시도하는 중...",
|
||||||
"backup_background_service_current_upload_notification": "{} 업로드 중",
|
"backup_background_service_current_upload_notification": "{} 업로드 중",
|
||||||
"backup_background_service_default_notification": "백업할 항목을 확인하는 중...",
|
"backup_background_service_default_notification": "백업할 항목을 확인하는 중...",
|
||||||
"backup_background_service_error_title": "백업 오류",
|
"backup_background_service_error_title": "백업 오류",
|
||||||
"backup_background_service_in_progress_notification": "선택한 항목을 백업하는 중...",
|
"backup_background_service_in_progress_notification": "선택한 항목을 백업하는 중...",
|
||||||
"backup_background_service_upload_failure_notification": "{} 업로드 실패",
|
"backup_background_service_upload_failure_notification": "{} 업로드 실패",
|
||||||
"backup_controller_page_albums": "백업 대상 앨범",
|
"backup_controller_page_albums": "백업할 앨범",
|
||||||
"backup_controller_page_background_app_refresh_disabled_content": "백그라운드 백업을 사용하려면 설정 > 일반 > 백그라운드 앱 새로 고침에서 백그라운드 앱 새로 고침을 활성화하세요.",
|
"backup_controller_page_background_app_refresh_disabled_content": "백그라운드 백업을 사용하려면 설정 > 일반 > 백그라운드 앱 새로 고침에서 백그라운드 앱 새로 고침을 활성화하세요.",
|
||||||
"backup_controller_page_background_app_refresh_disabled_title": "백그라운드 새로 고침 비활성화됨",
|
"backup_controller_page_background_app_refresh_disabled_title": "백그라운드 새로 고침 비활성화됨",
|
||||||
"backup_controller_page_background_app_refresh_enable_button_text": "설정으로 이동",
|
"backup_controller_page_background_app_refresh_enable_button_text": "설정으로 이동",
|
||||||
"backup_controller_page_background_battery_info_link": "설정 방법",
|
"backup_controller_page_background_battery_info_link": "설정 방법",
|
||||||
"backup_controller_page_background_battery_info_message": "최상의 백그라운드 백업 환경을 위해, Immich의 백그라운드 활동을 제한하는 배터리 최적화를 비활성화하세요.\n\n설정 방법은 기기마다 다르므로, 제조 업체에서 관련 정보를 찾아보세요.",
|
"backup_controller_page_background_battery_info_message": "최상의 백그라운드 백업 환경을 위해 Immich 백그라운드 활동을 제한하는 배터리 최적화 기능을 비활성화하세요.\n\n기기마다 설정 방법에 차이가 있어 제조 업체에서 관련 정보를 찾아보세요.",
|
||||||
"backup_controller_page_background_battery_info_ok": "확인",
|
"backup_controller_page_background_battery_info_ok": "확인",
|
||||||
"backup_controller_page_background_battery_info_title": "배터리 최적화",
|
"backup_controller_page_background_battery_info_title": "배터리 최적화",
|
||||||
"backup_controller_page_background_charging": "충전 중에만",
|
"backup_controller_page_background_charging": "충전 중에만",
|
||||||
"backup_controller_page_background_configure_error": "백그라운드 서비스 구성 실패",
|
"backup_controller_page_background_configure_error": "백그라운드 서비스 구성 실패",
|
||||||
"backup_controller_page_background_delay": "새 콘텐츠 백업 간격: {}",
|
"backup_controller_page_background_delay": "새 콘텐츠 백업 간격: {}",
|
||||||
"backup_controller_page_background_description": "백그라운드 서비스를 활성화하면 앱을 열지 않고도 새 콘텐츠를 자동으로 백업할 수 있습니다.",
|
"backup_controller_page_background_description": "백그라운드 서비스를 활성화하여 앱을 실행하지 않고 새 항목을 자동으로 백업하세요.",
|
||||||
"backup_controller_page_background_is_off": "자동 백그라운드 백업이 비활성화되었습니다.",
|
"backup_controller_page_background_is_off": "백그라운드 백업이 비활성화되었습니다.",
|
||||||
"backup_controller_page_background_is_on": "자동 백그라운드 백업이 활성화되었습니다.",
|
"backup_controller_page_background_is_on": "백그라운드 백업이 활성화되었습니다.",
|
||||||
"backup_controller_page_background_turn_off": "백그라운드 서비스 비활성화",
|
"backup_controller_page_background_turn_off": "백그라운드 서비스 비활성화",
|
||||||
"backup_controller_page_background_turn_on": "백그라운드 서비스 활성화",
|
"backup_controller_page_background_turn_on": "백그라운드 서비스 활성화",
|
||||||
"backup_controller_page_background_wifi": "Wi-Fi에서만",
|
"backup_controller_page_background_wifi": "Wi-Fi에서만",
|
||||||
"backup_controller_page_backup": "백업",
|
"backup_controller_page_backup": "백업",
|
||||||
"backup_controller_page_backup_selected": "선택: ",
|
"backup_controller_page_backup_selected": "선택됨:",
|
||||||
"backup_controller_page_backup_sub": "백업된 사진 및 동영상",
|
"backup_controller_page_backup_sub": "백업된 사진 및 동영상",
|
||||||
"backup_controller_page_cancel": "취소",
|
"backup_controller_page_cancel": "취소",
|
||||||
"backup_controller_page_created": "생성일: {}",
|
"backup_controller_page_created": "생성일: {}",
|
||||||
"backup_controller_page_desc_backup": "앱을 열 때 새 항목을 서버에 자동으로 업로드하려면 포그라운드 백업을 활성화하세요.",
|
"backup_controller_page_desc_backup": "포그라운드 백업을 활성화하여 앱을 시작할 때 새 항목을 서버에 자동으로 업로드하세요.",
|
||||||
"backup_controller_page_excluded": "제외: ",
|
"backup_controller_page_excluded": "제외됨:",
|
||||||
"backup_controller_page_failed": "실패 ({})",
|
"backup_controller_page_failed": "실패 ({})",
|
||||||
"backup_controller_page_filename": "파일명: {} [{}]",
|
"backup_controller_page_filename": "파일명: {} [{}]",
|
||||||
"backup_controller_page_id": "ID: {}",
|
"backup_controller_page_id": "ID: {}",
|
||||||
"backup_controller_page_info": "백업 정보",
|
"backup_controller_page_info": "백업 정보",
|
||||||
"backup_controller_page_none_selected": "선택한 항목이 없습니다.",
|
"backup_controller_page_none_selected": "선택한 항목이 없습니다.",
|
||||||
"backup_controller_page_remainder": "남은 항목",
|
"backup_controller_page_remainder": "남은 항목",
|
||||||
"backup_controller_page_remainder_sub": "백업할 사진 및 동영상",
|
"backup_controller_page_remainder_sub": "백업 대기 중인 사진 및 동영상",
|
||||||
"backup_controller_page_select": "선택",
|
"backup_controller_page_select": "선택",
|
||||||
"backup_controller_page_server_storage": "저장 공간",
|
"backup_controller_page_server_storage": "저장 공간",
|
||||||
"backup_controller_page_start_backup": "백업 시작",
|
"backup_controller_page_start_backup": "백업 시작",
|
||||||
"backup_controller_page_status_off": "자동 백업이 비활성화되었습니다.",
|
"backup_controller_page_status_off": "포그라운드 백업이 비활성화되었습니다.",
|
||||||
"backup_controller_page_status_on": "자동 백업이 활성화되었습니다.",
|
"backup_controller_page_status_on": "포그라운드 백업이 활성화되었습니다.",
|
||||||
"backup_controller_page_storage_format": "{} 사용 중, 전체 {}",
|
"backup_controller_page_storage_format": "{} 사용 중, 전체 {}",
|
||||||
"backup_controller_page_to_backup": "백업 대상 앨범 목록",
|
"backup_controller_page_to_backup": "백업할 앨범 목록",
|
||||||
"backup_controller_page_total": "전체",
|
"backup_controller_page_total": "전체",
|
||||||
"backup_controller_page_total_sub": "선택한 앨범의 모든 사진 및 동영상",
|
"backup_controller_page_total_sub": "선택한 앨범의 고유한 사진 및 동영상",
|
||||||
"backup_controller_page_turn_off": "백업 비활성화",
|
"backup_controller_page_turn_off": "비활성화",
|
||||||
"backup_controller_page_turn_on": "백업 활성화",
|
"backup_controller_page_turn_on": "활성화",
|
||||||
"backup_controller_page_uploading_file_info": "파일 정보 업로드 중",
|
"backup_controller_page_uploading_file_info": "파일 정보 업로드 중",
|
||||||
"backup_err_only_album": "유일한 앨범은 제거할 수 없습니다.",
|
"backup_err_only_album": "유일한 앨범은 제거할 수 없습니다.",
|
||||||
"backup_info_card_assets": "항목",
|
"backup_info_card_assets": "항목",
|
||||||
@@ -154,7 +154,7 @@
|
|||||||
"client_cert_enter_password": "비밀번호 입력",
|
"client_cert_enter_password": "비밀번호 입력",
|
||||||
"client_cert_import": "가져오기",
|
"client_cert_import": "가져오기",
|
||||||
"client_cert_import_success_msg": "클라이언트 인증서를 가져왔습니다.",
|
"client_cert_import_success_msg": "클라이언트 인증서를 가져왔습니다.",
|
||||||
"client_cert_invalid_msg": "유효하지 않은 인증서이거나 비밀번호가 일치하지 않습니다.",
|
"client_cert_invalid_msg": "유효하지 않은 인증서 또는 패스프레이즈가 일치하지 않습니다.",
|
||||||
"client_cert_remove": "제거",
|
"client_cert_remove": "제거",
|
||||||
"client_cert_remove_msg": "클라이언트 인증서가 제거되었습니다.",
|
"client_cert_remove_msg": "클라이언트 인증서가 제거되었습니다.",
|
||||||
"client_cert_subtitle": "인증서 가져오기/제거는 로그인 전에만 가능합니다. PKCS12 (.p12, .pfx) 형식을 지원합니다.",
|
"client_cert_subtitle": "인증서 가져오기/제거는 로그인 전에만 가능합니다. PKCS12 (.p12, .pfx) 형식을 지원합니다.",
|
||||||
@@ -210,11 +210,15 @@
|
|||||||
"delete_shared_link_dialog_title": "공유 링크 삭제",
|
"delete_shared_link_dialog_title": "공유 링크 삭제",
|
||||||
"description_input_hint_text": "설명 추가...",
|
"description_input_hint_text": "설명 추가...",
|
||||||
"description_input_submit_error": "설명을 변경하는 중 문제가 발생했습니다. 자세한 내용은 로그를 참조하세요.",
|
"description_input_submit_error": "설명을 변경하는 중 문제가 발생했습니다. 자세한 내용은 로그를 참조하세요.",
|
||||||
|
"download_error": "다운로드 중 문제가 발생했습니다.",
|
||||||
|
"download_started": "다운로드가 시작되었습니다.",
|
||||||
|
"download_sucess": "다운로드가 완료되었습니다.",
|
||||||
|
"download_sucess_android": "미디어가 DCIM/Immich에 저장되었습니다.",
|
||||||
"edit_date_time_dialog_date_time": "날짜 및 시간",
|
"edit_date_time_dialog_date_time": "날짜 및 시간",
|
||||||
"edit_date_time_dialog_timezone": "시간대",
|
"edit_date_time_dialog_timezone": "시간대",
|
||||||
"edit_image_title": "편집",
|
"edit_image_title": "편집",
|
||||||
"edit_location_dialog_title": "위치",
|
"edit_location_dialog_title": "위치",
|
||||||
"error_saving_image": "오류입니다: {}",
|
"error_saving_image": "오류: {}",
|
||||||
"exif_bottom_sheet_description": "설명 추가...",
|
"exif_bottom_sheet_description": "설명 추가...",
|
||||||
"exif_bottom_sheet_details": "상세 정보",
|
"exif_bottom_sheet_details": "상세 정보",
|
||||||
"exif_bottom_sheet_location": "위치",
|
"exif_bottom_sheet_location": "위치",
|
||||||
@@ -251,7 +255,7 @@
|
|||||||
"home_page_first_time_notice": "앱을 처음 사용하는 경우 타임라인에 앨범의 사진과 동영상을 채울 수 있도록 백업할 앨범을 선택하세요.",
|
"home_page_first_time_notice": "앱을 처음 사용하는 경우 타임라인에 앨범의 사진과 동영상을 채울 수 있도록 백업할 앨범을 선택하세요.",
|
||||||
"home_page_share_err_local": "기기의 항목은 링크로 공유할 수 없습니다. 건너뜁니다.",
|
"home_page_share_err_local": "기기의 항목은 링크로 공유할 수 없습니다. 건너뜁니다.",
|
||||||
"home_page_upload_err_limit": "한 번에 최대 30개의 항목만 업로드할 수 있습니다.",
|
"home_page_upload_err_limit": "한 번에 최대 30개의 항목만 업로드할 수 있습니다.",
|
||||||
"image_saved_successfully": "이미지 저장",
|
"image_saved_successfully": "이미지가 저장되었습니다.",
|
||||||
"image_viewer_page_state_provider_download_error": "다운로드 오류",
|
"image_viewer_page_state_provider_download_error": "다운로드 오류",
|
||||||
"image_viewer_page_state_provider_download_started": "다운로드가 시작되었습니다.",
|
"image_viewer_page_state_provider_download_started": "다운로드가 시작되었습니다.",
|
||||||
"image_viewer_page_state_provider_download_success": "다운로드 완료",
|
"image_viewer_page_state_provider_download_success": "다운로드 완료",
|
||||||
@@ -282,14 +286,14 @@
|
|||||||
"login_form_back_button_text": "뒤로",
|
"login_form_back_button_text": "뒤로",
|
||||||
"login_form_button_text": "로그인",
|
"login_form_button_text": "로그인",
|
||||||
"login_form_email_hint": "youremail@email.com",
|
"login_form_email_hint": "youremail@email.com",
|
||||||
"login_form_endpoint_hint": "https://your-server-ip:port/api",
|
"login_form_endpoint_hint": "http://your-server-ip:port/api",
|
||||||
"login_form_endpoint_url": "서버 엔드포인트 URL",
|
"login_form_endpoint_url": "서버 엔드포인트 URL",
|
||||||
"login_form_err_http": "http:// 또는 https://로 시작해야 합니다.",
|
"login_form_err_http": "http:// 또는 https://로 시작해야 합니다.",
|
||||||
"login_form_err_invalid_email": "유효하지 않은 이메일",
|
"login_form_err_invalid_email": "유효하지 않은 이메일",
|
||||||
"login_form_err_invalid_url": "잘못된 URL입니다.",
|
"login_form_err_invalid_url": "잘못된 URL입니다.",
|
||||||
"login_form_err_leading_whitespace": "앞에 공백 문자가 있습니다.",
|
"login_form_err_leading_whitespace": "시작 부분에 공백이 있습니다.",
|
||||||
"login_form_err_trailing_whitespace": "뒤에 공백 문자가 있습니다.",
|
"login_form_err_trailing_whitespace": "끝 부분에 공백이 있습니다.",
|
||||||
"login_form_failed_get_oauth_server_config": "OAuth 로그인 중 문제 발생, 서버 URL을 확인해주세요.",
|
"login_form_failed_get_oauth_server_config": "OAuth 로그인 중 문제 발생, 서버 URL을 확인하세요.",
|
||||||
"login_form_failed_get_oauth_server_disable": "이 서버는 OAuth 기능을 지원하지 않습니다.",
|
"login_form_failed_get_oauth_server_disable": "이 서버는 OAuth 기능을 지원하지 않습니다.",
|
||||||
"login_form_failed_login": "로그인 오류. 서버 URL, 이메일 및 비밀번호를 확인하세요.",
|
"login_form_failed_login": "로그인 오류. 서버 URL, 이메일 및 비밀번호를 확인하세요.",
|
||||||
"login_form_handshake_exception": "서버와 통신 중 인증서 예외가 발생했습니다. 자체 서명된 인증서를 사용 중이라면, 설정에서 자체 서명된 인증서 허용을 활성화하세요.",
|
"login_form_handshake_exception": "서버와 통신 중 인증서 예외가 발생했습니다. 자체 서명된 인증서를 사용 중이라면, 설정에서 자체 서명된 인증서 허용을 활성화하세요.",
|
||||||
@@ -343,7 +347,7 @@
|
|||||||
"notification_permission_dialog_cancel": "취소",
|
"notification_permission_dialog_cancel": "취소",
|
||||||
"notification_permission_dialog_content": "알림을 활성화하려면 설정에서 알림 권한을 허용하세요.",
|
"notification_permission_dialog_content": "알림을 활성화하려면 설정에서 알림 권한을 허용하세요.",
|
||||||
"notification_permission_dialog_settings": "설정",
|
"notification_permission_dialog_settings": "설정",
|
||||||
"notification_permission_list_tile_content": "알림을 활성화하기 위해 권한을 부여하세요.",
|
"notification_permission_list_tile_content": "알림을 활성화하려면 권한을 부여하세요.",
|
||||||
"notification_permission_list_tile_enable_button": "알림 활성화",
|
"notification_permission_list_tile_enable_button": "알림 활성화",
|
||||||
"notification_permission_list_tile_title": "알림 권한",
|
"notification_permission_list_tile_title": "알림 권한",
|
||||||
"partner_list_user_photos": "{user}님의 사진",
|
"partner_list_user_photos": "{user}님의 사진",
|
||||||
@@ -371,7 +375,7 @@
|
|||||||
"profile_drawer_app_logs": "로그",
|
"profile_drawer_app_logs": "로그",
|
||||||
"profile_drawer_client_out_of_date_major": "모바일 앱이 최신 버전이 아닙니다. 최신 버전으로 업데이트하세요.",
|
"profile_drawer_client_out_of_date_major": "모바일 앱이 최신 버전이 아닙니다. 최신 버전으로 업데이트하세요.",
|
||||||
"profile_drawer_client_out_of_date_minor": "모바일 앱이 최신 버전이 아닙니다. 최신 버전으로 업데이트하세요.",
|
"profile_drawer_client_out_of_date_minor": "모바일 앱이 최신 버전이 아닙니다. 최신 버전으로 업데이트하세요.",
|
||||||
"profile_drawer_client_server_up_to_date": "모바일 앱과 서버가 최신 버전입니다.",
|
"profile_drawer_client_server_up_to_date": "클라이언트와 서버가 최신입니다.",
|
||||||
"profile_drawer_documentation": "문서",
|
"profile_drawer_documentation": "문서",
|
||||||
"profile_drawer_github": "Github",
|
"profile_drawer_github": "Github",
|
||||||
"profile_drawer_server_out_of_date_major": "서버 버전이 최신이 아닙니다. 최신 버전으로 업데이트하세요.",
|
"profile_drawer_server_out_of_date_major": "서버 버전이 최신이 아닙니다. 최신 버전으로 업데이트하세요.",
|
||||||
@@ -389,7 +393,7 @@
|
|||||||
"search_filter_camera_model": "모델명",
|
"search_filter_camera_model": "모델명",
|
||||||
"search_filter_camera_title": "카메라 종류 선택",
|
"search_filter_camera_title": "카메라 종류 선택",
|
||||||
"search_filter_date": "날짜",
|
"search_filter_date": "날짜",
|
||||||
"search_filter_date_interval": "{start}에서 {end} 까지",
|
"search_filter_date_interval": "{start} - {end}",
|
||||||
"search_filter_date_title": "날짜 범위 선택",
|
"search_filter_date_title": "날짜 범위 선택",
|
||||||
"search_filter_display_option_archive": "보관함",
|
"search_filter_display_option_archive": "보관함",
|
||||||
"search_filter_display_option_favorite": "즐겨찾기",
|
"search_filter_display_option_favorite": "즐겨찾기",
|
||||||
@@ -411,8 +415,8 @@
|
|||||||
"search_page_categories": "분류",
|
"search_page_categories": "분류",
|
||||||
"search_page_favorites": "즐겨찾기",
|
"search_page_favorites": "즐겨찾기",
|
||||||
"search_page_motion_photos": "모션 포토",
|
"search_page_motion_photos": "모션 포토",
|
||||||
"search_page_no_objects": "사물 정보가 없습니다.",
|
"search_page_no_objects": "사용 가능한 사물 정보 없음",
|
||||||
"search_page_no_places": "장소 정보가 없습니다.",
|
"search_page_no_places": "사용 가능한 위치 정보 없음",
|
||||||
"search_page_people": "인물",
|
"search_page_people": "인물",
|
||||||
"search_page_person_add_name_dialog_cancel": "취소",
|
"search_page_person_add_name_dialog_cancel": "취소",
|
||||||
"search_page_person_add_name_dialog_hint": "이름",
|
"search_page_person_add_name_dialog_hint": "이름",
|
||||||
@@ -435,7 +439,7 @@
|
|||||||
"search_suggestion_list_smart_search_hint_2": "m:your-search-term",
|
"search_suggestion_list_smart_search_hint_2": "m:your-search-term",
|
||||||
"select_additional_user_for_sharing_page_suggestions": "추천",
|
"select_additional_user_for_sharing_page_suggestions": "추천",
|
||||||
"select_user_for_sharing_page_err_album": "앨범을 생성하지 못했습니다.",
|
"select_user_for_sharing_page_err_album": "앨범을 생성하지 못했습니다.",
|
||||||
"select_user_for_sharing_page_share_suggestions": "추천",
|
"select_user_for_sharing_page_share_suggestions": "제안",
|
||||||
"server_info_box_app_version": "앱 버전",
|
"server_info_box_app_version": "앱 버전",
|
||||||
"server_info_box_latest_release": "최신 버전",
|
"server_info_box_latest_release": "최신 버전",
|
||||||
"server_info_box_server_url": "서버 URL",
|
"server_info_box_server_url": "서버 URL",
|
||||||
@@ -454,12 +458,12 @@
|
|||||||
"setting_notifications_notify_minutes": "{}분 후",
|
"setting_notifications_notify_minutes": "{}분 후",
|
||||||
"setting_notifications_notify_never": "알리지 않음",
|
"setting_notifications_notify_never": "알리지 않음",
|
||||||
"setting_notifications_notify_seconds": "{}초",
|
"setting_notifications_notify_seconds": "{}초",
|
||||||
"setting_notifications_single_progress_subtitle": "각 항목의 세부 업로드 정보 표시",
|
"setting_notifications_single_progress_subtitle": "개별 항목의 상세 업로드 정보 표시",
|
||||||
"setting_notifications_single_progress_title": "백그라운드 작업의 세부 진행률 표시",
|
"setting_notifications_single_progress_title": "백그라운드 백업 상세 진행률 표시",
|
||||||
"setting_notifications_subtitle": "알림 기본 설정 조정",
|
"setting_notifications_subtitle": "알림 기본 설정 조정",
|
||||||
"setting_notifications_title": "알림",
|
"setting_notifications_title": "알림",
|
||||||
"setting_notifications_total_progress_subtitle": "전체 업로드 진행률 (완료/전체)",
|
"setting_notifications_total_progress_subtitle": "전체 업로드 진행률 (완료/전체)",
|
||||||
"setting_notifications_total_progress_title": "백그라운드 작업의 전체 진행률 표시",
|
"setting_notifications_total_progress_title": "백그라운드 백업 전체 진행률 표시",
|
||||||
"setting_pages_app_bar_settings": "설정",
|
"setting_pages_app_bar_settings": "설정",
|
||||||
"settings_require_restart": "설정을 적용하려면 Immich를 다시 시작하세요.",
|
"settings_require_restart": "설정을 적용하려면 Immich를 다시 시작하세요.",
|
||||||
"setting_video_viewer_looping_subtitle": "상세 보기에서 동영상을 자동으로 반복합니다.",
|
"setting_video_viewer_looping_subtitle": "상세 보기에서 동영상을 자동으로 반복합니다.",
|
||||||
@@ -467,7 +471,7 @@
|
|||||||
"setting_video_viewer_title": "동영상",
|
"setting_video_viewer_title": "동영상",
|
||||||
"share_add": "추가",
|
"share_add": "추가",
|
||||||
"share_add_photos": "사진 추가",
|
"share_add_photos": "사진 추가",
|
||||||
"share_add_title": "앨범 제목 입력",
|
"share_add_title": "앨범명 추가",
|
||||||
"share_assets_selected": "{}개 항목 선택됨",
|
"share_assets_selected": "{}개 항목 선택됨",
|
||||||
"share_create_album": "앨범 생성",
|
"share_create_album": "앨범 생성",
|
||||||
"shared_album_activities_input_disable": "댓글이 비활성화되었습니다",
|
"shared_album_activities_input_disable": "댓글이 비활성화되었습니다",
|
||||||
@@ -528,7 +532,7 @@
|
|||||||
"shared_link_manage_links": "공유 링크 관리",
|
"shared_link_manage_links": "공유 링크 관리",
|
||||||
"shared_link_public_album": "공개 앨범",
|
"shared_link_public_album": "공개 앨범",
|
||||||
"share_done": "완료",
|
"share_done": "완료",
|
||||||
"share_invite": "앨범에 초대",
|
"share_invite": "앨범으로 초대",
|
||||||
"sharing_page_album": "공유 앨범",
|
"sharing_page_album": "공유 앨범",
|
||||||
"sharing_page_description": "공유 앨범을 만들어 주변 사람들과 사진 및 동영상을 공유하세요.",
|
"sharing_page_description": "공유 앨범을 만들어 주변 사람들과 사진 및 동영상을 공유하세요.",
|
||||||
"sharing_page_empty_list": "공유 앨범 없음",
|
"sharing_page_empty_list": "공유 앨범 없음",
|
||||||
@@ -537,8 +541,8 @@
|
|||||||
"sharing_silver_appbar_share_partner": "파트너와 공유",
|
"sharing_silver_appbar_share_partner": "파트너와 공유",
|
||||||
"sync": "동기화",
|
"sync": "동기화",
|
||||||
"sync_albums": "앨범 동기화",
|
"sync_albums": "앨범 동기화",
|
||||||
"sync_albums_manual_subtitle": "업로드한 모든 동영상과 사진을 선택한 백업 앨범에 동기화합니다.",
|
"sync_albums_manual_subtitle": "업로드한 모든 동영상과 사진을 선택한 백업 앨범에 동기화",
|
||||||
"sync_upload_album_setting_subtitle": "Immich에서 선택한 앨범에 사진 및 동영상을 만들고 업로드하세요.",
|
"sync_upload_album_setting_subtitle": "선택한 앨범을 Immich에 생성하고 사진 및 동영상을 업로드하세요.",
|
||||||
"tab_controller_nav_library": "라이브러리",
|
"tab_controller_nav_library": "라이브러리",
|
||||||
"tab_controller_nav_photos": "사진",
|
"tab_controller_nav_photos": "사진",
|
||||||
"tab_controller_nav_search": "검색",
|
"tab_controller_nav_search": "검색",
|
||||||
@@ -546,7 +550,7 @@
|
|||||||
"theme_setting_asset_list_storage_indicator_title": "항목에 스토리지 동기화 여부 표시",
|
"theme_setting_asset_list_storage_indicator_title": "항목에 스토리지 동기화 여부 표시",
|
||||||
"theme_setting_asset_list_tiles_per_row_title": "한 줄에 표시할 항목 수 ({})",
|
"theme_setting_asset_list_tiles_per_row_title": "한 줄에 표시할 항목 수 ({})",
|
||||||
"theme_setting_colorful_interface_subtitle": "배경에 대표 색상을 적용합니다.",
|
"theme_setting_colorful_interface_subtitle": "배경에 대표 색상을 적용합니다.",
|
||||||
"theme_setting_colorful_interface_title": "컬러풀 인터페이스",
|
"theme_setting_colorful_interface_title": "미려한 인터페이스",
|
||||||
"theme_setting_dark_mode_switch": "다크 모드",
|
"theme_setting_dark_mode_switch": "다크 모드",
|
||||||
"theme_setting_image_viewer_quality_subtitle": "상세 보기 이미지 품질 조정",
|
"theme_setting_image_viewer_quality_subtitle": "상세 보기 이미지 품질 조정",
|
||||||
"theme_setting_image_viewer_quality_title": "이미지 보기 품질",
|
"theme_setting_image_viewer_quality_title": "이미지 보기 품질",
|
||||||
@@ -559,7 +563,7 @@
|
|||||||
"theme_setting_three_stage_loading_subtitle": "이 기능은 앱의 로드 성능을 향상시킬 수 있지만 더 많은 데이터를 사용합니다.",
|
"theme_setting_three_stage_loading_subtitle": "이 기능은 앱의 로드 성능을 향상시킬 수 있지만 더 많은 데이터를 사용합니다.",
|
||||||
"theme_setting_three_stage_loading_title": "3단계 로드 활성화",
|
"theme_setting_three_stage_loading_title": "3단계 로드 활성화",
|
||||||
"translated_text_options": "옵션",
|
"translated_text_options": "옵션",
|
||||||
"trash_emptied": "휴지통 비우기",
|
"trash_emptied": "휴지통을 비움",
|
||||||
"trash_page_delete": "삭제",
|
"trash_page_delete": "삭제",
|
||||||
"trash_page_delete_all": "모두 삭제",
|
"trash_page_delete_all": "모두 삭제",
|
||||||
"trash_page_empty_trash_btn": "휴지통 비우기",
|
"trash_page_empty_trash_btn": "휴지통 비우기",
|
||||||
|
|||||||
@@ -210,6 +210,10 @@
|
|||||||
"delete_shared_link_dialog_title": "Delete Shared Link",
|
"delete_shared_link_dialog_title": "Delete Shared Link",
|
||||||
"description_input_hint_text": "Add description...",
|
"description_input_hint_text": "Add description...",
|
||||||
"description_input_submit_error": "Error updating description, check the log for more details",
|
"description_input_submit_error": "Error updating description, check the log for more details",
|
||||||
|
"download_error": "Download Error",
|
||||||
|
"download_started": "Download started",
|
||||||
|
"download_sucess": "Download success",
|
||||||
|
"download_sucess_android": "The media has been downloaded to DCIM/Immich",
|
||||||
"edit_date_time_dialog_date_time": "Date and Time",
|
"edit_date_time_dialog_date_time": "Date and Time",
|
||||||
"edit_date_time_dialog_timezone": "Timezone",
|
"edit_date_time_dialog_timezone": "Timezone",
|
||||||
"edit_image_title": "Edit",
|
"edit_image_title": "Edit",
|
||||||
|
|||||||
@@ -210,6 +210,10 @@
|
|||||||
"delete_shared_link_dialog_title": "Dzēst Kopīgošanas saiti",
|
"delete_shared_link_dialog_title": "Dzēst Kopīgošanas saiti",
|
||||||
"description_input_hint_text": "Pievienot aprakstu...",
|
"description_input_hint_text": "Pievienot aprakstu...",
|
||||||
"description_input_submit_error": "Atjauninot aprakstu, radās kļūda; papildinformāciju skatiet žurnālā",
|
"description_input_submit_error": "Atjauninot aprakstu, radās kļūda; papildinformāciju skatiet žurnālā",
|
||||||
|
"download_error": "Download Error",
|
||||||
|
"download_started": "Download started",
|
||||||
|
"download_sucess": "Download success",
|
||||||
|
"download_sucess_android": "The media has been downloaded to DCIM/Immich",
|
||||||
"edit_date_time_dialog_date_time": "Datums un Laiks",
|
"edit_date_time_dialog_date_time": "Datums un Laiks",
|
||||||
"edit_date_time_dialog_timezone": "Laika zona",
|
"edit_date_time_dialog_timezone": "Laika zona",
|
||||||
"edit_image_title": "Edit",
|
"edit_image_title": "Edit",
|
||||||
|
|||||||
@@ -210,6 +210,10 @@
|
|||||||
"delete_shared_link_dialog_title": "Delete Shared Link",
|
"delete_shared_link_dialog_title": "Delete Shared Link",
|
||||||
"description_input_hint_text": "Add description...",
|
"description_input_hint_text": "Add description...",
|
||||||
"description_input_submit_error": "Error updating description, check the log for more details",
|
"description_input_submit_error": "Error updating description, check the log for more details",
|
||||||
|
"download_error": "Download Error",
|
||||||
|
"download_started": "Download started",
|
||||||
|
"download_sucess": "Download success",
|
||||||
|
"download_sucess_android": "The media has been downloaded to DCIM/Immich",
|
||||||
"edit_date_time_dialog_date_time": "Date and Time",
|
"edit_date_time_dialog_date_time": "Date and Time",
|
||||||
"edit_date_time_dialog_timezone": "Timezone",
|
"edit_date_time_dialog_timezone": "Timezone",
|
||||||
"edit_image_title": "Edit",
|
"edit_image_title": "Edit",
|
||||||
|
|||||||
@@ -210,6 +210,10 @@
|
|||||||
"delete_shared_link_dialog_title": "Slett delt link",
|
"delete_shared_link_dialog_title": "Slett delt link",
|
||||||
"description_input_hint_text": "Legg til beskrivelse ...",
|
"description_input_hint_text": "Legg til beskrivelse ...",
|
||||||
"description_input_submit_error": "Feil ved oppdatering av beskrivelse, sjekk loggen for flere detaljer",
|
"description_input_submit_error": "Feil ved oppdatering av beskrivelse, sjekk loggen for flere detaljer",
|
||||||
|
"download_error": "Download Error",
|
||||||
|
"download_started": "Download started",
|
||||||
|
"download_sucess": "Download success",
|
||||||
|
"download_sucess_android": "The media has been downloaded to DCIM/Immich",
|
||||||
"edit_date_time_dialog_date_time": "Dato og tid",
|
"edit_date_time_dialog_date_time": "Dato og tid",
|
||||||
"edit_date_time_dialog_timezone": "Tidssone",
|
"edit_date_time_dialog_timezone": "Tidssone",
|
||||||
"edit_image_title": "Edit",
|
"edit_image_title": "Edit",
|
||||||
|
|||||||
@@ -210,6 +210,10 @@
|
|||||||
"delete_shared_link_dialog_title": "Verwijder gedeelde link",
|
"delete_shared_link_dialog_title": "Verwijder gedeelde link",
|
||||||
"description_input_hint_text": "Beschrijving toevoegen...",
|
"description_input_hint_text": "Beschrijving toevoegen...",
|
||||||
"description_input_submit_error": "Beschrijving bijwerken mislukt, controleer het logboek voor meer details",
|
"description_input_submit_error": "Beschrijving bijwerken mislukt, controleer het logboek voor meer details",
|
||||||
|
"download_error": "Fout bij downloaden",
|
||||||
|
"download_started": "Download gestart",
|
||||||
|
"download_sucess": "Succesvol gedownload",
|
||||||
|
"download_sucess_android": "Het bestand is gedownload naar DCIM/Immich",
|
||||||
"edit_date_time_dialog_date_time": "Datum en tijd",
|
"edit_date_time_dialog_date_time": "Datum en tijd",
|
||||||
"edit_date_time_dialog_timezone": "Tijdzone",
|
"edit_date_time_dialog_timezone": "Tijdzone",
|
||||||
"edit_image_title": "Bewerken",
|
"edit_image_title": "Bewerken",
|
||||||
|
|||||||
@@ -210,6 +210,10 @@
|
|||||||
"delete_shared_link_dialog_title": "Usuń udostępniony link",
|
"delete_shared_link_dialog_title": "Usuń udostępniony link",
|
||||||
"description_input_hint_text": "Dodaj opis...",
|
"description_input_hint_text": "Dodaj opis...",
|
||||||
"description_input_submit_error": "Błąd aktualizacji opisu, sprawdź dziennik, aby uzyskać więcej szczegółów",
|
"description_input_submit_error": "Błąd aktualizacji opisu, sprawdź dziennik, aby uzyskać więcej szczegółów",
|
||||||
|
"download_error": "Download Error",
|
||||||
|
"download_started": "Download started",
|
||||||
|
"download_sucess": "Download success",
|
||||||
|
"download_sucess_android": "The media has been downloaded to DCIM/Immich",
|
||||||
"edit_date_time_dialog_date_time": "Data i godzina",
|
"edit_date_time_dialog_date_time": "Data i godzina",
|
||||||
"edit_date_time_dialog_timezone": "Strefa czasowa",
|
"edit_date_time_dialog_timezone": "Strefa czasowa",
|
||||||
"edit_image_title": "Edit",
|
"edit_image_title": "Edit",
|
||||||
|
|||||||
@@ -210,6 +210,10 @@
|
|||||||
"delete_shared_link_dialog_title": "Excluir link compartilhado",
|
"delete_shared_link_dialog_title": "Excluir link compartilhado",
|
||||||
"description_input_hint_text": "Adicionar descrição...",
|
"description_input_hint_text": "Adicionar descrição...",
|
||||||
"description_input_submit_error": "Erro ao atualizar a descrição, verifique o registo para obter mais detalhes",
|
"description_input_submit_error": "Erro ao atualizar a descrição, verifique o registo para obter mais detalhes",
|
||||||
|
"download_error": "Download Error",
|
||||||
|
"download_started": "Download started",
|
||||||
|
"download_sucess": "Download success",
|
||||||
|
"download_sucess_android": "The media has been downloaded to DCIM/Immich",
|
||||||
"edit_date_time_dialog_date_time": "Data e Hora",
|
"edit_date_time_dialog_date_time": "Data e Hora",
|
||||||
"edit_date_time_dialog_timezone": "Fuso horário",
|
"edit_date_time_dialog_timezone": "Fuso horário",
|
||||||
"edit_image_title": "Edit",
|
"edit_image_title": "Edit",
|
||||||
|
|||||||
@@ -210,6 +210,10 @@
|
|||||||
"delete_shared_link_dialog_title": "Șterge link distribuire",
|
"delete_shared_link_dialog_title": "Șterge link distribuire",
|
||||||
"description_input_hint_text": "Adaugă descriere...",
|
"description_input_hint_text": "Adaugă descriere...",
|
||||||
"description_input_submit_error": "Eroare actualizare descriere, verifică log-urile pentru mai multe detalii",
|
"description_input_submit_error": "Eroare actualizare descriere, verifică log-urile pentru mai multe detalii",
|
||||||
|
"download_error": "Download Error",
|
||||||
|
"download_started": "Download started",
|
||||||
|
"download_sucess": "Download success",
|
||||||
|
"download_sucess_android": "The media has been downloaded to DCIM/Immich",
|
||||||
"edit_date_time_dialog_date_time": "Dată și Oră",
|
"edit_date_time_dialog_date_time": "Dată și Oră",
|
||||||
"edit_date_time_dialog_timezone": "Fus orar",
|
"edit_date_time_dialog_timezone": "Fus orar",
|
||||||
"edit_image_title": "Edit",
|
"edit_image_title": "Edit",
|
||||||
|
|||||||
@@ -210,6 +210,10 @@
|
|||||||
"delete_shared_link_dialog_title": "Удалить общую ссылку",
|
"delete_shared_link_dialog_title": "Удалить общую ссылку",
|
||||||
"description_input_hint_text": "Добавить описание...",
|
"description_input_hint_text": "Добавить описание...",
|
||||||
"description_input_submit_error": "Не удалось обновить описание, проверьте логи, чтобы узнать причину",
|
"description_input_submit_error": "Не удалось обновить описание, проверьте логи, чтобы узнать причину",
|
||||||
|
"download_error": "Download Error",
|
||||||
|
"download_started": "Download started",
|
||||||
|
"download_sucess": "Download success",
|
||||||
|
"download_sucess_android": "The media has been downloaded to DCIM/Immich",
|
||||||
"edit_date_time_dialog_date_time": "Дата и время",
|
"edit_date_time_dialog_date_time": "Дата и время",
|
||||||
"edit_date_time_dialog_timezone": "Часовой пояс",
|
"edit_date_time_dialog_timezone": "Часовой пояс",
|
||||||
"edit_image_title": "Edit",
|
"edit_image_title": "Edit",
|
||||||
|
|||||||
@@ -210,6 +210,10 @@
|
|||||||
"delete_shared_link_dialog_title": "Odstrániť zdieľaný odkaz",
|
"delete_shared_link_dialog_title": "Odstrániť zdieľaný odkaz",
|
||||||
"description_input_hint_text": "Pridať popis...",
|
"description_input_hint_text": "Pridať popis...",
|
||||||
"description_input_submit_error": "Chyba pri aktualizovaní popisu, zobrazte log pre viac detailov",
|
"description_input_submit_error": "Chyba pri aktualizovaní popisu, zobrazte log pre viac detailov",
|
||||||
|
"download_error": "Download Error",
|
||||||
|
"download_started": "Download started",
|
||||||
|
"download_sucess": "Download success",
|
||||||
|
"download_sucess_android": "The media has been downloaded to DCIM/Immich",
|
||||||
"edit_date_time_dialog_date_time": "Dátum a čas",
|
"edit_date_time_dialog_date_time": "Dátum a čas",
|
||||||
"edit_date_time_dialog_timezone": "Časové pásmo",
|
"edit_date_time_dialog_timezone": "Časové pásmo",
|
||||||
"edit_image_title": "Edit",
|
"edit_image_title": "Edit",
|
||||||
|
|||||||
@@ -210,6 +210,10 @@
|
|||||||
"delete_shared_link_dialog_title": "Izbriši povezavo skupne rabe",
|
"delete_shared_link_dialog_title": "Izbriši povezavo skupne rabe",
|
||||||
"description_input_hint_text": "Dodaj opis ...",
|
"description_input_hint_text": "Dodaj opis ...",
|
||||||
"description_input_submit_error": "Napaka pri posodabljanju opisa, preverite dnevnik za več podrobnosti",
|
"description_input_submit_error": "Napaka pri posodabljanju opisa, preverite dnevnik za več podrobnosti",
|
||||||
|
"download_error": "Download Error",
|
||||||
|
"download_started": "Download started",
|
||||||
|
"download_sucess": "Download success",
|
||||||
|
"download_sucess_android": "The media has been downloaded to DCIM/Immich",
|
||||||
"edit_date_time_dialog_date_time": "Datum in ura",
|
"edit_date_time_dialog_date_time": "Datum in ura",
|
||||||
"edit_date_time_dialog_timezone": "Časovni pas",
|
"edit_date_time_dialog_timezone": "Časovni pas",
|
||||||
"edit_image_title": "Edit",
|
"edit_image_title": "Edit",
|
||||||
|
|||||||
@@ -210,6 +210,10 @@
|
|||||||
"delete_shared_link_dialog_title": "Delete Shared Link",
|
"delete_shared_link_dialog_title": "Delete Shared Link",
|
||||||
"description_input_hint_text": "Add description...",
|
"description_input_hint_text": "Add description...",
|
||||||
"description_input_submit_error": "Error updating description, check the log for more details",
|
"description_input_submit_error": "Error updating description, check the log for more details",
|
||||||
|
"download_error": "Download Error",
|
||||||
|
"download_started": "Download started",
|
||||||
|
"download_sucess": "Download success",
|
||||||
|
"download_sucess_android": "The media has been downloaded to DCIM/Immich",
|
||||||
"edit_date_time_dialog_date_time": "Date and Time",
|
"edit_date_time_dialog_date_time": "Date and Time",
|
||||||
"edit_date_time_dialog_timezone": "Timezone",
|
"edit_date_time_dialog_timezone": "Timezone",
|
||||||
"edit_image_title": "Edit",
|
"edit_image_title": "Edit",
|
||||||
|
|||||||
@@ -210,6 +210,10 @@
|
|||||||
"delete_shared_link_dialog_title": "Delete Shared Link",
|
"delete_shared_link_dialog_title": "Delete Shared Link",
|
||||||
"description_input_hint_text": "Add description...",
|
"description_input_hint_text": "Add description...",
|
||||||
"description_input_submit_error": "Error updating description, check the log for more details",
|
"description_input_submit_error": "Error updating description, check the log for more details",
|
||||||
|
"download_error": "Download Error",
|
||||||
|
"download_started": "Download started",
|
||||||
|
"download_sucess": "Download success",
|
||||||
|
"download_sucess_android": "The media has been downloaded to DCIM/Immich",
|
||||||
"edit_date_time_dialog_date_time": "Date and Time",
|
"edit_date_time_dialog_date_time": "Date and Time",
|
||||||
"edit_date_time_dialog_timezone": "Timezone",
|
"edit_date_time_dialog_timezone": "Timezone",
|
||||||
"edit_image_title": "Edit",
|
"edit_image_title": "Edit",
|
||||||
|
|||||||
@@ -210,6 +210,10 @@
|
|||||||
"delete_shared_link_dialog_title": "Delete Shared Link",
|
"delete_shared_link_dialog_title": "Delete Shared Link",
|
||||||
"description_input_hint_text": "Add description...",
|
"description_input_hint_text": "Add description...",
|
||||||
"description_input_submit_error": "Error updating description, check the log for more details",
|
"description_input_submit_error": "Error updating description, check the log for more details",
|
||||||
|
"download_error": "Download Error",
|
||||||
|
"download_started": "Download started",
|
||||||
|
"download_sucess": "Download success",
|
||||||
|
"download_sucess_android": "The media has been downloaded to DCIM/Immich",
|
||||||
"edit_date_time_dialog_date_time": "Date and Time",
|
"edit_date_time_dialog_date_time": "Date and Time",
|
||||||
"edit_date_time_dialog_timezone": "Timezone",
|
"edit_date_time_dialog_timezone": "Timezone",
|
||||||
"edit_image_title": "Edit",
|
"edit_image_title": "Edit",
|
||||||
|
|||||||
@@ -210,6 +210,10 @@
|
|||||||
"delete_shared_link_dialog_title": "Ta Bort Delad Länk",
|
"delete_shared_link_dialog_title": "Ta Bort Delad Länk",
|
||||||
"description_input_hint_text": "Lägg till beskrivning...",
|
"description_input_hint_text": "Lägg till beskrivning...",
|
||||||
"description_input_submit_error": "Fel vid uppdatering av beskrivning, se loggen för fler detaljer",
|
"description_input_submit_error": "Fel vid uppdatering av beskrivning, se loggen för fler detaljer",
|
||||||
|
"download_error": "Fel vid nedladdning",
|
||||||
|
"download_started": "Nedladdning påbörjad",
|
||||||
|
"download_sucess": "Nedladdning lyckades",
|
||||||
|
"download_sucess_android": "Media har laddats ner till DCIM/Immich",
|
||||||
"edit_date_time_dialog_date_time": "Datum och Tid",
|
"edit_date_time_dialog_date_time": "Datum och Tid",
|
||||||
"edit_date_time_dialog_timezone": "Tidszon",
|
"edit_date_time_dialog_timezone": "Tidszon",
|
||||||
"edit_image_title": "Redigera",
|
"edit_image_title": "Redigera",
|
||||||
|
|||||||
@@ -210,6 +210,10 @@
|
|||||||
"delete_shared_link_dialog_title": "ลบลิงก์ที่แชร์",
|
"delete_shared_link_dialog_title": "ลบลิงก์ที่แชร์",
|
||||||
"description_input_hint_text": "เพื่มรายละเอียด...",
|
"description_input_hint_text": "เพื่มรายละเอียด...",
|
||||||
"description_input_submit_error": "อัพเดตรายละเอียดผิดพลาด ตรวจสอบ log เพื่อรายละเอียดเพิ่มเติม",
|
"description_input_submit_error": "อัพเดตรายละเอียดผิดพลาด ตรวจสอบ log เพื่อรายละเอียดเพิ่มเติม",
|
||||||
|
"download_error": "Download Error",
|
||||||
|
"download_started": "Download started",
|
||||||
|
"download_sucess": "Download success",
|
||||||
|
"download_sucess_android": "The media has been downloaded to DCIM/Immich",
|
||||||
"edit_date_time_dialog_date_time": "วันและเวลา",
|
"edit_date_time_dialog_date_time": "วันและเวลา",
|
||||||
"edit_date_time_dialog_timezone": "เขดเวลา",
|
"edit_date_time_dialog_timezone": "เขดเวลา",
|
||||||
"edit_image_title": "Edit",
|
"edit_image_title": "Edit",
|
||||||
|
|||||||
@@ -210,6 +210,10 @@
|
|||||||
"delete_shared_link_dialog_title": "Видалити спільне посилання",
|
"delete_shared_link_dialog_title": "Видалити спільне посилання",
|
||||||
"description_input_hint_text": "Додати опис...",
|
"description_input_hint_text": "Додати опис...",
|
||||||
"description_input_submit_error": "Помилка оновлення опису, перевірте логи для подробиць",
|
"description_input_submit_error": "Помилка оновлення опису, перевірте логи для подробиць",
|
||||||
|
"download_error": "Download Error",
|
||||||
|
"download_started": "Download started",
|
||||||
|
"download_sucess": "Download success",
|
||||||
|
"download_sucess_android": "The media has been downloaded to DCIM/Immich",
|
||||||
"edit_date_time_dialog_date_time": "Дата і час",
|
"edit_date_time_dialog_date_time": "Дата і час",
|
||||||
"edit_date_time_dialog_timezone": "Часовий пояс",
|
"edit_date_time_dialog_timezone": "Часовий пояс",
|
||||||
"edit_image_title": "Edit",
|
"edit_image_title": "Edit",
|
||||||
|
|||||||
@@ -94,7 +94,7 @@
|
|||||||
"backup_controller_page_background_turn_on": "Bật dịch vụ nền",
|
"backup_controller_page_background_turn_on": "Bật dịch vụ nền",
|
||||||
"backup_controller_page_background_wifi": "Chỉ khi dùng Wi-Fi",
|
"backup_controller_page_background_wifi": "Chỉ khi dùng Wi-Fi",
|
||||||
"backup_controller_page_backup": "Sao lưu",
|
"backup_controller_page_backup": "Sao lưu",
|
||||||
"backup_controller_page_backup_selected": "Đã chọn:",
|
"backup_controller_page_backup_selected": "Đã chọn: ",
|
||||||
"backup_controller_page_backup_sub": "Ảnh và video đã sao lưu",
|
"backup_controller_page_backup_sub": "Ảnh và video đã sao lưu",
|
||||||
"backup_controller_page_cancel": "Từ chối",
|
"backup_controller_page_cancel": "Từ chối",
|
||||||
"backup_controller_page_created": "Tạo vào: {}",
|
"backup_controller_page_created": "Tạo vào: {}",
|
||||||
@@ -210,6 +210,10 @@
|
|||||||
"delete_shared_link_dialog_title": "Xoá liên kết đã chia sẻ",
|
"delete_shared_link_dialog_title": "Xoá liên kết đã chia sẻ",
|
||||||
"description_input_hint_text": "Thêm mô tả...",
|
"description_input_hint_text": "Thêm mô tả...",
|
||||||
"description_input_submit_error": "Cập nhật mô tả không thành công, vui lòng kiểm tra nhật ký để biết thêm chi tiết",
|
"description_input_submit_error": "Cập nhật mô tả không thành công, vui lòng kiểm tra nhật ký để biết thêm chi tiết",
|
||||||
|
"download_error": "Download Error",
|
||||||
|
"download_started": "Download started",
|
||||||
|
"download_sucess": "Download success",
|
||||||
|
"download_sucess_android": "The media has been downloaded to DCIM/Immich",
|
||||||
"edit_date_time_dialog_date_time": "Ngày và Giờ",
|
"edit_date_time_dialog_date_time": "Ngày và Giờ",
|
||||||
"edit_date_time_dialog_timezone": "Múi giờ",
|
"edit_date_time_dialog_timezone": "Múi giờ",
|
||||||
"edit_image_title": "Sửa",
|
"edit_image_title": "Sửa",
|
||||||
|
|||||||
@@ -210,6 +210,10 @@
|
|||||||
"delete_shared_link_dialog_title": "删除共享链接",
|
"delete_shared_link_dialog_title": "删除共享链接",
|
||||||
"description_input_hint_text": "添加描述...",
|
"description_input_hint_text": "添加描述...",
|
||||||
"description_input_submit_error": "更新描述时出错,请检查日志以获取更多详细信息",
|
"description_input_submit_error": "更新描述时出错,请检查日志以获取更多详细信息",
|
||||||
|
"download_error": "下载出错",
|
||||||
|
"download_started": "开始下载",
|
||||||
|
"download_sucess": "下载成功",
|
||||||
|
"download_sucess_android": "媒体已下载至 DCIM/Immich",
|
||||||
"edit_date_time_dialog_date_time": "日期和时间",
|
"edit_date_time_dialog_date_time": "日期和时间",
|
||||||
"edit_date_time_dialog_timezone": "时区",
|
"edit_date_time_dialog_timezone": "时区",
|
||||||
"edit_image_title": "编辑",
|
"edit_image_title": "编辑",
|
||||||
|
|||||||
@@ -210,6 +210,10 @@
|
|||||||
"delete_shared_link_dialog_title": "删除共享链接",
|
"delete_shared_link_dialog_title": "删除共享链接",
|
||||||
"description_input_hint_text": "添加描述...",
|
"description_input_hint_text": "添加描述...",
|
||||||
"description_input_submit_error": "更新描述时出错,请检查日志以获取更多详细信息",
|
"description_input_submit_error": "更新描述时出错,请检查日志以获取更多详细信息",
|
||||||
|
"download_error": "下载出错",
|
||||||
|
"download_started": "开始下载",
|
||||||
|
"download_sucess": "下载成功",
|
||||||
|
"download_sucess_android": "媒体已下载至 DCIM/Immich",
|
||||||
"edit_date_time_dialog_date_time": "日期和时间",
|
"edit_date_time_dialog_date_time": "日期和时间",
|
||||||
"edit_date_time_dialog_timezone": "时区",
|
"edit_date_time_dialog_timezone": "时区",
|
||||||
"edit_image_title": "编辑",
|
"edit_image_title": "编辑",
|
||||||
|
|||||||
@@ -210,6 +210,10 @@
|
|||||||
"delete_shared_link_dialog_title": "Delete Shared Link",
|
"delete_shared_link_dialog_title": "Delete Shared Link",
|
||||||
"description_input_hint_text": "Add description...",
|
"description_input_hint_text": "Add description...",
|
||||||
"description_input_submit_error": "Error updating description, check the log for more details",
|
"description_input_submit_error": "Error updating description, check the log for more details",
|
||||||
|
"download_error": "Download Error",
|
||||||
|
"download_started": "Download started",
|
||||||
|
"download_sucess": "Download success",
|
||||||
|
"download_sucess_android": "The media has been downloaded to DCIM/Immich",
|
||||||
"edit_date_time_dialog_date_time": "Date and Time",
|
"edit_date_time_dialog_date_time": "Date and Time",
|
||||||
"edit_date_time_dialog_timezone": "Timezone",
|
"edit_date_time_dialog_timezone": "Timezone",
|
||||||
"edit_image_title": "Edit",
|
"edit_image_title": "Edit",
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ platform :ios do
|
|||||||
desc "iOS Release"
|
desc "iOS Release"
|
||||||
lane :release do
|
lane :release do
|
||||||
increment_version_number(
|
increment_version_number(
|
||||||
version_number: "1.113.1"
|
version_number: "1.114.0"
|
||||||
)
|
)
|
||||||
increment_build_number(
|
increment_build_number(
|
||||||
build_number: latest_testflight_build_number + 1,
|
build_number: latest_testflight_build_number + 1,
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:easy_localization/easy_localization.dart';
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:fluttertoast/fluttertoast.dart';
|
import 'package:fluttertoast/fluttertoast.dart';
|
||||||
@@ -31,19 +33,21 @@ class ImageViewerStateNotifier extends StateNotifier<AssetViewerPageState> {
|
|||||||
|
|
||||||
ImmichToast.show(
|
ImmichToast.show(
|
||||||
context: context,
|
context: context,
|
||||||
msg: 'image_viewer_page_state_provider_download_started'.tr(),
|
msg: 'download_started'.tr(),
|
||||||
toastType: ToastType.info,
|
toastType: ToastType.info,
|
||||||
gravity: ToastGravity.BOTTOM,
|
gravity: ToastGravity.BOTTOM,
|
||||||
);
|
);
|
||||||
|
|
||||||
bool isSuccess = await _imageViewerService.downloadAssetToDevice(asset);
|
bool isSuccess = await _imageViewerService.downloadAsset(asset);
|
||||||
|
|
||||||
if (isSuccess) {
|
if (isSuccess) {
|
||||||
state = state.copyWith(downloadAssetStatus: DownloadAssetStatus.success);
|
state = state.copyWith(downloadAssetStatus: DownloadAssetStatus.success);
|
||||||
|
|
||||||
ImmichToast.show(
|
ImmichToast.show(
|
||||||
context: context,
|
context: context,
|
||||||
msg: 'image_viewer_page_state_provider_download_success'.tr(),
|
msg: Platform.isAndroid
|
||||||
|
? 'download_sucess_android'.tr()
|
||||||
|
: 'download_sucess'.tr(),
|
||||||
toastType: ToastType.success,
|
toastType: ToastType.success,
|
||||||
gravity: ToastGravity.BOTTOM,
|
gravity: ToastGravity.BOTTOM,
|
||||||
);
|
);
|
||||||
@@ -52,7 +56,7 @@ class ImageViewerStateNotifier extends StateNotifier<AssetViewerPageState> {
|
|||||||
state = state.copyWith(downloadAssetStatus: DownloadAssetStatus.error);
|
state = state.copyWith(downloadAssetStatus: DownloadAssetStatus.error);
|
||||||
ImmichToast.show(
|
ImmichToast.show(
|
||||||
context: context,
|
context: context,
|
||||||
msg: 'image_viewer_page_state_provider_download_error'.tr(),
|
msg: 'download_error'.tr(),
|
||||||
toastType: ToastType.error,
|
toastType: ToastType.error,
|
||||||
gravity: ToastGravity.BOTTOM,
|
gravity: ToastGravity.BOTTOM,
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
|
|||||||
import 'package:immich_mobile/entities/asset.entity.dart';
|
import 'package:immich_mobile/entities/asset.entity.dart';
|
||||||
import 'package:immich_mobile/entities/etag.entity.dart';
|
import 'package:immich_mobile/entities/etag.entity.dart';
|
||||||
import 'package:immich_mobile/entities/exif_info.entity.dart';
|
import 'package:immich_mobile/entities/exif_info.entity.dart';
|
||||||
import 'package:immich_mobile/entities/store.entity.dart';
|
|
||||||
import 'package:immich_mobile/entities/user.entity.dart';
|
import 'package:immich_mobile/entities/user.entity.dart';
|
||||||
import 'package:immich_mobile/models/backup/backup_candidate.model.dart';
|
import 'package:immich_mobile/models/backup/backup_candidate.model.dart';
|
||||||
import 'package:immich_mobile/providers/api.provider.dart';
|
import 'package:immich_mobile/providers/api.provider.dart';
|
||||||
@@ -309,18 +308,6 @@ class AssetService {
|
|||||||
useTimeFilter: false,
|
useTimeFilter: false,
|
||||||
);
|
);
|
||||||
|
|
||||||
final duplicates = await _apiService.assetsApi.checkExistingAssets(
|
|
||||||
CheckExistingAssetsDto(
|
|
||||||
deviceAssetIds: candidates.map((c) => c.asset.id).toList(),
|
|
||||||
deviceId: Store.get(StoreKey.deviceId),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
if (duplicates != null) {
|
|
||||||
candidates
|
|
||||||
.removeWhere((c) => !duplicates.existingIds.contains(c.asset.id));
|
|
||||||
}
|
|
||||||
|
|
||||||
await refreshRemoteAssets();
|
await refreshRemoteAssets();
|
||||||
final remoteAssets = await _db.assets
|
final remoteAssets = await _db.assets
|
||||||
.where()
|
.where()
|
||||||
|
|||||||
@@ -484,7 +484,7 @@ class BackupService {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
if (shouldSyncAlbums && !isDuplicate) {
|
if (shouldSyncAlbums) {
|
||||||
await _albumService.syncUploadAlbums(
|
await _albumService.syncUploadAlbums(
|
||||||
candidate.albumNames,
|
candidate.albumNames,
|
||||||
[responseBody['id'] as String],
|
[responseBody['id'] as String],
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ class ImageViewerService {
|
|||||||
|
|
||||||
ImageViewerService(this._apiService);
|
ImageViewerService(this._apiService);
|
||||||
|
|
||||||
Future<bool> downloadAssetToDevice(Asset asset) async {
|
Future<bool> downloadAsset(Asset asset) async {
|
||||||
File? imageFile;
|
File? imageFile;
|
||||||
File? videoFile;
|
File? videoFile;
|
||||||
try {
|
try {
|
||||||
@@ -82,18 +82,23 @@ class ImageViewerService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
final AssetEntity? entity;
|
final AssetEntity? entity;
|
||||||
|
final relativePath = Platform.isAndroid ? 'DCIM/Immich' : null;
|
||||||
|
|
||||||
if (asset.isImage) {
|
if (asset.isImage) {
|
||||||
entity = await PhotoManager.editor.saveImage(
|
entity = await PhotoManager.editor.saveImage(
|
||||||
res.bodyBytes,
|
res.bodyBytes,
|
||||||
title: asset.fileName,
|
title: asset.fileName,
|
||||||
|
relativePath: relativePath,
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
final tempDir = await getTemporaryDirectory();
|
final tempDir = await getTemporaryDirectory();
|
||||||
videoFile = await File('${tempDir.path}/${asset.fileName}').create();
|
videoFile = await File('${tempDir.path}/${asset.fileName}').create();
|
||||||
videoFile.writeAsBytesSync(res.bodyBytes);
|
videoFile.writeAsBytesSync(res.bodyBytes);
|
||||||
entity = await PhotoManager.editor
|
entity = await PhotoManager.editor.saveVideo(
|
||||||
.saveVideo(videoFile, title: asset.fileName);
|
videoFile,
|
||||||
|
title: asset.fileName,
|
||||||
|
relativePath: relativePath,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
return entity != null;
|
return entity != null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -93,6 +93,10 @@ class GalleryAppBar extends ConsumerWidget {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handleDownloadAsset() {
|
||||||
|
ref.read(imageViewerStateProvider.notifier).downloadAsset(asset, context);
|
||||||
|
}
|
||||||
|
|
||||||
return IgnorePointer(
|
return IgnorePointer(
|
||||||
ignoring: !ref.watch(showControlsProvider),
|
ignoring: !ref.watch(showControlsProvider),
|
||||||
child: AnimatedOpacity(
|
child: AnimatedOpacity(
|
||||||
@@ -109,13 +113,7 @@ class GalleryAppBar extends ConsumerWidget {
|
|||||||
onFavorite: toggleFavorite,
|
onFavorite: toggleFavorite,
|
||||||
onRestorePressed: () => handleRestore(asset),
|
onRestorePressed: () => handleRestore(asset),
|
||||||
onUploadPressed: asset.isLocal ? () => handleUpload(asset) : null,
|
onUploadPressed: asset.isLocal ? () => handleUpload(asset) : null,
|
||||||
onDownloadPressed: asset.isLocal
|
onDownloadPressed: asset.isLocal ? null : handleDownloadAsset,
|
||||||
? null
|
|
||||||
: () =>
|
|
||||||
ref.read(imageViewerStateProvider.notifier).downloadAsset(
|
|
||||||
asset,
|
|
||||||
context,
|
|
||||||
),
|
|
||||||
onToggleMotionVideo: onToggleMotionVideo,
|
onToggleMotionVideo: onToggleMotionVideo,
|
||||||
onAddToAlbumPressed: () => addToAlbum(asset),
|
onAddToAlbumPressed: () => addToAlbum(asset),
|
||||||
onActivitiesPressed: handleActivities,
|
onActivitiesPressed: handleActivities,
|
||||||
|
|||||||
4
mobile/openapi/.gitignore
vendored
4
mobile/openapi/.gitignore
vendored
@@ -3,7 +3,9 @@
|
|||||||
.dart_tool/
|
.dart_tool/
|
||||||
.packages
|
.packages
|
||||||
build/
|
build/
|
||||||
pubspec.lock # Except for application packages
|
|
||||||
|
# Except for application packages
|
||||||
|
pubspec.lock
|
||||||
|
|
||||||
doc/api/
|
doc/api/
|
||||||
|
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
7.5.0
|
7.8.0
|
||||||
|
|||||||
7
mobile/openapi/README.md
generated
7
mobile/openapi/README.md
generated
@@ -3,8 +3,8 @@ Immich API
|
|||||||
|
|
||||||
This Dart package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
|
This Dart package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
|
||||||
|
|
||||||
- API version: 1.113.1
|
- API version: 1.114.0
|
||||||
- Generator version: 7.5.0
|
- Generator version: 7.8.0
|
||||||
- Build package: org.openapitools.codegen.languages.DartClientCodegen
|
- Build package: org.openapitools.codegen.languages.DartClientCodegen
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
@@ -407,11 +407,13 @@ Class | Method | HTTP request | Description
|
|||||||
- [SignUpDto](doc//SignUpDto.md)
|
- [SignUpDto](doc//SignUpDto.md)
|
||||||
- [SmartInfoResponseDto](doc//SmartInfoResponseDto.md)
|
- [SmartInfoResponseDto](doc//SmartInfoResponseDto.md)
|
||||||
- [SmartSearchDto](doc//SmartSearchDto.md)
|
- [SmartSearchDto](doc//SmartSearchDto.md)
|
||||||
|
- [SourceType](doc//SourceType.md)
|
||||||
- [StackCreateDto](doc//StackCreateDto.md)
|
- [StackCreateDto](doc//StackCreateDto.md)
|
||||||
- [StackResponseDto](doc//StackResponseDto.md)
|
- [StackResponseDto](doc//StackResponseDto.md)
|
||||||
- [StackUpdateDto](doc//StackUpdateDto.md)
|
- [StackUpdateDto](doc//StackUpdateDto.md)
|
||||||
- [SystemConfigDto](doc//SystemConfigDto.md)
|
- [SystemConfigDto](doc//SystemConfigDto.md)
|
||||||
- [SystemConfigFFmpegDto](doc//SystemConfigFFmpegDto.md)
|
- [SystemConfigFFmpegDto](doc//SystemConfigFFmpegDto.md)
|
||||||
|
- [SystemConfigFacesDto](doc//SystemConfigFacesDto.md)
|
||||||
- [SystemConfigImageDto](doc//SystemConfigImageDto.md)
|
- [SystemConfigImageDto](doc//SystemConfigImageDto.md)
|
||||||
- [SystemConfigJobDto](doc//SystemConfigJobDto.md)
|
- [SystemConfigJobDto](doc//SystemConfigJobDto.md)
|
||||||
- [SystemConfigLibraryDto](doc//SystemConfigLibraryDto.md)
|
- [SystemConfigLibraryDto](doc//SystemConfigLibraryDto.md)
|
||||||
@@ -420,6 +422,7 @@ Class | Method | HTTP request | Description
|
|||||||
- [SystemConfigLoggingDto](doc//SystemConfigLoggingDto.md)
|
- [SystemConfigLoggingDto](doc//SystemConfigLoggingDto.md)
|
||||||
- [SystemConfigMachineLearningDto](doc//SystemConfigMachineLearningDto.md)
|
- [SystemConfigMachineLearningDto](doc//SystemConfigMachineLearningDto.md)
|
||||||
- [SystemConfigMapDto](doc//SystemConfigMapDto.md)
|
- [SystemConfigMapDto](doc//SystemConfigMapDto.md)
|
||||||
|
- [SystemConfigMetadataDto](doc//SystemConfigMetadataDto.md)
|
||||||
- [SystemConfigNewVersionCheckDto](doc//SystemConfigNewVersionCheckDto.md)
|
- [SystemConfigNewVersionCheckDto](doc//SystemConfigNewVersionCheckDto.md)
|
||||||
- [SystemConfigNotificationsDto](doc//SystemConfigNotificationsDto.md)
|
- [SystemConfigNotificationsDto](doc//SystemConfigNotificationsDto.md)
|
||||||
- [SystemConfigOAuthDto](doc//SystemConfigOAuthDto.md)
|
- [SystemConfigOAuthDto](doc//SystemConfigOAuthDto.md)
|
||||||
|
|||||||
3
mobile/openapi/lib/api.dart
generated
3
mobile/openapi/lib/api.dart
generated
@@ -221,11 +221,13 @@ part 'model/shared_link_type.dart';
|
|||||||
part 'model/sign_up_dto.dart';
|
part 'model/sign_up_dto.dart';
|
||||||
part 'model/smart_info_response_dto.dart';
|
part 'model/smart_info_response_dto.dart';
|
||||||
part 'model/smart_search_dto.dart';
|
part 'model/smart_search_dto.dart';
|
||||||
|
part 'model/source_type.dart';
|
||||||
part 'model/stack_create_dto.dart';
|
part 'model/stack_create_dto.dart';
|
||||||
part 'model/stack_response_dto.dart';
|
part 'model/stack_response_dto.dart';
|
||||||
part 'model/stack_update_dto.dart';
|
part 'model/stack_update_dto.dart';
|
||||||
part 'model/system_config_dto.dart';
|
part 'model/system_config_dto.dart';
|
||||||
part 'model/system_config_f_fmpeg_dto.dart';
|
part 'model/system_config_f_fmpeg_dto.dart';
|
||||||
|
part 'model/system_config_faces_dto.dart';
|
||||||
part 'model/system_config_image_dto.dart';
|
part 'model/system_config_image_dto.dart';
|
||||||
part 'model/system_config_job_dto.dart';
|
part 'model/system_config_job_dto.dart';
|
||||||
part 'model/system_config_library_dto.dart';
|
part 'model/system_config_library_dto.dart';
|
||||||
@@ -234,6 +236,7 @@ part 'model/system_config_library_watch_dto.dart';
|
|||||||
part 'model/system_config_logging_dto.dart';
|
part 'model/system_config_logging_dto.dart';
|
||||||
part 'model/system_config_machine_learning_dto.dart';
|
part 'model/system_config_machine_learning_dto.dart';
|
||||||
part 'model/system_config_map_dto.dart';
|
part 'model/system_config_map_dto.dart';
|
||||||
|
part 'model/system_config_metadata_dto.dart';
|
||||||
part 'model/system_config_new_version_check_dto.dart';
|
part 'model/system_config_new_version_check_dto.dart';
|
||||||
part 'model/system_config_notifications_dto.dart';
|
part 'model/system_config_notifications_dto.dart';
|
||||||
part 'model/system_config_o_auth_dto.dart';
|
part 'model/system_config_o_auth_dto.dart';
|
||||||
|
|||||||
6
mobile/openapi/lib/api_client.dart
generated
6
mobile/openapi/lib/api_client.dart
generated
@@ -497,6 +497,8 @@ class ApiClient {
|
|||||||
return SmartInfoResponseDto.fromJson(value);
|
return SmartInfoResponseDto.fromJson(value);
|
||||||
case 'SmartSearchDto':
|
case 'SmartSearchDto':
|
||||||
return SmartSearchDto.fromJson(value);
|
return SmartSearchDto.fromJson(value);
|
||||||
|
case 'SourceType':
|
||||||
|
return SourceTypeTypeTransformer().decode(value);
|
||||||
case 'StackCreateDto':
|
case 'StackCreateDto':
|
||||||
return StackCreateDto.fromJson(value);
|
return StackCreateDto.fromJson(value);
|
||||||
case 'StackResponseDto':
|
case 'StackResponseDto':
|
||||||
@@ -507,6 +509,8 @@ class ApiClient {
|
|||||||
return SystemConfigDto.fromJson(value);
|
return SystemConfigDto.fromJson(value);
|
||||||
case 'SystemConfigFFmpegDto':
|
case 'SystemConfigFFmpegDto':
|
||||||
return SystemConfigFFmpegDto.fromJson(value);
|
return SystemConfigFFmpegDto.fromJson(value);
|
||||||
|
case 'SystemConfigFacesDto':
|
||||||
|
return SystemConfigFacesDto.fromJson(value);
|
||||||
case 'SystemConfigImageDto':
|
case 'SystemConfigImageDto':
|
||||||
return SystemConfigImageDto.fromJson(value);
|
return SystemConfigImageDto.fromJson(value);
|
||||||
case 'SystemConfigJobDto':
|
case 'SystemConfigJobDto':
|
||||||
@@ -523,6 +527,8 @@ class ApiClient {
|
|||||||
return SystemConfigMachineLearningDto.fromJson(value);
|
return SystemConfigMachineLearningDto.fromJson(value);
|
||||||
case 'SystemConfigMapDto':
|
case 'SystemConfigMapDto':
|
||||||
return SystemConfigMapDto.fromJson(value);
|
return SystemConfigMapDto.fromJson(value);
|
||||||
|
case 'SystemConfigMetadataDto':
|
||||||
|
return SystemConfigMetadataDto.fromJson(value);
|
||||||
case 'SystemConfigNewVersionCheckDto':
|
case 'SystemConfigNewVersionCheckDto':
|
||||||
return SystemConfigNewVersionCheckDto.fromJson(value);
|
return SystemConfigNewVersionCheckDto.fromJson(value);
|
||||||
case 'SystemConfigNotificationsDto':
|
case 'SystemConfigNotificationsDto':
|
||||||
|
|||||||
3
mobile/openapi/lib/api_helper.dart
generated
3
mobile/openapi/lib/api_helper.dart
generated
@@ -127,6 +127,9 @@ String parameterToString(dynamic value) {
|
|||||||
if (value is SharedLinkType) {
|
if (value is SharedLinkType) {
|
||||||
return SharedLinkTypeTypeTransformer().encode(value).toString();
|
return SharedLinkTypeTypeTransformer().encode(value).toString();
|
||||||
}
|
}
|
||||||
|
if (value is SourceType) {
|
||||||
|
return SourceTypeTypeTransformer().encode(value).toString();
|
||||||
|
}
|
||||||
if (value is TimeBucketSize) {
|
if (value is TimeBucketSize) {
|
||||||
return TimeBucketSizeTypeTransformer().encode(value).toString();
|
return TimeBucketSizeTypeTransformer().encode(value).toString();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ class AssetFaceResponseDto {
|
|||||||
required this.imageHeight,
|
required this.imageHeight,
|
||||||
required this.imageWidth,
|
required this.imageWidth,
|
||||||
required this.person,
|
required this.person,
|
||||||
|
this.sourceType,
|
||||||
});
|
});
|
||||||
|
|
||||||
int boundingBoxX1;
|
int boundingBoxX1;
|
||||||
@@ -39,6 +40,14 @@ class AssetFaceResponseDto {
|
|||||||
|
|
||||||
PersonResponseDto? person;
|
PersonResponseDto? person;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Please note: This property should have been non-nullable! Since the specification file
|
||||||
|
/// does not include a default value (using the "default:" property), however, the generated
|
||||||
|
/// source code must fall back to having a nullable type.
|
||||||
|
/// Consider adding a "default:" property in the specification file to hide this note.
|
||||||
|
///
|
||||||
|
SourceType? sourceType;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool operator ==(Object other) => identical(this, other) || other is AssetFaceResponseDto &&
|
bool operator ==(Object other) => identical(this, other) || other is AssetFaceResponseDto &&
|
||||||
other.boundingBoxX1 == boundingBoxX1 &&
|
other.boundingBoxX1 == boundingBoxX1 &&
|
||||||
@@ -48,7 +57,8 @@ class AssetFaceResponseDto {
|
|||||||
other.id == id &&
|
other.id == id &&
|
||||||
other.imageHeight == imageHeight &&
|
other.imageHeight == imageHeight &&
|
||||||
other.imageWidth == imageWidth &&
|
other.imageWidth == imageWidth &&
|
||||||
other.person == person;
|
other.person == person &&
|
||||||
|
other.sourceType == sourceType;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
int get hashCode =>
|
int get hashCode =>
|
||||||
@@ -60,10 +70,11 @@ class AssetFaceResponseDto {
|
|||||||
(id.hashCode) +
|
(id.hashCode) +
|
||||||
(imageHeight.hashCode) +
|
(imageHeight.hashCode) +
|
||||||
(imageWidth.hashCode) +
|
(imageWidth.hashCode) +
|
||||||
(person == null ? 0 : person!.hashCode);
|
(person == null ? 0 : person!.hashCode) +
|
||||||
|
(sourceType == null ? 0 : sourceType!.hashCode);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String toString() => 'AssetFaceResponseDto[boundingBoxX1=$boundingBoxX1, boundingBoxX2=$boundingBoxX2, boundingBoxY1=$boundingBoxY1, boundingBoxY2=$boundingBoxY2, id=$id, imageHeight=$imageHeight, imageWidth=$imageWidth, person=$person]';
|
String toString() => 'AssetFaceResponseDto[boundingBoxX1=$boundingBoxX1, boundingBoxX2=$boundingBoxX2, boundingBoxY1=$boundingBoxY1, boundingBoxY2=$boundingBoxY2, id=$id, imageHeight=$imageHeight, imageWidth=$imageWidth, person=$person, sourceType=$sourceType]';
|
||||||
|
|
||||||
Map<String, dynamic> toJson() {
|
Map<String, dynamic> toJson() {
|
||||||
final json = <String, dynamic>{};
|
final json = <String, dynamic>{};
|
||||||
@@ -79,6 +90,11 @@ class AssetFaceResponseDto {
|
|||||||
} else {
|
} else {
|
||||||
// json[r'person'] = null;
|
// json[r'person'] = null;
|
||||||
}
|
}
|
||||||
|
if (this.sourceType != null) {
|
||||||
|
json[r'sourceType'] = this.sourceType;
|
||||||
|
} else {
|
||||||
|
// json[r'sourceType'] = null;
|
||||||
|
}
|
||||||
return json;
|
return json;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -98,6 +114,7 @@ class AssetFaceResponseDto {
|
|||||||
imageHeight: mapValueOfType<int>(json, r'imageHeight')!,
|
imageHeight: mapValueOfType<int>(json, r'imageHeight')!,
|
||||||
imageWidth: mapValueOfType<int>(json, r'imageWidth')!,
|
imageWidth: mapValueOfType<int>(json, r'imageWidth')!,
|
||||||
person: PersonResponseDto.fromJson(json[r'person']),
|
person: PersonResponseDto.fromJson(json[r'person']),
|
||||||
|
sourceType: SourceType.fromJson(json[r'sourceType']),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ class AssetFaceWithoutPersonResponseDto {
|
|||||||
required this.id,
|
required this.id,
|
||||||
required this.imageHeight,
|
required this.imageHeight,
|
||||||
required this.imageWidth,
|
required this.imageWidth,
|
||||||
|
this.sourceType,
|
||||||
});
|
});
|
||||||
|
|
||||||
int boundingBoxX1;
|
int boundingBoxX1;
|
||||||
@@ -36,6 +37,14 @@ class AssetFaceWithoutPersonResponseDto {
|
|||||||
|
|
||||||
int imageWidth;
|
int imageWidth;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Please note: This property should have been non-nullable! Since the specification file
|
||||||
|
/// does not include a default value (using the "default:" property), however, the generated
|
||||||
|
/// source code must fall back to having a nullable type.
|
||||||
|
/// Consider adding a "default:" property in the specification file to hide this note.
|
||||||
|
///
|
||||||
|
SourceType? sourceType;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool operator ==(Object other) => identical(this, other) || other is AssetFaceWithoutPersonResponseDto &&
|
bool operator ==(Object other) => identical(this, other) || other is AssetFaceWithoutPersonResponseDto &&
|
||||||
other.boundingBoxX1 == boundingBoxX1 &&
|
other.boundingBoxX1 == boundingBoxX1 &&
|
||||||
@@ -44,7 +53,8 @@ class AssetFaceWithoutPersonResponseDto {
|
|||||||
other.boundingBoxY2 == boundingBoxY2 &&
|
other.boundingBoxY2 == boundingBoxY2 &&
|
||||||
other.id == id &&
|
other.id == id &&
|
||||||
other.imageHeight == imageHeight &&
|
other.imageHeight == imageHeight &&
|
||||||
other.imageWidth == imageWidth;
|
other.imageWidth == imageWidth &&
|
||||||
|
other.sourceType == sourceType;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
int get hashCode =>
|
int get hashCode =>
|
||||||
@@ -55,10 +65,11 @@ class AssetFaceWithoutPersonResponseDto {
|
|||||||
(boundingBoxY2.hashCode) +
|
(boundingBoxY2.hashCode) +
|
||||||
(id.hashCode) +
|
(id.hashCode) +
|
||||||
(imageHeight.hashCode) +
|
(imageHeight.hashCode) +
|
||||||
(imageWidth.hashCode);
|
(imageWidth.hashCode) +
|
||||||
|
(sourceType == null ? 0 : sourceType!.hashCode);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String toString() => 'AssetFaceWithoutPersonResponseDto[boundingBoxX1=$boundingBoxX1, boundingBoxX2=$boundingBoxX2, boundingBoxY1=$boundingBoxY1, boundingBoxY2=$boundingBoxY2, id=$id, imageHeight=$imageHeight, imageWidth=$imageWidth]';
|
String toString() => 'AssetFaceWithoutPersonResponseDto[boundingBoxX1=$boundingBoxX1, boundingBoxX2=$boundingBoxX2, boundingBoxY1=$boundingBoxY1, boundingBoxY2=$boundingBoxY2, id=$id, imageHeight=$imageHeight, imageWidth=$imageWidth, sourceType=$sourceType]';
|
||||||
|
|
||||||
Map<String, dynamic> toJson() {
|
Map<String, dynamic> toJson() {
|
||||||
final json = <String, dynamic>{};
|
final json = <String, dynamic>{};
|
||||||
@@ -69,6 +80,11 @@ class AssetFaceWithoutPersonResponseDto {
|
|||||||
json[r'id'] = this.id;
|
json[r'id'] = this.id;
|
||||||
json[r'imageHeight'] = this.imageHeight;
|
json[r'imageHeight'] = this.imageHeight;
|
||||||
json[r'imageWidth'] = this.imageWidth;
|
json[r'imageWidth'] = this.imageWidth;
|
||||||
|
if (this.sourceType != null) {
|
||||||
|
json[r'sourceType'] = this.sourceType;
|
||||||
|
} else {
|
||||||
|
// json[r'sourceType'] = null;
|
||||||
|
}
|
||||||
return json;
|
return json;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -87,6 +103,7 @@ class AssetFaceWithoutPersonResponseDto {
|
|||||||
id: mapValueOfType<String>(json, r'id')!,
|
id: mapValueOfType<String>(json, r'id')!,
|
||||||
imageHeight: mapValueOfType<int>(json, r'imageHeight')!,
|
imageHeight: mapValueOfType<int>(json, r'imageHeight')!,
|
||||||
imageWidth: mapValueOfType<int>(json, r'imageWidth')!,
|
imageWidth: mapValueOfType<int>(json, r'imageWidth')!,
|
||||||
|
sourceType: SourceType.fromJson(json[r'sourceType']),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
10
mobile/openapi/lib/model/server_features_dto.dart
generated
10
mobile/openapi/lib/model/server_features_dto.dart
generated
@@ -17,6 +17,7 @@ class ServerFeaturesDto {
|
|||||||
required this.duplicateDetection,
|
required this.duplicateDetection,
|
||||||
required this.email,
|
required this.email,
|
||||||
required this.facialRecognition,
|
required this.facialRecognition,
|
||||||
|
required this.importFaces,
|
||||||
required this.map,
|
required this.map,
|
||||||
required this.oauth,
|
required this.oauth,
|
||||||
required this.oauthAutoLaunch,
|
required this.oauthAutoLaunch,
|
||||||
@@ -36,6 +37,8 @@ class ServerFeaturesDto {
|
|||||||
|
|
||||||
bool facialRecognition;
|
bool facialRecognition;
|
||||||
|
|
||||||
|
bool importFaces;
|
||||||
|
|
||||||
bool map;
|
bool map;
|
||||||
|
|
||||||
bool oauth;
|
bool oauth;
|
||||||
@@ -60,6 +63,7 @@ class ServerFeaturesDto {
|
|||||||
other.duplicateDetection == duplicateDetection &&
|
other.duplicateDetection == duplicateDetection &&
|
||||||
other.email == email &&
|
other.email == email &&
|
||||||
other.facialRecognition == facialRecognition &&
|
other.facialRecognition == facialRecognition &&
|
||||||
|
other.importFaces == importFaces &&
|
||||||
other.map == map &&
|
other.map == map &&
|
||||||
other.oauth == oauth &&
|
other.oauth == oauth &&
|
||||||
other.oauthAutoLaunch == oauthAutoLaunch &&
|
other.oauthAutoLaunch == oauthAutoLaunch &&
|
||||||
@@ -77,6 +81,7 @@ class ServerFeaturesDto {
|
|||||||
(duplicateDetection.hashCode) +
|
(duplicateDetection.hashCode) +
|
||||||
(email.hashCode) +
|
(email.hashCode) +
|
||||||
(facialRecognition.hashCode) +
|
(facialRecognition.hashCode) +
|
||||||
|
(importFaces.hashCode) +
|
||||||
(map.hashCode) +
|
(map.hashCode) +
|
||||||
(oauth.hashCode) +
|
(oauth.hashCode) +
|
||||||
(oauthAutoLaunch.hashCode) +
|
(oauthAutoLaunch.hashCode) +
|
||||||
@@ -88,7 +93,7 @@ class ServerFeaturesDto {
|
|||||||
(trash.hashCode);
|
(trash.hashCode);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String toString() => 'ServerFeaturesDto[configFile=$configFile, duplicateDetection=$duplicateDetection, email=$email, facialRecognition=$facialRecognition, map=$map, oauth=$oauth, oauthAutoLaunch=$oauthAutoLaunch, passwordLogin=$passwordLogin, reverseGeocoding=$reverseGeocoding, search=$search, sidecar=$sidecar, smartSearch=$smartSearch, trash=$trash]';
|
String toString() => 'ServerFeaturesDto[configFile=$configFile, duplicateDetection=$duplicateDetection, email=$email, facialRecognition=$facialRecognition, importFaces=$importFaces, map=$map, oauth=$oauth, oauthAutoLaunch=$oauthAutoLaunch, passwordLogin=$passwordLogin, reverseGeocoding=$reverseGeocoding, search=$search, sidecar=$sidecar, smartSearch=$smartSearch, trash=$trash]';
|
||||||
|
|
||||||
Map<String, dynamic> toJson() {
|
Map<String, dynamic> toJson() {
|
||||||
final json = <String, dynamic>{};
|
final json = <String, dynamic>{};
|
||||||
@@ -96,6 +101,7 @@ class ServerFeaturesDto {
|
|||||||
json[r'duplicateDetection'] = this.duplicateDetection;
|
json[r'duplicateDetection'] = this.duplicateDetection;
|
||||||
json[r'email'] = this.email;
|
json[r'email'] = this.email;
|
||||||
json[r'facialRecognition'] = this.facialRecognition;
|
json[r'facialRecognition'] = this.facialRecognition;
|
||||||
|
json[r'importFaces'] = this.importFaces;
|
||||||
json[r'map'] = this.map;
|
json[r'map'] = this.map;
|
||||||
json[r'oauth'] = this.oauth;
|
json[r'oauth'] = this.oauth;
|
||||||
json[r'oauthAutoLaunch'] = this.oauthAutoLaunch;
|
json[r'oauthAutoLaunch'] = this.oauthAutoLaunch;
|
||||||
@@ -120,6 +126,7 @@ class ServerFeaturesDto {
|
|||||||
duplicateDetection: mapValueOfType<bool>(json, r'duplicateDetection')!,
|
duplicateDetection: mapValueOfType<bool>(json, r'duplicateDetection')!,
|
||||||
email: mapValueOfType<bool>(json, r'email')!,
|
email: mapValueOfType<bool>(json, r'email')!,
|
||||||
facialRecognition: mapValueOfType<bool>(json, r'facialRecognition')!,
|
facialRecognition: mapValueOfType<bool>(json, r'facialRecognition')!,
|
||||||
|
importFaces: mapValueOfType<bool>(json, r'importFaces')!,
|
||||||
map: mapValueOfType<bool>(json, r'map')!,
|
map: mapValueOfType<bool>(json, r'map')!,
|
||||||
oauth: mapValueOfType<bool>(json, r'oauth')!,
|
oauth: mapValueOfType<bool>(json, r'oauth')!,
|
||||||
oauthAutoLaunch: mapValueOfType<bool>(json, r'oauthAutoLaunch')!,
|
oauthAutoLaunch: mapValueOfType<bool>(json, r'oauthAutoLaunch')!,
|
||||||
@@ -180,6 +187,7 @@ class ServerFeaturesDto {
|
|||||||
'duplicateDetection',
|
'duplicateDetection',
|
||||||
'email',
|
'email',
|
||||||
'facialRecognition',
|
'facialRecognition',
|
||||||
|
'importFaces',
|
||||||
'map',
|
'map',
|
||||||
'oauth',
|
'oauth',
|
||||||
'oauthAutoLaunch',
|
'oauthAutoLaunch',
|
||||||
|
|||||||
85
mobile/openapi/lib/model/source_type.dart
generated
Normal file
85
mobile/openapi/lib/model/source_type.dart
generated
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
//
|
||||||
|
// AUTO-GENERATED FILE, DO NOT MODIFY!
|
||||||
|
//
|
||||||
|
// @dart=2.18
|
||||||
|
|
||||||
|
// ignore_for_file: unused_element, unused_import
|
||||||
|
// ignore_for_file: always_put_required_named_parameters_first
|
||||||
|
// ignore_for_file: constant_identifier_names
|
||||||
|
// ignore_for_file: lines_longer_than_80_chars
|
||||||
|
|
||||||
|
part of openapi.api;
|
||||||
|
|
||||||
|
|
||||||
|
class SourceType {
|
||||||
|
/// Instantiate a new enum with the provided [value].
|
||||||
|
const SourceType._(this.value);
|
||||||
|
|
||||||
|
/// The underlying value of this enum member.
|
||||||
|
final String value;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() => value;
|
||||||
|
|
||||||
|
String toJson() => value;
|
||||||
|
|
||||||
|
static const machineLearning = SourceType._(r'machine-learning');
|
||||||
|
static const exif = SourceType._(r'exif');
|
||||||
|
|
||||||
|
/// List of all possible values in this [enum][SourceType].
|
||||||
|
static const values = <SourceType>[
|
||||||
|
machineLearning,
|
||||||
|
exif,
|
||||||
|
];
|
||||||
|
|
||||||
|
static SourceType? fromJson(dynamic value) => SourceTypeTypeTransformer().decode(value);
|
||||||
|
|
||||||
|
static List<SourceType> listFromJson(dynamic json, {bool growable = false,}) {
|
||||||
|
final result = <SourceType>[];
|
||||||
|
if (json is List && json.isNotEmpty) {
|
||||||
|
for (final row in json) {
|
||||||
|
final value = SourceType.fromJson(row);
|
||||||
|
if (value != null) {
|
||||||
|
result.add(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result.toList(growable: growable);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Transformation class that can [encode] an instance of [SourceType] to String,
|
||||||
|
/// and [decode] dynamic data back to [SourceType].
|
||||||
|
class SourceTypeTypeTransformer {
|
||||||
|
factory SourceTypeTypeTransformer() => _instance ??= const SourceTypeTypeTransformer._();
|
||||||
|
|
||||||
|
const SourceTypeTypeTransformer._();
|
||||||
|
|
||||||
|
String encode(SourceType data) => data.value;
|
||||||
|
|
||||||
|
/// Decodes a [dynamic value][data] to a SourceType.
|
||||||
|
///
|
||||||
|
/// If [allowNull] is true and the [dynamic value][data] cannot be decoded successfully,
|
||||||
|
/// then null is returned. However, if [allowNull] is false and the [dynamic value][data]
|
||||||
|
/// cannot be decoded successfully, then an [UnimplementedError] is thrown.
|
||||||
|
///
|
||||||
|
/// The [allowNull] is very handy when an API changes and a new enum value is added or removed,
|
||||||
|
/// and users are still using an old app with the old code.
|
||||||
|
SourceType? decode(dynamic data, {bool allowNull = true}) {
|
||||||
|
if (data != null) {
|
||||||
|
switch (data) {
|
||||||
|
case r'machine-learning': return SourceType.machineLearning;
|
||||||
|
case r'exif': return SourceType.exif;
|
||||||
|
default:
|
||||||
|
if (!allowNull) {
|
||||||
|
throw ArgumentError('Unknown enum value to decode: $data');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Singleton [SourceTypeTypeTransformer] instance.
|
||||||
|
static SourceTypeTypeTransformer? _instance;
|
||||||
|
}
|
||||||
|
|
||||||
10
mobile/openapi/lib/model/system_config_dto.dart
generated
10
mobile/openapi/lib/model/system_config_dto.dart
generated
@@ -20,6 +20,7 @@ class SystemConfigDto {
|
|||||||
required this.logging,
|
required this.logging,
|
||||||
required this.machineLearning,
|
required this.machineLearning,
|
||||||
required this.map,
|
required this.map,
|
||||||
|
required this.metadata,
|
||||||
required this.newVersionCheck,
|
required this.newVersionCheck,
|
||||||
required this.notifications,
|
required this.notifications,
|
||||||
required this.oauth,
|
required this.oauth,
|
||||||
@@ -46,6 +47,8 @@ class SystemConfigDto {
|
|||||||
|
|
||||||
SystemConfigMapDto map;
|
SystemConfigMapDto map;
|
||||||
|
|
||||||
|
SystemConfigMetadataDto metadata;
|
||||||
|
|
||||||
SystemConfigNewVersionCheckDto newVersionCheck;
|
SystemConfigNewVersionCheckDto newVersionCheck;
|
||||||
|
|
||||||
SystemConfigNotificationsDto notifications;
|
SystemConfigNotificationsDto notifications;
|
||||||
@@ -75,6 +78,7 @@ class SystemConfigDto {
|
|||||||
other.logging == logging &&
|
other.logging == logging &&
|
||||||
other.machineLearning == machineLearning &&
|
other.machineLearning == machineLearning &&
|
||||||
other.map == map &&
|
other.map == map &&
|
||||||
|
other.metadata == metadata &&
|
||||||
other.newVersionCheck == newVersionCheck &&
|
other.newVersionCheck == newVersionCheck &&
|
||||||
other.notifications == notifications &&
|
other.notifications == notifications &&
|
||||||
other.oauth == oauth &&
|
other.oauth == oauth &&
|
||||||
@@ -96,6 +100,7 @@ class SystemConfigDto {
|
|||||||
(logging.hashCode) +
|
(logging.hashCode) +
|
||||||
(machineLearning.hashCode) +
|
(machineLearning.hashCode) +
|
||||||
(map.hashCode) +
|
(map.hashCode) +
|
||||||
|
(metadata.hashCode) +
|
||||||
(newVersionCheck.hashCode) +
|
(newVersionCheck.hashCode) +
|
||||||
(notifications.hashCode) +
|
(notifications.hashCode) +
|
||||||
(oauth.hashCode) +
|
(oauth.hashCode) +
|
||||||
@@ -108,7 +113,7 @@ class SystemConfigDto {
|
|||||||
(user.hashCode);
|
(user.hashCode);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String toString() => 'SystemConfigDto[ffmpeg=$ffmpeg, image=$image, job=$job, library_=$library_, logging=$logging, machineLearning=$machineLearning, map=$map, newVersionCheck=$newVersionCheck, notifications=$notifications, oauth=$oauth, passwordLogin=$passwordLogin, reverseGeocoding=$reverseGeocoding, server=$server, storageTemplate=$storageTemplate, theme=$theme, trash=$trash, user=$user]';
|
String toString() => 'SystemConfigDto[ffmpeg=$ffmpeg, image=$image, job=$job, library_=$library_, logging=$logging, machineLearning=$machineLearning, map=$map, metadata=$metadata, newVersionCheck=$newVersionCheck, notifications=$notifications, oauth=$oauth, passwordLogin=$passwordLogin, reverseGeocoding=$reverseGeocoding, server=$server, storageTemplate=$storageTemplate, theme=$theme, trash=$trash, user=$user]';
|
||||||
|
|
||||||
Map<String, dynamic> toJson() {
|
Map<String, dynamic> toJson() {
|
||||||
final json = <String, dynamic>{};
|
final json = <String, dynamic>{};
|
||||||
@@ -119,6 +124,7 @@ class SystemConfigDto {
|
|||||||
json[r'logging'] = this.logging;
|
json[r'logging'] = this.logging;
|
||||||
json[r'machineLearning'] = this.machineLearning;
|
json[r'machineLearning'] = this.machineLearning;
|
||||||
json[r'map'] = this.map;
|
json[r'map'] = this.map;
|
||||||
|
json[r'metadata'] = this.metadata;
|
||||||
json[r'newVersionCheck'] = this.newVersionCheck;
|
json[r'newVersionCheck'] = this.newVersionCheck;
|
||||||
json[r'notifications'] = this.notifications;
|
json[r'notifications'] = this.notifications;
|
||||||
json[r'oauth'] = this.oauth;
|
json[r'oauth'] = this.oauth;
|
||||||
@@ -147,6 +153,7 @@ class SystemConfigDto {
|
|||||||
logging: SystemConfigLoggingDto.fromJson(json[r'logging'])!,
|
logging: SystemConfigLoggingDto.fromJson(json[r'logging'])!,
|
||||||
machineLearning: SystemConfigMachineLearningDto.fromJson(json[r'machineLearning'])!,
|
machineLearning: SystemConfigMachineLearningDto.fromJson(json[r'machineLearning'])!,
|
||||||
map: SystemConfigMapDto.fromJson(json[r'map'])!,
|
map: SystemConfigMapDto.fromJson(json[r'map'])!,
|
||||||
|
metadata: SystemConfigMetadataDto.fromJson(json[r'metadata'])!,
|
||||||
newVersionCheck: SystemConfigNewVersionCheckDto.fromJson(json[r'newVersionCheck'])!,
|
newVersionCheck: SystemConfigNewVersionCheckDto.fromJson(json[r'newVersionCheck'])!,
|
||||||
notifications: SystemConfigNotificationsDto.fromJson(json[r'notifications'])!,
|
notifications: SystemConfigNotificationsDto.fromJson(json[r'notifications'])!,
|
||||||
oauth: SystemConfigOAuthDto.fromJson(json[r'oauth'])!,
|
oauth: SystemConfigOAuthDto.fromJson(json[r'oauth'])!,
|
||||||
@@ -211,6 +218,7 @@ class SystemConfigDto {
|
|||||||
'logging',
|
'logging',
|
||||||
'machineLearning',
|
'machineLearning',
|
||||||
'map',
|
'map',
|
||||||
|
'metadata',
|
||||||
'newVersionCheck',
|
'newVersionCheck',
|
||||||
'notifications',
|
'notifications',
|
||||||
'oauth',
|
'oauth',
|
||||||
|
|||||||
98
mobile/openapi/lib/model/system_config_faces_dto.dart
generated
Normal file
98
mobile/openapi/lib/model/system_config_faces_dto.dart
generated
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
//
|
||||||
|
// AUTO-GENERATED FILE, DO NOT MODIFY!
|
||||||
|
//
|
||||||
|
// @dart=2.18
|
||||||
|
|
||||||
|
// ignore_for_file: unused_element, unused_import
|
||||||
|
// ignore_for_file: always_put_required_named_parameters_first
|
||||||
|
// ignore_for_file: constant_identifier_names
|
||||||
|
// ignore_for_file: lines_longer_than_80_chars
|
||||||
|
|
||||||
|
part of openapi.api;
|
||||||
|
|
||||||
|
class SystemConfigFacesDto {
|
||||||
|
/// Returns a new [SystemConfigFacesDto] instance.
|
||||||
|
SystemConfigFacesDto({
|
||||||
|
required this.import_,
|
||||||
|
});
|
||||||
|
|
||||||
|
bool import_;
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) => identical(this, other) || other is SystemConfigFacesDto &&
|
||||||
|
other.import_ == import_;
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode =>
|
||||||
|
// ignore: unnecessary_parenthesis
|
||||||
|
(import_.hashCode);
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() => 'SystemConfigFacesDto[import_=$import_]';
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final json = <String, dynamic>{};
|
||||||
|
json[r'import'] = this.import_;
|
||||||
|
return json;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns a new [SystemConfigFacesDto] instance and imports its values from
|
||||||
|
/// [value] if it's a [Map], null otherwise.
|
||||||
|
// ignore: prefer_constructors_over_static_methods
|
||||||
|
static SystemConfigFacesDto? fromJson(dynamic value) {
|
||||||
|
if (value is Map) {
|
||||||
|
final json = value.cast<String, dynamic>();
|
||||||
|
|
||||||
|
return SystemConfigFacesDto(
|
||||||
|
import_: mapValueOfType<bool>(json, r'import')!,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
static List<SystemConfigFacesDto> listFromJson(dynamic json, {bool growable = false,}) {
|
||||||
|
final result = <SystemConfigFacesDto>[];
|
||||||
|
if (json is List && json.isNotEmpty) {
|
||||||
|
for (final row in json) {
|
||||||
|
final value = SystemConfigFacesDto.fromJson(row);
|
||||||
|
if (value != null) {
|
||||||
|
result.add(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result.toList(growable: growable);
|
||||||
|
}
|
||||||
|
|
||||||
|
static Map<String, SystemConfigFacesDto> mapFromJson(dynamic json) {
|
||||||
|
final map = <String, SystemConfigFacesDto>{};
|
||||||
|
if (json is Map && json.isNotEmpty) {
|
||||||
|
json = json.cast<String, dynamic>(); // ignore: parameter_assignments
|
||||||
|
for (final entry in json.entries) {
|
||||||
|
final value = SystemConfigFacesDto.fromJson(entry.value);
|
||||||
|
if (value != null) {
|
||||||
|
map[entry.key] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
// maps a json object with a list of SystemConfigFacesDto-objects as value to a dart map
|
||||||
|
static Map<String, List<SystemConfigFacesDto>> mapListFromJson(dynamic json, {bool growable = false,}) {
|
||||||
|
final map = <String, List<SystemConfigFacesDto>>{};
|
||||||
|
if (json is Map && json.isNotEmpty) {
|
||||||
|
// ignore: parameter_assignments
|
||||||
|
json = json.cast<String, dynamic>();
|
||||||
|
for (final entry in json.entries) {
|
||||||
|
map[entry.key] = SystemConfigFacesDto.listFromJson(entry.value, growable: growable,);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The list of required keys that must be present in a JSON.
|
||||||
|
static const requiredKeys = <String>{
|
||||||
|
'import',
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
98
mobile/openapi/lib/model/system_config_metadata_dto.dart
generated
Normal file
98
mobile/openapi/lib/model/system_config_metadata_dto.dart
generated
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
//
|
||||||
|
// AUTO-GENERATED FILE, DO NOT MODIFY!
|
||||||
|
//
|
||||||
|
// @dart=2.18
|
||||||
|
|
||||||
|
// ignore_for_file: unused_element, unused_import
|
||||||
|
// ignore_for_file: always_put_required_named_parameters_first
|
||||||
|
// ignore_for_file: constant_identifier_names
|
||||||
|
// ignore_for_file: lines_longer_than_80_chars
|
||||||
|
|
||||||
|
part of openapi.api;
|
||||||
|
|
||||||
|
class SystemConfigMetadataDto {
|
||||||
|
/// Returns a new [SystemConfigMetadataDto] instance.
|
||||||
|
SystemConfigMetadataDto({
|
||||||
|
required this.faces,
|
||||||
|
});
|
||||||
|
|
||||||
|
SystemConfigFacesDto faces;
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) => identical(this, other) || other is SystemConfigMetadataDto &&
|
||||||
|
other.faces == faces;
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode =>
|
||||||
|
// ignore: unnecessary_parenthesis
|
||||||
|
(faces.hashCode);
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() => 'SystemConfigMetadataDto[faces=$faces]';
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final json = <String, dynamic>{};
|
||||||
|
json[r'faces'] = this.faces;
|
||||||
|
return json;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns a new [SystemConfigMetadataDto] instance and imports its values from
|
||||||
|
/// [value] if it's a [Map], null otherwise.
|
||||||
|
// ignore: prefer_constructors_over_static_methods
|
||||||
|
static SystemConfigMetadataDto? fromJson(dynamic value) {
|
||||||
|
if (value is Map) {
|
||||||
|
final json = value.cast<String, dynamic>();
|
||||||
|
|
||||||
|
return SystemConfigMetadataDto(
|
||||||
|
faces: SystemConfigFacesDto.fromJson(json[r'faces'])!,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
static List<SystemConfigMetadataDto> listFromJson(dynamic json, {bool growable = false,}) {
|
||||||
|
final result = <SystemConfigMetadataDto>[];
|
||||||
|
if (json is List && json.isNotEmpty) {
|
||||||
|
for (final row in json) {
|
||||||
|
final value = SystemConfigMetadataDto.fromJson(row);
|
||||||
|
if (value != null) {
|
||||||
|
result.add(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result.toList(growable: growable);
|
||||||
|
}
|
||||||
|
|
||||||
|
static Map<String, SystemConfigMetadataDto> mapFromJson(dynamic json) {
|
||||||
|
final map = <String, SystemConfigMetadataDto>{};
|
||||||
|
if (json is Map && json.isNotEmpty) {
|
||||||
|
json = json.cast<String, dynamic>(); // ignore: parameter_assignments
|
||||||
|
for (final entry in json.entries) {
|
||||||
|
final value = SystemConfigMetadataDto.fromJson(entry.value);
|
||||||
|
if (value != null) {
|
||||||
|
map[entry.key] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
// maps a json object with a list of SystemConfigMetadataDto-objects as value to a dart map
|
||||||
|
static Map<String, List<SystemConfigMetadataDto>> mapListFromJson(dynamic json, {bool growable = false,}) {
|
||||||
|
final map = <String, List<SystemConfigMetadataDto>>{};
|
||||||
|
if (json is Map && json.isNotEmpty) {
|
||||||
|
// ignore: parameter_assignments
|
||||||
|
json = json.cast<String, dynamic>();
|
||||||
|
for (final entry in json.entries) {
|
||||||
|
map[entry.key] = SystemConfigMetadataDto.listFromJson(entry.value, growable: growable,);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The list of required keys that must be present in a JSON.
|
||||||
|
static const requiredKeys = <String>{
|
||||||
|
'faces',
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
@@ -7,11 +7,11 @@ version: '1.0.0'
|
|||||||
description: 'OpenAPI API client'
|
description: 'OpenAPI API client'
|
||||||
homepage: 'homepage'
|
homepage: 'homepage'
|
||||||
environment:
|
environment:
|
||||||
sdk: '>=2.12.0 <3.0.0'
|
sdk: '>=2.12.0 <4.0.0'
|
||||||
dependencies:
|
dependencies:
|
||||||
collection: '^1.17.0'
|
collection: '>=1.17.0 <2.0.0'
|
||||||
http: '>=0.13.0 <0.14.0'
|
http: '>=0.13.0 <2.0.0'
|
||||||
intl: any
|
intl: any
|
||||||
meta: '^1.1.8'
|
meta: '>=1.1.8 <2.0.0'
|
||||||
immich_mobile:
|
immich_mobile:
|
||||||
path: ../
|
path: ../
|
||||||
|
|||||||
@@ -1737,10 +1737,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: vm_service
|
name: vm_service
|
||||||
sha256: f652077d0bdf60abe4c1f6377448e8655008eef28f128bc023f7b5e8dfeb48fc
|
sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "14.2.4"
|
version: "14.2.5"
|
||||||
wakelock_plus:
|
wakelock_plus:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ name: immich_mobile
|
|||||||
description: Immich - selfhosted backup media file on mobile phone
|
description: Immich - selfhosted backup media file on mobile phone
|
||||||
|
|
||||||
publish_to: 'none'
|
publish_to: 'none'
|
||||||
version: 1.113.1+157
|
version: 1.114.0+158
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: '>=3.3.0 <4.0.0'
|
sdk: '>=3.3.0 <4.0.0'
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
OPENAPI_GENERATOR_VERSION=v7.5.0
|
OPENAPI_GENERATOR_VERSION=v7.8.0
|
||||||
|
|
||||||
# usage: ./bin/generate-open-api.sh
|
# usage: ./bin/generate-open-api.sh
|
||||||
|
|
||||||
|
|||||||
@@ -7394,7 +7394,7 @@
|
|||||||
"info": {
|
"info": {
|
||||||
"title": "Immich",
|
"title": "Immich",
|
||||||
"description": "Immich API",
|
"description": "Immich API",
|
||||||
"version": "1.113.1",
|
"version": "1.114.0",
|
||||||
"contact": {}
|
"contact": {}
|
||||||
},
|
},
|
||||||
"tags": [],
|
"tags": [],
|
||||||
@@ -8018,6 +8018,9 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"nullable": true
|
"nullable": true
|
||||||
|
},
|
||||||
|
"sourceType": {
|
||||||
|
"$ref": "#/components/schemas/SourceType"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": [
|
"required": [
|
||||||
@@ -8086,6 +8089,9 @@
|
|||||||
},
|
},
|
||||||
"imageWidth": {
|
"imageWidth": {
|
||||||
"type": "integer"
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"sourceType": {
|
||||||
|
"$ref": "#/components/schemas/SourceType"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": [
|
"required": [
|
||||||
@@ -10688,6 +10694,9 @@
|
|||||||
"facialRecognition": {
|
"facialRecognition": {
|
||||||
"type": "boolean"
|
"type": "boolean"
|
||||||
},
|
},
|
||||||
|
"importFaces": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
"map": {
|
"map": {
|
||||||
"type": "boolean"
|
"type": "boolean"
|
||||||
},
|
},
|
||||||
@@ -10721,6 +10730,7 @@
|
|||||||
"duplicateDetection",
|
"duplicateDetection",
|
||||||
"email",
|
"email",
|
||||||
"facialRecognition",
|
"facialRecognition",
|
||||||
|
"importFaces",
|
||||||
"map",
|
"map",
|
||||||
"oauth",
|
"oauth",
|
||||||
"oauthAutoLaunch",
|
"oauthAutoLaunch",
|
||||||
@@ -11229,6 +11239,13 @@
|
|||||||
],
|
],
|
||||||
"type": "object"
|
"type": "object"
|
||||||
},
|
},
|
||||||
|
"SourceType": {
|
||||||
|
"enum": [
|
||||||
|
"machine-learning",
|
||||||
|
"exif"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
"StackCreateDto": {
|
"StackCreateDto": {
|
||||||
"properties": {
|
"properties": {
|
||||||
"assetIds": {
|
"assetIds": {
|
||||||
@@ -11299,6 +11316,9 @@
|
|||||||
"map": {
|
"map": {
|
||||||
"$ref": "#/components/schemas/SystemConfigMapDto"
|
"$ref": "#/components/schemas/SystemConfigMapDto"
|
||||||
},
|
},
|
||||||
|
"metadata": {
|
||||||
|
"$ref": "#/components/schemas/SystemConfigMetadataDto"
|
||||||
|
},
|
||||||
"newVersionCheck": {
|
"newVersionCheck": {
|
||||||
"$ref": "#/components/schemas/SystemConfigNewVersionCheckDto"
|
"$ref": "#/components/schemas/SystemConfigNewVersionCheckDto"
|
||||||
},
|
},
|
||||||
@@ -11338,6 +11358,7 @@
|
|||||||
"logging",
|
"logging",
|
||||||
"machineLearning",
|
"machineLearning",
|
||||||
"map",
|
"map",
|
||||||
|
"metadata",
|
||||||
"newVersionCheck",
|
"newVersionCheck",
|
||||||
"notifications",
|
"notifications",
|
||||||
"oauth",
|
"oauth",
|
||||||
@@ -11464,6 +11485,17 @@
|
|||||||
],
|
],
|
||||||
"type": "object"
|
"type": "object"
|
||||||
},
|
},
|
||||||
|
"SystemConfigFacesDto": {
|
||||||
|
"properties": {
|
||||||
|
"import": {
|
||||||
|
"type": "boolean"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"import"
|
||||||
|
],
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
"SystemConfigImageDto": {
|
"SystemConfigImageDto": {
|
||||||
"properties": {
|
"properties": {
|
||||||
"colorspace": {
|
"colorspace": {
|
||||||
@@ -11656,6 +11688,17 @@
|
|||||||
],
|
],
|
||||||
"type": "object"
|
"type": "object"
|
||||||
},
|
},
|
||||||
|
"SystemConfigMetadataDto": {
|
||||||
|
"properties": {
|
||||||
|
"faces": {
|
||||||
|
"$ref": "#/components/schemas/SystemConfigFacesDto"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"faces"
|
||||||
|
],
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
"SystemConfigNewVersionCheckDto": {
|
"SystemConfigNewVersionCheckDto": {
|
||||||
"properties": {
|
"properties": {
|
||||||
"enabled": {
|
"enabled": {
|
||||||
|
|||||||
@@ -2,6 +2,6 @@
|
|||||||
"$schema": "./node_modules/@openapitools/openapi-generator-cli/config.schema.json",
|
"$schema": "./node_modules/@openapitools/openapi-generator-cli/config.schema.json",
|
||||||
"spaces": 2,
|
"spaces": 2,
|
||||||
"generator-cli": {
|
"generator-cli": {
|
||||||
"version": "7.5.0"
|
"version": "7.8.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
# Include code from immich_mobile
|
# Include code from immich_mobile
|
||||||
@@ -13,5 +13,5 @@
|
@@ -13,5 +13,5 @@
|
||||||
http: '>=0.13.0 <0.14.0'
|
http: '>=0.13.0 <2.0.0'
|
||||||
intl: any
|
intl: any
|
||||||
meta: '^1.1.8'
|
meta: '>=1.1.8 <2.0.0'
|
||||||
-dev_dependencies:
|
-dev_dependencies:
|
||||||
- test: '>=1.21.6 <1.22.0'
|
- test: '>=1.21.6 <1.22.0'
|
||||||
+ immich_mobile:
|
+ immich_mobile:
|
||||||
|
|||||||
4
open-api/typescript-sdk/package-lock.json
generated
4
open-api/typescript-sdk/package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "@immich/sdk",
|
"name": "@immich/sdk",
|
||||||
"version": "1.113.1",
|
"version": "1.114.0",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "@immich/sdk",
|
"name": "@immich/sdk",
|
||||||
"version": "1.113.1",
|
"version": "1.114.0",
|
||||||
"license": "GNU Affero General Public License version 3",
|
"license": "GNU Affero General Public License version 3",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@oazapfts/runtime": "^1.0.2"
|
"@oazapfts/runtime": "^1.0.2"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@immich/sdk",
|
"name": "@immich/sdk",
|
||||||
"version": "1.113.1",
|
"version": "1.114.0",
|
||||||
"description": "Auto-generated TypeScript SDK for the Immich API",
|
"description": "Auto-generated TypeScript SDK for the Immich API",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "./build/index.js",
|
"main": "./build/index.js",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* Immich
|
* Immich
|
||||||
* 1.113.1
|
* 1.114.0
|
||||||
* DO NOT MODIFY - This file has been generated using oazapfts.
|
* DO NOT MODIFY - This file has been generated using oazapfts.
|
||||||
* See https://www.npmjs.com/package/oazapfts
|
* See https://www.npmjs.com/package/oazapfts
|
||||||
*/
|
*/
|
||||||
@@ -207,6 +207,7 @@ export type AssetFaceWithoutPersonResponseDto = {
|
|||||||
id: string;
|
id: string;
|
||||||
imageHeight: number;
|
imageHeight: number;
|
||||||
imageWidth: number;
|
imageWidth: number;
|
||||||
|
sourceType?: SourceType;
|
||||||
};
|
};
|
||||||
export type PersonWithFacesResponseDto = {
|
export type PersonWithFacesResponseDto = {
|
||||||
birthDate: string | null;
|
birthDate: string | null;
|
||||||
@@ -508,6 +509,7 @@ export type AssetFaceResponseDto = {
|
|||||||
imageHeight: number;
|
imageHeight: number;
|
||||||
imageWidth: number;
|
imageWidth: number;
|
||||||
person: (PersonResponseDto) | null;
|
person: (PersonResponseDto) | null;
|
||||||
|
sourceType?: SourceType;
|
||||||
};
|
};
|
||||||
export type FaceDto = {
|
export type FaceDto = {
|
||||||
id: string;
|
id: string;
|
||||||
@@ -893,6 +895,7 @@ export type ServerFeaturesDto = {
|
|||||||
duplicateDetection: boolean;
|
duplicateDetection: boolean;
|
||||||
email: boolean;
|
email: boolean;
|
||||||
facialRecognition: boolean;
|
facialRecognition: boolean;
|
||||||
|
importFaces: boolean;
|
||||||
map: boolean;
|
map: boolean;
|
||||||
oauth: boolean;
|
oauth: boolean;
|
||||||
oauthAutoLaunch: boolean;
|
oauthAutoLaunch: boolean;
|
||||||
@@ -1122,6 +1125,12 @@ export type SystemConfigMapDto = {
|
|||||||
enabled: boolean;
|
enabled: boolean;
|
||||||
lightStyle: string;
|
lightStyle: string;
|
||||||
};
|
};
|
||||||
|
export type SystemConfigFacesDto = {
|
||||||
|
"import": boolean;
|
||||||
|
};
|
||||||
|
export type SystemConfigMetadataDto = {
|
||||||
|
faces: SystemConfigFacesDto;
|
||||||
|
};
|
||||||
export type SystemConfigNewVersionCheckDto = {
|
export type SystemConfigNewVersionCheckDto = {
|
||||||
enabled: boolean;
|
enabled: boolean;
|
||||||
};
|
};
|
||||||
@@ -1178,6 +1187,7 @@ export type SystemConfigDto = {
|
|||||||
logging: SystemConfigLoggingDto;
|
logging: SystemConfigLoggingDto;
|
||||||
machineLearning: SystemConfigMachineLearningDto;
|
machineLearning: SystemConfigMachineLearningDto;
|
||||||
map: SystemConfigMapDto;
|
map: SystemConfigMapDto;
|
||||||
|
metadata: SystemConfigMetadataDto;
|
||||||
newVersionCheck: SystemConfigNewVersionCheckDto;
|
newVersionCheck: SystemConfigNewVersionCheckDto;
|
||||||
notifications: SystemConfigNotificationsDto;
|
notifications: SystemConfigNotificationsDto;
|
||||||
oauth: SystemConfigOAuthDto;
|
oauth: SystemConfigOAuthDto;
|
||||||
@@ -3226,6 +3236,10 @@ export enum AlbumUserRole {
|
|||||||
Editor = "editor",
|
Editor = "editor",
|
||||||
Viewer = "viewer"
|
Viewer = "viewer"
|
||||||
}
|
}
|
||||||
|
export enum SourceType {
|
||||||
|
MachineLearning = "machine-learning",
|
||||||
|
Exif = "exif"
|
||||||
|
}
|
||||||
export enum AssetTypeEnum {
|
export enum AssetTypeEnum {
|
||||||
Image = "IMAGE",
|
Image = "IMAGE",
|
||||||
Video = "VIDEO",
|
Video = "VIDEO",
|
||||||
|
|||||||
50
server/package-lock.json
generated
50
server/package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "immich",
|
"name": "immich",
|
||||||
"version": "1.113.1",
|
"version": "1.114.0",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "immich",
|
"name": "immich",
|
||||||
"version": "1.113.1",
|
"version": "1.114.0",
|
||||||
"license": "GNU Affero General Public License version 3",
|
"license": "GNU Affero General Public License version 3",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nestjs/bullmq": "^10.0.1",
|
"@nestjs/bullmq": "^10.0.1",
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
"@opentelemetry/context-async-hooks": "^1.24.0",
|
"@opentelemetry/context-async-hooks": "^1.24.0",
|
||||||
"@opentelemetry/exporter-prometheus": "^0.53.0",
|
"@opentelemetry/exporter-prometheus": "^0.53.0",
|
||||||
"@opentelemetry/sdk-node": "^0.53.0",
|
"@opentelemetry/sdk-node": "^0.53.0",
|
||||||
"@react-email/components": "^0.0.23",
|
"@react-email/components": "^0.0.24",
|
||||||
"@socket.io/redis-adapter": "^8.3.0",
|
"@socket.io/redis-adapter": "^8.3.0",
|
||||||
"archiver": "^7.0.0",
|
"archiver": "^7.0.0",
|
||||||
"async-lock": "^1.4.0",
|
"async-lock": "^1.4.0",
|
||||||
@@ -5070,9 +5070,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@react-email/code-block": {
|
"node_modules/@react-email/code-block": {
|
||||||
"version": "0.0.7",
|
"version": "0.0.8",
|
||||||
"resolved": "https://registry.npmjs.org/@react-email/code-block/-/code-block-0.0.7.tgz",
|
"resolved": "https://registry.npmjs.org/@react-email/code-block/-/code-block-0.0.8.tgz",
|
||||||
"integrity": "sha512-3lYLwn9rK16I4JmTR/sTzAJMVHzUmmcT1PT27+TXnQyBCfpfDV+VockSg1qhsgCusA/u6j0C97BMsa96AWEbbw==",
|
"integrity": "sha512-WbuAEpTnB262i9C3SGPmmErgZ4iU5KIpqLUjr7uBJijqldLqZc5x39e8wPWaRdF7NLcShmrc/+G7GJgI1bdC5w==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"prismjs": "1.29.0"
|
"prismjs": "1.29.0"
|
||||||
},
|
},
|
||||||
@@ -5106,13 +5106,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@react-email/components": {
|
"node_modules/@react-email/components": {
|
||||||
"version": "0.0.23",
|
"version": "0.0.24",
|
||||||
"resolved": "https://registry.npmjs.org/@react-email/components/-/components-0.0.23.tgz",
|
"resolved": "https://registry.npmjs.org/@react-email/components/-/components-0.0.24.tgz",
|
||||||
"integrity": "sha512-RcBoffx2IZG6quLBXo5sj3fF47rKmmkiMhG1ZBua4nFjHYlmW8j1uUMyO5HNglxIF9E52NYq4sF7XeZRp9jYjg==",
|
"integrity": "sha512-/DNmfTREaT59UFdkHoIK3BewJ214LfRxmduiil3m7POj+gougkItANu1+BMmgbUATxjf7jH1WoBxo9x/rhFEFw==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@react-email/body": "0.0.10",
|
"@react-email/body": "0.0.10",
|
||||||
"@react-email/button": "0.0.17",
|
"@react-email/button": "0.0.17",
|
||||||
"@react-email/code-block": "0.0.7",
|
"@react-email/code-block": "0.0.8",
|
||||||
"@react-email/code-inline": "0.0.4",
|
"@react-email/code-inline": "0.0.4",
|
||||||
"@react-email/column": "0.0.12",
|
"@react-email/column": "0.0.12",
|
||||||
"@react-email/container": "0.0.14",
|
"@react-email/container": "0.0.14",
|
||||||
@@ -5125,7 +5125,7 @@
|
|||||||
"@react-email/link": "0.0.10",
|
"@react-email/link": "0.0.10",
|
||||||
"@react-email/markdown": "0.0.12",
|
"@react-email/markdown": "0.0.12",
|
||||||
"@react-email/preview": "0.0.11",
|
"@react-email/preview": "0.0.11",
|
||||||
"@react-email/render": "1.0.0",
|
"@react-email/render": "1.0.1",
|
||||||
"@react-email/row": "0.0.10",
|
"@react-email/row": "0.0.10",
|
||||||
"@react-email/section": "0.0.14",
|
"@react-email/section": "0.0.14",
|
||||||
"@react-email/tailwind": "0.1.0",
|
"@react-email/tailwind": "0.1.0",
|
||||||
@@ -5249,9 +5249,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@react-email/render": {
|
"node_modules/@react-email/render": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/@react-email/render/-/render-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/@react-email/render/-/render-1.0.1.tgz",
|
||||||
"integrity": "sha512-seN2p3JRUSZhwIUiymh9N6ZfhRZ14ywOraQqAokY63DkDeHZW2pA2a6nWpNc/igfOcNyt09Wsoi1Aj0esxhdzw==",
|
"integrity": "sha512-W3gTrcmLOVYnG80QuUp22ReIT/xfLsVJ+n7ghSlG2BITB8evNABn1AO2rGQoXuK84zKtDAlxCdm3hRyIpZdGSA==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"html-to-text": "9.0.5",
|
"html-to-text": "9.0.5",
|
||||||
"js-beautify": "^1.14.11",
|
"js-beautify": "^1.14.11",
|
||||||
@@ -19280,9 +19280,9 @@
|
|||||||
"requires": {}
|
"requires": {}
|
||||||
},
|
},
|
||||||
"@react-email/code-block": {
|
"@react-email/code-block": {
|
||||||
"version": "0.0.7",
|
"version": "0.0.8",
|
||||||
"resolved": "https://registry.npmjs.org/@react-email/code-block/-/code-block-0.0.7.tgz",
|
"resolved": "https://registry.npmjs.org/@react-email/code-block/-/code-block-0.0.8.tgz",
|
||||||
"integrity": "sha512-3lYLwn9rK16I4JmTR/sTzAJMVHzUmmcT1PT27+TXnQyBCfpfDV+VockSg1qhsgCusA/u6j0C97BMsa96AWEbbw==",
|
"integrity": "sha512-WbuAEpTnB262i9C3SGPmmErgZ4iU5KIpqLUjr7uBJijqldLqZc5x39e8wPWaRdF7NLcShmrc/+G7GJgI1bdC5w==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"prismjs": "1.29.0"
|
"prismjs": "1.29.0"
|
||||||
}
|
}
|
||||||
@@ -19300,13 +19300,13 @@
|
|||||||
"requires": {}
|
"requires": {}
|
||||||
},
|
},
|
||||||
"@react-email/components": {
|
"@react-email/components": {
|
||||||
"version": "0.0.23",
|
"version": "0.0.24",
|
||||||
"resolved": "https://registry.npmjs.org/@react-email/components/-/components-0.0.23.tgz",
|
"resolved": "https://registry.npmjs.org/@react-email/components/-/components-0.0.24.tgz",
|
||||||
"integrity": "sha512-RcBoffx2IZG6quLBXo5sj3fF47rKmmkiMhG1ZBua4nFjHYlmW8j1uUMyO5HNglxIF9E52NYq4sF7XeZRp9jYjg==",
|
"integrity": "sha512-/DNmfTREaT59UFdkHoIK3BewJ214LfRxmduiil3m7POj+gougkItANu1+BMmgbUATxjf7jH1WoBxo9x/rhFEFw==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@react-email/body": "0.0.10",
|
"@react-email/body": "0.0.10",
|
||||||
"@react-email/button": "0.0.17",
|
"@react-email/button": "0.0.17",
|
||||||
"@react-email/code-block": "0.0.7",
|
"@react-email/code-block": "0.0.8",
|
||||||
"@react-email/code-inline": "0.0.4",
|
"@react-email/code-inline": "0.0.4",
|
||||||
"@react-email/column": "0.0.12",
|
"@react-email/column": "0.0.12",
|
||||||
"@react-email/container": "0.0.14",
|
"@react-email/container": "0.0.14",
|
||||||
@@ -19319,7 +19319,7 @@
|
|||||||
"@react-email/link": "0.0.10",
|
"@react-email/link": "0.0.10",
|
||||||
"@react-email/markdown": "0.0.12",
|
"@react-email/markdown": "0.0.12",
|
||||||
"@react-email/preview": "0.0.11",
|
"@react-email/preview": "0.0.11",
|
||||||
"@react-email/render": "1.0.0",
|
"@react-email/render": "1.0.1",
|
||||||
"@react-email/row": "0.0.10",
|
"@react-email/row": "0.0.10",
|
||||||
"@react-email/section": "0.0.14",
|
"@react-email/section": "0.0.14",
|
||||||
"@react-email/tailwind": "0.1.0",
|
"@react-email/tailwind": "0.1.0",
|
||||||
@@ -19389,9 +19389,9 @@
|
|||||||
"requires": {}
|
"requires": {}
|
||||||
},
|
},
|
||||||
"@react-email/render": {
|
"@react-email/render": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/@react-email/render/-/render-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/@react-email/render/-/render-1.0.1.tgz",
|
||||||
"integrity": "sha512-seN2p3JRUSZhwIUiymh9N6ZfhRZ14ywOraQqAokY63DkDeHZW2pA2a6nWpNc/igfOcNyt09Wsoi1Aj0esxhdzw==",
|
"integrity": "sha512-W3gTrcmLOVYnG80QuUp22ReIT/xfLsVJ+n7ghSlG2BITB8evNABn1AO2rGQoXuK84zKtDAlxCdm3hRyIpZdGSA==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"html-to-text": "9.0.5",
|
"html-to-text": "9.0.5",
|
||||||
"js-beautify": "^1.14.11",
|
"js-beautify": "^1.14.11",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "immich",
|
"name": "immich",
|
||||||
"version": "1.113.1",
|
"version": "1.114.0",
|
||||||
"description": "",
|
"description": "",
|
||||||
"author": "",
|
"author": "",
|
||||||
"private": true,
|
"private": true,
|
||||||
@@ -50,7 +50,7 @@
|
|||||||
"@opentelemetry/context-async-hooks": "^1.24.0",
|
"@opentelemetry/context-async-hooks": "^1.24.0",
|
||||||
"@opentelemetry/exporter-prometheus": "^0.53.0",
|
"@opentelemetry/exporter-prometheus": "^0.53.0",
|
||||||
"@opentelemetry/sdk-node": "^0.53.0",
|
"@opentelemetry/sdk-node": "^0.53.0",
|
||||||
"@react-email/components": "^0.0.23",
|
"@react-email/components": "^0.0.24",
|
||||||
"@socket.io/redis-adapter": "^8.3.0",
|
"@socket.io/redis-adapter": "^8.3.0",
|
||||||
"archiver": "^7.0.0",
|
"archiver": "^7.0.0",
|
||||||
"async-lock": "^1.4.0",
|
"async-lock": "^1.4.0",
|
||||||
|
|||||||
@@ -18,10 +18,11 @@ import { ILoggerRepository } from 'src/interfaces/logger.interface';
|
|||||||
import { AuthGuard } from 'src/middleware/auth.guard';
|
import { AuthGuard } from 'src/middleware/auth.guard';
|
||||||
import { ErrorInterceptor } from 'src/middleware/error.interceptor';
|
import { ErrorInterceptor } from 'src/middleware/error.interceptor';
|
||||||
import { FileUploadInterceptor } from 'src/middleware/file-upload.interceptor';
|
import { FileUploadInterceptor } from 'src/middleware/file-upload.interceptor';
|
||||||
import { HttpExceptionFilter } from 'src/middleware/http-exception.filter';
|
import { GlobalExceptionFilter } from 'src/middleware/global-exception.filter';
|
||||||
import { LoggingInterceptor } from 'src/middleware/logging.interceptor';
|
import { LoggingInterceptor } from 'src/middleware/logging.interceptor';
|
||||||
import { repositories } from 'src/repositories';
|
import { repositories } from 'src/repositories';
|
||||||
import { services } from 'src/services';
|
import { services } from 'src/services';
|
||||||
|
import { DatabaseService } from 'src/services/database.service';
|
||||||
import { setupEventHandlers } from 'src/utils/events';
|
import { setupEventHandlers } from 'src/utils/events';
|
||||||
import { otelConfig } from 'src/utils/instrumentation';
|
import { otelConfig } from 'src/utils/instrumentation';
|
||||||
|
|
||||||
@@ -29,7 +30,7 @@ const common = [...services, ...repositories];
|
|||||||
|
|
||||||
const middleware = [
|
const middleware = [
|
||||||
FileUploadInterceptor,
|
FileUploadInterceptor,
|
||||||
{ provide: APP_FILTER, useClass: HttpExceptionFilter },
|
{ provide: APP_FILTER, useClass: GlobalExceptionFilter },
|
||||||
{ provide: APP_PIPE, useValue: new ValidationPipe({ transform: true, whitelist: true }) },
|
{ provide: APP_PIPE, useValue: new ValidationPipe({ transform: true, whitelist: true }) },
|
||||||
{ provide: APP_INTERCEPTOR, useClass: LoggingInterceptor },
|
{ provide: APP_INTERCEPTOR, useClass: LoggingInterceptor },
|
||||||
{ provide: APP_INTERCEPTOR, useClass: ErrorInterceptor },
|
{ provide: APP_INTERCEPTOR, useClass: ErrorInterceptor },
|
||||||
@@ -43,7 +44,17 @@ const imports = [
|
|||||||
ConfigModule.forRoot(immichAppConfig),
|
ConfigModule.forRoot(immichAppConfig),
|
||||||
EventEmitterModule.forRoot(),
|
EventEmitterModule.forRoot(),
|
||||||
OpenTelemetryModule.forRoot(otelConfig),
|
OpenTelemetryModule.forRoot(otelConfig),
|
||||||
TypeOrmModule.forRoot(databaseConfig),
|
TypeOrmModule.forRootAsync({
|
||||||
|
inject: [ModuleRef],
|
||||||
|
useFactory: (moduleRef: ModuleRef) => {
|
||||||
|
return {
|
||||||
|
...databaseConfig,
|
||||||
|
poolErrorHandler: (error) => {
|
||||||
|
moduleRef.get(DatabaseService, { strict: false }).handleConnectionError(error);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
}),
|
||||||
TypeOrmModule.forFeature(entities),
|
TypeOrmModule.forFeature(entities),
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@@ -141,6 +141,11 @@ export interface SystemConfig {
|
|||||||
reverseGeocoding: {
|
reverseGeocoding: {
|
||||||
enabled: boolean;
|
enabled: boolean;
|
||||||
};
|
};
|
||||||
|
metadata: {
|
||||||
|
faces: {
|
||||||
|
import: boolean;
|
||||||
|
};
|
||||||
|
};
|
||||||
oauth: {
|
oauth: {
|
||||||
autoLaunch: boolean;
|
autoLaunch: boolean;
|
||||||
autoRegister: boolean;
|
autoRegister: boolean;
|
||||||
@@ -286,6 +291,11 @@ export const defaults = Object.freeze<SystemConfig>({
|
|||||||
reverseGeocoding: {
|
reverseGeocoding: {
|
||||||
enabled: true,
|
enabled: true,
|
||||||
},
|
},
|
||||||
|
metadata: {
|
||||||
|
faces: {
|
||||||
|
import: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
oauth: {
|
oauth: {
|
||||||
autoLaunch: false,
|
autoLaunch: false,
|
||||||
autoRegister: true,
|
autoRegister: true,
|
||||||
|
|||||||
@@ -75,6 +75,7 @@ export const supportedPresetTokens = [
|
|||||||
'{{y}}/{{MM}}-{{dd}}/{{filename}}',
|
'{{y}}/{{MM}}-{{dd}}/{{filename}}',
|
||||||
'{{y}}/{{MMMM}}-{{dd}}/{{filename}}',
|
'{{y}}/{{MMMM}}-{{dd}}/{{filename}}',
|
||||||
'{{y}}/{{MM}}/{{filename}}',
|
'{{y}}/{{MM}}/{{filename}}',
|
||||||
|
'{{y}}/{{#if album}}{{album}}{{else}}Other/{{MM}}{{/if}}/{{filename}}',
|
||||||
'{{y}}/{{MMM}}/{{filename}}',
|
'{{y}}/{{MMM}}/{{filename}}',
|
||||||
'{{y}}/{{MMMM}}/{{filename}}',
|
'{{y}}/{{MMMM}}/{{filename}}',
|
||||||
'{{y}}/{{MM}}/{{dd}}/{{filename}}',
|
'{{y}}/{{MM}}/{{dd}}/{{filename}}',
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user