Esempio n. 1
0
        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));
                }
            }
        }