tabs->spaces etc
This commit is contained in:
@@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
public enum TextureShrinkMode
|
public enum TextureShrinkMode
|
||||||
{
|
{
|
||||||
Never,
|
Never,
|
||||||
Default,
|
Default,
|
||||||
DefaultHiRes,
|
DefaultHiRes,
|
||||||
Always,
|
Always,
|
||||||
AlwaysHiRes
|
AlwaysHiRes
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"Author": "darkarchon",
|
|
||||||
"Name": "Mare Synchronos",
|
|
||||||
"Punchline": "Let others see you as you see yourself.",
|
|
||||||
"Description": "This plugin will synchronize your Penumbra mods and current Glamourer state with other paired clients automatically.",
|
|
||||||
"InternalName": "mareSynchronos",
|
|
||||||
"ApplicableVersion": "any",
|
|
||||||
"Tags": [
|
|
||||||
"customization"
|
|
||||||
],
|
|
||||||
"IconUrl": "https://raw.githubusercontent.com/Penumbra-Sync/client/main/MareSynchronos/images/logo.png",
|
|
||||||
"RepoUrl": "https://github.com/Penumbra-Sync/client",
|
|
||||||
"CanUnloadAsync": true
|
|
||||||
}
|
|
||||||
@@ -6,29 +6,29 @@ namespace MareSynchronos.Utils;
|
|||||||
|
|
||||||
public static class ChatUtils
|
public static class ChatUtils
|
||||||
{
|
{
|
||||||
// Based on https://git.anna.lgbt/anna/ExtraChat/src/branch/main/client/ExtraChat/Util/PayloadUtil.cs
|
// Based on https://git.anna.lgbt/anna/ExtraChat/src/branch/main/client/ExtraChat/Util/PayloadUtil.cs
|
||||||
// This must store a Guid (16 bytes), as Chat 2 converts the data back to one
|
// This must store a Guid (16 bytes), as Chat 2 converts the data back to one
|
||||||
|
|
||||||
public static RawPayload CreateExtraChatTagPayload(Guid guid)
|
public static RawPayload CreateExtraChatTagPayload(Guid guid)
|
||||||
{
|
{
|
||||||
var header = (byte[])[
|
var header = (byte[])[
|
||||||
0x02, // Payload.START_BYTE
|
0x02, // Payload.START_BYTE
|
||||||
0x27, // SeStringChunkType.Interactable
|
0x27, // SeStringChunkType.Interactable
|
||||||
2 + 16, // remaining length: ExtraChat sends 19 here but I think its an error
|
2 + 16, // remaining length: ExtraChat sends 19 here but I think its an error
|
||||||
0x20 // Custom ExtraChat InfoType
|
0x20 // Custom ExtraChat InfoType
|
||||||
];
|
];
|
||||||
|
|
||||||
var footer = (byte)0x03; // Payload.END_BYTE
|
var footer = (byte)0x03; // Payload.END_BYTE
|
||||||
|
|
||||||
return new RawPayload([..header, ..guid.ToByteArray(), footer]);
|
return new RawPayload([..header, ..guid.ToByteArray(), footer]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// We have a unique identifier in the form of a GID, which can be consistently mapped to the same GUID
|
// We have a unique identifier in the form of a GID, which can be consistently mapped to the same GUID
|
||||||
public static RawPayload CreateExtraChatTagPayload(string gid)
|
public static RawPayload CreateExtraChatTagPayload(string gid)
|
||||||
{
|
{
|
||||||
var gidBytes = UTF8Encoding.UTF8.GetBytes(gid);
|
var gidBytes = UTF8Encoding.UTF8.GetBytes(gid);
|
||||||
var hashedBytes = MD5.HashData(gidBytes);
|
var hashedBytes = MD5.HashData(gidBytes);
|
||||||
var guid = new Guid(hashedBytes);
|
var guid = new Guid(hashedBytes);
|
||||||
return CreateExtraChatTagPayload(guid);
|
return CreateExtraChatTagPayload(guid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
using System.Security.Cryptography;
|
using System.Security.Cryptography;
|
||||||
|
|
||||||
namespace MareSynchronosStaticFilesServer.Utils;
|
namespace MareSynchronos.Utils;
|
||||||
|
|
||||||
// Calculates the hash of content read or written to a stream
|
// Calculates the hash of content read or written to a stream
|
||||||
public class HashingStream : Stream
|
public class HashingStream : Stream
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ namespace MareSynchronos.Utils;
|
|||||||
public class LimitedStream : Stream
|
public class LimitedStream : Stream
|
||||||
{
|
{
|
||||||
private readonly Stream _stream;
|
private readonly Stream _stream;
|
||||||
public long _estimatedPosition = 0;
|
public long _estimatedPosition = 0;
|
||||||
public long MaxPosition { get; private init; }
|
public long MaxPosition { get; private init; }
|
||||||
public bool DisposeUnderlying = true;
|
public bool DisposeUnderlying = true;
|
||||||
|
|
||||||
public Stream UnderlyingStream { get => _stream; }
|
public Stream UnderlyingStream { get => _stream; }
|
||||||
@@ -13,12 +13,12 @@ public class LimitedStream : Stream
|
|||||||
public LimitedStream(Stream underlyingStream, long byteLimit)
|
public LimitedStream(Stream underlyingStream, long byteLimit)
|
||||||
{
|
{
|
||||||
_stream = underlyingStream;
|
_stream = underlyingStream;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_estimatedPosition = Position;
|
_estimatedPosition = Position;
|
||||||
}
|
}
|
||||||
catch { }
|
catch { }
|
||||||
MaxPosition = _estimatedPosition + byteLimit;
|
MaxPosition = _estimatedPosition + byteLimit;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void Dispose(bool disposing)
|
protected override void Dispose(bool disposing)
|
||||||
@@ -42,33 +42,33 @@ public class LimitedStream : Stream
|
|||||||
|
|
||||||
public override int Read(byte[] buffer, int offset, int count)
|
public override int Read(byte[] buffer, int offset, int count)
|
||||||
{
|
{
|
||||||
int remainder = (int)long.Clamp(MaxPosition - _estimatedPosition, 0, int.MaxValue);
|
int remainder = (int)long.Clamp(MaxPosition - _estimatedPosition, 0, int.MaxValue);
|
||||||
|
|
||||||
if (count > remainder)
|
if (count > remainder)
|
||||||
count = remainder;
|
count = remainder;
|
||||||
|
|
||||||
int n = _stream.Read(buffer, offset, count);
|
int n = _stream.Read(buffer, offset, count);
|
||||||
_estimatedPosition += n;
|
_estimatedPosition += n;
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async override Task<int> ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
|
public async override Task<int> ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
int remainder = (int)long.Clamp(MaxPosition - _estimatedPosition, 0, int.MaxValue);
|
int remainder = (int)long.Clamp(MaxPosition - _estimatedPosition, 0, int.MaxValue);
|
||||||
|
|
||||||
if (count > remainder)
|
if (count > remainder)
|
||||||
count = remainder;
|
count = remainder;
|
||||||
|
|
||||||
int n = await _stream.ReadAsync(buffer, offset, count, cancellationToken);
|
int n = await _stream.ReadAsync(buffer, offset, count, cancellationToken);
|
||||||
_estimatedPosition += n;
|
_estimatedPosition += n;
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override long Seek(long offset, SeekOrigin origin)
|
public override long Seek(long offset, SeekOrigin origin)
|
||||||
{
|
{
|
||||||
long result = _stream.Seek(offset, origin);
|
long result = _stream.Seek(offset, origin);
|
||||||
_estimatedPosition = result;
|
_estimatedPosition = result;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void SetLength(long value)
|
public override void SetLength(long value)
|
||||||
@@ -78,23 +78,23 @@ public class LimitedStream : Stream
|
|||||||
|
|
||||||
public override void Write(byte[] buffer, int offset, int count)
|
public override void Write(byte[] buffer, int offset, int count)
|
||||||
{
|
{
|
||||||
int remainder = (int)long.Clamp(MaxPosition - _estimatedPosition, 0, int.MaxValue);
|
int remainder = (int)long.Clamp(MaxPosition - _estimatedPosition, 0, int.MaxValue);
|
||||||
|
|
||||||
if (count > remainder)
|
if (count > remainder)
|
||||||
count = remainder;
|
count = remainder;
|
||||||
|
|
||||||
_stream.Write(buffer, offset, count);
|
_stream.Write(buffer, offset, count);
|
||||||
_estimatedPosition += count;
|
_estimatedPosition += count;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async override Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
|
public async override Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
int remainder = (int)long.Clamp(MaxPosition - _estimatedPosition, 0, int.MaxValue);
|
int remainder = (int)long.Clamp(MaxPosition - _estimatedPosition, 0, int.MaxValue);
|
||||||
|
|
||||||
if (count > remainder)
|
if (count > remainder)
|
||||||
count = remainder;
|
count = remainder;
|
||||||
|
|
||||||
await _stream.WriteAsync(buffer, offset, count, cancellationToken);
|
await _stream.WriteAsync(buffer, offset, count, cancellationToken);
|
||||||
_estimatedPosition += count;
|
_estimatedPosition += count;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ using MareSynchronos.PlayerData.Handlers;
|
|||||||
using MareSynchronos.Services.Mediator;
|
using MareSynchronos.Services.Mediator;
|
||||||
using MareSynchronos.Utils;
|
using MareSynchronos.Utils;
|
||||||
using MareSynchronos.WebAPI.Files.Models;
|
using MareSynchronos.WebAPI.Files.Models;
|
||||||
using MareSynchronosStaticFilesServer.Utils;
|
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Net.Http.Json;
|
using System.Net.Http.Json;
|
||||||
@@ -189,7 +188,7 @@ public partial class FileDownloadManager : DisposableMediatorSubscriberBase
|
|||||||
{
|
{
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ namespace MareSynchronos.WebAPI.SignalR;
|
|||||||
|
|
||||||
public record HubConnectionConfig
|
public record HubConnectionConfig
|
||||||
{
|
{
|
||||||
[JsonPropertyName("hub_url")]
|
[JsonPropertyName("hub_url")]
|
||||||
public string HubUrl { get; set; } = string.Empty;
|
public string HubUrl { get; set; } = string.Empty;
|
||||||
|
|
||||||
private readonly bool? _skipNegotiation;
|
private readonly bool? _skipNegotiation;
|
||||||
|
|
||||||
@@ -20,28 +20,28 @@ public record HubConnectionConfig
|
|||||||
[JsonPropertyName("transports")]
|
[JsonPropertyName("transports")]
|
||||||
public string[]? Transports { get; set; }
|
public string[]? Transports { get; set; }
|
||||||
|
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public HttpTransportType TransportType
|
public HttpTransportType TransportType
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
if (Transports == null || Transports.Length == 0)
|
if (Transports == null || Transports.Length == 0)
|
||||||
return HttpTransportType.WebSockets;
|
return HttpTransportType.WebSockets;
|
||||||
|
|
||||||
HttpTransportType result = HttpTransportType.None;
|
HttpTransportType result = HttpTransportType.None;
|
||||||
|
|
||||||
foreach (var transport in Transports)
|
foreach (var transport in Transports)
|
||||||
{
|
{
|
||||||
result |= transport.ToLowerInvariant() switch
|
result |= transport.ToLowerInvariant() switch
|
||||||
{
|
{
|
||||||
"websockets" => HttpTransportType.WebSockets,
|
"websockets" => HttpTransportType.WebSockets,
|
||||||
"serversentevents" => HttpTransportType.ServerSentEvents,
|
"serversentevents" => HttpTransportType.ServerSentEvents,
|
||||||
"longpolling" => HttpTransportType.LongPolling,
|
"longpolling" => HttpTransportType.LongPolling,
|
||||||
_ => HttpTransportType.None
|
_ => HttpTransportType.None
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -119,7 +119,6 @@ public class HubFactory : MediatorSubscriberBase
|
|||||||
var ver = Assembly.GetExecutingAssembly().GetName().Version;
|
var ver = Assembly.GetExecutingAssembly().GetName().Version;
|
||||||
httpClient.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("MareSynchronos", ver!.Major + "." + ver!.Minor + "." + ver!.Build));
|
httpClient.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("MareSynchronos", ver!.Major + "." + ver!.Minor + "." + ver!.Build));
|
||||||
|
|
||||||
// Make a GET request to the loporrit endpoint
|
|
||||||
var response = await httpClient.GetAsync(wellKnownUrl).ConfigureAwait(false);
|
var response = await httpClient.GetAsync(wellKnownUrl).ConfigureAwait(false);
|
||||||
|
|
||||||
if (!response.IsSuccessStatusCode)
|
if (!response.IsSuccessStatusCode)
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ using MareSynchronos.Utils;
|
|||||||
using MareSynchronos.API.Dto;
|
using MareSynchronos.API.Dto;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.IdentityModel.Tokens.Jwt;
|
using System.Net;
|
||||||
using System.Net.Http.Headers;
|
using System.Net.Http.Headers;
|
||||||
using System.Net.Http.Json;
|
using System.Net.Http.Json;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
@@ -76,7 +76,7 @@ public sealed class TokenProvider : IDisposable, IMediatorSubscriber
|
|||||||
new KeyValuePair<string, string>("charaIdent", await _dalamudUtil.GetPlayerNameHashedAsync().ConfigureAwait(false)),
|
new KeyValuePair<string, string>("charaIdent", await _dalamudUtil.GetPlayerNameHashedAsync().ConfigureAwait(false)),
|
||||||
}), token).ConfigureAwait(false);
|
}), token).ConfigureAwait(false);
|
||||||
|
|
||||||
if (!result.IsSuccessStatusCode)
|
if (result.StatusCode == HttpStatusCode.NotFound)
|
||||||
{
|
{
|
||||||
tokenUri = MareAuth.AuthFullPath(new Uri(_serverManager.CurrentApiUrl
|
tokenUri = MareAuth.AuthFullPath(new Uri(_serverManager.CurrentApiUrl
|
||||||
.Replace("wss://", "https://", StringComparison.OrdinalIgnoreCase)
|
.Replace("wss://", "https://", StringComparison.OrdinalIgnoreCase)
|
||||||
@@ -87,14 +87,14 @@ public sealed class TokenProvider : IDisposable, IMediatorSubscriber
|
|||||||
new KeyValuePair<string, string>("charaIdent", await _dalamudUtil.GetPlayerNameHashedAsync().ConfigureAwait(false)),
|
new KeyValuePair<string, string>("charaIdent", await _dalamudUtil.GetPlayerNameHashedAsync().ConfigureAwait(false)),
|
||||||
}), token).ConfigureAwait(false);
|
}), token).ConfigureAwait(false);
|
||||||
|
|
||||||
var textResponse = await result.Content.ReadAsStringAsync().ConfigureAwait(false) ?? string.Empty;
|
var textResponse = await result.Content.ReadAsStringAsync(token).ConfigureAwait(false) ?? string.Empty;
|
||||||
result.EnsureSuccessStatusCode();
|
result.EnsureSuccessStatusCode();
|
||||||
_tokenCache[identifier] = textResponse;
|
_tokenCache[identifier] = textResponse;
|
||||||
_wellKnownCache[_serverManager.CurrentApiUrl] = null;
|
_wellKnownCache[_serverManager.CurrentApiUrl] = null;
|
||||||
return textResponse;
|
return textResponse;
|
||||||
}
|
}
|
||||||
|
|
||||||
var response = await result.Content.ReadFromJsonAsync<AuthReplyDto>().ConfigureAwait(false) ?? new();
|
var response = await result.Content.ReadFromJsonAsync<AuthReplyDto>(token).ConfigureAwait(false) ?? new();
|
||||||
result.EnsureSuccessStatusCode();
|
result.EnsureSuccessStatusCode();
|
||||||
_tokenCache[identifier] = response.Token;
|
_tokenCache[identifier] = response.Token;
|
||||||
_wellKnownCache[_serverManager.CurrentApiUrl] = response.WellKnown;
|
_wellKnownCache[_serverManager.CurrentApiUrl] = response.WellKnown;
|
||||||
@@ -107,7 +107,7 @@ public sealed class TokenProvider : IDisposable, IMediatorSubscriber
|
|||||||
|
|
||||||
_logger.LogError(ex, "GetNewToken: Failure to get token");
|
_logger.LogError(ex, "GetNewToken: Failure to get token");
|
||||||
|
|
||||||
if (ex.StatusCode == System.Net.HttpStatusCode.Unauthorized)
|
if (ex.StatusCode == HttpStatusCode.Unauthorized)
|
||||||
{
|
{
|
||||||
Mediator.Publish(new NotificationMessage("Error refreshing token", "Your authentication token could not be renewed. Try reconnecting manually.", NotificationType.Error));
|
Mediator.Publish(new NotificationMessage("Error refreshing token", "Your authentication token could not be renewed. Try reconnecting manually.", NotificationType.Error));
|
||||||
Mediator.Publish(new DisconnectedMessage());
|
Mediator.Publish(new DisconnectedMessage());
|
||||||
|
|||||||
Reference in New Issue
Block a user