mirror of
https://github.com/xivdev/Penumbra.git
synced 2025-12-12 18:27:24 +01:00
Merge branch 'pr/n143_collection-command'
This commit is contained in:
commit
26258b7bcc
4 changed files with 150 additions and 81 deletions
|
|
@ -1,3 +1,4 @@
|
|||
using System;
|
||||
using Dalamud.Game.Command;
|
||||
using Dalamud.Logging;
|
||||
using Dalamud.Plugin;
|
||||
|
|
@ -13,6 +14,7 @@ using Penumbra.Mods;
|
|||
using Penumbra.PlayerWatch;
|
||||
using Penumbra.UI;
|
||||
using Penumbra.Util;
|
||||
using System.Linq;
|
||||
|
||||
namespace Penumbra;
|
||||
|
||||
|
|
@ -36,6 +38,8 @@ public class Penumbra : IDalamudPlugin
|
|||
|
||||
private WebServer? _webServer;
|
||||
|
||||
private readonly ModManager _modManager;
|
||||
|
||||
public Penumbra( DalamudPluginInterface pluginInterface )
|
||||
{
|
||||
FFXIVClientStructs.Resolver.Initialize();
|
||||
|
|
@ -52,11 +56,11 @@ public class Penumbra : IDalamudPlugin
|
|||
var gameUtils = Service< ResidentResources >.Set();
|
||||
PlayerWatcher = PlayerWatchFactory.Create( Dalamud.Framework, Dalamud.ClientState, Dalamud.Objects );
|
||||
Service< MetaDefaults >.Set();
|
||||
var modManager = Service< ModManager >.Set();
|
||||
_modManager = Service< ModManager >.Set();
|
||||
|
||||
modManager.DiscoverMods();
|
||||
_modManager.DiscoverMods();
|
||||
|
||||
ObjectReloader = new ObjectReloader( modManager, Config.WaitFrames );
|
||||
ObjectReloader = new ObjectReloader( _modManager, Config.WaitFrames );
|
||||
|
||||
ResourceLoader = new ResourceLoader( this );
|
||||
|
||||
|
|
@ -165,7 +169,7 @@ public class Penumbra : IDalamudPlugin
|
|||
.WithWebApi( "/api", m => m
|
||||
.WithController( () => new ModsController( this ) ) );
|
||||
|
||||
_webServer.StateChanged += ( s, e ) => PluginLog.Information( $"WebServer New State - {e.NewState}" );
|
||||
_webServer.StateChanged += ( _, e ) => PluginLog.Information( $"WebServer New State - {e.NewState}" );
|
||||
|
||||
_webServer.RunAsync();
|
||||
}
|
||||
|
|
@ -191,12 +195,58 @@ public class Penumbra : IDalamudPlugin
|
|||
ShutdownWebServer();
|
||||
}
|
||||
|
||||
public bool SetCollection( string type, string collectionName )
|
||||
{
|
||||
type = type.ToLowerInvariant();
|
||||
collectionName = collectionName.ToLowerInvariant();
|
||||
|
||||
var collection = string.Equals( collectionName, ModCollection.Empty.Name, StringComparison.InvariantCultureIgnoreCase )
|
||||
? ModCollection.Empty
|
||||
: _modManager.Collections.Collections.Values.FirstOrDefault( c
|
||||
=> string.Equals( c.Name, collectionName, StringComparison.InvariantCultureIgnoreCase ) );
|
||||
if( collection == null )
|
||||
{
|
||||
Dalamud.Chat.Print( $"The collection {collection} does not exist." );
|
||||
return false;
|
||||
}
|
||||
|
||||
switch( type )
|
||||
{
|
||||
case "default":
|
||||
if( collection == _modManager.Collections.DefaultCollection )
|
||||
{
|
||||
Dalamud.Chat.Print( $"{collection.Name} already is the default collection." );
|
||||
return false;
|
||||
}
|
||||
|
||||
_modManager.Collections.SetDefaultCollection( collection );
|
||||
Dalamud.Chat.Print( $"Set {collection.Name} as default collection." );
|
||||
SettingsInterface.ResetDefaultCollection();
|
||||
return true;
|
||||
case "forced":
|
||||
if( collection == _modManager.Collections.ForcedCollection )
|
||||
{
|
||||
Dalamud.Chat.Print( $"{collection.Name} already is the forced collection." );
|
||||
return false;
|
||||
}
|
||||
|
||||
_modManager.Collections.SetForcedCollection( collection );
|
||||
Dalamud.Chat.Print( $"Set {collection.Name} as forced collection." );
|
||||
SettingsInterface.ResetForcedCollection();
|
||||
return true;
|
||||
default:
|
||||
Dalamud.Chat.Print(
|
||||
"Second command argument is not default or forced, the correct command format is: /penumbra collection {default|forced} <collectionName>" );
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnCommand( string command, string rawArgs )
|
||||
{
|
||||
const string modsEnabled = "Your mods have now been enabled.";
|
||||
const string modsDisabled = "Your mods have now been disabled.";
|
||||
|
||||
var args = rawArgs.Split( new[] { ' ' }, 2 );
|
||||
var args = rawArgs.Split( new[] { ' ' }, 3 );
|
||||
if( args.Length > 0 && args[ 0 ].Length > 0 )
|
||||
{
|
||||
switch( args[ 0 ] )
|
||||
|
|
@ -205,7 +255,7 @@ public class Penumbra : IDalamudPlugin
|
|||
{
|
||||
Service< ModManager >.Get().DiscoverMods();
|
||||
Dalamud.Chat.Print(
|
||||
$"Reloaded Penumbra mods. You have {Service< ModManager >.Get()?.Mods.Count} mods."
|
||||
$"Reloaded Penumbra mods. You have {_modManager.Mods.Count} mods."
|
||||
);
|
||||
break;
|
||||
}
|
||||
|
|
@ -249,6 +299,20 @@ public class Penumbra : IDalamudPlugin
|
|||
: modsDisabled );
|
||||
break;
|
||||
}
|
||||
case "collection":
|
||||
{
|
||||
if( args.Length == 3 )
|
||||
{
|
||||
SetCollection( args[ 1 ], args[ 2 ] );
|
||||
}
|
||||
else
|
||||
{
|
||||
Dalamud.Chat.Print( "Missing arguments, the correct command format is:"
|
||||
+ " /penumbra collection {default|forced} <collectionName>" );
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -54,10 +54,10 @@ public partial class SettingsInterface
|
|||
private void UpdateIndex()
|
||||
=> _currentCollectionIndex = GetIndex( _manager.Collections.CurrentCollection ) - 1;
|
||||
|
||||
private void UpdateForcedIndex()
|
||||
public void UpdateForcedIndex()
|
||||
=> _currentForcedIndex = GetIndex( _manager.Collections.ForcedCollection );
|
||||
|
||||
private void UpdateDefaultIndex()
|
||||
public void UpdateDefaultIndex()
|
||||
=> _currentDefaultIndex = GetIndex( _manager.Collections.DefaultCollection );
|
||||
|
||||
private void UpdateCharacterIndices()
|
||||
|
|
|
|||
|
|
@ -3,81 +3,86 @@ using System.Numerics;
|
|||
using Penumbra.Mods;
|
||||
using Penumbra.Util;
|
||||
|
||||
namespace Penumbra.UI
|
||||
namespace Penumbra.UI;
|
||||
|
||||
public partial class SettingsInterface : IDisposable
|
||||
{
|
||||
public partial class SettingsInterface : IDisposable
|
||||
private const float DefaultVerticalSpace = 20f;
|
||||
|
||||
private static readonly Vector2 AutoFillSize = new(-1, -1);
|
||||
private static readonly Vector2 ZeroVector = new(0, 0);
|
||||
|
||||
private readonly Penumbra _penumbra;
|
||||
|
||||
private readonly ManageModsButton _manageModsButton;
|
||||
private readonly MenuBar _menuBar;
|
||||
private readonly SettingsMenu _menu;
|
||||
private readonly ModManager _modManager;
|
||||
|
||||
public SettingsInterface( Penumbra penumbra )
|
||||
{
|
||||
private const float DefaultVerticalSpace = 20f;
|
||||
_penumbra = penumbra;
|
||||
_manageModsButton = new ManageModsButton( this );
|
||||
_menuBar = new MenuBar( this );
|
||||
_menu = new SettingsMenu( this );
|
||||
_modManager = Service< ModManager >.Get();
|
||||
|
||||
private static readonly Vector2 AutoFillSize = new( -1, -1 );
|
||||
private static readonly Vector2 ZeroVector = new( 0, 0 );
|
||||
Dalamud.PluginInterface.UiBuilder.DisableGposeUiHide = true;
|
||||
Dalamud.PluginInterface.UiBuilder.Draw += Draw;
|
||||
Dalamud.PluginInterface.UiBuilder.OpenConfigUi += OpenConfig;
|
||||
}
|
||||
|
||||
private readonly Penumbra _penumbra;
|
||||
public void Dispose()
|
||||
{
|
||||
_manageModsButton.Dispose();
|
||||
_menu.InstalledTab.Selector.Cache.Dispose();
|
||||
Dalamud.PluginInterface.UiBuilder.Draw -= Draw;
|
||||
Dalamud.PluginInterface.UiBuilder.OpenConfigUi -= OpenConfig;
|
||||
}
|
||||
|
||||
private readonly ManageModsButton _manageModsButton;
|
||||
private readonly MenuBar _menuBar;
|
||||
private readonly SettingsMenu _menu;
|
||||
private readonly ModManager _modManager;
|
||||
private void OpenConfig()
|
||||
=> _menu.Visible = true;
|
||||
|
||||
public SettingsInterface( Penumbra penumbra )
|
||||
public void FlipVisibility()
|
||||
=> _menu.Visible = !_menu.Visible;
|
||||
|
||||
public void MakeDebugTabVisible()
|
||||
=> _menu.DebugTabVisible = true;
|
||||
|
||||
public void Draw()
|
||||
{
|
||||
_menuBar.Draw();
|
||||
_menu.Draw();
|
||||
}
|
||||
|
||||
private void ReloadMods()
|
||||
{
|
||||
_menu.InstalledTab.Selector.ClearSelection();
|
||||
_modManager.DiscoverMods( Penumbra.Config.ModDirectory );
|
||||
_menu.InstalledTab.Selector.Cache.TriggerListReset();
|
||||
}
|
||||
|
||||
private void SaveCurrentCollection( bool recalculateMeta )
|
||||
{
|
||||
var current = _modManager.Collections.CurrentCollection;
|
||||
current.Save();
|
||||
RecalculateCurrent( recalculateMeta );
|
||||
}
|
||||
|
||||
private void RecalculateCurrent( bool recalculateMeta )
|
||||
{
|
||||
var current = _modManager.Collections.CurrentCollection;
|
||||
if( current.Cache != null )
|
||||
{
|
||||
_penumbra = penumbra;
|
||||
_manageModsButton = new ManageModsButton( this );
|
||||
_menuBar = new MenuBar( this );
|
||||
_menu = new SettingsMenu( this );
|
||||
_modManager = Service< ModManager >.Get();
|
||||
|
||||
Dalamud.PluginInterface.UiBuilder.DisableGposeUiHide = true;
|
||||
Dalamud.PluginInterface.UiBuilder.Draw += Draw;
|
||||
Dalamud.PluginInterface.UiBuilder.OpenConfigUi += OpenConfig;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_manageModsButton.Dispose();
|
||||
_menu.InstalledTab.Selector.Cache.Dispose();
|
||||
Dalamud.PluginInterface.UiBuilder.Draw -= Draw;
|
||||
Dalamud.PluginInterface.UiBuilder.OpenConfigUi -= OpenConfig;
|
||||
}
|
||||
|
||||
private void OpenConfig()
|
||||
=> _menu.Visible = true;
|
||||
|
||||
public void FlipVisibility()
|
||||
=> _menu.Visible = !_menu.Visible;
|
||||
|
||||
public void MakeDebugTabVisible()
|
||||
=> _menu.DebugTabVisible = true;
|
||||
|
||||
public void Draw()
|
||||
{
|
||||
_menuBar.Draw();
|
||||
_menu.Draw();
|
||||
}
|
||||
|
||||
private void ReloadMods()
|
||||
{
|
||||
_menu.InstalledTab.Selector.ClearSelection();
|
||||
_modManager.DiscoverMods( Penumbra.Config.ModDirectory );
|
||||
_menu.InstalledTab.Selector.Cache.TriggerListReset();
|
||||
}
|
||||
|
||||
private void SaveCurrentCollection( bool recalculateMeta )
|
||||
{
|
||||
var current = _modManager.Collections.CurrentCollection;
|
||||
current.Save();
|
||||
RecalculateCurrent( recalculateMeta );
|
||||
}
|
||||
|
||||
private void RecalculateCurrent( bool recalculateMeta )
|
||||
{
|
||||
var current = _modManager.Collections.CurrentCollection;
|
||||
if( current.Cache != null )
|
||||
{
|
||||
current.CalculateEffectiveFileList( _modManager.TempPath, recalculateMeta,
|
||||
current == _modManager.Collections.ActiveCollection );
|
||||
_menu.InstalledTab.Selector.Cache.TriggerFilterReset();
|
||||
}
|
||||
current.CalculateEffectiveFileList( _modManager.TempPath, recalculateMeta,
|
||||
current == _modManager.Collections.ActiveCollection );
|
||||
_menu.InstalledTab.Selector.Cache.TriggerFilterReset();
|
||||
}
|
||||
}
|
||||
|
||||
public void ResetDefaultCollection()
|
||||
=> _menu.CollectionsTab.UpdateDefaultIndex();
|
||||
|
||||
public void ResetForcedCollection()
|
||||
=> _menu.CollectionsTab.UpdateForcedIndex();
|
||||
}
|
||||
10
repo.json
10
repo.json
|
|
@ -4,8 +4,8 @@
|
|||
"Name": "Penumbra",
|
||||
"Description": "Runtime mod loader and manager.",
|
||||
"InternalName": "Penumbra",
|
||||
"AssemblyVersion": "0.4.7.2",
|
||||
"TestingAssemblyVersion": "0.4.7.2",
|
||||
"AssemblyVersion": "0.4.7.3",
|
||||
"TestingAssemblyVersion": "0.4.7.3",
|
||||
"RepoUrl": "https://github.com/xivdev/Penumbra",
|
||||
"ApplicableVersion": "any",
|
||||
"DalamudApiLevel": 5,
|
||||
|
|
@ -14,9 +14,9 @@
|
|||
"DownloadCount": 0,
|
||||
"LastUpdate": 0,
|
||||
"LoadPriority": 69420,
|
||||
"DownloadLinkInstall": "https://github.com/xivdev/Penumbra/releases/download/0.4.7.2/Penumbra.zip",
|
||||
"DownloadLinkTesting": "https://github.com/xivdev/Penumbra/releases/download/0.4.7.2/Penumbra.zip",
|
||||
"DownloadLinkUpdate": "https://github.com/xivdev/Penumbra/releases/download/0.4.7.2/Penumbra.zip",
|
||||
"DownloadLinkInstall": "https://github.com/xivdev/Penumbra/releases/download/0.4.7.3/Penumbra.zip",
|
||||
"DownloadLinkTesting": "https://github.com/xivdev/Penumbra/releases/download/0.4.7.3/Penumbra.zip",
|
||||
"DownloadLinkUpdate": "https://github.com/xivdev/Penumbra/releases/download/0.4.7.3/Penumbra.zip",
|
||||
"IconUrl": "https://raw.githubusercontent.com/xivdev/Penumbra/master/images/icon.png"
|
||||
}
|
||||
]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue