diff --git a/Iceshrimp.Frontend/Core/ControllerModels/ProfileControllerModel.cs b/Iceshrimp.Frontend/Core/ControllerModels/ProfileControllerModel.cs index 0f257926..6a5e9fe0 100644 --- a/Iceshrimp.Frontend/Core/ControllerModels/ProfileControllerModel.cs +++ b/Iceshrimp.Frontend/Core/ControllerModels/ProfileControllerModel.cs @@ -1,5 +1,6 @@ using Iceshrimp.Frontend.Core.Services; using Iceshrimp.Shared.Schemas.Web; +using Microsoft.AspNetCore.Components.Forms; namespace Iceshrimp.Frontend.Core.ControllerModels; @@ -14,12 +15,18 @@ internal class ProfileControllerModel(ApiClient api) public Task GetAvatarUrlAsync() => api.CallAsync(HttpMethod.Get, "/profile/avatar"); + public Task UpdateAvatarAsync(IBrowserFile file) => + api.CallAsync(HttpMethod.Post, "/profile/avatar", data: file); + public Task DeleteAvatarAsync() => api.CallAsync(HttpMethod.Delete, "/profile/avatar"); public Task GetBannerUrlAsync() => api.CallAsync(HttpMethod.Get, "/profile/banner"); + public Task UpdateBannerAsync(IBrowserFile file) => + api.CallAsync(HttpMethod.Post, "/profile/banner", data: file); + public Task DeleteBannerAsync() => api.CallAsync(HttpMethod.Delete, "/profile/banner"); diff --git a/Iceshrimp.Frontend/Pages/Settings/Profile.razor b/Iceshrimp.Frontend/Pages/Settings/Profile.razor index 42756499..1f07ca20 100644 --- a/Iceshrimp.Frontend/Pages/Settings/Profile.razor +++ b/Iceshrimp.Frontend/Pages/Settings/Profile.razor @@ -32,6 +32,7 @@ } +

@Loc["Avatar"]

@@ -43,6 +44,7 @@
} +

@Loc["Display Name"]

@@ -109,8 +111,10 @@ private string FieldName { get; set; } = ""; private string FieldValue { get; set; } = ""; private StateButton SaveButton { get; set; } = null!; + private IBrowserFile? AvatarFile { get; set; } = null; private string? AvatarUrl { get; set; } = null; private bool DelAvatar { get; set; } = false; + private IBrowserFile? BannerFile { get; set; } = null; private string? BannerUrl { get; set; } = null; private bool DelBanner { get; set; } = false; private string DisplayName { get; set; } = ""; @@ -153,8 +157,12 @@ await Api.Profile.UpdateDisplayNameAsync(DisplayName); if (DelAvatar) await Api.Profile.DeleteAvatarAsync(); + else if (AvatarFile != null) + await Api.Profile.UpdateAvatarAsync(AvatarFile); if (DelBanner) await Api.Profile.DeleteBannerAsync(); + else if (BannerFile != null) + await Api.Profile.UpdateBannerAsync(BannerFile); SaveButton.State = StateButton.StateEnum.Success; } catch (ApiException e) @@ -163,4 +171,14 @@ SaveButton.State = StateButton.StateEnum.Failed; } } + + private void OnAvatarFileChange(InputFileChangeEventArgs e) + { + AvatarFile = e.GetMultipleFiles().First(p => p.ContentType.StartsWith("image/")); + } + + private void OnBannerFileChange(InputFileChangeEventArgs e) + { + BannerFile = e.GetMultipleFiles().First(p => p.ContentType.StartsWith("image/")); + } } \ No newline at end of file