-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdao.js
More file actions
118 lines (105 loc) · 3.12 KB
/
Copy pathdao.js
File metadata and controls
118 lines (105 loc) · 3.12 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
var voteHistoryDB = null;
var request = indexedDB.open("rVoteHistory", 1);
request.onsuccess = function(e) {
voteHistoryDB = e.target.result;
};
request.onupgradeneeded = function(e) {
var db = e.target.result;
if (db.objectStoreNames.contains("user"))
db.deleteObjectStore("user");
db.createObjectStore("user", {keyPath: "userName"});
};
chrome.runtime.onInstalled.addListener(function (details) {
if (details.reason === "install" || details.reason === "update") {
chrome.notifications.onButtonClicked.addListener(reviewsRedirect);
chrome.notifications.onClicked.addListener(reviewsRedirect);
function reviewsRedirect(id, buttonIndex) {
if (id === "voteHistory") {
if (buttonIndex !== 1)
chrome.tabs.create({url:"https://chrome.google.com/webstore/detail/reddit-vote-history/ghjjjcefmjimocidgninghmnbbpjonbo/reviews"});
chrome.notifications.clear(id);
}
}
var ops = {
type: "basic",
iconUrl: "assets/icon.png",
title: "Reddit Vote History",
message: "Please consider rating or reviewing if you haven't already!",
buttons: [{title: "Sure!"}, {title: "No thanks / Already have"}],
isClickable: true
};
chrome.notifications.create("voteHistory", ops);
}
});
chrome.runtime.onMessage.addListener(function(message, sender) {
if (message.comment)
updateRecord(message.realName, message.comment, message.voteAdded);
else if (message.from === 'background') {
if (message.comments)
updateComments(message.userName, message.comments);
else
getUser(message.userName, sender);
}
});
function updateRecord(realName, comment, voteAdded) {
var userName = realName.toLowerCase();
var trans = voteHistoryDB.transaction("user", "readwrite");
var store = trans.objectStore("user");
var userReq = store.get(userName);
userReq.onsuccess = function(e) {
var user = e.target.result;
if (voteAdded) {
if (user) {
var exists = false;
for (var i = 0; i < user.comments.length; i++) {
if (user.comments[i] === comment) {
exists = true;
break;
}
}
if (!exists) {
user.comments.unshift(comment);
store.put(user);
}
}
else {
user = {userName:userName, realName:realName, comments:[comment]};
store.put(user);
}
}
else if (user) {
for (var i = 0; i < user.comments.length; i++) {
if (user.comments[i] === comment) {
user.comments.splice(i,1);
if (user.comments.length)
store.put(user);
else
store.delete(user.userName);
break;
}
}
}
};
}
function getUser(userName, sender) {
var trans = voteHistoryDB.transaction("user", "readonly");
var store = trans.objectStore("user");
var userReq = store.get(userName);
userReq.onsuccess = function(e) {
chrome.tabs.sendMessage(sender.tab.id, {from:'dao', user:e.target.result})
};
}
function updateComments(userName, comments) {
var trans = voteHistoryDB.transaction("user", "readwrite");
var store = trans.objectStore("user");
if (comments.length) {
var userReq = store.get(userName);
userReq.onsuccess = function(e) {
var user = e.target.result;
user.comments = comments;
store.put(user);
};
}
else
store.delete(userName);
}