X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FConverterCache.cpp;h=40390bca8e175aedb680177eaf95965f7a0a8205;hb=4db3e641ed6765e005343010cb90ee8af26f8f99;hp=4cf1821df5f927761a640eeef8b142c7ca536ca6;hpb=62ca7f3ae55ad2e0c395cb554d71afab87de1ee3;p=lyx.git diff --git a/src/ConverterCache.cpp b/src/ConverterCache.cpp index 4cf1821df5..40390bca8e 100644 --- a/src/ConverterCache.cpp +++ b/src/ConverterCache.cpp @@ -54,7 +54,8 @@ static FileName cache_dir; class CacheItem { public: - CacheItem() {} + CacheItem() + {} CacheItem(FileName const & orig_from, string const & to_format, time_t t, unsigned long c) : timestamp(t), checksum(c) @@ -67,7 +68,8 @@ public: << ' ' << to_format << ' ' << cache_name << ' ' << long(timestamp) << ' ' << checksum << '.'); } - ~CacheItem() {} + ~CacheItem() + {} FileName cache_name; time_t timestamp; unsigned long checksum; @@ -269,7 +271,7 @@ void ConverterCache::add(FileName const & orig_from, string const & to_format, 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); + add(orig_from, "pdf6", converted_pdf); } // Is the file in the cache already? @@ -294,7 +296,7 @@ void ConverterCache::add(FileName const & orig_from, string const & to_format, } item->checksum = checksum; if (!mover.copy(converted_file, item->cache_name, - onlyFilename(item->cache_name.absFileName()))) { + 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)) { @@ -305,7 +307,7 @@ void ConverterCache::add(FileName const & orig_from, string const & to_format, 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()))) { + 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); @@ -394,6 +396,20 @@ bool ConverterCache::inCache(FileName const & orig_from, LYXERR(Debug::FILES, "not in cache."); return false; } + + // Special handling of pstex and pdftex formats: These are only + // considered to be in the cache if the corresponding graphics + // fiels are there as well. Otherwise copy() of the graphics below + // would fail. + // FIXME: Should not hardcode this (see bug 3819 for details) + if (to_format == "pstex") { + if (!inCache(orig_from, "eps")) + return false; + } else if (to_format == "pdftex") { + if (!inCache(orig_from, "pdf6")) + return false; + } + time_t const timestamp = orig_from.lastModified(); if (item->timestamp == timestamp) { LYXERR(Debug::FILES, "identical timestamp."); @@ -415,7 +431,7 @@ FileName const & ConverterCache::cacheName(FileName const & orig_from, LYXERR(Debug::FILES, orig_from << ' ' << to_format); CacheItem * const item = pimpl_->find(orig_from, to_format); - LASSERT(item, /**/); + LASSERT(item, { static const FileName fn; return fn; }); return item->cache_name; } @@ -434,15 +450,15 @@ bool ConverterCache::copy(FileName const & orig_from, string const & to_format, return false; } else if (to_format == "pdftex") { FileName const dest_pdf(changeExtension(dest.absFileName(), "pdf")); - if (!copy(orig_from, "pdf", dest_pdf)) + if (!copy(orig_from, "pdf6", dest_pdf)) return false; } CacheItem * const item = pimpl_->find(orig_from, to_format); - LASSERT(item, /**/); + LASSERT(item, return false); Mover const & mover = getMover(to_format); return mover.copy(item->cache_name, dest, - onlyFilename(dest.absFileName())); + onlyFileName(dest.absFileName())); } } // namespace lyx