refactor: move SystemConfig to file
Signed-off-by: Varun Patil <radialapps@gmail.com>pull/888/head
parent
8b2df7c2a5
commit
e38da200db
|
@ -26,6 +26,7 @@ namespace OCA\Memories\Controller;
|
|||
use OCA\Memories\AppInfo\Application;
|
||||
use OCA\Memories\Exceptions;
|
||||
use OCA\Memories\Service\BinExt;
|
||||
use OCA\Memories\Settings\SystemConfig;
|
||||
use OCA\Memories\Util;
|
||||
use OCP\AppFramework\Http;
|
||||
use OCP\AppFramework\Http\JSONResponse;
|
||||
|
@ -39,7 +40,7 @@ class AdminController extends GenericApiController
|
|||
{
|
||||
return Util::guardEx(function () {
|
||||
$config = [];
|
||||
foreach (Util::systemConfigDefaults() as $key => $default) {
|
||||
foreach (SystemConfig::DEFAULTS as $key => $default) {
|
||||
$config[$key] = $this->config->getSystemValue($key, $default);
|
||||
}
|
||||
|
||||
|
@ -59,7 +60,7 @@ class AdminController extends GenericApiController
|
|||
}
|
||||
|
||||
// Assign config with type checking
|
||||
Util::setSystemConfig($key, $value);
|
||||
SystemConfig::set($key, $value);
|
||||
|
||||
// If changing vod settings, kill any running go-vod instances
|
||||
if (str_starts_with($key, 'memories.vod.')) {
|
||||
|
@ -89,7 +90,7 @@ class AdminController extends GenericApiController
|
|||
$status = [];
|
||||
|
||||
// Check exiftool version
|
||||
$exiftoolNoLocal = Util::getSystemConfig('memories.exiftool_no_local');
|
||||
$exiftoolNoLocal = SystemConfig::get('memories.exiftool_no_local');
|
||||
$status['exiftool'] = $this->getExecutableStatus(
|
||||
static fn () => BinExt::getExiftoolPBin(),
|
||||
static fn () => BinExt::testExiftool(),
|
||||
|
@ -136,23 +137,23 @@ class AdminController extends GenericApiController
|
|||
// Check for FFmpeg for preview generation
|
||||
/** @psalm-suppress ForbiddenCode */
|
||||
$status['ffmpeg_preview'] = $this->getExecutableStatus(
|
||||
Util::getSystemConfig('preview_ffmpeg_path')
|
||||
SystemConfig::get('preview_ffmpeg_path')
|
||||
?: trim(shell_exec('which ffmpeg') ?: ''),
|
||||
static fn ($p) => BinExt::testFFmpeg($p, 'ffmpeg'),
|
||||
);
|
||||
|
||||
// Check ffmpeg and ffprobe binaries for transcoding
|
||||
$status['ffmpeg'] = $this->getExecutableStatus(
|
||||
Util::getSystemConfig('memories.vod.ffmpeg'),
|
||||
SystemConfig::get('memories.vod.ffmpeg'),
|
||||
static fn ($p) => BinExt::testFFmpeg($p, 'ffmpeg'),
|
||||
);
|
||||
$status['ffprobe'] = $this->getExecutableStatus(
|
||||
Util::getSystemConfig('memories.vod.ffprobe'),
|
||||
SystemConfig::get('memories.vod.ffprobe'),
|
||||
static fn ($p) => BinExt::testFFmpeg($p, 'ffprobe'),
|
||||
);
|
||||
|
||||
// Check go-vod binary
|
||||
$extGoVod = Util::getSystemConfig('memories.vod.external');
|
||||
$extGoVod = SystemConfig::get('memories.vod.external');
|
||||
$status['govod'] = $this->getExecutableStatus(
|
||||
static fn () => BinExt::getGoVodBin(),
|
||||
static fn () => BinExt::testStartGoVod(),
|
||||
|
|
|
@ -25,6 +25,7 @@ namespace OCA\Memories\Controller;
|
|||
|
||||
use OCA\Memories\AppInfo\Application;
|
||||
use OCA\Memories\Exceptions;
|
||||
use OCA\Memories\Settings\SystemConfig;
|
||||
use OCA\Memories\Util;
|
||||
use OCP\AppFramework\Http;
|
||||
use OCP\AppFramework\Http\JSONResponse;
|
||||
|
@ -85,9 +86,9 @@ class OtherController extends GenericApiController
|
|||
return new JSONResponse([
|
||||
// general stuff
|
||||
'version' => $version,
|
||||
'vod_disable' => Util::getSystemConfig('memories.vod.disable'),
|
||||
'video_default_quality' => Util::getSystemConfig('memories.video_default_quality'),
|
||||
'places_gis' => Util::getSystemConfig('memories.gis_type'),
|
||||
'vod_disable' => SystemConfig::get('memories.vod.disable'),
|
||||
'video_default_quality' => SystemConfig::get('memories.video_default_quality'),
|
||||
'places_gis' => SystemConfig::get('memories.gis_type'),
|
||||
|
||||
// enabled apps
|
||||
'systemtags_enabled' => Util::tagsIsEnabled(),
|
||||
|
@ -99,11 +100,11 @@ class OtherController extends GenericApiController
|
|||
'preview_generator_enabled' => Util::previewGeneratorIsEnabled(),
|
||||
|
||||
// general settings
|
||||
'timeline_path' => $getAppConfig('timelinePath', Util::getSystemConfig('memories.timeline.default_path')),
|
||||
'timeline_path' => $getAppConfig('timelinePath', SystemConfig::get('memories.timeline.default_path')),
|
||||
'enable_top_memories' => 'true' === $getAppConfig('enableTopMemories', 'true'),
|
||||
|
||||
// viewer settings
|
||||
'high_res_cond_default' => Util::getSystemConfig('memories.viewer.high_res_cond_default'),
|
||||
'high_res_cond_default' => SystemConfig::get('memories.viewer.high_res_cond_default'),
|
||||
'livephoto_autoplay' => 'true' === $getAppConfig('livephotoAutoplay', 'true'),
|
||||
'sidebar_filepath' => 'true' === $getAppConfig('sidebarFilepath', false),
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ namespace OCA\Memories\Cron;
|
|||
|
||||
use OCA\Memories\AppInfo\Application;
|
||||
use OCA\Memories\Service;
|
||||
use OCA\Memories\Util;
|
||||
use OCA\Memories\Settings\SystemConfig;
|
||||
use OCP\AppFramework\Utility\ITimeFactory;
|
||||
use OCP\BackgroundJob\TimedJob;
|
||||
use OCP\IConfig;
|
||||
|
@ -38,7 +38,7 @@ class IndexJob extends TimedJob
|
|||
protected function run(mixed $argument): void
|
||||
{
|
||||
// Check if indexing is enabled
|
||||
if ('0' === Util::getSystemConfig('memories.index.mode')) {
|
||||
if ('0' === SystemConfig::get('memories.index.mode')) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ declare(strict_types=1);
|
|||
|
||||
namespace OCA\Memories\Service;
|
||||
|
||||
use OCA\Memories\Util;
|
||||
use OCA\Memories\Settings\SystemConfig;
|
||||
|
||||
class BinExt
|
||||
{
|
||||
|
@ -15,7 +15,7 @@ class BinExt
|
|||
/** Get the path to the temp directory */
|
||||
public static function getTmpPath(): string
|
||||
{
|
||||
return Util::getSystemConfig('memories.exiftool.tmp') ?: sys_get_temp_dir();
|
||||
return SystemConfig::get('memories.exiftool.tmp') ?: sys_get_temp_dir();
|
||||
}
|
||||
|
||||
/** Copy a binary to temp dir for execution */
|
||||
|
@ -56,7 +56,7 @@ class BinExt
|
|||
/** Get the name for a binary */
|
||||
public static function getName(string $name, string $version = ''): string
|
||||
{
|
||||
$id = Util::getInstanceId();
|
||||
$id = SystemConfig::get('instanceid');
|
||||
|
||||
return empty($version) ? "{$name}-{$id}" : "{$name}-{$id}-{$version}";
|
||||
}
|
||||
|
@ -105,7 +105,7 @@ class BinExt
|
|||
/** Get path to exiftool binary */
|
||||
public static function getExiftoolPBin(): string
|
||||
{
|
||||
$path = Util::getSystemConfig('memories.exiftool');
|
||||
$path = SystemConfig::get('memories.exiftool');
|
||||
|
||||
return self::getTempBin($path, self::getName('exiftool', self::EXIFTOOL_VER));
|
||||
}
|
||||
|
@ -117,7 +117,7 @@ class BinExt
|
|||
*/
|
||||
public static function getExiftool(): array
|
||||
{
|
||||
if (Util::getSystemConfig('memories.exiftool_no_local')) {
|
||||
if (SystemConfig::get('memories.exiftool_no_local')) {
|
||||
return ['perl', realpath(__DIR__.'/../../bin-ext/exiftool/exiftool')];
|
||||
}
|
||||
|
||||
|
@ -129,11 +129,11 @@ class BinExt
|
|||
*/
|
||||
public static function detectExiftool(): false|string
|
||||
{
|
||||
if (!empty($path = Util::getSystemConfig('memories.exiftool')) && file_exists($path)) {
|
||||
if (!empty($path = SystemConfig::get('memories.exiftool')) && file_exists($path)) {
|
||||
return $path;
|
||||
}
|
||||
|
||||
if (Util::getSystemConfig('memories.exiftool_no_local')) {
|
||||
if (SystemConfig::get('memories.exiftool_no_local')) {
|
||||
return implode(' ', self::getExiftool());
|
||||
}
|
||||
|
||||
|
@ -148,13 +148,13 @@ class BinExt
|
|||
|
||||
// make sure it exists
|
||||
if ($path && file_exists($path)) {
|
||||
Util::setSystemConfig('memories.exiftool', $path);
|
||||
SystemConfig::set('memories.exiftool', $path);
|
||||
|
||||
return $path;
|
||||
}
|
||||
}
|
||||
|
||||
Util::setSystemConfig('memories.exiftool_no_local', true);
|
||||
SystemConfig::set('memories.exiftool_no_local', true);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -166,8 +166,8 @@ class BinExt
|
|||
{
|
||||
$path = rawurlencode($path);
|
||||
|
||||
$bind = Util::getSystemConfig('memories.vod.bind');
|
||||
$connect = Util::getSystemConfig('memories.vod.connect', $bind);
|
||||
$bind = SystemConfig::get('memories.vod.bind');
|
||||
$connect = SystemConfig::get('memories.vod.connect', $bind);
|
||||
|
||||
return "http://{$connect}/{$client}{$path}/{$profile}";
|
||||
}
|
||||
|
@ -176,15 +176,15 @@ class BinExt
|
|||
{
|
||||
// Get config from system values
|
||||
$env = [
|
||||
'vaapi' => Util::getSystemConfig('memories.vod.vaapi'),
|
||||
'vaapiLowPower' => Util::getSystemConfig('memories.vod.vaapi.low_power'),
|
||||
'vaapi' => SystemConfig::get('memories.vod.vaapi'),
|
||||
'vaapiLowPower' => SystemConfig::get('memories.vod.vaapi.low_power'),
|
||||
|
||||
'nvenc' => Util::getSystemConfig('memories.vod.nvenc'),
|
||||
'nvencTemporalAQ' => Util::getSystemConfig('memories.vod.nvenc.temporal_aq'),
|
||||
'nvencScale' => Util::getSystemConfig('memories.vod.nvenc.scale'),
|
||||
'nvenc' => SystemConfig::get('memories.vod.nvenc'),
|
||||
'nvencTemporalAQ' => SystemConfig::get('memories.vod.nvenc.temporal_aq'),
|
||||
'nvencScale' => SystemConfig::get('memories.vod.nvenc.scale'),
|
||||
|
||||
'useTranspose' => Util::getSystemConfig('memories.vod.use_transpose'),
|
||||
'useGopSize' => Util::getSystemConfig('memories.vod.use_gop_size'),
|
||||
'useTranspose' => SystemConfig::get('memories.vod.use_transpose'),
|
||||
'useGopSize' => SystemConfig::get('memories.vod.use_gop_size'),
|
||||
];
|
||||
|
||||
if (!$local) {
|
||||
|
@ -192,7 +192,7 @@ class BinExt
|
|||
}
|
||||
|
||||
// Get temp directory
|
||||
$tmpPath = Util::getSystemConfig('memories.vod.tempdir', sys_get_temp_dir().'/go-vod/');
|
||||
$tmpPath = SystemConfig::get('memories.vod.tempdir', sys_get_temp_dir().'/go-vod/');
|
||||
|
||||
// Make sure path ends with slash
|
||||
if ('/' !== substr($tmpPath, -1)) {
|
||||
|
@ -200,12 +200,12 @@ class BinExt
|
|||
}
|
||||
|
||||
// Add instance ID to path
|
||||
$tmpPath .= Util::getInstanceId();
|
||||
$tmpPath .= SystemConfig::get('instanceid');
|
||||
|
||||
return array_merge($env, [
|
||||
'bind' => Util::getSystemConfig('memories.vod.bind'),
|
||||
'ffmpeg' => Util::getSystemConfig('memories.vod.ffmpeg'),
|
||||
'ffprobe' => Util::getSystemConfig('memories.vod.ffprobe'),
|
||||
'bind' => SystemConfig::get('memories.vod.bind'),
|
||||
'ffmpeg' => SystemConfig::get('memories.vod.ffmpeg'),
|
||||
'ffprobe' => SystemConfig::get('memories.vod.ffprobe'),
|
||||
'tempdir' => $tmpPath,
|
||||
]);
|
||||
}
|
||||
|
@ -215,7 +215,7 @@ class BinExt
|
|||
*/
|
||||
public static function getGoVodBin(): string
|
||||
{
|
||||
$path = Util::getSystemConfig('memories.vod.path');
|
||||
$path = SystemConfig::get('memories.vod.path');
|
||||
|
||||
return self::getTempBin($path, self::getName('go-vod', self::GOVOD_VER));
|
||||
}
|
||||
|
@ -227,7 +227,7 @@ class BinExt
|
|||
public static function startGoVod(): ?string
|
||||
{
|
||||
// Check if disabled
|
||||
if (Util::getSystemConfig('memories.vod.disable')) {
|
||||
if (SystemConfig::get('memories.vod.disable')) {
|
||||
// Make sure it's dead, in case the user just disabled it
|
||||
self::pkill(self::getName('go-vod'));
|
||||
|
||||
|
@ -235,7 +235,7 @@ class BinExt
|
|||
}
|
||||
|
||||
// Check if external
|
||||
if (Util::getSystemConfig('memories.vod.external')) {
|
||||
if (SystemConfig::get('memories.vod.external')) {
|
||||
self::configureGoVod();
|
||||
|
||||
return null;
|
||||
|
@ -306,7 +306,7 @@ class BinExt
|
|||
public static function testGoVod(): string
|
||||
{
|
||||
// Check if disabled
|
||||
if (Util::getSystemConfig('memories.vod.disable')) {
|
||||
if (SystemConfig::get('memories.vod.disable')) {
|
||||
throw new \Exception('Transcoding is disabled');
|
||||
}
|
||||
|
||||
|
@ -372,7 +372,7 @@ class BinExt
|
|||
*/
|
||||
public static function detectGoVod(): false|string
|
||||
{
|
||||
$goVodPath = Util::getSystemConfig('memories.vod.path');
|
||||
$goVodPath = SystemConfig::get('memories.vod.path');
|
||||
|
||||
if (empty($goVodPath) || !file_exists($goVodPath)) {
|
||||
// Detect architecture
|
||||
|
@ -385,7 +385,7 @@ class BinExt
|
|||
}
|
||||
|
||||
// Set config
|
||||
Util::setSystemConfig('memories.vod.path', $goVodPath);
|
||||
SystemConfig::set('memories.vod.path', $goVodPath);
|
||||
|
||||
// Make executable
|
||||
if (!is_executable($goVodPath)) {
|
||||
|
@ -398,8 +398,8 @@ class BinExt
|
|||
|
||||
public static function detectFFmpeg(): ?string
|
||||
{
|
||||
$ffmpegPath = Util::getSystemConfig('memories.vod.ffmpeg');
|
||||
$ffprobePath = Util::getSystemConfig('memories.vod.ffprobe');
|
||||
$ffmpegPath = SystemConfig::get('memories.vod.ffmpeg');
|
||||
$ffprobePath = SystemConfig::get('memories.vod.ffprobe');
|
||||
|
||||
if (empty($ffmpegPath) || !file_exists($ffmpegPath) || empty($ffprobePath) || !file_exists($ffprobePath)) {
|
||||
// Use PATH environment variable to find ffmpeg
|
||||
|
@ -418,8 +418,8 @@ class BinExt
|
|||
$ffprobePath = trim($ffprobePath);
|
||||
|
||||
// Set config
|
||||
Util::setSystemConfig('memories.vod.ffmpeg', $ffmpegPath);
|
||||
Util::setSystemConfig('memories.vod.ffprobe', $ffprobePath);
|
||||
SystemConfig::set('memories.vod.ffmpeg', $ffmpegPath);
|
||||
SystemConfig::set('memories.vod.ffprobe', $ffprobePath);
|
||||
}
|
||||
|
||||
// Check if executable
|
||||
|
|
|
@ -25,6 +25,7 @@ namespace OCA\Memories\Service;
|
|||
|
||||
use OCA\Memories\AppInfo\Application;
|
||||
use OCA\Memories\Db\TimelineWrite;
|
||||
use OCA\Memories\Settings\SystemConfig;
|
||||
use OCA\Memories\Util;
|
||||
use OCP\DB\QueryBuilder\IQueryBuilder;
|
||||
use OCP\Files\File;
|
||||
|
@ -76,7 +77,7 @@ class Index
|
|||
$root = $this->rootFolder->getUserFolder($uid);
|
||||
|
||||
// Get paths of folders to index
|
||||
$mode = Util::getSystemConfig('memories.index.mode');
|
||||
$mode = SystemConfig::get('memories.index.mode');
|
||||
if (null !== $folder) {
|
||||
$paths = [$folder];
|
||||
} elseif ('1' === $mode || '0' === $mode) { // everything (or nothing)
|
||||
|
@ -84,7 +85,7 @@ class Index
|
|||
} elseif ('2' === $mode) { // timeline
|
||||
$paths = Util::getTimelinePaths($uid);
|
||||
} elseif ('3' === $mode) { // custom
|
||||
$paths = [Util::getSystemConfig('memories.index.path')];
|
||||
$paths = [SystemConfig::get('memories.index.path')];
|
||||
} else {
|
||||
throw new \Exception('Invalid index mode');
|
||||
}
|
||||
|
|
|
@ -0,0 +1,159 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace OCA\Memories\Settings;
|
||||
|
||||
use OCA\Memories\AppInfo\Application;
|
||||
|
||||
class SystemConfig
|
||||
{
|
||||
public const DEFAULTS = [
|
||||
// Path to exiftool binary
|
||||
'memories.exiftool' => '',
|
||||
|
||||
// Do not use packaged binaries of exiftool
|
||||
// This requires perl to be available
|
||||
'memories.exiftool_no_local' => false,
|
||||
|
||||
// Temporary directory for non-php binaries. The directory must be writable
|
||||
// and the webserver user should be able to create executable binaries in it.
|
||||
// Note that go-vod temp files are separately configured (see memories.vod.tempdir)
|
||||
// Defaults to system temp directory if blank
|
||||
'memories.exiftool.tmp' => '',
|
||||
|
||||
// How to index user directories
|
||||
// 0 = auto-index disabled
|
||||
// 1 = index everything
|
||||
// 2 = index only user timelines
|
||||
// 3 = index only configured path
|
||||
'memories.index.mode' => '1',
|
||||
|
||||
// Path to index (only used if indexing mode is 3)
|
||||
'memories.index.path' => '/',
|
||||
|
||||
// Places database type identifier
|
||||
'memories.gis_type' => -1,
|
||||
|
||||
// Default timeline path for all users
|
||||
// If set to '_empty_', the user is prompted to select a path on first open (default)
|
||||
'memories.timeline.default_path' => '_empty_',
|
||||
|
||||
// Default viewer high resolution image loading condition
|
||||
// Valid values: 'always' | 'zoom' | 'never'
|
||||
'memories.viewer.high_res_cond_default' => 'zoom',
|
||||
|
||||
// Disable transcoding
|
||||
'memories.vod.disable' => true,
|
||||
|
||||
// VA-API configuration options
|
||||
'memories.vod.vaapi' => false, // Transcode with VA-API
|
||||
'memories.vod.vaapi.low_power' => false, // Use low_power mode for VA-API
|
||||
|
||||
// NVENC configuration options
|
||||
'memories.vod.nvenc' => false, // Transcode with NVIDIA NVENC
|
||||
'memories.vod.nvenc.temporal_aq' => false,
|
||||
'memories.vod.nvenc.scale' => 'npp', // npp or cuda
|
||||
|
||||
// Extra streaming configuration
|
||||
'memories.vod.use_transpose' => false,
|
||||
'memories.vod.use_gop_size' => false,
|
||||
|
||||
// Paths to ffmpeg and ffprobe binaries
|
||||
'memories.vod.ffmpeg' => '',
|
||||
'memories.vod.ffprobe' => '',
|
||||
|
||||
// Path to go-vod binary
|
||||
'memories.vod.path' => '',
|
||||
|
||||
// Path to use for transcoded files (/tmp/go-vod/instanceid)
|
||||
// Make sure this has plenty of space
|
||||
'memories.vod.tempdir' => '',
|
||||
|
||||
// Bind address to use when starting the transcoding server
|
||||
'memories.vod.bind' => '127.0.0.1:47788',
|
||||
|
||||
// Address used to connect to the transcoding server
|
||||
// If not specified, the bind address above will be used
|
||||
'memories.vod.connect' => '127.0.0.1:47788',
|
||||
|
||||
// Mark go-vod as external. If true, Memories will not attempt to
|
||||
// start go-vod if it is not running already.
|
||||
'memories.vod.external' => false,
|
||||
|
||||
// Set the default video quality for a first time user
|
||||
// 0 => Auto (default)
|
||||
// -1 => Original (max quality with transcoding)
|
||||
// -2 => Direct (disable transcoding)
|
||||
// 1080 => 1080p (and so on)
|
||||
'memories.video_default_quality' => '0',
|
||||
|
||||
// Memories only provides an admin interface for these
|
||||
// https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/config_sample_php_parameters.html#previews
|
||||
'enabledPreviewProviders' => [],
|
||||
'preview_max_x' => 4096,
|
||||
'preview_max_y' => 4096,
|
||||
'preview_max_memory' => 128,
|
||||
'preview_max_filesize_image' => 50,
|
||||
'preview_ffmpeg_path' => '',
|
||||
|
||||
// Placeholders only; these are not touched by the app
|
||||
'instanceid' => 'default',
|
||||
];
|
||||
|
||||
/**
|
||||
* Get a system config key with the correct default.
|
||||
*
|
||||
* @param string $key System config key
|
||||
* @param mixed $default Default value
|
||||
*/
|
||||
public static function get(string $key, mixed $default = null): mixed
|
||||
{
|
||||
if (!\array_key_exists($key, self::DEFAULTS)) {
|
||||
throw new \InvalidArgumentException("Invalid system config key: {$key}");
|
||||
}
|
||||
|
||||
return \OC::$server->get(\OCP\IConfig::class)
|
||||
->getSystemValue($key, $default ?? self::DEFAULTS[$key])
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a system config key.
|
||||
*
|
||||
* @param string $key System config key
|
||||
* @param mixed $value Value to set
|
||||
*
|
||||
* @throws \InvalidArgumentException
|
||||
*/
|
||||
public static function set(string $key, mixed $value): void
|
||||
{
|
||||
// Check if the key is valid
|
||||
if (!\array_key_exists($key, self::DEFAULTS)) {
|
||||
throw new \InvalidArgumentException("Invalid system config key: {$key}");
|
||||
}
|
||||
|
||||
// Key belongs to memories namespace
|
||||
$isAppKey = str_starts_with($key, Application::APPNAME.'.');
|
||||
|
||||
// Check if the value has the correct type
|
||||
if (null !== $value && \gettype($value) !== \gettype(self::DEFAULTS[$key])) {
|
||||
$expected = \gettype(self::DEFAULTS[$key]);
|
||||
$got = \gettype($value);
|
||||
|
||||
throw new \InvalidArgumentException("Invalid type for system config {$key}, expected {$expected}, got {$got}");
|
||||
}
|
||||
|
||||
// Do not allow null for non-app keys
|
||||
if (!$isAppKey && null === $value) {
|
||||
throw new \InvalidArgumentException("Invalid value for system config {$key}, null is not allowed");
|
||||
}
|
||||
|
||||
$config = \OC::$server->get(\OCP\IConfig::class);
|
||||
if ($isAppKey && ($value === self::DEFAULTS[$key] || null === $value)) {
|
||||
$config->deleteSystemValue($key);
|
||||
} else {
|
||||
$config->setSystemValue($key, $value);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,96 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
return [
|
||||
// Path to exiftool binary
|
||||
'memories.exiftool' => '',
|
||||
|
||||
// Do not use packaged binaries of exiftool
|
||||
// This requires perl to be available
|
||||
'memories.exiftool_no_local' => false,
|
||||
|
||||
// Temporary directory for non-php binaries. The directory must be writable
|
||||
// and the webserver user should be able to create executable binaries in it.
|
||||
// Note that go-vod temp files are separately configured (see memories.vod.tempdir)
|
||||
// Defaults to system temp directory if blank
|
||||
'memories.exiftool.tmp' => '',
|
||||
|
||||
// How to index user directories
|
||||
// 0 = auto-index disabled
|
||||
// 1 = index everything
|
||||
// 2 = index only user timelines
|
||||
// 3 = index only configured path
|
||||
'memories.index.mode' => '1',
|
||||
|
||||
// Path to index (only used if indexing mode is 3)
|
||||
'memories.index.path' => '/',
|
||||
|
||||
// Places database type identifier
|
||||
'memories.gis_type' => -1,
|
||||
|
||||
// Default timeline path for all users
|
||||
// If set to '_empty_', the user is prompted to select a path on first open (default)
|
||||
'memories.timeline.default_path' => '_empty_',
|
||||
|
||||
// Default viewer high resolution image loading condition
|
||||
// Valid values: 'always' | 'zoom' | 'never'
|
||||
'memories.viewer.high_res_cond_default' => 'zoom',
|
||||
|
||||
// Disable transcoding
|
||||
'memories.vod.disable' => true,
|
||||
|
||||
// VA-API configuration options
|
||||
'memories.vod.vaapi' => false, // Transcode with VA-API
|
||||
'memories.vod.vaapi.low_power' => false, // Use low_power mode for VA-API
|
||||
|
||||
// NVENC configuration options
|
||||
'memories.vod.nvenc' => false, // Transcode with NVIDIA NVENC
|
||||
'memories.vod.nvenc.temporal_aq' => false,
|
||||
'memories.vod.nvenc.scale' => 'npp', // npp or cuda
|
||||
|
||||
// Extra streaming configuration
|
||||
'memories.vod.use_transpose' => false,
|
||||
'memories.vod.use_gop_size' => false,
|
||||
|
||||
// Paths to ffmpeg and ffprobe binaries
|
||||
'memories.vod.ffmpeg' => '',
|
||||
'memories.vod.ffprobe' => '',
|
||||
|
||||
// Path to go-vod binary
|
||||
'memories.vod.path' => '',
|
||||
|
||||
// Path to use for transcoded files (/tmp/go-vod/instanceid)
|
||||
// Make sure this has plenty of space
|
||||
'memories.vod.tempdir' => '',
|
||||
|
||||
// Bind address to use when starting the transcoding server
|
||||
'memories.vod.bind' => '127.0.0.1:47788',
|
||||
|
||||
// Address used to connect to the transcoding server
|
||||
// If not specified, the bind address above will be used
|
||||
'memories.vod.connect' => '127.0.0.1:47788',
|
||||
|
||||
// Mark go-vod as external. If true, Memories will not attempt to
|
||||
// start go-vod if it is not running already.
|
||||
'memories.vod.external' => false,
|
||||
|
||||
// Set the default video quality for a first time user
|
||||
// 0 => Auto (default)
|
||||
// -1 => Original (max quality with transcoding)
|
||||
// -2 => Direct (disable transcoding)
|
||||
// 1080 => 1080p (and so on)
|
||||
'memories.video_default_quality' => '0',
|
||||
|
||||
// Memories only provides an admin interface for these
|
||||
// https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/config_sample_php_parameters.html#previews
|
||||
'enabledPreviewProviders' => [],
|
||||
'preview_max_x' => 4096,
|
||||
'preview_max_y' => 4096,
|
||||
'preview_max_memory' => 128,
|
||||
'preview_max_filesize_image' => 50,
|
||||
'preview_ffmpeg_path' => '',
|
||||
|
||||
// Placeholders only; these are not touched by the app
|
||||
'instanceid' => 'default',
|
||||
];
|
75
lib/Util.php
75
lib/Util.php
|
@ -8,6 +8,7 @@ use OC\Files\Search\SearchBinaryOperator;
|
|||
use OC\Files\Search\SearchComparison;
|
||||
use OC\Files\Search\SearchQuery;
|
||||
use OCA\Memories\AppInfo\Application;
|
||||
use OCA\Memories\Settings\SystemConfig;
|
||||
use OCP\App\IAppManager;
|
||||
use OCP\Files\Node;
|
||||
use OCP\Files\Search\ISearchBinaryOperator;
|
||||
|
@ -321,7 +322,7 @@ class Util
|
|||
*/
|
||||
public static function placesGISType(): int
|
||||
{
|
||||
return self::getSystemConfig('memories.gis_type');
|
||||
return SystemConfig::get('memories.gis_type');
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -333,7 +334,7 @@ class Util
|
|||
{
|
||||
$paths = \OC::$server->get(IConfig::class)
|
||||
->getUserValue($uid, Application::APPNAME, 'timelinePath', null)
|
||||
?: self::getSystemConfig('memories.timeline.default_path');
|
||||
?: SystemConfig::get('memories.timeline.default_path');
|
||||
|
||||
return array_map(
|
||||
static fn ($path) => self::sanitizePath(trim($path))
|
||||
|
@ -385,76 +386,6 @@ class Util
|
|||
return array_pad(explode($delimiter, $string, $count), $count, '');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a system config key with the correct default.
|
||||
*
|
||||
* @param string $key System config key
|
||||
* @param mixed $default Default value
|
||||
*/
|
||||
public static function getSystemConfig(string $key, mixed $default = null): mixed
|
||||
{
|
||||
$config = \OC::$server->get(\OCP\IConfig::class);
|
||||
|
||||
$defaults = self::systemConfigDefaults();
|
||||
if (!\array_key_exists($key, $defaults)) {
|
||||
throw new \InvalidArgumentException("Invalid system config key: {$key}");
|
||||
}
|
||||
|
||||
return $config->getSystemValue($key, $default ?? $defaults[$key]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a system config key.
|
||||
*
|
||||
* @throws \InvalidArgumentException
|
||||
*/
|
||||
public static function setSystemConfig(string $key, mixed $value): void
|
||||
{
|
||||
$config = \OC::$server->get(\OCP\IConfig::class);
|
||||
|
||||
// Check if the key is valid
|
||||
$defaults = self::systemConfigDefaults();
|
||||
if (!\array_key_exists($key, $defaults)) {
|
||||
throw new \InvalidArgumentException("Invalid system config key: {$key}");
|
||||
}
|
||||
|
||||
// Key belongs to memories namespace
|
||||
$isAppKey = str_starts_with($key, Application::APPNAME.'.');
|
||||
|
||||
// Check if the value has the correct type
|
||||
if (null !== $value && \gettype($value) !== \gettype($defaults[$key])) {
|
||||
$expected = \gettype($defaults[$key]);
|
||||
$got = \gettype($value);
|
||||
|
||||
throw new \InvalidArgumentException("Invalid type for system config {$key}, expected {$expected}, got {$got}");
|
||||
}
|
||||
|
||||
// Do not allow null for non-app keys
|
||||
if (!$isAppKey && null === $value) {
|
||||
throw new \InvalidArgumentException("Invalid value for system config {$key}, null is not allowed");
|
||||
}
|
||||
|
||||
if ($isAppKey && ($value === $defaults[$key] || null === $value)) {
|
||||
$config->deleteSystemValue($key);
|
||||
} else {
|
||||
$config->setSystemValue($key, $value);
|
||||
}
|
||||
}
|
||||
|
||||
/** Get list of defaults for all system config keys. */
|
||||
public static function systemConfigDefaults(): array
|
||||
{
|
||||
return require __DIR__.'/SystemConfigDefault.php';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the instance ID for this instance.
|
||||
*/
|
||||
public static function getInstanceId(): string
|
||||
{
|
||||
return self::getSystemConfig('instanceid');
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the API call was made from a native interface.
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue