X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fgraphics%2FGraphicsCacheItem.C;h=59973327d441815b6bbf1ff202eb94fc5f7c8e6c;hb=33243f70037b067f90d1574b74b34f90a2ef2aa1;hp=2b33c7982c8ea95c898c3147715f74dcd3a6a265;hpb=99d1627a471b92f403598d03dfc861ddc3c11be0;p=lyx.git diff --git a/src/graphics/GraphicsCacheItem.C b/src/graphics/GraphicsCacheItem.C index 2b33c7982c..59973327d4 100644 --- a/src/graphics/GraphicsCacheItem.C +++ b/src/graphics/GraphicsCacheItem.C @@ -4,32 +4,47 @@ * Licence details can be found in the file COPYING. * * \author Baruch Even - * \author Herbert Voss + * \author Herbert Voß * \author Angus Leeming * - * Full author contact details are available in file CREDITS + * Full author contact details are available in file CREDITS. */ #include #include "GraphicsCacheItem.h" -#include "GraphicsImage.h" #include "GraphicsConverter.h" - -#include "support/FileMonitor.h" +#include "GraphicsImage.h" #include "debug.h" -#include "support/LAssert.h" #include "support/filetools.h" +#include "support/FileMonitor.h" +#include "support/lyxlib.h" -#include #include -#include + + +namespace support = lyx::support; + +using support::ChangeExtension; +using support::FileMonitor; +using support::IsFileReadable; +using support::MakeDisplayPath; +using support::OnlyFilename; +using support::getExtFromContents; +using support::tempName; +using support::unlink; +using support::unzipFile; +using support::unzippedFileName; +using support::zippedFile; using std::endl; +using std::string; + -namespace grfx { +namespace lyx { +namespace graphics { struct CacheItem::Impl : public boost::signals::trackable { @@ -64,7 +79,7 @@ struct CacheItem::Impl : public boost::signals::trackable { /** Get a notification when the image loading is done. * Connected to a signal on_finish_ which is passed to - * grfx::Image::loadImage. + * lyx::graphics::Image::loadImage. */ void imageLoaded(bool); @@ -207,11 +222,11 @@ void CacheItem::Impl::reset() { zipped_ = false; if (!unzipped_filename_.empty()) - lyx::unlink(unzipped_filename_); + unlink(unzipped_filename_); unzipped_filename_.erase(); if (remove_loaded_file_ && !file_to_load_.empty()) - lyx::unlink(file_to_load_); + unlink(file_to_load_); remove_loaded_file_ = false; file_to_load_.erase(); @@ -252,13 +267,14 @@ void CacheItem::Impl::imageConverted(bool success) cc_.disconnect(); success = !file_to_load_.empty() && IsFileReadable(file_to_load_); - lyxerr[Debug::GRAPHICS] << "Unable to find converted file!" << endl; if (!success) { + lyxerr[Debug::GRAPHICS] << "Unable to find converted file!" + << endl; setStatus(ErrorConverting); if (zipped_) - lyx::unlink(unzipped_filename_); + unlink(unzipped_filename_); return; } @@ -290,10 +306,10 @@ void CacheItem::Impl::imageLoaded(bool success) // Clean up after loading. if (zipped_) - lyx::unlink(unzipped_filename_); + unlink(unzipped_filename_); if (remove_loaded_file_ && unzipped_filename_ != file_to_load_) - lyx::unlink(file_to_load_); + unlink(file_to_load_); cl_.disconnect(); @@ -307,18 +323,19 @@ void CacheItem::Impl::imageLoaded(bool success) } -} // namespace grfx +} // namespace graphics +} // namespace lyx namespace { string const findTargetFormat(string const & from) { - typedef grfx::Image::FormatList FormatList; - FormatList const formats = grfx::Image::loadableFormats(); + typedef lyx::graphics::Image::FormatList FormatList; + FormatList const formats = lyx::graphics::Image::loadableFormats(); // There must be a format to load from. - lyx::Assert(!formats.empty()); + BOOST_ASSERT(!formats.empty()); // First ascertain if we can load directly with no conversion FormatList::const_iterator it = formats.begin(); @@ -331,7 +348,7 @@ string const findTargetFormat(string const & from) // So, we have to convert to a loadable format. Can we? it = formats.begin(); for (; it != end; ++it) { - if (grfx::Converter::isReachable(from, *it)) + if (lyx::graphics::Converter::isReachable(from, *it)) return *it; else lyxerr[Debug::GRAPHICS] @@ -347,7 +364,8 @@ string const findTargetFormat(string const & from) } // anon namespace -namespace grfx { +namespace lyx { +namespace graphics { void CacheItem::Impl::convertToDisplayFormat() { @@ -364,8 +382,19 @@ void CacheItem::Impl::convertToDisplayFormat() } // Make a local copy in case we unzip it - string const filename = zippedFile(filename_) ? - unzipFile(filename_) : filename_; + string filename; + if ((zipped_ = zippedFile(filename_))) { + unzipped_filename_ = tempName(string(), filename_); + if (unzipped_filename_.empty()) { + setStatus(ErrorConverting); + lyxerr[Debug::GRAPHICS] + << "\tCould not create temporary file." << endl; + return; + } + filename = unzipFile(filename_, unzipped_filename_); + } else + filename = filename_; + string const displayed_filename = MakeDisplayPath(filename_); lyxerr[Debug::GRAPHICS] << "[GrahicsCacheItem::convertToDisplayFormat]\n" << "\tAttempting to convert image file: " << filename @@ -391,11 +420,12 @@ void CacheItem::Impl::convertToDisplayFormat() // Add some stuff to create a uniquely named temporary file. // This file is deleted in loadImage after it is loaded into memory. - string const to_file_base = lyx::tempName(string(), temp); + string const to_file_base = tempName(string(), temp); remove_loaded_file_ = true; // Remove the temp file, we only want the name... - lyx::unlink(to_file_base); + // FIXME: This is unsafe! + unlink(to_file_base); // Connect a signal to this->imageConverted and pass this signal to // the graphics converter so that we can load the modified file @@ -405,4 +435,5 @@ void CacheItem::Impl::convertToDisplayFormat() converter_->startConversion(); } -} // namespace grfx +} // namespace graphics +} // namespace lyx