diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java index a187adf6b..29a950b7d 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java @@ -4,7 +4,6 @@ import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; import android.graphics.drawable.Drawable; -import android.net.Uri; import android.support.v4.media.MediaMetadataCompat; import android.view.KeyEvent; import android.view.View; @@ -379,7 +378,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra("headers", mPlayers.getHeaderArray()); intent.putExtra("title", mBinding.widget.name.getText()); - intent.setDataAndType(Uri.parse(mPlayers.getUrl()), "video/*"); + intent.setDataAndType(mPlayers.getUri(), "video/*"); startActivity(Util.getChooser(intent)); return true; } diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java index 7e7b586e5..a534a6655 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java @@ -880,7 +880,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List intent.putExtra("headers", mPlayers.getHeaderArray()); intent.putExtra("position", (int) mPlayers.getPosition()); intent.putExtra("title", mBinding.widget.title.getText()); - intent.setDataAndType(Uri.parse(mPlayers.getUrl()), "video/*"); + intent.setDataAndType(mPlayers.getUri(), "video/*"); startActivityForResult(Util.getChooser(intent), 1001); return true; } diff --git a/app/src/main/assets/favicon.ico b/app/src/main/assets/favicon.ico new file mode 100644 index 000000000..dd17961a2 Binary files /dev/null and b/app/src/main/assets/favicon.ico differ diff --git a/app/src/main/assets/js/script.js b/app/src/main/assets/js/script.js index 3c77f9ddd..7defce3ab 100644 --- a/app/src/main/assets/js/script.js +++ b/app/src/main/assets/js/script.js @@ -90,7 +90,7 @@ function hideFileInfo() { function listFile(path) { $('#loadingToast').show(); - $.get('/file/' + path, function (res) { + $.get('/file' + path, function (res) { let info = JSON.parse(res); let parent = info.parent; let canDel = info.parent != '.'; diff --git a/app/src/main/java/com/fongmi/android/tv/api/LiveParser.java b/app/src/main/java/com/fongmi/android/tv/api/LiveParser.java index 3e7e19d48..1cdba3fde 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/LiveParser.java +++ b/app/src/main/java/com/fongmi/android/tv/api/LiveParser.java @@ -36,7 +36,7 @@ public class LiveParser { if (live.getGroups().size() > 0) return; if (live.getType() == 0) text(live, getText(live.getUrl())); if (live.getType() == 1) json(live, getText(live.getUrl())); - if (live.getType() == 2) proxy(live, getText(UrlUtil.convert(live.getUrl()))); + if (live.getType() == 2) proxy(live, getText(live.getUrl())); } public static void text(Live live, String text) { @@ -114,7 +114,7 @@ public class LiveParser { private static String getText(String url) { if (url.startsWith("file")) return Path.read(url); if (url.startsWith("http")) return OkHttp.string(url); - if (url.startsWith("assets")) return getText(UrlUtil.convert(url)); + if (url.startsWith("assets") || url.startsWith("proxy")) return getText(UrlUtil.convert(url)); if (url.length() > 0 && url.length() % 4 == 0) return getText(new String(Base64.decode(url, Base64.DEFAULT))); return ""; } diff --git a/app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java b/app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java index d311cd8eb..45cda04c9 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java +++ b/app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java @@ -215,15 +215,13 @@ public class VodConfig { } private String parseApi(String api) { - if (api.startsWith("http")) return api; if (api.startsWith("file") || api.startsWith("assets")) return UrlUtil.convert(api); return api; } private String parseExt(String ext) { - if (ext.startsWith("http")) return ext; - if (ext.startsWith("img+")) return Decoder.getExt(ext); if (ext.startsWith("file") || ext.startsWith("assets")) return UrlUtil.convert(ext); + if (ext.startsWith("img+")) return Decoder.getExt(ext); return ext; } diff --git a/app/src/main/java/com/fongmi/android/tv/player/Players.java b/app/src/main/java/com/fongmi/android/tv/player/Players.java index 99754c8e8..ee11f44bd 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/Players.java +++ b/app/src/main/java/com/fongmi/android/tv/player/Players.java @@ -32,6 +32,7 @@ import com.fongmi.android.tv.event.ErrorEvent; import com.fongmi.android.tv.event.PlayerEvent; import com.fongmi.android.tv.impl.ParseCallback; import com.fongmi.android.tv.impl.SessionCallback; +import com.fongmi.android.tv.utils.FileUtil; import com.fongmi.android.tv.utils.Notify; import com.fongmi.android.tv.utils.ResUtil; import com.fongmi.android.tv.utils.UrlUtil; @@ -171,6 +172,10 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, Analytic return url; } + public Uri getUri() { + return getUrl().startsWith("file://") || getUrl().startsWith("/") ? FileUtil.getShareUri(getUrl()) : Uri.parse(getUrl()); + } + public void clean() { this.headers = null; this.url = null; diff --git a/app/src/main/java/com/fongmi/android/tv/server/process/Local.java b/app/src/main/java/com/fongmi/android/tv/server/process/Local.java index 83ffefbb4..35c20f0fa 100644 --- a/app/src/main/java/com/fongmi/android/tv/server/process/Local.java +++ b/app/src/main/java/com/fongmi/android/tv/server/process/Local.java @@ -42,7 +42,7 @@ public class Local implements Process { private NanoHTTPD.Response getFile(Map headers, String path) { try { - File file = Path.root(path.substring(6)); + File file = Path.root(path.substring(5)); if (file.isDirectory()) return getFolder(file); if (file.isFile()) return getFile(headers, file, NanoHTTPD.getMimeTypeForFile(path)); throw new FileNotFoundException(); diff --git a/app/src/main/java/com/fongmi/android/tv/utils/FileUtil.java b/app/src/main/java/com/fongmi/android/tv/utils/FileUtil.java index 5e39748ce..795914d91 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/FileUtil.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/FileUtil.java @@ -60,7 +60,11 @@ public class FileUtil { }); } - private static Uri getShareUri(File file) { + public static Uri getShareUri(String path) { + return getShareUri(new File(path.replace("file://", ""))); + } + + public static Uri getShareUri(File file) { return Build.VERSION.SDK_INT < Build.VERSION_CODES.N ? Uri.fromFile(file) : FileProvider.getUriForFile(App.get(), App.get().getPackageName() + ".provider", file); } diff --git a/app/src/main/java/com/fongmi/android/tv/utils/UrlUtil.java b/app/src/main/java/com/fongmi/android/tv/utils/UrlUtil.java index ca8aef505..1dd2a12b3 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/UrlUtil.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/UrlUtil.java @@ -35,11 +35,10 @@ public class UrlUtil { } public static String convert(String url) { - String host = host(url); String scheme = scheme(url); - if ("file".equals(scheme)) return Server.get().getAddress(url); - if ("local".equals(scheme)) return Server.get().getAddress(host); - if ("assets".equals(scheme)) return Server.get().getAddress(url.substring(9)); + if ("local".equals(scheme)) return url.replace("local://", Server.get().getAddress("")); + if ("assets".equals(scheme)) return url.replace("assets://", Server.get().getAddress("")); + if ("file".equals(scheme)) return url.replace("file://", Server.get().getAddress("file/")); if ("proxy".equals(scheme)) return url.replace("proxy://", Server.get().getAddress("proxy?")); return url; } diff --git a/app/src/main/res/xml/file_paths.xml b/app/src/main/res/xml/file_paths.xml index 136e6e260..cfd91bf45 100644 --- a/app/src/main/res/xml/file_paths.xml +++ b/app/src/main/res/xml/file_paths.xml @@ -1,6 +1,7 @@ + diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java index 6416863ba..58153791b 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java @@ -6,7 +6,6 @@ import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.res.Configuration; import android.graphics.drawable.Drawable; -import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.support.v4.media.MediaMetadataCompat; @@ -436,7 +435,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra("headers", mPlayers.getHeaderArray()); intent.putExtra("title", mBinding.control.title.getText()); - intent.setDataAndType(Uri.parse(mPlayers.getUrl()), "video/*"); + intent.setDataAndType(mPlayers.getUri(), "video/*"); startActivity(Util.getChooser(intent)); setRedirect(true); return true; diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java index 0f0592d1a..7aed8f452 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java @@ -891,7 +891,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo intent.putExtra("headers", mPlayers.getHeaderArray()); intent.putExtra("position", (int) mPlayers.getPosition()); intent.putExtra("title", mBinding.control.title.getText()); - intent.setDataAndType(Uri.parse(mPlayers.getUrl()), "video/*"); + intent.setDataAndType(mPlayers.getUri(), "video/*"); startActivityForResult(Util.getChooser(intent), 1001); setRedirect(true); return true; diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/CastDialog.java b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/CastDialog.java index 9c9a43ef7..acda55e38 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/CastDialog.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/CastDialog.java @@ -76,7 +76,7 @@ public class CastDialog extends BaseDialog implements DeviceAdapter.OnClickListe public CastDialog history(History history) { String id = history.getVodId(); String fd = history.getVodId(); - if (fd.startsWith("/")) fd = Server.get().getAddress() + "/file://" + fd.replace(Path.rootPath(), ""); + if (fd.startsWith("/")) fd = Server.get().getAddress() + "/file" + fd.replace(Path.rootPath(), ""); if (fd.startsWith("file")) fd = Server.get().getAddress() + "/" + fd.replace(Path.rootPath(), ""); if (fd.contains("127.0.0.1")) fd = fd.replace("127.0.0.1", Util.getIp()); body.add("history", history.toString().replace(id, fd)); diff --git a/catvod/src/main/java/com/github/catvod/net/OkhttpInterceptor.java b/catvod/src/main/java/com/github/catvod/net/OkhttpInterceptor.java index 5884b2d0e..5ec38e10b 100644 --- a/catvod/src/main/java/com/github/catvod/net/OkhttpInterceptor.java +++ b/catvod/src/main/java/com/github/catvod/net/OkhttpInterceptor.java @@ -51,7 +51,7 @@ public class OkhttpInterceptor implements Interceptor { Request request = chain.request(); String url = request.url().toString(); Request.Builder builder = request.newBuilder(); - if (url.contains("/file://")) builder.url(url.replace("+", "%2B")); + if (url.contains("/file/")) builder.url(url.replace("+", "%2B")); if (url.contains("gitcode.net")) builder.addHeader(HttpHeaders.USER_AGENT, Util.CHROME); return builder.build(); }