From 518225e6e65368e04ef6b445dd14823b848e6919 Mon Sep 17 00:00:00 2001 From: Anairkoen Schno Date: Sun, 23 Jun 2019 17:31:58 -0500 Subject: [PATCH] Fixed a few bugs relating to runtime enablable plugins --- BSIPA-ModList/UI/ViewControllers/ModCells.cs | 27 +- .../ViewControllers/ModInfoViewController.cs | 16 +- .../UI/ViewControllers/ModListController.cs | 14 +- BSIPA-ModList/manifest.json | 2 +- IPA.Loader/Config/SelfConfig.cs | 2 +- IPA.Loader/Loader/PluginManager.cs | 1 - IPA.Loader/Loader/manifest.json | 2 +- IPA/Program.cs | 2 +- Refs/BeatSaberCustomUI.dll | Bin 190976 -> 190464 bytes Refs/BeatSaberCustomUI.xml | 359 ------------------ Refs/UnityEngine.CoreModule.dll | Bin 613888 -> 613888 bytes Refs/refs.txt | 3 +- appveyor.yml | 2 +- 13 files changed, 60 insertions(+), 370 deletions(-) delete mode 100644 Refs/BeatSaberCustomUI.xml diff --git a/BSIPA-ModList/UI/ViewControllers/ModCells.cs b/BSIPA-ModList/UI/ViewControllers/ModCells.cs index dbe2efed..49113319 100644 --- a/BSIPA-ModList/UI/ViewControllers/ModCells.cs +++ b/BSIPA-ModList/UI/ViewControllers/ModCells.cs @@ -18,7 +18,7 @@ namespace BSIPA_ModList.UI.ViewControllers void Update(); } - internal class BSIPAModCell : CustomCellInfo, IClickableCell + internal class BSIPAModCell : CustomCellInfo, IClickableCell, IDisposable { internal PluginLoader.PluginMetadata Plugin; private ModListController list; @@ -59,7 +59,10 @@ namespace BSIPA_ModList.UI.ViewControllers private static void PluginManager_PluginDisabled(PluginLoader.PluginMetadata plugin, bool needsRestart, WeakReference _self, PluginManager.PluginDisableDelegate ownDel) { if (!_self.TryGetTarget(out var self)) + { PluginManager.PluginDisabled -= ownDel; + return; + } if (plugin != self.Plugin) return; @@ -112,6 +115,28 @@ namespace BSIPA_ModList.UI.ViewControllers if (propogate) list.Reload(); } + + #region IDisposable Support + private bool disposedValue = false; // To detect redundant calls + + protected virtual void Dispose(bool disposing) + { + if (!disposedValue) + { + if (disposing) + { + PluginManager.PluginDisabled -= disableDel; + PluginManager.PluginEnabled -= enableDel; + } + + disposedValue = true; + } + } + public void Dispose() + { + Dispose(true); + } + #endregion } internal class BSIPAIgnoredModCell : CustomCellInfo, IClickableCell diff --git a/BSIPA-ModList/UI/ViewControllers/ModInfoViewController.cs b/BSIPA-ModList/UI/ViewControllers/ModInfoViewController.cs index 295d7a91..1127022f 100644 --- a/BSIPA-ModList/UI/ViewControllers/ModInfoViewController.cs +++ b/BSIPA-ModList/UI/ViewControllers/ModInfoViewController.cs @@ -94,6 +94,20 @@ namespace BSIPA_ModList.UI SetupLinks(links); } + protected override void DidDeactivate(DeactivationType deactivationType) + { + base.DidDeactivate(deactivationType); + + if (deactivationType == DeactivationType.RemovedFromHierarchy) + Plugin.OnConfigChaned -= OptHideButton; + } + + protected override void OnDestroy() + { + Plugin.OnConfigChaned -= OptHideButton; + base.OnDestroy(); + } + ~ModInfoViewController() { Plugin.OnConfigChaned -= OptHideButton; @@ -101,7 +115,7 @@ namespace BSIPA_ModList.UI private void OptHideButton(SelfConfig cfg) { - enableDisableButton?.gameObject.SetActive(cfg.ShowEnableDisable); + enableDisableButton?.gameObject?.SetActive(cfg.ShowEnableDisable); } private Action setAction = () => { }; diff --git a/BSIPA-ModList/UI/ViewControllers/ModListController.cs b/BSIPA-ModList/UI/ViewControllers/ModListController.cs index 907122a5..cd61a9a2 100644 --- a/BSIPA-ModList/UI/ViewControllers/ModListController.cs +++ b/BSIPA-ModList/UI/ViewControllers/ModListController.cs @@ -64,7 +64,8 @@ namespace BSIPA_ModList.UI var cells = _customListTableView.GetPrivateField>("_visibleCells"); foreach (var c in cells) { - c.gameObject.SetActive(false); + if (c == null) continue; + c.gameObject?.SetActive(false); _customListTableView.AddCellToReusableCells(c); } cells.Clear(); @@ -85,5 +86,16 @@ namespace BSIPA_ModList.UI _customListTableView.gameObject.GetComponent().scrollSensitivity = 0f; } + + protected override void OnDestroy() + { + base.OnDestroy(); + + foreach (var cell in Data) + { + if (cell is IDisposable disp) + disp.Dispose(); + } + } } } diff --git a/BSIPA-ModList/manifest.json b/BSIPA-ModList/manifest.json index 72dbdef2..47ae215c 100644 --- a/BSIPA-ModList/manifest.json +++ b/BSIPA-ModList/manifest.json @@ -11,7 +11,7 @@ "gameVersion": "1.1.0", "id": "BSIPA Mod List", "name": "BSIPA Mod List", - "version": "1.2.5", + "version": "1.2.6", "icon": "BSIPA_ModList.Icons.self.png", "dependsOn": { "BSIPA": "^3.12.22", diff --git a/IPA.Loader/Config/SelfConfig.cs b/IPA.Loader/Config/SelfConfig.cs index 34a6c76c..b69c4033 100644 --- a/IPA.Loader/Config/SelfConfig.cs +++ b/IPA.Loader/Config/SelfConfig.cs @@ -37,7 +37,7 @@ namespace IPA.Config } internal const string IPAName = "Beat Saber IPA"; - internal const string IPAVersion = "3.12.22"; + internal const string IPAVersion = "3.12.23"; public bool Regenerate = true; diff --git a/IPA.Loader/Loader/PluginManager.cs b/IPA.Loader/Loader/PluginManager.cs index e89870d0..2fae7a29 100644 --- a/IPA.Loader/Loader/PluginManager.cs +++ b/IPA.Loader/Loader/PluginManager.cs @@ -120,7 +120,6 @@ namespace IPA.Loader runtimeDisabled.Add(plugin); _bsPlugins.Remove(plugin); - PluginLoader.DisabledPlugins.Add(plugin.Metadata); try { diff --git a/IPA.Loader/Loader/manifest.json b/IPA.Loader/Loader/manifest.json index be6b461f..1393dfce 100644 --- a/IPA.Loader/Loader/manifest.json +++ b/IPA.Loader/Loader/manifest.json @@ -8,7 +8,7 @@ "gameVersion": "1.1.0", "id": "BSIPA", "name": "Beat Saber IPA", - "version": "3.12.22", + "version": "3.12.23", "icon": "IPA.icon.png", "features": [ "define-feature(print, IPA.Loader.Features.PrintFeature)", diff --git a/IPA/Program.cs b/IPA/Program.cs index 59f4fdb5..86fc39d2 100644 --- a/IPA/Program.cs +++ b/IPA/Program.cs @@ -23,7 +23,7 @@ namespace IPA Unknown } - public const string FileVersion = "3.12.22"; + public const string FileVersion = "3.12.23"; public static Version Version => Assembly.GetEntryAssembly().GetName().Version; diff --git a/Refs/BeatSaberCustomUI.dll b/Refs/BeatSaberCustomUI.dll index 5456be86679e8958419572f5b1a112c8c223b6ae..455b2a7f995861d62d26f69ef20f766fe0e6bd3b 100644 GIT binary patch delta 36474 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

5x1j*%JkrOL#`XXiv1vDw!Be% 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 diff --git a/Refs/BeatSaberCustomUI.xml b/Refs/BeatSaberCustomUI.xml deleted file mode 100644 index 5fbaa627..00000000 --- a/Refs/BeatSaberCustomUI.xml +++ /dev/null @@ -1,359 +0,0 @@ - - - - BeatSaberCustomUI - - - -

- Display a keyboard interface to accept user input. - - The title to be displayed above the keyboard. - The starting value of the keyboard. - Callback when the text is modified by the user (when any key is pressed basically). - Callback when the user successfully submits the changed text. - Callback when the user presses the cancel button. - - - - - Creates a copy of a template button and returns it. - - The transform to parent the button to. - The name of the button to make a copy of. Example: "QuitButton", "PlayButton", etc. - The position the button should be anchored to. - The size of the buttons RectTransform. - Callback for when the button is pressed. - The text that should be shown on the button. - The icon that should be shown on the button. - The newly created button. - - - - Creates a copy of a template button and returns it. - - The transform to parent the button to. - The name of the button to make a copy of. Example: "QuitButton", "PlayButton", etc. - The position the button should be anchored to. - Callback for when the button is pressed. - The text that should be shown on the button. - The icon that should be shown on the button. - The newly created button. - - - - Creates a copy of a template button and returns it. - - The transform to parent the button to. - The name of the button to make a copy of. Example: "QuitButton", "PlayButton", etc. - Callback for when the button is pressed. - The text that should be shown on the button. - The icon that should be shown on the button. - The newly created button. - - - - Creates a copy of a back button. - - The transform to parent the new button to. - Callback for when the button is pressed. - The newly created back button. - - - - Creates a VRUIViewController of type T, and marks it to not be destroyed. - - The variation of VRUIViewController you want to create. - The newly created VRUIViewController of type T. - - - - Creates a CustomMenu, which is basically a custom panel that handles UI transitions for you automatically. - - The type of CustomMenu to instantiate. - The title of the new CustomMenu. - The newly created CustomMenu of type T. - - - - Creates a loading spinner. - - The transform to parent the new loading spinner to. - The newly created loading spinner. - - - - Creates a TextMeshProUGUI component. - - Thet ransform to parent the new TextMeshProUGUI component to. - The text to be displayed. - The position the button should be anchored to. - The newly created TextMeshProUGUI component. - - - - Creates a TextMeshProUGUI component. - - Thet transform to parent the new TextMeshProUGUI component to. - The text to be displayed. - The position the text component should be anchored to. - The size of the text components RectTransform. - The newly created TextMeshProUGUI component. - - - - Adds hint text to any component that handles pointer events. - - Thet transform to parent the new HoverHint component to. - The text to be displayed on the HoverHint panel. - The newly created HoverHint component. - - - - Creates a custom slider. - - Thet transform to parent the new slider component to. - The minimum value of the slider. - The maximum value of the slider. - The amount to increment the slider by. - True if the value represented by the slider is an int, false if it's a float. - Callback when the sliders value changes. - - - - - Creates a color picker. - - Thet transform to parent the new color picker to. - The position the color picker should be anchored to. - The size of the color picker's RectTransform. - - - - - The FlowCoordinator that presented this FlowCoordinator - - - - - The CustomMenu this FlowCoordinator is representing. - - - - - Back out to the previous flow coordinator. - - If set to true, no animation will be shown and the transition will be instant. - - - - Back out to the previous flow coordinator with an animation. - - - - - Whether or not to include a back button when the ViewController is activated. - - - - - A reference to the page up button, if it exists. - - - - - A reference to the page down button, if it exists. - - - - - The TableView associated with the current CustomListViewController. - - - - - The data to be displayed in the table. - - - - - An event fired when the user selects a cell in the TableView. - - - - - The reuse identifier, which is used to recycle cells instead of instantiating new instances of them. - - - - - The prefab used to instantiate new table cells. - - - - - Instantiates a new LevelListTableCell (or recycles an old one). - - This param does nothing, and was left in by mistake. - If set to false, the BeatmapCharacteristicImages will be destroyed. - - - - - Instantiates a new LevelListTableCell (or recycles an old one). - - If set to false, the BeatmapCharacteristicImages will be destroyed. - - - - - The CustomFlowCoordinator associated with this CustomMenu. This will not be populated if you have no main CustomViewController. - - - - - The main CustomViewController associated with this menu. - - - - - The left CustomViewController associated with this menu. - - - - - The right CustomViewController associated with this menu. - - - - - The bottom CustomViewController associated with this menu. - - - - - Sets up the main CustomViewController. - - The viewcontroller to set. - Whether or not to generate a back button. - Optional, a callback when the ViewController becomes active (when you open it). - Optional, a callback when the ViewController becomes inactive (when you close it). - - - - Sets up the left CustomViewController. - - The viewcontroller to set. - Whether or not to generate a back button. - Optional, a callback when the ViewController becomes active (when you open it). - Optional, a callback when the ViewController becomes inactive (when you close it). - - - - Sets up the right CustomViewController. - - The viewcontroller to set. - Whether or not to generate a back button. - Optional, a callback when the ViewController becomes active (when you open it). - Optional, a callback when the ViewController becomes inactive (when you close it). - - - - Sets up the bottom CustomViewController. - - The viewcontroller to set. - Whether or not to generate a back button. - Optional, a callback when the ViewController becomes active (when you open it). - Optional, a callback when the ViewController becomes inactive (when you close it). - - - - Opens the menu. - - If set to true, no animation will be shown and the transition will be instant. - - - - - Opens the menu with an animation. - - - - - Closes the menu. - - If set to true, no animation will be shown and the transition will be instant. - - - - Closes the menu with an animation. - - - - - The event that's fired when the back button is pressed. - - - - - A reference to the current back button, if it exists. - - - - - When set to true, a back button will be automatically generated. - - - - - The event that's fired when the CustomViewController is activated (when you open it). - - - - - The event that's fired when the CustomViewController is deactivated (when you close it). - - - - - Clears any back button callbacks. - - - - - Sets the color while also updating all associated components. - - The to set the preview image - - - - Get the color of a sprite contained in an on pointer click - - The given by OnPointerDown - The instance - - - - Initialize the (should be called after assigning the variable) - - - - - Method called when the pointer is clicked inside the - - Some informations about the pointer - - - - Method called when the pointer is released inside the - - Some informations about the pointer - - - - Method called when the pointer is exiting the - - Some informations about the pointer - - - diff --git a/Refs/UnityEngine.CoreModule.dll b/Refs/UnityEngine.CoreModule.dll index b90fbc70c8954fbd8f14dfe4b2ed570e690069f7..09b46aec2f4ba02b6245750cd85dfe7dc97b464c 100644 GIT binary patch delta 43 scmZqJquKyOEsQNpEzB(}TUf)w7{%Jd!&rfs4T#x+m}7f*80SiM07A_T-~a#s delta 43 scmZqJquKyOEsQNpEzB(}TUf)w7)9H|!&rfs4T#x+m}7f*80SiM07AA6-v9sr diff --git a/Refs/refs.txt b/Refs/refs.txt index 3c9fd3aa..32320c83 100644 --- a/Refs/refs.txt +++ b/Refs/refs.txt @@ -25,5 +25,4 @@ """"""xml "Plugins/ ""BeatSaberCustomUI. -"""dll -"""xml \ No newline at end of file +"""dll \ No newline at end of file diff --git a/appveyor.yml b/appveyor.yml index f68ba254..69eb1dfc 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,6 +1,6 @@ version: 'BSIPA-{branch}-{build}' environment: - bsipa_version: '3.12.22' + bsipa_version: '3.12.23' gh_token: secure: E42gl/yepETuoLSwbJZ1GmEIPK6cCJu6zkd59NA21XiICtEV6COOLW7aehi1tcVU pull_requests: