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(); + } }