DingDingForLinux

钉钉Web版的消息提醒
  1. 钉钉Web版居然没有消息提醒功能, 就用js写个脚本监听消息动态
  2. 通过 Notification 来弹出消息. 有新消息 或者 每隔5分钟会提醒一次, 基本满足工作需要了.
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
128
129
130
131
132
133
134
135
136
137
window.localStorage.setItem('language.title', '钉钉')
window.localStorage.setItem('conf.fadeIn', 1000)
window.localStorage.setItem('conf.fadeOut', 1000)
window.localStorage.setItem('conf.lastHeartBeatMax', 3)
window.localStorage.setItem('conf.delayNotify', 60*5)
window.localStorage.setItem('conf.showMsgDelayDefault', 2500)
var boring = 0, currentTitle = window.localStorage.getItem('language.title'), countMsg = 0
var lastHeartBeat = []
var runContent = {
hasMessage: false,
countMsg: -1,
timestamp: [parseInt(+new Date()/1000), 0]
}
var notifyObj = {}
Object.defineProperty(runContent, 'countMsg', {
get: function() {
if(this.history && this.history.length){
if(1 === this.history.length){
return this.history[0]
}else{
return this.history[1]
}
}else{
this.history = []
return -1
}
},
set: function(v) {
if(!this.history){
this.history = []
}
this.history.push(v)
while(this.history.length && this.history.length > 2){
this.history.shift()
}
return this.history[1]
}
})
Object.defineProperty(runContent, 'firstCountMsg', {
get: function() {
if(this.history && 2 === this.history.length){
return this.history[0]
}else if(this.history && 1 === this.history.length){
return -1
}else{
this.history = []
return -1
}
}
})
Object.defineProperty(runContent, 'lastHeartBeat', {
get: function() {
if(this.heartBeat.length){
return this.heartBeat[this.heartBeat.length - 1]
}else{
return null
}
}
})
var getUnreadNum = function(){
var tmp = [], unread = $("em[class='ng-binding']")
for(var len = unread.length - 1; len>=0; len--){
tmp.unshift(+unread[len].innerText)
}
return tmp[0]
}
var notifyMsg = function(msg){
msgTitle = msg.title
if(msg.immediate){
msgTitle = '(' + msgTitle + ') 条未读'
}else{
runContent.timestamp[1] = parseInt(+new Date()/1000)
if(runContent.timestamp[1] < runContent.timestamp[0] + parseInt(window.localStorage.getItem('conf.delayNotify'))){
msgTitle = ''
}else{
msgTitle = '(' + msgTitle + ') 条未读'
runContent.timestamp[0] = runContent.timestamp[1]
}
}
if(msgTitle){
console.log(msgTitle)
extension = {
icon: 'data:image/png;base64,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',
body: ''
}
notifyObj = new Notification(msgTitle, extension)
var notifyShowEvent = function () {
setTimeout(this.close.bind(this), window.localStorage.getItem('conf.showMsgDelayDefault'))
}
notifyObj.addEventListener('show', notifyShowEvent, false)
}
}
var showNotification = function(){
var unread = getUnreadNum()
if(unread){
// first-exec
if(runContent.countMsg < 0){
runContent.countMsg = unread
}
if(runContent.firstCountMsg < 0){
runContent.countMsg = unread
}
runContent.countMsg = unread
if(runContent.countMsg > -1 && (runContent.countMsg != runContent.firstCountMsg)){
runContent.countMsg = unread
notifyMsg({title: runContent.countMsg, immediate: true})
console.log(runContent.countMsg)
}else{
notifyMsg({title: runContent.countMsg, immediate: false})
}
console.log('_')
return
}
console.log('.')
}
window.onblur = function() {
if(!boring){
boring = setInterval(showNotification, window.localStorage.getItem('conf.fadeIn'))
}
}
var stopListen = function(){
clearInterval(boring)
}