@@ -199,7 +199,7 @@ async function openWindow(t, automatic = false) {
199
199
200
200
async function dupeSnoozedTab ( tabId , snoozeTime ) {
201
201
var t = await getSnoozedTabs ( tabId ) ;
202
- [ 'startUp' , 'opened' , 'deleted' , 'repeat' , 'paused' , 'gap' ] . forEach ( prop => delete t [ prop ] ) ;
202
+ [ 'startUp' , 'opened' , 'deleted' , 'repeat' , 'paused' ] . forEach ( prop => delete t [ prop ] ) ;
203
203
t . wakeUpTime = snoozeTime === 'startup' ? dayjs ( ) . add ( 20 , 'y' ) . valueOf ( ) : dayjs ( snoozeTime ) . valueOf ( ) ,
204
204
t . timeCreated = dayjs ( ) . valueOf ( ) ;
205
205
t . id = getRandomId ( ) ;
@@ -210,7 +210,7 @@ async function dupeSnoozedTab(tabId, snoozeTime) {
210
210
211
211
async function editSnoozeTime ( tabId , snoozeTime ) {
212
212
var t = await getSnoozedTabs ( tabId ) ;
213
- [ 'startUp' , 'opened' , 'deleted' , 'repeat' , 'paused' , 'gap' ] . forEach ( prop => delete t [ prop ] ) ;
213
+ [ 'startUp' , 'opened' , 'deleted' , 'repeat' , 'paused' ] . forEach ( prop => delete t [ prop ] ) ;
214
214
t . wakeUpTime = snoozeTime === 'startup' ? dayjs ( ) . add ( 20 , 'y' ) . valueOf ( ) : dayjs ( snoozeTime ) . valueOf ( ) ,
215
215
t . modifiedTime = dayjs ( ) . valueOf ( ) ;
216
216
if ( snoozeTime === 'startup' ) t . startUp = true ;
@@ -271,11 +271,11 @@ async function snoozeWindow(snoozeTime, isASelection) {
271
271
return isASelection ? { tabId : tabsInWindow . filter ( t => t . highlighted ) . map ( t => t . id ) } : { windowId : tabsInWindow . find ( w => w . active ) . windowId } ;
272
272
}
273
273
274
- async function snoozeRecurring ( target , time , repeat , repeatData ) {
274
+ async function snoozeRecurring ( target , data ) {
275
275
var sleepyObj = {
276
276
id : getRandomId ( ) ,
277
277
timeCreated : dayjs ( ) . valueOf ( ) ,
278
- repeat : repeat ,
278
+ repeat : data ,
279
279
paused : false ,
280
280
}
281
281
@@ -287,12 +287,10 @@ async function snoozeRecurring(target, time, repeat, repeatData) {
287
287
sleepyObj . selection = true ;
288
288
}
289
289
290
- if ( repeat === 'startup' ) sleepyObj . startUp = true ;
291
- if ( Object . keys ( repeatData ) . length ) sleepyObj . gap = repeatData ;
290
+ if ( data . repeat === 'startup' ) sleepyObj . startUp = true ;
292
291
293
- var next = await calculateNextSnoozeTime ( repeat , time , repeatData ) ;
294
- sleepyObj . wakeUpTime = next . valueOf ( ) ;
295
- console . log ( next . format ( 'DD/MM/YY HH:mm' ) ) ;
292
+ sleepyObj . wakeUpTime = await calculateNextSnoozeTime ( data ) ;
293
+ console . log ( dayjs ( sleepyObj . wakeUpTime ) . format ( 'DD/MM/YY HH:mm' ) ) ;
296
294
297
295
if ( validTabs . length === 0 ) return { } ;
298
296
if ( validTabs . length === 1 || target === 'tab' ) {
@@ -314,9 +312,8 @@ async function snoozeRecurring(target, time, repeat, repeatData) {
314
312
} )
315
313
}
316
314
console . log ( sleepyObj ) ;
317
- // return;
318
315
await saveTab ( sleepyObj ) ;
319
- chrome . runtime . sendMessage ( { logOptions : [ target , sleepyObj , next . valueOf ( ) ] } ) ;
316
+ chrome . runtime . sendMessage ( { logOptions : [ target , sleepyObj , sleepyObj . wakeUpTime ] } ) ;
320
317
if ( target === 'tab' ) return { tabId : activeTab . id } ;
321
318
if ( target === 'window' ) return { windowId : validTabs . find ( w => w . active ) . windowId } ;
322
319
if ( target === 'selection' ) return { tabId : validTabs . map ( t => t . id ) } ;
@@ -343,7 +340,7 @@ async function getChoices(which) {
343
340
startUp : true ,
344
341
time : NOW . add ( 20 , 'y' ) ,
345
342
timeString : '' ,
346
- repeatTime : '' ,
343
+ repeatTime : NOW . add ( 20 , 'y' ) ,
347
344
repeatTimeString : '' ,
348
345
repeat_id : 'startup' ,
349
346
menuLabel : 'till next startup'
@@ -365,9 +362,9 @@ async function getChoices(which) {
365
362
timeString : 'Today' ,
366
363
repeatTime : '' ,
367
364
repeatTimeString : '' ,
365
+ menuLabel : 'till this morning' ,
368
366
disabled : NOW . startOf ( 'd' ) . add ( config . morning [ 0 ] , 'h' ) . add ( config . morning [ 1 ] , 'm' ) . valueOf ( ) < dayjs ( ) ,
369
367
repeatDisabled : true ,
370
- menuLabel : 'till this morning'
371
368
} ,
372
369
'today-evening' : {
373
370
label : `Today ${ getEveningLabel ( config . evening [ 0 ] ) } ` ,
@@ -377,8 +374,8 @@ async function getChoices(which) {
377
374
repeatTime : NOW . format ( getHourFormat ( true ) ) ,
378
375
repeatTimeString : 'Starts Tom at' ,
379
376
repeat_id : 'daily' ,
377
+ menuLabel : 'till this evening' ,
380
378
disabled : NOW . startOf ( 'd' ) . add ( config . evening [ 0 ] , 'h' ) . add ( config . evening [ 1 ] , 'm' ) . valueOf ( ) < dayjs ( ) ,
381
- menuLabel : 'till this evening'
382
379
} ,
383
380
'tom-morning' : {
384
381
label : 'Tomorrow Morning' ,
@@ -408,8 +405,8 @@ async function getChoices(which) {
408
405
repeatTime : NOW . startOf ( 'd' ) . format ( getHourFormat ( true ) ) ,
409
406
repeatTimeString : `${ NOW . weekday ( 6 ) . format ( 'dddd' ) } s at` ,
410
407
repeat_id : 'weekends' ,
408
+ menuLabel : 'till the weekend' ,
411
409
disabled : NOW . day ( ) === 6 ,
412
- menuLabel : 'till the weekend'
413
410
} ,
414
411
'monday' : {
415
412
label : 'Next Monday' ,
@@ -429,15 +426,15 @@ async function getChoices(which) {
429
426
repeatTime : NOW . format ( getHourFormat ( true ) ) ,
430
427
repeatTimeString : `${ NOW . format ( 'dddd' ) } s at` ,
431
428
repeat_id : 'weekly' ,
429
+ menuLabel : 'for a week' ,
432
430
disabled : NOW . day ( ) === 1 ,
433
431
repeatDisabled : NOW . day ( ) === 1 || NOW . day ( ) === 6 ,
434
- menuLabel : 'for a week'
435
432
} ,
436
433
'month' : {
437
434
label : 'Next Month' ,
438
435
repeatLabel : 'Every Month' ,
439
436
time : NOW . startOf ( 'd' ) . add ( 1 , 'M' ) ,
440
- timeString : NOW . startOf ( 'd' ) . add ( 1 , 'M' ) . format ( 'D MMM' ) ,
437
+ timeString : NOW . startOf ( 'd' ) . add ( 1 , 'M' ) . format ( 'ddd, D MMM' ) ,
441
438
repeatTime : NOW . format ( getHourFormat ( true ) ) ,
442
439
repeatTimeString : `${ getOrdinal ( NOW . format ( 'D' ) ) } of Month` ,
443
440
repeat_id : 'monthly' ,
@@ -447,51 +444,83 @@ async function getChoices(which) {
447
444
return which && all [ which ] ? all [ which ] : all ;
448
445
}
449
446
450
- async function calculateNextSnoozeTime ( repeat , start , data ) {
451
- var NOW = dayjs ( ) , start = dayjs ( start ) ;
452
- if ( repeat === 'custom' && data ) {
447
+ async function calculateNextSnoozeTime ( data ) {
448
+ console . log ( data ) ;
449
+ var NOW = dayjs ( ) , TYPE = data . type , [ HOUR , MINUTE ] = data . time ;
450
+ if ( TYPE === 'hourly' ) {
451
+ var isNextHour = NOW . minute ( ) >= MINUTE ? 1 : 0 ;
452
+ return NOW . startOf ( 'h' ) . add ( isNextHour , 'h' ) . minute ( MINUTE ) . valueOf ( ) ;
453
+ } else if ( TYPE === 'daily' ) {
454
+ var isNextDay = NOW . hour ( ) > HOUR || ( NOW . hour ( ) === HOUR && NOW . minute ( ) >= MINUTE ) ? 1 : 0 ;
455
+ return NOW . startOf ( 'd' ) . add ( isNextDay , 'd' ) . hour ( HOUR ) . minute ( MINUTE ) . valueOf ( ) ;
456
+ } else if ( TYPE === 'daily_morning' ) {
457
+ var [ m_hour , m_minute ] = await getOptions ( 'morning' ) ;
458
+ var isNextDay = NOW . hour ( ) > m_hour || ( NOW . hour ( ) === m_hour && NOW . minute ( ) >= m_minute ) ? 1 : 0 ;
459
+ return NOW . startOf ( 'd' ) . add ( isNextDay , 'd' ) . hour ( m_hour ) . minute ( m_minute ) . valueOf ( ) ;
460
+ } else if ( TYPE === 'daily_evening' ) {
461
+ var [ e_hour , e_minute ] = await getOptions ( 'evening' ) ;
462
+ var isNextDay = NOW . hour ( ) > e_hour || ( NOW . hour ( ) === e_hour && NOW . minute ( ) >= e_minute ) ? 1 : 0 ;
463
+ return NOW . startOf ( 'd' ) . add ( isNextDay , 'd' ) . hour ( e_hour ) . minute ( e_minute ) . valueOf ( ) ;
464
+ } else if ( [ 'weekends' , 'mondays' , 'weekly' , 'monthly' , 'custom' ] . includes ( TYPE ) ) {
453
465
var days = [ ] ;
454
466
if ( data . weekly ) {
455
467
var thisWeek = data . weekly , nextWeek = data . weekly . map ( day => day + 7 ) ;
456
- days = nextWeek . concat ( thisWeek ) . map ( day => dayjs ( ) . startOf ( 'w' ) . add ( day , 'd' ) . add ( start . hour ( ) , 'h' ) . add ( start . minute ( ) , 'm' ) ) ;
468
+ days = nextWeek . concat ( thisWeek ) . map ( day => dayjs ( ) . startOf ( 'w' ) . add ( day , 'd' ) . hour ( HOUR ) . minute ( MINUTE ) ) ;
457
469
} else if ( data . monthly ) {
458
- var thisMonth = data . monthly . filter ( d => d <= dayjs ( ) . daysInMonth ( ) ) . map ( d => dayjs ( ) . startOf ( 'M' ) . date ( d ) . add ( start . hour ( ) , 'h' ) . add ( start . minute ( ) , 'm' ) ) ;
459
- var nextMonth = data . monthly . filter ( d => d <= dayjs ( ) . add ( 1 , 'M' ) . daysInMonth ( ) ) . map ( d => dayjs ( ) . startOf ( 'M' ) . add ( 1 , 'M' ) . date ( d ) . add ( start . hour ( ) , 'h' ) . add ( start . minute ( ) , 'm' ) ) ;
470
+ var thisMonth = data . monthly . filter ( d => d <= dayjs ( ) . daysInMonth ( ) ) . map ( d => dayjs ( ) . startOf ( 'M' ) . date ( d ) . hour ( HOUR ) . minute ( MINUTE ) ) ;
471
+ var nextMonth = data . monthly . filter ( d => d <= dayjs ( ) . add ( 1 , 'M' ) . daysInMonth ( ) ) . map ( d => dayjs ( ) . startOf ( 'M' ) . add ( 1 , 'M' ) . date ( d ) . hour ( HOUR ) . minute ( MINUTE ) ) ;
460
472
days = nextMonth . concat ( thisMonth ) ;
461
473
}
462
- return days . filter ( d => d > NOW ) . pop ( ) ;
463
- } else if ( repeat === 'startup' ) {
464
- return NOW . add ( 20 , 'y' ) ;
465
- } else if ( repeat === 'hourly' ) {
466
- var isThisHour = NOW . minute ( ) < start . minute ( ) ;
467
- return NOW . startOf ( 'h' ) . add ( isThisHour ? 0 : 1 , 'h' ) . minute ( start . minute ( ) ) ;
468
- } else if ( repeat === 'daily' ) {
469
- return dayjs ( ) . startOf ( 'd' ) . add ( 1 , 'd' ) . hour ( NOW . hour ( ) ) . minute ( NOW . minute ( ) ) ;
470
- } else if ( repeat === 'daily_morning' ) {
471
- var morning = await getOptions ( 'morning' ) ;
472
- var isToday = NOW . hour ( ) < morning [ 0 ] || ( NOW . hour ( ) === morning [ 0 ] && NOW . minute ( ) < morning [ 1 ] ) ;
473
- return NOW . startOf ( 'd' ) . add ( isToday ? 0 : 1 , 'd' ) . hour ( morning [ 0 ] ) . minute ( morning [ 1 ] ) ;
474
- } else if ( repeat === 'daily_evening' ) {
475
- var evening = await getOptions ( 'evening' ) ;
476
- var isToday = NOW . hour ( ) < evening [ 0 ] || ( NOW . hour ( ) === evening [ 0 ] && NOW . minute ( ) < evening [ 1 ] ) ;
477
- return NOW . startOf ( 'd' ) . add ( isToday ? 0 : 1 , 'd' ) . hour ( evening [ 0 ] ) . minute ( evening [ 1 ] ) ;
478
- } else if ( repeat === 'weekends' ) {
479
- var isThisWeek = NOW . day ( ) < 6 || ( NOW . day ( ) === 6 && ( NOW . hour ( ) < start . hour ( ) || ( NOW . hour ( ) === start . hour ( ) && NOW . minute ( ) < start . minute ( ) ) ) ) ;
480
- return NOW . startOf ( 'w' ) . add ( isThisWeek ? 0 : 1 , 'w' ) . day ( 6 ) . hour ( start . hour ( ) ) . minute ( start . minute ( ) ) ;
481
- } else if ( repeat === 'mondays' ) {
482
- var isThisWeek = NOW . day ( ) < 1 || ( NOW . day ( ) === 1 && ( NOW . hour ( ) < start . hour ( ) || ( NOW . hour ( ) === start . hour ( ) && NOW . minute ( ) < start . minute ( ) ) ) ) ;
483
- return NOW . startOf ( 'w' ) . add ( isThisWeek ? 0 : 1 , 'w' ) . day ( 1 ) . hour ( start . hour ( ) ) . minute ( start . minute ( ) ) ;
484
- } else if ( repeat === 'weekly' ) {
485
- var isThisWeek = NOW . day ( ) < start . day ( ) || ( NOW . day ( ) === start . day ( ) && ( NOW . hour ( ) < start . hour ( ) || ( NOW . hour ( ) === start . hour ( ) && NOW . minute ( ) < start . minute ( ) ) ) ) ;
486
- return NOW . startOf ( 'w' ) . add ( isThisWeek ? 0 : 1 , 'w' ) . day ( start . day ( ) ) . hour ( start . hour ( ) ) . minute ( start . minute ( ) ) ;
487
- } else if ( repeat === 'monthly' ) {
488
- var isThisMonth = NOW . date ( ) < start . date ( ) || ( NOW . date ( ) === start . date ( ) && ( NOW . hour ( ) < start . hour ( ) || ( NOW . hour ( ) === start . hour ( ) && NOW . minute ( ) < start . minute ( ) ) ) ) ? 0 : 1 ;
489
- var isMonthValid = start . date ( ) <= NOW . daysInMonth ( isThisMonth , 'M' ) ? 0 : 1 ;
490
- return NOW . startOf ( 'M' ) . add ( isThisMonth + isMonthValid , 'M' ) . date ( start . date ( ) ) . hour ( start . hour ( ) ) . minute ( start . minute ( ) ) ;
474
+ return days . filter ( d => d > NOW ) . pop ( ) . valueOf ( ) ;
491
475
}
492
476
return false ;
493
477
}
494
478
479
+ // async function calculateNextSnoozeTime(repeat, start, data) {
480
+ // var NOW = dayjs(), start = dayjs(start);
481
+ // if (repeat === 'custom' && data) {
482
+ // var days = [];
483
+ // if (data.weekly) {
484
+ // var thisWeek = data.weekly, nextWeek = data.weekly.map(day => day + 7);
485
+ // days = nextWeek.concat(thisWeek).map(day => dayjs().startOf('w').add(day, 'd').add(start.hour(), 'h').add(start.minute(), 'm'));
486
+ // } else if (data.monthly) {
487
+ // var thisMonth = data.monthly.filter(d => d <= dayjs().daysInMonth()).map(d => dayjs().startOf('M').date(d).add(start.hour(), 'h').add(start.minute(), 'm'));
488
+ // var nextMonth = data.monthly.filter(d => d <= dayjs().add(1, 'M').daysInMonth()).map(d => dayjs().startOf('M').add(1, 'M').date(d).add(start.hour(), 'h').add(start.minute(), 'm'));
489
+ // days = nextMonth.concat(thisMonth);
490
+ // }
491
+ // return days.filter(d => d > NOW).pop();
492
+ // } else if (repeat === 'startup') {
493
+ // return NOW.add(20, 'y');
494
+ // } else if (repeat === 'hourly') {
495
+ // var isThisHour = NOW.minute() < start.minute();
496
+ // return NOW.startOf('h').add(isThisHour ? 0 : 1, 'h').minute(start.minute());
497
+ // } else if (repeat === 'daily') {
498
+ // return dayjs().startOf('d').add(1, 'd').hour(NOW.hour()).minute(NOW.minute());
499
+ // } else if (repeat === 'daily_morning') {
500
+ // var morning = await getOptions('morning');
501
+ // var isToday = NOW.hour() < morning[0] || (NOW.hour() === morning[0] && NOW.minute() < morning[1]);
502
+ // return NOW.startOf('d').add(isToday ? 0 : 1, 'd').hour(morning[0]).minute(morning[1]);
503
+ // } else if (repeat === 'daily_evening') {
504
+ // var evening = await getOptions('evening');
505
+ // var isToday = NOW.hour() < evening[0] || (NOW.hour() === evening[0] && NOW.minute() < evening[1]);
506
+ // return NOW.startOf('d').add(isToday ? 0 : 1, 'd').hour(evening[0]).minute(evening[1]);
507
+ // } else if (repeat === 'weekends') {
508
+ // var isThisWeek = NOW.day() < 6 || (NOW.day() === 6 && (NOW.hour() < start.hour() || (NOW.hour() === start.hour() && NOW.minute() < start.minute())));
509
+ // return NOW.startOf('w').add(isThisWeek ? 0 : 1, 'w').day(6).hour(start.hour()).minute(start.minute());
510
+ // } else if (repeat === 'mondays') {
511
+ // var isThisWeek = NOW.day() < 1 || (NOW.day() === 1 && (NOW.hour() < start.hour() || (NOW.hour() === start.hour() && NOW.minute() < start.minute())));
512
+ // return NOW.startOf('w').add(isThisWeek ? 0 : 1, 'w').day(1).hour(start.hour()).minute(start.minute());
513
+ // } else if (repeat === 'weekly') {
514
+ // var isThisWeek = NOW.day() < start.day() || (NOW.day() === start.day() && (NOW.hour() < start.hour() || (NOW.hour() === start.hour() && NOW.minute() < start.minute())));
515
+ // return NOW.startOf('w').add(isThisWeek ? 0 : 1, 'w').day(start.day()).hour(start.hour()).minute(start.minute());
516
+ // } else if (repeat === 'monthly') {
517
+ // var isThisMonth = NOW.date() < start.date() || (NOW.date() === start.date() && (NOW.hour() < start.hour() ||( NOW.hour() === start.hour() && NOW.minute() < start.minute()))) ? 0 : 1;
518
+ // var isMonthValid = start.date() <= NOW.daysInMonth(isThisMonth, 'M') ? 0 : 1;
519
+ // return NOW.startOf('M').add(isThisMonth + isMonthValid, 'M').date(start.date()).hour(start.hour()).minute(start.minute());
520
+ // }
521
+ // return false;
522
+ // }
523
+
495
524
/* END ASYNC FUNCTIONS */
496
525
497
526
// var getFaviconUrl = url => `https://icons.duckduckgo.com/ip3/${getHostname(url)}.ico`
0 commit comments