feat(server): apk links API endpoint for Obtainium Android mobile-server version sync (#18700)

This commit is contained in:
Nicholas 2025-05-28 17:45:49 -04:00 committed by GitHub
parent be247395db
commit 8ea40973a7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 94 additions and 0 deletions

BIN
mobile/openapi/README.md generated

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -5275,6 +5275,38 @@
]
}
},
"/server/android-links": {
"get": {
"operationId": "getAndroidLinks",
"parameters": [],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ServerApkLinksDto"
}
}
},
"description": ""
}
},
"security": [
{
"bearer": []
},
{
"cookie": []
},
{
"api_key": []
}
],
"tags": [
"Server"
]
}
},
"/server/config": {
"get": {
"operationId": "getServerConfig",
@ -11959,6 +11991,29 @@
],
"type": "object"
},
"ServerApkLinksDto": {
"properties": {
"arm64v8a": {
"type": "string"
},
"armeabiv7a": {
"type": "string"
},
"universal": {
"type": "string"
},
"x86_64": {
"type": "string"
}
},
"required": [
"arm64v8a",
"armeabiv7a",
"universal",
"x86_64"
],
"type": "object"
},
"ServerConfigDto": {
"properties": {
"externalDomain": {

View File

@ -1004,6 +1004,12 @@ export type ServerAboutResponseDto = {
version: string;
versionUrl: string;
};
export type ServerApkLinksDto = {
arm64v8a: string;
armeabiv7a: string;
universal: string;
x86_64: string;
};
export type ServerConfigDto = {
externalDomain: string;
isInitialized: boolean;
@ -2868,6 +2874,14 @@ export function getAboutInfo(opts?: Oazapfts.RequestOpts) {
...opts
}));
}
export function getAndroidLinks(opts?: Oazapfts.RequestOpts) {
return oazapfts.ok(oazapfts.fetchJson<{
status: 200;
data: ServerApkLinksDto;
}>("/server/android-links", {
...opts
}));
}
export function getServerConfig(opts?: Oazapfts.RequestOpts) {
return oazapfts.ok(oazapfts.fetchJson<{
status: 200;

View File

@ -3,6 +3,7 @@ import { ApiNotFoundResponse, ApiTags } from '@nestjs/swagger';
import { LicenseKeyDto, LicenseResponseDto } from 'src/dtos/license.dto';
import {
ServerAboutResponseDto,
ServerApkLinksDto,
ServerConfigDto,
ServerFeaturesDto,
ServerMediaTypesResponseDto,
@ -34,6 +35,12 @@ export class ServerController {
return this.service.getAboutInfo();
}
@Get('android-links')
@Authenticated()
getAndroidLinks(): ServerApkLinksDto {
return this.service.getAndroidLinks();
}
@Get('storage')
@Authenticated()
getStorage(): Promise<ServerStorageResponseDto> {

View File

@ -37,6 +37,13 @@ export class ServerAboutResponseDto {
thirdPartySupportUrl?: string;
}
export class ServerApkLinksDto {
arm64v8a!: string;
armeabiv7a!: string;
universal!: string;
x86_64!: string;
}
export class ServerStorageResponseDto {
diskSize!: string;
diskUse!: string;

View File

@ -5,6 +5,7 @@ import { OnEvent } from 'src/decorators';
import { LicenseKeyDto, LicenseResponseDto } from 'src/dtos/license.dto';
import {
ServerAboutResponseDto,
ServerApkLinksDto,
ServerConfigDto,
ServerFeaturesDto,
ServerMediaTypesResponseDto,
@ -48,6 +49,16 @@ export class ServerService extends BaseService {
};
}
getAndroidLinks(): ServerApkLinksDto {
const baseURL = `https://github.com/immich-app/immich/releases/download/v${serverVersion.toString()}`;
return {
arm64v8a: `${baseURL}/app-arm64-v8a-release.apk`,
armeabiv7a: `${baseURL}/app-armeabi-v7a-release.apk`,
universal: `${baseURL}/app-release.apk`,
x86_64: `${baseURL}/app-x86_64-release.apk`,
};
}
async getStorage(): Promise<ServerStorageResponseDto> {
const libraryBase = StorageCore.getBaseFolder(StorageFolder.LIBRARY);
const diskInfo = await this.storageRepository.checkDiskUsage(libraryBase);