Compare commits
14 Commits
0.1.8
...
legacy-mit
Author | SHA1 | Date | |
---|---|---|---|
9e5398105e | |||
7c2f5445e1 | |||
ed4630cd51 | |||
ac231ef800 | |||
a3f5ee766a | |||
a697301895
|
|||
27a09aa420 | |||
86cb7d2221 | |||
bbf79bacac
|
|||
91d4cf8532 | |||
df7e6b2a51 | |||
b9ce34bf10 | |||
267fb2d25c | |||
291f005888
|
@@ -122,24 +122,24 @@ public sealed class CacheMonitor : DisposableMediatorSubscriberBase
|
||||
|
||||
public bool StorageisNTFS { get; private set; } = false;
|
||||
|
||||
public void StartMareWatcher(string? marePath)
|
||||
public void StartMareWatcher(string? snowPath)
|
||||
{
|
||||
MareWatcher?.Dispose();
|
||||
if (string.IsNullOrEmpty(marePath) || !Directory.Exists(marePath))
|
||||
if (string.IsNullOrEmpty(snowPath) || !Directory.Exists(snowPath))
|
||||
{
|
||||
MareWatcher = null;
|
||||
Logger.LogWarning("Mare file path is not set, cannot start the FSW for Mare.");
|
||||
Logger.LogWarning("Snowcloak file path is not set, cannot start the FSW for Snowcloak.");
|
||||
return;
|
||||
}
|
||||
|
||||
DriveInfo di = new(new DirectoryInfo(_configService.Current.CacheFolder).Root.FullName);
|
||||
StorageisNTFS = string.Equals("NTFS", di.DriveFormat, StringComparison.OrdinalIgnoreCase);
|
||||
Logger.LogInformation("Mare Storage is on NTFS drive: {isNtfs}", StorageisNTFS);
|
||||
Logger.LogInformation("Snowcloak Storage is on NTFS drive: {isNtfs}", StorageisNTFS);
|
||||
|
||||
Logger.LogDebug("Initializing Mare FSW on {path}", marePath);
|
||||
Logger.LogDebug("Initializing Mare FSW on {path}", snowPath);
|
||||
MareWatcher = new()
|
||||
{
|
||||
Path = marePath,
|
||||
Path = snowPath,
|
||||
InternalBufferSize = 8388608,
|
||||
NotifyFilter = NotifyFilters.CreationTime
|
||||
| NotifyFilters.LastWrite
|
||||
@@ -161,7 +161,7 @@ public sealed class CacheMonitor : DisposableMediatorSubscriberBase
|
||||
if (string.IsNullOrEmpty(substPath))
|
||||
{
|
||||
SubstWatcher = null;
|
||||
Logger.LogWarning("Mare file path is not set, cannot start the FSW for Mare.");
|
||||
Logger.LogWarning("Snowcloak file path is not set, cannot start the FSW for Snowcloak.");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -197,7 +197,7 @@ public sealed class CacheMonitor : DisposableMediatorSubscriberBase
|
||||
|
||||
private void MareWatcher_FileChanged(object sender, FileSystemEventArgs e)
|
||||
{
|
||||
Logger.LogTrace("Mare FSW: FileChanged: {change} => {path}", e.ChangeType, e.FullPath);
|
||||
Logger.LogTrace("Snowcloak FSW: FileChanged: {change} => {path}", e.ChangeType, e.FullPath);
|
||||
|
||||
if (!AllowedFileExtensions.Any(ext => e.FullPath.EndsWith(ext, StringComparison.OrdinalIgnoreCase))) return;
|
||||
|
||||
|
@@ -114,7 +114,7 @@ public sealed class IpcCallerPenumbra : DisposableMediatorSubscriberBase, IIpcCa
|
||||
bool penumbraAvailable = false;
|
||||
try
|
||||
{
|
||||
penumbraAvailable = _pluginLoaded && _pluginVersion >= new Version(1, 0, 1, 0);
|
||||
penumbraAvailable = _pluginLoaded && _pluginVersion >= new Version(1, 5, 1, 0);
|
||||
try
|
||||
{
|
||||
penumbraAvailable &= _penumbraEnabled.Invoke();
|
||||
|
@@ -8,6 +8,6 @@ public static class ConfigurationExtensions
|
||||
{
|
||||
return configuration.AcceptedAgreement && configuration.InitialScanComplete
|
||||
&& !string.IsNullOrEmpty(configuration.CacheFolder)
|
||||
&& Directory.Exists(configuration.CacheFolder);
|
||||
&& Directory.Exists(configuration.CacheFolder) && configuration.AcceptedTOSVersion == configuration.ExpectedTOSVersion;
|
||||
}
|
||||
}
|
@@ -7,6 +7,8 @@ namespace MareSynchronos.MareConfiguration.Configurations;
|
||||
[Serializable]
|
||||
public class MareConfig : IMareConfiguration
|
||||
{
|
||||
public int ExpectedTOSVersion = 2;
|
||||
public int AcceptedTOSVersion { get; set; } = 0;
|
||||
public bool AcceptedAgreement { get; set; } = false;
|
||||
public string CacheFolder { get; set; } = string.Empty;
|
||||
public bool DisableOptionalPluginWarnings { get; set; } = false;
|
||||
|
@@ -7,9 +7,9 @@ public class PlayerPerformanceConfig : IMareConfiguration
|
||||
public int Version { get; set; } = 1;
|
||||
public bool AutoPausePlayersExceedingThresholds { get; set; } = true;
|
||||
public bool NotifyAutoPauseDirectPairs { get; set; } = true;
|
||||
public bool NotifyAutoPauseGroupPairs { get; set; } = false;
|
||||
public bool NotifyAutoPauseGroupPairs { get; set; } = true;
|
||||
public int VRAMSizeAutoPauseThresholdMiB { get; set; } = 500;
|
||||
public int TrisAutoPauseThresholdThousands { get; set; } = 175;
|
||||
public int TrisAutoPauseThresholdThousands { get; set; } = 400;
|
||||
public bool IgnoreDirectPairs { get; set; } = true;
|
||||
public TextureShrinkMode TextureShrinkMode { get; set; } = TextureShrinkMode.Default;
|
||||
public bool TextureShrinkDeleteOriginal { get; set; } = false;
|
||||
|
@@ -2,7 +2,7 @@
|
||||
<Project Sdk="Dalamud.NET.Sdk/13.0.0">
|
||||
<PropertyGroup>
|
||||
<AssemblyName>Snowcloak</AssemblyName>
|
||||
<Version>0.1.8</Version>
|
||||
<Version>0.1.8.1</Version>
|
||||
<PackageProjectUrl>https://github.com/Eauldane/SnowcloakClient/</PackageProjectUrl>
|
||||
</PropertyGroup>
|
||||
|
||||
|
@@ -86,7 +86,7 @@ public class Pair : DisposableMediatorSubscriberBase
|
||||
{
|
||||
Name = name,
|
||||
OnClicked = action,
|
||||
PrefixColor = 304, //TODO: Figure out the colour table
|
||||
PrefixColor = 526,
|
||||
PrefixChar = 'S'
|
||||
});
|
||||
}
|
||||
|
@@ -8,7 +8,7 @@
|
||||
"Tags": [
|
||||
"customization"
|
||||
],
|
||||
"IconUrl": "https://i.imgur.com/cMKeOjm.jpeg",
|
||||
"IconUrl": "https://raw.githubusercontent.com/Eauldane/SnowcloakClient/refs/heads/main/MareSynchronos/images/logo.png",
|
||||
"RepoUrl": "https://github.com/Eauldane/SnowcloakClient",
|
||||
"CanUnloadAsync": true
|
||||
}
|
||||
|
@@ -105,7 +105,7 @@ public class CompactUi : WindowMediatorSubscriberBase
|
||||
protected override void DrawInternal()
|
||||
{
|
||||
if (_serverManager.CurrentApiUrl.Equals(ApiController.SnowcloakServiceUri, StringComparison.Ordinal))
|
||||
UiSharedService.AccentColor = new Vector4(1.0f, 0.8666f, 0.06666f, 1.0f);
|
||||
UiSharedService.AccentColor = new(0.4275f, 0.6863f, 1f, 1f);
|
||||
else
|
||||
UiSharedService.AccentColor = ImGuiColors.ParsedGreen;
|
||||
ImGui.SetCursorPosY(ImGui.GetCursorPosY() - ImGui.GetStyle().WindowPadding.Y - 1f * ImGuiHelpers.GlobalScale + ImGui.GetStyle().ItemSpacing.Y);
|
||||
|
@@ -106,8 +106,9 @@ public partial class IntroUi : WindowMediatorSubscriberBase
|
||||
{
|
||||
if (_uiShared.IsInGpose) return;
|
||||
|
||||
if (!_configService.Current.AcceptedAgreement && !_readFirstPage)
|
||||
if ((!_configService.Current.AcceptedAgreement || _configService.Current.AcceptedTOSVersion != _configService.Current.ExpectedTOSVersion) && !_readFirstPage)
|
||||
{
|
||||
// TODO: The UI bugs hard if this page *isn't* shown before the new TOS. There's probably a way around it.
|
||||
_uiShared.BigText("Welcome to Snowcloak");
|
||||
ImGui.Separator();
|
||||
UiSharedService.TextWrapped("Snowcloak is a plugin that will replicate your full current character state including all Penumbra mods to other paired users. " +
|
||||
@@ -125,7 +126,7 @@ public partial class IntroUi : WindowMediatorSubscriberBase
|
||||
#if !DEBUG
|
||||
_timeoutTask = Task.Run(async () =>
|
||||
{
|
||||
for (int i = 10; i > 0; i--)
|
||||
for (int i = 45; i > 0; i--)
|
||||
{
|
||||
_timeoutLabel = $"'I agree' button will be available in {i}s";
|
||||
await Task.Delay(TimeSpan.FromSeconds(1)).ConfigureAwait(false);
|
||||
@@ -136,7 +137,7 @@ public partial class IntroUi : WindowMediatorSubscriberBase
|
||||
#endif
|
||||
}
|
||||
}
|
||||
else if (!_configService.Current.AcceptedAgreement && _readFirstPage)
|
||||
else if ((!_configService.Current.AcceptedAgreement || _configService.Current.AcceptedTOSVersion != _configService.Current.ExpectedTOSVersion) && _readFirstPage)
|
||||
{
|
||||
using (_uiShared.UidFont.Push())
|
||||
{
|
||||
@@ -152,6 +153,9 @@ public partial class IntroUi : WindowMediatorSubscriberBase
|
||||
ImGui.SetWindowFontScale(1.0f);
|
||||
ImGui.Separator();
|
||||
|
||||
UiSharedService.TextWrapped("""
|
||||
To use Snowcloak, you must be over the age of 18, or 21 in some jurisdictions.
|
||||
""");
|
||||
UiSharedService.TextWrapped("""
|
||||
All of the mod files currently active on your character as well as your current character state will be uploaded to the service you registered yourself at automatically. The plugin will exclusively upload the necessary mod files and not the whole mod.
|
||||
""");
|
||||
@@ -186,6 +190,7 @@ public partial class IntroUi : WindowMediatorSubscriberBase
|
||||
if (ImGui.Button("I agree##toSetup"))
|
||||
{
|
||||
_configService.Current.AcceptedAgreement = true;
|
||||
_configService.Current.AcceptedTOSVersion = _configService.Current.ExpectedTOSVersion;
|
||||
_configService.Save();
|
||||
}
|
||||
}
|
||||
@@ -194,7 +199,7 @@ public partial class IntroUi : WindowMediatorSubscriberBase
|
||||
UiSharedService.TextWrapped(_timeoutLabel);
|
||||
}
|
||||
}
|
||||
else if (_configService.Current.AcceptedAgreement
|
||||
else if ((!_configService.Current.AcceptedAgreement || _configService.Current.AcceptedTOSVersion != _configService.Current.ExpectedTOSVersion)
|
||||
&& (string.IsNullOrEmpty(_configService.Current.CacheFolder)
|
||||
|| !_configService.Current.InitialScanComplete
|
||||
|| !Directory.Exists(_configService.Current.CacheFolder)))
|
||||
|
@@ -581,32 +581,32 @@ public class SettingsUi : WindowMediatorSubscriberBase
|
||||
_uiShared.BigText("Advanced");
|
||||
|
||||
bool mareApi = _configService.Current.MareAPI;
|
||||
if (ImGui.Checkbox("Enable Mare Synchronos API", ref mareApi))
|
||||
if (ImGui.Checkbox("Enable Snowcloak Sync API", ref mareApi))
|
||||
{
|
||||
_configService.Current.MareAPI = mareApi;
|
||||
_configService.Save();
|
||||
_ipcProvider.HandleMareImpersonation();
|
||||
}
|
||||
_uiShared.DrawHelpText("Enables handling of the Mare Synchronos API. This currently includes:\n\n" +
|
||||
_uiShared.DrawHelpText("Enables handling of the Snowcloak Sync API. This currently includes:\n\n" +
|
||||
" - MCDF loading support for other plugins\n" +
|
||||
" - Blocking Moodles applications to paired users\n\n" +
|
||||
"If the Mare Synchronos plugin is loaded while this option is enabled, control of its API will be relinquished.");
|
||||
"If the Snowcloak Sync plugin is loaded while this option is enabled, control of its API will be relinquished.");
|
||||
|
||||
using (_ = ImRaii.PushIndent())
|
||||
{
|
||||
ImGui.SameLine(300.0f * ImGuiHelpers.GlobalScale);
|
||||
if (_ipcProvider.ImpersonationActive)
|
||||
{
|
||||
UiSharedService.ColorTextWrapped("Mare API active!", ImGuiColors.HealerGreen);
|
||||
UiSharedService.ColorTextWrapped("Snowcloak API active!", ImGuiColors.HealerGreen);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!mareApi)
|
||||
UiSharedService.ColorTextWrapped("Mare API inactive: Option is disabled", ImGuiColors.DalamudYellow);
|
||||
UiSharedService.ColorTextWrapped("Snowcloak API inactive: Option is disabled", ImGuiColors.DalamudYellow);
|
||||
else if (_ipcProvider.MarePluginEnabled)
|
||||
UiSharedService.ColorTextWrapped("Mare API inactive: Mare plugin is loaded", ImGuiColors.DalamudYellow);
|
||||
UiSharedService.ColorTextWrapped("Snowcloak API inactive: Snowcloak plugin is loaded", ImGuiColors.DalamudYellow);
|
||||
else
|
||||
UiSharedService.ColorTextWrapped("Mare API inactive: Unknown reason", ImGuiColors.DalamudRed);
|
||||
UiSharedService.ColorTextWrapped("Snowcloak API inactive: Unknown reason", ImGuiColors.DalamudRed);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -1,5 +1,6 @@
|
||||
# Snowcloak Sync
|
||||
|
||||
Come in from the cold, and be your true self.
|
||||
The snow may cloak the world in silence, but come in, warm up, and reveal your true colours.
|
||||
|
||||
A Dalamud plugin.
|
||||
|
||||
[](https://discord.gg/snowcloak)
|
||||
|
Reference in New Issue
Block a user