- Change Loporrit Branding to CLUBPENGUIN
- Update submodules - Update to latest Penumbra API
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -133,8 +133,8 @@ public class Pair : DisposableMediatorSubscriberBase
|
||||
{
|
||||
Name = name,
|
||||
OnClicked = action,
|
||||
PrefixColor = 559,
|
||||
PrefixChar = 'L'
|
||||
PrefixColor = 529,
|
||||
PrefixChar = 'C'
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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++;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 () => {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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)));
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
Submodule Penumbra.Api updated: 0a970295b2...af41b1787a
Reference in New Issue
Block a user