/** * 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); }
/** * scan a single file * @param string path * @param string root (optional) * @return int size of the scanned file */ public static function scanFile($path, $root = '') { if (!$root) { $view = OC_Filesystem::getView(); } else { $view = new OC_FilesystemView($root == '/' ? '' : $root); } if (!$view->is_readable($path)) { return; } //cant read, nothing we can do clearstatcache(); $mimetype = $view->getMimeType($path); $stat = $view->stat($path); if ($mimetype == 'httpd/unix-directory') { $writable = $view->is_writable($path . '/'); } else { $writable = $view->is_writable($path); } $stat['mimetype'] = $mimetype; $stat['writable'] = $writable; if ($path == '/') { $path = ''; } self::put($path, $stat, $root); return $stat['size']; }
/** * scan a single file * @param string path * @param string root (optional) * @return int size of the scanned file */ public static function scanFile($path, $root = false) { // NOTE: Ugly hack to prevent shared files from going into the cache (the source already exists somewhere in the cache) if (substr($path, 0, 7) == '/Shared') { return; } if ($root === false) { $view = OC_Filesystem::getView(); } else { $view = new OC_FilesystemView($root); } if (!$view->is_readable($path)) { return; } //cant read, nothing we can do clearstatcache(); $mimetype = $view->getMimeType($path); $stat = $view->stat($path); if ($mimetype == 'httpd/unix-directory') { $stat['size'] = 0; $writable = $view->is_writable($path . '/'); } else { $writable = $view->is_writable($path); } $stat['mimetype'] = $mimetype; $stat['writable'] = $writable; if ($path == '/') { $path = ''; } self::put($path, $stat, $root); return $stat['size']; }
* This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU AFFERO GENERAL PUBLIC LICENSE for more details. * * You should have received a copy of the GNU Affero General Public * License along with this library. If not, see <http://www.gnu.org/licenses/>. * */ // Check if we are a user OCP\User::checkLoggedIn(); $filename = $_GET["file"]; $view = new OC_FilesystemView('/' . \OCP\User::getUser() . '/files_trashbin/files'); if (!$view->file_exists($filename)) { header("HTTP/1.0 404 Not Found"); $tmpl = new OCP\Template('', '404', 'guest'); $tmpl->assign('file', $filename); $tmpl->printPage(); exit; } $ftype = $view->getMimeType($filename); header('Content-Type:' . $ftype); if (preg_match("/MSIE/", $_SERVER["HTTP_USER_AGENT"])) { header('Content-Disposition: attachment; filename="' . rawurlencode(basename($filename)) . '"'); } else { header('Content-Disposition: attachment; filename*=UTF-8\'\'' . rawurlencode(basename($filename)) . '; filename="' . rawurlencode(basename($filename)) . '"'); } OCP\Response::disableCaching(); header('Content-Length: ' . $view->filesize($filename)); OC_Util::obEnd(); $view->readfile($filename);