Sharing and video downloads on shared videos now work for multi-user mode

This commit is contained in:
Isaac Grynsztein
2020-04-27 04:31:39 -04:00
parent 1ac6683f33
commit 4b2b278439
5 changed files with 83 additions and 12 deletions

View File

@@ -13,6 +13,7 @@ export class ShareMediaDialogComponent implements OnInit {
type = null;
uid = null;
uuid = null;
share_url = null;
sharing_enabled = null;
is_playlist = null;
@@ -24,11 +25,15 @@ export class ShareMediaDialogComponent implements OnInit {
if (this.data) {
this.type = this.data.type;
this.uid = this.data.uid;
this.uuid = this.data.uuid;
this.sharing_enabled = this.data.sharing_enabled;
this.is_playlist = this.data.is_playlist;
const arg = (this.is_playlist ? ';id=' : ';uid=');
this.share_url = window.location.href.split(';')[0] + arg + this.uid;
if (this.uuid) {
this.share_url += ';uuid=' + this.uuid;
}
}
}

View File

@@ -39,6 +39,7 @@ export class PlayerComponent implements OnInit {
uid = null; // used for non-subscription files (audio, video, playlist)
subscriptionName = null;
subPlaylist = null;
uuid = null; // used for sharing in multi-user mode, uuid is the user that downloaded the video
is_shared = false;
@@ -50,6 +51,8 @@ export class PlayerComponent implements OnInit {
videoFolderPath = null;
subscriptionFolderPath = null;
sharingEnabled = null;
// url-mode params
url = null;
name = null;
@@ -73,6 +76,7 @@ export class PlayerComponent implements OnInit {
this.subPlaylist = this.route.snapshot.paramMap.get('subPlaylist');
this.url = this.route.snapshot.paramMap.get('url');
this.name = this.route.snapshot.paramMap.get('name');
this.uuid = this.route.snapshot.paramMap.get('uuid');
// loading config
this.postsService.loadNavItems().subscribe(res => { // loads settings
@@ -123,12 +127,13 @@ export class PlayerComponent implements OnInit {
getFile() {
const already_has_filenames = !!this.fileNames;
this.postsService.getFile(this.uid, null).subscribe(res => {
this.postsService.getFile(this.uid, null, this.uuid).subscribe(res => {
this.db_file = res['file'];
if (!this.db_file) {
this.openSnackBar('Failed to get file information from the server.', 'Dismiss');
return;
}
this.sharingEnabled = this.db_file.sharingEnabled;
if (!this.fileNames) {
// means it's a shared video
if (!this.id) {
@@ -186,7 +191,10 @@ export class PlayerComponent implements OnInit {
// adds user token if in multi-user-mode
if (this.postsService.isLoggedIn) {
fullLocation += '?jwt=' + this.postsService.token;
fullLocation += `?jwt=${this.postsService.token}`;
if (this.is_shared) { fullLocation += `&uuid=${this.uuid}&uid=${this.db_file.uid}&type=${this.db_file.type}`; }
} else if (this.is_shared) {
fullLocation += `?uuid=${this.uuid}&uid=${this.db_file.uid}&type=${this.db_file.type}`;
}
// if it has a slash (meaning it's in a directory), only get the file name for the label
let label = null;
@@ -278,7 +286,8 @@ export class PlayerComponent implements OnInit {
const ext = (this.type === 'audio') ? '.mp3' : '.mp4';
const filename = this.playlist[0].title;
this.downloading = true;
this.postsService.downloadFileFromServer(filename, this.type, null, null, this.subscriptionName, this.subPlaylist).subscribe(res => {
this.postsService.downloadFileFromServer(filename, this.type, null, null, this.subscriptionName, this.subPlaylist,
this.is_shared ? this.db_file['uid'] : null, this.uuid).subscribe(res => {
this.downloading = false;
const blob: Blob = res;
saveAs(blob, filename + ext);
@@ -365,7 +374,8 @@ export class PlayerComponent implements OnInit {
uid: this.id ? this.id : this.uid,
type: this.type,
sharing_enabled: this.id ? this.db_playlist.sharingEnabled : this.db_file.sharingEnabled,
is_playlist: !!this.id
is_playlist: !!this.id,
uuid: this.postsService.isLoggedIn ? this.postsService.user.uid : null
},
width: '60vw'
});

View File

@@ -179,18 +179,21 @@ export class PostsService implements CanActivate {
return this.http.get(this.path + 'getMp4s', this.httpOptions);
}
getFile(uid, type) {
return this.http.post(this.path + 'getFile', {uid: uid, type: type}, this.httpOptions);
getFile(uid, type, uuid = null) {
return this.http.post(this.path + 'getFile', {uid: uid, type: type, uuid: uuid}, this.httpOptions);
}
downloadFileFromServer(fileName, type, outputName = null, fullPathProvided = null, subscriptionName = null, subPlaylist = null) {
downloadFileFromServer(fileName, type, outputName = null, fullPathProvided = null, subscriptionName = null, subPlaylist = null,
uid = null, uuid = null) {
return this.http.post(this.path + 'downloadFile', {fileNames: fileName,
type: type,
zip_mode: Array.isArray(fileName),
outputName: outputName,
fullPathProvided: fullPathProvided,
subscriptionName: subscriptionName,
subPlaylist: subPlaylist
subPlaylist: subPlaylist,
uuid: uuid,
uid: uid
},
{responseType: 'blob', params: this.httpOptions.params});
}