-
Notifications
You must be signed in to change notification settings - Fork 32
/
twitterMonitor.js
93 lines (83 loc) · 2.61 KB
/
twitterMonitor.js
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
import EventEmitter from 'eventemitter3'
import { remote, ipcRenderer as ipc } from 'electron'
import schedule from 'node-schedule'
import TwitterClient from '../twitterClient'
import makeTask from './tasks'
import filenamify from 'filenamify'
import S from 'string'
import path from 'path'
S.TMPL_OPEN = '{'
S.TMPL_CLOSE = '}'
const settings = remote.getGlobal('settings')
const makeArchiveConfig = (config, tweet) => {
let name = filenamify(tweet)
let saveThisOne = `${config.forCol}_${config.account}_${name}_${new Date().getTime()}.warc`
return {
type: 'twitter',
forCol: config.forCol,
uri_r: tweet,
saveTo: path.join(S(settings.get('collections.colWarcs')).template({col: config.forCol}).s, saveThisOne),
header: {
isPartOfV: config.forCol,
description: `Archived by WAIL for ${config.forCol}`
}
}
}
export default class TwitterMonitor extends EventEmitter {
constructor () {
super()
this.twitterClient = new TwitterClient()
this.monitorJobs = {}
}
watchTwitter (config) {
console.log('watching twitter for', config)
if (!config.dur) {
config.dur = {val: 5, what: 'minutes'}
}
let task = makeTask(config, this.twitterClient)
task.on('done', () => {
let message = `Finished Monitoring ${config.account} for ${config.forCol}`
console.log(message)
ipc.send('display-message', {
title: 'Twitter Monitor Update',
level: 'info',
message,
uid: message
})
delete this.monitorJobs[config.account]
})
task.on('error', (err) => {
let message = `Error occurred while monitoring ${config.account} for ${config.forCol} ${err.message || ''}`
console.error('error while monitoring', config.account)
console.error(err)
ipc.send('log-error-display-message', {
m: {
title: 'Twitter Monitor Error',
level: 'error',
message,
uid: message
},
err: err
})
delete this.monitorJobs[config.account]
})
task.on('tweets', (tweets) => {
console.log('tweets here for', config.account)
let configs = []
tweets.forEach(t => {
configs.push(makeArchiveConfig(config, t))
})
ipc.send('archive-uri-r', configs)
})
task.on('archiveTimeline', anAccount => {
console.log('saving ', anAccount)
ipc.send('archive-uri-r', makeArchiveConfig(config, `https://twitter.com/${anAccount}`))
})
if (config.oneOff) {
task.poll()
} else {
this.monitorJobs[config.account] = task
this.monitorJobs[config.account].start(schedule, '*/5 * * * *')
}
}
}