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
- *
- * Check root
- * - {@link ShellUtil#checkRootPermission()}
- *
- *
- * Execte command
- * - {@link ShellUtil#execCommand(String, boolean)}
- * - {@link ShellUtil#execCommand(String, boolean, boolean)}
- * - {@link ShellUtil#execCommand(List, boolean)}
- * - {@link ShellUtil#execCommand(List, boolean, boolean)}
- * - {@link ShellUtil#execCommand(String[], boolean)}
- * - {@link ShellUtil#execCommand(String[], boolean, boolean)}
- *
- *
- * @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
- * - if isNeedResultMsg is false, {@link CommandResult#successMsg} is null and
- * {@link CommandResult#errorMsg} is null.
- * - if {@link CommandResult#result} is -1, there maybe some excepiton.
- *
- */
- 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
- *
- * - {@link CommandResult#result} means result of command, 0 means normal, else means error, same to excute in
- * linux shell
- * - {@link CommandResult#successMsg} means success message of command result
- * - {@link CommandResult#errorMsg} means error message of command result
- *
- *
- * @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