395 lines
12 KiB
JavaScript
395 lines
12 KiB
JavaScript
//通知
|
|
//取得+Streaming接続
|
|
function notf(acct_id, tlid, sys) {
|
|
if (sys == "direct") {
|
|
notfColumn(acct_id, tlid, sys)
|
|
} else {
|
|
notfCommon(acct_id, tlid, sys)
|
|
}
|
|
}
|
|
function notfColumn(acct_id, tlid, sys) {
|
|
todo("Notifications Loading...");
|
|
var native = localStorage.getItem("nativenotf");
|
|
var at = localStorage.getItem("acct_" + acct_id + "_at");
|
|
if (!native) {
|
|
native = "yes";
|
|
}
|
|
var domain = localStorage.getItem("domain_" + acct_id);
|
|
var httpreq = new XMLHttpRequest();
|
|
if (localStorage.getItem("mode_" + domain) == "misskey") {
|
|
var misskey = true;
|
|
var start = "https://" + domain + "/api/i/notifications";
|
|
httpreq.open("POST", start, true);
|
|
httpreq.setRequestHeader('Content-Type', 'application/json');
|
|
var body = JSON.stringify({
|
|
i: at
|
|
});
|
|
} else {
|
|
var misskey = false;
|
|
if (localStorage.getItem("exclude-" + tlid)) {
|
|
var exc = localStorage.getItem("exclude-" + tlid);
|
|
} else {
|
|
var exc = "";
|
|
}
|
|
var start = "https://" + domain + "/api/v1/notifications" + exc;
|
|
httpreq.open("GET", start, true);
|
|
httpreq.setRequestHeader('Content-Type', 'application/json');
|
|
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
|
|
var body = "";
|
|
}
|
|
|
|
httpreq.responseType = "json";
|
|
httpreq.send(body);
|
|
httpreq.onreadystatechange = function () {
|
|
if (httpreq.readyState === 4) {
|
|
var json = httpreq.response;
|
|
var max_id = httpreq.getResponseHeader("link");
|
|
if (max_id) {
|
|
max_id = max_id.match(/[?&]{1}max_id=([0-9]+)/)[1]
|
|
}
|
|
if (json[0]) {
|
|
var templete = "";
|
|
var lastnotf = localStorage.getItem("lastnotf_" + acct_id);
|
|
localStorage.setItem("lastnotf_" + acct_id, json[0].id);
|
|
Object.keys(json).forEach(function (key) {
|
|
var obj = json[key];
|
|
if (lastnotf == obj.id && key > 0 && native == "yes") {
|
|
var ct = key;
|
|
if (key > 14) {
|
|
ct = "15+";
|
|
}
|
|
var os = localStorage.getItem("platform");
|
|
var options = {
|
|
body: ct + lang.lang_notf_new,
|
|
icon: localStorage.getItem("prof_" + acct_id)
|
|
};
|
|
if (os == "darwin") {
|
|
var n = new Notification('TheDesk:' + domain, options);
|
|
} else {
|
|
var nativeNotfOpt=['TheDesk:' + domain, ct + lang.lang_notf_new, localStorage.getItem("prof_" + acct_id)]
|
|
postMessage(["nativeNotf", nativeNotfOpt], "*")
|
|
}
|
|
|
|
}
|
|
if (localStorage.getItem("filter_" + acct_id) != "undefined") {
|
|
var mute = getFilterType(JSON.parse(localStorage.getItem("filter_" + acct_id)), "notif");
|
|
} else {
|
|
var mute = [];
|
|
}
|
|
if (obj.type != "follow") {
|
|
if (misskey) {
|
|
templete = templete + misskeyParse([obj], 'notf', acct_id, tlid, -1, mute);
|
|
} else {
|
|
templete = templete + parse([obj], 'notf', acct_id, tlid, -1, mute);
|
|
}
|
|
} else {
|
|
if (misskey) {
|
|
templete = templete + misskeyUserparse([obj], 'notf', acct_id, tlid, -1, mute);
|
|
} else {
|
|
templete = templete + userparse([obj.account], 'notf', acct_id, tlid, -1);
|
|
}
|
|
|
|
}
|
|
});
|
|
templete = templete + '<div class="hide notif-marker" data-maxid="' + max_id + '"></div>';
|
|
$("#timeline_" + tlid).html(templete);
|
|
$("#landing_" + tlid).hide();
|
|
jQuery("time.timeago").timeago();
|
|
}
|
|
$("#notf-box").addClass("fetched");
|
|
todc();
|
|
}
|
|
}
|
|
if (!misskey) {
|
|
if (localStorage.getItem("streaming_" + acct_id)) {
|
|
var wss = localStorage.getItem("streaming_" + acct_id)
|
|
} else {
|
|
var wss = "wss://" + domain
|
|
}
|
|
var start = wss + "/api/v1/streaming/?stream=user&access_token=" +
|
|
at;
|
|
} else {
|
|
var start = "wss://" + domain + "/?i=" +
|
|
at;
|
|
}
|
|
|
|
}
|
|
function notfCommon(acct_id, tlid, sys) {
|
|
todo("Notifications Loading...");
|
|
var native = localStorage.getItem("nativenotf");
|
|
var at = localStorage.getItem("acct_" + acct_id + "_at");
|
|
if (!native) {
|
|
native = "yes";
|
|
}
|
|
var domain = localStorage.getItem("domain_" + acct_id);
|
|
if (localStorage.getItem("mode_" + domain) == "misskey") {
|
|
var misskey = true;
|
|
var start = "https://" + domain + "/api/i/notifications";
|
|
var i = {
|
|
method: 'POST',
|
|
headers: {
|
|
'content-type': 'application/json',
|
|
},
|
|
body: JSON.stringify({
|
|
i: at
|
|
})
|
|
}
|
|
} else {
|
|
var misskey = false;
|
|
var start = "https://" + domain + "/api/v1/notifications";
|
|
var i = {
|
|
method: 'GET',
|
|
headers: {
|
|
'content-type': 'application/json',
|
|
'Authorization': 'Bearer ' + at
|
|
},
|
|
}
|
|
}
|
|
fetch(start, i).then(function (response) {
|
|
console.log("header to get param:" + response.headers.get('link'));
|
|
return response.json();
|
|
}).catch(function (error) {
|
|
todo(error);
|
|
console.error(error);
|
|
}).then(function (json) {
|
|
if (json[0]) {
|
|
var templete = "";
|
|
var lastnotf = localStorage.getItem("lastnotf_" + acct_id);
|
|
localStorage.setItem("lastnotf_" + acct_id, json[0].id);
|
|
Object.keys(json).forEach(function (key) {
|
|
var obj = json[key];
|
|
if (lastnotf == obj.id && key > 0 && native == "yes") {
|
|
var ct = key;
|
|
if (key > 14) {
|
|
ct = "15+";
|
|
}
|
|
var os = localStorage.getItem("platform");
|
|
var options = {
|
|
body: ct + lang.lang_notf_new,
|
|
icon: localStorage.getItem("prof_" + acct_id)
|
|
};
|
|
if (os == "darwin") {
|
|
var n = new Notification('TheDesk:' + domain, options);
|
|
} else {
|
|
var nativeNotfOpt=['TheDesk:' + domain, ct + lang.lang_notf_new, localStorage.getItem("prof_" + acct_id)]
|
|
postMessage(["nativeNotf", nativeNotfOpt], "*")
|
|
}
|
|
|
|
}
|
|
if (localStorage.getItem("filter_" + acct_id) != "undefined") {
|
|
var mute = getFilterType(JSON.parse(localStorage.getItem("filter_" + acct_id)), "notif");
|
|
} else {
|
|
var mute = [];
|
|
}
|
|
if (obj.type != "follow") {
|
|
if (misskey) {
|
|
templete = templete + misskeyParse([obj], 'notf', acct_id, 'notf', -1, mute);
|
|
} else {
|
|
templete = templete + parse([obj], 'notf', acct_id, 'notf', -1, mute);
|
|
}
|
|
} else {
|
|
if (misskey) {
|
|
templete = templete + misskeyUserparse([obj], 'notf', acct_id, 'notf', -1, mute);
|
|
} else {
|
|
templete = templete + userparse([obj.account], 'notf', acct_id, 'notf', -1);
|
|
}
|
|
|
|
}
|
|
});
|
|
$("div[data-notf=" + acct_id + "]").html(templete);
|
|
$("#landing_" + tlid).hide();
|
|
jQuery("time.timeago").timeago();
|
|
}
|
|
$("#notf-box").addClass("fetched");
|
|
todc();
|
|
notfWS(misskey, acct_id, tlid, domain, at)
|
|
});
|
|
|
|
}
|
|
function notfWS(misskey, acct_id, tlid, domain, at) {
|
|
if (!misskey) {
|
|
if (localStorage.getItem("streaming_" + acct_id)) {
|
|
var wss = localStorage.getItem("streaming_" + acct_id)
|
|
} else {
|
|
var wss = "wss://" + domain
|
|
}
|
|
var start = wss + "/api/v1/streaming/?stream=user&access_token=" +
|
|
at;
|
|
|
|
var wsid = websocketNotf.length;
|
|
websocketNotf[acct_id] = new WebSocket(start);
|
|
websocketNotf[acct_id].onopen = function (mess) {
|
|
console.table({ "acct_id": acct_id, "type": "Connect Streaming API(Notf)", "domain": domain, "message": [mess] })
|
|
$("i[data-notf=" + acct_id + "]").removeClass("red-text");
|
|
|
|
}
|
|
websocketNotf[acct_id].onmessage = function (mess) {
|
|
console.log(["Receive Streaming API(Notf):" + acct_id + "(" + domain + ")", JSON.parse(JSON.parse(mess.data).payload)]);
|
|
var popup = localStorage.getItem("popup");
|
|
if (!popup) {
|
|
popup = 0;
|
|
}
|
|
var obj = JSON.parse(JSON.parse(mess.data).payload);
|
|
var type = JSON.parse(mess.data).event;
|
|
if (type == "notification") {
|
|
var templete = "";
|
|
localStorage.setItem("lastnotf_" + acct_id, obj.id);
|
|
if (obj.type != "follow") {
|
|
templete = parse([obj], 'notf', acct_id, 'notf', popup);
|
|
} else {
|
|
templete = userparse([obj], 'notf', acct_id, 'notf', popup);
|
|
}
|
|
if (!$("div[data-notfIndv=" + acct_id + "_" + obj.id + "]").length) {
|
|
$("div[data-notf=" + acct_id + "]").prepend(templete);
|
|
$("div[data-const=notf_" + acct_id + "]").prepend(templete);
|
|
}
|
|
jQuery("time.timeago").timeago();
|
|
} else if (type == "delete") {
|
|
$("[toot-id=" + obj + "]").hide();
|
|
$("[toot-id=" + obj + "]").remove();
|
|
}
|
|
}
|
|
websocketNotf[acct_id].onerror = function (error) {
|
|
console.error('WebSocket Error ' + error);
|
|
notfWS(misskey, acct_id, tlid, domain, at)
|
|
};
|
|
}
|
|
}
|
|
//一定のスクロールで発火
|
|
function notfmore(tlid) {
|
|
console.log({ "status": "kicked", "status": moreloading });
|
|
var multi = localStorage.getItem("column");
|
|
var obj = JSON.parse(multi);
|
|
var acct_id = obj[tlid].domain;
|
|
if (!type) {
|
|
var type = obj[tlid].type;
|
|
} else {
|
|
var data;
|
|
}
|
|
var sid = $("#timeline_" + tlid + " .notif-marker").last().attr("data-maxid");
|
|
var at = localStorage.getItem("acct_" + acct_id + "_at");
|
|
var domain = localStorage.getItem("domain_" + acct_id);
|
|
if (sid && !moreloading) {
|
|
moreloading = true;
|
|
var httpreq = new XMLHttpRequest();
|
|
if (localStorage.getItem("mode_" + domain) == "misskey") {
|
|
var misskey = true;
|
|
var start = "https://" + domain + "/api/i/notifications";
|
|
httpreq.open(POST, start, true);
|
|
httpreq.setRequestHeader('Content-Type', 'application/json');
|
|
var body = JSON.stringify({
|
|
i: at,
|
|
untilID: sid
|
|
});
|
|
} else {
|
|
var misskey = false;
|
|
if (localStorage.getItem("exclude-" + tlid)) {
|
|
var exc = localStorage.getItem("exclude-" + tlid) + "&max_id=" + sid;
|
|
} else {
|
|
var exc = "?max_id=" + sid;
|
|
}
|
|
var start = "https://" + domain + "/api/v1/notifications" + exc;
|
|
httpreq.open("GET", start, true);
|
|
httpreq.setRequestHeader('Content-Type', 'application/json');
|
|
httpreq.setRequestHeader('Authorization', 'Bearer ' + at);
|
|
var body = "";
|
|
}
|
|
|
|
httpreq.responseType = "json";
|
|
httpreq.send(body);
|
|
httpreq.onreadystatechange = function () {
|
|
if (httpreq.readyState === 4) {
|
|
var json = httpreq.response;
|
|
console.log(["More notifications on " + tlid, json]);
|
|
var max_id = httpreq.getResponseHeader("link").match(/[?&]{1}max_id=([0-9]+)/)[1];
|
|
if (json[0]) {
|
|
var templete = "";
|
|
var lastnotf = localStorage.getItem("lastnotf_" + acct_id);
|
|
localStorage.setItem("lastnotf_" + acct_id, json[0].id);
|
|
Object.keys(json).forEach(function (key) {
|
|
var obj = json[key];
|
|
if (localStorage.getItem("filter_" + acct_id) != "undefined") {
|
|
var mute = getFilterType(JSON.parse(localStorage.getItem("filter_" + acct_id)), "notif");
|
|
} else {
|
|
var mute = [];
|
|
}
|
|
if (obj.type != "follow") {
|
|
if (misskey) {
|
|
templete = templete + misskeyParse([obj], 'notf', acct_id, 'notf', -1, mute);
|
|
} else {
|
|
templete = templete + parse([obj], 'notf', acct_id, 'notf', -1, mute);
|
|
}
|
|
} else {
|
|
if (misskey) {
|
|
templete = templete + misskeyUserparse([obj], 'notf', acct_id, 'notf', -1, mute);
|
|
} else {
|
|
templete = templete + userparse([obj.account], 'notf', acct_id, 'notf', -1);
|
|
}
|
|
|
|
}
|
|
});
|
|
moreloading = false;
|
|
templete = templete + '<div class="hide notif-marker" data-maxid="' + max_id + '"></div>';
|
|
$("#timeline_" + tlid).append(templete);
|
|
$("#landing_" + tlid).hide();
|
|
jQuery("time.timeago").timeago();
|
|
}
|
|
$("#notf-box").addClass("fetched");
|
|
todc();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//通知トグルボタン
|
|
function notfToggle(acct, tlid) {
|
|
if ($("#notf-box_" + tlid).hasClass("column-hide")) {
|
|
$("#notf-box_" + tlid).css("display", "block")
|
|
$("#notf-box_" + tlid).animate({
|
|
'height': '400px'
|
|
}, {
|
|
'duration': 300,
|
|
'complete': function () {
|
|
$("#notf-box_" + tlid).css("overflow-y", "scroll")
|
|
$("#notf-box_" + tlid).removeClass("column-hide")
|
|
}
|
|
});
|
|
} else {
|
|
$("#notf-box_" + tlid).css("overflow-y", "hidden")
|
|
$("#notf-box_" + tlid).animate({
|
|
'height': '0'
|
|
}, {
|
|
'duration': 300,
|
|
'complete': function () {
|
|
$("#notf-box_" + tlid).addClass("column-hide")
|
|
$("#notf-box_" + tlid).css("display", "none")
|
|
}
|
|
});
|
|
}
|
|
notfCanceler(acct)
|
|
}
|
|
function notfCanceler(acct) {
|
|
$(".notf-reply_" + acct).text(0);
|
|
localStorage.removeItem("notf-reply_" + acct)
|
|
$(".notf-reply_" + acct).addClass("hide");
|
|
$(".notf-fav_" + acct).text(0);
|
|
localStorage.removeItem("notf-fav_" + acct)
|
|
$(".notf-fav_" + acct).addClass("hide");
|
|
$(".notf-bt_" + acct).text(0);
|
|
localStorage.removeItem("notf-bt_" + acct)
|
|
$(".notf-bt_" + acct).addClass("hide");
|
|
$(".notf-follow_" + acct).text(0);
|
|
localStorage.removeItem("notf-follow_" + acct)
|
|
$(".notf-follow_" + acct).addClass("hide");
|
|
$(".notf-icon_" + acct).removeClass("red-text");
|
|
}
|
|
function allNotfRead() {
|
|
var multi = localStorage.getItem("multi");
|
|
if (multi) {
|
|
var obj = JSON.parse(multi);
|
|
Object.keys(obj).forEach(function (key) {
|
|
notfCanceler(key)
|
|
});
|
|
}
|
|
}
|
|
allNotfRead() |