diff --git a/3d-viewer/3d_cache/3d_cache.cpp b/3d-viewer/3d_cache/3d_cache.cpp index dc9dfcc4a5..474667f3b2 100644 --- a/3d-viewer/3d_cache/3d_cache.cpp +++ b/3d-viewer/3d_cache/3d_cache.cpp @@ -54,6 +54,7 @@ #include "plugins/3dapi/ifsg_api.h" #include +#include #include #include #include @@ -553,40 +554,24 @@ bool S3D_CACHE::Set3DConfigDir( const wxString& aConfigDir ) // 1. OSX: ~/Library/Caches/kicad/3d/ // 2. Linux: ${XDG_CACHE_HOME}/kicad/3d ~/.cache/kicad/3d/ // 3. MSWin: AppData\Local\kicad\3d - wxString cacheDir; + wxFileName cacheDir; + cacheDir.AssignDir( PATHS::GetUserCachePath() ); + cacheDir.AppendDir( "3d" ); -#if defined( _WIN32 ) - wxStandardPaths::Get().UseAppInfo( wxStandardPaths::AppInfo_None ); - cacheDir = wxStandardPaths::Get().GetUserLocalDataDir(); - cacheDir.append( "\\kicad\\3d" ); -#elif defined( __APPLE ) - cacheDir = "${HOME}/Library/Caches/kicad/3d"; -#else // assume Linux - cacheDir = ExpandEnvVarSubstitutions( "${XDG_CACHE_HOME}", nullptr ); - - if( cacheDir.empty() || cacheDir == "${XDG_CACHE_HOME}" ) - cacheDir = "${HOME}/.cache"; - - cacheDir.append( "/kicad/3d" ); -#endif - - cacheDir = ExpandEnvVarSubstitutions( cacheDir, m_project ); - cfgdir.Assign( cacheDir, "" ); - - if( !cfgdir.DirExists() ) + if( !cacheDir.DirExists() ) { - cfgdir.Mkdir( wxS_DIR_DEFAULT, wxPATH_MKDIR_FULL ); + cacheDir.Mkdir( wxS_DIR_DEFAULT, wxPATH_MKDIR_FULL ); - if( !cfgdir.DirExists() ) + if( !cacheDir.DirExists() ) { wxLogTrace( MASK_3D_CACHE, "%s:%s:%d\n * failed to create 3D cache directory '%s'", - __FILE__, __FUNCTION__, __LINE__, cfgdir.GetPath() ); + __FILE__, __FUNCTION__, __LINE__, cacheDir.GetPath() ); return false; } } - m_CacheDir = cfgdir.GetPathWithSep(); + m_CacheDir = cacheDir.GetPathWithSep(); return true; } diff --git a/3d-viewer/3d_cache/3d_plugin_manager.cpp b/3d-viewer/3d_cache/3d_plugin_manager.cpp index 0ed6cb58d1..83ea3dcf7e 100644 --- a/3d-viewer/3d_cache/3d_plugin_manager.cpp +++ b/3d-viewer/3d_cache/3d_plugin_manager.cpp @@ -37,7 +37,6 @@ #include #include #include -#include "3d_plugin_dir.h" #include "3d_plugin_manager.h" #include "plugins/3d/3d_plugin.h" #include "3d_cache/sg/scenegraph.h" diff --git a/common/paths.cpp b/common/paths.cpp index 678e15932e..97ba7a6968 100644 --- a/common/paths.cpp +++ b/common/paths.cpp @@ -18,6 +18,7 @@ */ #include +#include #include #include @@ -146,4 +147,16 @@ wxString PATHS::GetStockPlugins3DPath() fn.AppendDir( "3d" ); return fn.GetPathWithSep(); +} + + +wxString PATHS::GetUserCachePath() +{ + wxFileName tmp; + + tmp.AssignDir( KIPLATFORM::ENV::GetUserCacheDir() ); + tmp.AppendDir( "kicad" ); + tmp.AppendDir( SETTINGS_MANAGER::GetSettingsVersion() ); + + return tmp.GetPathWithSep(); } \ No newline at end of file diff --git a/include/paths.h b/include/paths.h index aff0ff7ece..e01cb78045 100644 --- a/include/paths.h +++ b/include/paths.h @@ -66,6 +66,11 @@ public: */ static wxString GetStockPlugins3DPath(); + /** + * Gets the stock (install) 3d viewer pluginspath + */ + static wxString GetUserCachePath(); + private: // we are a static helper PATHS() {} diff --git a/libs/kiplatform/gtk/environment.cpp b/libs/kiplatform/gtk/environment.cpp index 6cc831509f..90f8b911b3 100644 --- a/libs/kiplatform/gtk/environment.cpp +++ b/libs/kiplatform/gtk/environment.cpp @@ -57,4 +57,10 @@ wxString KIPLATFORM::ENV::GetDocumentsDir() wxString KIPLATFORM::ENV::GetUserConfigDir() { return g_get_user_config_dir(); +} + + +wxString KIPLATFORM::ENV::GetUserCacheDir() +{ + return g_get_user_cache_dir(); } \ No newline at end of file diff --git a/libs/kiplatform/include/kiplatform/environment.h b/libs/kiplatform/include/kiplatform/environment.h index c72c1d46bb..fce1701154 100644 --- a/libs/kiplatform/include/kiplatform/environment.h +++ b/libs/kiplatform/include/kiplatform/environment.h @@ -55,5 +55,7 @@ namespace KIPLATFORM wxString GetDocumentsDir(); wxString GetUserConfigDir(); + + wxString GetUserCacheDir(); } } diff --git a/libs/kiplatform/msw/environment.cpp b/libs/kiplatform/msw/environment.cpp index 02ecd685db..1f24f4bfce 100644 --- a/libs/kiplatform/msw/environment.cpp +++ b/libs/kiplatform/msw/environment.cpp @@ -69,4 +69,15 @@ wxString KIPLATFORM::ENV::GetDocumentsDir() wxString KIPLATFORM::ENV::GetUserConfigDir() { return wxStandardPaths::Get().GetUserConfigDir(); +} + + +wxString KIPLATFORM::ENV::GetUserCacheDir() +{ + // Unforunately AppData/Local is the closest analog to "Cache" directories of other platforms + + // Make sure we dont include the "appinfo" (appended app name) + wxStandardPaths::Get().UseAppInfo( wxStandardPaths::AppInfo_None ); + + return wxStandardPaths::Get().GetUserLocalDataDir(); } \ No newline at end of file diff --git a/libs/kiplatform/osx/environment.mm b/libs/kiplatform/osx/environment.mm index 235f127c8c..88aa464a12 100644 --- a/libs/kiplatform/osx/environment.mm +++ b/libs/kiplatform/osx/environment.mm @@ -61,4 +61,10 @@ wxString KIPLATFORM::ENV::GetDocumentsDir() wxString KIPLATFORM::ENV::GetUserConfigDir() { return wxStandardPaths::Get().GetUserConfigDir(); +} + + +wxString KIPLATFORM::ENV::GetUserCacheDir() +{ + return wxStandardPaths::Get().GetUserDir( wxStandardPaths::Dir::Dir_Cache ); } \ No newline at end of file