emulate touch with custom mtime for swift backend
This commit is contained in:
parent
9a707e10bf
commit
5cefd34660
|
@ -373,6 +373,7 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
|
||||||
}
|
}
|
||||||
$obj=$container->create_object(basename($path));
|
$obj=$container->create_object(basename($path));
|
||||||
}
|
}
|
||||||
|
$this->resetMTime($obj);
|
||||||
return $obj->write($content);
|
return $obj->write($content);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -429,30 +430,39 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
|
||||||
}
|
}
|
||||||
|
|
||||||
public function touch($path,$mtime=null){
|
public function touch($path,$mtime=null){
|
||||||
if(!is_null($mtime)){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$obj=$this->getObject($path);
|
$obj=$this->getObject($path);
|
||||||
if(is_null($obj)){
|
if(is_null($obj)){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$fp = fopen('php://temp', 'r+');
|
if(is_null($mtime)){
|
||||||
$obj->stream($fp);
|
$mtime=time();
|
||||||
rewind($fp);
|
}
|
||||||
$obj->write($fp);
|
|
||||||
fclose($fp);
|
//emulate setting mtime with metadata
|
||||||
|
$obj->metadata['Mtime']=$mtime;
|
||||||
|
$obj->sync_metadata();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function rename($path1,$path2){
|
public function rename($path1,$path2){
|
||||||
$sourceContainer=$this->getContainer(dirname($path1));
|
$sourceContainer=$this->getContainer(dirname($path1));
|
||||||
$targetContainer=$this->getContainer(dirname($path2));
|
$targetContainer=$this->getContainer(dirname($path2));
|
||||||
return $sourceContainer->move_object_to(basename($path1),$targetContainer,basename($path2));
|
$result=$sourceContainer->move_object_to(basename($path1),$targetContainer,basename($path2));
|
||||||
|
if($result){
|
||||||
|
$targetObj=$this->getObject($path2);
|
||||||
|
$this->resetMTime($targetObj);
|
||||||
|
}
|
||||||
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function copy($path1,$path2){
|
public function copy($path1,$path2){
|
||||||
$sourceContainer=$this->getContainer(dirname($path1));
|
$sourceContainer=$this->getContainer(dirname($path1));
|
||||||
$targetContainer=$this->getContainer(dirname($path2));
|
$targetContainer=$this->getContainer(dirname($path2));
|
||||||
return $sourceContainer->copy_object_to(basename($path1),$targetContainer,basename($path2));
|
$result=$sourceContainer->copy_object_to(basename($path1),$targetContainer,basename($path2));
|
||||||
|
if($result){
|
||||||
|
$targetObj=$this->getObject($path2);
|
||||||
|
$this->resetMTime($targetObj);
|
||||||
|
}
|
||||||
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function stat($path){
|
public function stat($path){
|
||||||
|
@ -460,8 +470,14 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
|
||||||
if(is_null($obj)){
|
if(is_null($obj)){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(isset($obj->metadata['Mtime']) and $obj->metadata['Mtime']>-1){
|
||||||
|
$mtime=$obj->metadata['Mtime'];
|
||||||
|
}else{
|
||||||
|
$mtime=strtotime($obj->last_modified);
|
||||||
|
}
|
||||||
return array(
|
return array(
|
||||||
'mtime'=>strtotime($obj->last_modified),
|
'mtime'=>$mtime,
|
||||||
'size'=>$obj->content_length,
|
'size'=>$obj->content_length,
|
||||||
'ctime'=>-1,
|
'ctime'=>-1,
|
||||||
);
|
);
|
||||||
|
@ -484,5 +500,17 @@ class OC_FileStorage_SWIFT extends OC_Filestorage_Common{
|
||||||
$obj=$this->createObject($path);
|
$obj=$this->createObject($path);
|
||||||
}
|
}
|
||||||
$obj->load_from_filename($tmpFile);
|
$obj->load_from_filename($tmpFile);
|
||||||
|
$this->resetMTime($obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* remove custom mtime metadata
|
||||||
|
* @param CF_Object obj
|
||||||
|
*/
|
||||||
|
private function resetMTime($obj){
|
||||||
|
if(isset($obj->metadata['Mtime'])){
|
||||||
|
$obj->metadata['Mtime']=-1;
|
||||||
|
$obj->sync_metadata();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue