// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using System; using JetBrains.Annotations; using Newtonsoft.Json; using osu.Game.Models; using osu.Game.Users; using osu.Game.Utils; using Realms; namespace osu.Game.Beatmaps { /// /// A realm model containing metadata for a beatmap. /// /// /// This is currently stored against each beatmap difficulty, even when it is duplicated. /// It is also provided via for convenience and historical purposes. /// A future effort could see this converted to an or potentially de-duped /// and shared across multiple difficulties in the same set, if required. /// /// Note that difficulty name is not stored in this metadata but in . /// [Serializable] [MapTo("BeatmapMetadata")] public class BeatmapMetadata : RealmObject, IBeatmapMetadataInfo, IDeepCloneable { public string Title { get; set; } = string.Empty; [JsonProperty("title_unicode")] public string TitleUnicode { get; set; } = string.Empty; public string Artist { get; set; } = string.Empty; [JsonProperty("artist_unicode")] public string ArtistUnicode { get; set; } = string.Empty; public RealmUser Author { get; set; } = null!; public string Source { get; set; } = string.Empty; [JsonProperty(@"tags")] public string Tags { get; set; } = string.Empty; /// /// The time in milliseconds to begin playing the track for preview purposes. /// If -1, the track should begin playing at 40% of its length. /// public int PreviewTime { get; set; } = -1; public string AudioFile { get; set; } = string.Empty; public string BackgroundFile { get; set; } = string.Empty; public BeatmapMetadata(RealmUser? user = null) { Author = user ?? new RealmUser(); } [UsedImplicitly] // Realm private BeatmapMetadata() { } IUser IBeatmapMetadataInfo.Author => Author; public override string ToString() => this.GetDisplayTitle(); public BeatmapMetadata DeepClone() => new BeatmapMetadata(Author.DeepClone()) { Title = Title, TitleUnicode = TitleUnicode, Artist = Artist, ArtistUnicode = ArtistUnicode, Source = Source, Tags = Tags, PreviewTime = PreviewTime, AudioFile = AudioFile, BackgroundFile = BackgroundFile }; } }