]> source.dussan.org Git - nextcloud-server.git/commitdiff
improve filecache support for smb
authorRobin Appelman <icewind@owncloud.com>
Sun, 17 Jun 2012 00:54:23 +0000 (02:54 +0200)
committerRobin Appelman <icewind@owncloud.com>
Tue, 10 Jul 2012 12:20:11 +0000 (14:20 +0200)
apps/files_external/lib/smb.php

index f594fbb880d951a8682f8ddce97ce72035aa7d40..b9bbc0a5236fa19b7e2c7eae5190a7024013149e 100644 (file)
@@ -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;
        }
 }