enable album nav play button

This commit is contained in:
geoffrey45
2022-06-09 11:52:26 +03:00
parent 843a80f4a3
commit e48dca4672
8 changed files with 92 additions and 50 deletions
+2 -1
View File
@@ -25,7 +25,7 @@
{{ formatSeconds(album.duration, true) }} {{ album.date }}
{{ album.artist }}
</div>
<PlayBtnRect :source="playSources.album" />
<PlayBtnRect :source="playSources.album" :store="useAlbumStore" />
</div>
</div>
</div>
@@ -41,6 +41,7 @@ import { AlbumInfo } from "../../interfaces";
import PlayBtnRect from "../shared/PlayBtnRect.vue";
import useVisibility from "@/composables/useVisibility";
import useNavStore from "@/stores/nav";
import useAlbumStore from "@/stores/album";
defineProps<{
album: AlbumInfo;
+1 -1
View File
@@ -6,7 +6,7 @@
</div>
<div class="info">
<Album v-show="$route.name == Routes.album && nav.showPlay" />
<Album v-show="$route.name == Routes.album && !nav.showPlay" />
<Playlists v-show="$route.name == Routes.playlists" />
<Folder v-show="$route.name == Routes.folder" :subPaths="subPaths" />
</div>
+2 -2
View File
@@ -1,6 +1,6 @@
<template>
<div class="title albumnavtitle" v-motion-slide-from-left-100>
<PlayBtn />
<PlayBtn :source="playSources.album" :store="useAlbumStore" />
<div class="ellip">
{{ store.info.title }}
</div>
@@ -10,7 +10,7 @@
<script setup lang="ts">
import useAlbumStore from "@/stores/album";
import PlayBtn from "@/components/shared/PlayBtn.vue";
import { playSources } from "@/composables/enums";
const store = useAlbumStore();
</script>
+15 -5
View File
@@ -1,11 +1,21 @@
<template>
<div class="play-btn rounded shadow-sm" @click="playThis"></div>
<div
class="play-btn rounded shadow-sm"
@click="usePlayFrom(source, useQStore, store)"
></div>
</template>
<script setup lang="ts">
function playThis(e: Event) {
e.preventDefault();
e.stopImmediatePropagation();
}
import { playSources } from "@/composables/enums";
import useAlbumStore from "@/stores/album";
import usePlaylistStore from "@/stores/p.ptracks";
import usePlayFrom from "@/composables/usePlayFrom";
import useQStore from "@/stores/queue";
defineProps<{
source: playSources;
store: typeof useAlbumStore | typeof usePlaylistStore;
}>();
</script>
<style lang="scss">
.play-btn {
+16 -35
View File
@@ -1,48 +1,29 @@
<template>
<div class="playbtnrect rounded" @click="play">
<div
class="playbtnrect rounded"
@click="usePlayFrom(source, useQStore, store)"
>
<div class="icon image"></div>
<div class="text">Play</div>
</div>
</template>
<script setup lang="ts">
import { playSources } from "../../composables/enums";
import { playSources } from "@/composables/enums";
import usePlayFrom from "@/composables/usePlayFrom";
import useQStore from "@/stores/queue";
import useFStore from "@/stores/folder";
import useAStore from "@/stores/album";
import usePStore from "@/stores/p.ptracks";
import useQStore from "../../stores/queue";
import useFStore from "../../stores/folder";
import useAStore from "../../stores/album";
import usePStore from "../../stores/p.ptracks";
const props = defineProps<{
defineProps<{
source: playSources;
store:
| typeof useQStore
| typeof useFStore
| typeof useAStore
| typeof usePStore;
}>();
const queue = useQStore();
const folder = useFStore();
const album = useAStore();
const playlist = usePStore();
function play() {
switch (props.source) {
// check which route the play request come from
case playSources.folder:
queue.playFromFolder(folder.path, folder.tracks);
queue.play(queue.tracks[0]);
break;
case playSources.album:
queue.playFromAlbum(album.info.title, album.info.artist, album.tracks);
queue.play(album.tracks[0]);
break;
case playSources.playlist:
queue.playFromPlaylist(
playlist.info.name,
playlist.info.playlistid,
playlist.tracks
);
queue.play(playlist.tracks[0]);
break;
}
}
</script>
<style lang="scss">
+51
View File
@@ -0,0 +1,51 @@
import { playSources } from "@/composables/enums";
import useQStore from "@/stores/queue";
import useFStore from "@/stores/folder";
import useAStore from "@/stores/album";
import usePStore from "@/stores/p.ptracks";
const queue = useQStore;
const folder = useFStore;
const album = useAStore;
const playlist = usePStore;
type store = typeof queue | typeof folder | typeof album | typeof playlist;
export default function play(
source: playSources,
aqueue: typeof queue,
store: store
) {
const useQueue = aqueue();
switch (source) {
// check which route the play request come from
case playSources.folder:
store = store as typeof folder;
useQueue.playFromFolder(store().path, store().tracks);
useQueue.play(store().tracks[0]);
break;
case playSources.album:
store = store as typeof album;
useQueue.playFromAlbum(
store().info.title,
store().info.artist,
store().tracks
);
useQueue.play(store().tracks[0]);
break;
case playSources.playlist:
store = store as typeof playlist;
useQueue.playFromPlaylist(
store().info.name,
store().info.playlistid,
store().tracks
);
useQueue.play(store().tracks[0]);
break;
}
}
+2 -2
View File
@@ -4,7 +4,7 @@ import { Ref, watch } from "vue";
export default function useVisibility(
elem: Ref<HTMLElement>,
callback: () => void
callback: (state: boolean) => void
) {
const visible = ref(false);
@@ -15,7 +15,7 @@ export default function useVisibility(
watch(
() => visible.value,
(newVal) => {
callback();
callback(newVal);
}
);
}
+3 -4
View File
@@ -2,12 +2,11 @@ import { defineStore } from "pinia";
export default defineStore("navmanagement", {
state: () => ({
showPlay: true,
showPlay: false,
}),
actions: {
toggleShowPlay() {
this.showPlay = !this.showPlay;
console.log(this.showPlay);
toggleShowPlay(state: boolean) {
this.showPlay = state;
},
},
});