aboutsummaryrefslogtreecommitdiffstats
path: root/lib/public/Files/Lock/ILockManager.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/public/Files/Lock/ILockManager.php')
-rw-r--r--lib/public/Files/Lock/ILockManager.php59
1 files changed, 59 insertions, 0 deletions
diff --git a/lib/public/Files/Lock/ILockManager.php b/lib/public/Files/Lock/ILockManager.php
new file mode 100644
index 00000000000..d19116a9b3d
--- /dev/null
+++ b/lib/public/Files/Lock/ILockManager.php
@@ -0,0 +1,59 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+namespace OCP\Files\Lock;
+
+use OCP\PreConditionNotMetException;
+
+/**
+ * Manage app integrations with files_lock with collaborative editors
+ *
+ * The OCP parts are mainly for exposing the ability to lock/unlock for apps and
+ * to give the files_lock app a way to register and then be triggered by the apps
+ * while the actual locking implementation is kept in the LockProvider and DAV
+ * plugin from files_lock app.
+ *
+ * @since 24.0.0
+ */
+interface ILockManager extends ILockProvider {
+ /**
+ * @throws PreConditionNotMetException if there is already a lock provider registered
+ * @since 24.0.0
+ * @deprecated 30.0.0 Use registerLazyLockProvider
+ */
+ public function registerLockProvider(ILockProvider $lockProvider): void;
+
+ /**
+ * @param string $lockProviderClass
+ * @return void
+ * @since 30.0.0
+ */
+ public function registerLazyLockProvider(string $lockProviderClass): void;
+
+ /**
+ * @return bool
+ * @since 24.0.0
+ */
+ public function isLockProviderAvailable(): bool;
+
+ /**
+ * Run within the scope of a given lock condition
+ *
+ * The callback will also be executed if no lock provider is present
+ *
+ * @since 24.0.0
+ */
+ public function runInScope(LockContext $lock, callable $callback): void;
+
+ /**
+ * @throws NoLockProviderException if there is no lock provider available
+ * @since 24.0.0
+ */
+ public function getLockInScope(): ?LockContext;
+}