11var fs = require ( 'fs' ) ;
22var path = require ( 'path' ) ;
33
4+ var request = require ( 'request' ) ;
5+
46var h = require ( '../helper' ) ;
57var log = require ( '../log' ) ;
68var Plugin = require ( '../plugin' ) ;
79var session = require ( '../session' ) ;
810
911var cmd = {
10- command : 'plugin [name]> ' ,
12+ command : 'plugin [name]' ,
1113 desc : 'show plugins' ,
1214 builder : {
1315 install : {
@@ -37,16 +39,35 @@ var cmd = {
3739 }
3840} ;
3941
40- function install ( name ) {
42+ var URL_PLUGIN = 'https://github.com/skygragon/leetcode-cli-plugins/raw/master/plugins/$name.js' ;
43+
44+ function install ( src ) {
45+ // assume to be a raw plugin name if not js file.
46+ if ( path . extname ( src ) !== '.js' ) {
47+ src = URL_PLUGIN . replace ( '$name' , src ) ;
48+ }
49+
4150 // copy to plugins folder
42- var newname = path . join ( Plugin . dir , path . basename ( name ) ) ;
43- var src = fs . createReadStream ( name ) ;
44- src . pipe ( fs . createWriteStream ( newname ) ) ;
45- src . on ( 'end' , function ( ) {
46- log . debug ( 'copied to ' + newname ) ;
51+ var dst = path . join ( Plugin . dir , path . basename ( src ) ) ;
52+ var dststream = fs . createWriteStream ( dst ) ;
53+
54+ log . debug ( 'copying from ' + src ) ;
55+ var srcstream = src . startsWith ( 'https://' ) ? request ( src ) : fs . createReadStream ( src ) ;
56+ srcstream . on ( 'response' , function ( resp ) {
57+ if ( resp . statusCode !== 200 )
58+ srcstream . emit ( 'error' , 'HTTP Error: ' + resp . statusCode ) ;
59+ } ) ;
60+ srcstream . on ( 'error' , function ( e ) {
61+ log . error ( e ) ;
62+ fs . unlinkSync ( dst ) ;
63+ } ) ;
64+
65+ srcstream . pipe ( dststream ) ;
66+ dststream . on ( 'end' , function ( ) {
67+ log . debug ( 'copied to ' + dst ) ;
4768
4869 // install dependencies
49- var plugin = require ( path . relative ( __dirname , newname ) ) ;
70+ var plugin = require ( path . relative ( __dirname , dst ) ) ;
5071 if ( plugin . deps . length === 0 ) return ;
5172
5273 var cmd = 'npm install --save ' + plugin . deps . join ( ' ' ) ;
@@ -61,10 +82,8 @@ cmd.handler = function(argv) {
6182 session . argv = argv ;
6283 var name = argv . name ;
6384
64- if ( argv . install ) {
65- if ( ! name || ! fs . existsSync ( name ) ) return log . error ( 'Plugin not found!' ) ;
85+ if ( argv . install )
6686 return install ( name ) ;
67- }
6887
6988 var plugins = Plugin . plugins ;
7089 if ( name ) {
0 commit comments