From: Robin Appelman Date: Sun, 17 Jun 2012 00:54:23 +0000 (+0200) Subject: improve filecache support for smb X-Git-Tag: v4.5.0beta1~74^2~414^2~2 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=769cbe9a4cc5b105cc0277057b21e4661bd9c890;p=nextcloud-server.git improve filecache support for smb --- diff --git a/apps/files_external/lib/smb.php b/apps/files_external/lib/smb.php index 9112655194a..e05d69f7844 100644 --- a/apps/files_external/lib/smb.php +++ b/apps/files_external/lib/smb.php @@ -47,6 +47,48 @@ class OC_FileStorage_SMB extends OC_FileStorage_StreamWrapper{ $path=substr($path,0,-1); } return 'smb://'.$this->user.':'.$this->password.'@'.$this->host.$this->share.$this->root.$path; - + } + + public function stat($path){ + if(!$path and $this->root=='/'){//mtime doesn't work for shares + $mtime=$this->shareMTime(); + $stat=stat($this->constructUrl($path)); + $stat['mtime']=$mtime; + return $stat; + }else{ + return stat($this->constructUrl($path)); + } + } + + /** + * check if a file or folder has been updated since $time + * @param int $time + * @return bool + */ + public function hasUpdated($path,$time){ + if(!$path and $this->root=='/'){ + //mtime doesn't work for shares, but giving the nature of the backend, doing a full update is still just fast enough + return true; + }else{ + $actualTime=$this->filemtime($path); + return $actualTime>$time; + } + } + + /** + * get the best guess for the modification time of the share + */ + private function shareMTime(){ + $dh=$this->opendir(''); + $lastCtime=0; + while($file=readdir($dh)){ + if($file!='.' and $file!='..'){ + $ctime=$this->filemtime($file); + if($ctime>$lastCtime){ + $lastCtime=$ctime; + } + } + } + return $lastCtime; } }