-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.js
More file actions
127 lines (107 loc) · 3.97 KB
/
Copy pathapp.js
File metadata and controls
127 lines (107 loc) · 3.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
var Scheduler = require('./scheduler');
var actions = require('./actions/index');
var BrowserWindow = require('electron').BrowserWindow;
var electronApp = require('electron').app;
var database = require('./activity-db');
var ActivityMonitor = require('activity-monitor');
var ipc = require('electron').ipcMain;
var Promise = require('promise');
function App()
{
this.tray = require('./tray');
this.database = database;
this.database.initialize(ActivityMonitor);
this.activityMonitor = new ActivityMonitor();
this.scheduler = new Scheduler();
Promise.all(['taskAssignmentRepeatCondition', this.scheduler.load('taskAssignmentRepeat'),
'taskAssignmentDoCondition', this.scheduler.load('taskAssignmentDo'),
'taskAssignmentActiveCondition', new Scheduler.VariableCondition(true)])
.then(function(conditions)
{
this.conditions = {};
for(var i = 0; i < conditions.length; i++)
this.conditions[conditions[i]] = conditions[i+1];
this.conditions.taskAssignmentDoAskCondition =
new Scheduler.OperatorCondition('and', this.conditions.taskAssignmentRepeatCondition,
this.conditions.taskAssignmentDoCondition,
this.conditions.taskAssignmentActiveCondition);
this.conditions.activityMonitorCondition =
new Scheduler.DateCondition('Seconds', [0, 10, 20, 30, 40, 50]);
this.conditions.taskAssignmentDoAskCondition.on('state-changed', function()
{
if(this.conditions.taskAssignmentDoAskCondition.state == true)
actions.openTaskAssignment();
}.bind(this));
this.sampleActivity = this.sampleActivity.bind(this);
this.conditions.activityMonitorCondition.on('state-changed', this.sampleActivity);
}.bind(this), function(err)
{
console.log("Error initializing conditions:", err);
});
electronApp.on('window-all-closed', function() {
//Keep running :)
});
ipc.on('can-update-model', function(event)
{
console.log("Can update model");
var update = {};
this.database.getSlices((new Date()).getTime() - 1000*60*60, new Date())
.then(function(timeSlices)
{
update.timeSlices = { $set: timeSlices };
var appIds = {};
timeSlices.forEach(function(slice) { appIds[slice.application] = true; });
appIds = Object.keys(appIds).map(function(id) { return parseInt(id); });
console.log("app id", appIds);
return this.database.getApplications(appIds);
}.bind(this))
.then(function(applications)
{
console.log("Applications", applications);
update.applications = { $set: applications };
event.sender.send('update-model', update);
}.bind(this));
}.bind(this));
}
App.prototype =
{
openTaskAssignment: function openTaskAssignment()
{
//FIXME: switch to task assignment view
return this.openAppWindow();
},
openAppWindow: function openAppWindow()
{
if(!this.window)
{
this.window = new BrowserWindow({ webPreferences: { }, height: 600, width: 1200});
this.window.loadURL('file://' + __dirname + '/gui/index.html');
this.window.on('close', function()
{
delete this.window;
}.bind(this));
}
},
sampleActivity: function sampleActivity()
{
if(this.conditions.activityMonitorCondition.state == true)
{
this.activityMonitor.getActiveWindow()
.then(this.database.matchOrInsertApplication.bind(this.database))
.then(function(dbApp)
{
console.log("Matched or inserted:", dbApp);
var lastSample = this.lastSample;
this.lastSample = new Date();
console.log("Add slice", lastSample, new Date(), dbApp.id, null);
return this.database.addSlice(lastSample, new Date(), dbApp.id, null);
}.bind(this))
.catch(function(err)
{
console.log("Something went wrong:", err);
});
}
}
};
var app = new App();
module.exports = app;