version 1.0.0
This commit is contained in:
253
index.js
Normal file
253
index.js
Normal file
@@ -0,0 +1,253 @@
|
||||
var instance_skel = require('../../instance_skel')
|
||||
|
||||
var debug
|
||||
var log
|
||||
|
||||
function instance(system, id, config) {
|
||||
var self = this
|
||||
|
||||
// super-constructor
|
||||
instance_skel.apply(this, arguments)
|
||||
|
||||
return self
|
||||
}
|
||||
|
||||
instance.prototype.updateConfig = function (config) {
|
||||
var self = this
|
||||
self.config = config
|
||||
|
||||
self.auth()
|
||||
self.getCurrentTimer()
|
||||
self.actions()
|
||||
}
|
||||
|
||||
instance.prototype.init = function () {
|
||||
var self = this
|
||||
|
||||
debug = self.debug
|
||||
log = self.log
|
||||
|
||||
self.currentTimer = null
|
||||
|
||||
self.init_presets()
|
||||
self.auth()
|
||||
self.getCurrentTimer()
|
||||
self.actions()
|
||||
}
|
||||
|
||||
instance.prototype.auth = function () {
|
||||
var self = this
|
||||
|
||||
auth = Buffer.from(self.config.apiToken + ':' + 'api_token').toString('base64')
|
||||
self.header = []
|
||||
self.header['Content-Type'] = 'application/json'
|
||||
self.header['Authorization'] = 'Basic ' + auth
|
||||
|
||||
console.log(self.header)
|
||||
|
||||
}
|
||||
|
||||
instance.prototype.config_fields = function () {
|
||||
var self = this
|
||||
return [
|
||||
{
|
||||
type: 'text',
|
||||
id: 'info',
|
||||
width: 12,
|
||||
label: 'Information',
|
||||
value: 'This module is for the toggl track service',
|
||||
},
|
||||
{
|
||||
type: 'textinput',
|
||||
id: 'apiToken',
|
||||
label: 'Personal API Token from your Toggl user profile (required)',
|
||||
width: 12,
|
||||
default: '',
|
||||
},
|
||||
]
|
||||
}
|
||||
|
||||
instance.prototype.destroy = function () {
|
||||
var self = this
|
||||
self.currentTimer = null
|
||||
debug('destroy', self.id)
|
||||
}
|
||||
|
||||
instance.prototype.init_presets = function () {
|
||||
var self = this
|
||||
var presets = []
|
||||
|
||||
presets.push({
|
||||
category: 'Timer',
|
||||
label: 'Start',
|
||||
bank: {
|
||||
style: 'text',
|
||||
text: 'Start Timer',
|
||||
size: '18',
|
||||
color: 16777215,
|
||||
bgcolor: 0,
|
||||
},
|
||||
actions: [
|
||||
{
|
||||
action: 'startNewTimer',
|
||||
options: {
|
||||
description: '',
|
||||
}
|
||||
},
|
||||
],
|
||||
})
|
||||
|
||||
presets.push({
|
||||
category: 'Timer',
|
||||
label: 'Stop',
|
||||
bank: {
|
||||
style: 'text',
|
||||
text: 'Stop Timer',
|
||||
size: '18',
|
||||
color: 16777215,
|
||||
bgcolor: 0,
|
||||
},
|
||||
actions: [
|
||||
{
|
||||
action: 'getCurrentTimer',
|
||||
},
|
||||
{
|
||||
action: 'stopCurrentTimer',
|
||||
delay: 250,
|
||||
},
|
||||
],
|
||||
})
|
||||
|
||||
self.setPresetDefinitions(presets)
|
||||
}
|
||||
|
||||
instance.prototype.actions = function (system) {
|
||||
var self = this
|
||||
|
||||
self.setActions({
|
||||
startNewTimer: {
|
||||
label: 'Start New Timer',
|
||||
options: [
|
||||
{
|
||||
type: 'textinput',
|
||||
label: 'Description',
|
||||
id: 'description',
|
||||
default: '',
|
||||
},
|
||||
],
|
||||
},
|
||||
getCurrentTimer: {
|
||||
label: 'Get Current Timer',
|
||||
},
|
||||
stopCurrentTimer: {
|
||||
label: 'Stop Current Timer',
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
instance.prototype.action = function (action) {
|
||||
var self = this
|
||||
const opt = action.options
|
||||
|
||||
switch (action.action) {
|
||||
case 'startNewTimer': {
|
||||
var restCmd = 'rest' // post
|
||||
var cmd = 'https://api.track.toggl.com/api/v8/time_entries/start'
|
||||
var body = '{"time_entry":{"description":"' + opt.description + '","created_with":"companion"}}'
|
||||
console.log(body)
|
||||
break
|
||||
}
|
||||
case 'stopCurrentTimer': {
|
||||
var restCmd = 'rest_put'
|
||||
console.log(self.currentTimer)
|
||||
|
||||
if (self.currentTimer != null && self.currentTimer != undefined) {
|
||||
var cmd = 'https://api.track.toggl.com/api/v8/time_entries/' + self.currentTimer + '/stop'
|
||||
console.log(cmd)
|
||||
} else {
|
||||
self.log('warn','No running timer to stop or running timer ID unknown')
|
||||
return
|
||||
}
|
||||
break
|
||||
}
|
||||
case 'getCurrentTimer': {
|
||||
self.getCurrentTimer()
|
||||
return
|
||||
break
|
||||
}
|
||||
default:
|
||||
return
|
||||
break
|
||||
}
|
||||
|
||||
self.system.emit(restCmd, cmd, body, function (err, result) {
|
||||
|
||||
if (err !== null) {
|
||||
console.log(result.statusCode)
|
||||
console.log('HTTP Request failed (' + result.error.code + ')')
|
||||
self.status(self.STATUS_ERROR, result.error.code);
|
||||
} else {
|
||||
console.log(typeof(result.data))
|
||||
console.log(result.statusCode)
|
||||
if (!self.auth_error) {
|
||||
self.status(self.STATUS_OK)
|
||||
if (typeof result.data === 'object') {
|
||||
if (typeof result.data.data === 'object') {
|
||||
self.interpretData(result.data.data)
|
||||
}
|
||||
} else {
|
||||
self.currentTimer = null
|
||||
console.log(result.data)
|
||||
self.log('debug',result.data)
|
||||
}
|
||||
}
|
||||
}
|
||||
}, self.header)
|
||||
|
||||
}
|
||||
|
||||
instance.prototype.getCurrentTimer = function () {
|
||||
var self = this
|
||||
var cmd = 'https://api.track.toggl.com/api/v8/time_entries/current'
|
||||
|
||||
self.system.emit('rest_get', cmd, function (err, result) {
|
||||
if (err !== null) {
|
||||
console.log('HTTP Request failed (' + result.error.code + ')')
|
||||
self.status(self.STATUS_ERROR, result.error.code)
|
||||
} else if (result.response.statusCode == 200) {
|
||||
console.log('status:' + result.response.statusCode)
|
||||
self.status(self.STATUS_OK)
|
||||
if (typeof result.data.data === 'object' && result.data.data != null) {
|
||||
if ('id' in result.data.data) {
|
||||
self.currentTimer = result.data.data.id
|
||||
console.log(self.currentTimer)
|
||||
self.log('debug','Current timer id ' + self.currentTimer)
|
||||
}
|
||||
} else {
|
||||
console.log(result.data)
|
||||
self.log('debug','No timer running')
|
||||
self.currentTimer = null
|
||||
}
|
||||
} else {
|
||||
console.log('error: ' + result.response.statusCode)
|
||||
self.status(self.STATUS_ERROR, result.response.statusCode)
|
||||
self.log('warn','Unable to connect to toggl, check your API token is correct')
|
||||
self.currentTimer = null
|
||||
}
|
||||
}, self.header)
|
||||
}
|
||||
|
||||
instance.prototype.interpretData = function (data) {
|
||||
var self = this;
|
||||
|
||||
console.log(data)
|
||||
|
||||
if ('id' in data) {
|
||||
console.log(data.id)
|
||||
self.currentTimer = data.id
|
||||
self.log('debug','timer id ' + data.id)
|
||||
}
|
||||
}
|
||||
|
||||
instance_skel.extendedBy(instance)
|
||||
exports = module.exports = instance
|
||||
Reference in New Issue
Block a user