1
0
mirror of https://github.com/ppy/osu.git synced 2024-12-25 02:42:54 +08:00
osu-lazer/osu.Game/Beatmaps/BeatmapMetadata.cs

99 lines
3.0 KiB
C#
Raw Normal View History

2018-01-05 19:21:19 +08:00
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>.
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using System;
2017-10-19 13:05:11 +08:00
using System.Collections.Generic;
2017-10-05 03:52:12 +08:00
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using Newtonsoft.Json;
using osu.Game.Users;
2017-07-26 12:22:46 +08:00
namespace osu.Game.Beatmaps
{
[Serializable]
public class BeatmapMetadata : IEquatable<BeatmapMetadata>
{
2017-10-06 05:23:26 +08:00
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[JsonIgnore]
2017-10-14 13:28:25 +08:00
public int ID { get; set; }
2016-12-21 14:47:56 +08:00
private int? onlineBeatmapSetID;
2017-10-09 05:30:52 +08:00
[NotMapped]
[JsonProperty(@"id")]
public int? OnlineBeatmapSetID
{
get { return onlineBeatmapSetID; }
set { onlineBeatmapSetID = value > 0 ? value : null; }
}
2016-12-21 14:47:56 +08:00
public string Title { get; set; }
public string TitleUnicode { get; set; }
public string Artist { get; set; }
public string ArtistUnicode { get; set; }
[JsonIgnore]
2017-10-19 13:05:11 +08:00
public List<BeatmapInfo> Beatmaps { get; set; }
[JsonIgnore]
2017-10-19 13:05:11 +08:00
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
{
2017-10-14 11:27:32 +08:00
get { return Author?.Username; }
set { Author = new User { Username = value }; }
}
/// <summary>
/// The author of the beatmaps in this set.
/// </summary>
[JsonIgnore]
public User Author;
public string Source { get; set; }
2017-06-07 22:30:52 +08:00
[JsonProperty(@"tags")]
public string Tags { get; set; }
public int PreviewTime { get; set; }
public string AudioFile { get; set; }
public string BackgroundFile { get; set; }
public override string ToString() => $"{Artist} - {Title} ({Author})";
[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 onlineBeatmapSetID == other.onlineBeatmapSetID
&& Title == other.Title
&& 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;
}
}
}