private void FillBeatmapParameters(IBeatmap 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 ?? DateTime.MinValue; _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 = 0; //TODO: store per-gamemode pass ranks _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 = (byte)beatmap.PlayMode; _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("@StarsOsu", DbType.Binary).Value = beatmap.SerializeStars(); _insertSql.Parameters.Add("@BeatmapChecksum", DbType.String).Value = beatmap.GetChecksum(); _insertSql.Parameters.Add("@MainBpm", DbType.Double).Value = beatmap.MainBpm; }
/// <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(IBeatmap beatmap) { lock (_sqlConnector) { if (_sqlConnector.MassInsertIsActive) { var checksum = beatmap.GetChecksum(); if (_beatmapChecksums.ContainsKey(checksum)) { _beatmapChecksums[checksum].Found = true; return; } else { var existingEntry = _beatmapChecksums.FirstOrDefault(x => x.Value.Md5 == beatmap.Md5); if (!existingEntry.Equals(default(KeyValuePair <string, MapIdMd5Pair>))) { _beatmapChecksums.Remove(existingEntry.Key); } } } _sqlConnector.StoreBeatmap(beatmap); } }