index 1152fccc13a1be9a21a7e2e3bd1eec16705e0825..a9dfd1a7f995e5bb292b7985864ebac8984039c3 100644 (file)
{
var $path= "";
var $cachedList= array();
{
var $path= "";
var $cachedList= array();
+ var $timestamps = array();
function ppdManager($path)
{
function ppdManager($path)
{
continue;
}
continue;
}
+ /* Change model name .. */
+ if ((preg_match("/^\*".$attribute.":*\s+/",$line)) && ($attribute == "ModelName")){
+ $line= "*$attribute: \"$value\"\n";
+ $done =true;
+ }
+
if (($fsection) && ($section != "NO_SECTION")){
if (preg_match("/^\*CloseGroup:*\s+\**$section\/*/", $line)){
$fsection= false;
if (($fsection) && ($section != "NO_SECTION")){
if (preg_match("/^\*CloseGroup:*\s+\**$section\/*/", $line)){
$fsection= false;
{
if(!is_readable($ppdFile)){
print_red(sprintf(_("Specified ppd file '%s' can't be opened for reading."),$ppdFile));
{
if(!is_readable($ppdFile)){
print_red(sprintf(_("Specified ppd file '%s' can't be opened for reading."),$ppdFile));
- }elseif(!is_writeable($ppdFile.".tmp")){
+ }elseif(!is_writeable(preg_replace("#(^.*/).*$#","\\1",$ppdFile.".tmp"))){
print_red(sprintf(_("The required tmp file file '%s' can't be opened for writing."),$ppdFile.".tmp"));
}else{
foreach ($properties as $name => $section){
print_red(sprintf(_("The required tmp file file '%s' can't be opened for writing."),$ppdFile.".tmp"));
}else{
foreach ($properties as $name => $section){
$model= "";
$manufacturer= "";
$model= "";
$manufacturer= "";
+
+ /* Only parse complete PPD file again, if it was changed */
+ $modified = filemtime($ppdFile);
+ if(isset($this->cachedList[$ppdFile]) && isset($this->timestamps[$ppdFile]) && $modified == $this->timestamps[$ppdFile]){
+ return($this->cachedList[$ppdFile]);
+ }
+
+ /* Remember modified timestamp, to speed up next request */
+ $this->timestamps[$ppdFile] = filemtime($ppdFile);
+
$fh= fopen ($ppdFile, 'r');
while ((!feof($fh))&&($fh)) {
$fh= fopen ($ppdFile, 'r');
while ((!feof($fh))&&($fh)) {
$list= $this->findPPD($this->path);
/* Load descriptive informations to build final printer list */
$list= $this->findPPD($this->path);
/* Load descriptive informations to build final printer list */
- $this->cachedList= array();
+ $new = array();
foreach ($list as $ppdFile){
foreach ($list as $ppdFile){
- $this->cachedList[$ppdFile]= $this->loadDescription($ppdFile);
+ $new[$ppdFile] = $this->loadDescription($ppdFile);
}
}
+ $this->cachedList= $new ;
}
}