Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 58 additions & 25 deletions src/main/java/app/musicplayer/controllers/MainController.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
import org.jaudiotagger.audio.AudioFile;
import org.jaudiotagger.audio.AudioFileIO;
import org.jaudiotagger.tag.Tag;
import org.jetbrains.annotations.NotNull;

import java.io.ByteArrayInputStream;
import java.io.File;
Expand Down Expand Up @@ -240,6 +241,56 @@ private void addNewPlaylistToUI(Playlist playlist) {
}
}

//conform playlist name to max length and prevent duplicates via numbering
private String conformPlaylistName(@NotNull String input){
//ensure playlist name is correct length
if (input.length() > MAX_PLAYLIST_TITLE_LENGTH) {

input=input.substring(0, MAX_PLAYLIST_TITLE_LENGTH);
}
//is the playlist a duplicate
if (library.findPlaylistByTitle(input).isPresent()) {
//get user added duplicate number, if it exists
String previousDuplicateNumber="";
int DuplicateLeng=1;
while (true){
//loop through characters back to front to acquire user entered number
char digit =input.charAt(input.length()-DuplicateLeng);
if(Character.isDigit(digit)){
//append number to front of string
previousDuplicateNumber=digit+previousDuplicateNumber;
DuplicateLeng++;
}else {
//reached end of number, exit loop
DuplicateLeng--;
break;
}
}
//add number to end to create unique name
int DuplicateNumber=2;

if(!previousDuplicateNumber.isEmpty()){
//set duplicate number to the number from text
input=input.substring(0,input.length()-DuplicateLeng);
DuplicateNumber=Integer.parseInt(previousDuplicateNumber);
}
//increment duplicate number until a unique value is found
while (library.findPlaylistByTitle(input+ DuplicateNumber).isPresent()){

DuplicateNumber++;
}
input+=DuplicateNumber;

//make sure duplicate number does not make the name too long
if (input.length() > MAX_PLAYLIST_TITLE_LENGTH) {
int overLeng=-input.length()-MAX_PLAYLIST_TITLE_LENGTH;
//remove front of string to signify to user this was a duplicate, which was too long
input=input.substring(overLeng);
}
}
return input;
}

@FXML
private void onClickAddNewPlaylist() {
if (!canAnimateNewPlaylist)
Expand All @@ -259,19 +310,11 @@ private void onClickAddNewPlaylist() {
String text = textBox.getText();

if (!text.isEmpty()) {
if (library.findPlaylistByTitle(text).isPresent()) {
System.out.println("TODO: Playlist already exists");
} else {

if (text.length() > MAX_PLAYLIST_TITLE_LENGTH) {
System.out.println("TODO: Playlist title is too long");
} else {
// all good
var playlist = library.addPlaylist(text);

addNewPlaylistToUI(playlist);
}
}


//add playlist to library
var playlist = library.addPlaylist(conformPlaylistName(text));
addNewPlaylistToUI(playlist);
}

canAnimateNewPlaylist = true;
Expand Down Expand Up @@ -337,18 +380,8 @@ public void onClickPlaylistMenu(MouseEvent e, Playlist playlist) {

String text = textBox.getText();

if (!text.isEmpty()) {
if (library.findPlaylistByTitle(text).isPresent()) {
System.out.println("TODO: Playlist already exists");
} else {

if (text.length() > MAX_PLAYLIST_TITLE_LENGTH) {
System.out.println("TODO: Playlist title is too long");
} else {
// all good
playlist.setTitle(text);
}
}
if (!text.isEmpty()&& !Objects.equals(playlist.getTitle(), text)) {
playlist.setTitle(conformPlaylistName(text));
}
}
});
Expand Down