| 
14 | 14 |     .controller('WasIdleCtrl', WasIdleCtrl);  | 
15 | 15 | 
 
  | 
16 | 16 |   /* @ngInject */  | 
17 |  | -  function WasIdleCtrl($mdDialog, $rootScope, $scope, Tasks, $window, idleTime, minIdleTimeInMs, theme, $filter) {  | 
 | 17 | +  function WasIdleCtrl($mdDialog, $rootScope, $scope, Tasks, $window, initialIdleTime, minIdleTimeInMs, theme, $filter, $interval) {  | 
 | 18 | +    const POLL_INTERVAL = 1000;  | 
 | 19 | + | 
18 | 20 |     let vm = this;  | 
19 | 21 |     vm.theme = theme;  | 
20 |  | -    const IPC_EVENT_IDLE = 'WAS_IDLE';  | 
21 |  | -    const IPC_EVENT_UPDATE_TIME_SPEND_FOR_CURRENT = 'UPDATE_TIME_SPEND';  | 
22 | 22 | 
 
  | 
23 |  | -    let realIdleTime = (idleTime + minIdleTimeInMs);  | 
 | 23 | +    let realIdleTime = initialIdleTime;  | 
24 | 24 | 
 
  | 
25 | 25 |     // used to display only; we add minIdleTimeInMs because that is idleTime too  | 
26 | 26 |     // even if it is tracked already  | 
27 | 27 |     vm.idleTime = $window.moment.duration(realIdleTime, 'milliseconds').format('hh:mm:ss');  | 
28 | 28 | 
 
  | 
29 | 29 |     vm.undoneTasks = Tasks.getUndoneToday(true);  | 
30 |  | -    vm.selectedTask = $rootScope.r.currentTask || undefined;  | 
 | 30 | +    vm.selectedTask = $rootScope.r.currentTask || $rootScope.r.lastCurrentTask || undefined;  | 
31 | 31 | 
 
  | 
32 | 32 |     vm.trackIdleToTask = () => {  | 
33 | 33 |       if (vm.selectedTask) {  | 
34 |  | -        if ($rootScope.r.currentTask) {  | 
35 |  | -          // we need remove the possibly falsely tracked time from the previous current task  | 
36 |  | -          Tasks.removeTimeSpent($rootScope.r.currentTask, minIdleTimeInMs);  | 
37 |  | -        }  | 
38 |  | - | 
39 | 34 |         // add the idle time in milliseconds + the minIdleTime that was  | 
40 | 35 |         // not tracked or removed  | 
41 | 36 |         Tasks.addTimeSpent(vm.selectedTask, realIdleTime);  | 
 | 
51 | 46 |     };  | 
52 | 47 | 
 
  | 
53 | 48 |     vm.cancel = () => {  | 
54 |  | -      // remove min idle time when it was tracked before  | 
55 |  | -      if ($rootScope.r.currentTask) {  | 
56 |  | -        Tasks.removeTimeSpent($rootScope.r.currentTask, minIdleTimeInMs);  | 
57 |  | -      }  | 
58 | 49 |       $mdDialog.cancel();  | 
59 | 50 |     };  | 
60 | 51 | 
 
  | 
61 |  | -    $scope.$on('$destroy', () => {  | 
62 |  | -      window.ipcRenderer.removeListener(IPC_EVENT_UPDATE_TIME_SPEND_FOR_CURRENT, updateOnPing);  | 
63 |  | -      window.ipcRenderer.removeListener(IPC_EVENT_IDLE, updateOnIdle);  | 
64 |  | -    });  | 
 | 52 | +    let currentIdleStart = moment();  | 
 | 53 | +    const poll = $interval(() => {  | 
 | 54 | +      let now = moment();  | 
65 | 55 | 
 
  | 
66 |  | -    function updateOnPing(ev, evData) {  | 
67 |  | -      let timeSpentInMs = evData.timeSpentInMs;  | 
68 |  | -      idleTime = idleTime + timeSpentInMs + 5000;  | 
69 |  | -      realIdleTime = (idleTime + minIdleTimeInMs);  | 
 | 56 | +      realIdleTime += moment.duration(now.diff(currentIdleStart))  | 
 | 57 | +        .asMilliseconds();  | 
70 | 58 |       vm.idleTime = $window.moment.duration(realIdleTime, 'milliseconds').format('hh:mm:ss');  | 
71 |  | -      $scope.$digest();  | 
72 |  | -    }  | 
73 | 59 | 
 
  | 
74 |  | -    function updateOnIdle(ev, params) {  | 
75 |  | -      idleTime = idleTime + params.idleTimeInMs;  | 
76 |  | -      realIdleTime = (idleTime + minIdleTimeInMs);  | 
77 |  | -      vm.idleTime = $window.moment.duration(realIdleTime, 'milliseconds').format('hh:mm:ss');  | 
78 |  | -      $scope.$digest();  | 
79 |  | -    }  | 
80 |  | - | 
81 |  | -    // add regular ping until response  | 
82 |  | -    window.ipcRenderer.on(IPC_EVENT_UPDATE_TIME_SPEND_FOR_CURRENT, updateOnPing);  | 
 | 60 | +      // set to now  | 
 | 61 | +      currentIdleStart = moment();  | 
 | 62 | +    }, POLL_INTERVAL);  | 
83 | 63 | 
 
  | 
84 |  | -    // add additional idle until response  | 
85 |  | -    window.ipcRenderer.on(IPC_EVENT_IDLE, updateOnIdle);  | 
 | 64 | +    $scope.$on('$destroy', () => {  | 
 | 65 | +      $interval.cancel(poll);  | 
 | 66 | +    });  | 
86 | 67 |   }  | 
87 | 68 | })();  | 
0 commit comments