// Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using Microsoft.EntityFrameworkCore; using osu.Framework.Configuration; using osu.Framework.Platform; using osu.Game.Database; using osu.Game.IO.Archives; namespace osu.Game.Skinning { public class SkinManager : ArchiveModelManager { public readonly Bindable CurrentSkinInfo = new Bindable(SkinInfo.Default) { Default = SkinInfo.Default }; public override string[] HandledExtensions => new[] { ".osk" }; /// /// Returns a list of all usable s. /// /// A list of available . public List GetAllUsableSkins() { var userSkins = ModelStore.ConsumableItems.Where(s => !s.DeletePending).ToList(); userSkins.Insert(0, SkinInfo.Default); return userSkins; } protected override SkinInfo CreateModel(ArchiveReader archive) => new SkinInfo { Name = archive.Name }; private SkinStore store; public SkinManager(Storage storage, DatabaseContextFactory contextFactory, IIpcHost importHost) : base(storage, contextFactory, new SkinStore(contextFactory, storage), importHost) { } /// /// Perform a lookup query on available s. /// /// The query. /// The first result for the provided query, or null if no results were found. public SkinInfo Query(Expression> query) => ModelStore.ConsumableItems.AsNoTracking().FirstOrDefault(query); } }