MCPcopy Create free account
hub / github.com/Tencent/libpag / writeFile

Method writeFile

src/rendering/caches/DiskCache.cpp:202–241  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

200}
201
202bool DiskCache::writeFile(const std::string& key, std::shared_ptr<tgfx::Data> data) {
203 std::lock_guard<std::mutex> autoLock(locker);
204 if (cacheFolder.empty() || key.empty() || data == nullptr) {
205 return false;
206 }
207 auto changed = checkDiskSpace(maxDiskSize - data->size());
208 if (totalDiskSize + data->size() > maxDiskSize) {
209 if (changed) {
210 saveConfig();
211 }
212 return false;
213 }
214 auto fileID = getFileID(key);
215 auto filePath = fileIDToPath(fileID);
216 Directory::CreateRecursively(Directory::GetParentDirectory(filePath));
217 auto file = fopen(filePath.c_str(), "wb");
218 if (file == nullptr) {
219 return false;
220 }
221 auto writeLength = fwrite(data->data(), 1, data->size(), file);
222 fclose(file);
223 if (writeLength != data->size()) {
224 return false;
225 }
226 totalDiskSize += data->size();
227 auto fileInfo = cachedFileInfos[fileID];
228 if (fileInfo) {
229 totalDiskSize -= fileInfo->fileSize;
230 fileInfo->fileSize = data->size();
231 } else {
232 addToCachedFiles(std::make_shared<FileInfo>(key, fileID, data->size()));
233 fileInfo = cachedFileInfos[fileID];
234 changed = true;
235 }
236 moveToBeforeOpenedFiles(fileInfo);
237 if (changed) {
238 saveConfig();
239 }
240 return true;
241}
242
243bool DiskCache::checkDiskSpace(size_t maxSize) {
244 bool changed = false;

Callers 2

WriteFileMethod · 0.80

Calls 3

emptyMethod · 0.80
sizeMethod · 0.80
dataMethod · 0.45

Tested by

no test coverage detected