mirror of
https://github.com/TeamPiped/Piped.git
synced 2024-11-22 21:47:25 +00:00
Implement restoring backups and auto-delete unused videos
This commit is contained in:
parent
a52c511d29
commit
4056c44fbb
@ -80,7 +80,7 @@ export default {
|
|||||||
if (!db.objectStoreNames.contains("playlists")) {
|
if (!db.objectStoreNames.contains("playlists")) {
|
||||||
const playlistStore = db.createObjectStore("playlists", { keyPath: "playlistId" });
|
const playlistStore = db.createObjectStore("playlists", { keyPath: "playlistId" });
|
||||||
playlistStore.createIndex("playlistId", "playlistId", { unique: true });
|
playlistStore.createIndex("playlistId", "playlistId", { unique: true });
|
||||||
const playlistVideosStore = db.createObjectStore("playlistVideos", { keyPath: "videoId" });
|
const playlistVideosStore = db.createObjectStore("playlist_videos", { keyPath: "videoId" });
|
||||||
playlistVideosStore.createIndex("videoId", "videoId", { unique: true });
|
playlistVideosStore.createIndex("videoId", "videoId", { unique: true });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
28
src/main.js
28
src/main.js
@ -316,10 +316,10 @@ const mixin = {
|
|||||||
},
|
},
|
||||||
// needs to handle both, streamInfo items and streams items
|
// needs to handle both, streamInfo items and streams items
|
||||||
createLocalPlaylistVideo(videoId, videoInfo) {
|
createLocalPlaylistVideo(videoId, videoInfo) {
|
||||||
if (videoInfo === undefined || videoId === null) return;
|
if (videoInfo === undefined || videoId === null || videoInfo?.error) return;
|
||||||
|
|
||||||
var tx = window.db.transaction("playlistVideos", "readwrite");
|
var tx = window.db.transaction("playlist_videos", "readwrite");
|
||||||
var store = tx.objectStore("playlistVideos");
|
var store = tx.objectStore("playlist_videos");
|
||||||
const video = {
|
const video = {
|
||||||
videoId: videoId,
|
videoId: videoId,
|
||||||
title: videoInfo.title,
|
title: videoInfo.title,
|
||||||
@ -336,8 +336,8 @@ const mixin = {
|
|||||||
store.put(video);
|
store.put(video);
|
||||||
},
|
},
|
||||||
async getLocalPlaylistVideo(videoId) {
|
async getLocalPlaylistVideo(videoId) {
|
||||||
var tx = window.db.transaction("playlistVideos", "readonly");
|
var tx = window.db.transaction("playlist_videos", "readonly");
|
||||||
var store = tx.objectStore("playlistVideos");
|
var store = tx.objectStore("playlist_videos");
|
||||||
const req = store.openCursor(videoId);
|
const req = store.openCursor(videoId);
|
||||||
let video = null;
|
let video = null;
|
||||||
req.onsuccess = e => {
|
req.onsuccess = e => {
|
||||||
@ -420,9 +420,22 @@ const mixin = {
|
|||||||
},
|
},
|
||||||
async deletePlaylist(playlistId) {
|
async deletePlaylist(playlistId) {
|
||||||
if (!this.authenticated) {
|
if (!this.authenticated) {
|
||||||
|
const playlist = await this.getLocalPlaylist(playlistId);
|
||||||
var tx = window.db.transaction("playlists", "readwrite");
|
var tx = window.db.transaction("playlists", "readwrite");
|
||||||
var store = tx.objectStore("playlists");
|
var store = tx.objectStore("playlists");
|
||||||
store.delete(playlistId);
|
store.delete(playlistId);
|
||||||
|
// delete videos that don't need to be store anymore
|
||||||
|
const playlists = await this.getPlaylists();
|
||||||
|
const usedVideoIds = playlists
|
||||||
|
.filter(playlist => playlist.id != playlistId)
|
||||||
|
.map(playlist => JSON.parse(playlist.videoIds))
|
||||||
|
.flat();
|
||||||
|
const potentialDeletableVideos = JSON.parse(playlist.videoIds);
|
||||||
|
var videoTx = window.db.transaction("playlist_videos", "readwrite");
|
||||||
|
var videoStore = videoTx.objectStore("playlist_videos");
|
||||||
|
for (let videoId of potentialDeletableVideos) {
|
||||||
|
if (!usedVideoIds.includes(videoId)) videoStore.delete(videoId);
|
||||||
|
}
|
||||||
return { message: "ok" };
|
return { message: "ok" };
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -485,8 +498,11 @@ const mixin = {
|
|||||||
currentVideoIds.push(...videoIds);
|
currentVideoIds.push(...videoIds);
|
||||||
playlist.videoIds = JSON.stringify(currentVideoIds);
|
playlist.videoIds = JSON.stringify(currentVideoIds);
|
||||||
this.createOrUpdateLocalPlaylist(playlist);
|
this.createOrUpdateLocalPlaylist(playlist);
|
||||||
|
let streamInfos =
|
||||||
|
videoInfos ??
|
||||||
|
(await Promise.all(videoIds.map(videoId => this.fetchJson(this.apiUrl() + "/streams/" + videoId))));
|
||||||
for (let i in videoIds) {
|
for (let i in videoIds) {
|
||||||
this.createLocalPlaylistVideo(videoIds[i], videoInfos[i]);
|
this.createLocalPlaylistVideo(videoIds[i], streamInfos[i]);
|
||||||
}
|
}
|
||||||
return { message: "ok" };
|
return { message: "ok" };
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user