You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

79 lines
2.6 KiB

  1. using CustomUI.Utilities;
  2. using IPA.Loader;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using UnityEngine;
  9. namespace BSIPA_ModList
  10. {
  11. internal static class Utilities
  12. {
  13. private static Sprite _defaultBsipaIcon;
  14. public static Sprite DefaultBSIPAIcon
  15. {
  16. get
  17. {
  18. if (_defaultBsipaIcon == null)
  19. _defaultBsipaIcon = UIUtilities.LoadSpriteFromResources("BSIPA_ModList.Icons.mod_bsipa.png");
  20. return _defaultBsipaIcon;
  21. }
  22. }
  23. private static Sprite _defaultLibraryIcon;
  24. public static Sprite DefaultLibraryIcon
  25. {
  26. get
  27. {
  28. if (_defaultLibraryIcon == null)
  29. _defaultLibraryIcon = UIUtilities.LoadSpriteFromResources("BSIPA_ModList.Icons.library.png");
  30. return _defaultLibraryIcon;
  31. }
  32. }
  33. private static Sprite _defaultIpaIcon;
  34. public static Sprite DefaultIPAIcon
  35. {
  36. get
  37. {
  38. if (_defaultIpaIcon == null)
  39. _defaultIpaIcon = UIUtilities.LoadSpriteFromResources("BSIPA_ModList.Icons.mod_ipa.png");
  40. return _defaultIpaIcon;
  41. }
  42. }
  43. public static Sprite GetIcon(this PluginLoader.PluginMetadata meta)
  44. {
  45. if (meta == null) return DefaultBSIPAIcon;
  46. if (meta.IsBare) return DefaultLibraryIcon;
  47. else return GetEmbeddedIcon(meta) ?? DefaultBSIPAIcon;
  48. }
  49. private static Dictionary<PluginLoader.PluginMetadata, Sprite> embeddedIcons = new Dictionary<PluginLoader.PluginMetadata, Sprite>();
  50. public static Sprite GetEmbeddedIcon(this PluginLoader.PluginMetadata meta)
  51. {
  52. if (embeddedIcons.TryGetValue(meta, out var sprite)) return sprite;
  53. var icon = GetEmbeddedIconNoCache(meta);
  54. embeddedIcons.Add(meta, icon);
  55. return icon;
  56. }
  57. private static Sprite GetEmbeddedIconNoCache(PluginLoader.PluginMetadata meta)
  58. {
  59. if (meta.Assembly == null) return null;
  60. if (meta.Manifest.IconPath == null) return null;
  61. try
  62. {
  63. return UIUtilities.LoadSpriteRaw(UIUtilities.GetResource(meta.Assembly, meta.Manifest.IconPath));
  64. }
  65. catch (Exception e)
  66. {
  67. Logger.log.Error($"Error loading icon for {meta.Name}");
  68. Logger.log.Error(e);
  69. return null;
  70. }
  71. }
  72. }
  73. }