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); }
/// <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}"); } }
/// <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}"); } }
/// <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); }
/// <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); }
/// <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); }