@@ -24,6 +24,8 @@ require("messages").pushMessage({"t":"add","id":"call","src":"Phone","title":"Bo
24
24
var Layout = require ( "Layout" ) ;
25
25
var layout ; // global var containing the layout for the currently displayed message
26
26
var settings = require ( 'Storage' ) . readJSON ( "messages.settings.json" , true ) || { } ;
27
+ var reply ;
28
+ try { reply = require ( "reply" ) ; } catch ( e ) { }
27
29
var fontSmall = "6x8" ;
28
30
var fontMedium = g . getFonts ( ) . includes ( "6x15" ) ?"6x15" :"6x8:2" ;
29
31
var fontBig = g . getFonts ( ) . includes ( "12x20" ) ?"12x20" :"6x8:2" ;
@@ -45,6 +47,7 @@ if (Graphics.prototype.setFontIntl) {
45
47
46
48
var active ; // active screen (undefined/"list"/"music"/"map"/"message"/"scroller"/"settings")
47
49
var openMusic = false ; // go back to music screen after we handle something else?
50
+ var replying = false ; // If we're replying to a message, don't interrupt
48
51
// hack for 2v10 firmware's lack of ':size' font handling
49
52
try {
50
53
g . setFont ( "6x8:2" ) ;
@@ -267,11 +270,31 @@ function showMessageSettings(msg) {
267
270
/*LANG*/ "View Message" : ( ) => {
268
271
showMessageScroller ( msg ) ;
269
272
} ,
273
+ } ;
274
+
275
+ if ( msg . reply && reply ) {
276
+ menu [ /*LANG*/ "Reply" ] = ( ) => {
277
+ replying = true ;
278
+ reply . reply ( { msg : msg } )
279
+ . then ( result => {
280
+ Bluetooth . println ( JSON . stringify ( result ) ) ;
281
+ replying = false ;
282
+ showMessage ( msg . id ) ;
283
+ } )
284
+ . catch ( ( ) => {
285
+ replying = false ;
286
+ showMessage ( msg . id ) ;
287
+ } ) ;
288
+ } ;
289
+ }
290
+
291
+ menu = Object . assign ( menu , {
270
292
/*LANG*/ "Delete" : ( ) => {
271
293
MESSAGES = MESSAGES . filter ( m => m . id != msg . id ) ;
272
294
checkMessages ( { clockIfNoMsg :0 , clockIfAllRead :0 , showMsgIfUnread :0 , openMusic :0 } ) ;
273
295
} ,
274
- } ;
296
+ } ) ;
297
+
275
298
if ( Bangle . messageIgnore && msg . src )
276
299
menu [ /*LANG*/ "Ignore" ] = ( ) => {
277
300
E . showPrompt ( /*LANG*/ "Ignore all messages from " + E . toJS ( msg . src ) + "?" , { title :/*LANG*/ "Ignore" } ) . then ( isYes => {
@@ -305,6 +328,7 @@ function showMessageSettings(msg) {
305
328
}
306
329
307
330
function showMessage ( msgid , persist ) {
331
+ if ( replying ) { return ; }
308
332
if ( ! persist ) resetReloadTimeout ( ) ;
309
333
let idx = MESSAGES . findIndex ( m => m . id == msgid ) ;
310
334
var msg = MESSAGES [ idx ] ;
@@ -374,15 +398,32 @@ function showMessage(msgid, persist) {
374
398
} ; footer . push ( { type :"img" , src :atob ( "PhAB4A8AAAAAAAPAfAMAAAAAD4PwHAAAAAA/H4DwAAAAAH78B8AAAAAA/+A/AAAAAAH/Af//////w/gP//////8P4D///////H/Af//////z/4D8AAAAAB+/AfAAAAAA/H4DwAAAAAPg/AcAAAAADwHwDAAAAAA4A8AAAAAAAA==" ) , col :"#f00" , cb :negHandler } ) ;
375
399
}
376
400
footer . push ( { fillx :1 } ) ; // push images to left/right
377
- if ( msg . positive ) {
401
+ if ( msg . reply && reply ) {
402
+ posHandler = ( ) => {
403
+ replying = true ;
404
+ msg . new = false ;
405
+ cancelReloadTimeout ( ) ; // don't auto-reload to clock now
406
+ reply . reply ( { msg : msg } )
407
+ . then ( result => {
408
+ Bluetooth . println ( JSON . stringify ( result ) ) ;
409
+ replying = false ;
410
+ layout . render ( ) ;
411
+ checkMessages ( { clockIfNoMsg :1 , clockIfAllRead :1 , showMsgIfUnread :1 , openMusic :openMusic } ) ;
412
+ } )
413
+ . catch ( ( ) => {
414
+ replying = false ;
415
+ layout . render ( ) ;
416
+ showMessage ( msg . id ) ;
417
+ } ) ;
418
+ } ; footer . push ( { type :"img" , src :atob ( "QRABAAAAAAAH//+AAAAABgP//8AAAAADgf//4AAAAAHg4ABwAAAAAPh8APgAAAAAfj+B////////geHv///////hf+f///////GPw///////8cGBwAAAAAPx/gDgAAAAAfD/gHAAAAAA8DngOAAAAABwDHP8AAAAADACGf4AAAAAAAAM/w==" ) , col :"#0f0" , cb :posHandler } ) ;
419
+ }
420
+ else if ( msg . positive ) {
378
421
posHandler = ( ) => {
379
422
msg . new = false ;
380
423
cancelReloadTimeout ( ) ; // don't auto-reload to clock now
381
424
Bangle . messageResponse ( msg , true ) ;
382
425
checkMessages ( { clockIfNoMsg :1 , clockIfAllRead :1 , showMsgIfUnread :1 , openMusic :openMusic } ) ;
383
- } ;
384
- footer . push ( { type :"img" , src :atob ( "QRABAAAAAAAAAAOAAAAABgAAA8AAAAADgAAD4AAAAAHgAAPgAAAAAPgAA+AAAAAAfgAD4///////gAPh///////gA+D///////AD4H//////8cPgAAAAAAPw8+AAAAAAAfB/4AAAAAAA8B/gAAAAAABwB+AAAAAAADAB4AAAAAAAAABgAA==" ) , col :"#0f0" , cb :posHandler } ) ;
385
-
426
+ } ; footer . push ( { type :"img" , src :atob ( "QRABAAAAAAAAAAOAAAAABgAAA8AAAAADgAAD4AAAAAHgAAPgAAAAAPgAA+AAAAAAfgAD4///////gAPh///////gA+D///////AD4H//////8cPgAAAAAAPw8+AAAAAAAfB/4AAAAAAA8B/gAAAAAABwB+AAAAAAADAB4AAAAAAAAABgAA==" ) , col :"#0f0" , cb :posHandler } ) ;
386
427
}
387
428
388
429
layout = new Layout ( { type :"v" , c : [
0 commit comments