* misc: Defer Image loading for ImagePanel
Speeds up UI render time.
* misc: Use Flowable to ensure UI only works on the latest result
* misc: Attempt to add loading indicator to InstancesTab
Broken, Issue is that because instance building is run on the event
thread, The "true" is sent async to the loading view.
Which occurs on the next event loop operation.
But "false" is sent after,
so by the time the next event loop occurs the UI already is reset.
Doing a direct operation is also impossible it seems,
as Swing requires instance building to finish before updating the UI.
Truly a hell.
* misc: Run gc once launcher is ready
Memory, we need memory.
* misc: Add invokeLater override to HierarchyPanel
To prevent NPEs caused by actions take when UI is destroyed.
* misc: Move loading indicator into navigation panel
Less jumpy UI, and connected loading to sort / filter.
* misc: Log export issue on separate thread
Logging is an IO task, this slows down UI render time.
* misc: Observe instances on a separate thread
* misc: Render UI in chunks
To lower the impact of rendering the UI.
* misc: Move GBC into subscribe sequence
* misc: InstancesTabViewModel: Only sample values every second
* misc: Swap order of sampling after replay
This allows updates to come through, but not overwhelm the UI.
* misc: Simplify class functions
* misc: Add log instance render performance
* misc: Drop sample delay to 100 milliseconds
* misc: Replace sample with throttleLatest
* misc: Drop replay from InstancesTabViewModel
* misc: Replace replay with throttleLatest in ServersTabViewModel
* misc: Implement HierarchyPanel in InstancesTab
* fix: Ensure Instances search maintains state through composition
* fix: Ensure Instances sort maintains state through composition
* misc: Simplify empty logic in InstancesListPanel
* fix: Do not revalidate / repaint in InstancesListPanel
Revalidation / Repainting is computationally intensive.
Swing already takes care of this.
* misc: Add functionality to handle disposables in HierarchyPanel
CompositeDisposable is perfect for this task.
* misc: Add PerformanceManager to HierarchyPanel
So we can debug UI creation speeds
* misc: Implement HierarchyPanel to InstancesListPanel
Else getInstancesList.subscribe causes multiple threads
* misc: Remove reference InstancesTab from child components
None of the children need it anymore.
* misc: Swap InstancesTabViewModel.filteredInstances to IO scheduler
It seems to be faster.
* Revert "fix: Do not revalidate / repaint in InstancesListPanel"
This reverts commit 44a2d8dd
* misc: Replay last instances value in InstancesTabViewModel
This can decrease UI render by 25%.
* fix: Ensure Instances scroll maintains state through composition
* fix: Make HierarchyPanel intercept Relocalization
`onRelocalization` can occur when a view is not visible.
This will lead to NPEs.
Instead of the child directly adding itself to RelocalizationManager,
we can instead have the HierarchyPanel handle that.
So relocalization can occur if the UI is visible.
* update CHANGELOG.md
---------
Co-authored-by: Ryan Dowling <ryan@ryandowling.me>
* misc: Use InstanceManager rather than direct INSTANCES access
Just adding some separation between the layers.
* misc: Implement RxJava in InstanceManager for IInstancesTabViewModel
Less boilerplate code for more reactive code!
* Update CHANGELOG.md
* misc: Remove deprecated Data.INSTANCES
* misc: Remove Launcher.reloadInstancesPanel
InstancePanel is now reactive, no need for explicit loads.
Numerous UpdateManagers had their process code simplified, cheers!
Note, that InstanceManager.reload had to be added for SettingsTab.
This is a stop-gap due to settings being currently non-reactive.
In a future commit I shall remedy this.
* misc: InstancesTabViewModel provide instanceTitleFormat in Observable
InstancesListPanel had no async tie to Settings.instanceTitleFormat.
By having InstancesTabViewModel connect via SettingsListener to
SettingsManager. That way InstanceManager.reload can be removed.
* fix: Ensure InstancesList is observed on Swing thread
* misc: Document IInstancesTabViewModel
* misc: Document changes to InstanceManager
* misc: Document changes to CollapsiblePanel
* Add UUID to Instance
Currently, there is no way to track an instance specifically.
This commit adds a UUID a given Instance that
lets it be identified by the launcher.
* fix: Correct instance being deleted during update
* misc: Convert update managers to RxJava
Allows for more reactive coding over the instances.
* misc: Combine update streams in InstancesTabViewModel
* misc: Add license to InstanceUIModel
* misc: Update CHANGELOG.md
* misc: Fix broken rebase
---------
Co-authored-by: Ryan Dowling <ryan@ryandowling.me>
* Implement HierarchyPanel to NewsTab
* Update License
* Update descriptions and methods of HierarchyPanel
* Update CHANGELOG.md
* HierarchyPanel / NewsTab: Separate UI & view model lifecycle + cleanups
View models are resource intensive to produce,
thus they should occur after the panel is made
but before the UI is shown.
Furthermore,
I moved all UI code in NewsTab into onShow to adhere to the lifecycle.
* HierarchyPanel: Only destroy if UI has been created.
---------
Co-authored-by: Ryan Dowling <ryan@ryandowling.me>
* misc: Rename VanillaPacksTab to CreatePackTab
CreatePack is more accurate to what the purpose is.
* new: Add navigation actions to NilCard for ServersTab and InstancesTab
When there is no instances or servers,
the buttons can help guide the user to the right locations.
* misc: Use new convenience function for navigation
Looks a lot better doesn't it?
* misc: Update CHANGELOG.md
* fix: Fix localization of NilCards
Makes them easier to localize & create the default ones.
---------
Co-authored-by: Ryan Dowling <ryan@ryandowling.me>