Compare commits
No commits in common. "617d1ebacf3cfaac50c0d9a1029dd25acf372180" and "7c1000ba5507d4726d874111f517a7c852b2bafd" have entirely different histories.
617d1ebacf
...
7c1000ba55
|
@ -54,6 +54,3 @@ nbbuild/
|
||||||
dist/
|
dist/
|
||||||
nbdist/
|
nbdist/
|
||||||
.nb-gradle/
|
.nb-gradle/
|
||||||
|
|
||||||
# Secrets!
|
|
||||||
secrets.yml
|
|
7
pom.xml
7
pom.xml
|
@ -37,6 +37,11 @@
|
||||||
<artifactId>JDA</artifactId>
|
<artifactId>JDA</artifactId>
|
||||||
<version>4.3.0_277</version>
|
<version>4.3.0_277</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.humble</groupId>
|
||||||
|
<artifactId>humble-video-all</artifactId>
|
||||||
|
<version>0.3.0</version>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>commons-io</groupId>
|
<groupId>commons-io</groupId>
|
||||||
<artifactId>commons-io</artifactId>
|
<artifactId>commons-io</artifactId>
|
||||||
|
@ -53,4 +58,4 @@
|
||||||
<maven.compiler.source>11</maven.compiler.source>
|
<maven.compiler.source>11</maven.compiler.source>
|
||||||
<maven.compiler.target>11</maven.compiler.target>
|
<maven.compiler.target>11</maven.compiler.target>
|
||||||
</properties>
|
</properties>
|
||||||
</project>
|
</project>
|
|
@ -6,12 +6,8 @@
|
||||||
package moe.nekojimi.chords;
|
package moe.nekojimi.chords;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
import java.nio.file.Files;
|
|
||||||
import java.nio.file.attribute.FileAttribute;
|
|
||||||
import java.nio.file.attribute.PosixFilePermission;
|
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
|
@ -24,9 +20,6 @@ import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
import javax.json.Json;
|
|
||||||
import javax.json.JsonObject;
|
|
||||||
import javax.json.JsonReader;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
@ -40,8 +33,6 @@ public class Downloader implements Consumer<Song>
|
||||||
private Consumer<Song> next;
|
private Consumer<Song> next;
|
||||||
private BiConsumer<Song, Exception> messageHandler;
|
private BiConsumer<Song, Exception> messageHandler;
|
||||||
|
|
||||||
private File downloadDir = null;
|
|
||||||
|
|
||||||
public Downloader()
|
public Downloader()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -51,7 +42,6 @@ public class Downloader implements Consumer<Song>
|
||||||
public void accept(Song song)
|
public void accept(Song song)
|
||||||
{
|
{
|
||||||
downloadQueue.add(song);
|
downloadQueue.add(song);
|
||||||
getInfo(song);
|
|
||||||
exec.submit(new Runnable()
|
exec.submit(new Runnable()
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
|
@ -67,49 +57,29 @@ public class Downloader implements Consumer<Song>
|
||||||
this.next = next;
|
this.next = next;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void getInfo(Song song)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
String cmd = "/usr/bin/youtube-dl --skip-download --print-json " + song.getUrl().toString();
|
|
||||||
Process exec = runCommand(cmd, 5);
|
|
||||||
InputStream input = exec.getInputStream();
|
|
||||||
JsonReader reader = Json.createReader(input);
|
|
||||||
JsonObject object = reader.readObject();
|
|
||||||
if (song.getTitle() == null)
|
|
||||||
song.setTitle(object.getString("title", null));
|
|
||||||
if (song.getArtist() == null)
|
|
||||||
song.setArtist(object.getString("uploader", null));
|
|
||||||
} catch (Exception ex)
|
|
||||||
{
|
|
||||||
Logger.getLogger(Downloader.class.getName()).log(Level.SEVERE, null, ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private File getDownloadDir() throws IOException
|
|
||||||
{
|
|
||||||
if (downloadDir == null || !downloadDir.exists() || !downloadDir.canWrite())
|
|
||||||
downloadDir = Files.createTempDirectory("chords").toFile();
|
|
||||||
return downloadDir;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void download(Song song)
|
private void download(Song song)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
||||||
messageHandler.accept(song, null);
|
messageHandler.accept(song, null);
|
||||||
String cmd = "/usr/bin/youtube-dl -x -f=worstaudio/worst --audio-format=wav --no-playlist -o " + getDownloadDir().getAbsolutePath() + "/%(title)s.%(ext)s " + song.getUrl().toString();
|
String cmd = "/usr/bin/youtube-dl -x -f=worstaudio/worst --audio-format=wav --no-playlist --write-info-json " + song.getUrl().toString();
|
||||||
Process exec = runCommand(cmd, 300);
|
System.out.println("Running command: " + cmd);
|
||||||
|
// Process exec = Runtime.getRuntime().exec().split(" "));
|
||||||
|
Process exec = new ProcessBuilder(cmd.split(" ")).redirectOutput(ProcessBuilder.Redirect.PIPE).start();
|
||||||
|
boolean done = exec.waitFor(300, TimeUnit.SECONDS);
|
||||||
|
if (!done)
|
||||||
|
{
|
||||||
|
exec.destroyForcibly();
|
||||||
|
throw new RuntimeException("Took too long to download, giving up.");
|
||||||
|
}
|
||||||
InputStream in = exec.getInputStream();
|
InputStream in = exec.getInputStream();
|
||||||
String output = new String(in.readAllBytes(), Charset.defaultCharset());
|
String output = new String(in.readAllBytes(), Charset.defaultCharset());
|
||||||
String error = new String(exec.getErrorStream().readAllBytes(), Charset.defaultCharset());
|
|
||||||
System.out.println(output);
|
System.out.println(output);
|
||||||
Matcher matcher = Pattern.compile("Destination: (.*\\.wav)").matcher(output);
|
Matcher matcher = Pattern.compile("Destination: (.*\\.wav)").matcher(output);
|
||||||
if (matcher.find())
|
if (matcher.find())
|
||||||
song.setLocation(new File(matcher.group(1)));
|
song.setLocation(new File(matcher.group(1)));
|
||||||
else if (exec.exitValue() != 0)
|
else if (exec.exitValue() != 0)
|
||||||
throw new RuntimeException("youtube-dl failed with error " + exec.exitValue() + ", output:\n" + error);
|
throw new RuntimeException("youtube-dl failed with error " + exec.exitValue());
|
||||||
// return true;
|
// return true;
|
||||||
|
|
||||||
if (next != null)
|
if (next != null)
|
||||||
|
@ -125,20 +95,6 @@ public class Downloader implements Consumer<Song>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Process runCommand(String cmd, int timeoutSecs) throws RuntimeException, IOException, InterruptedException
|
|
||||||
{
|
|
||||||
System.out.println("Running command: " + cmd);
|
|
||||||
// Process exec = Runtime.getRuntime().exec().split(" "));
|
|
||||||
Process exec = new ProcessBuilder(cmd.split(" ")).redirectOutput(ProcessBuilder.Redirect.PIPE).redirectError(ProcessBuilder.Redirect.PIPE).start();
|
|
||||||
boolean done = exec.waitFor(timeoutSecs, TimeUnit.SECONDS);
|
|
||||||
if (!done)
|
|
||||||
{
|
|
||||||
exec.destroyForcibly();
|
|
||||||
throw new RuntimeException("Took too long, giving up.");
|
|
||||||
}
|
|
||||||
return exec;
|
|
||||||
}
|
|
||||||
|
|
||||||
public BiConsumer<Song, Exception> getMessageHandler()
|
public BiConsumer<Song, Exception> getMessageHandler()
|
||||||
{
|
{
|
||||||
return messageHandler;
|
return messageHandler;
|
||||||
|
|
|
@ -33,7 +33,7 @@ import net.dv8tion.jda.api.utils.cache.CacheFlag;
|
||||||
public class Main extends ListenerAdapter
|
public class Main extends ListenerAdapter
|
||||||
{
|
{
|
||||||
|
|
||||||
private static final double SEARCH_SCORE_THRESHOLD_AUTOPLAY = 9999; // disable autoplay it sucks
|
private static final double SEARCH_SCORE_THRESHOLD_AUTOPLAY = 0.9;
|
||||||
private static final double SEARCH_SCORE_THRESHOLD_DISPLAY = 0.6;
|
private static final double SEARCH_SCORE_THRESHOLD_DISPLAY = 0.6;
|
||||||
|
|
||||||
private MusicHandler musicHandler;
|
private MusicHandler musicHandler;
|
||||||
|
@ -83,15 +83,15 @@ public class Main extends ListenerAdapter
|
||||||
downloader.setMessageHandler((Song song, Exception ex) ->
|
downloader.setMessageHandler((Song song, Exception ex) ->
|
||||||
{
|
{
|
||||||
TextChannel channel = jda.getTextChannelById(song.getRequestedIn());
|
TextChannel channel = jda.getTextChannelById(song.getRequestedIn());
|
||||||
// String bracketNo = "[" + song.getNumber() + "] ";
|
String bracketNo = "[" + song.getNumber() + "] ";
|
||||||
if (channel != null)
|
if (channel != null)
|
||||||
if (ex == null)
|
if (ex == null)
|
||||||
if (song.getLocation() != null)
|
if (song.getLocation() != null)
|
||||||
channel.sendMessage(/*bracketNo + */"Finished downloading " + song + " for " + song.getRequestedBy() + ", added to queue!").queue();
|
channel.sendMessage(bracketNo + "Finished downloading " + song + " for " + song.getRequestedBy() + ", added to queue!").queue();
|
||||||
else
|
else
|
||||||
channel.sendMessage(/*bracketNo + */"Now downloading " + song + " for " + song.getRequestedBy() + " ...").queue();
|
channel.sendMessage(bracketNo + "Now downloading " + song + " for " + song.getRequestedBy() + " ...").queue();
|
||||||
else
|
else
|
||||||
channel.sendMessage(/*bracketNo + */"Failed to download " + song + " for " + song.getRequestedBy() + "! Reason: " + ex.getMessage()).queue();
|
channel.sendMessage(bracketNo + "Failed to download " + song + " for " + song.getRequestedBy() + "! Reason: " + ex.getMessage()).queue();
|
||||||
|
|
||||||
});
|
});
|
||||||
searcher = MetaSearcher.loadYAML(new File("searchproviders.yml"));
|
searcher = MetaSearcher.loadYAML(new File("searchproviders.yml"));
|
||||||
|
@ -220,7 +220,7 @@ public class Main extends ListenerAdapter
|
||||||
if (index >= 1 && index <= size)
|
if (index >= 1 && index <= size)
|
||||||
{
|
{
|
||||||
Result res = lastSearchResults.get(index - 1);
|
Result res = lastSearchResults.get(index - 1);
|
||||||
queueDownload(res, event);
|
queueDownload(res.getLink(), event);
|
||||||
// event.getChannel().sendMessage("Song removed.").queue();
|
// event.getChannel().sendMessage("Song removed.").queue();
|
||||||
} else if (size > 1)
|
} else if (size > 1)
|
||||||
event.getChannel().sendMessage("That's not a number between 1 and " + size + "!").queue();
|
event.getChannel().sendMessage("That's not a number between 1 and " + size + "!").queue();
|
||||||
|
@ -282,7 +282,7 @@ public class Main extends ListenerAdapter
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Song queueDownload(final URL url, GuildMessageReceivedEvent event)
|
private void queueDownload(final URL url, GuildMessageReceivedEvent event)
|
||||||
{
|
{
|
||||||
Song song = new Song(url);
|
Song song = new Song(url);
|
||||||
song.setRequestedBy(event.getAuthor().getName());
|
song.setRequestedBy(event.getAuthor().getName());
|
||||||
|
@ -290,16 +290,6 @@ public class Main extends ListenerAdapter
|
||||||
song.setNumber(trackNumber);
|
song.setNumber(trackNumber);
|
||||||
trackNumber++;
|
trackNumber++;
|
||||||
downloader.accept(song);
|
downloader.accept(song);
|
||||||
return song;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Song queueDownload(Result res, GuildMessageReceivedEvent event)
|
|
||||||
{
|
|
||||||
Song song = queueDownload(res.getLink(), event);
|
|
||||||
song.setArtist(res.getArtist());
|
|
||||||
song.setTitle(res.getTitle());
|
|
||||||
song.setNumber(trackNumber);
|
|
||||||
return song;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onRestartCommand(GuildMessageReceivedEvent event)
|
private void onRestartCommand(GuildMessageReceivedEvent event)
|
||||||
|
|
|
@ -103,17 +103,10 @@ public class Song
|
||||||
@Override
|
@Override
|
||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
String ret = "";
|
|
||||||
if (artist != null && !artist.isEmpty())
|
|
||||||
ret += artist + " - ";
|
|
||||||
|
|
||||||
if (title != null && !title.isEmpty())
|
if (title != null && !title.isEmpty())
|
||||||
ret += title;
|
return title;
|
||||||
|
else
|
||||||
if (ret.isEmpty())
|
return "track " + number;
|
||||||
ret = "track " + number;
|
|
||||||
|
|
||||||
return "[" + number + "] " + ret;
|
|
||||||
// return url.toExternalForm();
|
// return url.toExternalForm();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue