修复任务记录删除失败的问题
优化网络连接状态获取的逻辑 修复配置文件的某些配置失效的问题 新增m3u8切片状态注解`@M3U8.onPeerStart`,`@M3U8.onPeerComplete`,`@M3U8.onPeerFail` 新增动态指定m3u8协议视频的下载功能(边下边播)
This commit is contained in:
@@ -17,6 +17,7 @@ package com.arialyy.compiler;
|
||||
|
||||
import com.arialyy.annotations.Download;
|
||||
import com.arialyy.annotations.DownloadGroup;
|
||||
import com.arialyy.annotations.TaskEnum;
|
||||
import com.arialyy.annotations.Upload;
|
||||
import java.lang.annotation.Annotation;
|
||||
import java.util.Collections;
|
||||
@@ -41,20 +42,12 @@ import javax.lang.model.util.Elements;
|
||||
*/
|
||||
class ParamObtainUtil {
|
||||
private Map<String, ProxyClassParam> mMethodParams = new HashMap<>();
|
||||
private Map<String, Set<String>> mListenerClass = new HashMap<>();
|
||||
private Elements mElementUtil;
|
||||
|
||||
ParamObtainUtil(Elements elements) {
|
||||
mElementUtil = elements;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取需要创建的代理类参数
|
||||
*/
|
||||
Map<String, Set<String>> getListenerClass() {
|
||||
return mListenerClass;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取搜索到的代理方法参数
|
||||
*/
|
||||
@@ -75,13 +68,17 @@ class ParamObtainUtil {
|
||||
PackageElement packageElement = mElementUtil.getPackageOf(classElement);
|
||||
|
||||
String methodName = method.getSimpleName().toString();
|
||||
String className = method.getEnclosingElement().toString(); //全类名\
|
||||
String className = method.getEnclosingElement().toString(); //全类名
|
||||
String key = className + taskEnum.proxySuffix;
|
||||
ProxyClassParam proxyEntity = mMethodParams.get(key);
|
||||
MethodInfo methodInfo = new MethodInfo();
|
||||
methodInfo.methodName = methodName;
|
||||
methodInfo.params = (List<VariableElement>) method.getParameters();
|
||||
checkMethod(taskEnum, method, annotationClazz, methodInfo.params);
|
||||
if (taskEnum == TaskEnum.M3U8_PEER) {
|
||||
checkM3U8PeerMethod(method, methodInfo.params);
|
||||
} else {
|
||||
checkTaskMethod(taskEnum, method, annotationClazz, methodInfo.params);
|
||||
}
|
||||
|
||||
if (proxyEntity == null) {
|
||||
proxyEntity = new ProxyClassParam();
|
||||
@@ -91,7 +88,7 @@ class ParamObtainUtil {
|
||||
proxyEntity.proxyClassName = proxyEntity.className + taskEnum.proxySuffix;
|
||||
proxyEntity.mainTaskEnum = taskEnum;
|
||||
if (taskEnum == TaskEnum.DOWNLOAD_GROUP_SUB || taskEnum == TaskEnum.DOWNLOAD_GROUP) {
|
||||
proxyEntity.subTaskEnum = TaskEnum.DOWNLOAD_ENTITY;
|
||||
proxyEntity.subTaskEnum = EntityInfo.DOWNLOAD;
|
||||
}
|
||||
mMethodParams.put(key, proxyEntity);
|
||||
}
|
||||
@@ -110,49 +107,52 @@ class ParamObtainUtil {
|
||||
* 获取注解的内容
|
||||
*/
|
||||
private Set<String> getValues(TaskEnum taskEnum, ExecutableElement method, int annotationType) {
|
||||
String clsName = method.getEnclosingElement().toString();
|
||||
String[] keys = null;
|
||||
switch (taskEnum) {
|
||||
case DOWNLOAD:
|
||||
keys = ValuesUtil.getDownloadValues(method, annotationType);
|
||||
addListenerMapping(clsName, ProxyConstance.COUNT_DOWNLOAD);
|
||||
break;
|
||||
case UPLOAD:
|
||||
keys = ValuesUtil.getUploadValues(method, annotationType);
|
||||
addListenerMapping(clsName, ProxyConstance.COUNT_UPLOAD);
|
||||
break;
|
||||
case DOWNLOAD_GROUP:
|
||||
keys = ValuesUtil.getDownloadGroupValues(method, annotationType);
|
||||
addListenerMapping(clsName, ProxyConstance.COUNT_DOWNLOAD_GROUP);
|
||||
break;
|
||||
case DOWNLOAD_GROUP_SUB:
|
||||
keys = ValuesUtil.getDownloadGroupSubValues(method, annotationType);
|
||||
addListenerMapping(clsName, ProxyConstance.COUNT_DOWNLOAD_GROUP_SUB);
|
||||
break;
|
||||
case M3U8_PEER:
|
||||
keys = ValuesUtil.getM3U8PeerValues(method, annotationType);
|
||||
break;
|
||||
}
|
||||
return keys == null ? null : convertSet(keys);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加方法映射
|
||||
*
|
||||
* @param clsName 注解事件的类
|
||||
* @param key {@link ProxyConstance#COUNT_DOWNLOAD}、{@link ProxyConstance#COUNT_UPLOAD}、{@link
|
||||
* ProxyConstance#COUNT_DOWNLOAD_GROUP}、{@link ProxyConstance#COUNT_DOWNLOAD_GROUP_SUB}
|
||||
* 检查m3u8注解方法参数
|
||||
*/
|
||||
void addListenerMapping(String clsName, String key) {
|
||||
Set<String> cls = mListenerClass.get(key);
|
||||
if (cls == null) {
|
||||
cls = new HashSet<>();
|
||||
mListenerClass.put(key, cls);
|
||||
private void checkM3U8PeerMethod(ExecutableElement method, List<VariableElement> params) {
|
||||
String methodName = method.getSimpleName().toString();
|
||||
String className = method.getEnclosingElement().toString();
|
||||
Set<Modifier> modifiers = method.getModifiers();
|
||||
if (modifiers.contains(Modifier.PRIVATE)) {
|
||||
throw new IllegalAccessError(String.format("%s.%s, 不能为private方法", className, methodName));
|
||||
}
|
||||
|
||||
if (params.size() != 3
|
||||
|| !params.get(0).asType().toString().equals(String.class.getName())
|
||||
|| !params.get(1).asType().toString().equals(String.class.getName())
|
||||
|| !params.get(2).asType().toString().equals("int")) {
|
||||
throw new IllegalArgumentException(
|
||||
String.format("%s.%s 的参数错误,该方法需要的参数为:String, String, int", className,
|
||||
methodName));
|
||||
}
|
||||
cls.add(clsName);
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查和下载相关的方法,如果被注解的方法为private或参数不合法,则抛异常
|
||||
* 检查任务注解的相关参数,如果被注解的方法为private或参数不合法或参数错误,停止任务
|
||||
*/
|
||||
private void checkMethod(TaskEnum taskEnum, ExecutableElement method,
|
||||
private void checkTaskMethod(TaskEnum taskEnum, ExecutableElement method,
|
||||
Class<? extends Annotation> annotationClazz, List<VariableElement> params) {
|
||||
String methodName = method.getSimpleName().toString();
|
||||
String className = method.getEnclosingElement().toString();
|
||||
@@ -162,7 +162,28 @@ class ParamObtainUtil {
|
||||
}
|
||||
if (taskEnum == TaskEnum.DOWNLOAD_GROUP_SUB) {
|
||||
if (isFailAnnotation(annotationClazz)) {
|
||||
if (params.size() != 3 && params.size() != 2) {
|
||||
if (params.size() < 2 || params.size() > 3) {
|
||||
throw new IllegalArgumentException(
|
||||
String.format("%s.%s参数错误, 参数只能是两个或三个,第一个参数是:%s,第二个参数是:%s,第三个参数(可选)是:%s", className,
|
||||
methodName,
|
||||
getCheckParams(taskEnum), getCheckSubParams(taskEnum),
|
||||
Exception.class.getSimpleName()));
|
||||
}
|
||||
|
||||
if (params.size() == 2
|
||||
&& (!params.get(0).asType().toString().equals(getCheckParams(taskEnum))
|
||||
|| !params.get(1).asType().toString().equals(getCheckSubParams(taskEnum)))) {
|
||||
throw new IllegalArgumentException(
|
||||
String.format("%s.%s参数错误, 参数只能是两个或三个,第一个参数是:%s,第二个参数是:%s,第三个参数(可选)是:%s", className,
|
||||
methodName,
|
||||
getCheckParams(taskEnum), getCheckSubParams(taskEnum),
|
||||
Exception.class.getSimpleName()));
|
||||
}
|
||||
|
||||
if (params.size() == 3
|
||||
&& (!params.get(0).asType().toString().equals(getCheckParams(taskEnum))
|
||||
|| !params.get(1).asType().toString().equals(getCheckSubParams(taskEnum))
|
||||
|| !params.get(2).asType().toString().equals(Exception.class.getName()))) {
|
||||
throw new IllegalArgumentException(
|
||||
String.format("%s.%s参数错误, 参数只能是两个或三个,第一个参数是:%s,第二个参数是:%s,第三个参数(可选)是:%s", className,
|
||||
methodName,
|
||||
@@ -170,39 +191,46 @@ class ParamObtainUtil {
|
||||
Exception.class.getSimpleName()));
|
||||
}
|
||||
} else {
|
||||
if (params.size() != 2) {
|
||||
if (params.size() == 2
|
||||
&& (!params.get(0).asType().toString().equals(getCheckParams(taskEnum))
|
||||
|| !params.get(1).asType().toString().equals(getCheckSubParams(taskEnum)))) {
|
||||
throw new IllegalArgumentException(
|
||||
String.format("%s.%s参数错误, 参数只能是两个,第一个参数是:%s,第二个参数是:%s", className, methodName,
|
||||
String.format("%s.%s参数错误, 参数只能是两个或三个,第一个参数是:%s,第二个参数是:%s", className,
|
||||
methodName,
|
||||
getCheckParams(taskEnum), getCheckSubParams(taskEnum)));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (isFailAnnotation(annotationClazz)) {
|
||||
if (params.size() != 1 && params.size() != 2) {
|
||||
if (params.size() < 1 || params.size() > 2) {
|
||||
throw new IllegalArgumentException(
|
||||
String.format("%s.%s参数错误, 参数只能有一个或两个,第一个参数是:%s,第二个参(可选)数是:%s", className, methodName,
|
||||
String.format("%s.%s参数错误, 参数只能有一个或两个,第一个参数是:%s,第二个参数(可选)是:%s", className, methodName,
|
||||
getCheckParams(taskEnum), Exception.class.getSimpleName()));
|
||||
}
|
||||
|
||||
if (params.size() == 1
|
||||
&& (!params.get(0).asType().toString().equals(getCheckParams(taskEnum)))) {
|
||||
throw new IllegalArgumentException(
|
||||
String.format("%s.%s参数错误, 参数只能有一个或两个,第一个参数是:%s,第二个参数(可选)是:%s", className, methodName,
|
||||
getCheckParams(taskEnum), Exception.class.getSimpleName()));
|
||||
}
|
||||
|
||||
if (params.size() == 2
|
||||
&& (!params.get(0).asType().toString().equals(getCheckParams(taskEnum))
|
||||
|| !params.get(1).asType().toString().equals(Exception.class.getName()))) {
|
||||
throw new IllegalArgumentException(
|
||||
String.format("%s.%s参数错误, 参数只能有一个或两个,第一个参数是:%s,第二个参数(可选)是:%s", className, methodName,
|
||||
getCheckParams(taskEnum), Exception.class.getSimpleName()));
|
||||
}
|
||||
} else {
|
||||
if (params.size() != 1) {
|
||||
if (params.size() != 1
|
||||
&& !params.get(0).asType().toString().equals(getCheckParams(taskEnum))) {
|
||||
throw new IllegalArgumentException(
|
||||
String.format("%s.%s参数错误, 参数只能有一个,且参数必须是:%s", className, methodName,
|
||||
getCheckParams(taskEnum)));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!params.get(0).asType().toString().equals(getCheckParams(taskEnum))) {
|
||||
throw new IllegalArgumentException(
|
||||
String.format("%s.%s参数【%s】类型错误,参数必须是:%s", className, methodName,
|
||||
params.get(0).getSimpleName(), getCheckParams(taskEnum)));
|
||||
}
|
||||
if (taskEnum == TaskEnum.DOWNLOAD_GROUP_SUB) {
|
||||
if (!params.get(1).asType().toString().equals(getCheckSubParams(taskEnum))) {
|
||||
throw new IllegalArgumentException(
|
||||
String.format("%s.%s参数【%s】类型错误,参数必须是:%s", className, methodName,
|
||||
params.get(0).getSimpleName(), getCheckSubParams(taskEnum)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -241,7 +269,7 @@ class ParamObtainUtil {
|
||||
*/
|
||||
private String getCheckSubParams(TaskEnum taskEnum) {
|
||||
if (taskEnum == TaskEnum.DOWNLOAD_GROUP_SUB) {
|
||||
return TaskEnum.DOWNLOAD_ENTITY.pkg + "." + TaskEnum.DOWNLOAD_ENTITY.className;
|
||||
return EntityInfo.DOWNLOAD.pkg + "." + EntityInfo.DOWNLOAD.className;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user