aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorChristoph Wurst <christoph@winzerhof-wurst.at>2019-01-30 12:10:10 +0100
committerChristoph Wurst <christoph@winzerhof-wurst.at>2019-01-30 16:08:08 +0100
commit0e6cb988a1cb6e0bc94053816ebb7bdc66e871af (patch)
treea7abf657c978cb6faedc918e41d3b6b8e64c26b6 /lib
parent49ae3a3daa3ea479902386792b34359cbc8a8fdf (diff)
downloadnextcloud-server-0e6cb988a1cb6e0bc94053816ebb7bdc66e871af.tar.gz
nextcloud-server-0e6cb988a1cb6e0bc94053816ebb7bdc66e871af.zip
Add a key parameter to the new initial state API
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
Diffstat (limited to 'lib')
-rw-r--r--lib/private/InitialStateService.php46
-rw-r--r--lib/public/IInitialStateService.php10
2 files changed, 38 insertions, 18 deletions
diff --git a/lib/private/InitialStateService.php b/lib/private/InitialStateService.php
index df7f94fbda1..6db264bb981 100644
--- a/lib/private/InitialStateService.php
+++ b/lib/private/InitialStateService.php
@@ -24,6 +24,7 @@ declare(strict_types=1);
namespace OC;
+use Closure;
use OCP\IInitialStateService;
use OCP\ILogger;
@@ -32,43 +33,58 @@ class InitialStateService implements IInitialStateService {
/** @var ILogger */
private $logger;
- /** @var array */
+ /** @var string[][] */
private $states = [];
- /** @var array */
+ /** @var Closure[][] */
private $lazyStates = [];
public function __construct(ILogger $logger) {
$this->logger = $logger;
}
- public function provideInitialState(string $appName, $data) {
+ public function provideInitialState(string $appName, string $key, $data): void {
// Scalars and JsonSerializable are fine
if (is_scalar($data) || $data instanceof \JsonSerializable || is_array($data)) {
- $this->states[$appName] = json_encode($data);
+ if (!isset($this->states[$appName])) {
+ $this->states[$appName] = [];
+ }
+ $this->states[$appName][$key] = 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 provideLazyInitialState(string $appName, string $key, Closure $closure): void {
+ if (!isset($this->lazyStates[$appName])) {
+ $this->lazyStates[$appName] = [];
+ }
+ $this->lazyStates[$appName][$key] = $closure;
+ }
+
+ /**
+ * Invoke all callbacks to populate the `states` property
+ */
+ private function invokeLazyStateCallbacks(): void {
+ foreach ($this->lazyStates as $app => $lazyStates) {
+ foreach ($lazyStates as $key => $lazyState) {
+ $this->provideInitialState($app, $key, $lazyState());
+ }
+ }
+ $this->lazyStates = [];
}
public function getInitialStates(): array {
- $states = $this->states;
- foreach ($this->lazyStates as $app => $lazyState) {
- $state = $lazyState();
+ $this->invokeLazyStateCallbacks();
- if (!($lazyState instanceof \JsonSerializable)) {
- $this->logger->warning($app . ' provided an invalid lazy state');
+ $appStates = [];
+ foreach ($this->states as $app => $states) {
+ foreach ($states as $key => $value) {
+ $appStates["$app-$key"] = $value;
}
-
- $states[$app] = json_encode($state);
}
-
- return $states;
+ return $appStates;
}
}
diff --git a/lib/public/IInitialStateService.php b/lib/public/IInitialStateService.php
index ff6144e0d45..49096886846 100644
--- a/lib/public/IInitialStateService.php
+++ b/lib/public/IInitialStateService.php
@@ -24,6 +24,8 @@ declare(strict_types=1);
namespace OCP;
+use Closure;
+
/**
* @since 16.0.0
*/
@@ -36,9 +38,10 @@ interface IInitialStateService {
* @since 16.0.0
*
* @param string $appName
+ * @param string $key
* @param bool|int|float|string|array|\JsonSerializable $data
*/
- public function provideInitialState(string $appName, $data);
+ public function provideInitialState(string $appName, string $key, $data): void;
/**
* Allows an app to provide its initial state via a lazy method.
@@ -50,7 +53,8 @@ interface IInitialStateService {
* @since 16.0.0
*
* @param string $appName
- * @param \Closure $closure Has to return an object that implements JsonSerializable
+ * @param string $key
+ * @param Closure $closure returns a primitive or an object that implements JsonSerializable
*/
- public function provideLazyInitialState(string $appName, \Closure $closure);
+ public function provideLazyInitialState(string $appName, string $key, Closure $closure): void;
}