You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
3.7 KiB
102 lines
3.7 KiB
package com.github.catvod.spider;
|
|
|
|
import android.content.Context;
|
|
import android.os.Environment;
|
|
|
|
import com.github.catvod.bean.Class;
|
|
import com.github.catvod.bean.Result;
|
|
import com.github.catvod.bean.Sub;
|
|
import com.github.catvod.bean.Vod;
|
|
import com.github.catvod.crawler.Spider;
|
|
import com.github.catvod.utils.Image;
|
|
import com.github.catvod.utils.Utils;
|
|
|
|
import java.io.File;
|
|
import java.text.SimpleDateFormat;
|
|
import java.util.ArrayList;
|
|
import java.util.Arrays;
|
|
import java.util.Collections;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.Locale;
|
|
|
|
public class Local extends Spider {
|
|
|
|
private SimpleDateFormat format;
|
|
|
|
@Override
|
|
public void init(Context context, String extend) {
|
|
format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss", Locale.getDefault());
|
|
}
|
|
|
|
@Override
|
|
public String homeContent(boolean filter) throws Exception {
|
|
List<Class> classes = new ArrayList<>();
|
|
classes.add(new Class(Environment.getExternalStorageDirectory().getAbsolutePath(), "本地文件", "1"));
|
|
File[] files = new File("/storage").listFiles();
|
|
if (files == null) return Result.string(classes, new ArrayList<>());
|
|
List<String> exclude = Arrays.asList("emulated", "sdcard", "self");
|
|
for (File file : files) {
|
|
if (exclude.contains(file.getName())) continue;
|
|
classes.add(new Class(file.getAbsolutePath(), file.getName(), "1"));
|
|
}
|
|
return Result.string(classes, new ArrayList<>());
|
|
}
|
|
|
|
@Override
|
|
public String categoryContent(String tid, String pg, boolean filter, HashMap<String, String> extend) throws Exception {
|
|
List<Vod> items = new ArrayList<>();
|
|
List<Vod> media = new ArrayList<>();
|
|
List<Vod> folders = new ArrayList<>();
|
|
File[] files = new File(tid).listFiles();
|
|
if (files == null) return Result.string(items);
|
|
Arrays.sort(files, (a, b) -> a.getName().compareTo(b.getName()));
|
|
for (File file : files) {
|
|
if (file.getName().startsWith(".")) continue;
|
|
if (file.isDirectory()) folders.add(create(file));
|
|
else if (Utils.isMedia(file.getName())) media.add(create(file));
|
|
}
|
|
items.addAll(folders);
|
|
items.addAll(media);
|
|
return Result.get().vod(items).page().string();
|
|
}
|
|
|
|
@Override
|
|
public String detailContent(List<String> ids) {
|
|
File file = new File(ids.get(0));
|
|
Vod vod = new Vod();
|
|
vod.setTypeName("FongMi");
|
|
vod.setVodId(file.getAbsolutePath());
|
|
vod.setVodName(file.getName());
|
|
vod.setVodPic(Image.VIDEO);
|
|
vod.setVodPlayFrom("播放");
|
|
vod.setVodPlayUrl(file.getName() + "$" + file.getAbsolutePath());
|
|
return Result.string(vod);
|
|
}
|
|
|
|
@Override
|
|
public String playerContent(String flag, String id, List<String> vipFlags) throws Exception {
|
|
return Result.get().url("file://" + id).subs(getSubs(id)).string();
|
|
}
|
|
|
|
private Vod create(File file) {
|
|
Vod vod = new Vod();
|
|
vod.setVodId(file.getAbsolutePath());
|
|
vod.setVodName(file.getName());
|
|
vod.setVodPic(Image.getIcon(file.isDirectory()));
|
|
vod.setVodRemarks(format.format(file.lastModified()));
|
|
vod.setVodTag(file.isDirectory() ? "folder" : "file");
|
|
return vod;
|
|
}
|
|
|
|
private List<Sub> getSubs(String path) {
|
|
File file = new File(path);
|
|
if (file.getParentFile() == null) return Collections.emptyList();
|
|
List<Sub> subs = new ArrayList<>();
|
|
for (File f : file.getParentFile().listFiles()) {
|
|
String ext = Utils.getExt(f.getName());
|
|
if (Utils.isSub(ext)) subs.add(Sub.create().name(Utils.removeExt(f.getName())).ext(ext).url("file://" + f.getAbsolutePath()));
|
|
}
|
|
return subs;
|
|
}
|
|
} |