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,27 +1,27 @@
<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;)`,
}" }"
class="album-art image border" class="album-art image border"
></div> ></div>
<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>
</div> </div>
<div v-else id="artist"> <div v-else id="artist">
<span>{{ current.albumartist }}</span> <span>{{ current.albumartist }}</span>
</div> </div>
<div id="type"> <div id="type">
<span v-if="current.bitrate > 330" <span v-if="current.bitrate > 330"
>FLAC {{ current.bitrate }} Kbps</span >FLAC {{ current.bitrate }} Kbps</span
> >
<span v-else>MP3 | {{ current.bitrate }} Kbps</span> <span v-else>MP3 | {{ current.bitrate }} Kbps</span>
</div> </div>
@ -29,7 +29,7 @@
</div> </div>
<div class="progress"> <div class="progress">
<div class="prog"> <div class="prog">
<Progress /> <Progress/>
</div> </div>
</div> </div>
<div class="c-wrapper border rounded"> <div class="c-wrapper border rounded">
@ -38,7 +38,7 @@
<div class="image"></div> <div class="image"></div>
<div class="image"></div> <div class="image"></div>
</div> </div>
<HotKeys /> <HotKeys/>
<div class="fav"> <div class="fav">
<div class="image"></div> <div class="image"></div>
<div class="image"></div> <div class="image"></div>
@ -50,7 +50,7 @@
<script> <script>
import playAudio from "@/composables/playAudio.js"; import playAudio from "@/composables/playAudio.js";
import { ref } from "@vue/reactivity"; import {ref} from "@vue/reactivity";
import perks from "../../composables/perks.js"; import perks from "../../composables/perks.js";
import HotKeys from "../shared/HotKeys.vue"; import HotKeys from "../shared/HotKeys.vue";
import Progress from "../shared/Progress.vue"; import Progress from "../shared/Progress.vue";
@ -61,13 +61,15 @@ export default {
const putCommas = perks.putCommas; const putCommas = perks.putCommas;
const pos = playAudio.pos; const pos = playAudio.pos;
const { playNext } = playAudio; const {playNext} = playAudio;
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,9 +79,10 @@ export default {
pos, pos,
seek, seek,
isPlaying, isPlaying,
formatSeconds: perks.formatSeconds,
}; };
}, },
components: { Progress, HotKeys }, components: {Progress, HotKeys},
}; };
</script> </script>

View File

@ -2,46 +2,46 @@
<div class="right-search border"> <div class="right-search border">
<div> <div>
<div class="input"> <div class="input">
<Loader /> <Loader/>
<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" v-model="query"
@keyup.backspace="removeLastFilter" placeholder="find your music"
placeholder="find your music" type="text"
v-model="query" @keyup.backspace="removeLastFilter"
/> />
<div class="search-icon image"></div> <div class="search-icon image"></div>
</div> </div>
</div> </div>
<div class="separator no-border"></div> <div class="separator no-border"></div>
<Options @addFilter="addFilter" /> <Options @addFilter="addFilter"/>
</div> </div>
<div class="scrollable"> <div class="scrollable">
<TracksGrid <TracksGrid
:tracks="tracks.tracks" v-if="tracks.tracks.length"
:more="tracks.more" :more="tracks.more"
v-if="tracks.tracks.length" :tracks="tracks.tracks"
/> />
<AlbumGrid <AlbumGrid
v-if="albums.albums.length" v-if="albums.albums.length"
:albums="albums.albums" :albums="albums.albums"
:more="albums.more" :more="albums.more"
/> />
<div class="separator no-border"></div> <div class="separator no-border"></div>
<ArtistGrid <ArtistGrid
v-if="artists.artists.length" v-if="artists.artists.length"
:artists="artists.artists" :artists="artists.artists"
: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>
@ -55,9 +55,9 @@
</template> </template>
<script> <script>
import { reactive, ref } from "@vue/reactivity"; import {reactive, ref} from "@vue/reactivity";
import { watch } from "@vue/runtime-core"; import {watch} from "@vue/runtime-core";
import state from "@/composables/state.js"; import state from "@/composables/state.js";
import searchMusic from "@/composables/searchMusic.js"; import searchMusic from "@/composables/searchMusic.js";
import useDebouncedRef from "@/composables/useDebouncedRef"; import useDebouncedRef from "@/composables/useDebouncedRef";
@ -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,