update: 获取下载状态

This commit is contained in:
zhangjiayu 2022-09-16 16:08:32 +08:00
parent dc69a2d168
commit 4f4f51ee37
6 changed files with 99 additions and 3 deletions

View File

@ -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);

View File

@ -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);
}

View File

@ -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<String> uris;
}

View File

@ -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<Aria2File> files;
private String following;
private List<String> 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;
}

View File

@ -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<List<String>> announceList;
}

View File

@ -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<String> followedBy = status.getFollowedBy();
if (followedBy != null && followedBy.size() != 0) {
gid = followedBy.get(0);
status = client.tellStatus(gid);
System.out.println(status);
}
}
}