osu/osu.Game/Beatmaps/BeatmapMetadata.cs

104 lines
3.0 KiB
C#
Raw Normal View History

// 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.
2018-04-13 09:19:50 +00:00
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using Newtonsoft.Json;
using osu.Framework.Testing;
using osu.Game.Database;
2018-04-13 09:19:50 +00:00
using osu.Game.Users;
namespace osu.Game.Beatmaps
{
[ExcludeFromDynamicCompile]
2018-04-13 09:19:50 +00:00
[Serializable]
public class BeatmapMetadata : IEquatable<BeatmapMetadata>, IHasPrimaryKey
2018-04-13 09:19:50 +00:00
{
public int ID { get; set; }
public string Title { get; set; }
2021-04-03 04:44:51 +00:00
2021-04-03 04:43:17 +00:00
[JsonProperty("title_unicode")]
2018-04-13 09:19:50 +00:00
public string TitleUnicode { get; set; }
2021-04-03 04:44:51 +00:00
2018-04-13 09:19:50 +00:00
public string Artist { get; set; }
2021-04-03 04:44:51 +00:00
2021-04-03 04:43:17 +00:00
[JsonProperty("artist_unicode")]
2018-04-13 09:19:50 +00:00
public string ArtistUnicode { get; set; }
[JsonIgnore]
public List<BeatmapInfo> Beatmaps { get; set; }
[JsonIgnore]
public List<BeatmapSetInfo> BeatmapSets { get; set; }
/// <summary>
/// Helper property to deserialize a username to <see cref="User"/>.
/// </summary>
[JsonProperty(@"creator")]
[Column("Author")]
public string AuthorString
{
get => Author?.Username;
set => Author = new User { Username = value };
2018-04-13 09:19:50 +00:00
}
/// <summary>
/// The author of the beatmaps in this set.
/// </summary>
[JsonIgnore]
public User Author;
public string Source { get; set; }
[JsonProperty(@"tags")]
public string Tags { get; set; }
2019-02-28 04:31:40 +00:00
/// <summary>
/// The time in milliseconds to begin playing the track for preview purposes.
/// If -1, the track should begin playing at 40% of its length.
/// </summary>
2018-04-13 09:19:50 +00:00
public int PreviewTime { get; set; }
2018-04-13 09:19:50 +00:00
public string AudioFile { get; set; }
public string BackgroundFile { get; set; }
public override string ToString()
{
string author = Author == null ? string.Empty : $"({Author})";
return $"{Artist} - {Title} {author}".Trim();
}
2018-04-13 09:19:50 +00:00
[JsonIgnore]
public string[] SearchableTerms => new[]
{
Author?.Username,
Artist,
ArtistUnicode,
Title,
TitleUnicode,
Source,
Tags
}.Where(s => !string.IsNullOrEmpty(s)).ToArray();
public bool Equals(BeatmapMetadata other)
{
if (other == null)
return false;
return Title == other.Title
2019-02-28 04:31:40 +00:00
&& TitleUnicode == other.TitleUnicode
&& Artist == other.Artist
&& ArtistUnicode == other.ArtistUnicode
&& AuthorString == other.AuthorString
&& Source == other.Source
&& Tags == other.Tags
&& PreviewTime == other.PreviewTime
&& AudioFile == other.AudioFile
&& BackgroundFile == other.BackgroundFile;
2018-04-13 09:19:50 +00:00
}
}
}