|
@@ -25,6 +25,8 @@ import { useUserAuthStore } from "@/stores/userAuth";
|
|
|
|
|
|
import Modal from "@/components/Modal.vue";
|
|
|
|
|
|
+const TAG = "[EDITSONG]";
|
|
|
+
|
|
|
const FloatingBox = defineAsyncComponent(
|
|
|
() => import("@/components/FloatingBox.vue")
|
|
|
);
|
|
@@ -69,7 +71,9 @@ const {
|
|
|
soundcloudPause,
|
|
|
soundcloudSetVolume,
|
|
|
soundcloudGetPosition,
|
|
|
+ soundcloudGetDuration,
|
|
|
soundcloudGetIsPaused,
|
|
|
+ soundcloudGetTrackId,
|
|
|
soundcloudBindListener,
|
|
|
soundcloudDestroy,
|
|
|
soundcloudUnload
|
|
@@ -151,7 +155,7 @@ const thumbnailWidth = ref(null);
|
|
|
const thumbnailHeight = ref(null);
|
|
|
const thumbnailLoadError = ref(false);
|
|
|
const tabs = ref([]);
|
|
|
-const playerReady = ref(true);
|
|
|
+const youtubePlayerReady = ref(true);
|
|
|
const interval = ref();
|
|
|
const saveButtonRefs = ref([]);
|
|
|
const canvasElement = ref();
|
|
@@ -195,7 +199,6 @@ const currentSongFlagged = computed(
|
|
|
const {
|
|
|
editSong,
|
|
|
stopVideo,
|
|
|
- hardStopVideo,
|
|
|
loadVideoById,
|
|
|
pauseVideo,
|
|
|
setSong,
|
|
@@ -209,8 +212,8 @@ const { updateMediaModalPlayingAudio } = stationStore;
|
|
|
const unloadSong = (_mediaSource, songId?) => {
|
|
|
songDataLoaded.value = false;
|
|
|
songDeleted.value = false;
|
|
|
- stopVideo();
|
|
|
pauseVideo(true);
|
|
|
+ playerHardStop();
|
|
|
|
|
|
resetSong(_mediaSource);
|
|
|
thumbnailNotSquare.value = false;
|
|
@@ -335,7 +338,13 @@ const { inputs, unsavedChanges, save, setValue, setOriginalValue } = useForm(
|
|
|
mediaSource: {
|
|
|
value: "",
|
|
|
validate: value => {
|
|
|
+ if (currentSongMediaType.value === "none")
|
|
|
+ return "Media source type is not valid.";
|
|
|
+ if (!currentSongMediaValue.value)
|
|
|
+ return "Media source value is not valid.";
|
|
|
+
|
|
|
if (
|
|
|
+ currentSongMediaType.value === "youtube" &&
|
|
|
!newSong.value &&
|
|
|
youtubeError.value &&
|
|
|
inputs.value.mediaSource.originalValue !== value
|
|
@@ -479,6 +488,53 @@ const currentSongMediaValue = computed(() => {
|
|
|
return null;
|
|
|
return inputs.value.mediaSource.value.split(":")[1];
|
|
|
});
|
|
|
+const getCurrentPlayerTime = () =>
|
|
|
+ new Promise<number>((resolve, reject) => {
|
|
|
+ if (
|
|
|
+ currentSongMediaType.value === "youtube" &&
|
|
|
+ youtubePlayerReady.value
|
|
|
+ ) {
|
|
|
+ resolve(
|
|
|
+ video.value.player && video.value.player.getCurrentTime
|
|
|
+ ? video.value.player.getCurrentTime()
|
|
|
+ : 0
|
|
|
+ );
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (currentSongMediaType.value === "soundcloud") {
|
|
|
+ soundcloudGetPosition(position => {
|
|
|
+ resolve(position / 1000);
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ resolve(0);
|
|
|
+ });
|
|
|
+
|
|
|
+const getPlayerDuration = () =>
|
|
|
+ new Promise<number>((resolve, reject) => {
|
|
|
+ if (
|
|
|
+ currentSongMediaType.value === "youtube" &&
|
|
|
+ youtubePlayerReady.value
|
|
|
+ ) {
|
|
|
+ resolve(
|
|
|
+ video.value.player && video.value.player.getDuration
|
|
|
+ ? video.value.player.getDuration()
|
|
|
+ : 0
|
|
|
+ );
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (currentSongMediaType.value === "soundcloud") {
|
|
|
+ soundcloudGetDuration(duration => {
|
|
|
+ resolve(duration / 1000);
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ resolve(0);
|
|
|
+ });
|
|
|
|
|
|
const showTab = payload => {
|
|
|
if (tabs.value[`${payload}-tab`])
|
|
@@ -640,7 +696,7 @@ const isYoutubeThumbnail = computed(
|
|
|
inputs.value.thumbnail.value.lastIndexOf("img.youtube.com") !== -1)
|
|
|
);
|
|
|
|
|
|
-const drawCanvas = () => {
|
|
|
+const drawCanvas = async () => {
|
|
|
if (!songDataLoaded.value || !canvasElement.value) return;
|
|
|
const ctx = canvasElement.value.getContext("2d");
|
|
|
|
|
@@ -652,10 +708,7 @@ const drawCanvas = () => {
|
|
|
|
|
|
const width = 530;
|
|
|
|
|
|
- const currentTime =
|
|
|
- video.value.player && video.value.player.getCurrentTime
|
|
|
- ? video.value.player.getCurrentTime()
|
|
|
- : 0;
|
|
|
+ const currentTime = await getCurrentPlayerTime();
|
|
|
|
|
|
const widthSkipDuration = (skipDuration / videoDuration) * width;
|
|
|
const widthDuration = (duration / videoDuration) * width;
|
|
@@ -679,10 +732,21 @@ const drawCanvas = () => {
|
|
|
ctx.fillRect(widthCurrentTime, 0, 1, 20);
|
|
|
};
|
|
|
|
|
|
-const seekTo = position => {
|
|
|
- pauseVideo(false);
|
|
|
+const seekTo = (position, play = true) => {
|
|
|
+ if (currentSongMediaType.value === "youtube") {
|
|
|
+ if (play) {
|
|
|
+ video.value.player.seekTo(position);
|
|
|
+ pauseVideo(false);
|
|
|
+ playerPlay();
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- video.value.player.seekTo(position);
|
|
|
+ if (currentSongMediaType.value === "soundcloud") {
|
|
|
+ soundcloudSeekTo(position * 1000);
|
|
|
+ if (play) {
|
|
|
+ soundcloudPlay();
|
|
|
+ }
|
|
|
+ }
|
|
|
};
|
|
|
|
|
|
const getAlbumData = type => {
|
|
@@ -746,23 +810,66 @@ const fillDuration = () => {
|
|
|
});
|
|
|
};
|
|
|
|
|
|
+const playerHardStop = () => {
|
|
|
+ if (
|
|
|
+ youtubePlayerReady.value &&
|
|
|
+ video.value.player &&
|
|
|
+ video.value.player.stopVideo
|
|
|
+ )
|
|
|
+ video.value.player.stopVideo();
|
|
|
+ soundcloudUnload();
|
|
|
+};
|
|
|
+
|
|
|
+const playerPause = () => {
|
|
|
+ if (
|
|
|
+ youtubePlayerReady.value &&
|
|
|
+ video.value.player &&
|
|
|
+ video.value.player.pauseVideo
|
|
|
+ )
|
|
|
+ video.value.player.pauseVideo();
|
|
|
+ soundcloudPause();
|
|
|
+};
|
|
|
+
|
|
|
+const playerPlay = () => {
|
|
|
+ if (currentSongMediaType.value === "youtube") {
|
|
|
+ soundcloudPause();
|
|
|
+ if (
|
|
|
+ youtubePlayerReady.value &&
|
|
|
+ video.value.player &&
|
|
|
+ video.value.player.playVideo
|
|
|
+ )
|
|
|
+ video.value.player.playVideo();
|
|
|
+ } else if (currentSongMediaType.value === "soundcloud") {
|
|
|
+ if (
|
|
|
+ youtubePlayerReady.value &&
|
|
|
+ video.value.player &&
|
|
|
+ video.value.player.pauseVideo
|
|
|
+ )
|
|
|
+ video.value.player.pauseVideo();
|
|
|
+ soundcloudPlay();
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
const settings = type => {
|
|
|
switch (type) {
|
|
|
case "stop":
|
|
|
stopVideo();
|
|
|
+ playerPause();
|
|
|
pauseVideo(true);
|
|
|
|
|
|
break;
|
|
|
case "hardStop":
|
|
|
- hardStopVideo();
|
|
|
+ playerHardStop();
|
|
|
pauseVideo(true);
|
|
|
|
|
|
break;
|
|
|
case "pause":
|
|
|
+ playerPause();
|
|
|
pauseVideo(true);
|
|
|
|
|
|
break;
|
|
|
case "play":
|
|
|
+ playerPlay();
|
|
|
pauseVideo(false);
|
|
|
|
|
|
break;
|
|
@@ -780,8 +887,9 @@ const settings = type => {
|
|
|
|
|
|
const play = () => {
|
|
|
if (
|
|
|
+ currentSongMediaType.value === "youtube" &&
|
|
|
inputs.value.mediaSource.value !==
|
|
|
- `youtube:${video.value.player.getVideoData().video_id}`
|
|
|
+ `youtube:${video.value.player.getVideoData().video_id}`
|
|
|
) {
|
|
|
setValue({ duration: -1 });
|
|
|
loadVideoById(
|
|
@@ -789,26 +897,63 @@ const play = () => {
|
|
|
inputs.value.skipDuration.value
|
|
|
);
|
|
|
}
|
|
|
+
|
|
|
+ console.log(
|
|
|
+ `|${
|
|
|
+ inputs.value.mediaSource.value
|
|
|
+ }|--|soundcloud:${soundcloudGetTrackId()}|`
|
|
|
+ );
|
|
|
+
|
|
|
+ if (
|
|
|
+ currentSongMediaType.value === "soundcloud" &&
|
|
|
+ `${inputs.value.mediaSource.value}` !==
|
|
|
+ `soundcloud:${soundcloudGetTrackId()}`
|
|
|
+ ) {
|
|
|
+ setValue({ duration: -1 });
|
|
|
+ console.log(
|
|
|
+ "ON PLAY LOAD SC",
|
|
|
+ currentSongMediaValue.value,
|
|
|
+ Math.max(Number(inputs.value.skipDuration.value), 0),
|
|
|
+ true
|
|
|
+ );
|
|
|
+ soundcloudLoadTrack(
|
|
|
+ currentSongMediaValue.value,
|
|
|
+ Math.max(Number(inputs.value.skipDuration.value), 0),
|
|
|
+ true
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
settings("play");
|
|
|
};
|
|
|
|
|
|
+const changeSoundcloudPlayerVolume = () => {
|
|
|
+ if (muted.value) soundcloudSetVolume(0);
|
|
|
+ else soundcloudSetVolume(volumeSliderValue.value);
|
|
|
+};
|
|
|
+
|
|
|
+const changePlayerVolume = () => {
|
|
|
+ if (youtubePlayerReady.value) {
|
|
|
+ video.value.player.setVolume(volumeSliderValue.value);
|
|
|
+ if (muted.value) video.value.player.mute();
|
|
|
+ else video.value.player.unMute();
|
|
|
+ }
|
|
|
+
|
|
|
+ changeSoundcloudPlayerVolume();
|
|
|
+};
|
|
|
+
|
|
|
const changeVolume = () => {
|
|
|
const volume = volumeSliderValue.value;
|
|
|
localStorage.setItem("volume", `${volume}`);
|
|
|
- video.value.player.setVolume(volume);
|
|
|
- if (volume > 0) {
|
|
|
- video.value.player.unMute();
|
|
|
- muted.value = false;
|
|
|
- }
|
|
|
+ muted.value = volume <= 0;
|
|
|
+ localStorage.setItem("muted", `${muted.value}`);
|
|
|
+
|
|
|
+ changePlayerVolume();
|
|
|
};
|
|
|
|
|
|
const toggleMute = () => {
|
|
|
- const previousVolume = parseFloat(localStorage.getItem("volume"));
|
|
|
- const volume = video.value.player.getVolume() <= 0 ? previousVolume : 0;
|
|
|
muted.value = !muted.value;
|
|
|
- volumeSliderValue.value = volume;
|
|
|
- video.value.player.setVolume(volume);
|
|
|
- if (!muted.value) localStorage.setItem("volume", `${volume}`);
|
|
|
+
|
|
|
+ changePlayerVolume();
|
|
|
};
|
|
|
|
|
|
const addTag = (type, value?) => {
|
|
@@ -873,14 +1018,20 @@ const removeTag = (type, value) => {
|
|
|
);
|
|
|
};
|
|
|
|
|
|
-const setTrackPosition = event => {
|
|
|
- seekTo(
|
|
|
- Number(
|
|
|
- Number(video.value.player.getDuration()) *
|
|
|
- ((event.pageX - event.target.getBoundingClientRect().left) /
|
|
|
- 530)
|
|
|
- )
|
|
|
- );
|
|
|
+const setTrackPosition = async event => {
|
|
|
+ const clickPosition =
|
|
|
+ (event.pageX - event.target.getBoundingClientRect().left) / 530;
|
|
|
+
|
|
|
+ if (currentSongMediaType.value === "youtube" && youtubePlayerReady.value) {
|
|
|
+ seekTo(
|
|
|
+ Number(Number(video.value.player.getDuration()) * clickPosition)
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ if (currentSongMediaType.value === "soundcloud") {
|
|
|
+ const duration = await getPlayerDuration();
|
|
|
+ seekTo(Number(Number(duration) * clickPosition));
|
|
|
+ }
|
|
|
};
|
|
|
|
|
|
const toggleGenreHelper = () => {
|
|
@@ -892,7 +1043,9 @@ const resetGenreHelper = () => {
|
|
|
};
|
|
|
|
|
|
const sendActivityWatchVideoData = () => {
|
|
|
+ // TODO have this support soundcloud
|
|
|
if (
|
|
|
+ currentSongMediaType.value === "youtube" &&
|
|
|
!video.value.paused &&
|
|
|
video.value.player.getPlayerState() === window.YT.PlayerState.PLAYING
|
|
|
) {
|
|
@@ -959,14 +1112,31 @@ watch(
|
|
|
() => inputs.value.mediaSource.value,
|
|
|
value => {
|
|
|
if (
|
|
|
+ value.split(":")[0] === "youtube" &&
|
|
|
video.value.player &&
|
|
|
- video.value.player.cueVideoById &&
|
|
|
- value.startsWith("youtube:")
|
|
|
- )
|
|
|
+ video.value.player.cueVideoById
|
|
|
+ ) {
|
|
|
+ soundcloudUnload();
|
|
|
video.value.player.cueVideoById(
|
|
|
value.split(":")[1],
|
|
|
inputs.value.skipDuration.value
|
|
|
);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (value.split(":")[0] === "soundcloud") {
|
|
|
+ playerPause();
|
|
|
+ console.log(
|
|
|
+ "ON WATCH LOAD SC",
|
|
|
+ value.split(":")[1],
|
|
|
+ Number(inputs.value.skipDuration.value),
|
|
|
+ true
|
|
|
+ );
|
|
|
+ soundcloudLoadTrack(
|
|
|
+ value.split(":")[1],
|
|
|
+ Number(inputs.value.skipDuration.value),
|
|
|
+ true
|
|
|
+ );
|
|
|
+ }
|
|
|
}
|
|
|
);
|
|
|
watch(
|
|
@@ -1015,25 +1185,37 @@ onMounted(async () => {
|
|
|
return closeCurrentModal();
|
|
|
}
|
|
|
|
|
|
- interval.value = setInterval(() => {
|
|
|
+ interval.value = setInterval(async () => {
|
|
|
+ const currentPlayerTime = await getCurrentPlayerTime();
|
|
|
+ const playerDuration = await getPlayerDuration();
|
|
|
+
|
|
|
if (
|
|
|
inputs.value.duration.value !== -1 &&
|
|
|
- video.value.paused === false &&
|
|
|
- playerReady.value &&
|
|
|
- (video.value.player.getCurrentTime() -
|
|
|
- inputs.value.skipDuration.value >
|
|
|
- inputs.value.duration.value ||
|
|
|
- (video.value.player.getCurrentTime() > 0 &&
|
|
|
- video.value.player.getCurrentTime() >=
|
|
|
- video.value.player.getDuration()))
|
|
|
+ video.value.paused === false
|
|
|
) {
|
|
|
- stopVideo();
|
|
|
- pauseVideo(true);
|
|
|
+ if (
|
|
|
+ (currentSongMediaType.value === "youtube" &&
|
|
|
+ youtubePlayerReady.value) ||
|
|
|
+ currentSongMediaType.value === "soundcloud"
|
|
|
+ ) {
|
|
|
+ if (
|
|
|
+ currentPlayerTime - inputs.value.skipDuration.value >
|
|
|
+ inputs.value.duration.value ||
|
|
|
+ (currentPlayerTime > 0 &&
|
|
|
+ currentPlayerTime >= playerDuration)
|
|
|
+ ) {
|
|
|
+ pauseVideo(true);
|
|
|
+ playerPause();
|
|
|
+ seekTo(0, false);
|
|
|
|
|
|
- drawCanvas();
|
|
|
+ drawCanvas();
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
if (
|
|
|
- playerReady.value &&
|
|
|
+ currentSongMediaType.value === "youtube" &&
|
|
|
+ youtubePlayerReady.value &&
|
|
|
video.value.player.getVideoData &&
|
|
|
video.value.player.getVideoData() &&
|
|
|
`youtube:${video.value.player.getVideoData().video_id}` ===
|
|
@@ -1064,12 +1246,48 @@ onMounted(async () => {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ if (currentSongMediaType.value === "soundcloud") {
|
|
|
+ console.log(
|
|
|
+ "INTERVAL SOUNDCLOUD",
|
|
|
+ currentPlayerTime,
|
|
|
+ playerDuration,
|
|
|
+ youtubeVideoCurrentTime.value,
|
|
|
+ youtubeVideoDuration.value,
|
|
|
+ inputs.value.duration.value
|
|
|
+ );
|
|
|
+
|
|
|
+ if (currentPlayerTime)
|
|
|
+ youtubeVideoCurrentTime.value =
|
|
|
+ Number(currentPlayerTime).toFixed(3);
|
|
|
+
|
|
|
+ if (youtubeVideoDuration.value === "0.000") {
|
|
|
+ if (playerDuration) {
|
|
|
+ youtubeVideoDuration.value =
|
|
|
+ Number(playerDuration).toFixed(3);
|
|
|
+ if (youtubeVideoDuration.value.indexOf(".000") !== -1)
|
|
|
+ youtubeVideoNote.value = "(~)";
|
|
|
+ else youtubeVideoNote.value = "";
|
|
|
+ }
|
|
|
+
|
|
|
+ if (
|
|
|
+ !inputs.value.duration.value ||
|
|
|
+ (Number(inputs.value.duration.value) <= 0 &&
|
|
|
+ playerDuration &&
|
|
|
+ Number(playerDuration) > 0)
|
|
|
+ ) {
|
|
|
+ setValue({ duration: playerDuration.toFixed(3) });
|
|
|
+ }
|
|
|
+
|
|
|
+ drawCanvas();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
if (video.value.paused === false) drawCanvas();
|
|
|
}, 200);
|
|
|
|
|
|
if (window.YT && window.YT.Player) {
|
|
|
video.value.player = new window.YT.Player(
|
|
|
- `editSongPlayer-${props.modalUuid}`,
|
|
|
+ `editSongPlayerYouTube-${props.modalUuid}`,
|
|
|
{
|
|
|
height: 298,
|
|
|
width: 530,
|
|
@@ -1085,14 +1303,9 @@ onMounted(async () => {
|
|
|
startSeconds: inputs.value.skipDuration.value,
|
|
|
events: {
|
|
|
onReady: () => {
|
|
|
- let volume = parseFloat(
|
|
|
- localStorage.getItem("volume")
|
|
|
- );
|
|
|
- volume = typeof volume === "number" ? volume : 20;
|
|
|
- video.value.player.setVolume(volume);
|
|
|
- if (volume > 0) video.value.player.unMute();
|
|
|
+ changePlayerVolume();
|
|
|
|
|
|
- playerReady.value = true;
|
|
|
+ youtubePlayerReady.value = true;
|
|
|
|
|
|
if (
|
|
|
inputs.value.mediaSource.value &&
|
|
@@ -1183,16 +1396,18 @@ onMounted(async () => {
|
|
|
inputs.value.duration.value >
|
|
|
youtubeDuration + 1
|
|
|
) {
|
|
|
- stopVideo();
|
|
|
pauseVideo(true);
|
|
|
+ playerPause();
|
|
|
+ seekTo(0, false);
|
|
|
|
|
|
return new Toast(
|
|
|
"Video can't play. Specified duration is bigger than the YouTube song duration."
|
|
|
);
|
|
|
}
|
|
|
if (inputs.value.duration.value <= 0) {
|
|
|
- stopVideo();
|
|
|
pauseVideo(true);
|
|
|
+ playerPause();
|
|
|
+ seekTo(0, false);
|
|
|
|
|
|
return new Toast(
|
|
|
"Video can't play. Specified duration has to be more than 0 seconds."
|
|
@@ -1501,6 +1716,55 @@ onMounted(async () => {
|
|
|
Inside Discogs inputs: Ctrl - D - Sets this field to the Discogs data
|
|
|
|
|
|
*/
|
|
|
+
|
|
|
+ soundcloudBindListener("play", () => {
|
|
|
+ console.debug(TAG, "Bind on play");
|
|
|
+ // if (currentSongMediaType.value !== "soundcloud") {
|
|
|
+ // soundcloudPause();
|
|
|
+ // return;
|
|
|
+ // }
|
|
|
+ // if (localPaused.value || stationPaused.value) {
|
|
|
+ // console.debug(
|
|
|
+ // TAG,
|
|
|
+ // "Bind on play - pause and seek to",
|
|
|
+ // (getTimeElapsed() / 1000 + currentSong.value.skipDuration) *
|
|
|
+ // 1000
|
|
|
+ // );
|
|
|
+ // soundcloudPause();
|
|
|
+ // soundcloudSeekTo(
|
|
|
+ // (getTimeElapsed() / 1000 + currentSong.value.skipDuration) *
|
|
|
+ // 1000
|
|
|
+ // );
|
|
|
+ // }
|
|
|
+ });
|
|
|
+
|
|
|
+ soundcloudBindListener("pause", () => {
|
|
|
+ console.debug(TAG, "Bind on pause");
|
|
|
+ // if (currentSongMediaType.value !== "soundcloud") return;
|
|
|
+ // if (!localPaused.value && !stationPaused.value) {
|
|
|
+ // console.debug(
|
|
|
+ // TAG,
|
|
|
+ // "Bind on pause - seeking to",
|
|
|
+ // (getTimeElapsed() / 1000 + currentSong.value.skipDuration) *
|
|
|
+ // 1000,
|
|
|
+ // "and playing"
|
|
|
+ // );
|
|
|
+ // soundcloudSeekTo(
|
|
|
+ // (getTimeElapsed() / 1000 + currentSong.value.skipDuration) *
|
|
|
+ // 1000
|
|
|
+ // );
|
|
|
+ // soundcloudPlay();
|
|
|
+ // }
|
|
|
+ });
|
|
|
+
|
|
|
+ soundcloudBindListener("seek", () => {
|
|
|
+ console.debug(TAG, "Bind on seek");
|
|
|
+ // if (seeking.value) seeking.value = false;
|
|
|
+ });
|
|
|
+
|
|
|
+ soundcloudBindListener("error", value => {
|
|
|
+ console.debug(TAG, "Bind on error", value);
|
|
|
+ });
|
|
|
});
|
|
|
|
|
|
onBeforeUnmount(() => {
|
|
@@ -1512,7 +1776,7 @@ onBeforeUnmount(() => {
|
|
|
|
|
|
updateMediaModalPlayingAudio(false);
|
|
|
|
|
|
- playerReady.value = false;
|
|
|
+ youtubePlayerReady.value = false;
|
|
|
clearInterval(interval.value);
|
|
|
clearInterval(activityWatchVideoDataInterval.value);
|
|
|
|
|
@@ -1770,14 +2034,16 @@ onBeforeUnmount(() => {
|
|
|
frameborder="no"
|
|
|
allow="autoplay"
|
|
|
></iframe>
|
|
|
- <p
|
|
|
+
|
|
|
+ <div
|
|
|
+ class="no-media-source-specified-message"
|
|
|
v-show="
|
|
|
currentSongMediaType !== 'youtube' &&
|
|
|
currentSongMediaType !== 'soundcloud'
|
|
|
"
|
|
|
>
|
|
|
- No media source specified
|
|
|
- </p>
|
|
|
+ <h2>No media source specified</h2>
|
|
|
+ </div>
|
|
|
|
|
|
<div v-show="youtubeError" class="player-error">
|
|
|
<h2>{{ youtubeErrorMessage }}</h2>
|
|
@@ -2129,7 +2395,7 @@ onBeforeUnmount(() => {
|
|
|
<input
|
|
|
class="input"
|
|
|
type="text"
|
|
|
- placeholder="Enter Media source..."
|
|
|
+ placeholder="Enter media source..."
|
|
|
v-model="inputs['mediaSource'].value"
|
|
|
/>
|
|
|
</p>
|
|
@@ -2561,7 +2827,8 @@ onBeforeUnmount(() => {
|
|
|
background-color: var(--light-grey-2);
|
|
|
}
|
|
|
|
|
|
- .player-error {
|
|
|
+ .player-error,
|
|
|
+ .no-media-source-specified-message {
|
|
|
display: flex;
|
|
|
height: 318px;
|
|
|
width: 530px;
|