From f8679b5bb519d6c5f72d6414e82824d267844618 Mon Sep 17 00:00:00 2001 From: jarvis2f <137974272+jarvis2f@users.noreply.github.com> Date: Fri, 27 Dec 2024 16:06:04 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix:=20Fixed=20an=20issue=20wher?= =?UTF-8?q?e=20file=20downloads=20could=20not=20be=20canceled?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/telegram/files/TelegramVerticle.java | 7 +++++-- .../telegram/files/repository/FileRecord.java | 3 --- .../telegram/files/repository/FileRepository.java | 2 ++ .../files/repository/impl/FileRepositoryImpl.java | 15 +++++++++++++++ 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/api/src/main/java/telegram/files/TelegramVerticle.java b/api/src/main/java/telegram/files/TelegramVerticle.java index d94a3c8..22d8c28 100644 --- a/api/src/main/java/telegram/files/TelegramVerticle.java +++ b/api/src/main/java/telegram/files/TelegramVerticle.java @@ -353,12 +353,15 @@ public class TelegramVerticle extends AbstractVerticle { public Future cancelDownload(Integer fileId) { return this.execute(new TdApi.GetFile(fileId)) .compose(file -> { - if (file.local == null || !file.local.isDownloadingActive) { + if (file.local == null) { return Future.failedFuture("File not started downloading"); } - return this.execute(new TdApi.CancelDownloadFile(fileId, false)); + return this.execute(new TdApi.CancelDownloadFile(fileId, false)) + .map(file); }) + .compose(file -> this.execute(new TdApi.DeleteFile(fileId)).map(file)) + .compose(file -> DataVerticle.fileRepository.deleteByUniqueId(file.remote.uniqueId)) .onSuccess(r -> sendHttpEvent(EventPayload.build(EventPayload.TYPE_FILE_STATUS, new JsonObject() .put("fileId", fileId) diff --git a/api/src/main/java/telegram/files/repository/FileRecord.java b/api/src/main/java/telegram/files/repository/FileRecord.java index f8ef977..7c4c878 100644 --- a/api/src/main/java/telegram/files/repository/FileRecord.java +++ b/api/src/main/java/telegram/files/repository/FileRecord.java @@ -90,9 +90,6 @@ public record FileRecord(int id, //file id will change )); public FileRecord withSourceField(int id, long downloadedSize) { - if (this.downloadedSize == downloadedSize) { - return this; - } return new FileRecord(id, uniqueId, telegramId, chatId, messageId, date, hasSensitiveContent, size, downloadedSize, type, mimeType, fileName, thumbnail, caption, localPath, downloadStatus); } } diff --git a/api/src/main/java/telegram/files/repository/FileRepository.java b/api/src/main/java/telegram/files/repository/FileRepository.java index c86aec7..c25f10b 100644 --- a/api/src/main/java/telegram/files/repository/FileRepository.java +++ b/api/src/main/java/telegram/files/repository/FileRepository.java @@ -34,4 +34,6 @@ public interface FileRepository { Future updateFileId(int fileId, String uniqueId); + Future deleteByUniqueId(String uniqueId); + } diff --git a/api/src/main/java/telegram/files/repository/impl/FileRepositoryImpl.java b/api/src/main/java/telegram/files/repository/impl/FileRepositoryImpl.java index 774e146..ddc308b 100644 --- a/api/src/main/java/telegram/files/repository/impl/FileRepositoryImpl.java +++ b/api/src/main/java/telegram/files/repository/impl/FileRepositoryImpl.java @@ -311,4 +311,19 @@ public class FileRepositoryImpl implements FileRepository { .mapEmpty(); }); } + + @Override + public Future deleteByUniqueId(String uniqueId) { + if (StrUtil.isBlank(uniqueId)) { + return Future.succeededFuture(); + } + return SqlTemplate + .forUpdate(pool, """ + DELETE FROM file_record WHERE unique_id = #{uniqueId} + """) + .execute(Map.of("uniqueId", uniqueId)) + .onFailure(err -> log.error("Failed to delete file record: %s".formatted(err.getMessage())) + ) + .mapEmpty(); + } }