- Change Loporrit Branding to CLUBPENGUIN

- Update submodules
- Update to latest Penumbra API
This commit is contained in:
2025-08-26 21:42:00 +01:00
committed by Rawrington
parent bef5b1be34
commit b41532d5af
38 changed files with 176 additions and 146 deletions

View File

@@ -4,6 +4,10 @@ Microsoft Visual Studio Solution File, Format Version 12.00
VisualStudioVersion = 17.1.32328.378
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MareSynchronos", "MareSynchronos\MareSynchronos.csproj", "{13C812E9-0D42-4B95-8646-40EEBF30636F}"
ProjectSection(ProjectDependencies) = postProject
{7A858094-ABEF-424B-9133-7CFC9B03B9E4} = {7A858094-ABEF-424B-9133-7CFC9B03B9E4}
{8A8069A2-31D7-4158-B29C-479F17FEFBB7} = {8A8069A2-31D7-4158-B29C-479F17FEFBB7}
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MareSynchronos.API", "MareAPI\MareSynchronosAPI\MareSynchronos.API.csproj", "{5A0B7434-8D89-4E90-B55C-B4A7AE1A6ADE}"
EndProject
@@ -12,6 +16,12 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
.editorconfig = .editorconfig
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Glamourer.Api", "Glamourer.Api\Glamourer.Api.csproj", "{8A8069A2-31D7-4158-B29C-479F17FEFBB7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Penumbra.Api", "Penumbra.Api\Penumbra.Api.csproj", "{7A858094-ABEF-424B-9133-7CFC9B03B9E4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Chaos.NaCl", "BunnyWhispers\Chaos.NaCl\Chaos.NaCl.csproj", "{C4E4A934-A1CD-4CF7-B31E-4F0782BA8458}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -36,6 +46,30 @@ Global
{5A0B7434-8D89-4E90-B55C-B4A7AE1A6ADE}.Release|Any CPU.Build.0 = Release|Any CPU
{5A0B7434-8D89-4E90-B55C-B4A7AE1A6ADE}.Release|x64.ActiveCfg = Release|Any CPU
{5A0B7434-8D89-4E90-B55C-B4A7AE1A6ADE}.Release|x64.Build.0 = Release|Any CPU
{8A8069A2-31D7-4158-B29C-479F17FEFBB7}.Debug|Any CPU.ActiveCfg = Debug|x64
{8A8069A2-31D7-4158-B29C-479F17FEFBB7}.Debug|Any CPU.Build.0 = Debug|x64
{8A8069A2-31D7-4158-B29C-479F17FEFBB7}.Debug|x64.ActiveCfg = Debug|x64
{8A8069A2-31D7-4158-B29C-479F17FEFBB7}.Debug|x64.Build.0 = Debug|x64
{8A8069A2-31D7-4158-B29C-479F17FEFBB7}.Release|Any CPU.ActiveCfg = Release|x64
{8A8069A2-31D7-4158-B29C-479F17FEFBB7}.Release|Any CPU.Build.0 = Release|x64
{8A8069A2-31D7-4158-B29C-479F17FEFBB7}.Release|x64.ActiveCfg = Release|x64
{8A8069A2-31D7-4158-B29C-479F17FEFBB7}.Release|x64.Build.0 = Release|x64
{7A858094-ABEF-424B-9133-7CFC9B03B9E4}.Debug|Any CPU.ActiveCfg = Debug|x64
{7A858094-ABEF-424B-9133-7CFC9B03B9E4}.Debug|Any CPU.Build.0 = Debug|x64
{7A858094-ABEF-424B-9133-7CFC9B03B9E4}.Debug|x64.ActiveCfg = Debug|x64
{7A858094-ABEF-424B-9133-7CFC9B03B9E4}.Debug|x64.Build.0 = Debug|x64
{7A858094-ABEF-424B-9133-7CFC9B03B9E4}.Release|Any CPU.ActiveCfg = Release|x64
{7A858094-ABEF-424B-9133-7CFC9B03B9E4}.Release|Any CPU.Build.0 = Release|x64
{7A858094-ABEF-424B-9133-7CFC9B03B9E4}.Release|x64.ActiveCfg = Release|x64
{7A858094-ABEF-424B-9133-7CFC9B03B9E4}.Release|x64.Build.0 = Release|x64
{C4E4A934-A1CD-4CF7-B31E-4F0782BA8458}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C4E4A934-A1CD-4CF7-B31E-4F0782BA8458}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C4E4A934-A1CD-4CF7-B31E-4F0782BA8458}.Debug|x64.ActiveCfg = Debug|Any CPU
{C4E4A934-A1CD-4CF7-B31E-4F0782BA8458}.Debug|x64.Build.0 = Debug|Any CPU
{C4E4A934-A1CD-4CF7-B31E-4F0782BA8458}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C4E4A934-A1CD-4CF7-B31E-4F0782BA8458}.Release|Any CPU.Build.0 = Release|Any CPU
{C4E4A934-A1CD-4CF7-B31E-4F0782BA8458}.Release|x64.ActiveCfg = Release|Any CPU
{C4E4A934-A1CD-4CF7-B31E-4F0782BA8458}.Release|x64.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@@ -631,7 +631,7 @@ public sealed class CacheMonitor : DisposableMediatorSubscriberBase
if (string.IsNullOrEmpty(_configService.Current.CacheFolder) || !Directory.Exists(_configService.Current.CacheFolder))
{
cacheDirExists = false;
Logger.LogWarning("Loporrit Cache directory is not set or does not exist.");
Logger.LogWarning("Club Penguin Cache directory is not set or does not exist.");
}
if (!penDirExists || !cacheDirExists)
{

View File

@@ -465,7 +465,7 @@ public sealed class FileCacheManager : IHostedService
if (!_ipcManager.Penumbra.APIAvailable || string.IsNullOrEmpty(_ipcManager.Penumbra.ModDirectory))
{
_mareMediator.Publish(new NotificationMessage("Penumbra not connected",
"Could not load local file cache data. Penumbra is not connected or not properly set up. Please enable and/or configure Penumbra properly to use Loporrit. After, reload Loporrit in the Plugin installer.",
"Could not load local file cache data. Penumbra is not connected or not properly set up. Please enable and/or configure Penumbra properly to use Club Penguin Sync. After, reload Club Penguin Sync in the Plugin installer.",
MareConfiguration.Models.NotificationType.Error));
}

View File

@@ -109,7 +109,7 @@ public sealed class IpcCallerGlamourer : DisposableMediatorSubscriberBase, IIpcC
if (!apiAvailable && !_shownGlamourerUnavailable)
{
_shownGlamourerUnavailable = true;
_mareMediator.Publish(new NotificationMessage("Glamourer inactive", "Your Glamourer installation is not active or out of date. Update Glamourer to continue to use Loporrit. If you just updated Glamourer, ignore this message.",
_mareMediator.Publish(new NotificationMessage("Glamourer inactive", "Your Glamourer installation is not active or out of date. Update Glamourer to continue to use Club Penguin Sync. If you just updated Glamourer, ignore this message.",
NotificationType.Error));
}
}

View File

@@ -8,6 +8,7 @@ using Penumbra.Api.Enums;
using Penumbra.Api.Helpers;
using Penumbra.Api.IpcSubscribers;
using System.Collections.Concurrent;
using System.Security.Principal;
namespace MareSynchronos.Interop.Ipc;
@@ -91,9 +92,9 @@ public sealed class IpcCallerPenumbra : DisposableMediatorSubscriberBase, IIpcCa
Mediator.SubscribeKeyed<PluginChangeMessage>(this, "Penumbra", (msg) =>
{
_pluginLoaded = msg.IsLoaded;
_pluginVersion = msg.Version;
CheckAPI();
_pluginLoaded = msg.IsLoaded;
_pluginVersion = msg.Version;
CheckAPI();
});
CheckAPI();
@@ -114,7 +115,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();
@@ -136,7 +137,7 @@ public sealed class IpcCallerPenumbra : DisposableMediatorSubscriberBase, IIpcCa
{
_shownPenumbraUnavailable = true;
_mareMediator.Publish(new NotificationMessage("Penumbra inactive",
"Your Penumbra installation is not active or out of date. Update Penumbra and/or the Enable Mods setting in Penumbra to continue to use Loporrit. If you just updated Penumbra, ignore this message.",
"Your Penumbra installation is not active or out of date. Update Penumbra and/or the Enable Mods setting in Penumbra to continue to use Club Penguin Sync. If you just updated Penumbra, ignore this message.",
NotificationType.Error));
}
}
@@ -219,14 +220,29 @@ public sealed class IpcCallerPenumbra : DisposableMediatorSubscriberBase, IIpcCa
}).ConfigureAwait(false);
}
private static Random rng = new();
public async Task<Guid> CreateTemporaryCollectionAsync(ILogger logger, string uid)
{
if (!APIAvailable) return Guid.Empty;
var identity = "ClubPenguin";
return await _dalamudUtil.RunOnFrameworkThread(() =>
{
var collName = "Loporrit_" + uid;
var collId = _penumbraCreateNamedTemporaryCollection.Invoke(collName);
var collName = identity + "_" + uid;
var ec = _penumbraCreateNamedTemporaryCollection.Invoke(identity, collName, out var collId);
if (ec == PenumbraApiEc.InvalidCredentials)
{
for (int i = 0; i < 5; ++i)
{
var tmp = Guid.NewGuid().ToString().Replace("-", "").Substring(0, 8 + rng.Next() % 6);
logger.LogWarning("Identity = {identity}", identity);
ec = _penumbraCreateNamedTemporaryCollection.Invoke(tmp, collName, out collId);
if (ec != PenumbraApiEc.InvalidCredentials)
break;
}
}
logger.LogTrace("Creating Temp Collection {collName}, GUID: {collId}", collName, collId);
return collId;

View File

@@ -69,11 +69,11 @@ public class IpcProvider : IHostedService, IMediatorSubscriber
public Task StartAsync(CancellationToken cancellationToken)
{
_logger.LogDebug("Starting IpcProvider Service");
_loadFileProvider = _pi.GetIpcProvider<string, IGameObject, bool>("LoporritSync.LoadMcdf");
_loadFileProvider = _pi.GetIpcProvider<string, IGameObject, bool>("ClubPenguinSync.LoadMcdf");
_loadFileProvider.RegisterFunc(LoadMcdf);
_loadFileAsyncProvider = _pi.GetIpcProvider<string, IGameObject, Task<bool>>("LoporritSync.LoadMcdfAsync");
_loadFileAsyncProvider = _pi.GetIpcProvider<string, IGameObject, Task<bool>>("ClubPenguinSync.LoadMcdfAsync");
_loadFileAsyncProvider.RegisterFunc(LoadMcdfAsync);
_handledGameAddresses = _pi.GetIpcProvider<List<nint>>("LoporritSync.GetHandledAddresses");
_handledGameAddresses = _pi.GetIpcProvider<List<nint>>("ClubPenguinSync.GetHandledAddresses");
_handledGameAddresses.RegisterFunc(GetHandledAddresses);
_loadFileProviderMare = _pi.GetIpcProvider<string, IGameObject, bool>("MareSynchronos.LoadMcdf");

View File

@@ -1,14 +0,0 @@
{
"Author": "Huggingway",
"Name": "Loporrit Sync",
"Punchline": "Social modding for everyone!",
"Description": "This plugin will synchronize your Penumbra mods and current Glamourer state with other paired clients automatically.",
"InternalName": "LoporritSync",
"ApplicableVersion": "any",
"Tags": [
"customization"
],
"IconUrl": "https://raw.githubusercontent.com/loporrit/MareClient/way4/MareSynchronos/images/icon.png",
"RepoUrl": "https://github.com/loporrit/MareClient/",
"CanUnloadAsync": true
}

View File

@@ -10,7 +10,7 @@ public class ServerConfig : IMareConfiguration
public List<ServerStorage> ServerStorage { get; set; } = new()
{
{ new ServerStorage() { ServerName = ApiController.LoporritServer, ServerUri = ApiController.LoporritServiceUri } },
{ new ServerStorage() { ServerName = ApiController.ClubPenguinServer, ServerUri = ApiController.ClubPenguinServiceUri } },
};
public int Version { get; set; } = 1;

View File

@@ -89,9 +89,9 @@ public class MarePlugin : MediatorSubscriberBase, IHostedService
public Task StartAsync(CancellationToken cancellationToken)
{
var version = Assembly.GetExecutingAssembly().GetName().Version!;
Logger.LogInformation("Launching {name} {major}.{minor}.{build}.{rev}", "Loporrit Sync", version.Major, version.Minor, version.Build, version.Revision);
Logger.LogInformation("Launching {name} {major}.{minor}.{build}.{rev}", "Club Penguin Sync", version.Major, version.Minor, version.Build, version.Revision);
Mediator.Publish(new EventMessage(new Services.Events.Event(nameof(MarePlugin), Services.Events.EventSeverity.Informational,
$"Starting Loporrit Sync {version.Major}.{version.Minor}.{version.Build}.{version.Revision}")));
$"Starting Club Penguin Sync {version.Major}.{version.Minor}.{version.Build}.{version.Revision}")));
Mediator.Subscribe<SwitchToMainUiMessage>(this, (msg) => { if (_launchTask == null || _launchTask.IsCompleted) _launchTask = Task.Run(WaitForPlayerAndLaunchCharacterManager); });
Mediator.Subscribe<DalamudLoginMessage>(this, (_) => DalamudUtilOnLogIn());
@@ -115,7 +115,7 @@ public class MarePlugin : MediatorSubscriberBase, IHostedService
private void DalamudUtilOnLogIn()
{
LoporritSync.Plugin.Self.ToggleFileLogging(_mareConfigService.Current.LogTraceLog, "Login");
ClubPenguinSync.Plugin.Self.ToggleFileLogging(_mareConfigService.Current.LogTraceLog, "Login");
Logger?.LogDebug("Client login");
if (_launchTask == null || _launchTask.IsCompleted) _launchTask = Task.Run(WaitForPlayerAndLaunchCharacterManager);
}
@@ -125,7 +125,7 @@ public class MarePlugin : MediatorSubscriberBase, IHostedService
Logger?.LogDebug("Client logout");
_runtimeServiceScope?.Dispose();
LoporritSync.Plugin.Self.ToggleFileLogging(true, "Logout");
ClubPenguinSync.Plugin.Self.ToggleFileLogging(true, "Logout");
}
private async Task WaitForPlayerAndLaunchCharacterManager()

View File

@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Dalamud.NET.Sdk/13.0.0">
<PropertyGroup>
<AssemblyName>LoporritSync</AssemblyName>
<Version>9.9.0</Version>
<PackageProjectUrl>https://github.com/loporrit/MareClient/</PackageProjectUrl>
<AssemblyName>ClubPenguinSync</AssemblyName>
<Version>1.7.0.0</Version>
<PackageProjectUrl>https://github.com/Rawrington/ClubPenguinSync/</PackageProjectUrl>
</PropertyGroup>
<ItemGroup>
@@ -30,23 +30,7 @@
</PackageReference>
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="8.7.0" />
</ItemGroup>
<ItemGroup Condition="Exists('..\Penumbra.Api\Penumbra.Api.csproj')">
<ProjectReference Include="..\Penumbra.Api\Penumbra.Api.csproj" />
</ItemGroup>
<ItemGroup Condition="!Exists('..\Penumbra.Api\Penumbra.Api.csproj')">
<PackageReference Include="Penumbra.Api" Version="5.6.1" />
</ItemGroup>
<ItemGroup Condition="Exists('..\Glamourer.Api\Glamourer.Api.csproj')">
<ProjectReference Include="..\Glamourer.Api\Glamourer.Api.csproj" />
</ItemGroup>
<ItemGroup Condition="!Exists('..\Glamourer.Api\Glamourer.Api.csproj')">
<PackageReference Include="Glamourer.Api" Version="2.4.1" />
</ItemGroup>
<PropertyGroup>
<SourceRevisionId>build$([System.DateTime]::UtcNow.ToString("yyyy-MM-ddTHH:mm:ss:fffZ"))</SourceRevisionId>
<ImplicitUsings>enable</ImplicitUsings>
@@ -55,6 +39,8 @@
<ItemGroup>
<ProjectReference Include="..\MareAPI\MareSynchronosAPI\MareSynchronos.API.csproj" />
<ProjectReference Include="..\BunnyWhispers\Chaos.NaCl\Chaos.NaCl.csproj" />
<ProjectReference Include="..\Penumbra.Api\Penumbra.Api.csproj" />
<ProjectReference Include="..\Glamourer.Api\Glamourer.Api.csproj" />
</ItemGroup>
<ItemGroup>

View File

@@ -729,6 +729,7 @@ public sealed class PairHandler : DisposableMediatorSubscriberBase
if (_deferred != Guid.Empty)
{
_isVisible = true;
Mediator.Publish(new PairHandlerVisibleMessage(this));
_ = Task.Run(() =>
{
ApplyCharacterData(_deferred, _cachedData!, forceApplyCustomization: true);

View File

@@ -133,8 +133,8 @@ public class Pair : DisposableMediatorSubscriberBase
{
Name = name,
OnClicked = action,
PrefixColor = 559,
PrefixChar = 'L'
PrefixColor = 529,
PrefixChar = 'C'
});
}

View File

@@ -29,7 +29,7 @@ using NReco.Logging.File;
using MareSynchronos;
namespace LoporritSync;
namespace ClubPenguinSync;
public sealed class Plugin : IDalamudPlugin
{
@@ -41,7 +41,7 @@ public sealed class Plugin : IDalamudPlugin
#pragma warning restore CA2211, CS8618, MA0069, S1104, S2223
public Action<IFramework>? RealOnFrameworkUpdate { get; set; }
// Proxy function in the LoporritSync namespace to avoid confusion in /xlstats
// Proxy function in the ClubPenguinSync namespace to avoid confusion in /xlstats
public void OnFrameworkUpdate(IFramework framework)
{
RealOnFrameworkUpdate?.Invoke(framework);
@@ -100,7 +100,7 @@ public sealed class Plugin : IDalamudPlugin
})
.ConfigureServices(collection =>
{
collection.AddSingleton(new WindowSystem("LoporritSync"));
collection.AddSingleton(new WindowSystem("ClubPenguinSync"));
collection.AddSingleton<FileDialogManager>();
// add dalamud services

View File

@@ -207,7 +207,7 @@ public class ChatService : DisposableMediatorSubscriberBase
}
}
_chatGui.PrintError($"[LoporritSync] Syncshell number #{shellNumber} not found");
_chatGui.PrintError($"[ClubPenguinSync] Syncshell number #{shellNumber} not found");
}
public void SendChatShell(int shellNumber, byte[] chatBytes)
@@ -236,6 +236,6 @@ public class ChatService : DisposableMediatorSubscriberBase
}
}
_chatGui.PrintError($"[LoporritSync] Syncshell number #{shellNumber} not found");
_chatGui.PrintError($"[ClubPenguinSync] Syncshell number #{shellNumber} not found");
}
}

View File

@@ -15,7 +15,7 @@ namespace MareSynchronos.Services;
public sealed class CommandManagerService : IDisposable
{
private const string _commandName = "/sync";
private const string _commandName2 = "/loporrit";
private const string _commandName2 = "/clubpenguin";
private const string _ssCommandPrefix = "/ss";
@@ -42,11 +42,11 @@ public sealed class CommandManagerService : IDisposable
_mareConfigService = mareConfigService;
_commandManager.AddHandler(_commandName, new CommandInfo(OnCommand)
{
HelpMessage = "Opens the Loporrit UI"
HelpMessage = "Opens the Club Penguin Sync UI"
});
_commandManager.AddHandler(_commandName2, new CommandInfo(OnCommand)
{
HelpMessage = "Opens the Loporrit UI"
HelpMessage = "Opens the Club Penguin Sync UI"
});
// Lazy registration of all possible /ss# commands which tbf is what the game does for linkshells anyway
@@ -86,7 +86,7 @@ public sealed class CommandManagerService : IDisposable
{
if (_apiController.ServerState == WebAPI.SignalR.Utils.ServerState.Disconnecting)
{
_mediator.Publish(new NotificationMessage("Loporrit disconnecting", "Cannot use /toggle while Loporrit is still disconnecting",
_mediator.Publish(new NotificationMessage("Club Penguin Sync disconnecting", "Cannot use /toggle while Club Penguin Sync is still disconnecting",
NotificationType.Error));
}

View File

@@ -468,9 +468,9 @@ public class DalamudUtilService : IHostedService, IMediatorSubscriber
{
_logger.LogInformation("Starting DalamudUtilService");
#pragma warning disable S2696 // Instance members should not write to "static" fields
LoporritSync.Plugin.Self.RealOnFrameworkUpdate = this.FrameworkOnUpdate;
ClubPenguinSync.Plugin.Self.RealOnFrameworkUpdate = this.FrameworkOnUpdate;
#pragma warning restore S2696
_framework.Update += LoporritSync.Plugin.Self.OnFrameworkUpdate;
_framework.Update += ClubPenguinSync.Plugin.Self.OnFrameworkUpdate;
if (IsLoggedIn)
{
_classJobId = _clientState.LocalPlayer!.ClassJob.RowId;
@@ -485,7 +485,7 @@ public class DalamudUtilService : IHostedService, IMediatorSubscriber
_logger.LogTrace("Stopping {type}", GetType());
Mediator.UnsubscribeAll(this);
_framework.Update -= LoporritSync.Plugin.Self.OnFrameworkUpdate;
_framework.Update -= ClubPenguinSync.Plugin.Self.OnFrameworkUpdate;
return Task.CompletedTask;
}

View File

@@ -20,9 +20,9 @@ public sealed class NoSnapService : IHostedService, IMediatorSubscriber
private readonly IDalamudPluginInterface _pluginInterface;
private readonly Dictionary<string, bool> _listOfPlugins = new(StringComparer.Ordinal)
{
["Snapper"] = false,
["Snappy"] = false,
["Meddle.Plugin"] = false,
["QQSnapper"] = false,
["QQSnappy"] = false,
["QQMeddle.Plugin"] = false,
};
private static readonly HashSet<int> _gposers = new();
private static readonly HashSet<string> _gposersNamed = new(StringComparer.Ordinal);

View File

@@ -41,19 +41,19 @@ public class NotificationService : DisposableMediatorSubscriberBase, IHostedServ
private void PrintErrorChat(string? message)
{
SeStringBuilder se = new SeStringBuilder().AddText("[LoporritSync] Error: " + message);
SeStringBuilder se = new SeStringBuilder().AddText("[ClubPenguinSync] Error: " + message);
_chatGui.PrintError(se.BuiltString);
}
private void PrintInfoChat(string? message)
{
SeStringBuilder se = new SeStringBuilder().AddText("[LoporritSync] Info: ").AddItalics(message ?? string.Empty);
SeStringBuilder se = new SeStringBuilder().AddText("[ClubPenguinSync] Info: ").AddItalics(message ?? string.Empty);
_chatGui.Print(se.BuiltString);
}
private void PrintWarnChat(string? message)
{
SeStringBuilder se = new SeStringBuilder().AddText("[LoporritSync] ").AddUiForeground("Warning: " + (message ?? string.Empty), 31).AddUiForegroundOff();
SeStringBuilder se = new SeStringBuilder().AddText("[ClubPenguinSync] ").AddUiForeground("Warning: " + (message ?? string.Empty), 31).AddUiForegroundOff();
_chatGui.Print(se.BuiltString);
}

View File

@@ -14,12 +14,12 @@ public sealed class RemoteConfigurationService
{
private readonly static Dictionary<string, string> ConfigPublicKeys = new(StringComparer.Ordinal)
{
{ "4D6633E0", "GWRoAiXP9lcn9/34wGgziYcqQH8f6zWtZrRyp66Ekso=" },
{ "3PC5J4C4", "rhUOaY2Y7doUY0GDmOEgM5CoyzxLqCjOpsdO6O+rTjE=" },
};
private readonly static string[] ConfigSources = [
"https://plugin.lop-sync.com/config/config.json",
"https://plugin.lop-sync.net/config/config.json",
"https://clubpenguin.drgn.rocks/config.json",
"https://clubpenguin.drgn.rocks/config.json",
];
private readonly ILogger<RemoteConfigurationService> _logger;
@@ -172,6 +172,12 @@ public sealed class RemoteConfigurationService
byte[] pub = Convert.FromBase64String(pubKey);
return Ed25519.Verify(sig, msg, pub);
}
private static byte[] SignForMe(string message, ulong ts, byte[] privKey)
{
byte[] msg = [.. BitConverter.GetBytes(ts), .. Encoding.UTF8.GetBytes(message)];
return Ed25519.Sign(msg, privKey);
}
private void LoadConfig(JsonObject jsonDoc)
{
@@ -185,6 +191,7 @@ public sealed class RemoteConfigurationService
var signatures = jsonDoc["sig"]!.AsObject();
var configString = jsonDoc["config"]!.GetValue<string>();
bool verified = signatures.Any(sig =>
ConfigPublicKeys.TryGetValue(sig.Key, out var pubKey) &&
VerifySignature(configString, ts, sig.Value!.GetValue<string>(), pubKey));

View File

@@ -500,13 +500,13 @@ public class ServerConfigurationManager
for (int i = 0; i < _configService.Current.ServerStorage.Count; ++i)
{
var x = _configService.Current.ServerStorage[i];
if (x.ServerUri.Equals(ApiController.LoporritServiceUri, StringComparison.OrdinalIgnoreCase))
if (x.ServerUri.Equals(ApiController.ClubPenguinServiceUri, StringComparison.OrdinalIgnoreCase))
lopExists = true;
}
if (!lopExists)
{
_logger.LogDebug("Re-adding missing server {uri}", ApiController.LoporritServiceUri);
_configService.Current.ServerStorage.Insert(0, new ServerStorage() { ServerUri = ApiController.LoporritServiceUri, ServerName = ApiController.LoporritServer });
_logger.LogDebug("Re-adding missing server {uri}", ApiController.ClubPenguinServiceUri);
_configService.Current.ServerStorage.Insert(0, new ServerStorage() { ServerUri = ApiController.ClubPenguinServiceUri, ServerName = ApiController.ClubPenguinServer });
if (_configService.Current.CurrentServer >= 0)
_configService.Current.CurrentServer++;
}

View File

@@ -79,7 +79,7 @@ internal sealed partial class CharaDataHubUi : WindowMediatorSubscriberBase
UiSharedService uiSharedService, ServerConfigurationManager serverConfigurationManager,
DalamudUtilService dalamudUtilService, FileDialogManager fileDialogManager, PairManager pairManager,
CharaDataGposeTogetherManager charaDataGposeTogetherManager)
: base(logger, mediator, "Loporrit Character Data Hub###LoporritCharaDataUI", performanceCollectorService)
: base(logger, mediator, "Club Penguin Character Data Hub###ClubPenguinSyncCharaDataUI", performanceCollectorService)
{
SetWindowSizeConstraints();

View File

@@ -60,7 +60,7 @@ public class CompactUi : WindowMediatorSubscriberBase
public CompactUi(ILogger<CompactUi> logger, UiSharedService uiShared, MareConfigService configService, ApiController apiController, PairManager pairManager, ChatService chatService,
ServerConfigurationManager serverManager, MareMediator mediator, FileUploadManager fileTransferManager, UidDisplayHandler uidDisplayHandler, CharaDataManager charaDataManager,
PerformanceCollectorService performanceCollectorService)
: base(logger, mediator, "###LoporritSyncMainUI", performanceCollectorService)
: base(logger, mediator, "###ClubPenguinSyncMainUI", performanceCollectorService)
{
_uiSharedService = uiShared;
_configService = configService;
@@ -80,11 +80,11 @@ public class CompactUi : WindowMediatorSubscriberBase
#if DEBUG
string dev = "Dev Build";
var ver = Assembly.GetExecutingAssembly().GetName().Version!;
WindowName = $"Loporrit Sync {dev} ({ver.Major}.{ver.Minor}.{ver.Build}.{ver.Revision})###LoporritSyncMainUIDev";
WindowName = $"Club PenguinS ync {dev} ({ver.Major}.{ver.Minor}.{ver.Build}.{ver.Revision})###ClubPenguinSyncMainUIDev";
Toggle();
#else
var ver = Assembly.GetExecutingAssembly().GetName().Version!;
WindowName = $"Loporrit Sync {ver.Major}.{ver.Minor}.{ver.Build}.{ver.Revision}###LoporritSyncMainUI";
WindowName = $"Club Penguin Sync {ver.Major}.{ver.Minor}.{ver.Build}.{ver.Revision}###ClubPenguinSyncMainUI";
#endif
Mediator.Subscribe<SwitchToMainUiMessage>(this, (_) => IsOpen = true);
Mediator.Subscribe<SwitchToIntroUiMessage>(this, (_) => IsOpen = false);
@@ -104,7 +104,7 @@ public class CompactUi : WindowMediatorSubscriberBase
protected override void DrawInternal()
{
if (_serverManager.CurrentApiUrl.Equals(ApiController.LoporritServiceUri, StringComparison.Ordinal))
if (_serverManager.CurrentApiUrl.Equals(ApiController.ClubPenguinServiceUri, StringComparison.Ordinal))
UiSharedService.AccentColor = new Vector4(1.0f, 0.8666f, 0.06666f, 1.0f);
else
UiSharedService.AccentColor = ImGuiColors.ParsedGreen;
@@ -121,8 +121,8 @@ public class CompactUi : WindowMediatorSubscriberBase
ImGui.AlignTextToFramePadding();
ImGui.TextColored(ImGuiColors.DalamudRed, unsupported);
}
UiSharedService.ColorTextWrapped($"Your Loporrit installation is out of date, the current version is {ver.Major}.{ver.Minor}.{ver.Build}. " +
$"It is highly recommended to keep Loporrit up to date. Open /xlplugins and update the plugin.", ImGuiColors.DalamudRed);
UiSharedService.ColorTextWrapped($"Your Club Penguin Sync installation is out of date, the current version is {ver.Major}.{ver.Minor}.{ver.Build}. " +
$"It is highly recommended to keep Club Penguin Sync up to date. Open /xlplugins and update the plugin.", ImGuiColors.DalamudRed);
}
using (ImRaii.PushId("header")) DrawUIDHeader();
@@ -525,7 +525,7 @@ public class CompactUi : WindowMediatorSubscriberBase
{
Mediator.Publish(new OpenSettingsUiMessage());
}
UiSharedService.AttachToolTip("Open the Loporrit Settings");
UiSharedService.AttachToolTip("Open the Club Penguin Sync Settings");
ImGui.SameLine(); //Important to draw the uidText consistently
ImGui.SetCursorPos(originalPos);

View File

@@ -165,10 +165,10 @@ public class DataAnalysisUi : WindowMediatorSubscriberBase
UiSharedService.DrawTree("What is this? (Explanation / Help)", () =>
{
UiSharedService.TextWrapped("This tab allows you to see which transient files are attached to your character.");
UiSharedService.TextWrapped("Transient files are files that cannot be resolved to your character permanently. Loporrit gathers these files in the background while you execute animations, VFX, sound effects, etc.");
UiSharedService.TextWrapped("When sending your character data to others, Loporrit will combine the files listed in \"All Jobs\" and the corresponding currently used job.");
UiSharedService.TextWrapped("Transient files are files that cannot be resolved to your character permanently. Club Penguin Sync gathers these files in the background while you execute animations, VFX, sound effects, etc.");
UiSharedService.TextWrapped("When sending your character data to others, Club Penguin Sync will combine the files listed in \"All Jobs\" and the corresponding currently used job.");
UiSharedService.TextWrapped("The purpose of this tab is primarily informational for you to see which files you are carrying with you. You can remove added game paths, however if you are using the animations etc. again, "
+ "Loporrit will automatically attach these after using them. If you disable associated mods in Penumbra, the associated entries here will also be deleted automatically.");
+ "Club Penguin Sync will automatically attach these after using them. If you disable associated mods in Penumbra, the associated entries here will also be deleted automatically.");
});
ImGuiHelpers.ScaledDummy(5);
@@ -365,7 +365,7 @@ public class DataAnalysisUi : WindowMediatorSubscriberBase
{
UiSharedService.TextWrapped("This tab allows you to attempt to fix mods that do not sync correctly, especially those with modded models and animations." + Environment.NewLine + Environment.NewLine
+ "To use this, start the recording, execute one or multiple emotes/animations you want to attempt to fix and check if new data appears in the table below." + Environment.NewLine
+ "If it doesn't, Loporrit is not able to catch the data or already has recorded the animation files (check 'Show previously added transient files' to see if not all is already present)." + Environment.NewLine + Environment.NewLine
+ "If it doesn't, Club Penguin Sync is not able to catch the data or already has recorded the animation files (check 'Show previously added transient files' to see if not all is already present)." + Environment.NewLine + Environment.NewLine
+ "For most animations, vfx, etc. it is enough to just run them once unless they have random variations. Longer animations do not require to play out in their entirety to be captured.");
ImGuiHelpers.ScaledDummy(5);
UiSharedService.DrawGroupedCenteredColorText("Important Note: If you need to fix an animation that should apply across multiple jobs, you need to repeat this process with at least one additional job, " +
@@ -405,7 +405,7 @@ public class DataAnalysisUi : WindowMediatorSubscriberBase
ImGuiHelpers.ScaledDummy(5);
ImGui.Checkbox("Show previously added transient files in the recording", ref _showAlreadyAddedTransients);
_uiSharedService.DrawHelpText("Use this only if you want to see what was previously already caught by Loporrit");
_uiSharedService.DrawHelpText("Use this only if you want to see what was previously already caught by Club Penguin Sync");
ImGuiHelpers.ScaledDummy(5);
using (ImRaii.Disabled(_transientResourceManager.IsTransientRecording || _transientResourceManager.RecordedTransients.All(k => !k.AddTransient) || !_acknowledgeReview))
@@ -475,7 +475,7 @@ public class DataAnalysisUi : WindowMediatorSubscriberBase
{
UiSharedService.DrawTree("What is this? (Explanation / Help)", () =>
{
UiSharedService.TextWrapped("This tab shows you all files and their sizes that are currently in use through your character and associated entities in Loporrit");
UiSharedService.TextWrapped("This tab shows you all files and their sizes that are currently in use through your character and associated entities in Club Penguin Sync");
});
if (_cachedAnalysis == null || _cachedAnalysis.Count == 0) return;

View File

@@ -23,7 +23,7 @@ public class DownloadUi : WindowMediatorSubscriberBase
public DownloadUi(ILogger<DownloadUi> logger, DalamudUtilService dalamudUtilService, MareConfigService configService,
FileUploadManager fileTransferManager, MareMediator mediator, UiSharedService uiShared, PerformanceCollectorService performanceCollectorService)
: base(logger, mediator, "Loporrit Downloads", performanceCollectorService)
: base(logger, mediator, "Club Penguin Sync Downloads", performanceCollectorService)
{
_dalamudUtilService = dalamudUtilService;
_configService = configService;

View File

@@ -104,7 +104,7 @@ public sealed class DtrEntry : IDisposable, IHostedService
private IDtrBarEntry CreateEntry()
{
_logger.LogTrace("Creating new DtrBar entry");
var entry = _dtrBar.Get("Loporrit");
var entry = _dtrBar.Get("ClubPenguinSync");
entry.OnClick = _ => _mareMediator.Publish(new UiToggleMessage(typeof(CompactUi)));
return entry;
@@ -163,19 +163,19 @@ public sealed class DtrEntry : IDisposable, IHostedService
.Select(x => string.Format("{0}", _configService.Current.PreferNoteInDtrTooltip ? x.GetNoteOrName() : x.PlayerName));
}
tooltip = $"Loporrit: Connected{Environment.NewLine}----------{Environment.NewLine}{string.Join(Environment.NewLine, visiblePairs)}";
tooltip = $"ClubPenguinSync: Connected{Environment.NewLine}----------{Environment.NewLine}{string.Join(Environment.NewLine, visiblePairs)}";
colors = _configService.Current.DtrColorsPairsInRange;
}
else
{
tooltip = "Loporrit: Connected";
tooltip = "ClubPenguinSync: Connected";
colors = _configService.Current.DtrColorsDefault;
}
}
else
{
text = RenderDtrStyle(_configService.Current.DtrStyle, "\uE04C");
tooltip = "Loporrit: Not Connected";
tooltip = "ClubPenguinSync: Not Connected";
colors = _configService.Current.DtrColorsNotConnected;
}

View File

@@ -35,7 +35,7 @@ public class EditProfileUi : WindowMediatorSubscriberBase
ApiController apiController, UiSharedService uiSharedService, FileDialogManager fileDialogManager,
ServerConfigurationManager serverConfigurationManager,
MareProfileManager mareProfileManager, PerformanceCollectorService performanceCollectorService)
: base(logger, mediator, "Loporrit Edit Profile###LoporritSyncEditProfileUI", performanceCollectorService)
: base(logger, mediator, "Club Penguin Sync Edit Profile###ClubPenguinSyncEditProfileUI", performanceCollectorService)
{
IsOpen = false;
this.SizeConstraints = new()
@@ -136,7 +136,7 @@ public class EditProfileUi : WindowMediatorSubscriberBase
using MemoryStream ms = new(fileContent);
var format = PngHdr.TryExtractDimensions(ms);
if (format.Width > 256 || format.Height > 256 || (fileContent.Length > 250 * 1024))
if (format.Width > 257 || format.Height > 257 || (fileContent.Length > 250 * 1024))
{
_showFileDialogError = true;
return;

View File

@@ -38,7 +38,7 @@ public partial class IntroUi : WindowMediatorSubscriberBase
public IntroUi(ILogger<IntroUi> logger, UiSharedService uiShared, MareConfigService configService,
CacheMonitor fileCacheManager, ServerConfigurationManager serverConfigurationManager, MareMediator mareMediator,
PerformanceCollectorService performanceCollectorService, DalamudUtilService dalamudUtilService, AccountRegistrationService registerService) : base(logger, mareMediator, "Loporrit Setup", performanceCollectorService)
PerformanceCollectorService performanceCollectorService, DalamudUtilService dalamudUtilService, AccountRegistrationService registerService) : base(logger, mareMediator, "Club Penguin Sync Setup", performanceCollectorService)
{
_uiShared = uiShared;
_configService = configService;
@@ -108,9 +108,9 @@ public partial class IntroUi : WindowMediatorSubscriberBase
if (!_configService.Current.AcceptedAgreement && !_readFirstPage)
{
_uiShared.BigText("Welcome to Loporrit");
_uiShared.BigText("Welcome to Club Penguin Sync");
ImGui.Separator();
UiSharedService.TextWrapped("Loporrit is a plugin that will replicate your full current character state including all Penumbra mods to other paired users. " +
UiSharedService.TextWrapped("Club Penguin Sync is a plugin that will replicate your full current character state including all Penumbra mods to other paired users. " +
"Note that you will have to have Penumbra as well as Glamourer installed to use this plugin.");
UiSharedService.TextWrapped("We will have to setup a few things first before you can start using this plugin. Click on next to continue.");
@@ -201,11 +201,11 @@ This service is provided as-is.
}
else
{
UiSharedService.TextWrapped("To not unnecessary download files already present on your computer, Loporrit will have to scan your Penumbra mod directory. " +
"Additionally, a local storage folder must be set where Loporrit will download other character files to. " +
UiSharedService.TextWrapped("To not unnecessary download files already present on your computer, Club Penguin Sync will have to scan your Penumbra mod directory. " +
"Additionally, a local storage folder must be set where Club Penguin Sync will download other character files to. " +
"Once the storage folder is set and the scan complete, this page will automatically forward to registration at a service.");
UiSharedService.TextWrapped("Note: The initial scan, depending on the amount of mods you have, might take a while. Please wait until it is completed.");
UiSharedService.ColorTextWrapped("Warning: once past this step you should not delete the FileCache.csv of Loporrit in the Plugin Configurations folder of Dalamud. " +
UiSharedService.ColorTextWrapped("Warning: once past this step you should not delete the FileCache.csv of Club Penguin Sync in the Plugin Configurations folder of Dalamud. " +
"Otherwise on the next launch a full re-scan of the file cache database will be initiated.", ImGuiColors.DalamudYellow);
UiSharedService.ColorTextWrapped("Warning: if the scan is hanging and does nothing for a long time, chances are high your Penumbra folder is not set up properly.", ImGuiColors.DalamudYellow);
_uiShared.DrawCacheDirectorySetting();
@@ -230,8 +230,8 @@ This service is provided as-is.
_configService.Current.UseCompactor = useFileCompactor;
_configService.Save();
}
UiSharedService.ColorTextWrapped("The File Compactor can save a tremendeous amount of space on the hard disk for downloads through Loporrit. It will incur a minor CPU penalty on download but can speed up " +
"loading of other characters. It is recommended to keep it enabled. You can change this setting later anytime in the Loporrit settings.", ImGuiColors.DalamudYellow);
UiSharedService.ColorTextWrapped("The File Compactor can save a tremendeous amount of space on the hard disk for downloads through Club Penguin Sync. It will incur a minor CPU penalty on download but can speed up " +
"loading of other characters. It is recommended to keep it enabled. You can change this setting later anytime in the Club Penguin Sync settings.", ImGuiColors.DalamudYellow);
}
}
else if (!_uiShared.ApiController.IsConnected)
@@ -239,7 +239,7 @@ This service is provided as-is.
using (_uiShared.UidFont.Push())
ImGui.TextUnformatted("Service Registration");
ImGui.Separator();
UiSharedService.TextWrapped("To be able to use Loporrit you will have to register an account.");
UiSharedService.TextWrapped("To be able to use Club Penguin Sync you will have to register an account.");
UiSharedService.TextWrapped("Refer to the instructions at the location you obtained this plugin for more information or support.");
ImGui.Separator();
@@ -251,8 +251,8 @@ This service is provided as-is.
{
ImGui.BeginDisabled(_registrationInProgress || _registrationSuccess || _secretKey.Length > 0);
ImGui.Separator();
ImGui.TextUnformatted("If you have not used Loporrit before, click below to register a new account.");
if (_uiShared.IconTextButton(FontAwesomeIcon.Plus, "Register a new Loporrit account"))
ImGui.TextUnformatted("If you have not used Club Penguin Sync before, click below to register a new account.");
if (_uiShared.IconTextButton(FontAwesomeIcon.Plus, "Register a new Club Penguin Sync account"))
{
_registrationInProgress = true;
_ = Task.Run(async () => {

View File

@@ -22,7 +22,7 @@ public class PermissionWindowUI : WindowMediatorSubscriberBase
public PermissionWindowUI(ILogger<PermissionWindowUI> logger, Pair pair, MareMediator mediator, UiSharedService uiSharedService,
ApiController apiController, PerformanceCollectorService performanceCollectorService)
: base(logger, mediator, "Permissions for " + pair.UserData.AliasOrUID + "###LoporritSyncPermissions" + pair.UserData.UID, performanceCollectorService)
: base(logger, mediator, "Permissions for " + pair.UserData.AliasOrUID + "###ClubPenguinSyncPermissions" + pair.UserData.UID, performanceCollectorService)
{
Pair = pair;
_uiSharedService = uiSharedService;

View File

@@ -24,7 +24,7 @@ public class PlayerAnalysisUI : WindowMediatorSubscriberBase
public PlayerAnalysisUI(ILogger<PlayerAnalysisUI> logger, Pair pair, MareMediator mediator, UiSharedService uiSharedService,
PerformanceCollectorService performanceCollectorService)
: base(logger, mediator, "Character Data Analysis for " + pair.UserData.AliasOrUID + "###LoporritPairAnalysis" + pair.UserData.UID, performanceCollectorService)
: base(logger, mediator, "Character Data Analysis for " + pair.UserData.AliasOrUID + "###ClubPenguinSyncPairAnalysis" + pair.UserData.UID, performanceCollectorService)
{
Pair = pair;
_uiSharedService = uiSharedService;

View File

@@ -29,7 +29,7 @@ public class PopoutProfileUi : WindowMediatorSubscriberBase
public PopoutProfileUi(ILogger<PopoutProfileUi> logger, MareMediator mediator, UiSharedService uiSharedService,
ServerConfigurationManager serverManager, MareConfigService mareConfigService,
MareProfileManager mareProfileManager, PairManager pairManager, PerformanceCollectorService performanceCollectorService) : base(logger, mediator, "###LoporritSyncPopoutProfileUI", performanceCollectorService)
MareProfileManager mareProfileManager, PairManager pairManager, PerformanceCollectorService performanceCollectorService) : base(logger, mediator, "###ClubPenguinSyncPopoutProfileUI", performanceCollectorService)
{
_uiSharedService = uiSharedService;
_serverManager = serverManager;

View File

@@ -77,7 +77,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
FileCacheManager fileCacheManager,
FileCompactor fileCompactor, ApiController apiController,
IpcManager ipcManager, IpcProvider ipcProvider, CacheMonitor cacheMonitor,
DalamudUtilService dalamudUtilService, AccountRegistrationService registerService) : base(logger, mediator, "Loporrit Settings", performanceCollector)
DalamudUtilService dalamudUtilService, AccountRegistrationService registerService) : base(logger, mediator, "Club Penguin Sync Settings", performanceCollector)
{
_configService = configService;
_pairManager = pairManager;
@@ -685,7 +685,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
{
_configService.Current.LogTraceLog = logTraceToFile;
_configService.Save();
LoporritSync.Plugin.Self.ToggleFileLogging(_configService.Current.LogTraceLog, "Setting Change");
ClubPenguinSync.Plugin.Self.ToggleFileLogging(_configService.Current.LogTraceLog, "Setting Change");
}
ImGui.SameLine(300.0f * ImGuiHelpers.GlobalScale);
@@ -756,7 +756,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
_uiShared.BigText("Storage");
UiSharedService.TextWrapped("Loporrit stores downloaded files from paired people permanently. This is to improve loading performance and requiring less downloads. " +
UiSharedService.TextWrapped("Club Penguin Sync stores downloaded files from paired people permanently. This is to improve loading performance and requiring less downloads. " +
"The storage governs itself by clearing data beyond the set storage size. Please set the storage size accordingly. It is not necessary to manually clear the storage.");
_uiShared.DrawFileScanState();
@@ -773,7 +773,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
}
ImGui.AlignTextToFramePadding();
ImGui.TextUnformatted("Monitoring Loporrit Storage Folder: " + (_cacheMonitor.MareWatcher?.Path ?? "Not monitoring"));
ImGui.TextUnformatted("Monitoring Club Penguin Sync Storage Folder: " + (_cacheMonitor.MareWatcher?.Path ?? "Not monitoring"));
if (string.IsNullOrEmpty(_cacheMonitor.MareWatcher?.Path))
{
ImGui.SameLine();
@@ -791,7 +791,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
_cacheMonitor.StartPenumbraWatcher(_ipcManager.Penumbra.ModDirectory);
_cacheMonitor.InvokeScan();
}
UiSharedService.AttachToolTip("Attempts to resume monitoring for both Penumbra and Loporrit Storage. "
UiSharedService.AttachToolTip("Attempts to resume monitoring for both Penumbra and Club Penguin Sync Storage. "
+ "Resuming the monitoring will also force a full scan to run." + Environment.NewLine
+ "If the button remains present after clicking it, consult /xllog for errors");
}
@@ -804,8 +804,8 @@ public class SettingsUi : WindowMediatorSubscriberBase
_cacheMonitor.StopMonitoring();
}
}
UiSharedService.AttachToolTip("Stops the monitoring for both Penumbra and Loporrit Storage. "
+ "Do not stop the monitoring, unless you plan to move the Penumbra and Loporrit Storage folders, to ensure correct functionality of Loporrit." + Environment.NewLine
UiSharedService.AttachToolTip("Stops the monitoring for both Penumbra and Club Penguin Sync Storage. "
+ "Do not stop the monitoring, unless you plan to move the Penumbra and Club Penguin Sync Storage folders, to ensure correct functionality of Club Penguin Sync." + Environment.NewLine
+ "If you stop the monitoring to move folders around, resume it after you are finished moving the files."
+ UiSharedService.TooltipSeparator + "Hold CTRL to enable this button");
}
@@ -822,7 +822,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
bool useFileCompactor = _configService.Current.UseCompactor;
if (!useFileCompactor && !isLinux)
{
UiSharedService.ColorTextWrapped("Hint: To free up space when using Loporrit consider enabling the File Compactor", ImGuiColors.DalamudYellow);
UiSharedService.ColorTextWrapped("Hint: To free up space when using Club Penguin Sync consider enabling the File Compactor", ImGuiColors.DalamudYellow);
}
if (isLinux || !_cacheMonitor.StorageisNTFS) ImGui.BeginDisabled();
if (ImGui.Checkbox("Use file compactor", ref useFileCompactor))
@@ -931,7 +931,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
}
UiSharedService.AttachToolTip("You normally do not need to do this. THIS IS NOT SOMETHING YOU SHOULD BE DOING TO TRY TO FIX SYNC ISSUES." + Environment.NewLine
+ "This will solely remove all downloaded data from all players and will require you to re-download everything again." + Environment.NewLine
+ "Loporrit's storage is self-clearing and will not surpass the limit you have set it to." + Environment.NewLine
+ "Club Penguin Sync's storage is self-clearing and will not surpass the limit you have set it to." + Environment.NewLine
+ "If you still think you need to do this hold CTRL while pressing the button.");
if (!_readClearCache)
ImGui.EndDisabled();
@@ -1003,14 +1003,14 @@ public class SettingsUi : WindowMediatorSubscriberBase
_configService.Current.EnableRightClickMenus = enableRightClickMenu;
_configService.Save();
}
_uiShared.DrawHelpText("This will add Loporrit related right click menu entries in the game UI on paired players.");
_uiShared.DrawHelpText("This will add Club Penguin Sync related right click menu entries in the game UI on paired players.");
if (ImGui.Checkbox("Display status and visible pair count in Server Info Bar", ref enableDtrEntry))
{
_configService.Current.EnableDtrEntry = enableDtrEntry;
_configService.Save();
}
_uiShared.DrawHelpText("This will add Loporrit connection status and visible pair count in the Server Info Bar.\nYou can further configure this through your Dalamud Settings.");
_uiShared.DrawHelpText("This will add Club Penguin Sync connection status and visible pair count in the Server Info Bar.\nYou can further configure this through your Dalamud Settings.");
using (ImRaii.Disabled(!enableDtrEntry))
{
@@ -1772,7 +1772,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
if (true) // Enable registration button for all servers
{
ImGui.SameLine();
if (_uiShared.IconTextButton(FontAwesomeIcon.Plus, "Register a new Loporrit account"))
if (_uiShared.IconTextButton(FontAwesomeIcon.Plus, "Register a new Club Penguin Sync account"))
{
_registrationInProgress = true;
_ = Task.Run(async () => {
@@ -1828,7 +1828,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
{
var serverName = selectedServer.ServerName;
var serverUri = selectedServer.ServerUri;
var isMain = string.Equals(serverName, ApiController.LoporritServer, StringComparison.OrdinalIgnoreCase);
var isMain = string.Equals(serverName, ApiController.ClubPenguinServer, StringComparison.OrdinalIgnoreCase);
var flags = isMain ? ImGuiInputTextFlags.ReadOnly : ImGuiInputTextFlags.None;
if (ImGui.InputText("Service URI", ref serverUri, 255, flags))

View File

@@ -26,7 +26,7 @@ public class StandaloneProfileUi : WindowMediatorSubscriberBase
public StandaloneProfileUi(ILogger<StandaloneProfileUi> logger, MareMediator mediator, UiSharedService uiBuilder,
ServerConfigurationManager serverManager, MareProfileManager mareProfileManager, PairManager pairManager, Pair pair,
PerformanceCollectorService performanceCollector)
: base(logger, mediator, "Profile of " + pair.UserData.AliasOrUID + "##LoporritSyncStandaloneProfileUI" + pair.UserData.AliasOrUID, performanceCollector)
: base(logger, mediator, "Profile of " + pair.UserData.AliasOrUID + "##ClubPenguinSyncStandaloneProfileUI" + pair.UserData.AliasOrUID, performanceCollector)
{
_uiSharedService = uiBuilder;
_serverManager = serverManager;

View File

@@ -535,7 +535,7 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase
public void DrawCacheDirectorySetting()
{
ColorTextWrapped("Note: The storage folder should be somewhere close to root (i.e. C:\\LoporritStorage) in a new empty folder. DO NOT point this to your game folder. DO NOT point this to your Penumbra folder.", ImGuiColors.DalamudYellow);
ColorTextWrapped("Note: The storage folder should be somewhere close to root (i.e. C:\\ClubPenguinSyncStorage) in a new empty folder. DO NOT point this to your game folder. DO NOT point this to your Penumbra folder.", ImGuiColors.DalamudYellow);
var cacheDirectory = _configService.Current.CacheFolder;
ImGui.SetNextItemWidth(400 * ImGuiHelpers.GlobalScale);
ImGui.InputText("Storage Folder##cache", ref cacheDirectory, 255, ImGuiInputTextFlags.ReadOnly);
@@ -545,7 +545,7 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase
{
if (IconButton(FontAwesomeIcon.Folder))
{
FileDialogManager.OpenFolderDialog("Pick Loporrit Storage Folder", (success, path) =>
FileDialogManager.OpenFolderDialog("Pick Club Penguin Sync Storage Folder", (success, path) =>
{
if (!success) return;
@@ -605,7 +605,7 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase
}
else if (_cacheDirectoryHasOtherFilesThanCache)
{
ColorTextWrapped("Your selected directory has files or directories inside that are not Loporrit related. Use an empty directory or a previous storage directory only.", ImGuiColors.DalamudRed);
ColorTextWrapped("Your selected directory has files or directories inside that are not Club Penguin Sync related. Use an empty directory or a previous storage directory only.", ImGuiColors.DalamudRed);
}
else if (!_cacheDirectoryIsValidPath)
{
@@ -620,7 +620,7 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase
_configService.Current.MaxLocalCacheInGiB = maxCacheSize;
_configService.Save();
}
DrawHelpText("The storage is automatically governed by Loporrit. It will clear itself automatically once it reaches the set capacity by removing the oldest unused files. You typically do not need to clear it yourself.");
DrawHelpText("The storage is automatically governed by Club Penguin Sync. It will clear itself automatically once it reaches the set capacity by removing the oldest unused files. You typically do not need to clear it yourself.");
}
public T? DrawCombo<T>(string comboName, IEnumerable<T> comboItems, Func<T, string> toName,
@@ -849,7 +849,7 @@ public partial class UiSharedService : DisposableMediatorSubscriberBase
if (!_penumbraExists || !_glamourerExists)
{
ImGui.TextColored(ImGuiColors.DalamudRed, "You need to install both Penumbra and Glamourer and keep them up to date to use Loporrit.");
ImGui.TextColored(ImGuiColors.DalamudRed, "You need to install both Penumbra and Glamourer and keep them up to date to use Club Penguin Sync.");
return false;
}
else if (NoSnapService.AnyLoaded)

View File

@@ -50,13 +50,13 @@ public sealed class AccountRegistrationService : IDisposable
var authApiUrl = _serverManager.CurrentApiUrl;
// Override the API URL used for auth from remote config, if one is available
if (authApiUrl.Equals(ApiController.LoporritServiceUri, StringComparison.Ordinal))
if (authApiUrl.Equals(ApiController.ClubPenguinServiceUri, StringComparison.Ordinal))
{
var config = await _remoteConfig.GetConfigAsync<HubConnectionConfig>("mainServer").ConfigureAwait(false) ?? new();
if (!string.IsNullOrEmpty(config.ApiUrl))
authApiUrl = config.ApiUrl;
else
authApiUrl = ApiController.LoporritServiceApiUri;
authApiUrl = ApiController.ClubPenguinServiceApiUri;
}
var secretKey = GenerateSecretKey();

View File

@@ -21,10 +21,10 @@ namespace MareSynchronos.WebAPI;
#pragma warning disable MA0040
public sealed partial class ApiController : DisposableMediatorSubscriberBase, IMareHubClient
{
public const string LoporritServer = "Loporrit Main Server";
public const string LoporritServiceUri = "wss://lop-sync.com";
public const string LoporritServiceApiUri = "wss://hub.lop-sync.com/";
public const string LoporritServiceHubUri = "wss://hub.lop-sync.com/mare";
public const string ClubPenguinServer = "Club Penguin Sync Main Server";
public const string ClubPenguinServiceUri = "wss://clubpenguin.drgn.rocks";
public const string ClubPenguinServiceApiUri = "wss://clubpenguin.drgn.rocks/";
public const string ClubPenguinServiceHubUri = "wss://clubpenguin.drgn.rocks/mare";
private readonly DalamudUtilService _dalamudUtil;
private readonly HubFactory _hubFactory;
@@ -194,7 +194,7 @@ public sealed partial class ApiController : DisposableMediatorSubscriberBase, IM
Mediator.Publish(new NotificationMessage("Client incompatible",
$"Your client is outdated ({currentClientVer.Major}.{currentClientVer.Minor}.{currentClientVer.Build}.{currentClientVer.Revision}), current is: " +
$"{_connectionDto.CurrentClientVersion.Major}.{_connectionDto.CurrentClientVersion.Minor}.{_connectionDto.CurrentClientVersion.Build}.{_connectionDto.CurrentClientVersion.Revision} " +
$"This client version is incompatible and will not be able to connect. Please update your Loporrit client.",
$"This client version is incompatible and will not be able to connect. Please update your Club Penguin Sync client.",
NotificationType.Error));
}
await StopConnection(ServerState.VersionMisMatch).ConfigureAwait(false);
@@ -206,7 +206,7 @@ public sealed partial class ApiController : DisposableMediatorSubscriberBase, IM
Mediator.Publish(new NotificationMessage("Client outdated",
$"Your client is outdated ({currentClientVer.Major}.{currentClientVer.Minor}.{currentClientVer.Build}.{currentClientVer.Revision}), current is: " +
$"{_connectionDto.CurrentClientVersion.Major}.{_connectionDto.CurrentClientVersion.Minor}.{_connectionDto.CurrentClientVersion.Build}.{_connectionDto.CurrentClientVersion.Revision} " +
$"Please keep your Loporrit client up-to-date.",
$"Please keep your Club Penguin Sync client up-to-date.",
NotificationType.Warning, TimeSpan.FromSeconds(15)));
}

View File

@@ -87,14 +87,14 @@ public class HubFactory : MediatorSubscriberBase
};
}
if (_serverConfigurationManager.CurrentApiUrl.Equals(ApiController.LoporritServiceUri, StringComparison.Ordinal))
if (_serverConfigurationManager.CurrentApiUrl.Equals(ApiController.ClubPenguinServiceUri, StringComparison.Ordinal))
{
var mainServerConfig = await _remoteConfig.GetConfigAsync<HubConnectionConfig>("mainServer").ConfigureAwait(false) ?? new();
defaultConfig = mainServerConfig;
if (string.IsNullOrEmpty(mainServerConfig.ApiUrl))
defaultConfig.ApiUrl = ApiController.LoporritServiceApiUri;
defaultConfig.ApiUrl = ApiController.ClubPenguinServiceApiUri;
if (string.IsNullOrEmpty(mainServerConfig.HubUrl))
defaultConfig.HubUrl = ApiController.LoporritServiceHubUri;
defaultConfig.HubUrl = ApiController.ClubPenguinServiceHubUri;
}
string jsonResponse;

View File

@@ -73,13 +73,13 @@ public sealed class TokenProvider : IDisposable, IMediatorSubscriber
var authApiUrl = _serverManager.CurrentApiUrl;
// Override the API URL used for auth from remote config, if one is available
if (authApiUrl.Equals(ApiController.LoporritServiceUri, StringComparison.Ordinal))
if (authApiUrl.Equals(ApiController.ClubPenguinServiceUri, StringComparison.Ordinal))
{
var config = await _remoteConfig.GetConfigAsync<HubConnectionConfig>("mainServer").ConfigureAwait(false) ?? new();
if (!string.IsNullOrEmpty(config.ApiUrl))
authApiUrl = config.ApiUrl;
else
authApiUrl = ApiController.LoporritServiceApiUri;
authApiUrl = ApiController.ClubPenguinServiceApiUri;
}
try