Created
September 20, 2015 09:12
-
-
Save georgehrke/dc2ca5bf4e631381cc3c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From bb82c0ca889f0f75544d1cb1089f1c1af3ee15fc Mon Sep 17 00:00:00 2001 | |
From: Georg Ehrke <[email protected]> | |
Date: Mon, 23 Mar 2015 01:05:33 +0100 | |
Subject: [PATCH] delete cached preview when rolling back file's version | |
add random number using OC.parseQueryString and _.extend() | |
version rollback: add missing prefix to OC\Preview::post_delete | |
add test to assure that the rollback hook is called | |
--- | |
apps/files_versions/js/versions.js | 15 ++++++++++++++ | |
apps/files_versions/lib/storage.php | 3 +++ | |
apps/files_versions/tests/versions.php | 37 ++++++++++++++++++++++++++++++++++ | |
lib/base.php | 3 ++- | |
lib/private/preview.php | 7 +++++++ | |
5 files changed, 64 insertions(+), 1 deletion(-) | |
diff --git a/apps/files_versions/js/versions.js b/apps/files_versions/js/versions.js | |
index e86bb4c..1223cc7 100644 | |
--- a/apps/files_versions/js/versions.js | |
+++ b/apps/files_versions/js/versions.js | |
@@ -74,6 +74,21 @@ function revertFile(file, revision) { | |
} else { | |
$('#dropdown').slideUp(OC.menuSpeed, function() { | |
$('#dropdown').closest('tr').find('.modified:first').html(relative_modified_date(revision)); | |
+ //trigger reload of thumbnail | |
+ var thumbnail = $('#dropdown').closest('tr').find('.thumbnail:first'); | |
+ if (thumbnail.length > 0) { | |
+ var url = thumbnail.css('background-image'); | |
+ //strip of url(...) | |
+ url = url.replace('url(','').replace(')',''); | |
+ | |
+ var url_hash = OC.parseQueryString(url); | |
+ var random = Math.round((new Date()).getTime() / 1000); | |
+ url = OC.generateUrl('/core/preview.png?') + OC.buildQueryString(_.extend(url_hash, {r: random})); | |
+ | |
+ url = 'url(' + url + ')'; | |
+ thumbnail.css('background-image', url); | |
+ } | |
+ | |
$('#dropdown').remove(); | |
$('tr').removeClass('mouseOver'); | |
}); | |
diff --git a/apps/files_versions/lib/storage.php b/apps/files_versions/lib/storage.php | |
index e0034f6..f7064f7 100644 | |
--- a/apps/files_versions/lib/storage.php | |
+++ b/apps/files_versions/lib/storage.php | |
@@ -311,6 +311,9 @@ public static function rollback($file, $revision) { | |
if (self::copyFileContents($users_view, 'files_versions' . $filename . '.v' . $revision, 'files' . $filename)) { | |
$files_view->touch($file, $revision); | |
Storage::scheduleExpire($uid, $file); | |
+ \OC_Hook::emit('\OCP\Versions', 'rollback', array( | |
+ 'path' => $filename, | |
+ )); | |
return true; | |
} else if ($versionCreated) { | |
self::deleteVersion($users_view, $version); | |
diff --git a/apps/files_versions/tests/versions.php b/apps/files_versions/tests/versions.php | |
index 7cca409..a9eb1b9 100644 | |
--- a/apps/files_versions/tests/versions.php | |
+++ b/apps/files_versions/tests/versions.php | |
@@ -580,6 +580,35 @@ public function testRestoreCrossStorage() { | |
$this->doTestRestore(); | |
} | |
+ /** | |
+ * @param string $hookName name of hook called | |
+ * @param string $params variable to recieve parameters provided by hook | |
+ */ | |
+ private function connectMockHooks($hookName, &$params) { | |
+ if ($hookName === null) { | |
+ return; | |
+ } | |
+ | |
+ $eventHandler = $this->getMockBuilder('\stdclass') | |
+ ->setMethods(['callback']) | |
+ ->getMock(); | |
+ | |
+ $eventHandler->expects($this->any()) | |
+ ->method('callback') | |
+ ->will($this->returnCallback( | |
+ function($p) use (&$params) { | |
+ $params = $p; | |
+ } | |
+ )); | |
+ | |
+ \OCP\Util::connectHook( | |
+ '\OCP\Versions', | |
+ $hookName, | |
+ $eventHandler, | |
+ 'callback' | |
+ ); | |
+ } | |
+ | |
private function doTestRestore() { | |
$filePath = self::TEST_VERSIONS_USER . '/files/sub/test.txt'; | |
$this->rootView->file_put_contents($filePath, 'test file'); | |
@@ -608,7 +637,15 @@ private function doTestRestore() { | |
$this->assertEquals('test file', $this->rootView->file_get_contents($filePath)); | |
$info1 = $this->rootView->getFileInfo($filePath); | |
+ $params = array(); | |
+ $this->connectMockHooks('rollback', $params); | |
+ | |
\OCA\Files_Versions\Storage::rollback('sub/test.txt', $t2); | |
+ $expectedParams = array( | |
+ 'path' => '/sub/test.txt', | |
+ ); | |
+ | |
+ $this->assertEquals($expectedParams, $params); | |
$this->assertEquals('version2', $this->rootView->file_get_contents($filePath)); | |
$info2 = $this->rootView->getFileInfo($filePath); | |
diff --git a/lib/base.php b/lib/base.php | |
index fde6783..02a0c02 100644 | |
--- a/lib/base.php | |
+++ b/lib/base.php | |
@@ -787,8 +787,9 @@ public static function registerPreviewHooks() { | |
OC_Hook::connect('\OCP\Versions', 'preDelete', 'OC\Preview', 'prepare_delete'); | |
OC_Hook::connect('\OCP\Trashbin', 'preDelete', 'OC\Preview', 'prepare_delete'); | |
OC_Hook::connect('OC_Filesystem', 'post_delete', 'OC\Preview', 'post_delete_files'); | |
- OC_Hook::connect('\OCP\Versions', 'delete', 'OC\Preview', 'post_delete'); | |
+ OC_Hook::connect('\OCP\Versions', 'delete', 'OC\Preview', 'post_delete_versions'); | |
OC_Hook::connect('\OCP\Trashbin', 'delete', 'OC\Preview', 'post_delete'); | |
+ OC_Hook::connect('\OCP\Versions', 'rollback', 'OC\Preview', 'post_delete_versions'); | |
} | |
/** | |
diff --git a/lib/private/preview.php b/lib/private/preview.php | |
index 5dcab47..1ec03f6 100644 | |
--- a/lib/private/preview.php | |
+++ b/lib/private/preview.php | |
@@ -1234,6 +1234,13 @@ public static function post_delete_files($args) { | |
/** | |
* @param array $args | |
+ */ | |
+ public static function post_delete_versions($args) { | |
+ self::post_delete($args, 'files/'); | |
+ } | |
+ | |
+ /** | |
+ * @param array $args | |
* @param string $prefix | |
*/ | |
public static function post_delete($args, $prefix = '') { |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment