public CollectionEditor(ICollectionEditor collectionEditor, ICollectionNameValidator collectionNameValidator,
                         ICollectionAddRenameForm collectionAddRenameForm, MapCacher mapCacher)
 {
     _collectionEditor        = collectionEditor;
     _collectionNameValidator = collectionNameValidator;
     _collectionAddRenameForm = collectionAddRenameForm;
     _mapCacher = mapCacher;
 }
예제 #2
0
        public UserTopGenerator(string osuApiKey, MapCacher mapCacher)
        {
            if (mapCacher == null)
            {
                throw new ArgumentNullException(nameof(mapCacher));
            }
            if (string.IsNullOrEmpty(osuApiKey))
            {
                throw new ArgumentException("osuApiKey is required.");
            }

            _osuApi            = new OsuApi(osuApiKey);
            _mapCacher         = mapCacher;
            _collectionManager = new CollectionsManager(_mapCacher.Beatmaps);
        }
예제 #3
0
        public void SetLoadedMaps(MapCacher instance)
        {
            if (instance == null)
            {
                throw new BeatmapCacherNotInitalizedException();
            }
            if (LoadedMaps != null)
            {
                LoadedMaps.BeatmapsModified -= LoadedMaps_BeatmapsModified;
            }

            LoadedMaps = instance;
            LoadedMaps.BeatmapsModified += LoadedMaps_BeatmapsModified;
            ReprocessBeatmaps();
        }
예제 #4
0
        public Collections LoadCollections(string fullFileDir, MapCacher mapCacher)
        {
            openFile(fullFileDir);


            LastfileDate = readInt32();
            int numOfCollections = readInt32();

            logger?.Log("Reading " + numOfCollections + " Collections");
            Collections loadedCollections = new Collections();

            try
            {
                for (int i = 1; i <= numOfCollections; i++)
                {
                    var collectionName = readString();
                    var numberOfDiffs  = readInt32();

                    var collection = new Collection(mapCacher)
                    {
                        Name = collectionName
                    };
                    var j = 0;
                    for (j = 0; j < numberOfDiffs; j++)//j=1 <=
                    {
                        var md5 = readString();
                        collection.AddBeatmapByHash(md5);
                    }
                    loadedCollections.Add(collection);
                    logger?.Log(">Number of maps in collection {0}: {1} named:{2}", i.ToString(), numberOfDiffs.ToString(), collection.Name);
                }
            }
            catch (System.IO.IOException) { throw new System.IO.IOException("This isn't valid osu! collection!"); }
            closeFile();
            return(loadedCollections);
        }
 public CollectionLoader(MapCacher mapCacher)
 {
     _mapCacher = mapCacher;
 }
        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);
        }
 public WebCollection(int onlineId, MapCacher instance, bool loaded = false) : base(instance)
 {
     OnlineId = onlineId;
     Loaded   = loaded;
 }
예제 #8
0
 public Collection(MapCacher instance)
 {
     SetLoadedMaps(instance);
 }
 public CollectionsApiGenerator(MapCacher loadedBeatmaps)
 {
     _loadedBeatmaps = loadedBeatmaps;
 }
예제 #10
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();
        }