use filesystem cache for searching

This commit is contained in:
Robin Appelman 2012-01-31 16:12:49 +01:00
parent df67c35017
commit c46f701771
4 changed files with 26 additions and 29 deletions

View File

@ -79,8 +79,9 @@ class OC_FileCache{
$data['versioned']=false;
}
$mimePart=dirname($data['mimetype']);
$query=OC_DB::prepare('INSERT INTO *PREFIX*fscache(parent, name, path, size, mtime, ctime, mimetype, mimepart) VALUES(?,?,?,?,?,?,?,?)');
$query->execute(array($parent,basename($path),$path,$data['size'],$data['mtime'],$data['ctime'],$data['mimetype'],$mimePart));
$user=OC_User::getUser();
$query=OC_DB::prepare('INSERT INTO *PREFIX*fscache(parent, name, path, size, mtime, ctime, mimetype, mimepart,user) VALUES(?,?,?,?,?,?,?,?,?)');
$query->execute(array($parent,basename($path),$path,$data['size'],$data['mtime'],$data['ctime'],$data['mimetype'],$mimePart,$user));
}
@ -133,14 +134,26 @@ class OC_FileCache{
/**
* return array of filenames matching the querty
* @param string $query
* @param boolean $returnData
* @return array of filepaths
*/
public static function search($search){
$query=OC_DB::prepare('SELECT path FROM *PREFIX*fscache WHERE name LIKE ?');
$result=$query->execute(array("%$search%"));
public static function search($search,$returnData=false){
$root=OC_Filesystem::getRoot();
$rootLen=strlen($root);
if(!$returnData){
$query=OC_DB::prepare('SELECT path FROM *PREFIX*fscache WHERE name LIKE ? AND user=?');
}else{
$query=OC_DB::prepare('SELECT * FROM *PREFIX*fscache WHERE name LIKE ? AND user=?');
}
$result=$query->execute(array("%$search%",OC_User::getUser()));
$names=array();
while($row=$result->fetchRow()){
$names[]=$row['path'];
if(!$returnData){
$names[]=substr($row['path'],$rootLen);
}else{
$row['path']=substr($row['path'],$rootLen);
$names[]=$row;
}
}
return $names;
}

View File

@ -374,7 +374,7 @@ class OC_Filesystem{
}
static public function search($query){
return self::$defaultInstance->search($query);
return OC_FileCache::search($query);
}
}

View File

@ -279,23 +279,6 @@ class OC_FilesystemView {
return $this->basicOperation('free_space',$path);
}
public function search($query){
$files=array();
$fakeRoot=$this->$fakeRoot;
$fakeRootLength=strlen($fakeRoot);
$results=OC_FileCache::search($query);
if(is_array($results)){
foreach($results as $result){
$file=str_replace('//','/',$mountpoint.$result);
if(substr($file,0,$fakeRootLength)==$fakeRoot){
$file=substr($file,$fakeRootLength);
$files[]=$file;
}
}
}
return $files;
}
/**
* abstraction for running most basic operations
* @param string $operation

View File

@ -2,14 +2,15 @@
class OC_Search_Provider_File extends OC_Search_Provider{
function search($query){
$files=OC_Filesystem::search($query);
$files=OC_FileCache::search($query,true);
$results=array();
foreach($files as $file){
if(OC_Filesystem::is_dir($file)){
foreach($files as $fileData){
$file=$fileData['path'];
if($fileData['mime']=='httpd/unix-directory'){
$results[]=new OC_Search_Result(basename($file),'',OC_Helper::linkTo( 'files', 'index.php?dir='.$file ),'Files');
}else{
$mime=OC_Filesystem::getMimeType($file);
$mimeBase=substr($mime,0,strpos($mime,'/'));
$mime=$fileData['mime'];
$mimeBase=$fileData['mimepart'];
switch($mimeBase){
case 'audio':
break;