From af7309da758fa5b6dedbad71be044701143b3492 Mon Sep 17 00:00:00 2001 From: Pinapelz Date: Sun, 5 Mar 2023 16:53:50 -0800 Subject: Code cleanup and fixed yt-dlp uploder id bug - Updated yt-dlp binary. Call update for each download to ensure its updated in the future - General code cleanup --- src/main/java/Main.java | 188 +++++++++++++++++++++++------------------------- 1 file changed, 90 insertions(+), 98 deletions(-) (limited to 'src') diff --git a/src/main/java/Main.java b/src/main/java/Main.java index cf81d38..2db3c51 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -2,28 +2,22 @@ import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.*; -import java.net.URL; -import java.net.URLConnection; import java.util.ArrayList; import java.util.Arrays; -import java.util.concurrent.TimeUnit; -import org.apache.commons.io.IOUtils; import org.jaudiotagger.audio.AudioFile; import org.jaudiotagger.audio.AudioFileIO; import org.jaudiotagger.tag.FieldKey; import org.jaudiotagger.tag.Tag; import org.jaudiotagger.tag.datatype.Artwork; + import javax.swing.*; import javax.swing.text.DefaultCaret; public class Main extends JFrame { - final String VERSION = "1.0"; String textPath = ""; - String versionURL = "https://pinapelz.github.io/ytmp3AutoTag/version.txt"; - - String formats[] = {"maxresdefault.jpg","mqdefault.jpg","hqdefault.jpg"}; + String formats[] = {"maxresdefault.jpg", "mqdefault.jpg", "hqdefault.jpg"}; JPanel panel = new JPanel(); JScrollPane scrollPane; @@ -35,7 +29,6 @@ public class Main extends JFrame { JProgressBar progressBar = new JProgressBar(); static JTextArea outputArea = new JTextArea(""); JLabel title = new JLabel("YouTube to MP3 Auto Tagging [1]"); - JLabel version = new JLabel("Version: " + VERSION); int progress = 0; Boolean useBlacklist = false; @@ -43,7 +36,7 @@ public class Main extends JFrame { Boolean useDefault = false; FileUtility fileUtil = new FileUtility(); - public Main(){ + public Main() { initializeComponents(); initializeActionsListeners(); } @@ -52,176 +45,158 @@ public class Main extends JFrame { new Main().setVisible(true); } - private void downloadAndTag(){ + private void downloadAndTag() { ArrayList songs = fileUtil.txtToArrayList(textPath); progress = 0; String timeAppend = ""; boolean partFlag = false; - for(int i = 0;i splitStamp = null; - try{ + try { splitStamp = new ArrayList<>(Arrays.asList(songs.get(i).split(","))); - } - catch(Exception e) { + } catch (Exception e) { } - if(splitStamp.size()>=2){ - timeAppend = youtubeToMP3Part(splitStamp.get(0),splitStamp.get(1)); + if (splitStamp.size() >= 2) { + timeAppend = youtubeToMP3Part(splitStamp.get(0), splitStamp.get(1)); partFlag = true; - } - else{ + } else { youtubeToMP3Full(songs.get(i)); } String info[] = fileUtil.parseJson(fileUtil.jsonToString(fileUtil.findJsonFile("downloaded"))); //title,uploader String uploader = info[1]; String title = info[0]; - if(useBlacklist){ + if (useBlacklist) { System.out.println("Using blacklist"); - uploader = fileUtil.removeBlacklist(uploader,"blacklist.txt"); - title = fileUtil.removeBlacklist(title,"blacklist.txt"); + uploader = fileUtil.removeBlacklist(uploader, "blacklist.txt"); + title = fileUtil.removeBlacklist(title, "blacklist.txt"); } AudioFile f = AudioFileIO.read(fileUtil.findMP3File("downloaded")); Tag tag = f.getTag(); - System.out.println("Uploader: "+uploader); - System.out.println("Title: "+title); + System.out.println("Uploader: " + uploader); + System.out.println("Title: " + title); tag.setField(FieldKey.ARTIST, uploader); tag.setField(FieldKey.TITLE, title); - fileUtil.downloadImage("https://img.youtube.com/vi/"+info[2]+"/","img.jpg",formats); + fileUtil.downloadImage("https://img.youtube.com/vi/" + info[2] + "/", "img.jpg", formats); Artwork cover = Artwork.createArtworkFromFile(new File("img.jpg")); tag.addField(cover); f.commit(); fileUtil.deleteFile("img.jpg"); - if(partFlag){ + if (partFlag) { fileUtil.moveFile(fileUtil.findMP3File("downloaded").getAbsolutePath(), "completed/" + fileUtil.removeNonAlphaNumeric(info[0]) + - " ["+info[2]+ "]"+timeAppend+".mp3"); - } - else{ + " [" + info[2] + "]" + timeAppend + ".mp3"); + } else { fileUtil.moveFile(fileUtil.findMP3File("downloaded").getAbsolutePath(), "completed/" + - fileUtil.removeNonAlphaNumeric(info[0]) + " ["+info[2]+ "].mp3"); + fileUtil.removeNonAlphaNumeric(info[0]) + " [" + info[2] + "].mp3"); } - outputArea.setText(outputArea.getText()+"\n"+"Moved file to Completed Folder"); + outputArea.setText(outputArea.getText() + "\n" + "Moved file to Completed Folder"); progress = i; - System.out.println("Current Progress " + calculatePercentage(i+1,songs.size())); - progressBar.setValue(calculatePercentage(i+1,songs.size())); + System.out.println("Current Progress " + calculatePercentage(i + 1, songs.size())); + progressBar.setValue(calculatePercentage(i + 1, songs.size())); } catch (Exception e) { e.printStackTrace(); } } } - private int calculatePercentage(int current, int total){//Calculate the percentage when give numerator and denominator + private int calculatePercentage(int current, int total) {//Calculate the percentage when give numerator and denominator double currentD = current; double totalD = total; - return (int)((currentD/totalD)*100); - } - - public static void showWarning(String message) { - JOptionPane.showMessageDialog(null, message, "JUST YOUR FRIENDLY NEIGHBORLY REMINDER", JOptionPane.WARNING_MESSAGE); + return (int) ((currentD / totalD) * 100); } public static void youtubeToMP3Full(String url) {//Download mp3 of youtube video using yt-dlp.exe. Ran from cmd try { + ProcessBuilder builder = new ProcessBuilder( "yt-dlp.exe", + "-vU", "--extract-audio", "--audio-format", "mp3", "--audio-quality", "0", "--output", "downloaded/%(title)s_%(id)s.mp3", - "--ffmpeg-location","ffmpeg.exe", + "--ffmpeg-location", "ffmpeg.exe", "--write-info-json", url ); builder.redirectErrorStream(true); Process p = builder.start(); - BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream())); - String line; - while (true) { - line = r.readLine(); - if (line == null) { - break; - } - outputArea.setText(outputArea.getText()+"\n"+line); - System.out.println(line); - } + relayConsole(p); } catch (Exception e) { + JOptionPane.showMessageDialog(null, "An Error occured while downloading using" + + " yt-dlp", "Error", JOptionPane.ERROR_MESSAGE); e.printStackTrace(); } } - public static String youtubeToMP3Part(String url,String stamp) {//Download mp3 of youtube video using yt-dlp.exe. Ran from cmd + + public static String youtubeToMP3Part(String url, String stamp) { //Download mp3 of youtube video using yt-dlp.exe. Ran from cmd System.out.println(url + " " + stamp); ArrayList times = new ArrayList<>(Arrays.asList(stamp.split("-"))); ArrayList startTimeComponents = new ArrayList<>(Arrays.asList(times.get(0).split(":"))); ArrayList endTimeComponents = new ArrayList<>(Arrays.asList(times.get(1).split(":"))); int startSec = 0; int endSec = 0; - if(startTimeComponents.size()==3){ - startSec = Integer.parseInt(startTimeComponents.get(0))*60*60+Integer.parseInt(startTimeComponents.get(1))*60+Integer.parseInt(startTimeComponents.get(2)); - } - else if(startTimeComponents.size()==2){ - startSec = Integer.parseInt(startTimeComponents.get(0))*60+Integer.parseInt(startTimeComponents.get(1)); + if (startTimeComponents.size() == 3) { + startSec = Integer.parseInt(startTimeComponents.get(0)) * 60 * 60 + Integer.parseInt(startTimeComponents.get(1)) * + 60 + Integer.parseInt(startTimeComponents.get(2)); + } else if (startTimeComponents.size() == 2) { + startSec = Integer.parseInt(startTimeComponents.get(0)) * 60 + Integer.parseInt(startTimeComponents.get(1)); } - if(endTimeComponents.size()==3){ - endSec = Integer.parseInt(endTimeComponents.get(0))*60*60+Integer.parseInt(endTimeComponents.get(1))*60+Integer.parseInt(endTimeComponents.get(2)); + if (endTimeComponents.size() == 3) { + endSec = Integer.parseInt(endTimeComponents.get(0)) * 60 * 60 + Integer.parseInt(endTimeComponents.get(1)) + * 60 + Integer.parseInt(endTimeComponents.get(2)); + } else if (endTimeComponents.size() == 2) { + endSec = Integer.parseInt(endTimeComponents.get(0)) * 60 + Integer.parseInt(endTimeComponents.get(1)); } - else if(endTimeComponents.size()==2){ - endSec = Integer.parseInt(endTimeComponents.get(0))*60+Integer.parseInt(endTimeComponents.get(1)); - } - try { + try { ProcessBuilder builder = new ProcessBuilder( "yt-dlp.exe", + "-vU", "--extract-audio", "--audio-format", "mp3", "--audio-quality", "0", "--output", "downloaded/%(title)s_%(id)s.mp3", - "--ffmpeg-location","ffmpeg.exe", - "--write-info-json","--download-sections","\"*"+startSec+"-"+endSec+"\"", + "--ffmpeg-location", "ffmpeg.exe", + "--write-info-json", "--download-sections", "\"*" + startSec + "-" + endSec + "\"", "--force-keyframes-at-cuts", url ); builder.redirectErrorStream(true); Process p = builder.start(); - BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream())); - String line; - while (true) { - line = r.readLine(); - if (line == null) { - break; - } - outputArea.setText(outputArea.getText()+"\n"+line); - System.out.println(line); - } + relayConsole(p); } catch (Exception e) { + JOptionPane.showMessageDialog(null, "An Error occured while downloading using" + + " yt-dlp", "Error", JOptionPane.ERROR_MESSAGE); e.printStackTrace(); } - return startSec+"to"+endSec; + return startSec + "to" + endSec; } - private void initializeComponents(){//Initiate GUI components + private void initializeComponents() {//Initiate GUI components this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setLocationRelativeTo(null); this.add(panel); - panel.setLayout(new BoxLayout(panel,BoxLayout.PAGE_AXIS)); + panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS)); scrollPane = new JScrollPane(outputArea); scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); outputArea.setEditable(true); outputArea.setLineWrap(true); - DefaultCaret caret = (DefaultCaret)outputArea.getCaret(); + DefaultCaret caret = (DefaultCaret) outputArea.getCaret(); caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE); - panel.add(Box.createRigidArea(new Dimension(0,5))); - panel.setBorder(BorderFactory.createEmptyBorder(25,10,20,10)); + panel.add(Box.createRigidArea(new Dimension(0, 5))); + panel.setBorder(BorderFactory.createEmptyBorder(25, 10, 20, 10)); startButton.setAlignmentX(CENTER_ALIGNMENT); title.setAlignmentX(Component.CENTER_ALIGNMENT); defaultFileBox.setAlignmentX(Component.CENTER_ALIGNMENT); useBlacklistBox.setAlignmentX(Component.CENTER_ALIGNMENT); editButton.setAlignmentX(Component.CENTER_ALIGNMENT); songsGen.setAlignmentX(Component.CENTER_ALIGNMENT); - version.setAlignmentX(Component.CENTER_ALIGNMENT); progressBar.setStringPainted(true); title.setFont(new Font("Verdana", Font.PLAIN, 14)); panel.add(title); @@ -236,18 +211,17 @@ public class Main extends JFrame { panel.add(editButton); panel.add(useBlacklistBox); panel.add(Box.createVerticalStrut(8)); - panel.add(version); - this.setSize(550,450); + this.setSize(550, 450); this.setTitle("YTMP3Tagger"); } - private void initializeActionsListeners(){//Add all actionlisteners for buttons + private void initializeActionsListeners() {//Add all actionlisteners for buttons defaultFileBox.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { File f = new File("songs.txt"); - if(f.exists()&!f.isDirectory()&&!useDefault) { + if (f.exists() & !f.isDirectory() && !useDefault) { System.out.println("songs found"); textPath = "songs.txt"; showWarning("Default File has been set.\nMake sure you add a new line for each URL"); @@ -257,8 +231,7 @@ public class Main extends JFrame { System.out.println("Ready to begin downloading. Press the button"); useDefault = true; - } - else{ + } else { useDefault = false; readyState = false; startButton.setText("Set .txt file"); @@ -269,10 +242,9 @@ public class Main extends JFrame { @Override public void actionPerformed(ActionEvent e) { - if(useBlacklistBox.isSelected()){ + if (useBlacklistBox.isSelected()) { useBlacklist = true; - } - else{ + } else { useBlacklist = false; } @@ -282,8 +254,8 @@ public class Main extends JFrame { startButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - if (readyState==false){ - outputArea.setText(outputArea.getText()+"\n"+"txt path has not been set. Launching chooserPane"); + if (readyState == false) { + outputArea.setText(outputArea.getText() + "\n" + "txt path has not been set. Launching chooserPane"); System.out.println(".txt path has not been set. Launching chooserPane"); textPath = fileUtil.showTextFileChooser(); try { @@ -294,12 +266,10 @@ public class Main extends JFrame { outputArea.setText(outputArea.getText() + "\n" + "Ready to begin downloading. Press the button"); System.out.println("Ready to begin downloading. Press the button"); } - } - catch(Exception ex){ + } catch (Exception ex) { } - } - else{ + } else { Runnable runnable = () -> { outputArea.setText(""); startButton.setEnabled(false); @@ -314,16 +284,38 @@ public class Main extends JFrame { }); editButton.addActionListener(new ActionListener() { @Override - public void actionPerformed(ActionEvent e){ + public void actionPerformed(ActionEvent e) { new TagEditorScreen().setVisible(true); } }); songsGen.addActionListener(new ActionListener() { @Override - public void actionPerformed(ActionEvent e){ + public void actionPerformed(ActionEvent e) { } }); } + public static void relayConsole(Process p) { + BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream())); + String cmd_line; + while (true) { + try { + cmd_line = r.readLine(); + if (cmd_line == null) { + break; + } + outputArea.setText(outputArea.getText() + "\n" + cmd_line); + System.out.println(cmd_line); + } + catch (IOException e) { + System.out.println("Error while relaying from CMD"); + } + } + } + + public static void showWarning(String message) { + JOptionPane.showMessageDialog(null, message, "JUST YOUR FRIENDLY NEIGHBORLY REMINDER", JOptionPane.WARNING_MESSAGE); + } + } -- cgit v1.2.3