public void ReloadThemes() { _themes.Clear(); var folder = _env.ThemesFolder; var folderDatas = new List <ThemeFolderData>(); var dirs = folder.ListDirectories(""); // create folder (meta)datas first foreach (var path in dirs) { try { var folderData = ThemeManifest.CreateThemeFolderData(folder.MapPath(path), _themesBasePath); if (folderData != null) { folderDatas.Add(folderData); } } catch (Exception ex) { Logger.Error(ex, "Unable to create folder data for folder '{0}'".FormatCurrent(path)); } } // perform topological sort (BaseThemes first...) IEnumerable <ThemeFolderData> sortedThemeFolders; try { sortedThemeFolders = folderDatas.ToArray().SortTopological(StringComparer.OrdinalIgnoreCase).Cast <ThemeFolderData>(); } catch (CyclicDependencyException) { var ex = new CyclicDependencyException("Cyclic theme dependencies detected. Please check the 'baseTheme' attribute of your themes and ensure that they do not reference themselves (in)directly."); Logger.Error(ex); throw ex; } catch { throw; } // create theme manifests foreach (var themeFolder in sortedThemeFolders) { try { var manifest = ThemeManifest.Create(themeFolder); if (manifest != null) { AddThemeManifestInternal(manifest, true); } } catch (Exception ex) { Logger.Error(ex, "Unable to create manifest for theme '{0}'".FormatCurrent(themeFolder.FolderName)); } } }
public void ReloadThemes() { _themes.Clear(); var folder = EngineContext.Current.Resolve <IWebSiteFolder>(); var folderDatas = new List <ThemeFolderData>(); var dirs = folder.ListDirectories(_themesBasePath); // create folder (meta)datas first foreach (var path in dirs) { try { var folderData = ThemeManifest.CreateThemeFolderData(CommonHelper.MapPath(path), _themesBasePath); if (folderData != null) { folderDatas.Add(folderData); } } catch (Exception ex) { Debug.WriteLine("ERR - unable to create folder data for folder '{0}': {1}".FormatCurrent(path, ex.Message)); } } // perform topological sort (BaseThemes first...) IEnumerable <ThemeFolderData> sortedThemeFolders; try { sortedThemeFolders = folderDatas.ToArray().SortTopological(StringComparer.OrdinalIgnoreCase).Cast <ThemeFolderData>(); } catch (CyclicDependencyException) { throw new CyclicDependencyException("Cyclic theme dependencies detected. Please check the 'baseTheme' attribute of your themes and ensure that they do not reference themselves (in)directly."); } catch { throw; } // create theme manifests foreach (var themeFolder in sortedThemeFolders) { try { var manifest = ThemeManifest.Create(themeFolder); if (manifest != null) { AddThemeManifestInternal(manifest, true); } } catch (Exception ex) { Debug.WriteLine("ERR - unable to create manifest for theme '{0}': {1}".FormatCurrent(themeFolder.FolderName, ex.Message)); } } }