diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 00000000..6560a989
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index fbe5affc..e0ba2cbf 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,16 +1,21 @@
+
+
+
+
-
+
diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml
new file mode 100644
index 00000000..797acea5
--- /dev/null
+++ b/.idea/runConfigurations.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/github/catvod/crawler/JarLoader.java b/app/src/main/java/com/github/catvod/crawler/JarLoader.java
index 00bcb35d..0fdc726e 100644
--- a/app/src/main/java/com/github/catvod/crawler/JarLoader.java
+++ b/app/src/main/java/com/github/catvod/crawler/JarLoader.java
@@ -23,11 +23,9 @@ import okhttp3.Response;
public class JarLoader {
private ConcurrentHashMap classLoaders = new ConcurrentHashMap<>();
+ private ConcurrentHashMap proxyMethods = new ConcurrentHashMap<>();
private ConcurrentHashMap spiders = new ConcurrentHashMap<>();
- /**
- * always from main jar.
- */
- private Method proxyFun = null;
+ private volatile String recentJarKey = "";
/**
* 不要在主线程调用我
@@ -36,7 +34,8 @@ public class JarLoader {
*/
public boolean load(String cache) {
spiders.clear();
- proxyFun = null;
+ recentJarKey = "main";
+ proxyMethods.clear();
classLoaders.clear();
return loadClassLoader(cache, "main");
}
@@ -61,7 +60,7 @@ public class JarLoader {
try {
Class proxy = classLoader.loadClass("com.github.catvod.spider.Proxy");
Method mth = proxy.getMethod("proxy", Map.class);
- proxyFun = mth;
+ proxyMethods.put(key, mth);
} catch (Throwable th) {
}
@@ -83,22 +82,18 @@ public class JarLoader {
return success;
}
- private DexClassLoader loadJarInternal(String jar) {
- String[] urls = jar.split(";md5;");
- String jarUrl = urls[0];
- String urlMd5 = MD5.string2MD5(jarUrl);
- if (classLoaders.contains(urlMd5))
- return classLoaders.get(urlMd5);
- String md5 = urls.length > 1 ? urls[1].trim() : "";
- File cache = new File(App.getInstance().getFilesDir().getAbsolutePath() + "/" + urlMd5 + ".jar");
+ private DexClassLoader loadJarInternal(String jar, String md5, String key) {
+ if (classLoaders.contains(key))
+ return classLoaders.get(key);
+ File cache = new File(App.getInstance().getFilesDir().getAbsolutePath() + "/" + key + ".jar");
if (!md5.isEmpty()) {
if (cache.exists() && MD5.getFileMd5(cache).equalsIgnoreCase(md5)) {
- loadClassLoader(cache.getAbsolutePath(), urlMd5);
- return classLoaders.get(urlMd5);
+ loadClassLoader(cache.getAbsolutePath(), key);
+ return classLoaders.get(key);
}
}
try {
- Response response = OkGo.get(jarUrl).execute();
+ Response response = OkGo.get(jar).execute();
InputStream is = response.body().byteStream();
OutputStream os = new FileOutputStream(cache);
try {
@@ -115,8 +110,8 @@ public class JarLoader {
e.printStackTrace();
}
}
- loadClassLoader(cache.getAbsolutePath(), urlMd5);
- return classLoaders.get(urlMd5);
+ loadClassLoader(cache.getAbsolutePath(), key);
+ return classLoaders.get(key);
} catch (Throwable e) {
e.printStackTrace();
}
@@ -125,19 +120,34 @@ public class JarLoader {
public Spider getSpider(String key, String cls, String ext, String jar) {
String clsKey = cls.replace("csp_", "");
+ String jarUrl = "";
+ String jarMd5 = "";
+ String jarKey = "";
+ if (jar.isEmpty()) {
+ jarKey = "main";
+ } else {
+ String[] urls = jar.split(";md5;");
+ jarUrl = urls[0];
+ jarKey = MD5.string2MD5(jarUrl);
+ jarMd5 = urls.length > 1 ? urls[1].trim() : "";
+ }
+ recentJarKey = jarKey;
if (spiders.containsKey(key))
return spiders.get(key);
DexClassLoader classLoader = null;
- if (jar.isEmpty())
+ if (jarKey.equals("main"))
classLoader = classLoaders.get("main");
else {
- classLoader = loadJarInternal(jar);
+ classLoader = loadJarInternal(jarUrl, jarMd5, jarKey);
}
if (classLoader == null)
return new SpiderNull();
try {
Spider sp = (Spider) classLoader.loadClass("com.github.catvod.spider." + clsKey).newInstance();
sp.init(App.getInstance(), ext);
+ if (!jar.isEmpty()) {
+ sp.homeContent(false); // 增加此行 应该可以解决部分写的有问题源的历史记录问题 但会增加这个源的首次加载时间 不需要可以已删掉
+ }
spiders.put(key, sp);
return sp;
} catch (Throwable th) {
@@ -176,6 +186,7 @@ public class JarLoader {
public Object[] proxyInvoke(Map params) {
try {
+ Method proxyFun = proxyMethods.get(recentJarKey);
if (proxyFun != null) {
return (Object[]) proxyFun.invoke(null, params);
}
diff --git a/app/src/main/java/com/github/tvbox/osc/base/BaseActivity.java b/app/src/main/java/com/github/tvbox/osc/base/BaseActivity.java
index 4b48f2e5..47ba0aff 100644
--- a/app/src/main/java/com/github/tvbox/osc/base/BaseActivity.java
+++ b/app/src/main/java/com/github/tvbox/osc/base/BaseActivity.java
@@ -205,6 +205,8 @@ public abstract class BaseActivity extends AppCompatActivity implements CustomAd
// 采样率
opts.inSampleSize = scale;
globalWp = new BitmapDrawable(BitmapFactory.decodeFile(wp.getAbsolutePath(), opts));
+ } else {
+ globalWp = null;
}
} catch (Throwable throwable) {
throwable.printStackTrace();
@@ -215,4 +217,4 @@ public abstract class BaseActivity extends AppCompatActivity implements CustomAd
else
getWindow().setBackgroundDrawableResource(R.drawable.app_bg);
}
-}
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/github/tvbox/osc/player/controller/VodController.java b/app/src/main/java/com/github/tvbox/osc/player/controller/VodController.java
index 74a82068..b81f8775 100644
--- a/app/src/main/java/com/github/tvbox/osc/player/controller/VodController.java
+++ b/app/src/main/java/com/github/tvbox/osc/player/controller/VodController.java
@@ -37,6 +37,7 @@ import xyz.doikki.videoplayer.util.PlayerUtils;
import static xyz.doikki.videoplayer.util.PlayerUtils.stringForTime;
+//视频播放页面控件
public class VodController extends BaseController {
public VodController(@NonNull @NotNull Context context) {
super(context);
@@ -54,7 +55,6 @@ public class VodController extends BaseController {
}
case 1002: { // 显示底部菜单
mBottomRoot.setVisibility(VISIBLE);
- mBottomRoot.requestFocus();
break;
}
case 1003: { // 隐藏底部菜单
@@ -284,6 +284,7 @@ public class VodController extends BaseController {
}
}
});
+// 增加播放页面片头片尾时间重置
findViewById(R.id.play_time_reset).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
@@ -304,6 +305,7 @@ public class VodController extends BaseController {
int step = Hawk.get(HawkConfig.PLAY_TIME_STEP, 5);
int st = mPlayerConfig.getInt("st");
st += step;
+ //片头最大跳过时间10分钟
if (st > 60 * 10)
st = 0;
mPlayerConfig.put("st", st);
@@ -321,6 +323,7 @@ public class VodController extends BaseController {
int step = Hawk.get(HawkConfig.PLAY_TIME_STEP, 5);
int et = mPlayerConfig.getInt("et");
et += step;
+ //片尾最大跳过时间10分钟
if (et > 60 * 10)
et = 0;
mPlayerConfig.put("et", et);
@@ -562,7 +565,6 @@ public class VodController extends BaseController {
} else if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
if (!isBottomVisible()) {
showBottom();
- return true;
}
}
} else if (action == KeyEvent.ACTION_UP) {
diff --git a/app/src/main/java/com/github/tvbox/osc/ui/activity/DetailActivity.java b/app/src/main/java/com/github/tvbox/osc/ui/activity/DetailActivity.java
index b49c7274..e1824ddf 100644
--- a/app/src/main/java/com/github/tvbox/osc/ui/activity/DetailActivity.java
+++ b/app/src/main/java/com/github/tvbox/osc/ui/activity/DetailActivity.java
@@ -279,8 +279,7 @@ public class DetailActivity extends BaseActivity {
seriesAdapter.getData().get(vodInfo.playIndex).selected = true;
seriesAdapter.notifyItemChanged(vodInfo.playIndex);
jumpToPlay();
- if (showPreview && !fullWindows)
- toggleFullPreview();
+// if (showPreview && !fullWindows) toggleFullPreview();
}
}
});
diff --git a/app/src/main/java/com/github/tvbox/osc/ui/dialog/ApiDialog.java b/app/src/main/java/com/github/tvbox/osc/ui/dialog/ApiDialog.java
index 2a00358d..7dcd6d87 100644
--- a/app/src/main/java/com/github/tvbox/osc/ui/dialog/ApiDialog.java
+++ b/app/src/main/java/com/github/tvbox/osc/ui/dialog/ApiDialog.java
@@ -55,6 +55,7 @@ public class ApiDialog extends BaseDialog {
ivQRCode = findViewById(R.id.ivQRCode);
tvAddress = findViewById(R.id.tvAddress);
inputApi = findViewById(R.id.input);
+ //内置网络接口在此处添加
inputApi.setText(Hawk.get(HawkConfig.API_URL, ""));
findViewById(R.id.inputSubmit).setOnClickListener(new View.OnClickListener() {
@Override
diff --git a/app/src/main/java/com/github/tvbox/osc/ui/fragment/ModelSettingFragment.java b/app/src/main/java/com/github/tvbox/osc/ui/fragment/ModelSettingFragment.java
index 122801dc..d2306fad 100644
--- a/app/src/main/java/com/github/tvbox/osc/ui/fragment/ModelSettingFragment.java
+++ b/app/src/main/java/com/github/tvbox/osc/ui/fragment/ModelSettingFragment.java
@@ -44,7 +44,7 @@ import tv.danmaku.ijk.media.player.IjkMediaPlayer;
/**
* @author pj567
* @date :2020/12/23
- * @description: 设置页面
+ * @description:
*/
public class ModelSettingFragment extends BaseLazyFragment {
private TextView tvDebugOpen;
@@ -162,6 +162,16 @@ public class ModelSettingFragment extends BaseLazyFragment {
});
}
});
+ findViewById(R.id.llWpRecovery).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ FastClickCheckUtil.check(v);
+ File wp = new File(requireActivity().getFilesDir().getAbsolutePath() + "/wp");
+ if (wp.exists())
+ wp.delete();
+ ((BaseActivity) requireActivity()).changeWallpaper(true);
+ }
+ });
findViewById(R.id.llHomeApi).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@@ -513,4 +523,4 @@ public class ModelSettingFragment extends BaseLazyFragment {
return "缩略图";
}
}
-}
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java b/app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java
index 9194a6b8..80cc05b0 100644
--- a/app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java
+++ b/app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java
@@ -350,10 +350,10 @@ public class PlayFragment extends BaseLazyFragment {
mVodPlayerCfg.put("sp", 1.0f);
}
if (!mVodPlayerCfg.has("st")) {
- mVodPlayerCfg.put("st", 60);
+ mVodPlayerCfg.put("st", 0);
}
if (!mVodPlayerCfg.has("et")) {
- mVodPlayerCfg.put("et", 60);
+ mVodPlayerCfg.put("et", 0);
}
} catch (Throwable th) {
diff --git a/app/src/main/res/layout/fragment_model.xml b/app/src/main/res/layout/fragment_model.xml
index b721aab9..f9aff1ad 100644
--- a/app/src/main/res/layout/fragment_model.xml
+++ b/app/src/main/res/layout/fragment_model.xml
@@ -574,40 +574,87 @@
android:textSize="@dimen/ts_30" />
+
-
-
-
-
-
-
+ android:focusable="false"
+ android:orientation="horizontal">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -647,4 +694,4 @@
-
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/player_vod_control_view.xml b/app/src/main/res/layout/player_vod_control_view.xml
index 44da7f13..fa42cec8 100644
--- a/app/src/main/res/layout/player_vod_control_view.xml
+++ b/app/src/main/res/layout/player_vod_control_view.xml
@@ -175,7 +175,19 @@
android:text="1S"
android:textColor="@android:color/white"
android:textSize="@dimen/ts_24" />
-
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index ec34bb7a..02ea1298 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,3 +1,4 @@
+
TVBox
\ No newline at end of file