From 792335e981ee93ae994560d12c5522a2d60cc4a0 Mon Sep 17 00:00:00 2001 From: ChomeNS <95471003+ChomeNS@users.noreply.github.com> Date: Tue, 19 Sep 2023 20:21:35 +0700 Subject: [PATCH] IMRPOVE MUSIC COMMAND !!!!!!!!!! --- .../chomens_bot/commands/MusicCommand.java | 76 ++++++++++++------- .../chomens_bot/util/PathUtilities.java | 19 +++++ 2 files changed, 68 insertions(+), 27 deletions(-) create mode 100644 src/main/java/land/chipmunk/chayapak/chomens_bot/util/PathUtilities.java diff --git a/src/main/java/land/chipmunk/chayapak/chomens_bot/commands/MusicCommand.java b/src/main/java/land/chipmunk/chayapak/chomens_bot/commands/MusicCommand.java index d7a2281a..4e1a1c0e 100644 --- a/src/main/java/land/chipmunk/chayapak/chomens_bot/commands/MusicCommand.java +++ b/src/main/java/land/chipmunk/chayapak/chomens_bot/commands/MusicCommand.java @@ -12,6 +12,7 @@ import land.chipmunk.chayapak.chomens_bot.song.Loop; import land.chipmunk.chayapak.chomens_bot.song.Note; import land.chipmunk.chayapak.chomens_bot.song.Song; import land.chipmunk.chayapak.chomens_bot.util.ColorUtilities; +import land.chipmunk.chayapak.chomens_bot.util.PathUtilities; import land.chipmunk.chayapak.chomens_bot.util.TimestampUtilities; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.JoinConfiguration; @@ -101,7 +102,7 @@ public class MusicCommand extends Command { path = Path.of(root.toString(), _path); - if (path.toString().contains("http")) player.loadSong(new URL(_path)); + if (path.toString().startsWith("http")) player.loadSong(new URL(_path)); else { // among us protection!!!11 if (!path.normalize().startsWith(root.toString())) throw new CommandException(Component.text("no")); @@ -117,27 +118,59 @@ public class MusicCommand extends Command { final Path realPath = Path.of(root.toString(), String.join(separator, pathSplittedClone)); - final String[] songs = realPath.toFile().list(); + try (DirectoryStream stream = Files.newDirectoryStream(realPath)) { + final List songsPaths = new ArrayList<>(); + for (Path eachPath : stream) songsPaths.add(eachPath); - if (songs == null) throw new CommandException(Component.text("Directory does not exist")); + PathUtilities.sort(songsPaths); - final String lowerCaseFile = pathSplitted[pathSplitted.length - 1].toLowerCase(); + final List songs = new ArrayList<>(); + for (Path eachPath : songsPaths) songs.add(eachPath.getFileName().toString()); - final String file = Arrays.stream(songs) - .filter(song -> song.equalsIgnoreCase(lowerCaseFile) || song.toLowerCase().contains(lowerCaseFile)) - .toArray(String[]::new)[0]; + final String lowerCaseFile = pathSplitted[pathSplitted.length - 1].toLowerCase(); - player.loadSong(Path.of(realPath.toString(), file)); + final String[] matchedArray = songs.stream() + .filter(song -> song.equalsIgnoreCase(lowerCaseFile) || song.toLowerCase().contains(lowerCaseFile)) + .toArray(String[]::new); + + if (matchedArray.length == 0) throw new CommandException(Component.text("Song not found")); + + final String file = matchedArray[0]; + + player.loadSong(Path.of(realPath.toString(), file)); + } catch (CommandException e) { + throw e; + } catch (NoSuchFileException e) { + throw new CommandException(Component.text("Directory does not exist")); + } catch (Exception e) { + e.printStackTrace(); + } } else { - final String[] songs = root.toFile().list(); + try (DirectoryStream stream = Files.newDirectoryStream(root)) { + final List songsPaths = new ArrayList<>(); + for (Path eachPath : stream) songsPaths.add(eachPath); - if (songs == null) return null; + PathUtilities.sort(songsPaths); - final String file = Arrays.stream(songs) - .filter(song -> song.equalsIgnoreCase(_path) || song.toLowerCase().contains(_path.toLowerCase())) - .toArray(String[]::new)[0]; + final List songs = new ArrayList<>(); + for (Path eachPath : songsPaths) songs.add(eachPath.getFileName().toString()); - player.loadSong(Path.of(root.toString(), file)); + final String[] matchedArray = songs.stream() + .filter(song -> song.equalsIgnoreCase(_path) || song.toLowerCase().contains(_path.toLowerCase())) + .toArray(String[]::new); + + if (matchedArray.length == 0) throw new CommandException(Component.text("Song not found")); + + final String file = matchedArray[0]; + + player.loadSong(Path.of(root.toString(), file)); + } catch (CommandException e) { + throw e; + } catch (NoSuchFileException e) { + throw new CommandException(Component.text("this will never happen ok??")); + } catch (Exception e) { + e.printStackTrace(); + } } } } catch (MalformedURLException e) { @@ -184,9 +217,7 @@ public class MusicCommand extends Command { case ALL -> { return Component.text("Now looping every song").color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor)); } - default -> { - throw new CommandException(Component.text("Invalid action")); - } + default -> throw new CommandException(Component.text("Invalid action")); } } @@ -210,16 +241,7 @@ public class MusicCommand extends Command { final List paths = new ArrayList<>(); for (Path eachPath : stream) paths.add(eachPath); - paths.sort((p1, p2) -> { - final String s1 = p1.getFileName().toString(); - final String s2 = p2.getFileName().toString(); - - int result = s1.compareToIgnoreCase(s2); - if (result == 0) { - return s2.compareTo(s1); - } - return result; - }); + PathUtilities.sort(paths); final List fullList = new ArrayList<>(); int i = 0; diff --git a/src/main/java/land/chipmunk/chayapak/chomens_bot/util/PathUtilities.java b/src/main/java/land/chipmunk/chayapak/chomens_bot/util/PathUtilities.java new file mode 100644 index 00000000..571e8b1b --- /dev/null +++ b/src/main/java/land/chipmunk/chayapak/chomens_bot/util/PathUtilities.java @@ -0,0 +1,19 @@ +package land.chipmunk.chayapak.chomens_bot.util; + +import java.nio.file.Path; +import java.util.List; + +public class PathUtilities { + public static void sort (List paths) { + paths.sort((p1, p2) -> { + final String s1 = p1.getFileName().toString(); + final String s2 = p2.getFileName().toString(); + + int result = s1.compareToIgnoreCase(s2); + if (result == 0) { + return s2.compareTo(s1); + } + return result; + }); + } +}