/// <summary> /// 使用指定的模式搜索谱面,可指定包含与不包含 /// </summary> /// <param name="mode"></param> /// <param name="option"></param> /// <returns></returns> public BeatmapCollection Find(OsuGameMode mode, BeatmapFindOption option = BeatmapFindOption.Contains) { var bc = new BeatmapCollection(); foreach (var b in _beatmaps) { if (option == BeatmapFindOption.Contains) { if (b.Mode == mode) { if (!bc.Contains(b)) { bc.Add(b); } } } if (option == BeatmapFindOption.NotContains) { if (b.Mode != mode) { if (!bc.Contains(b)) { bc.Add(b); } } } } return(bc); }
/// <summary> /// 在指定的文件夹中搜索谱面,可指定谱面添加选项(<see cref="BeatmapSearchOption" />),是否保存到文件与要保存到的文件的文件路径 /// </summary> /// <param name="beatmapdir"></param> /// <param name="option"></param> /// <param name="saveResultToFile"></param> /// <param name="saveFilePath"></param> /// <returns></returns> public static BeatmapCollection GetAllBeatmaps(string beatmapdir, BeatmapSearchOption option, bool saveResultToFile = true, string saveFilePath = ".\\beatmaplist\\list.txt") { var bc = new BeatmapCollection(); if (Directory.Exists(beatmapdir)) { if (option == BeatmapSearchOption.AllBeatmaps) { var dirs = Directory.GetFiles(beatmapdir, "*.osu", SearchOption.AllDirectories); foreach (var osufile in dirs) { var b = new Beatmap(osufile); bc.Add(b); } if (saveResultToFile) { bc.Save(saveFilePath); } return(bc); } if (option == BeatmapSearchOption.OnlyTheFirstBeatmap) { var dirs = Directory.GetDirectories(beatmapdir, "*", SearchOption.AllDirectories); foreach (var dir in dirs) { var em = Directory.GetFiles(dir + '\\', "*.osu", SearchOption.AllDirectories); { if (em.Length == 0) { //throw new osuToolsException.NoBeatmapInFolder("指定的文件夹里不包含谱面。", dir); } bc.Add(new Beatmap(em.First())); } } } else { if (beatmapdir == null) { throw new NullReferenceException(); } throw new DirectoryNotFoundException(); } if (bc.Beatmaps.Count == 0) { return(bc); } if (saveResultToFile) { bc.Save(saveFilePath); } return(bc); } return(new BeatmapCollection()); }
/* public BeatmapCollection FindEx(string artist = null, string title = null, string creator = null, string version = null, string tag = null, string source = null) * { * BeatmapCollection result = new BeatmapCollection(); * * return result; * }*/ /// <summary> /// 使用关键词搜索谱面,可指定包括与不包括 /// </summary> /// <param name="keyWord"></param> /// <param name="option"></param> /// <returns></returns> public BeatmapCollection Find(string keyWord, BeatmapFindOption option = BeatmapFindOption.Contains) { var b = new BeatmapCollection(); var keyword = keyWord.ToUpper(); foreach (var beatmap in _beatmaps) { var allinfo = beatmap.ToString().ToUpper() + " " + beatmap.Source.ToUpper() + " " + beatmap.Tags.ToUpper() + " " + beatmap.Creator.ToUpper() + " " + beatmap.Maker.ToUpper(); if (option == BeatmapFindOption.Contains) { if (keyword.StartsWith("${") && keyword.EndsWith("}")) { var newkeyword = keyword.Trim('$', '}', '{'); if (beatmap.Title.ToUpper() == newkeyword || beatmap.TitleUnicode.ToUpper() == newkeyword || beatmap.Artist.ToUpper() == newkeyword || beatmap.ArtistUnicode.ToUpper() == newkeyword || beatmap.Maker.ToUpper() == newkeyword || beatmap.Creator.ToUpper() == newkeyword || beatmap.Tags.ToUpper() == newkeyword || beatmap.Source.ToUpper() == newkeyword || beatmap.Difficulty.ToUpper() == newkeyword) { if (!b.Contains(beatmap)) { b.Add(beatmap); } } } else if (allinfo.Contains(keyword)) { b.Add(beatmap); } } if (option == BeatmapFindOption.NotContains) { if (keyword.StartsWith("${") && keyword.EndsWith("}")) { var newkeyw = keyword.Trim('$', '}', '{'); if (beatmap.Title.ToUpper() != newkeyw && beatmap.TitleUnicode.ToUpper() != newkeyw && beatmap.Artist.ToUpper() != newkeyw && beatmap.ArtistUnicode.ToUpper() != newkeyw && beatmap.Maker.ToUpper() != newkeyw && beatmap.Creator.ToUpper() != newkeyw && beatmap.Tags.ToUpper() != newkeyw && beatmap.Source.ToUpper() != newkeyw && beatmap.Difficulty.ToUpper() != newkeyw) { if (!b.Contains(beatmap)) { b.Add(beatmap); } } } else if (!allinfo.Contains(keyword)) { b.Add(beatmap); } } } if (b.Beatmaps.Count == 0) { throw new BeatmapNotFoundException("找不到指定的谱面"); } return(b); }