format seconds into hh:mm:ss

This commit is contained in:
geoffrey45 2022-02-09 22:15:46 +03:00
parent 214ae82344
commit e7741937a3
6 changed files with 79 additions and 48 deletions

View File

@ -2,10 +2,10 @@
<div class="album-h"> <div class="album-h">
<div class="a-header rounded card-dark border"> <div class="a-header rounded card-dark border">
<div <div
class="art rounded border"
:style="{ :style="{
backgroundImage: `url(&quot;${album_info.image}&quot;)`, backgroundImage: `url(&quot;${album_info.image}&quot;)`,
}" }"
class="art rounded border"
></div> ></div>
<div class="info"> <div class="info">
<div class="top"> <div class="top">
@ -28,10 +28,10 @@
<div class="circle circular"></div> <div class="circle circular"></div>
<div class="rect rounded"></div> <div class="rect rounded"></div>
<div <div
class="avatar image"
:style="{ :style="{
backgroundImage: `url(&quot;${album_info.artist_image}&quot;)`, backgroundImage: `url(&quot;${album_info.artist_image}&quot;)`,
}" }"
class="avatar image"
></div> ></div>
</div> </div>
</div> </div>
@ -47,6 +47,7 @@ export default {
function playAlbum() { function playAlbum() {
perks.updateQueue(state.album_song_list.value[0], "album"); perks.updateQueue(state.album_song_list.value[0], "album");
} }
return { return {
playAlbum, playAlbum,
}; };
@ -138,6 +139,7 @@ export default {
} }
} }
} }
.a-header { .a-header {
position: relative; position: relative;
overflow: hidden; overflow: hidden;
@ -181,6 +183,7 @@ export default {
.stats { .stats {
font-weight: bold; font-weight: bold;
} }
.play { .play {
height: 2.5rem; height: 2.5rem;
width: 6rem; width: 6rem;

View File

@ -35,7 +35,9 @@ const tabs = {
queue: "queue", queue: "queue",
}; };
const current_tab = ref(tabs.queue); const default_tab = tabs.home;
const current_tab = ref(default_tab);
function changeTab(tab) { function changeTab(tab) {
current_tab.value = tab; current_tab.value = tab;

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="now-playing border shadow-lg"> <div class="now-playing border shadow-lg">
<div class="art-tags"> <div class="art-tags">
<div class="duration">{{ current.length }}</div> <div class="duration">{{ formatSeconds(current.length) }}</div>
<div <div
:style="{ :style="{
backgroundImage: `url(&quot;${current.image}&quot;)`, backgroundImage: `url(&quot;${current.image}&quot;)`,
@ -11,7 +11,7 @@
<div class="t-a"> <div class="t-a">
<p id="title" class="ellipsis">{{ current.title }}</p> <p id="title" class="ellipsis">{{ current.title }}</p>
<div class="separator no-border"></div> <div class="separator no-border"></div>
<div v-if="current.artists[0] != ''" id="artist" class="ellip"> <div v-if="current.artists[0] !== ''" id="artist" class="ellip">
<span v-for="artist in putCommas(current.artists)" :key="artist">{{ <span v-for="artist in putCommas(current.artists)" :key="artist">{{
artist artist
}}</span> }}</span>
@ -65,9 +65,11 @@ export default {
const {playPrev} = playAudio; const {playPrev} = playAudio;
const {playPause} = playAudio; const {playPause} = playAudio;
const isPlaying = playAudio.playing; const isPlaying = playAudio.playing;
const seek = () => { const seek = () => {
playAudio.seek(document.getElementById("progress").value); playAudio.seek(document.getElementById("progress").value);
}; };
return { return {
current, current,
putCommas, putCommas,
@ -77,6 +79,7 @@ export default {
pos, pos,
seek, seek,
isPlaying, isPlaying,
formatSeconds: perks.formatSeconds,
}; };
}, },
components: {Progress, HotKeys}, components: {Progress, HotKeys},

View File

@ -6,11 +6,11 @@
<Filters :filters="filters" @removeFilter="removeFilter"/> <Filters :filters="filters" @removeFilter="removeFilter"/>
<div class="input-loader border"> <div class="input-loader border">
<input <input
type="text"
id="search" id="search"
@keyup.backspace="removeLastFilter"
placeholder="find your music"
v-model="query" v-model="query"
placeholder="find your music"
type="text"
@keyup.backspace="removeLastFilter"
/> />
<div class="search-icon image"></div> <div class="search-icon image"></div>
</div> </div>
@ -20,9 +20,9 @@
</div> </div>
<div class="scrollable"> <div class="scrollable">
<TracksGrid <TracksGrid
:tracks="tracks.tracks"
:more="tracks.more"
v-if="tracks.tracks.length" v-if="tracks.tracks.length"
:more="tracks.more"
:tracks="tracks.tracks"
/> />
<AlbumGrid <AlbumGrid
v-if="albums.albums.length" v-if="albums.albums.length"
@ -36,12 +36,12 @@
:more="artists.more" :more="artists.more"
/> />
<div <div
class="no-res"
v-if=" v-if="
!artists.artists.length && !artists.artists.length &&
!tracks.tracks.length && !tracks.tracks.length &&
!albums.albums.length && query.length != 0 !albums.albums.length && query.length != 0
" "
class="no-res"
> >
<div class="no-res-text"> <div class="no-res-text">
No results for <span class="highlight rounded">{{ query }}</span> No results for <span class="highlight rounded">{{ query }}</span>
@ -129,7 +129,8 @@ export default {
tracks.tracks = []; tracks.tracks = [];
return; return;
}; }
;
searchMusic(new_query).then((res) => { searchMusic(new_query).then((res) => {
albums.albums = res.albums.albums; albums.albums = res.albums.albums;

View File

@ -39,7 +39,7 @@
{{ song.album }} {{ song.album }}
</div> </div>
</td> </td>
<td class="song-duration">{{ song.length }}</td> <td class="song-duration">{{ formatSeconds(song.length) }}</td>
</tr> </tr>
</template> </template>
@ -66,6 +66,7 @@ export default {
emitLoadAlbum, emitLoadAlbum,
is_playing: state.is_playing, is_playing: state.is_playing,
current: state.current, current: state.current,
formatSeconds: perks.formatSeconds,
}; };
}, },
}; };

View File

@ -4,7 +4,6 @@ import media from "./mediaNotification.js";
import playAudio from "./playAudio.js"; import playAudio from "./playAudio.js";
import state from "./state.js"; import state from "./state.js";
const current = ref(state.current); const current = ref(state.current);
const next = ref({ const next = ref({
@ -37,7 +36,9 @@ const putCommas = (artists) => {
}; };
function updateNext(song_) { function updateNext(song_) {
const index = state.queue.value.findIndex((item) => item.track_id === song_.track_id); const index = state.queue.value.findIndex(
(item) => item.track_id === song_.track_id
);
if (index == queue.value.length - 1) { if (index == queue.value.length - 1) {
next.value = queue.value[0]; next.value = queue.value[0];
@ -50,7 +51,9 @@ function updateNext(song_) {
} }
function updatePrev(song) { function updatePrev(song) {
const index = state.queue.value.findIndex((item) => item.track_id === song.track_id); const index = state.queue.value.findIndex(
(item) => item.track_id === song.track_id
);
if (index == 0) { if (index == 0) {
prev.value = queue.value[queue.value.length - 1]; prev.value = queue.value[queue.value.length - 1];
@ -131,7 +134,6 @@ function focusSearchBox() {
setTimeout(() => { setTimeout(() => {
watch(current, (new_current) => { watch(current, (new_current) => {
media.showMediaNotif(); media.showMediaNotif();
updateNext(new_current); updateNext(new_current);
@ -210,11 +212,30 @@ window.addEventListener("keyup", () => {
key_down_fired = false; key_down_fired = false;
}); });
function formatSeconds(seconds) {
const date = new Date(seconds * 1000);
const hh = date.getUTCHours();
const mm = date.getUTCMinutes();
const ss = date.getUTCSeconds();
const _hh = hh < 10 ? `0${hh}` : hh;
const _mm = mm < 10 ? `0${mm}` : mm;
const _ss = ss < 10 ? `0${ss}` : ss;
if (hh > 0) {
return `${_hh}:${_mm}:${_ss}`;
} else {
return `${_mm}:${_ss}`;
}
}
export default { export default {
putCommas, putCommas,
readQueue, readQueue,
focusCurrent, focusCurrent,
updateQueue, updateQueue,
formatSeconds,
current, current,
queue, queue,
next, next,