From 64325fc75c70dcb7f24b7d3314d0e2f4fc70984e Mon Sep 17 00:00:00 2001 From: galushko Date: Mon, 19 Feb 2024 23:15:10 +0200 Subject: [PATCH] Add full torrent info --- .../docker-compose-bot_debug.yml | 3 +- .../com/halushko/kinocat/text/Constants.java | 27 ++++++---- .../com/halushko/kinocat/torrent/Main.java | 1 + .../torrent/entities/TorrentEntity.java | 50 ++++++++++++++++--- .../requests/concrete/TorrentFullInfo.java | 37 ++++++++++++++ .../transmission_requests/get_full_info.json | 38 +++++--------- 6 files changed, 112 insertions(+), 44 deletions(-) create mode 100644 torrent/src/main/java/com/halushko/kinocat/torrent/requests/concrete/TorrentFullInfo.java diff --git a/config/examples/docker-compose/docker-compose-bot_debug.yml b/config/examples/docker-compose/docker-compose-bot_debug.yml index a7599e69..3d1e644c 100644 --- a/config/examples/docker-compose/docker-compose-bot_debug.yml +++ b/config/examples/docker-compose/docker-compose-bot_debug.yml @@ -10,7 +10,8 @@ services: volumes: - ./workdir/config/transmission:/home/app/transmission_config - ./workdir/config/logs:/home/app/logs - network_mode: host + networks: + bot_network_debug: bot_debug: image: halushko/cinema-bot:beta env_file: diff --git a/text/src/main/java/com/halushko/kinocat/text/Constants.java b/text/src/main/java/com/halushko/kinocat/text/Constants.java index 4bfa527c..ede8f5b0 100644 --- a/text/src/main/java/com/halushko/kinocat/text/Constants.java +++ b/text/src/main/java/com/halushko/kinocat/text/Constants.java @@ -9,55 +9,60 @@ public interface Constants { CommandsCollection COMMANDS_COLLECTION = new CommandsCollection() {{ addValue(Commands.Torrent.LIST_TORRENTS, Queues.Torrent.TORRENTS_LIST, - "відобразити всі торенти. Якщо після команди додати слова, то торенти будуть відфільтровані за іменами з цими словами", + "<сервер> відобразити всі торенти. Якщо після команди додати слова, то торенти будуть відфільтровані за іменами з цими словами", CommandProperties.CONTAINS_SERVER_NUMBER, CommandProperties.CAN_BE_NOT_TORRENT ); addValue(Commands.Torrent.LIST_TORRENT_COMMANDS, Queues.Torrent.TORRENT_COMMANDS, - "<номер торента> перелічити можливі команди для вказаного торента", + "<сервер> <номер торента> перелічити можливі команди для вказаного торента", CommandProperties.CONTAINS_SERVER_NUMBER ); addValue(Commands.Torrent.LIST_FILES, Queues.Torrent.FILES_LIST, - "<номер торента> відобразити всі файли, що будуть скачані в цьому торенті", + "<сервер> <номер торента> відобразити всі файли, що будуть скачані в цьому торенті", + CommandProperties.CONTAINS_SERVER_NUMBER, + CommandProperties.CAN_BE_NOT_TORRENT + ); + addValue(Commands.Torrent.TORRENT_INFO, + Queues.Torrent.TORRENT_INFO, + "<сервер> <номер торента> відобразити інформацію по торенту", CommandProperties.CONTAINS_SERVER_NUMBER, CommandProperties.CAN_BE_NOT_TORRENT ); addValue(Commands.Torrent.RESUME, Queues.Torrent.RESUME_TORRENT, - "<номер торента> почати закачувати цей торент", + "<сервер> <номер торента> почати закачувати цей торент", CommandProperties.CONTAINS_SERVER_NUMBER ); addValue(Commands.Torrent.PAUSE, Queues.Torrent.PAUSE_TORRENT, - "<номер торента> припинити закачувати цей торент", + "<сервер> <номер торента> припинити закачувати цей торент", CommandProperties.CONTAINS_SERVER_NUMBER ); addValue(Commands.Torrent.RESUME_ALL, Queues.Torrent.RESUME_ALL, - "почати закачувати всі торенти", + "<сервер> почати закачувати всі торенти", CommandProperties.CONTAINS_SERVER_NUMBER ); addValue(Commands.Torrent.PAUSE_ALL, Queues.Torrent.PAUSE_ALL, - "припинити закачувати всі тореенти", + "<сервер> припинити закачувати всі тореенти", CommandProperties.CONTAINS_SERVER_NUMBER ); -// addValue(Torrent.TORRENT_INFO, "", "info_torrent.sh", Queues.Torrent.TORRENT_INFO); addValue(Commands.Torrent.REMOVE_WITH_FILES, Queues.Torrent.DELETE_WITH_FILES, - "<номер торента> видалити вказаний торент разом з файлами", + "<сервер> <номер торента> видалити вказаний торент разом з файлами", CommandProperties.CONTAINS_SERVER_NUMBER ); addValue(Commands.Torrent.REMOVE_JUST_TORRENT, Queues.Torrent.DELETE_ONLY_TORRENT, - "<номер торента> видалити вказаний торент, але залишити файли", + "<сервер> <номер торента> видалити вказаний торент, але залишити файли", CommandProperties.CONTAINS_SERVER_NUMBER ); addValue(Commands.Torrent.REMOVE_COMMAND, Queues.Torrent.DELETE, - "<номер торента> почати процедуру видалення вказаного торента", + "<сервер> <номер торента> почати процедуру видалення вказаного торента", CommandProperties.CONTAINS_SERVER_NUMBER ); diff --git a/torrent/src/main/java/com/halushko/kinocat/torrent/Main.java b/torrent/src/main/java/com/halushko/kinocat/torrent/Main.java index 6c6f26d1..e59c835e 100644 --- a/torrent/src/main/java/com/halushko/kinocat/torrent/Main.java +++ b/torrent/src/main/java/com/halushko/kinocat/torrent/Main.java @@ -10,6 +10,7 @@ public static void main(String[] args) { new DeleteOnlyTorrent().run(); new DeleteWithFiles().run(); new FilesList().run(); + new TorrentFullInfo().run(); new PauseTorrent().run(); new ResumeTorrent().run(); new RemoveTorrentCommand().run(); diff --git a/torrent/src/main/java/com/halushko/kinocat/torrent/entities/TorrentEntity.java b/torrent/src/main/java/com/halushko/kinocat/torrent/entities/TorrentEntity.java index a1382553..7cc4c24e 100644 --- a/torrent/src/main/java/com/halushko/kinocat/torrent/entities/TorrentEntity.java +++ b/torrent/src/main/java/com/halushko/kinocat/torrent/entities/TorrentEntity.java @@ -5,6 +5,8 @@ import lombok.extern.slf4j.Slf4j; import lombok.val; +import java.time.*; +import java.time.format.DateTimeFormatter; import java.util.List; import java.util.Map; import java.util.TreeSet; @@ -12,12 +14,24 @@ @Getter @Slf4j public class TorrentEntity { + private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("dd-MM-yyyy"); + private final String id; private final String name; - private final double percentDone; private final int status; + private final long totalSize; private final long eta; + private final long uploadedEver; + private final double percentDone; + + private final String lastActivityDate; + private final String dateCreated; + private final String addedDate; + + private final String comment; + private final String errorString; + private final TreeSet files = new TreeSet<>((str1, str2) -> { List folders1 = str1.getFolders(); List folders2 = str2.getFolders(); @@ -44,18 +58,40 @@ public TorrentEntity(Object obj) { val torrent = new SmartJson((Map) obj); this.id = torrent.getValue("id"); this.name = torrent.getValue("name"); - String status = torrent.getValue("status"); - this.status = status.isEmpty() ? -1 : Integer.parseInt(status); + this.comment = torrent.getValue("comment"); + this.errorString = torrent.getValue("errorString"); + this.status = (int)getLong(torrent.getValue("status"), -1); String percentDone = torrent.getValue("percentDone"); this.percentDone = percentDone.isEmpty() ? 0.0 : Double.parseDouble(percentDone); - String totalSize = torrent.getValue("totalSize"); - this.totalSize = percentDone.isEmpty() ? 0L : Long.parseLong(totalSize); - String eta = torrent.getValue("eta"); - this.eta = eta.isEmpty() ? -1L : Long.parseLong(totalSize); + this.totalSize = getLong(torrent.getValue("totalSize")); + this.eta = getLong(torrent.getValue("eta"), -1L); + this.uploadedEver = getLong(torrent.getValue("uploadedEver")); val files = torrent.getSubMessage("files").convertToList(); files.forEach(file -> this.files.add(new SubTorrentEntity(file, id))); + + this.lastActivityDate = getDate(torrent.getValue("activityDate")); + this.dateCreated = getDate(torrent.getValue("dateCreated")); + this.addedDate = getDate(torrent.getValue("addedDate")); + } + + private static String getDate(String strValue) { + if(strValue.isEmpty()) return ""; + val timestamp = Long.parseLong(strValue); + Instant instant = Instant.ofEpochSecond(timestamp); + ZonedDateTime date = ZonedDateTime.ofInstant(instant, ZoneId.systemDefault()); + return date.format(FORMATTER); + } + private static long getLong(String strValue){ + return getLong(strValue, 0); + } + private static long getLong(String strValue, long defaultValue) { + try { + return strValue.isEmpty() ? defaultValue : Long.parseLong(strValue); + } catch (NumberFormatException e) { + return defaultValue; + } } } diff --git a/torrent/src/main/java/com/halushko/kinocat/torrent/requests/concrete/TorrentFullInfo.java b/torrent/src/main/java/com/halushko/kinocat/torrent/requests/concrete/TorrentFullInfo.java new file mode 100644 index 00000000..03bfab7a --- /dev/null +++ b/torrent/src/main/java/com/halushko/kinocat/torrent/requests/concrete/TorrentFullInfo.java @@ -0,0 +1,37 @@ +package com.halushko.kinocat.torrent.requests.concrete; + +import com.halushko.kinocat.core.Queues; +import com.halushko.kinocat.torrent.entities.TorrentEntity; +import com.halushko.kinocat.torrent.requests.common.GetTorrent; + +public class TorrentFullInfo extends GetTorrent { + + @Override + protected String generateAnswer(TorrentEntity torrent, String serverNumber, String serverVsTorrentSeparator) { + StringBuilder sb = new StringBuilder("Торент ").append(torrent.getName()).append("\n/\n"); + sb.append("Маэмо: ").append(Math.round(torrent.getTotalSize() / 1000000.0) / 1000.0).append(" Gb"); + sb.append(" (").append(torrent.getPercentDone() * 100).append("%)\n"); + sb.append("Відвантажено: ").append(Math.round(torrent.getUploadedEver() / 1000000.0) / 1000.0).append(" Gb"); + sb.append(" (").append((double) (10 * torrent.getUploadedEver() / torrent.getTotalSize()) / 10.0).append(")\n"); + sb.append("Остання активнысть: ").append(torrent.getLastActivityDate()).append("\n"); + if(!torrent.getErrorString().isEmpty()) { + sb.append("Помилка: ").append(torrent.getErrorString()).append("\n"); + } + sb.append("Торент створено: ").append(torrent.getDateCreated()).append("\n"); + sb.append("Початок закачки: ").append(torrent.getAddedDate()).append("\n"); + if(!torrent.getComment().isEmpty()) { + sb.append("Інфа: ").append(torrent.getComment()); + } + return sb.toString(); + } + + @Override + protected String getQueue() { + return Queues.Torrent.TORRENT_INFO; + } + + @Override + protected String getRequest() { + return "get_full_info.json"; + } +} diff --git a/torrent/src/main/resources/transmission_requests/get_full_info.json b/torrent/src/main/resources/transmission_requests/get_full_info.json index 05450760..4af187c5 100644 --- a/torrent/src/main/resources/transmission_requests/get_full_info.json +++ b/torrent/src/main/resources/transmission_requests/get_full_info.json @@ -3,33 +3,21 @@ "arguments": { "fields": [ "id", - "addedDate", - "name", "totalSize", - "error", - "errorString", - "eta", - "isFinished", - "isStalled", - "leftUntilDone", - "metadataPercentComplete", - "peersConnected", - "peersGettingFromUs", - "peersSendingToUs", "percentDone", - "queuePosition", - "rateDownload", - "rateUpload", - "recheckProgress", - "seedRatioMode", - "seedRatioLimit", - "sizeWhenDone", - "status", - "trackers", - "downloadDir", + "activityDate", + "startDate", + "comment", + "dateCreated", "uploadedEver", - "uploadRatio", - "webseedsSendingToUs" - ] + "eta", + "name", + "errorString", + "status", + "addedDate" + ], + "ids": [ + %s + ] } } \ No newline at end of file