-
Notifications
You must be signed in to change notification settings - Fork 1
/
background.js
156 lines (140 loc) · 3.93 KB
/
background.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
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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
const wait = 0.5;
const eappid_page_url = 'https://www.yahoo.co.jp/'; // eappid と ログイン状態のチェック先
const new_mail_count_url = 'https://web-yunz.yahoo.co.jp/Yunz/V1/getNotifications?eappid='; // メールの件数の取得先
const open_ymail_page_url = 'https://jp.mg5.mail.yahoo.co.jp/neo/launch'; // メールの表示ページ
view_new_mail_count();
//一定周期で動作
chrome.runtime.onInstalled.addListener(() => {
chrome.alarms.create('checkMail', { periodInMinutes: wait });
});
chrome.alarms.onAlarm.addListener((alarm) => {
if (alarm.name === 'checkMail') {
view_new_mail_count();
}
});
function view_new_mail_count() {
(async () => {
let mail_count = await mail_count_fetch_process();
console.log('mail_count', mail_count);
if (mail_count == 0) {
mail_count = '';
}
chrome.action.setBadgeText({
text: String(mail_count),
});
})();
}
async function set_eappid() {
try {
const response = await fetch(eappid_page_url);
const text = await response.text();
const patterns = [/eappid\u0022:\u0022(.+?)\u0022,\u0022/, /eappid\\u0022:\\u0022(.+?)\\u0022,\\u0022/];
let page_eappid = null;
for (const pattern of patterns) {
page_eappid = text.match(pattern);
if (page_eappid !== null) {
break;
}
}
console.log('取得したeappid', page_eappid);
if (page_eappid !== null) {
chrome.storage.local.set(
{
eappid: page_eappid[1],
},
() => {}
);
return page_eappid[1];
}
} catch (error) {
console.log(error);
clear_eappid();
return null;
}
}
function get_eappid() {
return new Promise((resolve, reject) => {
chrome.storage.local.get(['eappid'], function (result) {
if (chrome.runtime.lastError) {
reject(chrome.runtime.lastError);
} else {
resolve(result.eappid);
}
});
});
}
function clear_eappid() {
chrome.storage.local.set(
{
eappid: null,
},
() => {}
);
}
async function is_login() {
// <div id="Login"> の中のリンクを調べる
// ログイン状態では
// - アカウント名: リンクなし
// - 登録情報: https://accounts.yahoo.co.jp/profile?...
// ログアウト状態では
// - ログインリンク: https://login.yahoo.co.jp/config/login?...
// - ID新規作成リンク: https://account.edit.yahoo.co.jp/registration?...
// - 登録情報: https://login.yahoo.co.jp/config/login?...
const response = await fetch(eappid_page_url);
const htmlText = await response.text();
// ログイン状態を示すリンクが存在するかチェック
const isLoggedIn = /https:\/\/accounts\.yahoo\.co\.jp\/profile\?/.test(htmlText);
return isLoggedIn;
}
async function get_mail_count(eappid) {
const response = await fetch(new_mail_count_url + eappid);
const json = await response.json();
const mail_count = json.Result.NewMailCount;
return mail_count;
}
// すでに取得済みの eappid でメール件数の取得を試みる。
// ダメなら get_mail_count2 へ。
async function mail_count_fetch_process() {
try {
const eappid = await get_eappid();
if (eappid) {
try {
return await get_mail_count(eappid);
} catch (error) {
return await eaapid_reacquisition_after_get_mail_count();
}
} else {
return await eaapid_reacquisition_after_get_mail_count();
}
} catch (error) {
console.log(error);
return '-';
}
}
// ログイン判定、eaippidの取得をした後にメール件数の取得を試みる。
async function eaapid_reacquisition_after_get_mail_count() {
try {
if (!(await is_login())) {
// ログインしていない
clear_eappid();
return 'login';
}
const eappid = await set_eappid();
if (!eappid) {
return '-';
}
return await get_mail_count(eappid);
} catch (error) {
console.log(error);
return '-';
}
}
//アイコンをクリックした場合YahooMailを開く
chrome.action.onClicked.addListener(function () {
chrome.tabs.create({
url: open_ymail_page_url,
});
setTimeout(function () {
view_new_mail_count();
}, 10000);
});