|
|
|
|
@ -7,6 +7,7 @@ import android.text.TextUtils; |
|
|
|
|
import android.util.Log; |
|
|
|
|
|
|
|
|
|
import com.github.tvbox.osc.base.App; |
|
|
|
|
import com.github.tvbox.osc.bean.Movie; |
|
|
|
|
import com.github.tvbox.osc.util.FileUtils; |
|
|
|
|
import com.xunlei.downloadlib.XLDownloadManager; |
|
|
|
|
import com.xunlei.downloadlib.XLTaskHelper; |
|
|
|
|
@ -17,7 +18,9 @@ import com.xunlei.downloadlib.parameter.XLTaskInfo; |
|
|
|
|
|
|
|
|
|
import java.io.File; |
|
|
|
|
import java.util.ArrayList; |
|
|
|
|
import java.util.HashMap; |
|
|
|
|
import java.util.List; |
|
|
|
|
import java.util.Map; |
|
|
|
|
import java.util.Random; |
|
|
|
|
import java.util.concurrent.ExecutorService; |
|
|
|
|
import java.util.concurrent.Executors; |
|
|
|
|
@ -87,105 +90,125 @@ public class Thunder { |
|
|
|
|
|
|
|
|
|
void status(int code, String info); |
|
|
|
|
|
|
|
|
|
void list(String playList); |
|
|
|
|
void list(Map<Integer, String> urlMap); |
|
|
|
|
|
|
|
|
|
void play(String url); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static ArrayList<String> playList = null; |
|
|
|
|
private static ArrayList<String> ed2kList = null; |
|
|
|
|
public static void parse(Context context, List<String> urlList, ThunderCallback callback) { |
|
|
|
|
public static void parse(Context context, Movie.Video.UrlBean urlBean, ThunderCallback callback) { |
|
|
|
|
init(context); |
|
|
|
|
stop(true); |
|
|
|
|
threadPool = Executors.newSingleThreadExecutor(); |
|
|
|
|
playList = new ArrayList<>(); |
|
|
|
|
torrentFileInfoArrayList=new ArrayList<>(); |
|
|
|
|
playList=new ArrayList<>(); |
|
|
|
|
ed2kList=new ArrayList<>(); |
|
|
|
|
ArrayList<String> jxUrls=new ArrayList<>(); |
|
|
|
|
Map<Integer, String> urlMap = new HashMap<>(); |
|
|
|
|
threadPool.execute(new Runnable() { |
|
|
|
|
@Override |
|
|
|
|
public void run() { |
|
|
|
|
for (String url : urlList) { |
|
|
|
|
if(isThunder(url) )url=XLDownloadManager.getInstance().parserThunderUrl(url); |
|
|
|
|
if (isMagnet(url) || isThunder(url) || isTorrent(url)) { |
|
|
|
|
String link = isThunder(url) ? XLDownloadManager.getInstance().parserThunderUrl(url) : url; |
|
|
|
|
Uri p = Uri.parse(link); |
|
|
|
|
if (p == null) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
String fileName = XLTaskHelper.instance().getFileName(link); |
|
|
|
|
File cache = new File(cacheRoot + File.separator + fileName); |
|
|
|
|
try { |
|
|
|
|
if (currentTask > 0) { |
|
|
|
|
XLTaskHelper.instance().stopTask(currentTask); |
|
|
|
|
currentTask = 0L; |
|
|
|
|
} |
|
|
|
|
currentTask = isMagnet(url) ? |
|
|
|
|
XLTaskHelper.instance().addMagentTask(url, cacheRoot, fileName) : |
|
|
|
|
XLTaskHelper.instance().addThunderTask(url, cacheRoot, fileName); |
|
|
|
|
} catch (Exception exception) { |
|
|
|
|
exception.printStackTrace(); |
|
|
|
|
currentTask = 0; |
|
|
|
|
} |
|
|
|
|
if (currentTask <= 0) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
int count = 20; |
|
|
|
|
Boolean conti=true; |
|
|
|
|
while (conti) { |
|
|
|
|
count--; |
|
|
|
|
if (count <= 0) { |
|
|
|
|
conti=false; |
|
|
|
|
} |
|
|
|
|
XLTaskInfo taskInfo = XLTaskHelper.instance().getTaskInfo(currentTask); |
|
|
|
|
switch (taskInfo.mTaskStatus) { |
|
|
|
|
case 2: { |
|
|
|
|
try { |
|
|
|
|
TorrentInfo torrentInfo = XLTaskHelper.instance().getTorrentInfo(cache.getAbsolutePath()); |
|
|
|
|
if (torrentInfo == null || TextUtils.isEmpty(torrentInfo.mInfoHash)) { |
|
|
|
|
} else { |
|
|
|
|
TorrentFileInfo[] mSubFileInfo = torrentInfo.mSubFileInfo; |
|
|
|
|
if (mSubFileInfo != null && mSubFileInfo.length >= 0) { |
|
|
|
|
|
|
|
|
|
for (TorrentFileInfo sub : mSubFileInfo) { |
|
|
|
|
if (isMedia(sub.mFileName)) { |
|
|
|
|
sub.torrentPath = cache.getAbsolutePath(); |
|
|
|
|
playList.add(sub.mFileName + "$tvbox-torrent:" + torrentFileInfoArrayList.size()); |
|
|
|
|
torrentFileInfoArrayList.add(sub); |
|
|
|
|
for (int idx=0;idx<urlBean.infoList.size();idx++) { |
|
|
|
|
Movie.Video.UrlBean.UrlInfo urlInfo = urlBean.infoList.get(idx); |
|
|
|
|
if (urlInfo != null) { |
|
|
|
|
String url=""; |
|
|
|
|
for (Movie.Video.UrlBean.UrlInfo.InfoBean infoBean : urlInfo.beanList) { |
|
|
|
|
url=infoBean.url; |
|
|
|
|
// if(jxUrls.contains(url))continue;
|
|
|
|
|
if(isThunder(url) )url=XLDownloadManager.getInstance().parserThunderUrl(url); |
|
|
|
|
if (isMagnet(url) || isThunder(url) || isTorrent(url)) { |
|
|
|
|
String link = isThunder(url) ? XLDownloadManager.getInstance().parserThunderUrl(url) : url; |
|
|
|
|
Uri p = Uri.parse(link); |
|
|
|
|
if (p == null) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
String fileName = XLTaskHelper.instance().getFileName(link); |
|
|
|
|
File cache = new File(cacheRoot + File.separator + fileName); |
|
|
|
|
try { |
|
|
|
|
if (currentTask > 0) { |
|
|
|
|
XLTaskHelper.instance().stopTask(currentTask); |
|
|
|
|
currentTask = 0L; |
|
|
|
|
} |
|
|
|
|
currentTask = isMagnet(url) ? |
|
|
|
|
XLTaskHelper.instance().addMagentTask(url, cacheRoot, fileName) : |
|
|
|
|
XLTaskHelper.instance().addThunderTask(url, cacheRoot, fileName); |
|
|
|
|
} catch (Exception exception) { |
|
|
|
|
exception.printStackTrace(); |
|
|
|
|
currentTask = 0; |
|
|
|
|
} |
|
|
|
|
if (currentTask <= 0) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
int count = 15; |
|
|
|
|
outerLoop: |
|
|
|
|
while (true) { |
|
|
|
|
count--; |
|
|
|
|
if (count <= 0) { |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
XLTaskInfo taskInfo = XLTaskHelper.instance().getTaskInfo(currentTask); |
|
|
|
|
if(taskInfo!=null){ |
|
|
|
|
switch (taskInfo.mTaskStatus) { |
|
|
|
|
case 2: { |
|
|
|
|
try { |
|
|
|
|
TorrentInfo torrentInfo = XLTaskHelper.instance().getTorrentInfo(cache.getAbsolutePath()); |
|
|
|
|
if (torrentInfo == null || TextUtils.isEmpty(torrentInfo.mInfoHash)) { |
|
|
|
|
|
|
|
|
|
} else { |
|
|
|
|
TorrentFileInfo[] mSubFileInfo = torrentInfo.mSubFileInfo; |
|
|
|
|
if (mSubFileInfo != null) { |
|
|
|
|
for (TorrentFileInfo sub : mSubFileInfo) { |
|
|
|
|
if (isMedia(sub.mFileName)) { |
|
|
|
|
sub.torrentPath = cache.getAbsolutePath(); |
|
|
|
|
playList.add(sub.mFileName + "$tvbox-torrent:" + torrentFileInfoArrayList.size()); |
|
|
|
|
torrentFileInfoArrayList.add(sub); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
jxUrls.add(url); |
|
|
|
|
break outerLoop; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} catch (Throwable throwable) { |
|
|
|
|
throwable.printStackTrace(); |
|
|
|
|
} |
|
|
|
|
conti=false; |
|
|
|
|
} |
|
|
|
|
case 3: { |
|
|
|
|
break outerLoop; |
|
|
|
|
} |
|
|
|
|
default: { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} catch (Throwable throwable) { |
|
|
|
|
throwable.printStackTrace(); |
|
|
|
|
} |
|
|
|
|
try { |
|
|
|
|
Thread.sleep(200); |
|
|
|
|
} catch (InterruptedException e) { |
|
|
|
|
e.printStackTrace(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
default: { |
|
|
|
|
}else { |
|
|
|
|
url=infoBean.url; |
|
|
|
|
if(isThunder(url))url=XLDownloadManager.getInstance().parserThunderUrl(url); |
|
|
|
|
if(isNetworkDownloadTask(url)){ |
|
|
|
|
task_url=url; |
|
|
|
|
if(TextUtils.isEmpty(task_url)){ |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
name = XLTaskHelper.instance().getFileName(task_url); |
|
|
|
|
playList.add(name + "$tvbox-oth:" + ed2kList.size()); |
|
|
|
|
ed2kList.add(task_url); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
try { |
|
|
|
|
Thread.sleep(100); |
|
|
|
|
} catch (InterruptedException e) { |
|
|
|
|
e.printStackTrace(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
for (String url : urlList) { |
|
|
|
|
if(isThunder(url))url=XLDownloadManager.getInstance().parserThunderUrl(url); |
|
|
|
|
if(isNetworkDownloadTask(url)){ |
|
|
|
|
task_url=url; |
|
|
|
|
if(TextUtils.isEmpty(task_url)){ |
|
|
|
|
continue; |
|
|
|
|
if (playList.size() > 0) { |
|
|
|
|
urlMap.put(idx,TextUtils.join("#", playList)); |
|
|
|
|
playList.clear(); |
|
|
|
|
} |
|
|
|
|
name = XLTaskHelper.instance().getFileName(task_url); |
|
|
|
|
playList.add(name + "$tvbox-oth:" + ed2kList.size()); |
|
|
|
|
ed2kList.add(task_url); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (playList.size() > 0) { |
|
|
|
|
callback.list(TextUtils.join("#", playList)); |
|
|
|
|
if (urlMap.size() > 0) { |
|
|
|
|
callback.list(urlMap); |
|
|
|
|
} else { |
|
|
|
|
callback.status(-1, "文件列表为空!"); |
|
|
|
|
} |
|
|
|
|
|