Skip to content

Commit d0477b1

Browse files
committed
[platform] support node upgrade from sdcard
- can upgrade node js from /sdcard/.nodebase/.bin/node
1 parent 55af2e5 commit d0477b1

File tree

3 files changed

+82
-3
lines changed

3 files changed

+82
-3
lines changed

app/src/main/java/seven/drawalive/nodebase/NodeBase.java

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.Manifest;
44
import android.content.Intent;
55
import android.content.pm.PackageManager;
6+
import android.content.pm.PermissionInfo;
67
import android.support.v4.app.ActivityCompat;
78
import android.support.v4.content.ContextCompat;
89
import android.support.v7.app.AlertDialog;
@@ -22,6 +23,7 @@
2223
import android.widget.Toast;
2324

2425
import java.io.File;
26+
import java.io.FileInputStream;
2527
import java.net.InterfaceAddress;
2628
import java.net.NetworkInterface;
2729
import java.util.ArrayList;
@@ -55,7 +57,9 @@ protected void onDestroy() {
5557
@Override
5658
public boolean onCreateOptionsMenu(Menu menu) {
5759
menu.add(Menu.NONE, 101, Menu.NONE, "NICs");
58-
menu.add(Menu.NONE, 102, Menu.NONE, "Reset");
60+
menu.add(Menu.NONE, 102, Menu.NONE, "Node Version");
61+
menu.add(Menu.NONE, 103, Menu.NONE, "Node Upgrade");
62+
menu.add(Menu.NONE, 199, Menu.NONE, "Reset");
5963
return true;
6064
}
6165

@@ -94,7 +98,13 @@ public boolean onOptionsItemSelected(MenuItem item) {
9498
builder.setMessage(text).setTitle("NetworkInterface(s)");
9599
builder.create().show();
96100
break;
97-
case 102: // reset
101+
case 102: // Show NodeJS Version
102+
show_node_version();
103+
break;
104+
case 103: // Upgrade NodeJS
105+
copy_bin_node_from_nodebase_workdir();
106+
break;
107+
case 199: // reset
98108
Log.i("UI:ActionButton", "Update node js binary ...");
99109
Utils.resetNodeJS(NodeBase.this, getApplicationInfo().dataDir);
100110
refreshAppList();
@@ -287,6 +297,41 @@ public void stop() {
287297
private NodeBase _nodebase;
288298
}
289299

300+
private void copy_bin_node_from_nodebase_workdir() {
301+
String dirname = _txtAppRootDir.getText().toString();
302+
String upgrade_node_filename = String.format("%s/.bin/node", dirname);
303+
File f = new File(upgrade_node_filename);
304+
if (!f.exists()) {
305+
AlertDialog.Builder builder = new AlertDialog.Builder(this);
306+
builder.setMessage(
307+
String.format("%s does not exists.", upgrade_node_filename)
308+
).setTitle("Upgrade Failed");
309+
builder.create().show();
310+
return;
311+
}
312+
try {
313+
FileInputStream fr = new FileInputStream(f);
314+
Utils.prepareNode(getApplicationInfo().dataDir, fr, true);
315+
fr.close();
316+
} catch (Exception e) {
317+
Log.e("NodeBase:upgrade_node",
318+
"Cannot copy binary file of \"node\"");
319+
}
320+
}
321+
322+
private void show_node_version() {
323+
String version = NodeBaseServer.nodeVersion(getApplicationInfo().dataDir);
324+
String text = null;
325+
if (version == null) {
326+
text = "NodeJS: (not found)";
327+
} else {
328+
text = String.format("NodeJS: %s", version);
329+
}
330+
AlertDialog.Builder builder = new AlertDialog.Builder(this);
331+
builder.setMessage(text).setTitle("Node Version");
332+
builder.create().show();
333+
}
334+
290335
private boolean _permissionSdcard;
291336

292337
// state

app/src/main/java/seven/drawalive/nodebase/NodeBaseServer.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import android.os.IBinder;
66
import android.util.Log;
77

8+
import java.io.InputStream;
9+
810

911
public class NodeBaseServer extends Service {
1012

@@ -83,6 +85,34 @@ private void prepareEnvironment() {
8385
Utils.resetNodeJS(this, _workdir);
8486
}
8587

88+
public static String nodeVersion(String _workdir) {
89+
// e.g. cd "/sdcard/.nodebase/apps/test" &&
90+
// /data/seven.drawalive.nodebase/node/node "index.js"
91+
String[] cmd;
92+
cmd = new String[] {
93+
String.format("%s/node/node", _workdir),
94+
"--version",
95+
};
96+
Log.i("Server:NodeVersion", String.format("Command - %s", cmd));
97+
try {
98+
Process p = Runtime.getRuntime().exec(cmd);
99+
p.waitFor();
100+
InputStream is = p.getInputStream();
101+
byte[] b = new byte[1024];
102+
int len = 0;
103+
len = is.read(b);
104+
is.close();
105+
char[] chs = new char[len];
106+
for(int i = len-1; i>=0; i--) {
107+
chs[i] = (char)b[i];
108+
}
109+
return String.valueOf(chs);
110+
} catch (Exception e) {
111+
Log.e("Server:NodeVersion", "Cannot get the version of \"node\"", e);
112+
return null;
113+
}
114+
}
115+
86116
public int startNode(String appdir, String appentry, String appparams) {
87117
if (!_valid) return -1;
88118
int result = 0;

app/src/main/java/seven/drawalive/nodebase/Utils.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,14 @@ public static boolean prepareNodeDirectories(String workdir) {
3737
}
3838

3939
public static boolean prepareNode(String workdir, InputStream node_binary) {
40+
return prepareNode(workdir, node_binary, false);
41+
}
42+
43+
public static boolean prepareNode(String workdir, InputStream node_binary, boolean force) {
4044
try {
4145
String node_filename = String.format("%s/node/node", workdir);
4246
File node_file = new File(node_filename);
43-
if (node_file.exists()) {
47+
if (node_file.exists() && !force) {
4448
return true;
4549
}
4650
node_file.createNewFile();

0 commit comments

Comments
 (0)