Example #1
0
 public static Collection AddSelectedBeatmapsToCollection(this IBeatmapListingModel model, Collection collection)
 {
     foreach (var beatmap in model.SelectedBeatmaps)
     {
         collection.AddBeatmap(beatmap);
     }
     return(collection);
 }
Example #2
0
        static Collections GenBulkCollection(Beatmaps maps)
        {
            var collections = new Collections();
            var collection  = new Collection(OsuFileIo.LoadedMaps)
            {
                Name = "Bulk"
            };

            foreach (var map in maps)
            {
                collection.AddBeatmap(map);
            }
            collections.Add(collection);
            return(collections);
        }
        public static List <Collection> GenerateCollectionsByAccuracy(List <Score> scores, List <int> seperators, string prefix = "")
        {
            List <Score> scoresC = new List <Score>(scores);

            seperators.Sort();
            List <Collection> collections = new List <Collection>();

            int min = 0;
            int max = 0;

            foreach (int seperator in seperators)
            {
                min = max;
                max = seperator;
                Collection collection = new Collection(prefix + min + " - <" + max);
                Console.WriteLine(prefix + min + " - <" + max);
                Console.WriteLine("seperator " + seperator);
                Console.WriteLine("min " + min);
                Console.WriteLine("max " + max);

                foreach (Score score in scores)
                {
                    if (score.GetAccuracy() >= min && score.GetAccuracy() < max)
                    {
                        collection.AddBeatmap(score.BeatmapMD5);
                        scoresC.Remove(score);
                    }
                }
                collections.Add(collection);
            }

            if (max <= 100)
            {
                Collection collection = new Collection(prefix + max + " - 100");
                if (max == 100)
                {
                    collection.Name = prefix + "100";
                }
                foreach (Score score in scoresC)
                {
                    collection.AddBeatmap(score.BeatmapMD5);
                }
            }

            return(collections);
        }
Example #4
0
        private Collections GetPlayerCollections(string username, string collectionNameSavePattern,
                                                 ScoreSaveConditions configuration)
        {
            _currentUserMissingMapCount = 0;
            var validScores = GetPlayerScores(username, configuration);
            Dictionary <string, Beatmaps> collectionsDict = new Dictionary <string, Beatmaps>();
            var collections = new Collections();

            foreach (var s in validScores)
            {
                if (configuration.IsEgibleForSaving(s))
                {
                    string collectionName = CreateCollectionName(s, username, collectionNameSavePattern);
                    if (collectionsDict.ContainsKey(collectionName))
                    {
                        collectionsDict[collectionName].Add(GetBeatmapFromId(s.BeatmapId));
                    }
                    else
                    {
                        collectionsDict.Add(collectionName, new Beatmaps()
                        {
                            GetBeatmapFromId(s.BeatmapId)
                        });
                    }
                }
            }
            foreach (var c in collectionsDict)
            {
                var collection = new Collection(_mapCacher)
                {
                    Name = c.Key
                };
                foreach (var beatmap in c.Value)
                {
                    collection.AddBeatmap(beatmap);
                }
                collections.Add(collection);
            }
            return(collections);
        }
        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);
        }
Example #6
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();
        }