Пример #1
0
 /**
  * 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);
 }
Пример #2
0
 /**
  * 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;
     }
 }