From 95ae04e4af1890a041fe4ed15a28eec08b322a14 Mon Sep 17 00:00:00 2001 From: pancakes Date: Mon, 28 Oct 2024 12:48:35 +1000 Subject: [PATCH] [backend] Download exported follow list directly instead of storing it as a file --- .../Controllers/Web/SettingsController.cs | 11 ++++++----- .../Core/Services/ImportExportService.cs | 14 ++------------ 2 files changed, 8 insertions(+), 17 deletions(-) diff --git a/Iceshrimp.Backend/Controllers/Web/SettingsController.cs b/Iceshrimp.Backend/Controllers/Web/SettingsController.cs index d39f24dc..c6ef4b64 100644 --- a/Iceshrimp.Backend/Controllers/Web/SettingsController.cs +++ b/Iceshrimp.Backend/Controllers/Web/SettingsController.cs @@ -1,5 +1,6 @@ using System.Net; using System.Net.Mime; +using System.Text; using AngleSharp.Text; using Iceshrimp.Backend.Controllers.Shared.Attributes; using Iceshrimp.Backend.Core.Database; @@ -68,9 +69,9 @@ public class SettingsController(DatabaseContext db, ImportExportService importEx } [HttpPost("export/following")] - [ProducesResults(HttpStatusCode.Accepted)] + [ProducesResults(HttpStatusCode.OK)] [ProducesErrors(HttpStatusCode.BadRequest)] - public async Task ExportFollowing() + public async Task ExportFollowing() { var user = HttpContext.GetUserOrFail(); @@ -79,9 +80,9 @@ public class SettingsController(DatabaseContext db, ImportExportService importEx if (followCount < 1) throw GracefulException.BadRequest("You do not follow any users"); - await importExportSvc.ExportFollowingAsync(user); - - return Accepted(); + var following = await importExportSvc.ExportFollowingAsync(user); + + return File(Encoding.UTF8.GetBytes(following), "text/csv", $"following-{DateTime.Now:yyyy-MM-dd-HH-mm-ss}.csv"); } [HttpPost("import/following")] diff --git a/Iceshrimp.Backend/Core/Services/ImportExportService.cs b/Iceshrimp.Backend/Core/Services/ImportExportService.cs index 227b0ba9..a655d09b 100644 --- a/Iceshrimp.Backend/Core/Services/ImportExportService.cs +++ b/Iceshrimp.Backend/Core/Services/ImportExportService.cs @@ -1,4 +1,3 @@ -using System.Text; using Iceshrimp.Backend.Core.Configuration; using Iceshrimp.Backend.Core.Database; using Iceshrimp.Backend.Core.Database.Tables; @@ -14,12 +13,11 @@ public class ImportExportService( ILogger logger, IOptions instance, CacheService cacheSvc, - DriveService driveSvc, UserService userSvc, ActivityPub.UserResolver userResolver ) { - public async Task ExportFollowingAsync(User user) + public async Task ExportFollowingAsync(User user) { var followees = await db.Followings .Include(p => p.Followee) @@ -31,15 +29,7 @@ public class ImportExportService( .Select(p => p.GetFqn(instance.Value.AccountDomain)) .ToListAsync(); - var stream = new MemoryStream(Encoding.UTF8.GetBytes(string.Join("\n", followees))); - - await driveSvc.StoreFile(stream, user, - new DriveFileCreationRequest - { - Filename = $"following-{DateTime.UtcNow:yyyy-MM-dd-HH-mm-ss}.csv", - IsSensitive = false, - MimeType = "text/csv" - }, true); + return string.Join("\n", followees); } public async Task ImportFollowingAsync(User user, List fqns)