Clean thunder code

pull/137/head
FongMi 3 years ago
parent a34b15aa8d
commit af3b57aa9b
  1. 4
      app/src/main/java/com/fongmi/android/tv/model/SiteViewModel.java
  2. 6
      app/src/main/java/com/fongmi/android/tv/utils/Sniffer.java
  3. 14
      thunder/src/main/java/com/xunlei/downloadlib/Util.java
  4. 41
      thunder/src/main/java/com/xunlei/downloadlib/XLDownloadManager.java
  5. 89
      thunder/src/main/java/com/xunlei/downloadlib/XLTaskHelper.java
  6. 13
      thunder/src/main/java/com/xunlei/downloadlib/parameter/TorrentInfo.java
  7. 4
      thunder/src/main/java/com/xunlei/downloadlib/parameter/XLTaskInfo.java

@ -226,8 +226,8 @@ public class SiteViewModel extends ViewModel {
File folder = Path.thunder(Util.md5(episode.getUrl()));
GetTaskId taskId = XLTaskHelper.get().addThunderTask(episode.getUrl(), folder);
while (XLTaskHelper.get().getTaskInfo(taskId).getTaskStatus() != 2) SystemClock.sleep(10);
TorrentFileInfo[] infoArray = XLTaskHelper.get().getTorrentInfo(taskId.getSaveFile()).getSubFileInfo();
for (TorrentFileInfo info : infoArray) if (Sniffer.isMedia(info.getExt())) items.add(new Vod.Flag.Episode(info.getFileName(), info.getPlayUrl(taskId.getSaveFile())));
List<TorrentFileInfo> medias = XLTaskHelper.get().getTorrentInfo(taskId.getSaveFile()).getMedias();
for (TorrentFileInfo media : medias) items.add(new Vod.Flag.Episode(media.getFileName(), media.getPlayUrl(taskId.getSaveFile())));
if (items.size() > 0) flag.setEpisodes(items);
XLTaskHelper.get().stopTask(taskId);
}

@ -19,8 +19,6 @@ public class Sniffer {
public static final String CHROME = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36";
public static final Pattern RULE = Pattern.compile("http((?!http).){12,}?\\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg|m4a|mp3)\\?.*|http((?!http).){12,}\\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg|m4a|mp3)|http((?!http).)*?video/tos*");
public static final List<String> VIDEO = Arrays.asList("avi", "flv", "mkv", "mov", "mp4", "mpeg", "mpe", "mpg", "wmv");
public static final List<String> AUDIO = Arrays.asList("aac", "ape", "flac", "mp3", "m4a", "ogg");
public static final List<String> PUSH = Arrays.asList("http", "https", "smb", "ftp", "ed2k", "magnet", "thunder");
private static boolean matchOrContain(String url) {
@ -33,10 +31,6 @@ public class Sniffer {
return false;
}
public static boolean isMedia(String ext) {
return VIDEO.contains(ext) || AUDIO.contains(ext);
}
public static boolean isPush(Uri uri) {
return PUSH.contains(uri.getScheme());
}

@ -0,0 +1,14 @@
package com.xunlei.downloadlib;
import java.util.Arrays;
import java.util.List;
public class Util {
private static final List<String> VIDEO = Arrays.asList("avi", "flv", "mkv", "mov", "mp4", "mpeg", "mpe", "mpg", "wmv");
private static final List<String> AUDIO = Arrays.asList("aac", "ape", "flac", "mp3", "m4a", "ogg");
public static boolean isMedia(String ext) {
return VIDEO.contains(ext) || AUDIO.contains(ext);
}
}

@ -7,6 +7,7 @@ import android.content.IntentFilter;
import android.os.Build;
import android.util.Log;
import com.github.catvod.Init;
import com.xunlei.downloadlib.android.XLUtil;
import com.xunlei.downloadlib.parameter.BtIndexSet;
import com.xunlei.downloadlib.parameter.BtSubTaskDetail;
@ -26,43 +27,33 @@ import com.xunlei.downloadlib.parameter.XLTaskLocalUrl;
public class XLDownloadManager {
private final String TAG = XLDownloadManager.class.getSimpleName();
private final XLLoader loader;
private XLLoader loader;
private NetworkChangeReceiver receiver;
private final Context context;
private boolean init;
private Context context;
public XLDownloadManager(Context context) {
public XLDownloadManager() {
this.context = Init.getContext();
this.loader = new XLLoader();
this.context = context;
this.init();
}
public synchronized void init() {
if (init) {
Log.i(TAG, "XLDownloadManager is already init");
return;
}
public void init() {
InitParam param = new InitParam(context.getFilesDir().getAbsolutePath());
int code = loader.init(param.getSoKey(), "com.android.providers.downloads", param.mAppVersion, "", getPeerId(), getGuid(), param.mStatSavePath, param.mStatCfgSavePath, XLUtil.getNetworkType(context), param.mPermissionLevel, param.mQueryConfOnInit);
if (code != 9000) {
init = false;
Log.i(TAG, "XLDownloadManager init fail");
} else {
getDownloadLibVersion(new GetDownloadLibVersion());
setOSVersion(Build.VERSION.INCREMENTAL + "_alpha");
setLocalProperty("PhoneModel", Build.MODEL);
setStatReportSwitch(false);
setSpeedLimit(-1, -1);
registerReceiver();
init = true;
}
loader.init(param.getSoKey(), "com.android.providers.downloads", param.mAppVersion, "", getPeerId(), getGuid(), param.mStatSavePath, param.mStatCfgSavePath, XLUtil.getNetworkType(context), param.mPermissionLevel, param.mQueryConfOnInit);
getDownloadLibVersion(new GetDownloadLibVersion());
setOSVersion(Build.VERSION.INCREMENTAL + "_alpha");
setLocalProperty("PhoneModel", Build.MODEL);
setStatReportSwitch(false);
setSpeedLimit(-1, -1);
registerReceiver();
}
public synchronized void release() {
public void release() {
unregisterReceiver();
loader.unInit();
init = false;
context = null;
loader = null;
}
private void registerReceiver() {

@ -1,9 +1,7 @@
package com.xunlei.downloadlib;
import android.text.TextUtils;
import android.util.Pair;
import com.github.catvod.Init;
import com.github.catvod.utils.Path;
import com.xunlei.downloadlib.parameter.BtIndexSet;
import com.xunlei.downloadlib.parameter.BtSubTaskDetail;
@ -20,18 +18,14 @@ import com.xunlei.downloadlib.parameter.XLTaskInfo;
import com.xunlei.downloadlib.parameter.XLTaskLocalUrl;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.atomic.AtomicInteger;
public class XLTaskHelper {
private final List<Pair<String, String>> requestHeaders;
private final XLDownloadManager downloadManager;
private final AtomicInteger seq;
private XLDownloadManager manager;
private AtomicInteger seq;
private static class Loader {
static volatile XLTaskHelper INSTANCE = new XLTaskHelper();
@ -41,10 +35,12 @@ public class XLTaskHelper {
return Loader.INSTANCE;
}
public XLTaskHelper() {
seq = new AtomicInteger(0);
requestHeaders = new ArrayList<>();
downloadManager = new XLDownloadManager(Init.getContext());
private AtomicInteger getSeq() {
return seq = seq == null ? new AtomicInteger(0) : seq;
}
private XLDownloadManager getManager() {
return manager = manager == null ? new XLDownloadManager() : manager;
}
public synchronized GetTaskId addThunderTask(String url, File savePath) {
@ -53,10 +49,10 @@ public class XLTaskHelper {
public synchronized GetTaskId addThunderTask(String url, File savePath, String fileName) {
GetTaskId taskId = new GetTaskId(savePath, fileName);
if (url.startsWith("thunder://")) url = downloadManager.parserThunderUrl(url);
if (url.startsWith("thunder://")) url = getManager().parserThunderUrl(url);
if (TextUtils.isEmpty(fileName)) {
GetFileName getFileName = new GetFileName();
downloadManager.getFileNameFromUrl(url, getFileName);
getManager().getFileNameFromUrl(url, getFileName);
fileName = getFileName.getFileName();
taskId.setFileName(fileName);
}
@ -65,12 +61,12 @@ public class XLTaskHelper {
param.setFilePath(savePath.getAbsolutePath());
param.setFileName(fileName);
param.setUrl(url);
int code = downloadManager.createBtMagnetTask(param, taskId);
int code = getManager().createBtMagnetTask(param, taskId);
if (code != XLConstant.XLErrorCode.NO_ERROR) return taskId;
} else if (url.startsWith("ftp://")) {
P2spTaskParam param = new P2spTaskParam();
param.setFilePath(savePath.getAbsolutePath());
param.setSeqId(seq.incrementAndGet());
param.setSeqId(getSeq().incrementAndGet());
param.setFileName(fileName);
param.setCreateMode(1);
param.setUrl(url);
@ -78,38 +74,37 @@ public class XLTaskHelper {
param.setRefUrl("");
param.setUser("");
param.setPass("");
int code = downloadManager.createP2spTask(param, taskId);
int code = getManager().createP2spTask(param, taskId);
if (code != XLConstant.XLErrorCode.NO_ERROR) return taskId;
downloadManager.setDownloadTaskOrigin(taskId.getTaskId(), "out_app/out_app_paste");
downloadManager.setOriginUserAgent(taskId.getTaskId(), "AndroidDownloadManager/5.41.2.4980 (Linux; U; Android 4.4.4; Build/KTU84Q)");
addRequestHeadersToXlEngine(taskId.getTaskId());
getManager().setDownloadTaskOrigin(taskId.getTaskId(), "out_app/out_app_paste");
getManager().setOriginUserAgent(taskId.getTaskId(), "AndroidDownloadManager/5.41.2.4980 (Linux; U; Android 4.4.4; Build/KTU84Q)");
} else if (url.startsWith("ed2k://")) {
EmuleTaskParam param = new EmuleTaskParam();
param.setFilePath(savePath.getAbsolutePath());
param.setSeqId(seq.incrementAndGet());
param.setSeqId(getSeq().incrementAndGet());
param.setFileName(fileName);
param.setCreateMode(1);
param.setUrl(url);
int code = downloadManager.createEmuleTask(param, taskId);
int code = getManager().createEmuleTask(param, taskId);
if (code != XLConstant.XLErrorCode.NO_ERROR) return taskId;
}
downloadManager.startTask(taskId.getTaskId());
downloadManager.setTaskGsState(taskId.getTaskId(), 0, 2);
getManager().startTask(taskId.getTaskId());
getManager().setTaskGsState(taskId.getTaskId(), 0, 2);
return taskId;
}
public synchronized GetTaskId addTorrentTask(File torrent, File savePath, int index) {
TorrentInfo torrentInfo = new TorrentInfo();
downloadManager.getTorrentInfo(torrent.getAbsolutePath(), torrentInfo);
getManager().getTorrentInfo(torrent.getAbsolutePath(), torrentInfo);
TorrentFileInfo[] fileInfos = torrentInfo.mSubFileInfo;
BtTaskParam taskParam = new BtTaskParam();
taskParam.setCreateMode(1);
taskParam.setMaxConcurrent(3);
taskParam.setSeqId(seq.incrementAndGet());
taskParam.setMaxConcurrent(10);
taskParam.setSeqId(getSeq().incrementAndGet());
taskParam.setFilePath(savePath.getAbsolutePath());
taskParam.setTorrentPath(torrent.getAbsolutePath());
GetTaskId taskId = new GetTaskId(savePath);
int code = downloadManager.createBtTask(taskParam, taskId);
int code = getManager().createBtTask(taskParam, taskId);
if (code != XLConstant.XLErrorCode.NO_ERROR) return taskId;
if (fileInfos.length > 1) {
List<Integer> list = new CopyOnWriteArrayList<>();
@ -120,38 +115,23 @@ public class XLTaskHelper {
}
BtIndexSet btIndexSet = new BtIndexSet(list.size());
for (int i = 0; i < list.size(); i++) btIndexSet.mIndexSet[i] = list.get(i);
downloadManager.deselectBtSubTask(taskId.getTaskId(), btIndexSet);
getManager().deselectBtSubTask(taskId.getTaskId(), btIndexSet);
}
downloadManager.startTask(taskId.getTaskId());
downloadManager.setTaskGsState(taskId.getTaskId(), index, 2);
getManager().startTask(taskId.getTaskId());
getManager().setTaskGsState(taskId.getTaskId(), index, 2);
return taskId;
}
public void addHeader(String key, String value) {
requestHeaders.add(Pair.create(key, value));
}
private Collection<Pair<String, String>> getHeaders() {
return Collections.unmodifiableList(requestHeaders);
}
private void addRequestHeadersToXlEngine(long taskId) {
for (Pair<String, String> pair : getHeaders()) {
if (!(pair.first == null || pair.second == null)) {
downloadManager.setHttpHeaderProperty(taskId, pair.first, pair.second);
}
}
}
public synchronized TorrentInfo getTorrentInfo(File file) {
TorrentInfo torrentInfo = new TorrentInfo();
downloadManager.getTorrentInfo(file.getAbsolutePath(), torrentInfo);
getManager().getTorrentInfo(file.getAbsolutePath(), torrentInfo);
return torrentInfo;
}
public synchronized String getLocalUrl(File file) {
XLTaskLocalUrl localUrl = new XLTaskLocalUrl();
downloadManager.getLocalUrl(file.getAbsolutePath(), localUrl);
getManager().getLocalUrl(file.getAbsolutePath(), localUrl);
return localUrl.mStrUrl;
}
@ -166,23 +146,26 @@ public class XLTaskHelper {
}
public synchronized void stopTask(GetTaskId taskId) {
downloadManager.stopTask(taskId.getTaskId());
downloadManager.releaseTask(taskId.getTaskId());
getManager().stopTask(taskId.getTaskId());
getManager().releaseTask(taskId.getTaskId());
}
public synchronized XLTaskInfo getTaskInfo(GetTaskId taskId) {
XLTaskInfo taskInfo = new XLTaskInfo();
downloadManager.getTaskInfo(taskId.getTaskId(), 1, taskInfo);
if (taskId.getSaveFile().exists()) taskInfo.setTaskStatus(2);
else getManager().getTaskInfo(taskId.getTaskId(), 1, taskInfo);
return taskInfo;
}
public synchronized BtSubTaskDetail getBtSubTaskInfo(GetTaskId taskId, int index) {
BtSubTaskDetail subTaskDetail = new BtSubTaskDetail();
downloadManager.getBtSubTaskInfo(taskId.getTaskId(), index, subTaskDetail);
getManager().getBtSubTaskInfo(taskId.getTaskId(), index, subTaskDetail);
return subTaskDetail;
}
public void release() {
downloadManager.release();
manager.release();
manager = null;
seq = null;
}
}

@ -1,5 +1,10 @@
package com.xunlei.downloadlib.parameter;
import com.xunlei.downloadlib.Util;
import java.util.ArrayList;
import java.util.List;
public class TorrentInfo {
public int mFileCount;
@ -24,7 +29,13 @@ public class TorrentInfo {
return mMultiFileBaseFolder;
}
public TorrentFileInfo[] getSubFileInfo() {
private TorrentFileInfo[] getSubFileInfo() {
return mSubFileInfo == null ? new TorrentFileInfo[0] : mSubFileInfo;
}
public List<TorrentFileInfo> getMedias() {
List<TorrentFileInfo> items = new ArrayList<>();
for (TorrentFileInfo item : getSubFileInfo()) if (Util.isMedia(item.getExt())) items.add(item);
return items;
}
}

@ -174,6 +174,10 @@ public class XLTaskInfo implements Parcelable {
return mTaskStatus;
}
public void setTaskStatus(int taskStatus) {
this.mTaskStatus = taskStatus;
}
@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeLong(this.mTaskId);

Loading…
Cancel
Save