@@ -139,12 +139,36 @@ scanner.addListener('scan', content => {
139
139
$ ( '#add-device-ip-key' ) . val ( key ) ;
140
140
}
141
141
} ) ;
142
- Instascan . Camera . getCameras ( ) . then ( c => {
143
- cameras = c ;
144
- } ) . catch ( e => {
145
- console . error ( e ) ;
142
+
143
+ function startScanner ( ) {
144
+ Instascan . Camera . getCameras ( ) . then ( c => {
145
+ if ( c . length > 0 ) {
146
+ scanner . start ( c [ 0 ] ) . catch ( e => {
147
+ $ ( '#qr-error' ) . html ( `Error: ${ e . message } ` ) ;
148
+ } ) ;
149
+ } else {
150
+ $ ( '#qr-error' ) . html ( `Error: no camera found` ) ;
151
+ }
152
+ } ) . catch ( e => {
153
+ $ ( '#qr-error' ) . html ( `Error: ${ e . message } ` ) ;
154
+ } ) ;
155
+ }
156
+
157
+ function stopScanner ( ) {
158
+ scanner . stop ( ) ;
159
+ $ ( '#qr-error' ) . html ( '' ) ;
160
+ $ ( '#qr-enable' ) . val ( 'disable' ) ;
161
+ }
162
+
163
+ $ ( '#qr-enable' ) . change ( ( ) => {
164
+ if ( $ ( '#qr-enable' ) . val ( ) === 'enable' ) {
165
+ startScanner ( ) ;
166
+ } else {
167
+ stopScanner ( ) ;
168
+ }
146
169
} ) ;
147
170
171
+
148
172
// Entrypoint
149
173
getConfig ( ) ;
150
174
@@ -1022,15 +1046,18 @@ function initGridDevices() {
1022
1046
autoOpen : false ,
1023
1047
modal : true ,
1024
1048
width : 640 ,
1025
- height : 480 ,
1049
+ height : 506 ,
1026
1050
buttons : [
1027
1051
{
1028
1052
text : _ ( 'Cancel' ) ,
1029
1053
click ( ) {
1030
1054
$ ( this ) . dialog ( 'close' ) ;
1031
1055
}
1032
1056
}
1033
- ]
1057
+ ] ,
1058
+ beforeClose ( ) {
1059
+ stopScanner ( ) ;
1060
+ }
1034
1061
} ) ;
1035
1062
$dialogAddCountdown . dialog ( {
1036
1063
autoOpen : false ,
@@ -1186,16 +1213,13 @@ function initGridDevices() {
1186
1213
case 'local' :
1187
1214
$ ( '.add-device-keyserver' ) . hide ( ) ;
1188
1215
$ ( '.add-device-local' ) . show ( ) ;
1189
- if ( cameras . length > 0 ) {
1190
- scanner . start ( cameras [ 0 ] ) ;
1191
- }
1216
+
1192
1217
break ;
1193
1218
default :
1194
1219
$ ( '.add-device-local' ) . hide ( ) ;
1195
1220
$ ( '.add-device-keyserver' ) . show ( ) ;
1196
- if ( cameras . length > 0 ) {
1197
- scanner . stop ( ) ;
1198
- }
1221
+ $ ( '#qr-enable' ) . val ( 'disable' ) ;
1222
+ stopScanner ( ) ;
1199
1223
}
1200
1224
}
1201
1225
} ) ;
@@ -1211,9 +1235,6 @@ function initGridDevices() {
1211
1235
const sgtin = $ . trim ( $ ( '#add-device-ip-address' ) . val ( ) ) . toUpperCase ( ) . replace ( / - / g, '' ) ;
1212
1236
const key = $ . trim ( $ ( '#add-device-ip-key' ) . val ( ) ) . toUpperCase ( ) . replace ( / - / g, '' ) ;
1213
1237
if ( sgtin && key ) {
1214
- if ( cameras . length > 0 ) {
1215
- scanner . stop ( ) ;
1216
- }
1217
1238
$ ( '#dialog-add-device-ip' ) . dialog ( 'close' ) ;
1218
1239
rpcDialog ( daemon , 'setInstallModeWithWhitelist' , [ true , time , [ {
1219
1240
ADDRESS : sgtin ,
@@ -1238,9 +1259,6 @@ function initGridDevices() {
1238
1259
break ;
1239
1260
}
1240
1261
default : {
1241
- if ( cameras . length > 0 ) {
1242
- scanner . stop ( ) ;
1243
- }
1244
1262
$ ( '#dialog-add-device-ip' ) . dialog ( 'close' ) ;
1245
1263
rpcAlert ( daemon , 'setInstallMode' , [ true , time ] , err => {
1246
1264
if ( ! err ) {
0 commit comments