From e66eb9759a490f3e00ffc0b439a4a1db8c4d04e2 Mon Sep 17 00:00:00 2001 From: ChsBuffer <33744752+chsbuffer@users.noreply.github.com> Date: Sat, 13 Mar 2021 00:44:39 +0800 Subject: [PATCH] Refactor LoadModes --- Netch/Updater/Updater.cs | 2 +- Netch/Utils/ModeHelper.cs | 63 +++++++++++++++++---------------------- 2 files changed, 29 insertions(+), 36 deletions(-) diff --git a/Netch/Updater/Updater.cs b/Netch/Updater/Updater.cs index 4e239ee0..1b12be2d 100644 --- a/Netch/Updater/Updater.cs +++ b/Netch/Updater/Updater.cs @@ -129,7 +129,7 @@ namespace Netch.Updater if (extendedKeepFolders.Any(p => file.StartsWith(p))) continue; - if (Path.GetFileName(file) is "disabled") + if (Path.GetFileName(file) is ModeHelper.DISABLE_MODE_DIRECTORY_FILENAME) continue; removedFiles.Add(file); diff --git a/Netch/Utils/ModeHelper.cs b/Netch/Utils/ModeHelper.cs index c2917aa8..1df0d234 100644 --- a/Netch/Utils/ModeHelper.cs +++ b/Netch/Utils/ModeHelper.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.IO; using System.Linq; using Netch.Controllers; @@ -12,6 +11,7 @@ namespace Netch.Utils public static class ModeHelper { private const string MODE_DIR = "mode"; + public const string DISABLE_MODE_DIRECTORY_FILENAME = "disabled"; public static readonly string ModeDirectory = Path.Combine(Global.NetchDir, $"{MODE_DIR}\\"); @@ -25,46 +25,37 @@ namespace Netch.Utils return Path.Combine(ModeDirectory, relativeName); } - public static string GetFullPath(Mode mode) - { - return Path.Combine(ModeDirectory, mode.RelativePath); - } - /// - /// 从模式文件夹读取模式并为 绑定数据 + /// 从模式文件夹读取模式 /// public static void Load() { Global.Modes.Clear(); - - if (!Directory.Exists(MODE_DIR)) - return; - - var stack = new Stack(); - stack.Push(MODE_DIR); - while (stack.Count > 0) - { - var dirInfo = new DirectoryInfo(stack.Pop()); - try - { - foreach (var childDirInfo in dirInfo.GetDirectories()) - stack.Push(childDirInfo.FullName); - - if (File.Exists(Path.Combine(dirInfo.FullName, "disabled"))) - continue; - - foreach (var childFileInfo in dirInfo.GetFiles().Where(info => info.Name.EndsWith(".txt"))) - LoadModeFile(childFileInfo.FullName); - } - catch - { - // ignored - } - } + LoadModeDirectory(ModeDirectory); Sort(); } + private static void LoadModeDirectory(string modeDirectory) + { + try + { + foreach (var directory in Directory.GetDirectories(modeDirectory)) + LoadModeDirectory(directory); + + // skip Directory with a disabled file in + if (File.Exists(Path.Combine(modeDirectory, DISABLE_MODE_DIRECTORY_FILENAME))) + return; + + foreach (var file in Directory.GetFiles(modeDirectory).Where(f => f.EndsWith(".txt"))) + LoadModeFile(file); + } + catch + { + // ignored + } + } + private static void LoadModeFile(string fullName) { var mode = new Mode(fullName); @@ -122,9 +113,11 @@ namespace Netch.Utils public static void Delete(Mode mode) { - var fullName = GetFullPath(mode); - if (File.Exists(fullName)) - File.Delete(fullName); + if (mode.FullName == null) + throw new ArgumentException("FullName"); + + if (File.Exists(mode.FullName)) + File.Delete(mode.FullName); Global.Modes.Remove(mode); Global.MainForm.LoadModes();