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(); }
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); } }
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); }
private bool isWordMatch(BeatmapExtension b, string word) { return(isWordMatch((Beatmap)b, word) || (b.UserComment != null && b.UserComment.IndexOf(word, StringComparison.CurrentCultureIgnoreCase) >= 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(); }