-
-
Notifications
You must be signed in to change notification settings - Fork 166
Expand file tree
/
Copy pathSystemConfig.php
More file actions
194 lines (154 loc) · 6.71 KB
/
Copy pathSystemConfig.php
File metadata and controls
194 lines (154 loc) · 6.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
<?php
declare(strict_types=1);
namespace OCA\Memories\Settings;
use OCA\Memories\AppInfo\Application;
class SystemConfig
{
// Do not change the next line, it's used by the docs
// to generate the default config page
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.
// go-vod temp files are separately configured (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' => '/',
// Blacklist file or folder paths by regex
'memories.index.path.blacklist' => '\/@(Recycle|eaDir)\/',
// 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
'memories.timeline.default_path' => '_empty_',
// Whether to include files accessible via shared albums in the timeline by default
'memories.timeline.default_include_shared_albums' => true,
// 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' => 'cuda', // cuda or npp
// Extra streaming configuration
'memories.vod.use_transpose' => false,
'memories.vod.use_transpose.force_sw' => 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,
// Quality Factor used for transcoding
// This correspondes to CRF for x264 and global_quality for VA-API
'memories.vod.qf' => 24,
// 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',
// Availability of database features, e.g. triggers
'memories.db.triggers.fcu' => false,
// Run in read-only config mode
'memories.readonly' => false,
// Memories only provides an admin interface for these
'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}");
}
// Use the default value if not provided
$default = $default ?? self::DEFAULTS[$key];
// Get the value from the config
$value = \OC::$server->get(\OCP\IConfig::class)
->getSystemValue($key, $default)
;
// Check if the value has the correct type
if (($got = \gettype($value)) !== ($exp = \gettype($default))) {
throw new \InvalidArgumentException("Invalid type for system config {$key}, expected {$exp}, got {$got}");
}
return $value;
}
/**
* 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 && ($got = \gettype($value)) !== ($exp = \gettype(self::DEFAULTS[$key]))) {
throw new \InvalidArgumentException("Invalid type for system config {$key}, expected {$exp}, 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);
}
}
/**
* Check if geolocation (places) is enabled and available.
* Returns the type of the GIS.
*/
public static function gisType(): int
{
return self::get('memories.gis_type');
}
}