Passed
Pull Request — master (#232)
by Matias
05:40 queued 04:10
created

SettingsService::setMemoryLimits()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 2
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 1
dl 0
loc 2
ccs 0
cts 2
cp 0
crap 2
rs 10
c 0
b 0
f 0
1
<?php
2
declare(strict_types=1);
3
/**
4
 * @copyright Copyright (c) 2020 Matias De lellis <[email protected]>
5
 *
6
 * @author Matias De lellis <[email protected]>
7
 *
8
 * @license GNU AGPL version 3 or any later version
9
 *
10
 * This program is free software: you can redistribute it and/or modify
11
 * it under the terms of the GNU Affero General Public License as
12
 * published by the Free Software Foundation, either version 3 of the
13
 * License, or (at your option) any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 * GNU Affero General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU Affero General Public License
21
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
22
 *
23
 */
24
25
namespace OCA\FaceRecognition\Service;
26
27
use OCA\FaceRecognition\AppInfo\Application;
28
29
use OCA\FaceRecognition\Model\ModelManager;
30
31
use OCP\IConfig;
32
33
class SettingsService {
34
35
	/*
36
	 * System
37
	 */
38
	const MINIMUM_SYSTEM_MEMORY_REQUIREMENTS = 2 * 1024 * 1024 * 1024;
39
40
	/*
41
	 * Settings keys and default values.
42
	 */
43
44
	/** Current Model used to analyze */
45
	const CURRENT_MODEL_KEY = 'model';
46
	const FALLBACK_CURRENT_MODEL = -1;
47
48
	/** Image area that used used for analysis */
49
	const ANALYSIS_IMAGE_AREA_KEY = "analysis_image_area";
50
	const MINIMUM_ANALYSIS_IMAGE_AREA = 640*680;
51
	const DEFAULT_ANALYSIS_IMAGE_AREA = -1; // It is dynamically configured according to hardware
52
	const MAXIMUM_ANALYSIS_IMAGE_AREA = 3840*2160;
53
54
	/** Sensitivity used to clustering */
55
	const SENSITIVITY_KEY = 'sensitivity';
56
	const MINIMUM_SENSITIVITY = '0.4';
57
	const DEFAULT_SENSITIVITY = '0.4';
58
	const MAXIMUM_SENSITIVITY = '0.6';
59
60
	/** Minimum confidence used to try to clustring faces */
61
	const MINIMUM_CONFIDENCE_KEY = 'min-confidence';
62
	const MINIMUM_MINIMUM_CONFIDENCE = '0.0';
63
	const DEFAULT_MINIMUM_CONFIDENCE = '0.99';
64
	const MAXIMUM_MINIMUM_CONFIDENCE = '1.0';
65
66
	/** Show single persons on clustes view */
67
	const SHOW_NOT_GROUPED_KEY = 'show-not-grouped';
68
	const DEFAULT_SHOW_NOT_GROUPED = 'false';
69
70
	/** User setting what indicates if has the analysis enabled */
71
	const USER_ENABLED_KEY = 'enabled';
72
	const DEFAULT_USER_ENABLED = 'false';
73
74
	/** User setting that remember last images checked */
75
	const STALE_IMAGES_LAST_CHECKED_KEY = 'stale_images_last_checked';
76
	const DEFAULT_STALE_IMAGES_LAST_CHECKED = '0';
77
78
	/** Define if for some reason need remove old images */
79
	const STALE_IMAGES_REMOVAL_NEEDED_KEY = 'stale_images_removal_needed';
80
	const DEFAULT_STALE_IMAGES_REMOVAL_NEEDED = 'false';
81
82
	/** User setting that indicate when scan finished */
83
	const FULL_IMAGE_SCAN_DONE_KEY = 'full_image_scan_done';
84
	const DEFAULT_FULL_IMAGE_SCAN_DONE = 'false';
85
86
	/** User setting that indicate that need to recreate clusters */
87
	const USER_RECREATE_CLUSTERS_KEY = 'recreate-clusters';
88
	const DEFAULT_USER_RECREATE_CLUSTERS = 'false';
89
90
	/** User setting that indicate that is forced to create clusters */
91
	const FORCE_CREATE_CLUSTERS_KEY = 'force-create-clusters';
92
	const DEFAULT_FORCE_CREATE_CLUSTERS = 'false';
93
94
	/** Hidden setting that allows to analyze shared files */
95
	const HANDLE_SHARED_FILES_KEY = 'handle-shared-files';
96
	const DEFAULT_HANDLE_SHARED_FILES = 'false';
97
98
	/** Hidden setting that indicate minimum large of image to analyze */
99
	const MINIMUM_IMAGE_SIZE_KEY = 'min_image_size';
100
	const DEFAULT_MINIMUM_IMAGE_SIZE = '512';
101
102
	/** Hidden setting that indicate maximum area of image to analyze */
103
	const MAXIMUM_IMAGE_AREA_KEY = 'max_image_area';
104
	const DEFAULT_MAXIMUM_IMAGE_AREA = '-1';
105
106
107
	/**
108
	 * SettingsService
109
	 */
110
111
	/** @var IConfig Config */
112
	private $config;
113
114
	/**  @var string|null */
115
	private $userId;
116
117
	/**
118
	 * @param IConfig $config
119
	 * @param string $userId
120
	 */
121 1
	public function __construct(IConfig $config,
122
	                            $userId)
123
	{
124 1
		$this->config = $config;
125 1
		$this->userId = $userId;
126 1
	}
127
128
	/*
129
	 * User settings.
130
	 */
131 10
	public function getUserEnabled ($userId = null): bool {
132 10
		$enabled = $this->config->getUserValue($userId ?? $this->userId, Application::APP_NAME, self::USER_ENABLED_KEY, self::DEFAULT_USER_ENABLED);
133 10
		return ($enabled === 'true');
134
	}
135
136
	public function setUserEnabled (bool $enabled, $userId = null) {
137
		$this->config->setUserValue($userId ?? $this->userId, Application::APP_NAME, self::USER_ENABLED_KEY, $enabled ? "true" : "false");
138
	}
139
140 10
	public function getUserFullScanDone ($userId = null): bool {
141 10
		$fullScanDone = $this->config->getUserValue($userId ?? $this->userId, Application::APP_NAME, self::FULL_IMAGE_SCAN_DONE_KEY, self::DEFAULT_FULL_IMAGE_SCAN_DONE);
142 10
		return ($fullScanDone === 'true');
143
	}
144
145 28
	public function setUserFullScanDone (bool $fullScanDone, $userId = null) {
146 28
		$this->config->setUserValue($userId ?? $this->userId, Application::APP_NAME, self::FULL_IMAGE_SCAN_DONE_KEY, $fullScanDone ? "true" : "false");
147 28
	}
148
149 3
	public function getNeedRemoveStaleImages ($userId = null): bool {
150 3
		$needRemoval = $this->config->getUserValue($userId ?? $this->userId, Application::APP_NAME, self::STALE_IMAGES_REMOVAL_NEEDED_KEY, self::DEFAULT_STALE_IMAGES_REMOVAL_NEEDED);
151 3
		return ($needRemoval === 'true');
152
	}
153
154 2
	public function setNeedRemoveStaleImages (bool $needRemoval, $userId = null) {
155 2
		$this->config->setUserValue($userId ?? $this->userId, Application::APP_NAME, self::STALE_IMAGES_REMOVAL_NEEDED_KEY, $needRemoval ? "true" : "false");
156 2
	}
157
158 2
	public function getLastStaleImageChecked ($userId = null): int {
159 2
		return intval($this->config->getUserValue($userId ?? $this->userId, Application::APP_NAME, self::STALE_IMAGES_LAST_CHECKED_KEY, self::DEFAULT_STALE_IMAGES_LAST_CHECKED));
160
	}
161
162 2
	public function setLastStaleImageChecked (int $lastCheck, $userId = null) {
163 2
		$this->config->setUserValue($userId ?? $this->userId, Application::APP_NAME, self::STALE_IMAGES_LAST_CHECKED_KEY, $lastCheck);
164 2
	}
165
166
	public function getNeedRecreateClusters ($userId = null): bool {
167
		$needRecreate = $this->config->getUserValue($userId ?? $this->userId, Application::APP_NAME, self::USER_RECREATE_CLUSTERS_KEY, self::DEFAULT_USER_RECREATE_CLUSTERS);
168
		return ($needRecreate === 'true');
169
	}
170
171 1
	public function setNeedRecreateClusters (bool $needRecreate, $userId = null) {
172 1
		$this->config->setUserValue($userId ?? $this->userId, Application::APP_NAME, self::USER_RECREATE_CLUSTERS_KEY, $needRecreate ? "true" : "false");
173 1
	}
174
175 1
	public function getForceCreateClusters ($userId = null): bool {
176 1
		$forceCreate = $this->config->getUserValue($userId ?? $this->userId, Application::APP_NAME, self::FORCE_CREATE_CLUSTERS_KEY, self::DEFAULT_FORCE_CREATE_CLUSTERS);
177 1
		return ($forceCreate === 'true');
178
	}
179
180 1
	public function setForceCreateClusters (bool $forceCreate, $userId = null) {
181 1
		$this->config->setUserValue($userId ?? $this->userId, Application::APP_NAME, self::FORCE_CREATE_CLUSTERS_KEY, $forceCreate ? "true" : "false");
182 1
	}
183
184
	/*
185
	 * Admin and process settings.
186
	 */
187 12
	public function getCurrentFaceModel(): int {
188 12
		return intval($this->config->getAppValue(Application::APP_NAME, self::CURRENT_MODEL_KEY, self::FALLBACK_CURRENT_MODEL));
189
	}
190
191
	public function setCurrentFaceModel(int $model) {
192
		$this->config->setAppValue(Application::APP_NAME, self::CURRENT_MODEL_KEY, strval($model));
193
	}
194
195 2
	public function getAnalysisImageArea(): int {
196 2
		return intval($this->config->getAppValue(Application::APP_NAME, self::ANALYSIS_IMAGE_AREA_KEY, self::DEFAULT_ANALYSIS_IMAGE_AREA));
197
	}
198
199
	public function setAnalysisImageArea(int $imageArea) {
200
		$this->config->setAppValue(Application::APP_NAME, self::ANALYSIS_IMAGE_AREA_KEY, strval($imageArea));
201
	}
202
203 1
	public function getSensitivity(): float {
204 1
		return floatval($this->config->getAppValue(Application::APP_NAME, self::SENSITIVITY_KEY, self::DEFAULT_SENSITIVITY));
205
	}
206
207
	public function setSensitivity($sensitivity) {
208
		$this->config->setAppValue(Application::APP_NAME, self::SENSITIVITY_KEY, $sensitivity);
209
	}
210
211 1
	public function getMinimumConfidence(): float {
212 1
		return floatval($this->config->getAppValue(Application::APP_NAME, self::MINIMUM_CONFIDENCE_KEY, self::DEFAULT_MINIMUM_CONFIDENCE));
213
	}
214
215
	public function setMinimumConfidence($confidence) {
216
		$this->config->setAppValue(Application::APP_NAME, self::MINIMUM_CONFIDENCE_KEY, $confidence);
217
	}
218
219
	public function getShowNotGrouped(): bool {
220
		$show = $this->config->getAppValue(Application::APP_NAME, self::SHOW_NOT_GROUPED_KEY, self::DEFAULT_SHOW_NOT_GROUPED);
221
		return ($show === 'true');
222
	}
223
224
	public function setShowNotGrouped(bool $show) {
225
		$this->config->setAppValue(Application::APP_NAME, self::SHOW_NOT_GROUPED_KEY, $show ? "true" : "false");
226
	}
227
228
	/**
229
	 * The next settings are advanced preferences that are not available in gui.
230
	 * See: https://github.com/matiasdelellis/facerecognition/wiki/Settings#hidden-settings
231
	 */
232
	public function getHandleSharedFiles(): bool {
233
		$handle = $this->config->getAppValue(Application::APP_NAME, self::HANDLE_SHARED_FILES_KEY, self::DEFAULT_HANDLE_SHARED_FILES);
234
		return ($handle === 'true');
235
	}
236
237 3
	public function getMinimumImageSize(): int {
238 3
		return intval($this->config->getAppValue(Application::APP_NAME, self::MINIMUM_IMAGE_SIZE_KEY, self::DEFAULT_MINIMUM_IMAGE_SIZE));
239
	}
240
241 2
	public function getMaximumImageArea(): int {
242 2
		return intval($this->config->getAppValue(Application::APP_NAME, self::MAXIMUM_IMAGE_AREA_KEY, self::DEFAULT_MAXIMUM_IMAGE_AREA));
243
	}
244
245
}
246