🐛 fix: Fixed an issue where file downloads could not be canceled
This commit is contained in:
parent
f9818cbbbd
commit
f8679b5bb5
4 changed files with 22 additions and 5 deletions
|
|
@ -353,12 +353,15 @@ public class TelegramVerticle extends AbstractVerticle {
|
||||||
public Future<Void> cancelDownload(Integer fileId) {
|
public Future<Void> cancelDownload(Integer fileId) {
|
||||||
return this.execute(new TdApi.GetFile(fileId))
|
return this.execute(new TdApi.GetFile(fileId))
|
||||||
.compose(file -> {
|
.compose(file -> {
|
||||||
if (file.local == null || !file.local.isDownloadingActive) {
|
if (file.local == null) {
|
||||||
return Future.failedFuture("File not started downloading");
|
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 ->
|
.onSuccess(r ->
|
||||||
sendHttpEvent(EventPayload.build(EventPayload.TYPE_FILE_STATUS, new JsonObject()
|
sendHttpEvent(EventPayload.build(EventPayload.TYPE_FILE_STATUS, new JsonObject()
|
||||||
.put("fileId", fileId)
|
.put("fileId", fileId)
|
||||||
|
|
|
||||||
|
|
@ -90,9 +90,6 @@ public record FileRecord(int id, //file id will change
|
||||||
));
|
));
|
||||||
|
|
||||||
public FileRecord withSourceField(int id, long downloadedSize) {
|
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);
|
return new FileRecord(id, uniqueId, telegramId, chatId, messageId, date, hasSensitiveContent, size, downloadedSize, type, mimeType, fileName, thumbnail, caption, localPath, downloadStatus);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -34,4 +34,6 @@ public interface FileRepository {
|
||||||
|
|
||||||
Future<Void> updateFileId(int fileId, String uniqueId);
|
Future<Void> updateFileId(int fileId, String uniqueId);
|
||||||
|
|
||||||
|
Future<Void> deleteByUniqueId(String uniqueId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -311,4 +311,19 @@ public class FileRepositoryImpl implements FileRepository {
|
||||||
.mapEmpty();
|
.mapEmpty();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Future<Void> 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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue