using CustomUI.Utilities; using IPA.Loader; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using UnityEngine; namespace BSIPA_ModList { internal static class Utilities { private static Sprite _defaultBsipaIcon; public static Sprite DefaultBSIPAIcon { get { if (_defaultBsipaIcon == null) _defaultBsipaIcon = UIUtilities.LoadSpriteFromResources("BSIPA_ModList.Icons.mod_bsipa.png"); return _defaultBsipaIcon; } } private static Sprite _defaultLibraryIcon; public static Sprite DefaultLibraryIcon { get { if (_defaultLibraryIcon == null) _defaultLibraryIcon = UIUtilities.LoadSpriteFromResources("BSIPA_ModList.Icons.library.png"); return _defaultLibraryIcon; } } private static Sprite _defaultIpaIcon; public static Sprite DefaultIPAIcon { get { if (_defaultIpaIcon == null) _defaultIpaIcon = UIUtilities.LoadSpriteFromResources("BSIPA_ModList.Icons.mod_ipa.png"); return _defaultIpaIcon; } } public static Sprite GetIcon(this PluginLoader.PluginMetadata meta) { if (meta == null) return DefaultBSIPAIcon; if (meta.IsBare) return DefaultLibraryIcon; else return GetEmbeddedIcon(meta) ?? DefaultBSIPAIcon; } private static Dictionary embeddedIcons = new Dictionary(); public static Sprite GetEmbeddedIcon(this PluginLoader.PluginMetadata meta) { if (embeddedIcons.TryGetValue(meta, out var sprite)) return sprite; var icon = GetEmbeddedIconNoCache(meta); embeddedIcons.Add(meta, icon); return icon; } private static Sprite GetEmbeddedIconNoCache(PluginLoader.PluginMetadata meta) { if (meta.Assembly == null) return null; if (meta.Manifest.IconPath == null) return null; try { return UIUtilities.LoadSpriteRaw(UIUtilities.GetResource(meta.Assembly, meta.Manifest.IconPath)); } catch (Exception e) { Logger.log.Error($"Error loading icon for {meta.Name}"); Logger.log.Error(e); return null; } } } }