// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using System; using System.Collections.Generic; using JetBrains.Annotations; using osu.Game.Beatmaps; using osu.Game.Database; using Realms; namespace osu.Game.Collections { /// <summary> /// A collection of beatmaps grouped by a name. /// </summary> public class BeatmapCollection : RealmObject, IHasGuidPrimaryKey { [PrimaryKey] public Guid ID { get; set; } /// <summary> /// The collection's name. /// </summary> public string Name { get; set; } = string.Empty; /// <summary> /// The <see cref="BeatmapInfo.MD5Hash"/>es of beatmaps contained by the collection. /// </summary> /// <remarks> /// We store as hashes rather than references to <see cref="BeatmapInfo"/>s to allow collections to maintain /// references to beatmaps even if they are removed. This helps with cases like importing collections before /// importing the beatmaps they contain, or when sharing collections between users. /// /// This can probably change in the future as we build the system up. /// </remarks> public IList<string> BeatmapMD5Hashes { get; } = null!; /// <summary> /// The date when this collection was last modified. /// </summary> public DateTimeOffset LastModified { get; set; } public BeatmapCollection(string? name = null, IList<string>? beatmapMD5Hashes = null) { ID = Guid.NewGuid(); Name = name ?? string.Empty; BeatmapMD5Hashes = beatmapMD5Hashes ?? new List<string>(); LastModified = DateTimeOffset.UtcNow; } [UsedImplicitly] private BeatmapCollection() { } } }