Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions src/slskd/Application.cs
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ public Application(
IPushbulletService pushbulletService,
IRelayService relayService,
EventService eventService,
EventBus eventBus,
IHubContext<ApplicationHub> applicationHub,
IHubContext<LogsHub> logHub)
{
Expand Down Expand Up @@ -150,6 +151,7 @@ public Application(
Search = searchService;

Events = eventService;
EventBus = eventBus;

Transfers = transferService;
BrowseTracker = browseTracker;
Expand Down Expand Up @@ -232,6 +234,7 @@ public Application(
private IShareService Shares { get; set; }
private ISearchService Search { get; set; }
private EventService Events { get; }
private EventBus EventBus { get; }
private IRelayService Relay { get; set; }
private IMemoryCache Cache { get; set; } = new MemoryCache(new MemoryCacheOptions());
private IEnumerable<Regex> CompiledSearchResponseFilters { get; set; }
Expand Down Expand Up @@ -940,6 +943,16 @@ private async void Client_LoggedIn(object sender, EventArgs e)

private void Client_PrivateMessageReceived(object sender, PrivateMessageReceivedEventArgs args)
{
if (!args.Replayed)
{
EventBus.Raise(new PrivateMessageReceivedEvent
{
Username = args.Username,
Message = args.Message,
Blacklisted = Users.IsBlacklisted(args.Username),
});
}

if (Users.IsBlacklisted(args.Username))
{
Log.Debug("Ignored private message from blacklisted user {Username}: {Message}", args.Username, args.Message);
Expand All @@ -956,6 +969,14 @@ private void Client_PrivateMessageReceived(object sender, PrivateMessageReceived

private void Client_PublicChatMessageReceived(object sender, PublicChatMessageReceivedEventArgs args)
{
EventBus.Raise(new PublicChatMessageReceivedEvent
{
RoomName = args.RoomName,
Username = args.Username,
Message = args.Message,
Blacklisted = Users.IsBlacklisted(args.Username),
});

if (Users.IsBlacklisted(args.Username))
{
Log.Debug("Ignored public chat message from blacklisted user {Username}: {Message}", args.Username, args.Message);
Expand All @@ -972,6 +993,14 @@ private void Client_PublicChatMessageReceived(object sender, PublicChatMessageRe

private void Client_RoomMessageReceived(object sender, RoomMessageReceivedEventArgs args)
{
EventBus.Raise(new RoomMessageReceivedEvent
{
RoomName = args.RoomName,
Username = args.Username,
Message = args.Message,
Blacklisted = Users.IsBlacklisted(args.Username),
});

// note: this event is also subscribed in the RoomService class
if (Users.IsBlacklisted(args.Username))
{
Expand Down
3 changes: 3 additions & 0 deletions src/slskd/Events/API/EventsController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,9 @@ public IActionResult RaiseEvent([FromRoute] string type, [FromBody] string disam
EventType.DownloadFileComplete => new DownloadFileCompleteEvent { LocalFilename = $"{d}local.file", RemoteFilename = $"{d}remote.file", Transfer = new Transfer() },
EventType.DownloadDirectoryComplete => new DownloadDirectoryCompleteEvent { LocalDirectoryName = $"{d}local.directory", RemoteDirectoryName = $"{d}remote.directory", Username = $"{d}username" },
EventType.UploadFileComplete => new UploadFileCompleteEvent { LocalFilename = $"{d}local.file", RemoteFilename = $"{d}remote.file", Transfer = new Transfer() },
EventType.PrivateMessageReceived => new PrivateMessageReceivedEvent { Username = $"{d}username", Message = $"{d}message", Blacklisted = false },
EventType.PublicChatMessageReceived => new PublicChatMessageReceivedEvent { RoomName = $"{d}room", Username = $"{d}username", Message = $"{d}message", Blacklisted = false },
EventType.RoomMessageReceived => new RoomMessageReceivedEvent { RoomName = $"{d}room", Username = $"{d}username", Message = $"{d}message", Blacklisted = false },
EventType.Noop => new NoopEvent(),
_ => throw new SlskdException($"Event type {eventType} is an enum member but is not handled. Please submit an issue on GitHub."),
};
Expand Down
32 changes: 32 additions & 0 deletions src/slskd/Events/Types/Events.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ public enum EventType
DownloadFileComplete = 2,
DownloadDirectoryComplete = 3,
UploadFileComplete = 4,
PrivateMessageReceived = 5,
PublicChatMessageReceived = 6,
RoomMessageReceived = 7,
Noop = int.MaxValue,
}

Expand Down Expand Up @@ -65,6 +68,35 @@ public sealed record UploadFileCompleteEvent : Event
public required Transfer Transfer { get; init; }
}

public sealed record PrivateMessageReceivedEvent : Event
{
public override EventType Type => EventType.PrivateMessageReceived;
public override int Version => 0;
public required string Username { get; init; }
public required string Message { get; init; }
public required bool Blacklisted { get; init; }
}

public sealed record PublicChatMessageReceivedEvent : Event
{
public override EventType Type => EventType.PublicChatMessageReceived;
public override int Version => 0;
public required string RoomName { get; init; }
public required string Username { get; init; }
public required string Message { get; init; }
public required bool Blacklisted { get; init; }
}

public sealed record RoomMessageReceivedEvent : Event
{
public override EventType Type => EventType.RoomMessageReceived;
public override int Version => 0;
public required string RoomName { get; init; }
public required string Username { get; init; }
public required string Message { get; init; }
public required bool Blacklisted { get; init; }
}

public sealed record NoopEvent : Event
{
public override EventType Type => EventType.Noop;
Expand Down