2525#include " tgfx/core/Stream.h"
2626
2727namespace pag {
28+
2829class FileInfo {
2930 public:
3031 FileInfo (std::string cacheKey, uint32_t fileID, size_t fileSize = 0 )
@@ -37,6 +38,10 @@ class FileInfo {
3738 std::list<std::shared_ptr<FileInfo>>::iterator cachedPosition;
3839};
3940
41+ void PAGDiskCache::SetCacheDir (const std::string& dir) {
42+ DiskCache::GetInstance ()->setCacheDir (dir);
43+ }
44+
4045size_t PAGDiskCache::MaxDiskSize () {
4146 return DiskCache::GetInstance ()->getMaxDiskSize ();
4247}
@@ -49,6 +54,24 @@ void PAGDiskCache::RemoveAll() {
4954 DiskCache::GetInstance ()->removeAll ();
5055}
5156
57+ std::string DiskCache::getCacheDir () {
58+ if (!customCacheDir.empty ()) {
59+ return customCacheDir;
60+ }
61+ return Platform::Current ()->getCacheDir ();
62+ }
63+
64+ void DiskCache::setCacheDir (const std::string& dir) {
65+ std::lock_guard<std::mutex> autoLock (locker);
66+ customCacheDir = dir;
67+ // Update cache paths
68+ auto cacheDir = dir.empty () ? Platform::Current ()->getCacheDir () : dir;
69+ if (!cacheDir.empty ()) {
70+ configPath = Directory::JoinPath (cacheDir, " cache.cfg" );
71+ cacheFolder = Directory::JoinPath (cacheDir, " files" );
72+ }
73+ }
74+
5275DiskCache* DiskCache::GetInstance () {
5376 static auto & diskCache = *new DiskCache ();
5477 return &diskCache;
@@ -69,7 +92,7 @@ bool DiskCache::WriteFile(const std::string& key, std::shared_ptr<tgfx::Data> da
6992}
7093
7194DiskCache::DiskCache () {
72- auto cacheDir = Platform::Current ()-> getCacheDir ();
95+ auto cacheDir = getCacheDir ();
7396 if (!cacheDir.empty ()) {
7497 configPath = Directory::JoinPath (cacheDir, " cache.cfg" );
7598 cacheFolder = Directory::JoinPath (cacheDir, " files" );
0 commit comments