/** * update the filecache according to changes to the filesystem * @param string path * @param string root (optional) */ public static function update($path, $root = false) { if ($root === false) { $view = OC_Filesystem::getView(); } else { $view = new OC_FilesystemView($root); } $mimetype = $view->getMimeType($path); $size = 0; $cached = OC_FileCache_Cached::get($path, $root); $cachedSize = isset($cached['size']) ? $cached['size'] : 0; if ($view->is_dir($path . '/')) { if (OC_FileCache::inCache($path, $root)) { $cachedContent = OC_FileCache_Cached::getFolderContent($path, $root); foreach ($cachedContent as $file) { $size += $file['size']; } $mtime = $view->filemtime($path . '/'); $ctime = $view->filectime($path . '/'); $writable = $view->is_writable($path . '/'); OC_FileCache::put($path, array('size' => $size, 'mtime' => $mtime, 'ctime' => $ctime, 'mimetype' => $mimetype, 'writable' => $writable)); } else { $count = 0; OC_FileCache::scan($path, null, $count, $root); return; //increaseSize is already called inside scan } } else { $size = OC_FileCache::scanFile($path, $root); } OC_FileCache::increaseSize(dirname($path), $size - $cachedSize, $root); }
/** * check if a file or folder is updated outside owncloud * @param string path * @param string root (optional) * @return bool */ public static function isUpdated($path, $root = '') { if (!$root) { $root = OC_Filesystem::getRoot(); $view = OC_Filesystem::getView(); } else { if ($root == '/') { $root = ''; } $view = new OC_FilesystemView($root); } if (!$view->file_exists($path)) { return false; } $mtime = $view->filemtime($path); $isDir = $view->is_dir($path); $fullPath = $root . $path; $query = OC_DB::prepare('SELECT mtime FROM *PREFIX*fscache WHERE path_hash=?'); $result = $query->execute(array(md5($fullPath))); if ($row = $result->fetchRow()) { $cachedMTime = $row['mtime']; return $mtime > $cachedMTime; } else { //file not in cache, so it has to be updated if ($path == '/' or $path == '') { //dont auto update the root folder, it will be scanned return false; } return true; } }