mirror of
https://github.com/RedWizardsLab/EchoHub.git
synced 2026-09-05 15:46:01 +02:00
feat: Add support for message attachments
- Introduced Attachment model to handle file attachments associated with messages. - Updated ModerationController to manage message deletions and attachment cleanup. - Enhanced ChatService to include attachments in message retrieval. - Implemented migration for legacy single-attachment messages to the new Attachments model. - Added unit tests for attachment handling in message formatting and parsing. - Updated database context and migrations to support new Attachments table.
This commit is contained in:
@@ -15,6 +15,8 @@ public class CommandHandler
|
||||
public event Func<Task>? OnOpenServers;
|
||||
public event Func<string, string?, Task>? OnJoinChannel;
|
||||
public event Func<string, string, Task>? OnChangeRoomPassword;
|
||||
public event Func<Task>? OnClearAttachments;
|
||||
public event Func<string, Task>? OnSetDownloadPath;
|
||||
public event Func<Task>? OnLeaveChannel;
|
||||
public event Func<string, Task>? OnSetTopic;
|
||||
public event Func<Task>? OnListUsers;
|
||||
@@ -48,6 +50,8 @@ public class CommandHandler
|
||||
"color" => await HandleColor(args),
|
||||
"theme" => await HandleTheme(args),
|
||||
"send" => await HandleSend(args),
|
||||
"clear" => await HandleClear(),
|
||||
"downloadpath" or "downloads" => await HandleDownloadPath(args),
|
||||
"profile" => await HandleProfile(args),
|
||||
"avatar" => await HandleAvatar(args),
|
||||
"servers" => await HandleServers(),
|
||||
@@ -165,6 +169,21 @@ public class CommandHandler
|
||||
return new CommandResult(true, $"Uploading: {Path.GetFileName(target)}...");
|
||||
}
|
||||
|
||||
private async Task<CommandResult> HandleClear()
|
||||
{
|
||||
if (OnClearAttachments is not null)
|
||||
await OnClearAttachments();
|
||||
return new CommandResult(true, "Cleared staged attachments.");
|
||||
}
|
||||
|
||||
private async Task<CommandResult> HandleDownloadPath(string args)
|
||||
{
|
||||
// No argument → open the native folder picker; an argument sets the path directly.
|
||||
if (OnSetDownloadPath is not null)
|
||||
await OnSetDownloadPath(args.Trim());
|
||||
return new CommandResult(true);
|
||||
}
|
||||
|
||||
private async Task<CommandResult> HandleProfile(string args)
|
||||
{
|
||||
var username = string.IsNullOrWhiteSpace(args) ? null : args.Trim();
|
||||
@@ -358,7 +377,11 @@ public class CommandHandler
|
||||
/nick <name> - Set display name
|
||||
/color <#hex> - Set nickname color
|
||||
/theme <name> - Switch theme
|
||||
/send <filepath or URL> [-s|-m|-l] - Send file/image/audio (size flag for images)
|
||||
/send <filepath> [-s|-m|-l] - Stage a file to attach (Enter sends with your text)
|
||||
/send <URL> [-s|-m|-l] - Send an image URL immediately
|
||||
/clear - Drop all staged attachments
|
||||
(Tip: copy a file and press Ctrl+V, or drag a file onto the window, to attach it.)
|
||||
/downloadpath [path] - Set download folder (no path = native folder picker)
|
||||
/avatar <URL or filepath> - Set your avatar
|
||||
/profile [username] - View a profile
|
||||
/servers - Open saved servers
|
||||
|
||||
Reference in New Issue
Block a user