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;
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
 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;
 }
Exemplo n.º 4
0
        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);
            }
        }
Exemplo n.º 5
0
        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;
        }
Exemplo n.º 6
0
        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;
                }
            }
        }
Exemplo n.º 7
0
 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;
 }
Exemplo n.º 10
0
        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;
        }
Exemplo n.º 11
0
 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 ?? " ";
 }
Exemplo n.º 12
0
 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();
 }
Exemplo n.º 13
0
 /// <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);
     }
 }
Exemplo n.º 14
0
 /// <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);
     }
 }
Exemplo n.º 15
0
 private static void IgnoreSection(List<string> lines, Beatmap map)
 {
     //ignored
 }
Exemplo n.º 16
0
        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;
                }
            }
        }
Exemplo n.º 17
0
 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);
        }
Exemplo n.º 19
0
        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();
        }
Exemplo n.º 21
0
        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();
 }
Exemplo n.º 23
0
 public MapSearchResult(Beatmap beatmap)
 {
     _beatmapsFound.Add(beatmap);
 }