]> git.lyx.org Git - lyx.git/blobdiff - src/ConverterCache.cpp
SCons: msvc does not need this /TP option any more after we rename .C => .cpp. Also...
[lyx.git] / src / ConverterCache.cpp
index 4ce7aca32a24f2911a748438bfd0f125fdb0e9f9..6bcaa60f2507bed61efd4e693d67b268ba559c18 100644 (file)
@@ -62,7 +62,7 @@ class CacheItem {
 public:
        CacheItem() {}
        CacheItem(FileName const & orig_from, string const & to_format,
-                 time_t t, unsigned long c)
+                 time_t t, unsigned long c)
                : timestamp(t), checksum(c)
        {
                std::ostringstream os;
@@ -70,9 +70,9 @@ public:
                   << '-' << to_format;
                cache_name = FileName(addName(cache_dir.absFilename(), os.str()));
                LYXERR(Debug::FILES) << "Add file cache item " << orig_from
-                                    << ' ' << to_format << ' ' << cache_name
-                                    << ' ' << timestamp << ' ' << checksum
-                                    << '.' << std::endl;
+                                    << ' ' << to_format << ' ' << cache_name
+                                    << ' ' << timestamp << ' ' << checksum
+                                    << '.' << std::endl;
        }
        ~CacheItem() {}
        FileName cache_name;
@@ -258,8 +258,17 @@ void ConverterCache::add(FileName const & orig_from, string const & to_format,
            converted_file.empty())
                return;
        LYXERR(Debug::FILES) << BOOST_CURRENT_FUNCTION << ' ' << orig_from
-                            << ' ' << to_format << ' ' << converted_file
-                            << std::endl;
+                            << ' ' << to_format << ' ' << converted_file
+                            << std::endl;
+
+       // FIXME: Should not hardcode this (see bug 3819 for details)
+       if (to_format == "pstex") {
+               FileName const converted_eps(support::changeExtension(converted_file.absFilename(), "eps"));
+               add(orig_from, "eps", converted_eps);
+       } else if (to_format == "pdftex") {
+               FileName const converted_pdf(support::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);
@@ -268,12 +277,12 @@ void ConverterCache::add(FileName const & orig_from, string const & to_format,
        Mover const & mover = getMover(to_format);
        if (item) {
                LYXERR(Debug::FILES) << "ConverterCache::add(" << orig_from << "):\n"
-                                       "The file is already in the cache."
-                                    << std::endl;
+                                       "The file is already in the cache."
+                                    << std::endl;
                // First test for timestamp
                if (timestamp == item->timestamp) {
                        LYXERR(Debug::FILES) << "Same timestamp."
-                                            << std::endl;
+                                            << std::endl;
                        return;
                } else {
                        // Maybe the contents is still the same?
@@ -281,20 +290,22 @@ void ConverterCache::add(FileName const & orig_from, string const & to_format,
                        unsigned long const checksum = support::sum(orig_from);
                        if (checksum == item->checksum) {
                                LYXERR(Debug::FILES) << "Same checksum."
-                                                    << std::endl;
+                                                    << std::endl;
                                return;
                        }
                        item->checksum = checksum;
                }
-               if (!mover.copy(converted_file, item->cache_name, 0600))
+               if (!mover.copy(converted_file, item->cache_name,
+                               support::onlyFilename(item->cache_name.absFilename()), 0600))
                        LYXERR(Debug::FILES) << "ConverterCache::add("
-                                            << orig_from << "):\n"
-                                               "Could not copy file."
-                                            << std::endl;
+                                            << orig_from << "):\n"
+                                               "Could not copy file."
+                                            << std::endl;
        } else {
                CacheItem new_item(orig_from, to_format, timestamp,
                                support::sum(orig_from));
-               if (mover.copy(converted_file, new_item.cache_name, 0600)) {
+               if (mover.copy(converted_file, new_item.cache_name,
+                              support::onlyFilename(new_item.cache_name.absFilename()), 0600)) {
                        FormatCache & format_cache = pimpl_->cache[orig_from];
                        if (format_cache.from_format.empty())
                                format_cache.from_format =
@@ -302,9 +313,9 @@ void ConverterCache::add(FileName const & orig_from, string const & to_format,
                        format_cache.cache[to_format] = new_item;
                } else
                        LYXERR(Debug::FILES) << "ConverterCache::add("
-                                            << orig_from << "):\n"
-                                               "Could not copy file."
-                                            << std::endl;
+                                            << orig_from << "):\n"
+                                               "Could not copy file."
+                                    << std::endl;
        }
 }
 
@@ -315,7 +326,7 @@ void ConverterCache::remove(FileName const & orig_from,
        if (!lyxrc.use_converter_cache || orig_from.empty())
                return;
        LYXERR(Debug::FILES) << BOOST_CURRENT_FUNCTION << ' ' << orig_from
-                            << ' ' << to_format << std::endl;
+                            << ' ' << to_format << std::endl;
 
        CacheType::iterator const it1 = pimpl_->cache.find(orig_from);
        if (it1 == pimpl_->cache.end())
@@ -376,7 +387,7 @@ bool ConverterCache::inCache(FileName const & orig_from,
        if (!lyxrc.use_converter_cache || orig_from.empty())
                return false;
        LYXERR(Debug::FILES) << BOOST_CURRENT_FUNCTION << ' ' << orig_from
-                            << ' ' << to_format << std::endl;
+                            << ' ' << to_format << std::endl;
 
        CacheItem * const item = pimpl_->find(orig_from, to_format);
        if (!item) {
@@ -402,7 +413,7 @@ FileName const & ConverterCache::cacheName(FileName const & orig_from,
                string const & to_format) const
 {
        LYXERR(Debug::FILES) << BOOST_CURRENT_FUNCTION << ' ' << orig_from
-                            << ' ' << to_format << std::endl;
+                            << ' ' << to_format << std::endl;
 
        CacheItem * const item = pimpl_->find(orig_from, to_format);
        BOOST_ASSERT(item);
@@ -416,12 +427,24 @@ bool ConverterCache::copy(FileName const & orig_from, string const & to_format,
        if (!lyxrc.use_converter_cache || orig_from.empty() || dest.empty())
                return false;
        LYXERR(Debug::FILES) << BOOST_CURRENT_FUNCTION << ' ' << orig_from
-                            << ' ' << to_format << ' ' << dest << std::endl;
+                            << ' ' << to_format << ' ' << dest << std::endl;
+
+       // FIXME: Should not hardcode this (see bug 3819 for details)
+       if (to_format == "pstex") {
+               FileName const dest_eps(support::changeExtension(dest.absFilename(), "eps"));
+               if (!copy(orig_from, "eps", dest_eps))
+                       return false;
+       } else if (to_format == "pdftex") {
+               FileName const dest_pdf(support::changeExtension(dest.absFilename(), "pdf"));
+               if (!copy(orig_from, "pdf", dest_pdf))
+                       return false;
+       }
 
        CacheItem * const item = pimpl_->find(orig_from, to_format);
        BOOST_ASSERT(item);
        Mover const & mover = getMover(to_format);
-       return mover.copy(item->cache_name, dest);
+       return mover.copy(item->cache_name, dest,
+                         support::onlyFilename(dest.absFilename()));
 }
 
 } // namespace lyx