playlists can now be rearranged and updated

This commit is contained in:
Isaac Grynsztein
2020-02-24 03:49:43 -05:00
parent ac0199f596
commit 9302084f60
4 changed files with 70 additions and 4 deletions

View File

@@ -4,6 +4,7 @@ import { PostsService } from 'app/posts.services';
import { ActivatedRoute, Router } from '@angular/router';
import { MatDialog, MatSnackBar } from '@angular/material';
import { InputDialogComponent } from 'app/input-dialog/input-dialog.component';
import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';
export interface IMedia {
title: string;
@@ -19,6 +20,8 @@ export interface IMedia {
export class PlayerComponent implements OnInit {
playlist: Array<IMedia> = [];
original_playlist: string = null;
playlist_updating = false;
currentIndex = 0;
currentItem: IMedia = null;
@@ -82,6 +85,7 @@ export class PlayerComponent implements OnInit {
this.playlist.push(mediaObject);
}
this.currentItem = this.playlist[this.currentIndex];
this.original_playlist = JSON.stringify(this.playlist);
});
// this.getFileInfos();
@@ -122,11 +126,20 @@ export class PlayerComponent implements OnInit {
}
getFileInfos() {
this.postsService.getFileInfo(this.fileNames, this.type, false).subscribe(res => {
const fileNames = this.getFileNames();
this.postsService.getFileInfo(fileNames, this.type, false).subscribe(res => {
});
}
getFileNames() {
const fileNames = [];
for (let i = 0; i < this.playlist.length; i++) {
fileNames.push(this.playlist[i].title);
}
return fileNames;
}
decodeURI(string) {
return decodeURI(string);
}
@@ -179,7 +192,8 @@ export class PlayerComponent implements OnInit {
// Eventually do additional checks on name
if (name) {
this.postsService.createPlaylist(name, this.fileNames, this.type, null).subscribe(res => {
const fileNames = this.getFileNames();
this.postsService.createPlaylist(name, fileNames, this.type, null).subscribe(res => {
if (res['success']) {
dialogRef.close();
const new_playlist = res['new_playlist'];
@@ -208,6 +222,30 @@ export class PlayerComponent implements OnInit {
this.router.navigateByUrl(this.router.url + ';id=' + playlistID);
}
drop(event: CdkDragDrop<string[]>) {
moveItemInArray(this.playlist, event.previousIndex, event.currentIndex);
}
playlistChanged() {
return JSON.stringify(this.playlist) !== this.original_playlist;
}
updatePlaylist() {
const fileNames = this.getFileNames();
this.playlist_updating = true;
this.postsService.updatePlaylist(this.id, fileNames, this.type).subscribe(res => {
this.playlist_updating = false;
if (res['success']) {
const fileNamesEncoded = fileNames.join('|nvr|');
this.router.navigate(['/player', {fileNames: fileNamesEncoded, type: 'video', id: this.id}]);
this.openSnackBar('Successfully updated playlist.', '');
this.original_playlist = JSON.stringify(this.playlist);
} else {
this.openSnackBar('ERROR: Failed to update playlist.', '');
}
})
}
// snackbar helper
public openSnackBar(message: string, action: string) {
this.snackBar.open(message, action, {