]> git.lyx.org Git - lyx.git/blobdiff - src/ConverterCache.cpp
#9130 Text in main work area isn't rendered with high resolution
[lyx.git] / src / ConverterCache.cpp
index aabe6b904220185af4d678da14589500fcc21c8f..820eb060b5f8ac83d2a2020a740771090c9e8966 100644 (file)
@@ -49,6 +49,8 @@ unsigned long do_crc(string const & s)
 }
 
 
+// FIXME THREAD
+// This should be OK because it is only assigned during init()
 static FileName cache_dir;
 
 
@@ -60,14 +62,15 @@ public:
                : timestamp(t), checksum(c)
        {
                ostringstream os;
-               os << setw(10) << setfill('0') << do_crc(orig_from.absFilename())
+               os << setw(10) << setfill('0') << do_crc(orig_from.absFileName())
                   << '-' << to_format;
-               cache_name = FileName(addName(cache_dir.absFilename(), os.str()));
+               cache_name = FileName(addName(cache_dir.absFileName(), os.str()));
                LYXERR(Debug::FILES, "Add file cache item " << orig_from
                                     << ' ' << to_format << ' ' << cache_name
                                     << ' ' << long(timestamp) << ' ' << checksum << '.');
        }
-       ~CacheItem() {}
+       ~CacheItem()
+       {}
        FileName cache_name;
        time_t timestamp;
        unsigned long checksum;
@@ -105,7 +108,7 @@ public:
 void ConverterCache::Impl::readIndex()
 {
        time_t const now = current_time();
-       FileName const index(addName(cache_dir.absFilename(), "index"));
+       FileName const index(addName(cache_dir.absFileName(), "index"));
        ifstream is(index.toFilesystemEncoding().c_str());
        Lexer lex;
        lex.setStream(is);
@@ -165,7 +168,7 @@ void ConverterCache::Impl::readIndex()
 
 void ConverterCache::Impl::writeIndex()
 {
-       FileName const index(addName(cache_dir.absFilename(), "index"));
+       FileName const index(addName(cache_dir.absFileName(), "index"));
        ofstream os(index.toFilesystemEncoding().c_str());
        os.close();
        if (!index.changePermission(0600))
@@ -178,7 +181,7 @@ void ConverterCache::Impl::writeIndex()
                FormatCacheType::const_iterator it2 = format_cache.begin();
                FormatCacheType::const_iterator const end2 = format_cache.end();
                for (; it2 != end2; ++it2)
-                       os << Lexer::quoteString(it1->first.absFilename())
+                       os << Lexer::quoteString(it1->first.absFileName())
                           << ' ' << it2->first << ' '
                           << it2->second.timestamp << ' '
                           << it2->second.checksum << '\n';
@@ -216,12 +219,11 @@ ConverterCache::ConverterCache()
 
 ConverterCache::~ConverterCache()
 {
-       if (!lyxrc.use_converter_cache)
-               return;
        delete pimpl_;
 }
 
 
+// FIXME THREAD
 ConverterCache & ConverterCache::get()
 {
        // Now return the cache
@@ -236,7 +238,7 @@ void ConverterCache::init()
                return;
        // We do this here and not in the constructor because package() gets
        // initialized after all static variables.
-       cache_dir = FileName(addName(package().user_support().absFilename(), "cache"));
+       cache_dir = FileName(addName(package().user_support().absFileName(), "cache"));
        if (!cache_dir.exists())
                if (!cache_dir.createDirectory(0700)) {
                        lyxerr << "Could not create cache directory `"
@@ -249,6 +251,9 @@ void ConverterCache::init()
 
 void ConverterCache::writeIndex() const
 {
+       if (!lyxrc.use_converter_cache 
+                 || cache_dir.empty())
+               return;
        pimpl_->writeIndex();
 }
 
@@ -264,11 +269,11 @@ void ConverterCache::add(FileName const & orig_from, string const & to_format,
 
        // FIXME: Should not hardcode this (see bug 3819 for details)
        if (to_format == "pstex") {
-               FileName const converted_eps(changeExtension(converted_file.absFilename(), "eps"));
+               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);
+               FileName const converted_pdf(changeExtension(converted_file.absFileName(), "pdf"));
+               add(orig_from, "pdf6", converted_pdf);
        }
 
        // Is the file in the cache already?
@@ -293,7 +298,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)) {
@@ -304,7 +309,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);
@@ -393,6 +398,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.");
@@ -414,7 +433,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;
 }
 
@@ -428,20 +447,20 @@ bool ConverterCache::copy(FileName const & orig_from, string const & to_format,
 
        // FIXME: Should not hardcode this (see bug 3819 for details)
        if (to_format == "pstex") {
-               FileName const dest_eps(changeExtension(dest.absFilename(), "eps"));
+               FileName const dest_eps(changeExtension(dest.absFileName(), "eps"));
                if (!copy(orig_from, "eps", dest_eps))
                        return false;
        } else if (to_format == "pdftex") {
-               FileName const dest_pdf(changeExtension(dest.absFilename(), "pdf"));
-               if (!copy(orig_from, "pdf", dest_pdf))
+               FileName const dest_pdf(changeExtension(dest.absFileName(), "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