private void LoadData(BeatmapExtension beatmap)
        {//TODO: OPTIMIZATION: do not load same image twice(or more) in a row(Cache last loaded image location and compare?)
            string           imgPath = beatmap.GetImageLocation();
            BackgroundWorker bw      = new BackgroundWorker();
            var currentId            = Interlocked.Increment(ref changeId);

            bw.DoWork += (s, e) =>
            {
                //resetEvent.WaitOne(100);
                if (beatmap.Equals(_currentBeatmap))
                {
                    Image  img = null;
                    string url = null;
                    if (imgPath != "")
                    {
                        img = Image.FromFile(imgPath);
                    }
                    else if (beatmap.MapSetId > 0)
                    {
                        url = "https://assets.ppy.sh/beatmaps/" + beatmap.MapSetId + "/covers/card.jpg";
                    }
                    if (currentId != Interlocked.Read(ref changeId))
                    {
                        img?.Dispose();
                        return;
                    }
                    SetViewData(img, beatmap, url);
                }
            };
            bw.RunWorkerAsync();
        }
示例#2
0
        private Beatmap GetBeatmapObj(LocalOsuFile osuFile, FileInfo fileInfo)
        {
            var beatmap = BeatmapExtension.ParseFromOSharp(osuFile);

            beatmap.BeatmapFileName  = fileInfo.Name;
            beatmap.LastModifiedTime = fileInfo.LastWriteTime;
            beatmap.FolderName       = fileInfo.Directory?.Name;
            beatmap.InOwnDb          = true;
            return(beatmap);
        }
 private void _model_BeatmapChanged(object sender, System.EventArgs e)
 {
     lock (_lockingObject)
     {
         _currentBeatmap = (BeatmapExtension)_model.CurrentBeatmap;
         if (_currentBeatmap == null)
         {
             //SetViewData(null, null);
             return;
         }
         LoadData(_currentBeatmap);
     }
 }
示例#4
0
        private BeatmapExtension GetBeatmapResult(string url)
        {
            try
            {
                var jsonResponse = _client.DownloadString(url);
                if (jsonResponse == "Please provide a valid API key.")
                {
                    throw new Exception("Invalid osu!Api key");
                }
                jsonResponse = jsonResponse.Trim(']', '[');
                if (jsonResponse.Trim(' ') == string.Empty)
                {
                    return(null);
                }
                var json    = JObject.Parse(jsonResponse);
                var beatmap = new BeatmapExtension();
                //var a = json.Count;
                beatmap.MapSetId          = int.Parse(json["beatmapset_id"].ToString());
                beatmap.MapId             = int.Parse(json["beatmap_id"].ToString());
                beatmap.DiffName          = json["version"].ToString();
                beatmap.Md5               = json["file_md5"].ToString();
                beatmap.ArtistRoman       = json["artist"].ToString();
                beatmap.TitleRoman        = json["title"].ToString();
                beatmap.Creator           = json["creator"].ToString();
                beatmap.CircleSize        = Convert.ToSingle(json["diff_size"].ToString(), CultureInfo.InvariantCulture);
                beatmap.OverallDifficulty = Convert.ToSingle(json["diff_overall"].ToString(), CultureInfo.InvariantCulture);
                beatmap.ApproachRate      = Convert.ToSingle(json["diff_approach"].ToString(), CultureInfo.InvariantCulture);
                beatmap.HpDrainRate       = Convert.ToSingle(json["diff_drain"].ToString(), CultureInfo.InvariantCulture);
                beatmap.PlayMode          = (PlayMode)Convert.ToUInt32(json["mode"].ToString(), CultureInfo.InvariantCulture);
                //beatmap.bpm
                beatmap.Source = json["source"].ToString();
                beatmap.Tags   = json["tags"].ToString();
                beatmap.ModPpStars.Add(beatmap.PlayMode, new Dictionary <int, double>()
                {
                    { 0, Math.Round(double.Parse(json["difficultyrating"].ToString(), CultureInfo.InvariantCulture), 2) }
                });
                beatmap.PlayMode = (PlayMode)Int32.Parse(json["mode"].ToString());
                //beatmap.OverallDifficulty = float.Parse(json["difficultyrating"].ToString(), );
                beatmap.DataDownloaded = true;

                return(beatmap);
            }
            catch (WebException)
            {
                return(null);
            }
        }
        public Collections ReadOsdb(string fullFileDir, MapCacher mapCacher)
        {
            int      fileVersion = -1;
            DateTime fileDate    = DateTime.Now;
            var      collections = new Collections();

            OpenFile(fullFileDir, false);
            _binReader.BaseStream.Seek(0, SeekOrigin.Begin);
            string versionString = _binReader.ReadString();

            //check header
            if (_versions.ContainsKey(versionString))
            {
                fileVersion = _versions[versionString];
            }
            if (fileVersion == -1)
            {
                Error("Unrecognized osdb file version");
            }
            else
            {
                _logger?.Log("Starting file load");
                fileDate = DateTime.FromOADate(_binReader.ReadDouble());
                _logger?.Log(">Date: " + fileDate);
                string lastEditor = _binReader.ReadString();
                _logger?.Log(">LastEditor: " + lastEditor);
                int numberOfCollections = _binReader.ReadInt32();
                _logger?.Log(">Collections: " + numberOfCollections);
                for (int i = 0; i < numberOfCollections; i++)
                {
                    var name             = _binReader.ReadString();
                    var numberOfBeatmaps = _binReader.ReadInt32();
                    _logger?.Log(">Number of maps in collection {0}: {1} named:{2}", i.ToString(), numberOfBeatmaps.ToString(), name);
                    var collection = new Collection(mapCacher)
                    {
                        Name = name, LastEditorUsername = lastEditor
                    };
                    for (int j = 0; j < numberOfBeatmaps; j++)
                    {
                        var map = new BeatmapExtension();
                        map.MapId = _binReader.ReadInt32();
                        if (fileVersion >= 2)
                        {
                            map.MapSetId = _binReader.ReadInt32();
                        }
                        map.ArtistRoman = _binReader.ReadString();
                        map.TitleRoman  = _binReader.ReadString();
                        map.DiffName    = _binReader.ReadString();
                        map.Md5         = _binReader.ReadString();
                        if (fileVersion >= 4)
                        {
                            map.UserComment = _binReader.ReadString();
                        }
                        if (fileVersion >= 5)
                        {
                            map.PlayMode = (PlayMode)_binReader.ReadByte();
                        }
                        if (fileVersion >= 6)
                        {
                            map.ModPpStars.Add(map.PlayMode, new Dictionary <int, double>()
                            {
                                { 0, _binReader.ReadDouble() }
                            });
                        }
                        collection.AddBeatmap(map);
                    }

                    if (fileVersion >= 3)
                    {
                        var numberOfMapHashes = _binReader.ReadInt32();
                        for (int j = 0; j < numberOfMapHashes; j++)
                        {
                            string hash = _binReader.ReadString();
                            collection.AddBeatmapByHash(hash);
                        }
                    }


                    collections.Add(collection);
                }
            }
            if (_binReader.ReadString() != "By Piotrekol")
            {
                Error("File footer is invalid, with could mean that this file is corrupted. CONTINUE AT YOUR OWN RISK");
            }


            CloseFile(false);


            collections = IssuseVersionRelevantProcedures(fileVersion, fileDate, collections);

            return(collections);
        }
示例#6
0
 private bool isWordMatch(BeatmapExtension b, string word)
 {
     return(isWordMatch((Beatmap)b, word) ||
            (b.UserComment != null &&
             b.UserComment.IndexOf(word, StringComparison.CurrentCultureIgnoreCase) >= 0));
 }
示例#7
0
        public IEnumerable <Collection> ReadOsdb(string fullFileDir, MapCacher mapCacher)
        {
            var fileVersion = -1;
            var fileDate    = DateTime.Now;
            var collections = new Collections();

            using (var fileStream = new FileStream(fullFileDir, FileMode.Open, FileAccess.Read))
            {
                _memStream = new MemoryStream();
                fileStream.CopyTo(_memStream);
                _binReader = new BinaryReader(_memStream);
            }

            _binReader.BaseStream.Seek(0, SeekOrigin.Begin);
            var versionString = _binReader.ReadString();

            //check header
            if (_versions.ContainsKey(versionString))
            {
                fileVersion = _versions[versionString];
            }

            if (fileVersion == -1)
            {
                throw new CorruptedFileException($"Unrecognized osdb file version (got: {versionString})");
            }
            else
            {
                if (fileVersion >= 7)
                {
                    using (var archiveReader = GZipArchive.Open(_memStream))
                    {
                        var memStream = new MemoryStream();
                        archiveReader.Entries.First().WriteTo(memStream);
                        memStream.Position = 0;
                        _binReader         = new BinaryReader(memStream);
                        _binReader.ReadString(); //version string
                    }
                }

                _logger?.Log("Starting file load");
                fileDate = DateTime.FromOADate(_binReader.ReadDouble());
                _logger?.Log(">Date: " + fileDate);
                var lastEditor = _binReader.ReadString();
                _logger?.Log(">LastEditor: " + lastEditor);
                var numberOfCollections = _binReader.ReadInt32();
                _logger?.Log(">Collections: " + numberOfCollections);
                for (var i = 0; i < numberOfCollections; i++)
                {
                    var name     = _binReader.ReadString();
                    var onlineId = -1;
                    if (fileVersion >= 7)
                    {
                        onlineId = _binReader.ReadInt32();
                    }

                    var numberOfBeatmaps = _binReader.ReadInt32();
                    _logger?.Log(">Number of maps in collection {0}: {1} named:{2}", i.ToString(),
                                 numberOfBeatmaps.ToString(), name);
                    var collection = new Collection(mapCacher)
                    {
                        Name = name, LastEditorUsername = lastEditor, OnlineId = onlineId
                    };
                    for (var j = 0; j < numberOfBeatmaps; j++)
                    {
                        var map = new BeatmapExtension();
                        map.MapId = _binReader.ReadInt32();
                        if (fileVersion >= 2)
                        {
                            map.MapSetId = _binReader.ReadInt32();
                        }

                        if (!isMinimalCollection(versionString))
                        {
                            map.ArtistRoman = _binReader.ReadString();
                            map.TitleRoman  = _binReader.ReadString();
                            map.DiffName    = _binReader.ReadString();
                        }

                        map.Md5 = _binReader.ReadString();
                        if (fileVersion >= 4)
                        {
                            map.UserComment = _binReader.ReadString();
                        }

                        if (fileVersion >= 8 || (fileVersion >= 5 && IsFullCollection(versionString)))
                        {
                            map.PlayMode = (PlayMode)_binReader.ReadByte();
                        }

                        if (fileVersion >= 8 || (fileVersion >= 6 && IsFullCollection(versionString)))
                        {
                            map.ModPpStars.Add(map.PlayMode, new StarRating {
                                { 0, _binReader.ReadDouble() }
                            });
                        }

                        collection.AddBeatmap(map);
                    }

                    if (fileVersion >= 3)
                    {
                        var numberOfMapHashes = _binReader.ReadInt32();
                        for (var j = 0; j < numberOfMapHashes; j++)
                        {
                            var hash = _binReader.ReadString();
                            collection.AddBeatmapByHash(hash);
                        }
                    }

                    yield return(collection);
                }
            }

            if (_binReader.ReadString() != "By Piotrekol")
            {
                _binReader.Close();
                throw new CorruptedFileException("File footer is invalid, this collection might be corrupted.");
            }

            _binReader.Close();
        }