2023-11-19 23:16:24 +01:00
|
|
|
#! /usr/bin/env node
|
|
|
|
|
2023-12-19 03:29:26 +01:00
|
|
|
import { Option, Command } from 'commander';
|
2024-01-12 07:36:27 -05:00
|
|
|
import { Upload } from './commands/upload';
|
|
|
|
import { ServerInfo } from './commands/server-info';
|
|
|
|
import { LoginKey } from './commands/login/key';
|
|
|
|
import { Logout } from './commands/logout';
|
2023-11-21 13:12:40 -06:00
|
|
|
import { version } from '../package.json';
|
2023-07-06 16:37:47 +02:00
|
|
|
|
2023-12-19 03:29:26 +01:00
|
|
|
import path from 'node:path';
|
|
|
|
import os from 'os';
|
|
|
|
|
|
|
|
const userHomeDir = os.homedir();
|
|
|
|
const configDir = path.join(userHomeDir, '.config/immich/');
|
|
|
|
|
|
|
|
const program = new Command()
|
|
|
|
.name('immich')
|
|
|
|
.version(version)
|
|
|
|
.description('Command line interface for Immich')
|
|
|
|
.addOption(new Option('-d, --config', 'Configuration directory').env('IMMICH_CONFIG_DIR').default(configDir));
|
2023-07-06 16:37:47 +02:00
|
|
|
|
|
|
|
program
|
|
|
|
.command('upload')
|
|
|
|
.description('Upload assets')
|
|
|
|
.usage('[options] [paths...]')
|
|
|
|
.addOption(new Option('-r, --recursive', 'Recursive').env('IMMICH_RECURSIVE').default(false))
|
|
|
|
.addOption(new Option('-i, --ignore [paths...]', 'Paths to ignore').env('IMMICH_IGNORE_PATHS'))
|
|
|
|
.addOption(new Option('-h, --skip-hash', "Don't hash files before upload").env('IMMICH_SKIP_HASH').default(false))
|
2023-12-19 20:15:11 +01:00
|
|
|
.addOption(new Option('-i, --include-hidden', 'Include hidden folders').env('IMMICH_INCLUDE_HIDDEN').default(false))
|
2023-07-06 16:37:47 +02:00
|
|
|
.addOption(
|
2023-11-19 23:16:24 +01:00
|
|
|
new Option('-a, --album', 'Automatically create albums based on folder name')
|
|
|
|
.env('IMMICH_AUTO_CREATE_ALBUM')
|
2023-07-06 16:37:47 +02:00
|
|
|
.default(false),
|
|
|
|
)
|
2023-12-20 16:51:53 +01:00
|
|
|
.addOption(
|
|
|
|
new Option('-A, --album-name <name>', 'Add all assets to specified album')
|
|
|
|
.env('IMMICH_ALBUM_NAME')
|
|
|
|
.conflicts('album'),
|
|
|
|
)
|
2023-07-06 16:37:47 +02:00
|
|
|
.addOption(
|
|
|
|
new Option('-n, --dry-run', "Don't perform any actions, just show what will be done")
|
|
|
|
.env('IMMICH_DRY_RUN')
|
|
|
|
.default(false),
|
|
|
|
)
|
2023-11-19 23:16:24 +01:00
|
|
|
.addOption(new Option('--delete', 'Delete local assets after upload').env('IMMICH_DELETE_ASSETS'))
|
|
|
|
.argument('[paths...]', 'One or more paths to assets to be uploaded')
|
2023-10-13 07:22:40 +02:00
|
|
|
.action(async (paths, options) => {
|
2023-11-19 23:16:24 +01:00
|
|
|
options.exclusionPatterns = options.ignore;
|
2023-12-19 03:29:26 +01:00
|
|
|
await new Upload(program.opts()).run(paths, options);
|
2023-07-06 16:37:47 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
program
|
|
|
|
.command('server-info')
|
|
|
|
.description('Display server information')
|
2023-10-13 07:22:40 +02:00
|
|
|
.action(async () => {
|
2023-12-19 03:29:26 +01:00
|
|
|
await new ServerInfo(program.opts()).run();
|
2023-07-06 16:37:47 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
program
|
|
|
|
.command('login-key')
|
|
|
|
.description('Login using an API key')
|
|
|
|
.argument('[instanceUrl]')
|
|
|
|
.argument('[apiKey]')
|
2023-10-13 07:22:40 +02:00
|
|
|
.action(async (paths, options) => {
|
2023-12-19 03:29:26 +01:00
|
|
|
await new LoginKey(program.opts()).run(paths, options);
|
2023-07-06 16:37:47 +02:00
|
|
|
});
|
|
|
|
|
2023-11-19 23:16:24 +01:00
|
|
|
program
|
|
|
|
.command('logout')
|
|
|
|
.description('Remove stored credentials')
|
|
|
|
.action(async () => {
|
2023-12-19 03:29:26 +01:00
|
|
|
await new Logout(program.opts()).run();
|
2023-11-19 23:16:24 +01:00
|
|
|
});
|
|
|
|
|
2023-07-06 16:37:47 +02:00
|
|
|
program.parse(process.argv);
|