mirror of
https://github.com/xivdev/Penumbra.git
synced 2025-12-12 10:17:22 +01:00
This commit is contained in:
parent
c47d920961
commit
d79e687162
4 changed files with 32 additions and 22 deletions
2
Luna
2
Luna
|
|
@ -1 +1 @@
|
||||||
Subproject commit 8fc11b993d8504982acd95b8d39e6ee7046c1347
|
Subproject commit c764db88097c88cd49f2bed4f60268d617f97fdb
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit 182cca56a49411430233d73d7a8a6bb3d983f8f0
|
Subproject commit cf3d868eeeb4ea3ea728ae15a8d09ec127ce80e9
|
||||||
|
|
@ -1,15 +1,14 @@
|
||||||
using OtterGui.Services;
|
using Luna;
|
||||||
using Penumbra.Mods.Manager;
|
using Penumbra.Mods.Manager;
|
||||||
|
|
||||||
namespace Penumbra.Services;
|
namespace Penumbra.Services;
|
||||||
|
|
||||||
public class FileWatcher : IDisposable, IService
|
public class FileWatcher : IDisposable, IService
|
||||||
{
|
{
|
||||||
// TODO: use ConcurrentSet when it supports comparers in Luna.
|
private readonly ConcurrentSet<string> _pending = new(StringComparer.OrdinalIgnoreCase);
|
||||||
private readonly ConcurrentDictionary<string, byte> _pending = new(StringComparer.OrdinalIgnoreCase);
|
private readonly ModImportManager _modImportManager;
|
||||||
private readonly ModImportManager _modImportManager;
|
private readonly MessageService _messageService;
|
||||||
private readonly MessageService _messageService;
|
private readonly Configuration _config;
|
||||||
private readonly Configuration _config;
|
|
||||||
|
|
||||||
private bool _pausedConsumer;
|
private bool _pausedConsumer;
|
||||||
private FileSystemWatcher? _fsw;
|
private FileSystemWatcher? _fsw;
|
||||||
|
|
@ -89,6 +88,7 @@ public class FileWatcher : IDisposable, IService
|
||||||
_cts.Cancel();
|
_cts.Cancel();
|
||||||
_cts = null;
|
_cts = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
_consumer = null;
|
_consumer = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -125,13 +125,13 @@ public class FileWatcher : IDisposable, IService
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnPath(object? sender, FileSystemEventArgs e)
|
private void OnPath(object? sender, FileSystemEventArgs e)
|
||||||
=> _pending.TryAdd(e.FullPath, 0);
|
=> _pending.TryAdd(e.FullPath);
|
||||||
|
|
||||||
private async Task ConsumerLoopAsync(CancellationToken token)
|
private async Task ConsumerLoopAsync(CancellationToken token)
|
||||||
{
|
{
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
var (path, _) = _pending.FirstOrDefault();
|
var path = _pending.FirstOrDefault<string>();
|
||||||
if (path is null || _pausedConsumer)
|
if (path is null || _pausedConsumer)
|
||||||
{
|
{
|
||||||
await Task.Delay(500, token).ConfigureAwait(false);
|
await Task.Delay(500, token).ConfigureAwait(false);
|
||||||
|
|
@ -152,7 +152,7 @@ public class FileWatcher : IDisposable, IService
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
_pending.TryRemove(path, out _);
|
_pending.TryRemove(path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,39 +1,49 @@
|
||||||
using Dalamud.Bindings.ImGui;
|
using Dalamud.Bindings.ImGui;
|
||||||
|
using Dalamud.Game.Text.SeStringHandling;
|
||||||
using Dalamud.Interface.ImGuiNotification;
|
using Dalamud.Interface.ImGuiNotification;
|
||||||
using Dalamud.Interface.ImGuiNotification.EventArgs;
|
using Dalamud.Interface.ImGuiNotification.EventArgs;
|
||||||
using OtterGui.Text;
|
using ImSharp;
|
||||||
using Penumbra.Mods.Manager;
|
using Penumbra.Mods.Manager;
|
||||||
|
|
||||||
namespace Penumbra.Services;
|
namespace Penumbra.Services;
|
||||||
|
|
||||||
public class InstallNotification(ModImportManager modImportManager, string filePath) : OtterGui.Classes.MessageService.IMessage
|
public class InstallNotification(ModImportManager modImportManager, string filePath) : Luna.IMessage
|
||||||
{
|
{
|
||||||
public string Message
|
|
||||||
=> "A new mod has been found!";
|
|
||||||
|
|
||||||
public NotificationType NotificationType
|
public NotificationType NotificationType
|
||||||
=> NotificationType.Info;
|
=> NotificationType.Info;
|
||||||
|
|
||||||
public uint NotificationDuration
|
public string NotificationMessage
|
||||||
=> uint.MaxValue;
|
=> "A new mod has been found!";
|
||||||
|
|
||||||
|
public TimeSpan NotificationDuration
|
||||||
|
=> TimeSpan.MaxValue;
|
||||||
|
|
||||||
public string NotificationTitle { get; } = Path.GetFileNameWithoutExtension(filePath);
|
public string NotificationTitle { get; } = Path.GetFileNameWithoutExtension(filePath);
|
||||||
|
|
||||||
public string LogMessage
|
public string LogMessage
|
||||||
=> $"A new mod has been found: {Path.GetFileName(filePath)}";
|
=> $"A new mod has been found: {Path.GetFileName(filePath)}";
|
||||||
|
|
||||||
|
public SeString ChatMessage
|
||||||
|
=> SeString.Empty;
|
||||||
|
|
||||||
|
public StringU8 StoredMessage
|
||||||
|
=> StringU8.Empty;
|
||||||
|
|
||||||
|
public StringU8 StoredTooltip
|
||||||
|
=> StringU8.Empty;
|
||||||
|
|
||||||
public void OnNotificationActions(INotificationDrawArgs args)
|
public void OnNotificationActions(INotificationDrawArgs args)
|
||||||
{
|
{
|
||||||
var region = ImGui.GetContentRegionAvail();
|
var region = Im.ContentRegion.Available;
|
||||||
var buttonSize = new Vector2((region.X - ImGui.GetStyle().ItemSpacing.X) / 2, 0);
|
var buttonSize = new Vector2((region.X - Im.Style.ItemSpacing.X) / 2, 0);
|
||||||
if (ImUtf8.ButtonEx("Install"u8, ""u8, buttonSize))
|
if (Im.Button("Install"u8, buttonSize))
|
||||||
{
|
{
|
||||||
modImportManager.AddUnpack(filePath);
|
modImportManager.AddUnpack(filePath);
|
||||||
args.Notification.DismissNow();
|
args.Notification.DismissNow();
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui.SameLine();
|
ImGui.SameLine();
|
||||||
if (ImUtf8.ButtonEx("Ignore"u8, ""u8, buttonSize))
|
if (Im.Button("Ignore"u8, buttonSize))
|
||||||
args.Notification.DismissNow();
|
args.Notification.DismissNow();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue