//Integrated TL function mixtl(acct_id, tlid, type, delc, voice) { localStorage.removeItem("morelock") localStorage.setItem("now", type); todo("Integrated TL Loading...(Local)"); //まずLocal var domain = localStorage.getItem("domain_" + acct_id); var at = localStorage.getItem("acct_" + acct_id + "_at"); var start = "https://" + domain + "/api/v1/timelines/public?local=true"; fetch(start, { method: 'GET', headers: { 'content-type': 'application/json', 'Authorization': 'Bearer ' + at }, }).then(function (response) { return response.json(); }).catch(function (error) { todo(error); console.error(error); }).then(function (jsonL) { var start = "https://" + domain + "/api/v1/timelines/home"; fetch(start, { method: 'GET', headers: { 'content-type': 'application/json', 'Authorization': 'Bearer ' + at }, }).then(function (response) { return response.json(); }).catch(function (error) { todo(error); console.error(error); }).then(function (jsonH) { var homearr = []; var timeline = jsonL.concat(jsonH); timeline.sort(function (a, b) { if (date(a.created_at, "unix") >= date(b.created_at, "unix")) return -1; if (date(a.created_at, "unix") < date(b.created_at, "unix")) return 1; return 0; }); if (type == "integrated") { timeline.splice(20); } var templete = ""; if (localStorage.getItem("filter_" + acct_id) != "undefined") { var mute = getFilterType(JSON.parse(localStorage.getItem("filter_" + acct_id)), "mix"); } else { var mute = []; } Object.keys(timeline).forEach(function (key) { var pkey = key * 1 + 1; if (pkey < timeline.length) { if (date(timeline[key].created_at, "unix") != date(timeline[pkey].created_at, "unix")) { if (type == "integrated") { templete = templete + parse([timeline[key]], '', acct_id, tlid, "", mute, "mix"); } else if (type == "plus") { if (timeline[key].account.acct == timeline[key].account.username) { templete = templete + parse([timeline[key]], '', acct_id, tlid, "", mute, "plus"); } } } } }); $("#landing_" + tlid).hide(); $("#timeline_" + tlid).html(templete); mixre(acct_id, tlid, type, mute, delc, voice); additional(acct_id, tlid); jQuery("time.timeago").timeago(); todc(); }); }); } //Streamingに接続 function mixre(acct_id, tlid, TLtype, mute, delc, voice, mode) { var domain = localStorage.getItem("domain_" + acct_id); var at = localStorage.getItem("acct_" + acct_id + "_at"); if (localStorage.getItem("streaming_" + acct_id)) { var wss = localStorage.getItem("streaming_" + acct_id) } else { var wss = "wss://" + domain } var startHome = wss + "/api/v1/streaming/?stream=user&access_token=" + at; var startLocal = wss + "/api/v1/streaming/?stream=public:local&access_token=" + at; var wshid = websocketHome.length; var wslid = websocketLocal.length; websocketHome[wshid] = new WebSocket(startHome); websocketLocal[wslid] = new WebSocket(startLocal); websocketHome[wshid].onopen = function (mess) { localStorage.setItem("wssH_" + tlid, wshid); console.table({ "tlid": tlid, "type": "Connect Streaming API(Integrated:Home)", "domain": domain, "message": mess }) $("#notice_icon_" + tlid).removeClass("red-text"); } websocketLocal[wslid].onopen = function (mess) { localStorage.setItem("wssL_" + tlid, wslid); console.table({ "tlid": tlid, "type": "Connect Streaming API(Integrated:Local)", "domain": domain, "message": mess }) $("#notice_icon_" + tlid).removeClass("red-text"); } websocketLocal[wslid].onmessage = function (mess) { console.log(["Receive Streaming API:(Integrated:Local)", obj]); var obj = JSON.parse(JSON.parse(mess.data).payload); var type = JSON.parse(mess.data).event; if (type == "delete") { if (delc == "true") { $("#timeline_" + tlid + " [toot-id=" + JSON.parse(mess.data).payload + "]").addClass("emphasized"); $("#timeline_" + tlid + " [toot-id=" + JSON.parse(mess.data).payload + "]").addClass("by_delcatch"); } else { $("[toot-id=" + JSON.parse(mess.data).payload + "]").hide(); $("[toot-id=" + JSON.parse(mess.data).payload + "]").remove(); } } else if (type == "update") { var templete = parse([obj], '', acct_id, tlid, "", mute); if ($("#timeline_" + tlid + " [toot-id=" + obj.id + "]").length < 1) { if (voice) { say(obj.content) } var templete = parse([obj], type, acct_id, tlid, "", mute, "mix"); var pool = localStorage.getItem("pool_" + tlid); if (pool) { pool = templete + pool; } else { pool = templete } localStorage.setItem("pool_" + tlid, pool); scrollck(); additional(acct_id, tlid); jQuery("time.timeago").timeago(); } else { todo("二重取得発生中"); } } } websocketHome[wshid].onmessage = function (mess) { console.log(["Receive Streaming API:(Integrated:Home)", obj]); var obj = JSON.parse(JSON.parse(mess.data).payload); var type = JSON.parse(mess.data).event; if (type == "delete") { if (del > 10) { reconnector(tlid, type, acct_id, data) } else { localStorage.setItem("delete", del * 1 + 1) } if (delc == "true") { $("[toot-id=" + JSON.parse(mess.data).payload + "]").addClass("emphasized"); $("[toot-id=" + JSON.parse(mess.data).payload + "]").addClass("by_delcatch"); } else { $("[toot-id=" + JSON.parse(mess.data).payload + "]").hide(); $("[toot-id=" + JSON.parse(mess.data).payload + "]").remove(); } } else if (type == "update") { localStorage.removeItem("delete"); if (TLtype == "integrated") { var templete = parse([obj], '', acct_id, tlid); } else if (TLtype == "plus") { if (obj.account.acct == obj.account.username) { var templete = parse([obj], '', acct_id, tlid, "", mute, "mix"); } else { var templete = ""; } } if ($("#timeline_" + tlid + " [toot-id=" + obj.id + "]").length < 1) { if (voice) { say(obj.content) } var templete = parse([obj], type, acct_id, tlid, "", mute, "mix"); var pool = localStorage.getItem("pool_" + tlid); if (pool) { pool = templete + pool; } else { pool = templete } localStorage.setItem("pool_" + tlid, pool); scrollck(); additional(acct_id, tlid); jQuery("time.timeago").timeago(); } else { todo("二重取得発生中"); } } } websocketLocal[wslid].onerror = function (error) { console.error('WebSocketLocal Error') console.error(error); if (mode == "error") { $("#notice_icon_" + tlid).addClass("red-text"); todo('WebSocket Error ' + error); } else { var errorct = localStorage.getItem("wserror_" + tlid) * 1 + 1; localStorage.setItem("wserror_" + tlid, errorct); if (errorct < 3) { reconnector(tlid, TLtype, acct_id, "", "error"); } } }; websocketLocal[wslid].onclose = function () { console.warn('WebSocketLocal Closing:' + tlid); if (mode == "error") { $("#notice_icon_" + tlid).addClass("red-text"); todo('WebSocket Closed'); } else { var errorct = localStorage.getItem("wserror_" + tlid) * 1 + 1; localStorage.setItem("wserror_" + tlid, errorct); if (errorct < 3) { reconnector(tlid, TLtype, acct_id, "", "error"); } } }; websocketHome[wshid].onerror = function (error) { console.error(['WebSocketHome Error', error]) if (mode == "error") { $("#notice_icon_" + tlid).addClass("red-text"); todo('WebSocket Error ' + error); } else { var errorct = localStorage.getItem("wserror_" + tlid) * 1 + 1; localStorage.setItem("wserror_" + tlid, errorct); if (errorct < 3) { reconnector(tlid, TLtype, acct_id, "", "error"); } } }; websocketHome[wshid].onclose = function () { console.warn('WebSocketHome Closing:' + tlid); if (mode == "error") { $("#notice_icon_" + tlid).addClass("red-text"); todo('WebSocket Closed'); } else { var errorct = localStorage.getItem("wserror_" + tlid) * 1 + 1; localStorage.setItem("wserror_" + tlid, errorct); if (errorct < 3) { reconnector(tlid, TLtype, acct_id, "", "error"); } } }; } //ある程度のスクロールで発火 function mixmore(tlid, type) { var multi = localStorage.getItem("column"); var obj = JSON.parse(multi); var acct_id = obj[tlid].domain; moreloading = true; todo("Integrated TL MoreLoading...(Local)"); var domain = localStorage.getItem("domain_" + acct_id); var at = localStorage.getItem("acct_" + acct_id + "_at"); var sid = $("#timeline_" + tlid + " .cvo").last().attr("unique-id"); var start = "https://" + domain + "/api/v1/timelines/public?local=true&max_id=" + sid; fetch(start, { method: 'GET', headers: { 'content-type': 'application/json', 'Authorization': 'Bearer ' + at }, }).then(function (response) { return response.json(); }).catch(function (error) { todo(error); console.error(error); }).then(function (jsonL) { var start = "https://" + domain + "/api/v1/timelines/home?max_id=" + sid; fetch(start, { method: 'GET', headers: { 'content-type': 'application/json', 'Authorization': 'Bearer ' + at }, }).then(function (response) { return response.json(); }).catch(function (error) { todo(error); console.error(error); }).then(function (jsonH) { var homearr = []; var timeline = jsonL.concat(jsonH); timeline.sort(function (a, b) { if (date(a.created_at, "unix") > date(b.created_at, "unix")) return -1; if (date(a.created_at, "unix") < date(b.created_at, "unix")) return 1; return 0; }); timeline.splice(20); var templete = ""; Object.keys(timeline).forEach(function (key) { var pkey = key * 1 + 1; if (pkey < 20) { if (date(timeline[key].created_at, "unix") != date(timeline[pkey].created_at, "unix")) { if (localStorage.getItem("filter_" + acct_id) != "undefined") { var mute = getFilterType(JSON.parse(localStorage.getItem("filter_" + acct_id)), "mix"); } else { var mute = []; } if (type == "integrated") { templete = templete + parse([timeline[key]], '', acct_id, tlid, "", mute, "mix"); } else if (type == "plus") { if (timeline[key].account.acct == timeline[key].account.username) { templete = templete + parse([timeline[key]], '', acct_id, tlid, "", mute, "mix"); } } } } }); $("#timeline_" + tlid).append(templete); additional(acct_id, tlid); jQuery("time.timeago").timeago(); moreloading = false; todc(); }); }); }