Add local data, favorites and tags.

This commit is contained in:
Ottermandias 2022-10-19 01:01:40 +02:00
parent b9662e39a9
commit ccfc05f2b2
19 changed files with 481 additions and 94 deletions

View file

@ -58,6 +58,7 @@ public partial class Mod
return;
}
MoveDataFile( oldDirectory, BasePath );
new ModBackup( mod ).Move( null, dir.Name );
dir.Refresh();
@ -69,9 +70,9 @@ public partial class Mod
}
ModPathChanged.Invoke( ModPathChangeType.Moved, mod, oldDirectory, BasePath );
if( metaChange != MetaChangeType.None )
if( metaChange != ModDataChangeType.None )
{
ModMetaChanged?.Invoke( metaChange, mod, oldName );
ModDataChanged?.Invoke( metaChange, mod, oldName );
}
}
@ -94,9 +95,9 @@ public partial class Mod
}
ModPathChanged.Invoke( ModPathChangeType.Reloaded, mod, mod.ModPath, mod.ModPath );
if( metaChange != MetaChangeType.None )
if( metaChange != ModDataChangeType.None )
{
ModMetaChanged?.Invoke( metaChange, mod, oldName );
ModDataChanged?.Invoke( metaChange, mod, oldName );
}
}
@ -211,6 +212,13 @@ public partial class Mod
break;
case ModPathChangeType.Deleted:
NewMods.Remove( mod );
break;
case ModPathChangeType.Moved:
if( oldDirectory != null && newDirectory != null )
{
MoveDataFile( oldDirectory, newDirectory );
}
break;
}
}

View file

@ -0,0 +1,75 @@
using System;
using System.Collections.Generic;
using System.Linq;
using ImGuiScene;
namespace Penumbra.Mods;
public sealed partial class Mod
{
public partial class Manager
{
public void ChangeModFavorite( Index idx, bool state )
{
var mod = this[ idx ];
if( mod.Favorite != state )
{
mod.Favorite = state;
mod.SaveLocalData();
ModDataChanged?.Invoke( ModDataChangeType.Favorite, mod, null );
}
}
public void ChangeModNote( Index idx, string newNote )
{
var mod = this[ idx ];
if( mod.Note != newNote )
{
mod.Note = newNote;
mod.SaveLocalData();
ModDataChanged?.Invoke( ModDataChangeType.Favorite, mod, null );
}
}
private void ChangeTag( Index idx, int tagIdx, string newTag, bool local )
{
var mod = this[ idx ];
var which = local ? mod.LocalTags : mod.ModTags;
if( tagIdx < 0 || tagIdx > which.Count )
{
return;
}
ModDataChangeType flags = 0;
if( tagIdx == which.Count )
{
flags = mod.UpdateTags( local ? null : which.Append( newTag ), local ? which.Append( newTag ) : null );
}
else
{
var tmp = which.ToArray();
tmp[ tagIdx ] = newTag;
flags = mod.UpdateTags( local ? null : tmp, local ? tmp : null );
}
if( flags.HasFlag( ModDataChangeType.ModTags ) )
{
mod.SaveMeta();
}
if( flags.HasFlag( ModDataChangeType.LocalTags ) )
{
mod.SaveLocalData();
}
if( flags != 0 )
{
ModDataChanged?.Invoke( flags, mod, null );
}
}
public void ChangeLocalTag( Index idx, int tagIdx, string newTag )
=> ChangeTag( idx, tagIdx, newTag, true );
}
}

View file

@ -6,8 +6,8 @@ public sealed partial class Mod
{
public partial class Manager
{
public delegate void ModMetaChangeDelegate( MetaChangeType type, Mod mod, string? oldName );
public event ModMetaChangeDelegate? ModMetaChanged;
public delegate void ModDataChangeDelegate( ModDataChangeType type, Mod mod, string? oldName );
public event ModDataChangeDelegate? ModDataChanged;
public void ChangeModName( Index idx, string newName )
{
@ -17,7 +17,7 @@ public sealed partial class Mod
var oldName = mod.Name;
mod.Name = newName;
mod.SaveMeta();
ModMetaChanged?.Invoke( MetaChangeType.Name, mod, oldName.Text );
ModDataChanged?.Invoke( ModDataChangeType.Name, mod, oldName.Text );
}
}
@ -28,7 +28,7 @@ public sealed partial class Mod
{
mod.Author = newAuthor;
mod.SaveMeta();
ModMetaChanged?.Invoke( MetaChangeType.Author, mod, null );
ModDataChanged?.Invoke( ModDataChangeType.Author, mod, null );
}
}
@ -39,7 +39,7 @@ public sealed partial class Mod
{
mod.Description = newDescription;
mod.SaveMeta();
ModMetaChanged?.Invoke( MetaChangeType.Description, mod, null );
ModDataChanged?.Invoke( ModDataChangeType.Description, mod, null );
}
}
@ -50,7 +50,7 @@ public sealed partial class Mod
{
mod.Version = newVersion;
mod.SaveMeta();
ModMetaChanged?.Invoke( MetaChangeType.Version, mod, null );
ModDataChanged?.Invoke( ModDataChangeType.Version, mod, null );
}
}
@ -61,8 +61,11 @@ public sealed partial class Mod
{
mod.Website = newWebsite;
mod.SaveMeta();
ModMetaChanged?.Invoke( MetaChangeType.Website, mod, null );
ModDataChanged?.Invoke( ModDataChangeType.Website, mod, null );
}
}
public void ChangeModTag( Index idx, int tagIdx, string newTag )
=> ChangeTag( idx, tagIdx, newTag, false );
}
}