From 7488ccd5fe4830469b9e8e1bc393ea1a0e0c7348 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 25 Nov 2021 16:35:42 +0900 Subject: [PATCH] Update all models to implement `IHasNamedFiles` --- osu.Game/Beatmaps/BeatmapSetInfo.cs | 2 +- osu.Game/Beatmaps/IBeatmapSetInfo.cs | 7 +------ osu.Game/Database/IHasNamedFiles.cs | 15 +++++++++++++++ osu.Game/Models/RealmBeatmapSet.cs | 3 +-- .../API/Requests/Responses/APIBeatmapSet.cs | 2 +- .../Online/API/Requests/Responses/APIScoreInfo.cs | 2 ++ osu.Game/Scoring/IScoreInfo.cs | 2 +- osu.Game/Scoring/ScoreFileInfo.cs | 4 +++- osu.Game/Scoring/ScoreInfo.cs | 2 ++ osu.Game/Skinning/SkinFileInfo.cs | 4 +++- osu.Game/Skinning/SkinInfo.cs | 4 +++- 11 files changed, 33 insertions(+), 14 deletions(-) create mode 100644 osu.Game/Database/IHasNamedFiles.cs diff --git a/osu.Game/Beatmaps/BeatmapSetInfo.cs b/osu.Game/Beatmaps/BeatmapSetInfo.cs index a4d60d7ea0..ac7067edda 100644 --- a/osu.Game/Beatmaps/BeatmapSetInfo.cs +++ b/osu.Game/Beatmaps/BeatmapSetInfo.cs @@ -95,7 +95,7 @@ namespace osu.Game.Beatmaps IBeatmapMetadataInfo IBeatmapSetInfo.Metadata => Metadata ?? Beatmaps.FirstOrDefault()?.Metadata ?? new BeatmapMetadata(); IEnumerable IBeatmapSetInfo.Beatmaps => Beatmaps; - IEnumerable IBeatmapSetInfo.Files => Files; + IEnumerable IHasNamedFiles.Files => Files; #endregion } diff --git a/osu.Game/Beatmaps/IBeatmapSetInfo.cs b/osu.Game/Beatmaps/IBeatmapSetInfo.cs index aa114c8472..9755120457 100644 --- a/osu.Game/Beatmaps/IBeatmapSetInfo.cs +++ b/osu.Game/Beatmaps/IBeatmapSetInfo.cs @@ -12,7 +12,7 @@ namespace osu.Game.Beatmaps /// /// A representation of a collection of beatmap difficulties, generally packaged as an ".osz" archive. /// - public interface IBeatmapSetInfo : IHasOnlineID, IEquatable + public interface IBeatmapSetInfo : IHasOnlineID, IEquatable, IHasNamedFiles { /// /// The date when this beatmap was imported. @@ -29,11 +29,6 @@ namespace osu.Game.Beatmaps /// IEnumerable Beatmaps { get; } - /// - /// All files used by this set. - /// - IEnumerable Files { get; } - /// /// The maximum star difficulty of all beatmaps in this set. /// diff --git a/osu.Game/Database/IHasNamedFiles.cs b/osu.Game/Database/IHasNamedFiles.cs new file mode 100644 index 0000000000..08906aaa08 --- /dev/null +++ b/osu.Game/Database/IHasNamedFiles.cs @@ -0,0 +1,15 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using System.Collections.Generic; + +namespace osu.Game.Database +{ + public interface IHasNamedFiles + { + /// + /// All files used by this model. + /// + IEnumerable Files { get; } + } +} diff --git a/osu.Game/Models/RealmBeatmapSet.cs b/osu.Game/Models/RealmBeatmapSet.cs index fee59633f1..3566ff5321 100644 --- a/osu.Game/Models/RealmBeatmapSet.cs +++ b/osu.Game/Models/RealmBeatmapSet.cs @@ -76,7 +76,6 @@ namespace osu.Game.Models public bool Equals(IBeatmapSetInfo? other) => other is RealmBeatmapSet b && Equals(b); IEnumerable IBeatmapSetInfo.Beatmaps => Beatmaps; - - IEnumerable IBeatmapSetInfo.Files => Files; + IEnumerable IHasNamedFiles.Files => Files; } } diff --git a/osu.Game/Online/API/Requests/Responses/APIBeatmapSet.cs b/osu.Game/Online/API/Requests/Responses/APIBeatmapSet.cs index 9005fa8eb7..57c45faed3 100644 --- a/osu.Game/Online/API/Requests/Responses/APIBeatmapSet.cs +++ b/osu.Game/Online/API/Requests/Responses/APIBeatmapSet.cs @@ -136,7 +136,7 @@ namespace osu.Game.Online.API.Requests.Responses IBeatmapMetadataInfo IBeatmapSetInfo.Metadata => metadata; DateTimeOffset IBeatmapSetInfo.DateAdded => throw new NotImplementedException(); - IEnumerable IBeatmapSetInfo.Files => throw new NotImplementedException(); + IEnumerable IHasNamedFiles.Files => throw new NotImplementedException(); double IBeatmapSetInfo.MaxStarDifficulty => throw new NotImplementedException(); double IBeatmapSetInfo.MaxLength => throw new NotImplementedException(); double IBeatmapSetInfo.MaxBPM => BPM; diff --git a/osu.Game/Online/API/Requests/Responses/APIScoreInfo.cs b/osu.Game/Online/API/Requests/Responses/APIScoreInfo.cs index 0a2d6ca7b0..467d5a9f23 100644 --- a/osu.Game/Online/API/Requests/Responses/APIScoreInfo.cs +++ b/osu.Game/Online/API/Requests/Responses/APIScoreInfo.cs @@ -8,6 +8,7 @@ using JetBrains.Annotations; using Newtonsoft.Json; using Newtonsoft.Json.Converters; using osu.Game.Beatmaps; +using osu.Game.Database; using osu.Game.Rulesets; using osu.Game.Rulesets.Mods; using osu.Game.Scoring; @@ -147,6 +148,7 @@ namespace osu.Game.Online.API.Requests.Responses } public IRulesetInfo Ruleset => new RulesetInfo { OnlineID = RulesetID }; + IEnumerable IHasNamedFiles.Files => throw new NotImplementedException(); IBeatmapInfo IScoreInfo.Beatmap => Beatmap; } diff --git a/osu.Game/Scoring/IScoreInfo.cs b/osu.Game/Scoring/IScoreInfo.cs index 21a402f8c3..8b5b228632 100644 --- a/osu.Game/Scoring/IScoreInfo.cs +++ b/osu.Game/Scoring/IScoreInfo.cs @@ -9,7 +9,7 @@ using osu.Game.Rulesets; namespace osu.Game.Scoring { - public interface IScoreInfo : IHasOnlineID + public interface IScoreInfo : IHasOnlineID, IHasNamedFiles { APIUser User { get; } diff --git a/osu.Game/Scoring/ScoreFileInfo.cs b/osu.Game/Scoring/ScoreFileInfo.cs index 9075fdec5b..b2e81d4b8d 100644 --- a/osu.Game/Scoring/ScoreFileInfo.cs +++ b/osu.Game/Scoring/ScoreFileInfo.cs @@ -7,7 +7,7 @@ using osu.Game.IO; namespace osu.Game.Scoring { - public class ScoreFileInfo : INamedFileInfo, IHasPrimaryKey + public class ScoreFileInfo : INamedFileInfo, IHasPrimaryKey, INamedFileUsage { public int ID { get; set; } @@ -17,5 +17,7 @@ namespace osu.Game.Scoring [Required] public string Filename { get; set; } + + IFileInfo INamedFileUsage.File => FileInfo; } } diff --git a/osu.Game/Scoring/ScoreInfo.cs b/osu.Game/Scoring/ScoreInfo.cs index b4e194cbed..564aa3b98c 100644 --- a/osu.Game/Scoring/ScoreInfo.cs +++ b/osu.Game/Scoring/ScoreInfo.cs @@ -257,5 +257,7 @@ namespace osu.Game.Scoring bool IScoreInfo.HasReplay => Files.Any(); #endregion + + IEnumerable IHasNamedFiles.Files => Files; } } diff --git a/osu.Game/Skinning/SkinFileInfo.cs b/osu.Game/Skinning/SkinFileInfo.cs index 8a7019e1a3..db7cd953bb 100644 --- a/osu.Game/Skinning/SkinFileInfo.cs +++ b/osu.Game/Skinning/SkinFileInfo.cs @@ -7,7 +7,7 @@ using osu.Game.IO; namespace osu.Game.Skinning { - public class SkinFileInfo : INamedFileInfo, IHasPrimaryKey + public class SkinFileInfo : INamedFileInfo, IHasPrimaryKey, INamedFileUsage { public int ID { get; set; } @@ -19,5 +19,7 @@ namespace osu.Game.Skinning [Required] public string Filename { get; set; } + + IFileInfo INamedFileUsage.File => FileInfo; } } diff --git a/osu.Game/Skinning/SkinInfo.cs b/osu.Game/Skinning/SkinInfo.cs index 4733e8cdd9..5d2d51a9b0 100644 --- a/osu.Game/Skinning/SkinInfo.cs +++ b/osu.Game/Skinning/SkinInfo.cs @@ -10,7 +10,7 @@ using osu.Game.IO; namespace osu.Game.Skinning { - public class SkinInfo : IHasFiles, IEquatable, IHasPrimaryKey, ISoftDelete + public class SkinInfo : IHasFiles, IEquatable, IHasPrimaryKey, ISoftDelete, IHasNamedFiles { internal const int DEFAULT_SKIN = 0; internal const int CLASSIC_SKIN = -1; @@ -55,5 +55,7 @@ namespace osu.Game.Skinning string author = Creator == null ? string.Empty : $"({Creator})"; return $"{Name} {author}".Trim(); } + + IEnumerable IHasNamedFiles.Files => Files; } }