diff --git a/src/main/java/cn/montaro/aria2/Aria2Client.java b/src/main/java/cn/montaro/aria2/Aria2Client.java index 0b1a785..103cff3 100644 --- a/src/main/java/cn/montaro/aria2/Aria2Client.java +++ b/src/main/java/cn/montaro/aria2/Aria2Client.java @@ -2,6 +2,7 @@ package cn.montaro.aria2; import cn.montaro.aria2.annotation.Aria2Method; import cn.montaro.aria2.constants.Aria2MethodName; +import cn.montaro.aria2.resp.Aria2Status; import java.util.List; import java.util.Map; @@ -64,7 +65,7 @@ public interface Aria2Client { // TODO: define return type @Aria2Method(Aria2MethodName.TELL_STATUS) - String tellStatus(String gid, String... keys); + Aria2Status tellStatus(String gid, String... keys); @Aria2Method(Aria2MethodName.GET_URIS) String getUris(String gid); diff --git a/src/main/java/cn/montaro/aria2/client/http/Aria2HttpProxy.java b/src/main/java/cn/montaro/aria2/client/http/Aria2HttpProxy.java index b6b1f95..79f9ee8 100644 --- a/src/main/java/cn/montaro/aria2/client/http/Aria2HttpProxy.java +++ b/src/main/java/cn/montaro/aria2/client/http/Aria2HttpProxy.java @@ -80,9 +80,12 @@ public class Aria2HttpProxy implements InvocationHandler { private Object deserialize(String json, Type resultType) { JsonObject jsonObject = JsonParser.parseString(json).getAsJsonObject(); - String result = jsonObject.get("result").getAsString(); + JsonElement result = jsonObject.get("result"); + if (result instanceof JsonObject && resultType.equals(String.class)) { + return result.toString(); + } if (resultType.equals(String.class)) { - return result; + return result.getAsString(); } return gson.fromJson(result, resultType); } diff --git a/src/main/java/cn/montaro/aria2/resp/Aria2File.java b/src/main/java/cn/montaro/aria2/resp/Aria2File.java new file mode 100644 index 0000000..96f2c1d --- /dev/null +++ b/src/main/java/cn/montaro/aria2/resp/Aria2File.java @@ -0,0 +1,21 @@ +package cn.montaro.aria2.resp; + +import lombok.Data; + +import java.util.List; + +/** + * Description: + * + * @author ZhangJiaYu + * @date 2022/9/16 + */ +@Data +public class Aria2File { + private Long completedLength; + private Integer index; + private Long length; + private String path; + private Boolean selected; + private List uris; +} diff --git a/src/main/java/cn/montaro/aria2/resp/Aria2Status.java b/src/main/java/cn/montaro/aria2/resp/Aria2Status.java new file mode 100644 index 0000000..4bb01ce --- /dev/null +++ b/src/main/java/cn/montaro/aria2/resp/Aria2Status.java @@ -0,0 +1,37 @@ +package cn.montaro.aria2.resp; + +import com.google.gson.annotations.SerializedName; +import lombok.Data; + +import java.util.List; + +/** + * Description: + * + * @author ZhangJiaYu + * @date 2022/9/16 + */ +@Data +public class Aria2Status { + private String bitfield; + private Bittorrent bittorrent; + private Long completedLength; + private Integer connections; + private String dir; + private Long downloadSpeed; + private Integer errorCode; + private String errorMessage; + private List files; + private String following; + private List followedBy; + private String gid; + private String infoHash; + private Integer numPieces; + private Integer numSeeders; + private Long pieceLength; + private Boolean seeder; + private String status; + private Long totalLength; + private Long uploadLength; + private Long uploadSpeed; +} diff --git a/src/main/java/cn/montaro/aria2/resp/Bittorrent.java b/src/main/java/cn/montaro/aria2/resp/Bittorrent.java new file mode 100644 index 0000000..968a23a --- /dev/null +++ b/src/main/java/cn/montaro/aria2/resp/Bittorrent.java @@ -0,0 +1,16 @@ +package cn.montaro.aria2.resp; + +import lombok.Data; + +import java.util.List; + +/** + * Description: + * + * @author ZhangJiaYu + * @date 2022/9/16 + */ +@Data +public class Bittorrent { + private List> announceList; +} diff --git a/src/test/java/Aria2ClientTest.java b/src/test/java/Aria2ClientTest.java index 91e363f..72ab427 100644 --- a/src/test/java/Aria2ClientTest.java +++ b/src/test/java/Aria2ClientTest.java @@ -2,8 +2,11 @@ import cn.hutool.core.collection.ListUtil; import cn.montaro.aria2.Aria2Client; import cn.montaro.aria2.Aria2ClientFactory; import cn.montaro.aria2.Aria2Config; +import cn.montaro.aria2.resp.Aria2Status; import org.junit.Test; +import java.util.List; + public class Aria2ClientTest { Aria2Config config = new Aria2Config() @@ -17,4 +20,19 @@ public class Aria2ClientTest { String gid = client.addUri(ListUtil.of("magnet:?xt=urn:btih:308f0122b1c3af5db9f3660775a6a2d81bd1e120"), null, null); System.out.println("gid = " + gid); } + + @Test + public void status() { + String gid = "acc1c7d7c2043dba"; + Aria2Status status = client.tellStatus(gid); + System.out.println(status); + List followedBy = status.getFollowedBy(); + if (followedBy != null && followedBy.size() != 0) { + gid = followedBy.get(0); + status = client.tellStatus(gid); + System.out.println(status); + + } + + } }