mirror of
				https://github.com/TeamPiped/Piped.git
				synced 2024-08-14 23:57:27 +00:00 
			
		
		
		
	clone playlist from youtube
This commit is contained in:
		
							parent
							
								
									4a4e28007f
								
							
						
					
					
						commit
						6c3eb2304d
					
				
					 5 changed files with 32 additions and 5 deletions
				
			
		| 
						 | 
				
			
			@ -2,7 +2,7 @@
 | 
			
		|||
    <ErrorHandler v-if="playlist && playlist.error" :message="playlist.message" :error="playlist.error" />
 | 
			
		||||
 | 
			
		||||
    <div v-if="playlist" v-show="!playlist.error">
 | 
			
		||||
        <h1 class="text-center" v-text="playlist.name" />
 | 
			
		||||
        <h1 class="text-center my-4" v-text="playlist.name" />
 | 
			
		||||
 | 
			
		||||
        <div class="grid grid-cols-2">
 | 
			
		||||
            <div>
 | 
			
		||||
| 
						 | 
				
			
			@ -15,7 +15,10 @@
 | 
			
		|||
                <div class="right-2vw absolute">
 | 
			
		||||
                    <strong v-text="`${playlist.videos} ${$t('video.videos')}`" />
 | 
			
		||||
                    <br />
 | 
			
		||||
                    <a :href="getRssUrl">
 | 
			
		||||
                    <button class="btn mr-1" v-if="authenticated && !isPipedPlaylist" @click="clonePlaylist">
 | 
			
		||||
                        {{ $t("actions.clone_playlist") }}<font-awesome-icon class="ml-3" icon="clone" />
 | 
			
		||||
                    </button>
 | 
			
		||||
                    <a class="btn" :href="getRssUrl">
 | 
			
		||||
                        <font-awesome-icon icon="rss" />
 | 
			
		||||
                    </a>
 | 
			
		||||
                </div>
 | 
			
		||||
| 
						 | 
				
			
			@ -59,6 +62,10 @@ export default {
 | 
			
		|||
        getRssUrl: _this => {
 | 
			
		||||
            return _this.authApiUrl() + "/rss/playlists/" + _this.$route.query.list;
 | 
			
		||||
        },
 | 
			
		||||
        isPipedPlaylist() {
 | 
			
		||||
            // FIXME: this checks whether it's a YouTube or a Piped playlist
 | 
			
		||||
            return this.$route.query.list.includes("-");
 | 
			
		||||
        },
 | 
			
		||||
    },
 | 
			
		||||
    mounted() {
 | 
			
		||||
        this.getPlaylistData();
 | 
			
		||||
| 
						 | 
				
			
			@ -109,6 +116,22 @@ export default {
 | 
			
		|||
        removeVideo(index) {
 | 
			
		||||
            this.playlist.relatedStreams.splice(index, 1);
 | 
			
		||||
        },
 | 
			
		||||
        async clonePlaylist() {
 | 
			
		||||
            const playlistId = this.$route.query.list;
 | 
			
		||||
            this.fetchJson(this.authApiUrl() + "/import/playlist", null, {
 | 
			
		||||
                method: "POST",
 | 
			
		||||
                headers: {
 | 
			
		||||
                    Authorization: this.getAuthToken(),
 | 
			
		||||
                },
 | 
			
		||||
                body: JSON.stringify({
 | 
			
		||||
                    playlistId: playlistId,
 | 
			
		||||
                }),
 | 
			
		||||
            }).then(resp => {
 | 
			
		||||
                if (!resp.error) {
 | 
			
		||||
                    alert(this.$t("actions.clone_playlist_success"));
 | 
			
		||||
                } else alert(resp.error);
 | 
			
		||||
            });
 | 
			
		||||
        },
 | 
			
		||||
    },
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -244,7 +244,7 @@
 | 
			
		|||
                class="input w-auto"
 | 
			
		||||
                type="password"
 | 
			
		||||
            />
 | 
			
		||||
            <a class="btn w-auto" style="margin-left: 0.5em" @click="deleteAccount" v-t="'actions.delete_account'" />
 | 
			
		||||
            <a class="btn w-auto ml-2" @click="deleteAccount" v-t="'actions.delete_account'" />
 | 
			
		||||
            <br />
 | 
			
		||||
        </div>
 | 
			
		||||
        <br />
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
<template>
 | 
			
		||||
    <h1 class="text-center" v-text="$route.query.search_query" />
 | 
			
		||||
    <h1 class="text-center my-2" v-text="$route.query.search_query" />
 | 
			
		||||
 | 
			
		||||
    <label for="ddlSearchFilters">
 | 
			
		||||
        <strong v-text="`${$t('actions.filter')}:`" />
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -86,7 +86,9 @@
 | 
			
		|||
        "minimize_recommendations_default": "Minimize Recommendations by default",
 | 
			
		||||
        "invalidate_session": "Logout all devices",
 | 
			
		||||
        "different_auth_instance": "Use a different instance for authentication",
 | 
			
		||||
        "instance_auth_selection": "Autentication Instance Selection"
 | 
			
		||||
        "instance_auth_selection": "Autentication Instance Selection",
 | 
			
		||||
        "clone_playlist": "Clone Playlist",
 | 
			
		||||
        "clone_playlist_success": "Successfully cloned!"
 | 
			
		||||
    },
 | 
			
		||||
    "comment": {
 | 
			
		||||
        "pinned_by": "Pinned by",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,6 +17,7 @@ import {
 | 
			
		|||
    faCirclePlus,
 | 
			
		||||
    faCircleMinus,
 | 
			
		||||
    faXmark,
 | 
			
		||||
    faClone,
 | 
			
		||||
} from "@fortawesome/free-solid-svg-icons";
 | 
			
		||||
import { faGithub, faBitcoin, faYoutube } from "@fortawesome/free-brands-svg-icons";
 | 
			
		||||
import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome";
 | 
			
		||||
| 
						 | 
				
			
			@ -40,6 +41,7 @@ library.add(
 | 
			
		|||
    faCirclePlus,
 | 
			
		||||
    faCircleMinus,
 | 
			
		||||
    faXmark,
 | 
			
		||||
    faClone,
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
import router from "@/router/router.js";
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue