diff --git a/app/src/main/java/com/fongmi/android/tv/server/Go.java b/app/src/main/java/com/fongmi/android/tv/server/Go.java index a3c1f8752..0fa6aca2e 100644 --- a/app/src/main/java/com/fongmi/android/tv/server/Go.java +++ b/app/src/main/java/com/fongmi/android/tv/server/Go.java @@ -1,45 +1,24 @@ package com.fongmi.android.tv.server; -import com.fongmi.android.tv.App; -import com.fongmi.android.tv.utils.ShellUtil; -import com.github.catvod.Init; import com.github.catvod.utils.Path; +import com.github.catvod.utils.Shell; import java.io.File; public class Go { - public static void prepare() { - App.execute(() -> { - try { - File file = new File(Init.context().getFilesDir().getAbsolutePath() + "/go_proxy_video"); - if (file.exists()) return; - file.createNewFile(); - Path.copy(Init.context().getAssets().open("go_proxy_video"), file); - file.setExecutable(true); - } catch (Exception e) { - e.printStackTrace(); - } - }); - } + private static final String GO = "go_proxy_video"; - public void start() { + public static void start() { new Thread(() -> { - try { - File file = new File(Init.context().getFilesDir().getAbsolutePath() + "/go_proxy_video"); - if (!file.exists()) return; - file.setExecutable(true); - ShellUtil.execCommand("nohup " + file.getAbsolutePath(), false); - } catch (Exception e) { - e.printStackTrace(); - } + File file = Path.cache(GO); + if (!file.exists()) Path.copy(Path.getAsset(GO), file); + Shell.exec("chmod 777 " + file); + Shell.exec("nohup " + file); }).start(); } - public void stop() { - new Thread(() -> { - ShellUtil.execCommand(new String[]{"killall -9 go_proxy_video"}, false); - }).start(); + public static void stop() { + new Thread(() -> Shell.exec("killall -9 " + GO)).start(); } - } diff --git a/app/src/main/java/com/fongmi/android/tv/server/Nano.java b/app/src/main/java/com/fongmi/android/tv/server/Nano.java index 436907b08..9ac3b4756 100644 --- a/app/src/main/java/com/fongmi/android/tv/server/Nano.java +++ b/app/src/main/java/com/fongmi/android/tv/server/Nano.java @@ -10,7 +10,7 @@ import com.fongmi.android.tv.server.process.Cache; import com.fongmi.android.tv.server.process.Local; import com.fongmi.android.tv.server.process.Process; import com.fongmi.android.tv.utils.M3U8; -import com.github.catvod.Init; +import com.github.catvod.utils.Path; import com.google.common.net.HttpHeaders; import java.io.ByteArrayInputStream; @@ -120,7 +120,7 @@ public class Nano extends NanoHTTPD { private Response getAssets(String path) { try { if (path.isEmpty()) path = "index.html"; - InputStream is = Init.context().getAssets().open(path); + InputStream is = Path.getAsset(path); return newFixedLengthResponse(Response.Status.OK, getMimeTypeForFile(path), is, is.available()); } catch (IOException e) { return newFixedLengthResponse(Response.Status.NOT_FOUND, MIME_HTML, null); diff --git a/app/src/main/java/com/fongmi/android/tv/server/Server.java b/app/src/main/java/com/fongmi/android/tv/server/Server.java index 821bab7b8..c493cad94 100644 --- a/app/src/main/java/com/fongmi/android/tv/server/Server.java +++ b/app/src/main/java/com/fongmi/android/tv/server/Server.java @@ -4,9 +4,9 @@ import com.github.catvod.Proxy; import com.github.catvod.utils.Util; public class Server { + private Nano nano; private int port; - private Go go; private static class Loader { static volatile Server INSTANCE = new Server(); @@ -37,12 +37,8 @@ public class Server { } public void go() { - if (go != null) { - go.start(); - return; - } - go = new Go(); - go.start(); + Go.stop(); + Go.start(); } public void start() { @@ -59,17 +55,11 @@ public class Server { nano = null; } } while (port < 9999); - Go.prepare(); } public void stop() { - if (nano != null) { - nano.stop(); - nano = null; - } - if (go != null) { - go.stop(); - go = null; - } + if (nano != null) nano.stop(); + nano = null; + Go.stop(); } } diff --git a/app/src/main/java/com/fongmi/android/tv/utils/ShellUtil.java b/app/src/main/java/com/fongmi/android/tv/utils/ShellUtil.java deleted file mode 100644 index 2d2495401..000000000 --- a/app/src/main/java/com/fongmi/android/tv/utils/ShellUtil.java +++ /dev/null @@ -1,222 +0,0 @@ -package com.fongmi.android.tv.utils; - -import java.io.BufferedReader; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.util.List; - -/** - * ShellUtil - * - * - * - * @author Trinea 2013-5-16 - */ -public class ShellUtil { - - public static final String COMMAND_SU = "su"; - public static final String COMMAND_SH = "sh"; - public static final String COMMAND_EXIT = "exit\n"; - public static final String COMMAND_LINE_END = "\n"; - - private ShellUtil() { - throw new AssertionError(); - } - - /** - * check whether has root permission - * - * @return - */ - public static boolean checkRootPermission() { - return execCommand("echo root", true, false).result == 0; - } - - /** - * execute shell command, default return result msg - * - * @param command command - * @param isRoot whether need to run with root - * @return - * @see ShellUtil#execCommand(String[], boolean, boolean) - */ - public static CommandResult execCommand(String command, boolean isRoot) { - return execCommand(new String[] {command}, isRoot, true); - } - - /** - * execute shell commands, default return result msg - * - * @param commands command list - * @param isRoot whether need to run with root - * @return - * @see ShellUtil#execCommand(String[], boolean, boolean) - */ - public static CommandResult execCommand(List commands, boolean isRoot) { - return execCommand(commands == null ? null : commands.toArray(new String[] {}), isRoot, true); - } - - /** - * execute shell commands, default return result msg - * - * @param commands command array - * @param isRoot whether need to run with root - * @return - * @see ShellUtil#execCommand(String[], boolean, boolean) - */ - public static CommandResult execCommand(String[] commands, boolean isRoot) { - return execCommand(commands, isRoot, true); - } - - /** - * execute shell command - * - * @param command command - * @param isRoot whether need to run with root - * @param isNeedResultMsg whether need result msg - * @return - * @see ShellUtil#execCommand(String[], boolean, boolean) - */ - public static CommandResult execCommand(String command, boolean isRoot, boolean isNeedResultMsg) { - return execCommand(new String[] {command}, isRoot, isNeedResultMsg); - } - - /** - * execute shell commands - * - * @param commands command list - * @param isRoot whether need to run with root - * @param isNeedResultMsg whether need result msg - * @return - * @see ShellUtil#execCommand(String[], boolean, boolean) - */ - public static CommandResult execCommand(List commands, boolean isRoot, boolean isNeedResultMsg) { - return execCommand(commands == null ? null : commands.toArray(new String[] {}), isRoot, isNeedResultMsg); - } - - /** - * execute shell commands - * - * @param commands command array - * @param isRoot whether need to run with root - * @param isNeedResultMsg whether need result msg - * @return - */ - public static CommandResult execCommand(String[] commands, boolean isRoot, boolean isNeedResultMsg) { - int result = -1; - if (commands == null || commands.length == 0) { - return new CommandResult(result, null, null); - } - - Process process = null; - BufferedReader successResult = null; - BufferedReader errorResult = null; - StringBuilder successMsg = null; - StringBuilder errorMsg = null; - - DataOutputStream os = null; - try { - process = Runtime.getRuntime().exec(isRoot ? COMMAND_SU : COMMAND_SH); - os = new DataOutputStream(process.getOutputStream()); - for (String command : commands) { - if (command == null) { - continue; - } - - // donnot use os.writeBytes(commmand), avoid chinese charset error - os.write(command.getBytes()); - os.writeBytes(COMMAND_LINE_END); - os.flush(); - } - os.writeBytes(COMMAND_EXIT); - os.flush(); - - result = process.waitFor(); - // get command result - if (isNeedResultMsg) { - successMsg = new StringBuilder(); - errorMsg = new StringBuilder(); - successResult = new BufferedReader(new InputStreamReader(process.getInputStream())); - errorResult = new BufferedReader(new InputStreamReader(process.getErrorStream())); - String s; - while ((s = successResult.readLine()) != null) { - successMsg.append(s); - } - while ((s = errorResult.readLine()) != null) { - errorMsg.append(s); - } - } - } catch (IOException e) { - e.printStackTrace(); - } catch (Exception e) { - e.printStackTrace(); - } finally { - try { - if (os != null) { - os.close(); - } - if (successResult != null) { - successResult.close(); - } - if (errorResult != null) { - errorResult.close(); - } - } catch (IOException e) { - e.printStackTrace(); - } - - if (process != null) { - process.destroy(); - } - } - return new CommandResult(result, successMsg == null ? null : successMsg.toString(), errorMsg == null ? null - : errorMsg.toString()); - } - - /** - * result of command - * - * - * @author Trinea 2013-5-16 - */ - public static class CommandResult { - - /** result of command **/ - public int result; - /** success message of command result **/ - public String successMsg; - /** error message of command result **/ - public String errorMsg; - - public CommandResult(int result) { - this.result = result; - } - - public CommandResult(int result, String successMsg, String errorMsg) { - this.result = result; - this.successMsg = successMsg; - this.errorMsg = errorMsg; - } - } -} diff --git a/catvod/src/main/java/com/github/catvod/utils/Path.java b/catvod/src/main/java/com/github/catvod/utils/Path.java index 48546c532..6d0abec21 100644 --- a/catvod/src/main/java/com/github/catvod/utils/Path.java +++ b/catvod/src/main/java/com/github/catvod/utils/Path.java @@ -115,9 +115,17 @@ public class Path { return file2.exists() ? file2 : file1.exists() ? file1 : new File(path); } + public static InputStream getAsset(String fileName) { + try { + return Init.context().getAssets().open(fileName); + } catch (Exception e) { + return null; + } + } + public static String asset(String fileName) { try { - return read(Init.context().getAssets().open(fileName)); + return read(getAsset(fileName)); } catch (Exception e) { return ""; } @@ -184,13 +192,11 @@ public class Path { } public static void copy(InputStream in, OutputStream out) throws IOException { + int read; byte[] buffer = new byte[8192]; - int amountRead; - while ((amountRead = in.read(buffer)) != -1) { - out.write(buffer, 0, amountRead); - } - in.close(); + while ((read = in.read(buffer)) != -1) out.write(buffer, 0, read); out.close(); + in.close(); } public static void newFile(File file) { @@ -213,8 +219,7 @@ public class Path { public static File chmod(File file) { try { - Process process = Runtime.getRuntime().exec("chmod 777 " + file); - process.waitFor(); + Shell.exec("chmod 777 " + file); return file; } catch (Exception e) { e.printStackTrace(); diff --git a/catvod/src/main/java/com/github/catvod/utils/Shell.java b/catvod/src/main/java/com/github/catvod/utils/Shell.java new file mode 100644 index 000000000..40462f6ae --- /dev/null +++ b/catvod/src/main/java/com/github/catvod/utils/Shell.java @@ -0,0 +1,26 @@ +package com.github.catvod.utils; + +import java.io.DataOutputStream; + +public class Shell { + + private static final String COMMAND_SH = "sh"; + private static final String COMMAND_EXIT = "exit\n"; + private static final String COMMAND_LINE_END = "\n"; + + public static void exec(String command) { + try { + Process p = Runtime.getRuntime().exec(COMMAND_SH); + DataOutputStream dos = new DataOutputStream(p.getOutputStream()); + dos.write(command.getBytes()); + dos.writeBytes(COMMAND_LINE_END); + dos.writeBytes(COMMAND_EXIT); + dos.flush(); + dos.close(); + p.waitFor(); + p.destroy(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/forcetech/src/main/java/com/gsoft/mitv/MainActivity.java b/forcetech/src/main/java/com/gsoft/mitv/MainActivity.java index fc82f986e..c4b43c810 100644 --- a/forcetech/src/main/java/com/gsoft/mitv/MainActivity.java +++ b/forcetech/src/main/java/com/gsoft/mitv/MainActivity.java @@ -6,7 +6,6 @@ import android.os.IBinder; import com.anymediacloud.iptv.standard.ForceTV; import com.forcetech.Util; -import com.github.catvod.Init; import com.github.catvod.utils.Path; import java.io.File; @@ -25,10 +24,10 @@ public class MainActivity extends Service { } } - private void checkLibrary() throws Exception { + private void checkLibrary() { String name = "libmitv.so"; - File cache = Path.cache(name); - if (!cache.exists()) Path.copy(Init.context().getAssets().open(name), cache); + File file = Path.cache(name); + if (!file.exists()) Path.copy(Path.getAsset(name), file); } @Override