summaryrefslogtreecommitdiffstats
path: root/lib/private/InitialStateService.php
diff options
context:
space:
mode:
authorRoeland Jago Douma <roeland@famdouma.nl>2019-01-17 12:30:47 +0100
committerRoeland Jago Douma <roeland@famdouma.nl>2019-01-29 22:21:54 +0100
commitf30877ea7c758346b700e4ac0f9c684a5ae99c7f (patch)
treeffbdd342c3bcc42d08d7315e78dc3075fe93a2b9 /lib/private/InitialStateService.php
parent139055c1ddec25465dd7644de9866cd6a1048da2 (diff)
downloadnextcloud-server-f30877ea7c758346b700e4ac0f9c684a5ae99c7f.tar.gz
nextcloud-server-f30877ea7c758346b700e4ac0f9c684a5ae99c7f.zip
Provide initial state
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
Diffstat (limited to 'lib/private/InitialStateService.php')
-rw-r--r--lib/private/InitialStateService.php74
1 files changed, 74 insertions, 0 deletions
diff --git a/lib/private/InitialStateService.php b/lib/private/InitialStateService.php
new file mode 100644
index 00000000000..df7f94fbda1
--- /dev/null
+++ b/lib/private/InitialStateService.php
@@ -0,0 +1,74 @@
+<?php
+declare(strict_types=1);
+/**
+ * @copyright Copyright (c) 2019, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC;
+
+use OCP\IInitialStateService;
+use OCP\ILogger;
+
+class InitialStateService implements IInitialStateService {
+
+ /** @var ILogger */
+ private $logger;
+
+ /** @var array */
+ private $states = [];
+
+ /** @var array */
+ private $lazyStates = [];
+
+ public function __construct(ILogger $logger) {
+ $this->logger = $logger;
+ }
+
+ public function provideInitialState(string $appName, $data) {
+ // Scalars and JsonSerializable are fine
+ if (is_scalar($data) || $data instanceof \JsonSerializable || is_array($data)) {
+ $this->states[$appName] = json_encode($data);
+ return;
+ }
+
+ $this->logger->warning('Invalid data provided to provideInitialState by ' . $appName);
+ }
+
+ public function provideLazyInitialState(string $appName, \Closure $closure) {
+ $this->lazyStates[$appName] = $closure;
+ }
+
+ public function getInitialStates(): array {
+ $states = $this->states;
+ foreach ($this->lazyStates as $app => $lazyState) {
+ $state = $lazyState();
+
+ if (!($lazyState instanceof \JsonSerializable)) {
+ $this->logger->warning($app . ' provided an invalid lazy state');
+ }
+
+ $states[$app] = json_encode($state);
+ }
+
+ return $states;
+ }
+
+}