diff --git a/backend/app.js b/backend/app.js
index 20cd52d..ef9bdf1 100644
--- a/backend/app.js
+++ b/backend/app.js
@@ -2399,14 +2399,17 @@ app.get('/api/stream', optionalJwt, async (req, res) => {
let uid = decodeURIComponent(req.query.uid);
let file_path = null;
+ let file_obj = null;
const multiUserMode = config_api.getConfigItem('ytdl_multi_user_mode');
if (!multiUserMode || req.isAuthenticated() || req.can_watch) {
- const file_obj = await db_api.getVideo(uid, uuid, sub_id);
+ file_obj = await db_api.getVideo(uid, uuid, sub_id);
if (file_obj) file_path = file_obj['path'];
else file_path = null;
}
-
+ if (!fs.existsSync(file_path)) {
+ logger.error(`File ${file_path} could not be found! UID: ${uid}, ID: ${file_obj.id}`);
+ }
const stat = fs.statSync(file_path)
const fileSize = stat.size
const range = req.headers.range
diff --git a/backend/db.js b/backend/db.js
index 84032dd..02bcea5 100644
--- a/backend/db.js
+++ b/backend/db.js
@@ -413,6 +413,7 @@ exports.createPlaylist = async (playlist_name, uids, type, thumbnail_url, user_u
thumbnailURL: thumbnail_url,
type: type,
registered: Date.now(),
+ randomize_order: false
};
const duration = await exports.calculatePlaylistDuration(new_playlist, user_uid);
diff --git a/src/app/dialogs/modify-playlist/modify-playlist.component.html b/src/app/dialogs/modify-playlist/modify-playlist.component.html
index a8471bb..6c234c3 100644
--- a/src/app/dialogs/modify-playlist/modify-playlist.component.html
+++ b/src/app/dialogs/modify-playlist/modify-playlist.component.html
@@ -9,6 +9,10 @@
+
+ Randomize order when playing
+
+
Normal order
diff --git a/src/app/dialogs/modify-playlist/modify-playlist.component.ts b/src/app/dialogs/modify-playlist/modify-playlist.component.ts
index b482bb8..56b123b 100644
--- a/src/app/dialogs/modify-playlist/modify-playlist.component.ts
+++ b/src/app/dialogs/modify-playlist/modify-playlist.component.ts
@@ -85,6 +85,7 @@ export class ModifyPlaylistComponent implements OnInit {
index = this.playlist_file_objs.length - 1 - index;
}
this.playlist_file_objs.splice(index, 1);
+ this.playlist.uids.splice(index, 1);
this.processFiles();
}
diff --git a/src/app/player/player.component.html b/src/app/player/player.component.html
index a0dd7d2..c39afed 100644
--- a/src/app/player/player.component.html
+++ b/src/app/player/player.component.html
@@ -55,13 +55,13 @@
-
+
diff --git a/src/app/player/player.component.ts b/src/app/player/player.component.ts
index c4a0527..e6f6767 100644
--- a/src/app/player/player.component.ts
+++ b/src/app/player/player.component.ts
@@ -233,6 +233,9 @@ export class PlayerComponent implements OnInit, AfterViewInit, OnDestroy {
}
this.playlist.push(mediaObject);
}
+ if (this.db_playlist && this.db_playlist['randomize_order']) {
+ this.shuffleArray(this.playlist);
+ }
this.currentItem = this.playlist[this.currentIndex];
this.original_playlist = JSON.stringify(this.playlist);
this.show_player = true;
@@ -409,6 +412,13 @@ export class PlayerComponent implements OnInit, AfterViewInit, OnDestroy {
this.api.playbackRate = speed;
}
+ shuffleArray(array) {
+ for (let i = array.length - 1; i > 0; i--) {
+ const j = Math.floor(Math.random() * (i + 1));
+ [array[i], array[j]] = [array[j], array[i]];
+ }
+ }
+
// snackbar helper
public openSnackBar(message: string, action: string) {
this.snackBar.open(message, action, {