fulltext service can use new text previewer to create a cached txt file of a document

This commit is contained in:
Uwe Steinmann 2023-01-03 14:05:32 +01:00
parent 75638089e6
commit 98e7c58b74

View File

@ -54,6 +54,7 @@ class SeedDMS_FulltextService {
$this->services = array();
$this->converters = array();
$this->conversionmgr = null;
$this->previewer = null;
$this->logger = null;
$this->maxsize = 0;
$this->index = null;
@ -93,6 +94,73 @@ class SeedDMS_FulltextService {
$this->cmdtimeout = $timeout;
}
public function setPreviewer($previewer) {
$this->previewer = $previewer;
}
/**
* Returns callback function to convert a document into plain text
*
* This variant just uses the conversion manager and does not
* cache the converted document
*/
public function getConversionCallback() { /* {{{ */
$conversionmgr = $this->conversionmgr;
return function($object) use ($conversionmgr) {
$result = ['content'=>false, 'cmd'=>'', 'errormsg'=>''];
if(!$conversionmgr)
return $result;
if($object->isType('document')) {
$dms = $object->getDMS();
$version = $object->getLatestContent();
$mimetype = $version->getMimeType();
$path = $dms->contentDir . $version->getPath();
if(file_exists($path)) {
if($service = $conversionmgr->getService($mimetype, 'text/plain')) {
$content = $conversionmgr->convert($path, $mimetype, 'text/plain');
if($content) {
$result['content'] = $content;
} elseif($content === false) {
$result['errormsg'] = 'Conversion failed';
}
$result['cmd'] = get_class($service);
} else {
$result['cmd'] = 'No service to convert '.$mimetype.' to text/plain';
}
}
}
return $result;
};
} /* }}} */
/**
* Returns callback function to convert a document into plain text
*
* This variant just uses the text previewer which
* caches the converted document
*/
public function getConversionWithPreviewCallback() { /* {{{ */
$previewer = $this->previewer;
return function($object) use ($previewer) {
$result = ['content'=>false, 'cmd'=>'', 'errormsg'=>''];
if($object->isType('document')) {
$dms = $object->getDMS();
$version = $object->getLatestContent();
if($previewer->createPreview($version)) {
if($previewer->hasPreview($version)) {
$filename = $previewer->getFileName($version).'.txt';
$result['content'] = file_get_contents($filename);
$result['cmd'] = 'previewer '.$previewer->getFileSize($version);
}
} else {
$result['cmd'] = 'previewer';
$result['errormsg'] = 'Creating preview failed';
}
}
return $result;
};
} /* }}} */
/**
* Return an indexable document from the given document or folder
*
@ -108,7 +176,8 @@ class SeedDMS_FulltextService {
$nocontent = $object->getLatestContent()->getFileSize() > $this->maxsize && $this->maxsize && !$forceupdate;
else
$nocontent = true;
return new $this->services[0]['IndexedDocument']($object->getDMS(), $object, $this->conversionmgr ? $this->conversionmgr : $this->converters, $nocontent, $this->cmdtimeout);
$convcallback = $this->getConversionWithPreviewCallback();
return new $this->services[0]['IndexedDocument']($object->getDMS(), $object, $convcallback /*$this->conversionmgr ? $this->conversionmgr : $this->converters*/, $nocontent, $this->cmdtimeout);
}
/**