Esempio n. 1
0
            /// <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);
            }
Esempio n. 2
0
            /// <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());
            }
Esempio n. 3
0
            /* 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);
            }