From 0704d00ff7135d8283d70a3e45a98163f0d0ceec Mon Sep 17 00:00:00 2001 From: Geoffroy Couprie Date: Wed, 3 Mar 2010 18:49:59 +0100 Subject: [PATCH] Win32: Store the plugins cache in c:\ProgramData\VideoLAN\VLC, run vlc-cache-gen.exe at install time, and as a bonus, fixes #3308 --- extras/package/win32/vlc.win32.nsi.in | 13 +++++++++++++ src/modules/modules.c | 27 ++++++++++++++++++++++++++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/extras/package/win32/vlc.win32.nsi.in b/extras/package/win32/vlc.win32.nsi.in index 03263263db..f7712f9fa5 100644 --- a/extras/package/win32/vlc.win32.nsi.in +++ b/extras/package/win32/vlc.win32.nsi.in @@ -314,6 +314,14 @@ FunctionEnd ; 3. Delete prefs and cache ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +!macro gencache + SetShellVarContext all + CreateDirectory "$APPDATA\\VideoLAN" + CreateDirectory "$APPDATA\\VideoLAN\\VLC" + ExecWait "$INSTDIR\vlc-cache-gen.exe $APPDATA\\VideoLAN\\VLC" + SetShellVarContext current +!macroend + !macro delprefs StrCpy $0 0 !define Index 'Line${__LINE__}' @@ -331,6 +339,9 @@ FunctionEnd Goto "${Index}-Loop" "${Index}-End:" !undef Index + SetShellVarContext all + RMDir /r "$APPDATA\\VideoLAN" + SetShellVarContext current !macroend ;;;;;;;;;;;;;;; @@ -414,6 +425,7 @@ Section $Name_Section01 SEC01 ; VLC.exe, libvlc.dll !insertmacro InstallFile vlc.exe !insertmacro InstallFile vlc.exe.manifest + !insertmacro InstallFile vlc-cache-gen.exe ; All dlls !insertmacro InstallFile *.dll @@ -428,6 +440,7 @@ Section $Name_Section01 SEC01 @BUILD_SKINS_TRUE@ !insertmacro InstallFolder skins @BUILD_HTTPD_TRUE@ !insertmacro InstallFolder http @BUILD_LUA_TRUE@ !insertmacro InstallFolder lua + !insertmacro gencache ; URLs diff --git a/src/modules/modules.c b/src/modules/modules.c index 1e4a4dfaa7..183b748803 100644 --- a/src/modules/modules.c +++ b/src/modules/modules.c @@ -821,9 +821,20 @@ static void AllocateAllPlugins( vlc_object_t *p_this, module_bank_t *p_bank ) /* Contruct the special search path for system that have a relocatable * executable. Set it to /plugins. */ assert( vlcpath ); - +#ifndef WIN32 if( asprintf( &path, "%s" DIR_SEP "plugins", vlcpath ) != -1 ) vlc_array_append( arraypaths, path ); +#else + /* Store the plugins cache in the common AppData folder */ + char commonpath[PATH_MAX] = ""; + int res = snprintf( commonpath, PATH_MAX -1, "%s\\VideoLAN\\VLC", config_GetConfDir()); + if(res == -1 || res >= PATH_MAX) + { + vlc_array_destroy( arraypaths ); + free(path); + return; + } +#endif /* If the user provided a plugin path, we add it to the list */ char *userpaths = var_InheritString( p_this, "plugin-path" ); @@ -845,17 +856,31 @@ static void AllocateAllPlugins( vlc_object_t *p_this, module_bank_t *p_bank ) size_t offset = p_module_bank->i_cache; if( b_reset ) +#ifndef WIN32 CacheDelete( p_this, path ); +#else + CacheDelete( p_this, commonpath ); +#endif else +#ifndef WIN32 CacheLoad( p_this, p_module_bank, path ); +#else + CacheLoad( p_this, p_module_bank, commonpath ); +#endif msg_Dbg( p_this, "recursively browsing `%s'", path ); /* Don't go deeper than 5 subdirectories */ AllocatePluginDir( p_this, p_bank, path, 5 ); + +#ifndef WIN32 CacheSave( p_this, path, p_module_bank->pp_cache + offset, p_module_bank->i_cache - offset ); +#else + CacheSave( p_this, commonpath, p_module_bank->pp_cache + offset, + p_module_bank->i_cache - offset ); +#endif free( path ); } -- 2.39.2