public Beatmap GetBeatmap(int mapId) { //mapId should be >0 string sql = "SELECT * FROM `withID` WHERE MapId = " + mapId; var reader = Query(sql); var beatmap = new Beatmap(); if (reader.Read()) { beatmap.Read(reader); } else { reader.Dispose(); sql = "SELECT * FROM `Temp` WHERE MapId = " + mapId; reader = Query(sql); beatmap = new Beatmap(); if (reader.Read()) { beatmap.Read(reader); } reader.Dispose(); } return beatmap; }
public Beatmap ApplyMods(Beatmap map, Mods mods) { var c = _difficultyCalculator.ApplyMods(map, mods); var retMap = (Beatmap)map.Clone(); retMap.ApproachRate = c["AR"]; retMap.CircleSize = c["CS"]; retMap.OverallDifficulty = c["OD"]; return(retMap); }
public Beatmap(Beatmap b) { Collection = b.Collection; TitleUnicode = b.TitleUnicode; TitleRoman = b.TitleRoman; ArtistUnicode = b.ArtistUnicode; ArtistRoman = b.ArtistRoman; Creator = b.Creator; DiffName = b.DiffName; Mp3Name = b.Mp3Name; Md5 = b.Md5; OsuFileName = b.OsuFileName; Tags = b.Tags; Somestuff = b.Somestuff; State = b.State; Circles = b.Circles; Sliders = b.Sliders; Spinners = b.Spinners; EditDate = b.EditDate; ApproachRate = b.ApproachRate; CircleSize = b.CircleSize; HpDrainRate = b.HpDrainRate; OverallDifficulty = b.OverallDifficulty; SliderVelocity = b.SliderVelocity; DrainingTime = b.DrainingTime; TotalTime = b.TotalTime; PreviewTime = b.PreviewTime; MapId = b.MapId; MapSetId = b.MapSetId; ThreadId = b.ThreadId; MapRating = b.MapRating; Offset = b.Offset; StackLeniency = b.StackLeniency; Mode = b.Mode; Source = b.Source; AudioOffset = b.AudioOffset; LetterBox = b.LetterBox; Played = b.Played; LastPlayed = b.LastPlayed; IsOsz2 = b.IsOsz2; Dir = b.Dir; LastSync = b.LastSync; DisableHitsounds = b.DisableHitsounds; DisableSkin = b.DisableSkin; DisableSb = b.DisableSb; BgDim = b.BgDim; ModPpStars = b.ModPpStars; MaxBpm = b.MaxBpm; MinBpm = b.MinBpm; }
private void ParseLines(List<string> lines, Beatmap map) { var FileSections = GetSections(lines); for (int i = 0; i < FileSections.Count; i++) { if (!_sections.ContainsKey(FileSections[i].SectionName)) throw new NotImplementedException(string.Format("This osu file format is not yet supported (unknown section \"{0}\")", FileSections[i].SectionName)); var linesToProcess = lines.GetRange(FileSections[i].Start, FileSections[i].Count); _sections[FileSections[i].SectionName](linesToProcess, map); } }
public Beatmap ReadBeatmapData(string fullFileDir) { var map = new Beatmap(); map.Dir = Path.GetFullPath(fullFileDir); map.OsuFileName = Path.GetFileName(fullFileDir); var filename = Path.GetFileNameWithoutExtension(map.OsuFileName); if (!filename.EndsWith("]")) { var idx = filename.LastIndexOf("]", StringComparison.InvariantCulture); filename = filename.Remove(idx + 1); } map.DiffName = BeatmapHelpers.GetDiffFromString(filename); List<string> lines = new List<string>(); //dirty & temporary file in use problem fix int tryCount = 0; do { try { tryCount++; using (var fileHandle = new StreamReader(fullFileDir, true)) { while (!fileHandle.EndOfStream) { lines.Add(fileHandle.ReadLine()); } } tryCount = 5; } catch (IOException e) { if (tryCount < 2) Thread.Sleep(1000); } } while (tryCount < 2); if (tryCount != 5) return map; using (var md5 = System.Security.Cryptography.MD5.Create()) { using (var stream = System.IO.File.OpenRead(fullFileDir)) { map.Md5 = BitConverter.ToString(md5.ComputeHash(stream)).Replace("-", "").ToLower(); } } if (string.IsNullOrEmpty(map.TitleUnicode)) { map.TitleUnicode = map.TitleRoman; } if (string.IsNullOrEmpty(map.ArtistUnicode)) { map.ArtistUnicode = map.ArtistRoman; } map.EditDate = DateTime.Now; map.LastPlayed = DateTime.MinValue; map.LastSync = DateTime.Now; ParseLines(lines, map); return map; }
private static void ParseMetadata(List<string> lines, Beatmap map) { foreach (var line in lines) { if (line.StartsWith("[") || string.IsNullOrWhiteSpace(line)) continue; var val = SplitParam(line); switch (val.Key) { case "Title": map.TitleRoman = val.Value; break; case "TitleUnicode": map.TitleUnicode = val.Value; break; case "Artist": map.ArtistRoman = val.Value; break; case "ArtistUnicode": map.ArtistUnicode = val.Value; break; case "Creator": map.Creator = val.Value; break; case "Version": //map. = val.Value; break; case "Source": map.Source = val.Value; break; case "Tags": map.Tags = val.Value; break; case "BeatmapID": map.MapId = Convert.ToInt32(val.Value, CultureInfo.InvariantCulture); break; case "BeatmapSetID": map.MapSetId = Convert.ToInt32(val.Value, CultureInfo.InvariantCulture); break; } } }
public MapSearchResult(Beatmap beatmap) { _beatmapsFound.Add(beatmap); }
private void ReadStarsData(Beatmap beatmap) { int num = _binaryReader.ReadInt32(); if (num < 0) { return; } for (int j = 0; j < num; j++) { int modEnum = (int)ConditionalRead(); Double stars = (Double) ConditionalRead(); #if GetStarsCombinations && DEBUG if (!AllPossibleModCombinations.Contains(modEnum)) AllPossibleModCombinations.Add(modEnum); #endif if (!beatmap.ModPpStars.ContainsKey(modEnum)) { beatmap.ModPpStars.Add(modEnum, Math.Round(stars, 2)); } else { beatmap.ModPpStars[modEnum] = Math.Round(stars, 2); } } }
private void ReadTimingPoints(Beatmap beatmap) { int amountOfTimingPoints = _binaryReader.ReadInt32(); double minBpm = double.MaxValue, maxBpm = double.MinValue; double bpmDelay, time; bool InheritsBPM; for (int i = 0; i < amountOfTimingPoints; i++) { bpmDelay = _binaryReader.ReadDouble(); time = _binaryReader.ReadDouble(); InheritsBPM = _binaryReader.ReadBoolean(); if (InheritsBPM) { if (60000 / bpmDelay < minBpm) minBpm = 60000 / bpmDelay; if (60000 / bpmDelay > maxBpm) maxBpm = 60000 / bpmDelay; } } beatmap.MaxBpm = maxBpm; beatmap.MinBpm = minBpm; }
private Beatmap GetBeatmapUsingReplacements(string table, bool useRaw, Dictionary<string, string> replacements) { var retBeatmap = new Beatmap(); bool foundData = false; if (useRaw) { string sql = string.Format("SELECT * FROM `{0}` WHERE (Raw LIKE @Raw)", table); if (replacements["@diff"] != string.Empty) { sql += " AND DiffName LIKE @diff"; } var reader = Query(sql, replacements); if (reader.Read()) { retBeatmap.Read(reader); foundData = true; } } else { var sql = string.Format("SELECT * FROM `{0}` WHERE (TitleRoman LIKE @title OR TitleUnicode LIKE @title) AND (ArtistRoman LIKE @artist OR ArtistUnicode LIKE @artist)", table); if (replacements["@diff"] != string.Empty) { sql += " AND DiffName LIKE @diff"; } var reader = Query(sql, replacements); if (reader.Read()) { retBeatmap.Read(reader); foundData = true; } } return foundData ? retBeatmap : null; }
private void FillBeatmapParameters(Beatmap beatmap) { _insertSql.Parameters.Add("@Raw", DbType.String).Value = $"{beatmap.TitleRoman} - {beatmap.ArtistRoman}"; _insertSql.Parameters.Add("@TitleRoman", DbType.String).Value = beatmap.TitleRoman; _insertSql.Parameters.Add("@ArtistRoman", DbType.String).Value = beatmap.ArtistRoman; _insertSql.Parameters.Add("@TitleUnicode", DbType.String).Value = beatmap.TitleUnicode; _insertSql.Parameters.Add("@ArtistUnicode", DbType.String).Value = beatmap.ArtistUnicode; _insertSql.Parameters.Add("@Creator", DbType.String).Value = beatmap.Creator; _insertSql.Parameters.Add("@DiffName", DbType.String).Value = beatmap.DiffName; _insertSql.Parameters.Add("@Mp3Name", DbType.String).Value = beatmap.Mp3Name; _insertSql.Parameters.Add("@Md5", DbType.String).Value = beatmap.Md5; _insertSql.Parameters.Add("@OsuFileName", DbType.String).Value = beatmap.OsuFileName; _insertSql.Parameters.Add("@MaxBpm", DbType.Double).Value = beatmap.MaxBpm; _insertSql.Parameters.Add("@MinBpm", DbType.Double).Value = beatmap.MinBpm; _insertSql.Parameters.Add("@Tags", DbType.String).Value = beatmap.Tags; _insertSql.Parameters.Add("@State", DbType.Int16).Value = beatmap.State; _insertSql.Parameters.Add("@Circles", DbType.Int32).Value = beatmap.Circles; _insertSql.Parameters.Add("@Sliders", DbType.Int32).Value = beatmap.Sliders; _insertSql.Parameters.Add("@Spinners", DbType.Int32).Value = beatmap.Spinners; _insertSql.Parameters.Add("@EditDate", DbType.DateTime).Value = beatmap.EditDate; _insertSql.Parameters.Add("@ApproachRate", DbType.Double).Value = beatmap.ApproachRate; _insertSql.Parameters.Add("@CircleSize", DbType.Double).Value = beatmap.CircleSize; _insertSql.Parameters.Add("@HpDrainRate", DbType.Double).Value = beatmap.HpDrainRate; _insertSql.Parameters.Add("@OverallDifficulty", DbType.Double).Value = beatmap.OverallDifficulty; _insertSql.Parameters.Add("@SliderVelocity", DbType.Double).Value = beatmap.SliderVelocity; _insertSql.Parameters.Add("@DrainingTime", DbType.Int32).Value = beatmap.DrainingTime; _insertSql.Parameters.Add("@TotalTime", DbType.Int32).Value = beatmap.TotalTime; _insertSql.Parameters.Add("@PreviewTime", DbType.Int32).Value = beatmap.PreviewTime; _insertSql.Parameters.Add("@MapId", DbType.Int32).Value = beatmap.MapId; _insertSql.Parameters.Add("@MapSetId", DbType.Int32).Value = beatmap.MapSetId; _insertSql.Parameters.Add("@ThreadId", DbType.Int32).Value = beatmap.ThreadId; _insertSql.Parameters.Add("@MapRating", DbType.Int32).Value = beatmap.MapRating; _insertSql.Parameters.Add("@Offset", DbType.Int32).Value = beatmap.Offset; _insertSql.Parameters.Add("@StackLeniency", DbType.Double).Value = beatmap.StackLeniency; _insertSql.Parameters.Add("@Mode", DbType.Int16).Value = beatmap.Mode; _insertSql.Parameters.Add("@Source", DbType.String).Value = beatmap.Source; _insertSql.Parameters.Add("@AudioOffset", DbType.Int32).Value = beatmap.AudioOffset; _insertSql.Parameters.Add("@LetterBox", DbType.String).Value = beatmap.LetterBox; _insertSql.Parameters.Add("@Played", DbType.Boolean).Value = beatmap.Played; _insertSql.Parameters.Add("@LastPlayed", DbType.DateTime).Value = beatmap.LastPlayed; _insertSql.Parameters.Add("@IsOsz2", DbType.Boolean).Value = beatmap.IsOsz2; _insertSql.Parameters.Add("@Dir", DbType.String).Value = beatmap.Dir; _insertSql.Parameters.Add("@LastSync", DbType.DateTime).Value = beatmap.LastSync; _insertSql.Parameters.Add("@DisableHitsounds", DbType.Boolean).Value = beatmap.DisableHitsounds; _insertSql.Parameters.Add("@DisableSkin", DbType.Boolean).Value = beatmap.DisableSkin; _insertSql.Parameters.Add("@DisableSb", DbType.Boolean).Value = beatmap.DisableSb; _insertSql.Parameters.Add("@BgDim", DbType.Int16).Value = beatmap.BgDim; _insertSql.Parameters.Add("@Somestuff", DbType.Int16).Value = beatmap.Somestuff; _insertSql.Parameters.Add("@VideoDir", DbType.String).Value = beatmap.VideoDir ?? " "; }
public void StoreTempBeatmap(Beatmap beatmap) { string sql = string.Format("INSERT OR REPLACE INTO Temp ({0}) VALUES ({1})", _tableStruct.GetFieldnames(), _tableStruct.GetFieldnames("@")); _insertSql = new SQLiteCommand(sql, _mDbConnection); FillBeatmapParameters(beatmap); _insertSql.ExecuteNonQuery(); }
/// <summary> /// Used for inserting temporary beatmap data to sql table. /// Data stored this way won't be preserved on the following application runs /// </summary> /// <param name="beatmap">beatmap to insert</param> public void StoreTempBeatmap(Beatmap beatmap) { lock (_sqlConnector) { _sqlConnector.StoreTempBeatmap(beatmap); } }
/// <summary> /// Used for inserting beatmap data to SQL table. /// When adding large amount of beatmaps it is advised to use MassStoring to speed up adding. /// When MassStoring is active, only new maps are queried to Sqlite /// </summary> /// <param name="beatmap">Beatmap to insert</param> public void StoreBeatmap(Beatmap beatmap) { lock (_sqlConnector) { if (_sqlConnector.MassInsertIsActive) { if (_md5List.Contains(beatmap.Md5)) return;//no need to save same data. } _sqlConnector.StoreBeatmap(beatmap); } }
private static void IgnoreSection(List<string> lines, Beatmap map) { //ignored }
private static void ParseDifficulty(List<string> lines, Beatmap map) { foreach (var line in lines) { if (line.StartsWith("[") || string.IsNullOrWhiteSpace(line)) continue; var val = SplitParam(line); switch (val.Key) { case "HPDrainRate": map.HpDrainRate = Convert.ToSingle(val.Value, CultureInfo.InvariantCulture); break; case "CircleSize": map.CircleSize = Convert.ToSingle(val.Value, CultureInfo.InvariantCulture); break; case "OverallDifficulty": map.OverallDifficulty = Convert.ToSingle(val.Value, CultureInfo.InvariantCulture); break; case "ApproachRate": map.ApproachRate = Convert.ToSingle(val.Value, CultureInfo.InvariantCulture); break; case "SliderMultiplier": map.SliderVelocity = Convert.ToDouble(val.Value, CultureInfo.InvariantCulture); break; case "SliderTickRate": //map. = val.Value; break; } } }
private static void ParseEditor(List<string> lines, Beatmap map) { //ignored }
private void ReadMapMetaData(Beatmap beatmap) { beatmap.MapId = Math.Abs(_binaryReader.ReadInt32()); if (beatmap.MapId == 0) MapsWithNoId++; beatmap.MapSetId = Math.Abs(_binaryReader.ReadInt32()); beatmap.ThreadId = Math.Abs(_binaryReader.ReadInt32()); beatmap.MapRating = _binaryReader.ReadInt32(); beatmap.Offset = _binaryReader.ReadInt16(); beatmap.StackLeniency = _binaryReader.ReadSingle(); beatmap.Mode = _binaryReader.ReadByte(); beatmap.Source = ReadString(); beatmap.Tags = ReadString(); beatmap.AudioOffset = _binaryReader.ReadInt16(); beatmap.LetterBox = ReadString(); beatmap.Played = !_binaryReader.ReadBoolean(); beatmap.LastPlayed = GetDate(); beatmap.IsOsz2 = _binaryReader.ReadBoolean(); beatmap.Dir = ReadString(); beatmap.LastSync = GetDate(); beatmap.DisableHitsounds = _binaryReader.ReadBoolean(); beatmap.DisableSkin = _binaryReader.ReadBoolean(); beatmap.DisableSb = _binaryReader.ReadBoolean(); _binaryReader.ReadBoolean(); beatmap.BgDim = _binaryReader.ReadInt16(); //bytes not analysed. if (FileDate <= 20160403) _binaryReader.BaseStream.Seek(4, SeekOrigin.Current); else _binaryReader.BaseStream.Seek(8, SeekOrigin.Current); }
private static void ParseGeneral(List<string> lines, Beatmap map) { foreach (var line in lines) { if (line.StartsWith("[") || string.IsNullOrWhiteSpace(line)) continue; var val = SplitParam(line); switch (val.Key) { case "AudioFilename": map.Mp3Name = val.Value; break; case "AudioLeadIn": map.AudioOffset = Convert.ToInt16(val.Value, CultureInfo.InvariantCulture); break; case "PreviewTime": map.PreviewTime = Convert.ToInt32(val.Value, CultureInfo.InvariantCulture); break; case "Countdown": //map. = value; break; case "SampleSet": //map. = value; break; case "StackLeniency": map.StackLeniency = Convert.ToSingle(val.Value, CultureInfo.InvariantCulture); break; case "Mode": map.Mode = Convert.ToByte(val.Value, CultureInfo.InvariantCulture); break; case "LetterboxInBreaks": //map. = value; break; case "WidescreenStoryboard": //map. = value; break; } } }
private void ReadMapInfo(Beatmap beatmap) { beatmap.State = _binaryReader.ReadByte(); beatmap.Circles = _binaryReader.ReadInt16(); beatmap.Sliders = _binaryReader.ReadInt16(); beatmap.Spinners = _binaryReader.ReadInt16(); beatmap.EditDate = GetDate(); beatmap.ApproachRate = _binaryReader.ReadSingle(); beatmap.CircleSize = _binaryReader.ReadSingle(); beatmap.HpDrainRate = _binaryReader.ReadSingle(); beatmap.OverallDifficulty = _binaryReader.ReadSingle(); beatmap.SliderVelocity = _binaryReader.ReadDouble(); for (int j = 0; j < 4; j++) { ReadStarsData(beatmap); } beatmap.DrainingTime = _binaryReader.ReadInt32(); beatmap.TotalTime = _binaryReader.ReadInt32(); beatmap.PreviewTime = _binaryReader.ReadInt32(); }
private static void ParseHitObjects(List<string> lines, Beatmap map) { short circles = 0; short spinners = 0; short sliders = 0; foreach (var line in lines) { if (line.StartsWith("[") || string.IsNullOrWhiteSpace(line)) continue; var hitobject = line; if (!string.IsNullOrWhiteSpace(hitobject)) { var hitObjectType = Convert.ToInt32(hitobject.Split(',')[3]); if ((hitObjectType & 1) != 0) { circles++; } else if ((hitObjectType & 2) != 0) { sliders++; } else if ((hitObjectType & 8) != 0) { spinners++; } } } map.Circles = circles; map.Spinners = spinners; map.Sliders = sliders; }
private void ReadMapHeader(Beatmap beatmap) { beatmap.ArtistRoman = ReadString().Trim(); beatmap.ArtistUnicode = ReadString().Trim(); beatmap.TitleRoman = ReadString().Trim(); beatmap.TitleUnicode = ReadString().Trim(); beatmap.Creator = ReadString().Trim(); beatmap.DiffName = ReadString().Trim(); beatmap.Mp3Name = ReadString().Trim(); beatmap.Md5 = ReadString().Trim(); beatmap.OsuFileName = ReadString().Trim(); }
public MapSearchResult(Beatmap beatmap) { _beatmapsFound.Add(beatmap); }