MCPcopy Create free account
hub / github.com/FreeCAD/FreeCAD / loadFCStdThumbnail

Function loadFCStdThumbnail

src/Mod/Start/App/FcstdInfoSource.cpp:44–84  ·  view source on GitHub ↗

Load the thumbnail image data (if any) that is stored in an FCStd file. \returns The image bytes, or an empty QByteArray (if no thumbnail was stored)

Source from the content-addressed store, hash-verified

42/// Load the thumbnail image data (if any) that is stored in an FCStd file.
43/// \returns The image bytes, or an empty QByteArray (if no thumbnail was stored)
44static QByteArray loadFCStdThumbnail(const App::ProjectFile& proj, const QString& filePath)
45{
46 try {
47 const QString pathToCachedThumbnail = getPathToCachedThumbnail(filePath);
48 if (useCachedThumbnail(pathToCachedThumbnail, filePath)) {
49 if (auto inputFile = QFile(pathToCachedThumbnail);
50 inputFile.exists() && inputFile.open(QIODevice::OpenModeFlag::ReadOnly)) {
51 return inputFile.readAll();
52 }
53 }
54 else {
55 const auto pathToThumbnail = QString(defaultThumbnailPath).toStdString();
56 if (proj.containsFile(pathToThumbnail)) {
57 createThumbnailsDir();
58
59 // Read the thumbnail into a buffer
60 const auto dataSize = proj.sizeOfFile(pathToThumbnail);
61 QByteArray data(dataSize, Qt::Uninitialized);
62#ifdef __cpp_lib_spanstream
63 std::spanstream dataStream({data.data(), size_t(data.size())});
64#else
65 Base::BufferStreambuf dataStreambuf({data.data(), size_t(data.size())});
66 std::ostream dataStream(&dataStreambuf);
67#endif
68 proj.readInputFileDirect(pathToThumbnail, dataStream);
69
70 // Save that buffer to the thumbnail cache
71 const Base::FileInfo thumbnailFileInfo(pathToCachedThumbnail.toStdString());
72 Base::ofstream thumbnailFileStream(thumbnailFileInfo, std::ios::out | std::ios::binary);
73 thumbnailFileStream.write(data.data(), data.size());
74 thumbnailFileStream.close();
75
76 return data;
77 }
78 }
79 }
80 catch (...) {
81 Base::Console().log("Failed to load thumbnail for %s", filePath.toStdString());
82 }
83 return {};
84}
85
86static FileStats getProjectFileInfo(const App::ProjectFile& proj)
87{

Callers 1

runMethod · 0.85

Calls 13

QFileClass · 0.85
toStdStringMethod · 0.80
containsFileMethod · 0.80
sizeOfFileMethod · 0.80
readInputFileDirectMethod · 0.80
QStringClass · 0.70
existsMethod · 0.45
openMethod · 0.45
dataMethod · 0.45
sizeMethod · 0.45
writeMethod · 0.45
closeMethod · 0.45

Tested by

no test coverage detected