thedesk/app/js/ui/tips.js
2021-04-15 05:02:14 +09:00

304 lines
8.1 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//左下のメッセージ
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}')" 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')
}