[backend/razor] Add UI for setting instance banner

This commit is contained in:
pancakes 2025-03-29 14:03:40 +10:00
parent 66c003daeb
commit 8c50211efb
No known key found for this signature in database
4 changed files with 20 additions and 8 deletions

View file

@ -277,9 +277,10 @@ public class InstanceService(
return rule;
}
public async Task<string?> GetInstanceImageAsync()
public async Task<(string?, string?)> GetInstanceImageAsync()
{
var iconId = await meta.GetAsync(MetaEntity.IconFileId);
return await db.DriveFiles.Where(p => p.Id == iconId).Select(p => p.RawAccessUrl).FirstOrDefaultAsync();
var (iconId, bannerId) = await meta.GetManyAsync(MetaEntity.IconFileId, MetaEntity.BannerFileId);
return (await db.DriveFiles.Where(p => p.Id == iconId).Select(p => p.RawAccessUrl).FirstOrDefaultAsync(),
await db.DriveFiles.Where(p => p.Id == bannerId).Select(p => p.RawAccessUrl).FirstOrDefaultAsync());
}
}

View file

@ -81,6 +81,7 @@ public static class MetaEntity
public static readonly NullableStringMeta AdminContactEmail = new("admin_contact_email");
public static readonly NullableStringMeta ThemeColor = new("theme_color");
public static readonly NullableStringMeta IconFileId = new("icon_file_id");
public static readonly NullableStringMeta BannerFileId = new("banner_file_id");
}
public class Meta<T>(

View file

@ -13,6 +13,8 @@
<EditForm FormName="update-metadata" Model="Model" OnSubmit="@OnSubmit" enctype="multipart/form-data">
<label for="icon">Icon</label>
<InputFile name="Model.IconFile" id="icon" accept="image/*"/>
<label for="banner">Banner</label>
<InputFile name="Model.BannerFile" id="banner" accept="image/*"/>
<label for="name">Instance name</label>
<InputText @bind-Value="@Model.Name" id="name" placeholder="Shrimp & friends"/>
<label for="desc">Instance description</label>
@ -38,6 +40,7 @@
public string? AdminContact { get; set; }
public string? ThemeColor { get; set; }
public IFormFile? IconFile { get; set; }
public IFormFile? BannerFile { get; set; }
public void Canonicalize()
{
@ -58,6 +61,8 @@
ThemeColor = null;
if (!IconFile?.ContentType.StartsWith("image/") ?? false)
IconFile = null;
if (!BannerFile?.ContentType.StartsWith("image/") ?? false)
BannerFile = null;
}
}
@ -81,14 +86,19 @@
await Meta.SetAsync(MetaEntity.AdminContactEmail, Model.AdminContact);
await Meta.SetAsync(MetaEntity.ThemeColor, Model.ThemeColor);
var ia = await SystemUser.GetInstanceActorAsync();
if (Model.IconFile != null)
{
var ia = await SystemUser.GetInstanceActorAsync();
var req = new DriveFileCreationRequest { Filename = Model.IconFile.Name, IsSensitive = false, MimeType = Model.IconFile.ContentType };
var req = new DriveFileCreationRequest { Filename = Model.IconFile.Name, IsSensitive = false, MimeType = Model.IconFile.ContentType };
var file = await Drive.StoreFileAsync(Model.IconFile.OpenReadStream(), ia, req);
await Meta.SetAsync(MetaEntity.IconFileId, file.Id);
}
if (Model.BannerFile != null)
{
var req = new DriveFileCreationRequest { Filename = Model.BannerFile.Name, IsSensitive = false, MimeType = Model.BannerFile.ContentType };
var file = await Drive.StoreFileAsync(Model.BannerFile.OpenReadStream(), ia, req);
await Meta.SetAsync(MetaEntity.BannerFileId, file.Id);
}
ReloadPage();
}

View file

@ -72,8 +72,8 @@
{
_user = Context.GetUser();
_instanceName = await Meta.GetAsync(MetaEntity.InstanceName);
_instanceIcon = await InstanceSvc.GetInstanceImageAsync();
_instanceName = await Meta.GetAsync(MetaEntity.InstanceName);
(_instanceIcon, _) = await InstanceSvc.GetInstanceImageAsync();
if (Context.GetEndpoint()?.Metadata.GetMetadata<RequireAuthorizationAttribute>() == null)
return;