-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMod.cs
127 lines (109 loc) · 3.94 KB
/
Mod.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
using ReactiveUI;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reactive.Linq;
using System.Text;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Shapes;
namespace MO2ExportImport
{
public class Mod : ReactiveObject
{
private bool _selectedInUI;
private const string _separatorSuffix = "_separator";
private const string _separatorDispString = "-----";
private const string _noDeleteString = "[NoDelete]";
public ModListing SourceListing { get; set; }
public string SourceDirectoryName { get; set; } = string.Empty;
public string DisplayName { get; set; } = string.Empty;
public bool IsSeparator { get; set; } = false;
public bool IsNoDelete { get; set; } = false;
public string? NoDeleteIndex { get; set; } = null;
public bool EnabledInExportedModList { get; set; } = false;
public bool SelectedInUI
{
get => _selectedInUI;
set => this.RaiseAndSetIfChanged(ref _selectedInUI, value);
}
public Mod(string listingEntry)
{
SourceListing = new ModListing(listingEntry);
Initialize();
}
public Mod(ModListing listingObject)
{
SourceListing = listingObject;
Initialize();
}
public Mod(Mod copyTemplate)
{
SourceListing = new ModListing(copyTemplate.SourceListing.GetCurrentEntryString());
SourceDirectoryName = copyTemplate.SourceDirectoryName;
DisplayName = copyTemplate.DisplayName;
IsSeparator = copyTemplate.IsSeparator;
IsNoDelete = copyTemplate.IsNoDelete;
NoDeleteIndex = copyTemplate.NoDeleteIndex;
EnabledInExportedModList = copyTemplate.EnabledInExportedModList;
}
private void Initialize()
{
DisplayName = SourceListing.GetCurrentFolderName();
SourceDirectoryName = SourceListing.GetCurrentFolderName();
IsSeparator = SourceListing.Name.EndsWith(_separatorSuffix, StringComparison.OrdinalIgnoreCase);
if (IsSeparator)
{
DisplayName = StringExtensions.RemoveAtEnd(DisplayName, _separatorSuffix).Trim();
DisplayName = _separatorDispString + DisplayName + _separatorDispString;
}
IsNoDelete = SourceListing.IsNoDelete;
if (IsNoDelete)
{
// Extract the NoDeleteIndex if it exists
if (SourceListing.NoDeletePrefix.StartsWith("[") && SourceListing.NoDeletePrefix.Contains("]"))
{
int endIndex = SourceListing.NoDeletePrefix.IndexOf("]");
NoDeleteIndex = SourceListing.NoDeletePrefix.Substring(1, endIndex - 1); // Get the string between the brackets
}
}
EnabledInExportedModList = SourceListing.Enabled ?? false;
}
public Mod() // for json deserialization
{
}
public override string ToString()
{
return DisplayName;
}
public void MakeNoDelete()
{
if (!IsNoDelete)
{
SourceListing.MakeNoDelete();
IsNoDelete = true;
}
}
public void RemoveNoDelete()
{
if (IsNoDelete)
{
SourceListing.RemoveNoDelete();
IsNoDelete = false;
}
}
public string GetDestinationName()
{
return FormatHandler.TrimModActivationStatus(SourceListing.GetCurrentEntryString());
}
public bool IsEnabled()
{
return SourceListing.Enabled.HasValue && SourceListing.Enabled.Value;
}
public void SetPrefix(string prefix)
{
SourceListing.SetPrefix(prefix);
}
}
}