pull/605/head
jhengazuki 5 months ago
parent deff0d72da
commit 90b9c2f638
  1. 9
      app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java
  2. 15
      app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java
  3. 15
      app/src/main/java/com/fongmi/android/tv/api/loader/BaseLoader.java
  4. 28
      app/src/main/java/com/fongmi/android/tv/bean/History.java
  5. 18
      app/src/main/java/com/fongmi/android/tv/bean/Keep.java
  6. 2
      app/src/main/java/com/fongmi/android/tv/player/Players.java
  7. 5
      app/src/main/java/com/fongmi/android/tv/player/Source.java
  8. 23
      app/src/main/java/com/fongmi/android/tv/player/extractor/JianPian.java
  9. 6
      app/src/main/java/com/fongmi/android/tv/server/process/Action.java
  10. 2
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/HomeActivity.java
  11. 4
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingFragment.java

@ -2,6 +2,7 @@ package com.fongmi.android.tv.api.config;
import android.net.Uri;
import android.text.TextUtils;
import android.util.Log;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.R;
@ -81,7 +82,7 @@ public class LiveConfig {
}
public static void load(Config config, Callback callback) {
get().clear().config(config).load(callback);
get().config(config).load(callback);
}
public LiveConfig init() {
@ -108,7 +109,7 @@ public class LiveConfig {
}
public void load() {
if (isEmpty()) load(new Callback());
load(new Callback());
}
public void load(Callback callback) {
@ -120,7 +121,7 @@ public class LiveConfig {
private void loadConfig(Callback callback) {
try {
String text = Decoder.getJson(UrlUtil.convert(config.getUrl()));
if (!Json.isObj(text)) parseText(text, callback);
if (!Json.isObj(text)) clear().parseText(text, callback);
else checkJson(Json.parse(text).getAsJsonObject(), callback);
} catch (Throwable e) {
if (TextUtils.isEmpty(config.getUrl())) App.post(() -> callback.error(""));
@ -167,6 +168,7 @@ public class LiveConfig {
private void parseConfig(JsonObject object, Callback callback) {
try {
clear();
initLive(object);
initOther(object);
} catch (Throwable e) {
@ -177,6 +179,7 @@ public class LiveConfig {
}
private void initLive(JsonObject object) {
Log.e("DDD", "initLive");
List<Live> lives = new ArrayList<>();
String spider = Json.safeString(object, "spider");
BaseLoader.get().parseJar(spider, false);

@ -71,13 +71,14 @@ public class VodConfig {
}
public static void load(Config config, Callback callback) {
get().clear().config(config).load(callback);
get().config(config).live(true).load(callback);
}
public VodConfig init() {
this.wall = null;
this.home = null;
this.parse = null;
this.loadLive = false;
this.config = Config.vod();
this.ads = new ArrayList<>();
this.doh = new ArrayList<>();
@ -85,7 +86,6 @@ public class VodConfig {
this.sites = new ArrayList<>();
this.flags = new ArrayList<>();
this.parses = new ArrayList<>();
this.loadLive = false;
return this;
}
@ -94,6 +94,11 @@ public class VodConfig {
return this;
}
public VodConfig live(boolean loadLive) {
this.loadLive = loadLive;
return this;
}
public VodConfig clear() {
this.wall = null;
this.home = null;
@ -104,8 +109,7 @@ public class VodConfig {
this.sites.clear();
this.flags.clear();
this.parses.clear();
this.loadLive = true;
App.execute(() -> BaseLoader.get().clear());
BaseLoader.get().clear();
return this;
}
@ -148,6 +152,7 @@ public class VodConfig {
private void parseConfig(JsonObject object, Callback callback) {
try {
clear();
initSite(object);
initParse(object);
initOther(object);
@ -211,7 +216,7 @@ public class VodConfig {
private void initLive(JsonObject object) {
Config temp = Config.find(config, 1).save();
boolean sync = LiveConfig.get().needSync(config.getUrl());
if (sync) LiveConfig.get().clear().config(temp).parse(object);
if (sync) LiveConfig.get().config(temp).parse(object);
}
public List<Site> getSites() {

@ -2,6 +2,7 @@ package com.fongmi.android.tv.api.loader;
import android.text.TextUtils;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.api.config.LiveConfig;
import com.fongmi.android.tv.api.config.VodConfig;
import com.fongmi.android.tv.bean.Live;
@ -33,15 +34,17 @@ public class BaseLoader {
}
private BaseLoader() {
this.jarLoader = new JarLoader();
this.pyLoader = new PyLoader();
this.jsLoader = new JsLoader();
jarLoader = new JarLoader();
pyLoader = new PyLoader();
jsLoader = new JsLoader();
}
public void clear() {
this.jarLoader.clear();
this.pyLoader.clear();
this.jsLoader.clear();
App.execute(() -> {
jarLoader.clear();
pyLoader.clear();
jsLoader.clear();
});
}
public Spider getSpider(String key, String api, String ext, String jar) {

@ -14,7 +14,6 @@ import com.fongmi.android.tv.Constant;
import com.fongmi.android.tv.R;
import com.fongmi.android.tv.api.config.VodConfig;
import com.fongmi.android.tv.db.AppDatabase;
import com.fongmi.android.tv.event.RefreshEvent;
import com.fongmi.android.tv.impl.Diffable;
import com.google.gson.annotations.SerializedName;
import com.google.gson.reflect.TypeToken;
@ -330,29 +329,14 @@ public class History implements Diffable<History> {
}
}
private static void startSync(List<History> targets) {
for (History target : targets) {
public static void sync(List<History> targets) {
targets.forEach(target -> {
List<History> items = findByName(target.getVodName());
if (items.isEmpty()) {
target.cid(VodConfig.getCid()).save();
continue;
}
long latestLocalTime = 0;
for (History item : items) {
if (item.getCreateTime() > latestLocalTime) {
latestLocalTime = item.getCreateTime();
}
if (items.isEmpty()) target.cid(VodConfig.getCid()).save();
else {
long latestTime = items.stream().mapToLong(History::getCreateTime).max().orElse(0L);
if (target.getCreateTime() > latestTime) target.cid(VodConfig.getCid()).merge(items, true).save();
}
if (target.getCreateTime() > latestLocalTime) {
target.cid(VodConfig.getCid()).merge(items, true).save();
}
}
}
public static void sync(List<History> targets) {
App.execute(() -> {
startSync(targets);
RefreshEvent.history();
});
}

@ -8,7 +8,6 @@ import androidx.room.PrimaryKey;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.api.config.VodConfig;
import com.fongmi.android.tv.db.AppDatabase;
import com.fongmi.android.tv.event.RefreshEvent;
import com.fongmi.android.tv.impl.Diffable;
import com.google.gson.annotations.SerializedName;
import com.google.gson.reflect.TypeToken;
@ -154,21 +153,10 @@ public class Keep implements Diffable<Keep> {
return this;
}
private static void startSync(List<Config> configs, List<Keep> targets) {
for (Keep target : targets) {
for (Config config : configs) {
if (target.getCid() == config.getId()) {
target.save(Config.find(config).getId());
}
}
}
}
public static void sync(List<Config> configs, List<Keep> targets) {
App.execute(() -> {
startSync(configs, targets);
RefreshEvent.keep();
});
targets.forEach(target -> configs.stream()
.filter(config -> target.getCid() == config.getId()).findFirst()
.ifPresent(config -> target.save(Config.find(config).getId())));
}
@Override

@ -401,9 +401,9 @@ public class Players implements Player.Listener, ParseCallback {
stopParse();
releasePlayer();
session.release();
Source.get().stop();
removeTimeoutCheck();
Server.get().setPlayer(null);
App.execute(() -> Source.get().stop());
}
private void releasePlayer() {

@ -1,5 +1,6 @@
package com.fongmi.android.tv.player;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.bean.Channel;
import com.fongmi.android.tv.bean.Episode;
import com.fongmi.android.tv.bean.Flag;
@ -92,12 +93,12 @@ public class Source {
public void stop() {
if (extractors == null) return;
for (Extractor extractor : extractors) extractor.stop();
App.execute(() -> extractors.forEach(Extractor::stop));
}
public void exit() {
if (extractors == null) return;
for (Extractor extractor : extractors) extractor.exit();
App.execute(() -> extractors.forEach(Extractor::exit));
}
public interface Extractor {

@ -2,9 +2,7 @@ package com.fongmi.android.tv.player.extractor;
import android.net.Uri;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.player.Source;
import com.fongmi.android.tv.utils.Clock;
import com.fongmi.android.tv.utils.FileUtil;
import com.github.catvod.utils.Path;
import com.p2p.P2PClass;
@ -12,11 +10,10 @@ import com.p2p.P2PClass;
import java.net.URLDecoder;
import java.net.URLEncoder;
public class JianPian implements Source.Extractor, Clock.Callback {
public class JianPian implements Source.Extractor {
private P2PClass p2p;
private String path;
private Clock clock;
@Override
public boolean match(String scheme, String host) {
@ -25,23 +22,22 @@ public class JianPian implements Source.Extractor, Clock.Callback {
private void init() {
if (p2p == null) p2p = new P2PClass();
if (clock == null) clock = Clock.create();
}
@Override
public String fetch(String url) throws Exception {
init();
stop();
check(10);
check();
start(url);
return "http://127.0.0.1:" + p2p.port + "/" + URLEncoder.encode(Uri.parse(path).getLastPathSegment(), "GBK");
}
private void check(int limit) {
private void check() {
double cache = FileUtil.getDirectorySize(Path.jpa());
double total = cache + FileUtil.getAvailableStorageSpace(Path.jpa());
int percent = (int) (cache / total * 100);
if (percent > limit) Path.clear(Path.jpa());
if (percent > 10) Path.clear(Path.jpa());
}
private void start(String url) {
@ -51,8 +47,6 @@ public class JianPian implements Source.Extractor, Clock.Callback {
path = path.replace("tvbox-xg://", "").replace("tvbox-xg:", "");
path = path.replace("xg://", "ftp://").replace("xgplay://", "ftp://");
p2p.P2Pdoxstart(path.getBytes("GBK"));
clock.setCallback(this);
clock.stop().start();
} catch (Exception e) {
e.printStackTrace();
}
@ -61,7 +55,6 @@ public class JianPian implements Source.Extractor, Clock.Callback {
@Override
public void stop() {
try {
if (clock != null) clock.stop();
if (p2p == null || path == null) return;
p2p.P2Pdoxpause(path.getBytes("GBK"));
} catch (Exception e) {
@ -73,13 +66,5 @@ public class JianPian implements Source.Extractor, Clock.Callback {
@Override
public void exit() {
App.execute(() -> check(10));
if (clock != null) clock.release();
}
@Override
public void onTimeChanged() {
long seconds = System.currentTimeMillis() / 1000 % 60;
if (seconds % 30 == 0) App.execute(() -> check(60));
}
}

@ -139,6 +139,7 @@ public class Action implements Process {
if (config.getUrl().equals(VodConfig.getUrl())) {
if (force) History.delete(config.getId());
History.sync(targets);
RefreshEvent.history();
} else {
VodConfig.load(config, getCallback(targets));
}
@ -151,6 +152,7 @@ public class Action implements Process {
RefreshEvent.config();
RefreshEvent.video();
History.sync(targets);
RefreshEvent.history();
}
@Override
@ -168,6 +170,7 @@ public class Action implements Process {
} else {
if (force) Keep.deleteAll();
Keep.sync(configs, targets);
RefreshEvent.keep();
}
}
@ -175,10 +178,11 @@ public class Action implements Process {
return new Callback() {
@Override
public void success() {
RefreshEvent.history();
RefreshEvent.config();
RefreshEvent.video();
Keep.sync(configs, targets);
RefreshEvent.history();
RefreshEvent.keep();
}
@Override

@ -116,7 +116,7 @@ public class HomeActivity extends BaseActivity implements NavigationBarView.OnIt
private void initConfig() {
WallConfig.get().init();
LiveConfig.get().init().load();
LiveConfig.get().init();
VodConfig.get().init().load(getCallback());
}

@ -338,8 +338,8 @@ public class SettingFragment extends BaseFragment implements ConfigCallback, Sit
}
private void initConfig() {
WallConfig.get().init().load();
LiveConfig.get().init().load();
WallConfig.get().init();
LiveConfig.get().init();
VodConfig.get().init().load(getCallback(0));
}

Loading…
Cancel
Save