Ejemplo n.º 1
0
        /// <summary>
        /// 获取所有已经启用的皮肤
        /// </summary>
        /// <returns></returns>
        public static SkinCollection GetEnabledSkins()
        {
            SkinCollection  enabledSkins = s_EnabledSkins;
            CacheDependency skinsWatcher = s_SkinsWatcher;

            if (enabledSkins == null || skinsWatcher == null || skinsWatcher.HasChanged)
            {
                enabledSkins = new SkinCollection();

                foreach (Skin skin in GetAllSkins())
                {
                    if (skin.Enabled)
                    {
                        enabledSkins.Add(skin);
                    }
                }

                s_EnabledSkins = enabledSkins;
            }

            return(enabledSkins);
        }
Ejemplo n.º 2
0
        public static SkinCollection GetAllSkins()
        {
            SkinCollection allSkins = s_AllSkins;//new SkinCollection();
            CacheDependency skinsWatcher = s_SkinsWatcher;

            if (allSkins == null || skinsWatcher == null || skinsWatcher.HasChanged)
            {
                lock (s_LoadSkinLocker)
                {
                    allSkins = s_AllSkins;
                    skinsWatcher = s_SkinsWatcher;

                    if (allSkins == null || skinsWatcher == null || skinsWatcher.HasChanged)
                    {
                        allSkins = new SkinCollection();

                        //SkinCollection enabledSkins = new SkinCollection();

                        string skinsPath = Globals.GetPath(SystemDirecotry.Skins);
                        //获得保存主题的目录实体
                        DirectoryInfo skinsDirectory = new DirectoryInfo(skinsPath);

                        //所有主题的目录集合
                        DirectoryInfo[] skinDirectorys = skinsDirectory.GetDirectories();

                        List<string> watcher = new List<string>();

                        //string[] tempFileNames = new string[skinDirectorys.Length];
                        //int index = 0;

                        //遍历所有主题的目录集合,把存在Theme.Config文件的主题添加到主题列表中
                        foreach (DirectoryInfo skinDirectory in skinDirectorys)
                        {
                            string file = IOUtil.JoinPath(skinDirectory.FullName, MaxLabs.bbsMax.Consts.SkinConfigFile);

                            if (File.Exists(file) == true)
                            {
                                Skin skin = new Skin();
                                skin.SkinID = skinDirectory.Name;
                                skin.Name = skin.SkinID;

                                //读取_skin.config配置文件
                                XmlDocument doc = new XmlDocument();

                                try
                                {
                                    doc.Load(file);

                                    #region 循环取 Skin 的属性

                                    foreach (XmlNode configNode in doc.DocumentElement.ChildNodes)
                                    {
                                        if (configNode.NodeType != XmlNodeType.Comment)
                                        {
                                            switch (configNode.Name.ToLower())
                                            {
                                                case "name":
                                                    skin.Name = configNode.InnerText.Trim();
                                                    break;
                                                case "version":
                                                    skin.Version = configNode.InnerText.Trim();
                                                    break;
                                                case "publishdate":
                                                    try
                                                    {
                                                        skin.PublishDate = DateTime.Parse(configNode.InnerText.Trim());
                                                    }
                                                    catch
                                                    {
                                                        skin.PublishDate = DateTime.MinValue;
                                                    }
                                                    break;
                                                case "author":
                                                    skin.Author = configNode.InnerText.Trim();
                                                    break;
                                                case "website":
                                                    skin.WebSite = configNode.InnerText.Trim();
                                                    break;

                                                case "description":
                                                    skin.Description = configNode.InnerText.Trim();
                                                    break;

                                                case "skinbase":
                                                    skin.SkinBase = configNode.InnerText.Trim();
                                                    break;
                                            }
                                        }
                                    }

                                    #endregion

                                }
                                catch { }

                                allSkins.Add(skin);

                                //if (skin.Enabled)
                                //    enabledSkins.Add(skin);

                                watcher.Add(file);

                                //tempFileNames[index] = file;
                                //index++;
                            }
                            else
                                watcher.Add(skinDirectory.FullName);
                        }

                        watcher.Add(skinsPath);

                        s_AllSkins = allSkins;
                        s_EnabledSkins = null;
                        s_SkinsWatcher = new CacheDependency(watcher.ToArray());
                    }
                }
            }

            if (allSkins == null || allSkins.Count == 0 || allSkins.ContainsKey(MaxLabs.bbsMax.Consts.DefaultSkinID) == false)
            {
                throw new Exception("载入默认模板失败。默认模板位于“max-templates/default”目录下,该目录不能删除。");
            }

            return allSkins;
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 获取所有已经启用的皮肤
        /// </summary>
        /// <returns></returns>
        public static SkinCollection GetEnabledSkins()
        {
            SkinCollection enabledSkins = s_EnabledSkins;
            CacheDependency skinsWatcher = s_SkinsWatcher;

            if (enabledSkins == null || skinsWatcher == null || skinsWatcher.HasChanged)
            {
                enabledSkins = new SkinCollection();

                foreach (Skin skin in GetAllSkins())
                {
                    if (skin.Enabled)
                        enabledSkins.Add(skin);
                }

                s_EnabledSkins = enabledSkins;
            }

            return enabledSkins;
        }
Ejemplo n.º 4
0
        public static SkinCollection GetAllSkins()
        {
            SkinCollection  allSkins     = s_AllSkins;//new SkinCollection();
            CacheDependency skinsWatcher = s_SkinsWatcher;

            if (allSkins == null || skinsWatcher == null || skinsWatcher.HasChanged)
            {
                lock (s_LoadSkinLocker)
                {
                    allSkins     = s_AllSkins;
                    skinsWatcher = s_SkinsWatcher;

                    if (allSkins == null || skinsWatcher == null || skinsWatcher.HasChanged)
                    {
                        allSkins = new SkinCollection();

                        //SkinCollection enabledSkins = new SkinCollection();

                        string skinsPath = Globals.GetPath(SystemDirecotry.Skins);
                        //获得保存主题的目录实体
                        DirectoryInfo skinsDirectory = new DirectoryInfo(skinsPath);

                        //所有主题的目录集合
                        DirectoryInfo[] skinDirectorys = skinsDirectory.GetDirectories();

                        List <string> watcher = new List <string>();

                        //string[] tempFileNames = new string[skinDirectorys.Length];
                        //int index = 0;

                        //遍历所有主题的目录集合,把存在Theme.Config文件的主题添加到主题列表中
                        foreach (DirectoryInfo skinDirectory in skinDirectorys)
                        {
                            string file = IOUtil.JoinPath(skinDirectory.FullName, MaxLabs.bbsMax.Consts.SkinConfigFile);

                            if (File.Exists(file) == true)
                            {
                                Skin skin = new Skin();
                                skin.SkinID = skinDirectory.Name;
                                skin.Name   = skin.SkinID;

                                //读取_skin.config配置文件
                                XmlDocument doc = new XmlDocument();

                                try
                                {
                                    doc.Load(file);

                                    #region 循环取 Skin 的属性

                                    foreach (XmlNode configNode in doc.DocumentElement.ChildNodes)
                                    {
                                        if (configNode.NodeType != XmlNodeType.Comment)
                                        {
                                            switch (configNode.Name.ToLower())
                                            {
                                            case "name":
                                                skin.Name = configNode.InnerText.Trim();
                                                break;

                                            case "version":
                                                skin.Version = configNode.InnerText.Trim();
                                                break;

                                            case "publishdate":
                                                try
                                                {
                                                    skin.PublishDate = DateTime.Parse(configNode.InnerText.Trim());
                                                }
                                                catch
                                                {
                                                    skin.PublishDate = DateTime.MinValue;
                                                }
                                                break;

                                            case "author":
                                                skin.Author = configNode.InnerText.Trim();
                                                break;

                                            case "website":
                                                skin.WebSite = configNode.InnerText.Trim();
                                                break;

                                            case "description":
                                                skin.Description = configNode.InnerText.Trim();
                                                break;

                                            case "skinbase":
                                                skin.SkinBase = configNode.InnerText.Trim();
                                                break;
                                            }
                                        }
                                    }

                                    #endregion
                                }
                                catch { }

                                allSkins.Add(skin);

                                //if (skin.Enabled)
                                //    enabledSkins.Add(skin);

                                watcher.Add(file);

                                //tempFileNames[index] = file;
                                //index++;
                            }
                            else
                            {
                                watcher.Add(skinDirectory.FullName);
                            }
                        }

                        watcher.Add(skinsPath);

                        s_AllSkins     = allSkins;
                        s_EnabledSkins = null;
                        s_SkinsWatcher = new CacheDependency(watcher.ToArray());
                    }
                }
            }

            if (allSkins == null || allSkins.Count == 0 || allSkins.ContainsKey(MaxLabs.bbsMax.Consts.DefaultSkinID) == false)
            {
                throw new Exception("载入默认模板失败。默认模板位于“max-templates/default”目录下,该目录不能删除。");
            }

            return(allSkins);
        }