Added a bunch of logging, small fix.

This commit is contained in:
Ottermandias 2022-04-29 15:30:08 +02:00
parent 9af4406c8c
commit e8ee729ec5
16 changed files with 86 additions and 38 deletions

@ -1 +1 @@
Subproject commit 1a3f6237c857562cac85de8f922dbef7bb63c870 Subproject commit 627e313232a2e602432dcc4d090dccd5e27993a1

View file

@ -206,6 +206,7 @@ public partial class ModCollection
j.WriteEndObject(); j.WriteEndObject();
j.WriteEndObject(); j.WriteEndObject();
PluginLog.Verbose( "Active Collections saved." );
} }
catch( Exception e ) catch( Exception e )
{ {

View file

@ -122,6 +122,7 @@ public partial class ModCollection
newCollection.Index = _collections.Count; newCollection.Index = _collections.Count;
_collections.Add( newCollection ); _collections.Add( newCollection );
newCollection.Save(); newCollection.Save();
PluginLog.Debug( "Added collection {Name:l}.", newCollection.Name );
CollectionChanged.Invoke( Type.Inactive, null, newCollection ); CollectionChanged.Invoke( Type.Inactive, null, newCollection );
SetCollection( newCollection.Index, Type.Current ); SetCollection( newCollection.Index, Type.Current );
return true; return true;
@ -176,6 +177,7 @@ public partial class ModCollection
} }
} }
PluginLog.Debug( "Removed collection {Name:l}.", collection.Name );
CollectionChanged.Invoke( Type.Inactive, collection, null ); CollectionChanged.Invoke( Type.Inactive, collection, null );
return true; return true;
} }

View file

@ -17,24 +17,26 @@ public partial class ModCollection
=> _cache != null; => _cache != null;
// Only create, do not update. // Only create, do not update.
public void CreateCache( bool isDefault ) private void CreateCache( bool isDefault )
{ {
if( _cache == null ) if( _cache == null )
{ {
CalculateEffectiveFileList( true, isDefault ); CalculateEffectiveFileList( true, isDefault );
PluginLog.Verbose( "Created new cache for collection {Name:l}.", Name );
} }
} }
// Force an update with metadata for this cache. // Force an update with metadata for this cache.
public void ForceCacheUpdate( bool isDefault ) private void ForceCacheUpdate( bool isDefault )
=> CalculateEffectiveFileList( true, isDefault ); => CalculateEffectiveFileList( true, isDefault );
// Clear the current cache. // Clear the current cache.
public void ClearCache() private void ClearCache()
{ {
_cache?.Dispose(); _cache?.Dispose();
_cache = null; _cache = null;
PluginLog.Verbose( "Cleared cache of collection {Name:l}.", Name );
} }
@ -78,7 +80,7 @@ public partial class ModCollection
return; return;
} }
PluginLog.Debug( "Recalculating effective file list for {CollectionName} [{WithMetaManipulations}] [{ReloadDefault}]", Name, PluginLog.Debug( "Recalculating effective file list for {CollectionName:l} [{WithMetaManipulations}] [{ReloadDefault}]", Name,
withMetaManipulations, reloadDefault ); withMetaManipulations, reloadDefault );
_cache ??= new Cache( this ); _cache ??= new Cache( this );
_cache.CalculateEffectiveFileList( withMetaManipulations ); _cache.CalculateEffectiveFileList( withMetaManipulations );
@ -164,6 +166,7 @@ public partial class ModCollection
else else
{ {
_cache.MetaManipulations.SetFiles(); _cache.MetaManipulations.SetFiles();
PluginLog.Debug( "Set CharacterUtility resources for collection {Name:l}.", Name );
} }
} }
} }

View file

@ -87,6 +87,7 @@ public partial class ModCollection
try try
{ {
file.Delete(); file.Delete();
PluginLog.Information( "Deleted collection file {File:l} for {Name:l}.", file.FullName, Name );
} }
catch( Exception e ) catch( Exception e )
{ {

View file

@ -1,9 +1,9 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using Dalamud.Logging;
using OtterGui.Filesystem; using OtterGui.Filesystem;
using Penumbra.Mods; using Penumbra.Mods;
using Penumbra.Util;
namespace Penumbra.Collections; namespace Penumbra.Collections;
@ -66,9 +66,6 @@ public partial class ModCollection
return ValidInheritance.Valid; return ValidInheritance.Valid;
} }
private bool CheckForCircle( ModCollection collection )
=> ReferenceEquals( collection, this ) || _inheritance.Any( c => c.CheckForCircle( collection ) );
// Add a new collection to the inheritance list. // Add a new collection to the inheritance list.
// We do not check if this collection would be visited before, // We do not check if this collection would be visited before,
// only that it is unique in the list itself. // only that it is unique in the list itself.
@ -84,6 +81,7 @@ public partial class ModCollection
collection.ModSettingChanged += OnInheritedModSettingChange; collection.ModSettingChanged += OnInheritedModSettingChange;
collection.InheritanceChanged += OnInheritedInheritanceChange; collection.InheritanceChanged += OnInheritedInheritanceChange;
InheritanceChanged.Invoke( false ); InheritanceChanged.Invoke( false );
PluginLog.Debug( "Added {InheritedName:l} to {Name:l} inheritances.", collection.Name, Name );
return true; return true;
} }
@ -94,6 +92,7 @@ public partial class ModCollection
inheritance.InheritanceChanged -= OnInheritedInheritanceChange; inheritance.InheritanceChanged -= OnInheritedInheritanceChange;
_inheritance.RemoveAt( idx ); _inheritance.RemoveAt( idx );
InheritanceChanged.Invoke( false ); InheritanceChanged.Invoke( false );
PluginLog.Debug( "Removed {InheritedName:l} from {Name:l} inheritances.", inheritance.Name, Name );
} }
// Order in the inheritance list is relevant. // Order in the inheritance list is relevant.
@ -102,6 +101,7 @@ public partial class ModCollection
if( _inheritance.Move( from, to ) ) if( _inheritance.Move( from, to ) )
{ {
InheritanceChanged.Invoke( false ); InheritanceChanged.Invoke( false );
PluginLog.Debug( "Moved {Name:l}s inheritance {From} to {To}.", Name, from, to );
} }
} }

View file

@ -112,6 +112,7 @@ public unsafe class CharacterUtility : IDisposable
{ {
ResetResource( idx ); ResetResource( idx );
} }
PluginLog.Debug( "Reset all CharacterUtility resources to default." );
} }
public void Dispose() public void Dispose()

View file

@ -1,4 +1,5 @@
using System; using System;
using Dalamud.Logging;
using Dalamud.Utility.Signatures; using Dalamud.Utility.Signatures;
using FFXIVClientStructs.FFXIV.Client.System.Resource; using FFXIVClientStructs.FFXIV.Client.System.Resource;
using Penumbra.Collections; using Penumbra.Collections;
@ -70,9 +71,10 @@ public partial class PathResolver : IDisposable
EnableMetaHooks(); EnableMetaHooks();
_loader.ResolvePathCustomization += CharacterResolver; _loader.ResolvePathCustomization += CharacterResolver;
PluginLog.Debug( "Character Path Resolver enabled." );
} }
public void Disable() private void Disable()
{ {
if( !Enabled ) if( !Enabled )
{ {
@ -90,6 +92,7 @@ public partial class PathResolver : IDisposable
PathCollections.Clear(); PathCollections.Clear();
_loader.ResolvePathCustomization -= CharacterResolver; _loader.ResolvePathCustomization -= CharacterResolver;
PluginLog.Debug( "Character Path Resolver disabled." );
} }
public void Dispose() public void Dispose()

View file

@ -33,6 +33,7 @@ public partial class Mod
try try
{ {
Directory.Delete( mod.BasePath.FullName, true ); Directory.Delete( mod.BasePath.FullName, true );
PluginLog.Debug( "Deleted directory {Directory:l} for {Name:l}.", mod.BasePath.FullName, mod.Name );
} }
catch( Exception e ) catch( Exception e )
{ {
@ -47,6 +48,7 @@ public partial class Mod
} }
ModPathChanged.Invoke( ModPathChangeType.Deleted, mod, mod.BasePath, null ); ModPathChanged.Invoke( ModPathChangeType.Deleted, mod, mod.BasePath, null );
PluginLog.Debug( "Deleted mod {Name:l}.", mod.Name );
} }
// Load a new mod and add it to the manager if successful. // Load a new mod and add it to the manager if successful.
@ -66,6 +68,7 @@ public partial class Mod
mod.Index = _mods.Count; mod.Index = _mods.Count;
_mods.Add( mod ); _mods.Add( mod );
ModPathChanged.Invoke( ModPathChangeType.Added, mod, null, mod.BasePath ); ModPathChanged.Invoke( ModPathChangeType.Added, mod, null, mod.BasePath );
PluginLog.Debug( "Added new mod {Name:l} from {Directory:l}.", mod.Name, modFolder.FullName );
} }
// Add new mods to NewMods and remove deleted mods from NewMods. // Add new mods to NewMods and remove deleted mods from NewMods.

View file

@ -56,6 +56,7 @@ public sealed partial class Mod
Valid = Directory.Exists( newDir.FullName ); Valid = Directory.Exists( newDir.FullName );
if( Penumbra.Config.ModDirectory != BasePath.FullName ) if( Penumbra.Config.ModDirectory != BasePath.FullName )
{ {
PluginLog.Information( "Set new mod base directory from {OldDirectory:l} to {NewDirectory:l}.", Penumbra.Config.ModDirectory, BasePath.FullName );
Penumbra.Config.ModDirectory = BasePath.FullName; Penumbra.Config.ModDirectory = BasePath.FullName;
Penumbra.Config.Save(); Penumbra.Config.Save();
} }
@ -86,6 +87,7 @@ public sealed partial class Mod
} }
ModDiscoveryFinished?.Invoke(); ModDiscoveryFinished?.Invoke();
PluginLog.Information( "Rediscovered mods." );
} }
} }
} }

View file

@ -67,7 +67,7 @@ public partial class Mod
{ {
var group = new MultiModGroup() var group = new MultiModGroup()
{ {
Name = groupData.GroupName!, Name = groupData.GroupName,
Description = desc, Description = desc,
Priority = priority, Priority = priority,
}; };
@ -79,7 +79,7 @@ public partial class Mod
{ {
var group = new SingleModGroup() var group = new SingleModGroup()
{ {
Name = groupData.GroupName!, Name = groupData.GroupName,
Description = desc, Description = desc,
Priority = priority, Priority = priority,
}; };
@ -97,9 +97,9 @@ public partial class Mod
.Select( f => ( Utf8GamePath.FromFile( f, optionFolder, out var gamePath, true ), gamePath, new FullPath( f ) ) ) .Select( f => ( Utf8GamePath.FromFile( f, optionFolder, out var gamePath, true ), gamePath, new FullPath( f ) ) )
.Where( t => t.Item1 ); .Where( t => t.Item1 );
var mod = new SubMod() var mod = new SubMod
{ {
Name = option.Name!, Name = option.Name,
}; };
foreach( var (_, gamePath, file) in list ) foreach( var (_, gamePath, file) in list )
{ {

View file

@ -2,6 +2,7 @@ using System;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using Dalamud.Logging;
using OtterGui.Filesystem; using OtterGui.Filesystem;
namespace Penumbra.Mods; namespace Penumbra.Mods;
@ -14,8 +15,11 @@ public sealed class ModFileSystem : FileSystem< Mod >, IDisposable
// Save the current sort order. // Save the current sort order.
// Does not save or copy the backup in the current mod directory, // Does not save or copy the backup in the current mod directory,
// as this is done on mod directory changes only. // as this is done on mod directory changes only.
public void Save() private void Save()
=> SaveToFile( new FileInfo( ModFileSystemFile ), SaveMod, true ); {
SaveToFile( new FileInfo( ModFileSystemFile ), SaveMod, true );
PluginLog.Verbose( "Saved mod filesystem." );
}
// Create a new ModFileSystem from the currently loaded mods and the current sort order file. // Create a new ModFileSystem from the currently loaded mods and the current sort order file.
public static ModFileSystem Load() public static ModFileSystem Load()
@ -46,6 +50,7 @@ public sealed class ModFileSystem : FileSystem< Mod >, IDisposable
{ {
Save(); Save();
} }
PluginLog.Debug( "Reloaded mod filesystem." );
} }
// Save the filesystem on every filesystem change except full reloading. // Save the filesystem on every filesystem change except full reloading.

View file

@ -48,6 +48,7 @@ public interface IModGroup : IEnumerable< ISubMod >
try try
{ {
File.Delete( file ); File.Delete( file );
PluginLog.Debug( "Deleted group file {File:l} for {GroupName:l}.", file, Name );
} }
catch( Exception e ) catch( Exception e )
{ {
@ -81,6 +82,7 @@ public interface IModGroup : IEnumerable< ISubMod >
j.WriteEndArray(); j.WriteEndArray();
j.WriteEndObject(); j.WriteEndObject();
PluginLog.Debug( "Saved group file {File:l} for {GroupName:l}.", file, group.Name );
} }
public IModGroup Convert( SelectType type ); public IModGroup Convert( SelectType type );

View file

@ -338,6 +338,7 @@ public sealed partial class ModFileSystemSelector : FileSystemSelector< Mod, Mod
{ {
base.SelectedLeaf = ( ModFileSystem.Leaf? )FileSystem.Root.GetAllDescendants( SortMode.Lexicographical ) base.SelectedLeaf = ( ModFileSystem.Leaf? )FileSystem.Root.GetAllDescendants( SortMode.Lexicographical )
.FirstOrDefault( l => l is ModFileSystem.Leaf m && m.Value.BasePath.FullName == _lastSelectedDirectory ); .FirstOrDefault( l => l is ModFileSystem.Leaf m && m.Value.BasePath.FullName == _lastSelectedDirectory );
OnSelectionChange( null, base.SelectedLeaf?.Value, default );
_lastSelectedDirectory = string.Empty; _lastSelectedDirectory = string.Empty;
} }
} }

View file

@ -6,6 +6,7 @@ using Penumbra.Mods;
using Penumbra.UI.Classes; using Penumbra.UI.Classes;
using System; using System;
using System.Numerics; using System.Numerics;
using Dalamud.Logging;
namespace Penumbra.UI; namespace Penumbra.UI;
@ -18,21 +19,36 @@ public partial class ConfigWindow
return; return;
} }
using var tab = ImRaii.TabItem( "Mods" ); try
if( !tab )
{ {
return; using var tab = ImRaii.TabItem( "Mods" );
if( !tab )
{
return;
}
_selector.Draw( GetModSelectorSize() );
ImGui.SameLine();
using var group = ImRaii.Group();
DrawHeaderLine();
using var child = ImRaii.Child( "##ModsTabMod", -Vector2.One, true, ImGuiWindowFlags.HorizontalScrollbar );
if( child )
{
_modPanel.Draw( _selector );
}
} }
catch( Exception e )
_selector.Draw( GetModSelectorSize() );
ImGui.SameLine();
using var group = ImRaii.Group();
DrawHeaderLine();
using var child = ImRaii.Child( "##ModsTabMod", -Vector2.One, true, ImGuiWindowFlags.HorizontalScrollbar );
if( child )
{ {
_modPanel.Draw( _selector ); PluginLog.Error($"Exception thrown during ModPanel Render:\n{e}" );
PluginLog.Error($"{Penumbra.ModManager.Count} Mods\n"
+ $"{Penumbra.CollectionManager.Current.Name} Current Collection\n"
+ $"{Penumbra.CollectionManager.Current.Settings.Count} Settings\n"
+ $"{_selector.SortMode} Sort Mode\n"
+ $"{_selector.SelectedLeaf?.Name ?? "NULL"} Selected Leaf\n"
+ $"{_selector.Selected?.Name ?? "NULL"} Selected Mod\n"
+ $"{string.Join(", ", Penumbra.CollectionManager.Current.Inheritance)} Inheritances\n"
+ $"{_selector.SelectedSettingCollection.Name} Collection\n");
} }
} }

View file

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Numerics; using System.Numerics;
using Dalamud.Interface; using Dalamud.Interface;
using Dalamud.Interface.Windowing; using Dalamud.Interface.Windowing;
using Dalamud.Logging;
using ImGuiNET; using ImGuiNET;
using OtterGui.Raii; using OtterGui.Raii;
using Penumbra.Mods; using Penumbra.Mods;
@ -27,7 +28,7 @@ public sealed partial class ConfigWindow : Window, IDisposable
{ {
_penumbra = penumbra; _penumbra = penumbra;
_settingsTab = new SettingsTab( this ); _settingsTab = new SettingsTab( this );
_selector = new ModFileSystemSelector( _penumbra.ModFileSystem ); _selector = new ModFileSystemSelector( _penumbra.ModFileSystem );
_modPanel = new ModPanel( this ); _modPanel = new ModPanel( this );
_collectionsTab = new CollectionsTab( this ); _collectionsTab = new CollectionsTab( this );
_effectiveTab = new EffectiveTab(); _effectiveTab = new EffectiveTab();
@ -47,15 +48,22 @@ public sealed partial class ConfigWindow : Window, IDisposable
public override void Draw() public override void Draw()
{ {
using var bar = ImRaii.TabBar( string.Empty, ImGuiTabBarFlags.NoTooltip ); try
SetupSizes(); {
_settingsTab.Draw(); using var bar = ImRaii.TabBar( string.Empty, ImGuiTabBarFlags.NoTooltip );
DrawModsTab(); SetupSizes();
_collectionsTab.Draw(); _settingsTab.Draw();
DrawChangedItemTab(); DrawModsTab();
_effectiveTab.Draw(); _collectionsTab.Draw();
_debugTab.Draw(); DrawChangedItemTab();
_resourceTab.Draw(); _effectiveTab.Draw();
_debugTab.Draw();
_resourceTab.Draw();
}
catch( Exception e )
{
PluginLog.Error( $"Exception thrown during UI Render:\n{e}" );
}
} }
public void Dispose() public void Dispose()