aboutsummaryrefslogtreecommitdiffstats
path: root/apps/files_sharing/lib/propagation/changewatcher.php
diff options
context:
space:
mode:
Diffstat (limited to 'apps/files_sharing/lib/propagation/changewatcher.php')
-rw-r--r--apps/files_sharing/lib/propagation/changewatcher.php56
1 files changed, 56 insertions, 0 deletions
diff --git a/apps/files_sharing/lib/propagation/changewatcher.php b/apps/files_sharing/lib/propagation/changewatcher.php
new file mode 100644
index 00000000000..fa5208b498b
--- /dev/null
+++ b/apps/files_sharing/lib/propagation/changewatcher.php
@@ -0,0 +1,56 @@
+<?php
+/**
+ * Copyright (c) 2015 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCA\Files_Sharing\Propagation;
+
+use OC\Files\Cache\ChangePropagator;
+use OC\Files\View;
+use OCA\Files_Sharing\SharedMount;
+
+/**
+ * Watch for changes made in a shared mount and propagate the changes to the share owner
+ */
+class ChangeWatcher {
+ /**
+ * The user view for the logged in user
+ *
+ * @var \OC\Files\View
+ */
+ private $baseView;
+
+ function __construct(View $baseView) {
+ $this->baseView = $baseView;
+ }
+
+
+ public function writeHook($params) {
+ $path = $params['path'];
+ $fullPath = $this->baseView->getAbsolutePath($path);
+ $mount = $this->baseView->getMount($path);
+ if ($mount instanceof SharedMount) {
+ $this->propagateForOwner($mount->getShare(), $mount->getInternalPath($fullPath), $mount->getOwnerPropagator());
+ }
+ }
+
+ /**
+ * @param array $share
+ * @param string $internalPath
+ * @param \OC\Files\Cache\ChangePropagator $propagator
+ */
+ private function propagateForOwner($share, $internalPath, ChangePropagator $propagator) {
+ // note that we have already set up the filesystem for the owner when mounting the share
+ $view = new View('/' . $share['uid_owner'] . '/files');
+
+ $shareRootPath = $view->getPath($share['item_source']);
+ if ($shareRootPath) {
+ $path = $shareRootPath . '/' . $internalPath;
+ $propagator->addChange($path);
+ $propagator->propagateChanges();
+ }
+ }
+}