Exemple #1
0
        public bool Process(InfoReader instance, CommandParser parser)
        {
            var or = instance.GetOrtdp();

            if (parser.MainCommand == "open")
            {
                if (parser.Arguments[0] == "beatmappage")
                {
                    Open(instance.GetOrtdp().Beatmap.DownloadLink);
                }
                else if (parser.Arguments[0] == "beatmapfolder")
                {
                    Open(or.Beatmap.BeatmapFolder);
                }
                else if (parser.Arguments[0] == "musicfolder")
                {
                    Open(instance.Setting.DefaultMusicCopyingDirectory);
                }
                else if (parser.Arguments[0] == "videofolder")
                {
                    Open(instance.Setting.DefaultVideoCopyingDirectory);
                }

                else if (parser.Arguments[0] == "bgfolder")
                {
                    Open(instance.Setting.DefaultBackgroundCopyingDirectory);
                }
                else if (parser.Arguments[0] == "oszfolder")
                {
                    Open(instance.Setting.OszDir);
                }

                else if (parser.Arguments[0] == "userpage")
                {
                    string username;
                    if (parser.Arguments.Count < 1)
                    {
                        OsuInfo info = new OsuInfo();
                        username = info.UserName;
                        if (string.IsNullOrEmpty(username))
                        {
                            IO.CurrentIO.WriteColor("无法检测用户名,请在最后填入用户名", ConsoleColor.Red);
                        }
                    }
                    else
                    {
                        username = CombineString(parser.Arguments.Skip(1).ToArray());
                    }
                    Open($"https://osu.ppy.sh/users/{username}");
                }
                else
                {
                    IO.CurrentIO.Write(GetHelp());
                }
            }
            return(true);
        }
Exemple #2
0
        /// <summary>
        /// 从score.db中获取数据
        /// </summary>
        public OsuScoreDb()
        {
            var info   = new OsuInfo();
            var dbfile = info.OsuDirectory + "scores.db";
            var stream = File.OpenRead(dbfile);

            _reader          = new BinaryReader(stream);
            Manifest.Version = _reader.ReadInt32();
            _beatmapnum      = _reader.ReadInt32();
            try
            {
                Read();
            }
            catch (Exception e)
            {
                Console.WriteLine($"读取时发生错误,请检查文件格式是否正确: {e.Message}");
            }
        }
Exemple #3
0
        /// <summary>
        ///     初始化一个OsuBeatmapDB对象
        /// </summary>
        public OsuBeatmapDb()
        {
            var info   = new OsuInfo();
            var file   = info.OsuDirectory + "osu!.db";
            var stream = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

            _binReader = new BinaryReader(stream);

            _dbFilePath = file;
            Md5         = GetMd5();
            try
            {
                Read();
            }
            catch (Exception e)
            {
                Console.WriteLine($"读取时发生错误,请检查文件格式是否正确: {e.Message}");
            }
        }
Exemple #4
0
            /// <summary>
            ///     从文件读取信息
            /// </summary>
            /// <param name="fileName"></param>
            /// <returns></returns>
            public static BeatmapCollection ReadFromFile(string fileName = ".\\beatmaplist\\list.txt")
            {
                var oinfo = new OsuInfo();
                var c     = new BeatmapCollection();

                if (!File.Exists(fileName))
                {
                    var names = fileName.Split('\\');
                    var name  = names[names.Length - 1];
                    Directory.CreateDirectory(fileName.Replace(name, ""));
                    File.Create(fileName).Close();
                }

                var info = File.ReadAllLines(fileName);

                if (info.Length < 1)
                {
                    MessageBox.Show("文件中不包含任何谱面信息,将重新搜索。");
                    c = GetAllBeatmaps(oinfo.BeatmapDirectory, BeatmapSearchOption.AllBeatmaps);
                }

                if (c._beatmaps.Count == 0)
                {
                    foreach (var beatmap in info)
                    {
                        var beatmapdir = beatmap.Split('?')[1];
                        if (!File.Exists(beatmapdir))
                        {
                            MessageBox.Show($"找不到谱面\"{beatmapdir}\",即将重新寻找谱面。");
                            return(GetAllBeatmaps(oinfo.BeatmapDirectory, BeatmapSearchOption.AllBeatmaps));
                        }

                        var tmp = new Beatmap(beatmapdir);
                        if (!tmp.NotValid)
                        {
                            c._beatmaps.Add(tmp);
                        }
                    }
                }

                return(c);
            }
Exemple #5
0
        /// <summary>
        ///     在指定的文件夹搜索该谱面的录像。
        /// </summary>
        /// <param name="replyfolder">要搜索的文件夹</param>
        /// <returns>返回一个存储录像信息的类的数组</returns>
        public ReplayCollection GetReplaysForBeatmap(string replyfolder = "")
        {
            var info = new OsuInfo();
            var r    = new ReplayCollection();

            if (replyfolder == "")
            {
                replyfolder = info.OsuDirectory + "\\Replays";
            }
            var replays = ReplayCollection.GetAllReplays(replyfolder);

            foreach (var replay in replays)
            {
                if (replay.BeatmapMd5 == Md5.ToString())
                {
                    r.Add(replay);
                }
            }
            return(r);
        }
Exemple #6
0
        /// <summary>
        ///     使用OsuBeatmap初始化Beatmap对象
        /// </summary>
        /// <param name="beatmap"></param>
        /// <param name="getStars"></param>
        public Beatmap(OsuBeatmap beatmap, bool getStars = true)
        {
            var info = new OsuInfo();

            Title             = beatmap.Title;
            TitleUnicode      = beatmap.TitleUnicode;
            Artist            = beatmap.Artist;
            ArtistUnicode     = beatmap.ArtistUnicode;
            Creator           = beatmap.Creator;
            Difficulty        = beatmap.Difficulty;
            Version           = Difficulty;
            FileName          = beatmap.FileName;
            FullPath          = Path.Combine(info.BeatmapDirectory, beatmap.FolderName, beatmap.FileName);
            DownloadLink      = $"http://osu.ppy.sh/b/{beatmap.BeatmapId}";
            Source            = beatmap.Source;
            Tags              = beatmap.Tags;
            Maker             = "";
            Md5               = new MD5String(beatmap.Md5);
            FullAudioFileName = Path.Combine(info.BeatmapDirectory, beatmap.FolderName, beatmap.AudioFileName);
            FullVideoFileName = "";
            OverallDifficulty = beatmap.OverallDifficulty;
            HpDrain           = beatmap.HpDrain;
            ApproachRate      = beatmap.ApproachRate;
            CircleSize        = beatmap.CircleSize;
            BeatmapSetId      = beatmap.BeatmapSetId;
            AudioFileName     = beatmap.AudioFileName;
            Mode              = beatmap.Mode;
            if (getStars)
            {
                double.TryParse(beatmap.Stars.ToString(CultureInfo.InvariantCulture), out var stars);
                Stars = stars;
            }
            else
            {
                Stars = 0;
            }
            if (FullPath == "" || !File.Exists(FullPath))
            {
                return;
            }
            var alllines = File.ReadAllLines(FullPath);

            if (!alllines[0].Contains("osu file format"))
            {
                NotValid = true;

                throw new InvalidBeatmapFileException($"文件{FullPath}不是谱面文件。");
            }

            StringBuilder b = new StringBuilder();

            foreach (var c in alllines[0])
            {
                if (char.IsDigit(c))
                {
                    b.Append(c);
                }
            }
            BeatmapVersion = int.Parse(b.ToString());
            foreach (var line in alllines)
            {
                var temparr = line.Split(':');
                if (temparr[0].StartsWith("0,0,\""))
                {
                    if (string.IsNullOrEmpty(BackgroundFileName))
                    {
                        BackgroundFileName = temparr[0].Split(',')[2].Replace("\"", "").Trim();
                    }
                    FullBackgroundFileName = Path.Combine(BeatmapFolder, BackgroundFileName);
                    continue;
                }

                if (temparr[0].StartsWith("Video,"))
                {
                    VideoFileName     = temparr[0].Split(',')[2].Replace("\"", "").Trim();
                    FullVideoFileName = Path.Combine(BeatmapFolder, FullVideoFileName);
                    HasVideo          = !string.IsNullOrEmpty(VideoFileName);
                    continue;
                }

                FullVideoFileName = FullPath.Replace(FileName, VideoFileName);
                if (line.Contains("TimingPoints"))
                {
                    break;
                }
            }

            BeatmapId = beatmap.BeatmapId;
            getAddtionalInfo(alllines);
        }