11import { Subject , BehaviorSubject , interval } from 'rxjs' ;
22import { takeUntil , filter , startWith } from 'rxjs/operators' ;
33
4- const UPLOAD__NOPE = 'UPLOAD__NOPE' ;
5- const UPLOAD__DONE = 'UPLOAD__DONE' ;
6- const UPLOAD__ERROR = 'UPLOAD__ERROR' ;
7- const UPLOAD__IN_PROGRESS = 'UPLOAD__IN_PROGRESS' ;
8-
94const POLLING_INTERVAL = 1500 ;
5+ const UPLOAD_NOPE = 'UPLOAD_NOPE' ;
106
117export default class Daemon {
128 constructor ( ) {
@@ -17,7 +13,7 @@ export default class Daemon {
1713 this . appMessages = new Subject ( ) ;
1814 this . serialMonitorOpened = new BehaviorSubject ( false ) ;
1915 this . serialMonitorMessages = new Subject ( ) ;
20- this . uploading = new BehaviorSubject ( { status : UPLOAD__NOPE } ) ;
16+ this . uploading = new BehaviorSubject ( { status : UPLOAD_NOPE } ) ;
2117 this . devicesList = new BehaviorSubject ( {
2218 serial : [ ] ,
2319 network : [ ]
@@ -60,144 +56,4 @@ export default class Daemon {
6056 }
6157 return a . every ( ( item , index ) => ( b [ index ] . Name === item . Name && b [ index ] . IsOpen === item . IsOpen ) ) ;
6258 }
63-
64- handleAppMessage ( message ) {
65- // Result of a list command
66- if ( message . Ports ) {
67- this . handleListMessage ( message ) ;
68- }
69- // Serial monitor message
70- if ( message . D ) {
71- this . serialMonitorMessages . next ( message . D ) ;
72- }
73-
74- if ( message . ProgrammerStatus ) {
75- this . handleUploadMessage ( message ) ;
76- }
77-
78- if ( message . Err ) {
79- this . uploading . next ( { status : UPLOAD__ERROR , err : message . Err } ) ;
80- }
81- }
82-
83- handleListMessage ( message ) {
84- const lastDevices = this . devicesList . getValue ( ) ;
85- if ( message . Network && ! Daemon . devicesListAreEquals ( lastDevices . network , message . Ports ) ) {
86- this . devicesList . next ( {
87- serial : lastDevices . serial ,
88- network : message . Ports
89- } ) ;
90- }
91- else if ( ! message . Network && ! Daemon . devicesListAreEquals ( lastDevices . serial , message . Ports ) ) {
92- this . devicesList . next ( {
93- serial : message . Ports ,
94- network : lastDevices . network
95- } ) ;
96- }
97- }
98-
99- handleUploadMessage ( message ) {
100- if ( this . uploading . getValue ( ) . status !== UPLOAD__IN_PROGRESS ) {
101- return ;
102- }
103- if ( message . Flash === 'Ok' && message . ProgrammerStatus === 'Done' ) {
104- this . uploading . next ( { status : UPLOAD__DONE , msg : message . Flash } ) ;
105- return ;
106- }
107- switch ( message . ProgrammerStatus ) {
108- case 'Starting' :
109- this . uploading . next ( { status : UPLOAD__IN_PROGRESS , msg : `Programming with: ${ message . Cmd } ` } ) ;
110- break ;
111- case 'Busy' :
112- this . uploading . next ( { status : UPLOAD__IN_PROGRESS , msg : message . Msg } ) ;
113- break ;
114- case 'Error' :
115- this . uploading . next ( { status : UPLOAD__ERROR , err : message . Msg } ) ;
116- break ;
117- case 'Killed' :
118- this . uploading . next ( { status : UPLOAD__IN_PROGRESS , msg : `terminated by user` } ) ;
119- this . uploading . next ( { status : UPLOAD__ERROR , err : `terminated by user` } ) ;
120- break ;
121- case 'Error 404 Not Found' :
122- this . uploading . next ( { status : UPLOAD__ERROR , err : message . Msg } ) ;
123- break ;
124- default :
125- this . uploading . next ( { status : UPLOAD__IN_PROGRESS , msg : message . Msg } ) ;
126- }
127- }
128-
129- /**
130- * Perform an upload via http on the daemon
131- * target = {
132- * board: "name of the board",
133- * port: "port of the board",
134- * auth_user: "Optional user to use as authentication",
135- * auth_pass: "Optional pass to use as authentication"
136- * auth_key: "Optional private key",
137- * auth_port: "Optional alternative port (default 22)"
138- * network: true or false
139- * }
140- * data = {
141- * commandline: "commandline to execute",
142- * signature: "signature of the commandline",
143- * files: [
144- * {name: "Name of a file to upload on the device", data: 'base64data'}
145- * ],
146- * options: {}
147- * }
148- * cb = callback function executing everytime a packet of data arrives through the websocket
149- */
150- upload ( target , data ) {
151- this . uploading . next ( { status : UPLOAD__IN_PROGRESS } ) ;
152-
153- if ( data . files . length === 0 ) { // At least one file to upload
154- this . uploading . next ( { status : UPLOAD__ERROR , err : 'You need at least one file to upload' } ) ;
155- return ;
156- }
157-
158- // Main file
159- const file = data . files [ 0 ] ;
160- file . name = file . name . split ( '/' ) ;
161- file . name = file . name [ file . name . length - 1 ] ;
162-
163- const payload = {
164- board : target . board ,
165- port : target . port ,
166- commandline : data . commandline ,
167- signature : data . signature ,
168- hex : file . data ,
169- filename : file . name ,
170- extra : {
171- auth : {
172- username : target . auth_user ,
173- password : target . auth_pass ,
174- private_key : target . auth_key ,
175- port : target . auth_port
176- } ,
177- wait_for_upload_port : data . options . wait_for_upload_port === 'true' || data . options . wait_for_upload_port === true ,
178- use_1200bps_touch : data . options . use_1200bps_touch === 'true' || data . options . use_1200bps_touch === true ,
179- network : target . network ,
180- ssh : target . ssh ,
181- params_verbose : data . options . param_verbose ,
182- params_quiet : data . options . param_quiet ,
183- verbose : data . options . verbose
184- } ,
185- extrafiles : data . extrafiles || [ ]
186- } ;
187-
188- for ( let i = 1 ; i < data . files . length ; i += 1 ) {
189- payload . extrafiles . push ( { filename : data . files [ i ] . name , hex : data . files [ i ] . data } ) ;
190- }
191-
192- fetch ( `${ this . pluginURL } /upload` , {
193- method : 'POST' ,
194- headers : {
195- 'Content-Type' : 'text/plain; charset=utf-8'
196- } ,
197- body : JSON . stringify ( payload )
198- } )
199- . catch ( error => {
200- this . uploading . next ( { status : UPLOAD__ERROR , err : error } ) ;
201- } ) ;
202- }
20359}
0 commit comments