summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorRobin Appelman <icewind@owncloud.com>2013-04-20 16:56:47 +0200
committerRobin Appelman <icewind@owncloud.com>2013-04-20 16:57:53 +0200
commiteed5e9f804c0aac0467e1f502d86266ea232f350 (patch)
tree229e007d21ce6fae8d33527d83c69cb36d1ce6f1 /lib
parent15dae6198fc4855519a0ed2347c29485a061f6aa (diff)
downloadnextcloud-server-eed5e9f804c0aac0467e1f502d86266ea232f350.tar.gz
nextcloud-server-eed5e9f804c0aac0467e1f502d86266ea232f350.zip
Cache: check one folder and one file each time the backgroundwatcher runs
Because there are usually way less folders than files it walks trought the list of all folder quicker, this causes new files to be detected quicker
Diffstat (limited to 'lib')
-rw-r--r--lib/files/cache/backgroundwatcher.php47
1 files changed, 39 insertions, 8 deletions
diff --git a/lib/files/cache/backgroundwatcher.php b/lib/files/cache/backgroundwatcher.php
index 3bcd447f53a..7549745e7d7 100644
--- a/lib/files/cache/backgroundwatcher.php
+++ b/lib/files/cache/backgroundwatcher.php
@@ -12,6 +12,18 @@ use \OC\Files\Mount;
use \OC\Files\Filesystem;
class BackgroundWatcher {
+ static $folderMimetype = null;
+
+ static private function getFolderMimetype() {
+ if (!is_null(self::$folderMimetype)) {
+ return self::$folderMimetype;
+ }
+ $query = \OC_DB::prepare('SELECT `id` FROM `*PREFIX*mimetypes` WHERE `mimetype` = ?');
+ $result = $query->execute(array('httpd/unix-directory'));
+ $row = $result->fetchRow();
+ return $row['id'];
+ }
+
static private function checkUpdate($id) {
$cacheItem = Cache::getById($id);
if (is_null($cacheItem)) {
@@ -42,10 +54,15 @@ class BackgroundWatcher {
* get the next fileid in the cache
*
* @param int $previous
+ * @param bool $folder
* @return int
*/
- static private function getNextFileId($previous) {
- $query = \OC_DB::prepare('SELECT `fileid` FROM `*PREFIX*filecache` WHERE `fileid` > ? ORDER BY `fileid` ASC', 1);
+ static private function getNextFileId($previous, $folder) {
+ if ($folder) {
+ $query = \OC_DB::prepare('SELECT `fileid` FROM `*PREFIX*filecache` WHERE `fileid` > ? AND mimetype = ' . self::getFolderMimetype() . ' ORDER BY `fileid` ASC', 1);
+ } else {
+ $query = \OC_DB::prepare('SELECT `fileid` FROM `*PREFIX*filecache` WHERE `fileid` > ? AND mimetype != ' . self::getFolderMimetype() . ' ORDER BY `fileid` ASC', 1);
+ }
$result = $query->execute(array($previous));
if ($row = $result->fetchRow()) {
return $row['fileid'];
@@ -55,18 +72,32 @@ class BackgroundWatcher {
}
static public function checkNext() {
- $previous = \OC_Appconfig::getValue('files', 'backgroundwatcher_previous', 0);
- $next = self::getNextFileId($previous);
- error_log($next);
- \OC_Appconfig::setValue('files', 'backgroundwatcher_previous', $next);
- self::checkUpdate($next);
+ // check both 1 file and 1 folder, this way new files are detected quicker because there are less folders than files usually
+ $previousFile = \OC_Appconfig::getValue('files', 'backgroundwatcher_previous_file', 0);
+ $previousFolder = \OC_Appconfig::getValue('files', 'backgroundwatcher_previous_folder', 0);
+ $nextFile = self::getNextFileId($previousFile, false);
+ $nextFolder = self::getNextFileId($previousFolder, true);
+ \OC_Appconfig::setValue('files', 'backgroundwatcher_previous_file', $nextFile);
+ \OC_Appconfig::setValue('files', 'backgroundwatcher_previous_folder', $nextFolder);
+ if ($nextFile > 0) {
+ self::checkUpdate($nextFile);
+ }
+ if ($nextFolder > 0) {
+ self::checkUpdate($nextFolder);
+ }
}
static public function checkAll() {
$previous = 0;
$next = 1;
while ($next != 0) {
- $next = self::getNextFileId($previous);
+ $next = self::getNextFileId($previous, true);
+ self::checkUpdate($next);
+ }
+ $previous = 0;
+ $next = 1;
+ while ($next != 0) {
+ $next = self::getNextFileId($previous, false);
self::checkUpdate($next);
}
}