bool ConverterCache::inCache(FileName const & orig_from, string const & to_format) const { if (!lyxrc.use_converter_cache || orig_from.empty()) return false; LYXERR(Debug::FILES, orig_from << ' ' << to_format); CacheItem * const item = pimpl_->find(orig_from, to_format); if (!item) { LYXERR(Debug::FILES, "not in cache."); return false; } time_t const timestamp = orig_from.lastModified(); if (item->timestamp == timestamp) { LYXERR(Debug::FILES, "identical timestamp."); return true; } if (item->checksum == orig_from.checksum()) { item->timestamp = timestamp; LYXERR(Debug::FILES, "identical checksum."); return true; } LYXERR(Debug::FILES, "in cache, but too old."); return false; }
void ConverterCache::add(FileName const & orig_from, string const & to_format, FileName const & converted_file) const { if (!lyxrc.use_converter_cache || orig_from.empty() || converted_file.empty()) return; LYXERR(Debug::FILES, ' ' << orig_from << ' ' << to_format << ' ' << converted_file); // FIXME: Should not hardcode this (see bug 3819 for details) if (to_format == "pstex") { FileName const converted_eps(changeExtension(converted_file.absFileName(), "eps")); add(orig_from, "eps", converted_eps); } else if (to_format == "pdftex") { FileName const converted_pdf(changeExtension(converted_file.absFileName(), "pdf")); add(orig_from, "pdf", converted_pdf); } // Is the file in the cache already? CacheItem * item = pimpl_->find(orig_from, to_format); time_t const timestamp = orig_from.lastModified(); Mover const & mover = getMover(to_format); if (item) { LYXERR(Debug::FILES, "ConverterCache::add(" << orig_from << "):\n" "The file is already in the cache."); // First test for timestamp if (timestamp == item->timestamp) { LYXERR(Debug::FILES, "Same timestamp."); return; } // Maybe the contents is still the same? item->timestamp = timestamp; unsigned long const checksum = orig_from.checksum(); if (checksum == item->checksum) { LYXERR(Debug::FILES, "Same checksum."); return; } item->checksum = checksum; if (!mover.copy(converted_file, item->cache_name, onlyFileName(item->cache_name.absFileName()))) { LYXERR(Debug::FILES, "Could not copy file " << orig_from << " to " << item->cache_name); } else if (!item->cache_name.changePermission(0600)) { LYXERR(Debug::FILES, "Could not change file mode" << item->cache_name); } } else { CacheItem new_item(orig_from, to_format, timestamp, orig_from.checksum()); if (mover.copy(converted_file, new_item.cache_name, onlyFileName(new_item.cache_name.absFileName()))) { if (!new_item.cache_name.changePermission(0600)) { LYXERR(Debug::FILES, "Could not change file mode" << new_item.cache_name); } FormatCache & format_cache = pimpl_->cache[orig_from]; if (format_cache.from_format.empty()) format_cache.from_format = formats.getFormatFromFile(orig_from); format_cache.cache[to_format] = new_item; } else LYXERR(Debug::FILES, "ConverterCache::add(" << orig_from << "):\n" "Could not copy file."); } }