pipe2browser: Support for the PromptToInstallExtesion.
Fixing the VDL generation target and some README file cleanups.
Closes https://github.com/vanadium/pipe2browser/issues/1
MultiPart: 2/2
Change-Id: I5650bed9a5d04a75e5c09620f3c3c6bdbbcfbd24
diff --git a/Makefile b/Makefile
index ca72f73..89e5a6f 100644
--- a/Makefile
+++ b/Makefile
@@ -7,15 +7,13 @@
# All HTML/CSS files except index.html and third party
HTML_FILES = $(shell find browser -name "*.css" -a -not -path "*third-party*" -o -name "*.html" -a -not -name "index.html" -a -not -path "*third-party*")
-# Builds everything
-all: node_modules browser/third-party browser/build.js browser/index.html $(V23_ROOT)/release/go/bin
+all: build
-# Build vdl.go
-go/src/v.io/x/p2b/vdl/p2b.vdl.go:
- v23 run vdl generate -lang=go p2b/vdl
+# Builds everything
+build: node_modules go/bin/p2b browser/third-party browser/build.js browser/index.html
# Compile p2b cli binary
-go/bin/p2b: go/src/v.io/x/p2b/main.go go/src/v.io/x/p2b/vdl/p2b.vdl.go
+go/bin/p2b: go/src/v.io/x/p2b/main.go go/src/v.io/x/p2b/vdl/p2b.vdl
v23 go install v.io/x/p2b/...
# Install what we need from NPM, tools such as jspm, serve, etc...
@@ -46,11 +44,11 @@
browser/third-party/ag-data-grid:
yes | cp -rf browser/libs/ui-components/data-grid browser/third-party/ag-data-grid
-browser/services/vdl/index.js:
+browser/services/v.io/x/p2b/vdl/index.js:
v23 run vdl generate --lang=javascript --js-out-dir=browser/services v.io/x/p2b/vdl
# Bundle whole app and third-party JavaScript into a single build.js
-browser/build.js: $(JS_FILES) browser/services/vdl/index.js browser/third-party node_modules
+browser/build.js: $(JS_FILES) browser/services/v.io/x/p2b/vdl/index.js browser/third-party node_modules
cd browser; \
jspm setmode local; \
jspm bundle app build.js
@@ -61,7 +59,7 @@
vulcanize -o index.html app.html
# Serve
-start: browser/index.html
+start: build browser/index.html
serve browser/. --port 8000
# Continuously watch for changes to .js, .html or .css files.
diff --git a/README.md b/README.md
index 7268c47..e279715 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
-# Pipe to Browser
+# Pipe2Browser
P2B allows one to pipe anything from shell console to the browser. Data being
piped to the browser then is displayed in a graphical and formatted way by a
-"viewer". Viewers are pluggable pieces of code that know how to handle and
+**viewer**. Viewers are pluggable pieces of code that know how to handle and
display a stream of data.
For example one can do:
@@ -16,30 +16,28 @@
cat cat.jpg | p2b -binary users/jane@google.com/chrome/p2b/jane/image
``
-where **users/jane@google.com/chrome/p2b** is the Object name where p2b service
-is running in the browser. The suffix **console** or **image** specifies what
+where *users/jane@google.com/chrome/p2b/jane* is the Object name where p2b service
+is running in the browser. The suffix *console* or *image* specifies what
viewer should be used to display the data.
Please see the help page inside the P2B application for detailed tutorials.
## Building and Running
-To build
-``
-make
-``
-To run
-``
-make go/bin/p2b #Builds the p2b binary
-make start #Starts a web server at 8080
-``
-and then navigate to http://localhost:8080 and publish under a name such as 'foo'
-and run p2b rpc under vbash with commands such as
-```
-# run vbash
-$V23_ROOT/release/go/src/v.io/x/ref/cmd/vbash
+```
+# build everything and start a web server at 8000
+make start
+```
+Navigate to [http://localhost:8000](http://localhost:8000) and publish under a name such as 'foo'
+then run the `vbash` tool to setup your Vanadium credentials
+```
+# run vbash to setup your Vanadium credentials
+$V23_ROOT/release/go/src/v.io/x/ref/cmd/vbash
+```
+and then run `p2b` cli client, for instance:
+```
# run a sample p2b command
-echo "Hello World" | go/bin/p2b users/<email-address>/chrome/p2b/foo/console
+echo "Hello World" | go/bin/p2b users/<<email-address>>/chrome/p2b/foo/console
```
diff --git a/browser/config.js b/browser/config.js
index 56a6f8a..34f8b87 100644
--- a/browser/config.js
+++ b/browser/config.js
@@ -54,6 +54,16 @@
"github:jspm/nodelibs-https@0.1.0": {
"https-browserify": "npm:https-browserify@0.0.0"
},
+ "github:jspm/nodelibs-net@0.1.2": {
+ "buffer": "github:jspm/nodelibs-buffer@0.1.0",
+ "crypto": "github:jspm/nodelibs-crypto@0.1.0",
+ "http": "github:jspm/nodelibs-http@1.7.0",
+ "net": "github:jspm/nodelibs-net@0.1.2",
+ "process": "github:jspm/nodelibs-process@0.1.1",
+ "stream": "github:jspm/nodelibs-stream@0.1.0",
+ "timers": "github:jspm/nodelibs-timers@0.1.0",
+ "util": "github:jspm/nodelibs-util@0.1.0"
+ },
"github:jspm/nodelibs-os@0.1.0": {
"os-browserify": "npm:os-browserify@0.1.2"
},
@@ -387,8 +397,15 @@
"process": "github:jspm/nodelibs-process@0.1.1"
},
"npm:vanadium@0.0.1": {
+ "assert": "github:jspm/nodelibs-assert@0.1.0",
"bluebird": "npm:bluebird@2.9.8",
"buffer": "github:jspm/nodelibs-buffer@0.1.0",
+ "child_process": "github:jspm/nodelibs-child_process@0.1.0",
+ "console": "github:jspm/nodelibs-console@0.1.0",
+ "constants": "github:jspm/nodelibs-constants@0.1.0",
+ "crypto": "github:jspm/nodelibs-crypto@0.1.0",
+ "dgram": "github:jspm/nodelibs-dgram@0.1.0",
+ "dns": "github:jspm/nodelibs-dns@0.1.0",
"domready": "npm:domready@1.0.7",
"es6-shim": "npm:es6-shim@0.20.4",
"eventemitter2": "npm:eventemitter2@0.4.14",
@@ -401,13 +418,26 @@
"is-browser": "npm:is-browser@2.0.1",
"lru-cache": "npm:lru-cache@2.5.0",
"minimatch": "npm:minimatch@1.0.0",
+ "module": "github:jspm/nodelibs-module@0.1.0",
+ "net": "github:jspm/nodelibs-net@0.1.2",
+ "os": "github:jspm/nodelibs-os@0.1.0",
+ "path": "github:jspm/nodelibs-path@0.1.0",
"process": "github:jspm/nodelibs-process@0.1.1",
+ "punycode": "github:jspm/nodelibs-punycode@0.1.0",
+ "querystring": "github:jspm/nodelibs-querystring@0.1.0",
"randombytes": "npm:randombytes@2.0.1",
"stream": "github:jspm/nodelibs-stream@0.1.0",
+ "string_decoder": "github:jspm/nodelibs-string_decoder@0.1.0",
+ "systemjs-json": "github:systemjs/plugin-json@0.1.0",
+ "timers": "github:jspm/nodelibs-timers@0.1.0",
+ "tls": "github:jspm/nodelibs-tls@0.1.0",
+ "tty": "github:jspm/nodelibs-tty@0.1.0",
"url": "github:jspm/nodelibs-url@0.1.0",
"util": "github:jspm/nodelibs-util@0.1.0",
+ "vm": "github:jspm/nodelibs-vm@0.1.0",
"ws": "npm:ws@0.4.32",
- "xtend": "npm:xtend@4.0.0"
+ "xtend": "npm:xtend@4.0.0",
+ "zlib": "github:jspm/nodelibs-zlib@0.1.0"
},
"npm:vm-browserify@0.0.4": {
"indexof": "npm:indexof@0.0.1"
diff --git a/browser/services/pipe-to-browser-client.js b/browser/services/pipe-to-browser-client.js
index cc06442..0dd4b1a 100644
--- a/browser/services/pipe-to-browser-client.js
+++ b/browser/services/pipe-to-browser-client.js
@@ -28,5 +28,11 @@
stream.pipe(remoteStream);
return Promise.resolve();
});
+ }).catch((err) => {
+ if (err instanceof vanadium.verror.ExtensionNotInstalledError) {
+ vanadium.extension.promptUserToInstallExtension();
+ } else {
+ throw err;
+ }
});
}
diff --git a/browser/services/pipe-to-browser-namespace.js b/browser/services/pipe-to-browser-namespace.js
index d4f99e4..24c2f2a 100644
--- a/browser/services/pipe-to-browser-namespace.js
+++ b/browser/services/pipe-to-browser-namespace.js
@@ -36,5 +36,11 @@
ctx.cancel();
return p2bServices;
});
+ }).catch((err) => {
+ if (err instanceof vanadium.verror.ExtensionNotInstalledError) {
+ vanadium.extension.promptUserToInstallExtension();
+ } else {
+ throw err;
+ }
});
}
diff --git a/browser/services/pipe-to-browser-server.js b/browser/services/pipe-to-browser-server.js
index 04e78f9..24679d8 100644
--- a/browser/services/pipe-to-browser-server.js
+++ b/browser/services/pipe-to-browser-server.js
@@ -13,7 +13,7 @@
import { StreamByteCounter } from 'libs/utils/stream-byte-counter'
import { StreamCopy } from 'libs/utils/stream-copy'
import vanadium from 'vanadium'
-import vdl from 'services/p2b/vdl/index'
+import vdl from 'services/v.io/x/p2b/vdl/index'
var log = new Logger('services/p2b-server');
var server;
@@ -135,7 +135,15 @@
return;
});
- }).catch((err) => { state.reset(); throw err; });
+ }).catch(function(err) {
+ if (err instanceof vanadium.verror.ExtensionNotInstalledError) {
+ vanadium.extension.promptUserToInstallExtension();
+ return;
+ } else {
+ state.reset();
+ throw err;
+ }
+ });
}
/*
diff --git a/browser/services/p2b/vdl/index.js b/browser/services/v.io/x/p2b/vdl/index.js
similarity index 85%
rename from browser/services/p2b/vdl/index.js
rename to browser/services/v.io/x/p2b/vdl/index.js
index fdfec9a..1171258 100644
--- a/browser/services/p2b/vdl/index.js
+++ b/browser/services/v.io/x/p2b/vdl/index.js
@@ -16,9 +16,9 @@
// Types:
var _type1 = new vdl.Type();
-_type1.kind = vdl.Kind.LIST;
+_type1.kind = vdl.kind.LIST;
_type1.name = "";
-_type1.elem = vdl.Types.BYTE;
+_type1.elem = vdl.types.BYTE;
_type1.freeze();
@@ -37,11 +37,11 @@
function Viewer(){}
-module.exports.Viewer = Viewer
+module.exports.Viewer = Viewer;
-Viewer.prototype.pipe = function(ctx) {
+Viewer.prototype.pipe = function(ctx, serverCall) {
throw new Error('Method Pipe not implemented');
};
@@ -49,7 +49,7 @@
Viewer.prototype._serviceDescription = {
name: 'Viewer',
- pkgPath: 'p2b/vdl',
+ pkgPath: 'v.io/x/p2b/vdl',
doc: "// Viewer allows clients to stream data to it and to request a\n// particular viewer to format and display the data.",
embeds: [],
methods: [
@@ -62,7 +62,7 @@
outArgs: [{
name: '',
doc: "",
- type: vdl.Types.ANY
+ type: vdl.types.ANY
},
],
inStream: {