//左下のメッセージ var todcTrigger = null function todo(mes) { clearInterval(todcTrigger) $('#message').text(mes) $('#message').fadeIn() todcTrigger = setTimeout(todc, 4000) } function todc() { $('#message').fadeOut() } //reverse function bottomReverse() { $('#bottom').toggleClass('reverse') $('.leftside').toggleClass('reverse') if ($('#bottom').hasClass('reverse')) { localStorage.removeItem('reverse') } else { localStorage.setItem('reverse', 'true') } } function tips(mode, custom) { postMessage(['sendSinmpleIpc', 'endmem'], '*') clearInterval(clockint) clearInterval(spotStart) if (mode == 'ver') { tipsToggle() $('#tips-text').html( '<img src="../../img/desk.png" width="20" onclick="todo(\'TheDesk is a nice client!: TheDesk ' + localStorage.getItem('ver') + ' git: ' + gitHash + '\')"> ' + localStorage.getItem('ver') + ' {' + gitHash.slice(0, 7) + '} [<i class="material-icons" style="font-size:1.2rem;top: 3px;position: relative;">supervisor_account</i><span id="persons">1+</span>]' ) localStorage.setItem('tips', 'ver') } else if (mode == 'clock') { tipsToggle() localStorage.setItem('tips', 'clock') clock() } else if (mode == 'memory') { tipsToggle() localStorage.setItem('tips', 'memory') startmem() } else if (mode == 'trend') { tipsToggle() localStorage.setItem('tips', 'trend') trendTagonTip() } else if (mode == 'spotify') { tipsToggle() localStorage.setItem('tips', 'spotify') spotifytips() } else if (mode == 'itunes') { tipsToggle() localStorage.setItem('tips', 'itunes') itunestips() } else if (mode == 'custom') { tipsToggle() localStorage.setItem('tips', `custom:${custom}`) execPlugin(custom, 'tips', null) } } //メモリ function startmem() { postMessage(['sendSinmpleIpc', 'startmem'], '*') } function renderMem(use, cpu, total, core, uptime) { let day = Math.floor(uptime / 60 / 60 / 24) let hour = Math.floor(uptime / 60 /60 % 24) if(hour < 10) hour = '0' + hour let min = Math.floor(uptime / 60 % 60) if(min < 10) min = '0' + min let sec = Math.floor(uptime % 60) if(sec < 10) sec = '0' + sec let time = `${day ? day + ' days ' : ''}${hour ? hour + ':' : ''}${min}:${sec}` //Intel cpu = cpu.replace('Intel(R)', '').replace('(TM)', '').replace(' CPU', '') //AMD cpu = cpu.replace('AMD ', '').replace(/\s[0-9]{1,3}-Core\sProcessor/, '') $('#tips-text').html( `${escapeHTML(cpu)} x ${core}<br />RAM: ${Math.floor(use / 1024 / 1024 / 102.4) / 10}/${Math.floor(total / 1024 / 1024 / 102.4) / 10}GB(${Math.floor((use / total) * 100)}%) UP:${time}` ) } //トレンドタグ function trendTagonTip() { $('.trendtag').remove() var domain = 'imastodon.net' var at = localStorage.getItem('acct_' + acct_id + '_at') var start = 'https://' + domain + '/api/v1/trend_tags' fetch(start, { method: 'GET', headers: { 'content-type': 'application/json', Authorization: 'Bearer ' + at } }) .then(function(response) { if (!response.ok) { response.text().then(function(text) { setLog(response.url, response.status, text) }) } return response.json() }) .catch(function(error) { todo(error) setLog(start, 'JSON', error) console.error(error) }) .then(function(json) { if (json) { var tags = '' json = json.score Object.keys(json).forEach(function(tag) { tags = tags + `<a onclick="tagShow('${tag}', this)" class="pointer"> #${escapeHTML(tag)} </a> <span class="hide" data-tag="${tag}" data-regTag="${tag.toLowerCase()}"> <a onclick="tagTL('tag','${tag}',false,'add')" class="pointer" title="#${tag}のタイムライン">TL</a> <a onclick="show();brInsert('#${tag}')" class="pointer" title="#${tag}でトゥート">Toot</a> </span><br>` }) $('#tips-text').html( '<div class="trendtag">トレンドタグ<i class="material-icons pointer" onclick="trendTagonTip()" style="font-size:12px">refresh</i>:<br>' + tags + '</div>' ) trendTagonTipInterval() } else { $('#tips-text').html('') } }) } //Spotify spotint = null function spotifytips() { if (spotint) clearInterval(spotint) var start = 'https://spotify.thedesk.top/current-playing?code=' + localStorage.getItem('spotify-token') var at = localStorage.getItem('spotify-token') if (at) { fetch(start, { method: 'GET', headers: { 'content-type': 'application/json' } }) .then(function(response) { if (!response.ok) { response.text().then(function(text) { setLog(response.url, response.status, text) }) } return response.json() }) .catch(function(error) { todo(error) setLog(start, 'JSON', error) console.error(error) }) .then(function(jsonRaw) { var code = jsonRaw.token localStorage.setItem('spotify-token', code) var json = jsonRaw.data var ms = json.progress_ms if(!ms) { tips('ver') return false } var last = 1000 - (ms % 1000) var item = json.item var img = item.album.images[0].url var artisttxt = '' for (i = 0; i < item.artists.length; i++) { if (i > 0) { artisttxt = artisttxt + ',' + item.artists[i].name } else { artisttxt = item.artists[0].name } } artisttxt = escapeHTML(artisttxt) sleep(last) var tms = item.duration_ms var per = (ms / item.duration_ms) * 100 ms = ms / 1000 tms = tms / 1000 var s = Math.round(ms) % 60 if (s < 10) { s = '0' + s } var m = (Math.round(ms) - (Math.round(ms) % 60)) / 60 var ts = Math.round(tms) % 60 if (ts < 10) { ts = '0' + ts } var tm = (Math.round(tms) - (Math.round(tms) % 60)) / 60 var html = ` <div id="spot-box"> <div id="spot-refresh"> <i class="material-icons pointer" onclick="spotifytips()" style="font-size:20px">refresh</i> <i class="material-icons pointer" onclick="nowplaying('spotify');show()" style="font-size:20px">send</i> </div> <div id="spot-cover"> <img src="${img}" id="spot-img" draggable="false"> </div> <div id="spot-name"> ${escapeHTML(item.name)} <span class="gray sml" id="spot-art">${artisttxt}</span> </div> <div id="spot-time"> <span id="spot-m">${m}</span>:<span id="spot-s">${s}</span>/${tm}:${ts}</span> </div> <div class="progress grey"> <div class="determinate spotify-prog grey lighten-2" style="width:${per}%" data-s="${Math.round(ms)}" data-total="${item.duration_ms}"> </div> </div> </div>` $('#tips-text').html(html) spotint = setInterval(spotStart, 1000) }) } else { Swal.fire({ type: 'info', text: lang.lang_spotify_acct }) tips('ver') return false } } function spotStart() { var total = $('.spotify-prog').attr('data-total') var s = $('.spotify-prog').attr('data-s') var news = s * 1 + 1 var per = (news * 100000) / total var ns = news % 60 var nm = (news - ns) / 60 if (ns < 10) { ns = '0' + ns } if (per >= 100) { clearInterval(spotStart) spotifytips() } else { $('#spot-m').text(nm) $('#spot-s').text(ns) } $('.spotify-prog').attr('data-s', news) $('.spotify-prog').css('width', per + '%') } function trendTagonTipInterval() { setTimeout(trendTagonTip, 6000000) } //時計 var clockint function clock() { var now = new Date() var last = 1000 - (now.getTime() % 1000) sleep(last) clockint = setInterval(clockStart, 1000) } function clockStart() { var nowTime = new Date() // 現在日時を得る var nowHour = nowTime.getHours() // 時を抜き出す if (nowHour < 10) { nowHour = '0' + nowHour } var nowMin = nowTime.getMinutes() // 分を抜き出す if (nowMin < 10) { nowMin = '0' + nowMin } var nowSec = nowTime.getSeconds() // 秒を抜き出す if (nowSec < 10) { nowSec = '0' + nowSec } var msg = nowTime.getFullYear() + '/' + (nowTime.getMonth() + 1) + '/' + nowTime.getDate() + '<span style="font-size:20px; font-family:Open Sans">' + nowHour + ':' + nowMin + ':' + nowSec + '</span>' $('#tips-text').html(msg) } function sleep(waitMsec) { var startMsec = new Date() while (new Date() - startMsec < waitMsec); } function tipsToggle() { $('#tips').toggleClass('hide') $('#tips-menu').toggleClass('hide') }