[API] implement delete playlist endpoint

This commit is contained in:
Simon 2023-08-23 23:54:36 +07:00
parent 2bccb698e6
commit a514dda1ff
No known key found for this signature in database
GPG Key ID: 2C15AA5E89985DD4
4 changed files with 19 additions and 24 deletions

View File

@ -13,6 +13,7 @@ from home.src.frontend.searching import SearchForm
from home.src.frontend.watched import WatchState from home.src.frontend.watched import WatchState
from home.src.index.channel import YoutubeChannel from home.src.index.channel import YoutubeChannel
from home.src.index.generic import Pagination from home.src.index.generic import Pagination
from home.src.index.playlist import YoutubePlaylist
from home.src.index.reindex import ReindexProgress from home.src.index.reindex import ReindexProgress
from home.src.index.video import SponsorBlock, YoutubeVideo from home.src.index.video import SponsorBlock, YoutubeVideo
from home.src.ta.config import AppConfig, ReleaseVersion from home.src.ta.config import AppConfig, ReleaseVersion
@ -438,6 +439,17 @@ class PlaylistApiView(ApiBaseView):
self.get_document(playlist_id) self.get_document(playlist_id)
return Response(self.response, status=self.status_code) return Response(self.response, status=self.status_code)
def delete(self, request, playlist_id):
"""delete playlist"""
print(f"{playlist_id}: delete playlist")
delete_videos = request.GET.get("delete-videos", False)
if delete_videos:
YoutubePlaylist(playlist_id).delete_videos_playlist()
else:
YoutubePlaylist(playlist_id).delete_metadata()
return Response({"success": True})
class PlaylistApiVideoView(ApiBaseView): class PlaylistApiVideoView(ApiBaseView):
"""resolves to /api/playlist/<playlist_id>/video """resolves to /api/playlist/<playlist_id>/video

View File

@ -4,7 +4,6 @@ Functionality:
- called via user input - called via user input
""" """
from home.src.index.playlist import YoutubePlaylist
from home.src.ta.ta_redis import RedisArchivist from home.src.ta.ta_redis import RedisArchivist
from home.tasks import run_restore_backup from home.tasks import run_restore_backup
@ -36,7 +35,6 @@ class PostData:
"show_subed_only": self._show_subed_only, "show_subed_only": self._show_subed_only,
"show_ignored_only": self._show_ignored_only, "show_ignored_only": self._show_ignored_only,
"db-restore": self._db_restore, "db-restore": self._db_restore,
"delete-playlist": self._delete_playlist,
} }
return exec_map[self.to_exec] return exec_map[self.to_exec]
@ -104,16 +102,3 @@ class PostData:
filename = self.exec_val filename = self.exec_val
run_restore_backup.delay(filename) run_restore_backup.delay(filename)
return {"success": True} return {"success": True}
def _delete_playlist(self):
"""delete playlist, only metadata or incl all videos"""
playlist_dict = self.exec_val
playlist_id = playlist_dict["playlist-id"]
playlist_action = playlist_dict["playlist-action"]
print(f"{playlist_id}: delete playlist {playlist_action}")
if playlist_action == "metadata":
YoutubePlaylist(playlist_id).delete_metadata()
elif playlist_action == "all":
YoutubePlaylist(playlist_id).delete_videos_playlist()
return {"success": True}

View File

@ -40,8 +40,8 @@
<button onclick="deleteConfirm()" id="delete-item">Delete Playlist</button> <button onclick="deleteConfirm()" id="delete-item">Delete Playlist</button>
<div class="delete-confirm" id="delete-button"> <div class="delete-confirm" id="delete-button">
<span>Delete {{ playlist_info.playlist_name }}?</span> <span>Delete {{ playlist_info.playlist_name }}?</span>
<button onclick="deletePlaylist(this)" data-action="metadata" data-id="{{ playlist_info.playlist_id }}">Delete metadata</button> <button onclick="deletePlaylist(this)" data-action="" data-id="{{ playlist_info.playlist_id }}">Delete metadata</button>
<button onclick="deletePlaylist(this)" data-action="all" class="danger-button" data-id="{{ playlist_info.playlist_id }}">Delete all</button><br> <button onclick="deletePlaylist(this)" data-action="delete-videos" class="danger-button" data-id="{{ playlist_info.playlist_id }}">Delete all</button><br>
<button onclick="cancelDelete()">Cancel</button> <button onclick="cancelDelete()">Cancel</button>
</div> </div>
</div> </div>

View File

@ -381,13 +381,11 @@ function deleteChannel(button) {
function deletePlaylist(button) { function deletePlaylist(button) {
let playlist_id = button.getAttribute('data-id'); let playlist_id = button.getAttribute('data-id');
let playlist_action = button.getAttribute('data-action'); let playlist_action = button.getAttribute('data-action');
let payload = JSON.stringify({ let apiEndpoint = `/api/playlist/${playlist_id}/`;
'delete-playlist': { if (playlist_action === 'delete-videos') {
'playlist-id': playlist_id, apiEndpoint += '?delete-videos=true';
'playlist-action': playlist_action, }
}, apiRequest(apiEndpoint, 'DELETE');
});
sendPost(payload);
setTimeout(function () { setTimeout(function () {
window.location.replace('/playlist/'); window.location.replace('/playlist/');
}, 1000); }, 1000);