Ejemplo n.º 1
0
        /// <summary>
        /// シェル情報の一括読み込み
        /// </summary>
        public virtual void Load(int sakuraSurfaceId, int keroSurfaceId)
        {
            // 既存の値はクリア
            ListItems.Clear();

            // シェルフォルダを列挙
            foreach (var subDir in Directory.GetDirectories(Path.Combine(GhostDirPath, "shell")))
            {
                // 隠しフォルダの場合はスキップ
                var dirInfo = new DirectoryInfo(subDir);
                if ((dirInfo.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden)
                {
                    continue;
                }

                var descriptPath = Path.Combine(subDir, "descript.txt");
                // descript.txt が存在しないならスキップ
                if (!File.Exists(descriptPath))
                {
                    continue;
                }

                var item = new ListItem()
                {
                    DirPath = subDir
                };
                try
                {
                    // シェルを読み込み
                    item.Shell = ExplorerShell.Load(subDir, sakuraSurfaceId, keroSurfaceId);
                    item.Name  = item.Shell.Name;
                }
                catch (UnhandlableShellException ex)
                {
                    // 処理不可能なシェル
                    item.ErrorMessage = ex.FriendlyMessage;
                }

                // シェルの読み込みに失敗した場合、Descript.txtのみ読み込み、名前の取得を試みる
                if (item.Shell == null)
                {
                    var descript = DescriptText.Load(descriptPath);
                    item.Name = descript.Get("name");
                }

                ListItems.Add(item);
            }

            // 最後に名前+フォルダパス順でソート
            ListItems = ListItems.OrderBy(s => Tuple.Create(s.Name, s.DirPath)).ToList();
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 対象ゴーストのシェル情報読み込み
        /// </summary>
        public virtual ExplorerShell LoadShell(ExplorerGhost ghost)
        {
            // シェルが1つも存在しない場合はエラーとする
            if (ghost.CurrentShellRelDirPath == null)
            {
                throw new ShellNotFoundException(string.Format(@"有効なシェルが1つも存在しません。", ghost.DefaultShellDirName));
            }

            var shellDir = Path.Combine(ghost.DirPath, ghost.CurrentShellRelDirPath);

            // descript.txtが存在しない場合はエラーとする
            if (!ExplorerShell.IsShellDir(shellDir))
            {
                throw new ShellDescriptNotFoundException("シェルフォルダの中に descript.txt が存在しません。");
            }

            return(ExplorerShell.Load(shellDir, ghost.SakuraDefaultSurfaceId, ghost.KeroDefaultSurfaceId));
        }