From 7a52a122cd71ce5203f78e56635f886333c96179 Mon Sep 17 00:00:00 2001 From: NewKey Date: Wed, 14 Dec 2016 19:47:27 -0500 Subject: [PATCH] --- build.xml | 73 ++ manifest.mf | 3 + nbproject/build-impl.xml | 1419 +++++++++++++++++++++++++++++++++ nbproject/genfiles.properties | 8 + nbproject/project.properties | 76 ++ nbproject/project.xml | 15 + src/OsuShrinker/RunIt.java | 388 +++++++++ src/OsuShrinker/Window.form | 380 +++++++++ src/OsuShrinker/Window.java | 499 ++++++++++++ src/OsuShrinker/ico.png | Bin 0 -> 7569 bytes 10 files changed, 2861 insertions(+) create mode 100644 build.xml create mode 100644 manifest.mf create mode 100644 nbproject/build-impl.xml create mode 100644 nbproject/genfiles.properties create mode 100644 nbproject/project.properties create mode 100644 nbproject/project.xml create mode 100644 src/OsuShrinker/RunIt.java create mode 100644 src/OsuShrinker/Window.form create mode 100644 src/OsuShrinker/Window.java create mode 100644 src/OsuShrinker/ico.png diff --git a/build.xml b/build.xml new file mode 100644 index 0000000..11f8a22 --- /dev/null +++ b/build.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + Builds, tests, and runs the project Osu_Shrinker. + + + diff --git a/manifest.mf b/manifest.mf new file mode 100644 index 0000000..1574df4 --- /dev/null +++ b/manifest.mf @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +X-COMMENT: Main-Class will be added automatically by build + diff --git a/nbproject/build-impl.xml b/nbproject/build-impl.xml new file mode 100644 index 0000000..b88afea --- /dev/null +++ b/nbproject/build-impl.xml @@ -0,0 +1,1419 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set src.dir + Must set test.src.dir + Must set build.dir + Must set dist.dir + Must set build.classes.dir + Must set dist.javadoc.dir + Must set build.test.classes.dir + Must set build.test.results.dir + Must set build.classes.excludes + Must set dist.jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No tests executed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set JVM to use for profiling in profiler.info.jvm + Must set profiler agent JVM arguments in profiler.info.jvmargs.agent + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + To run this application from the command line without Ant, try: + + java -jar "${dist.jar.resolved}" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + Must select one file in the IDE or set run.class + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + Must select one file in the IDE or set debug.class + + + + + Must set fix.includes + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + Must select one file in the IDE or set profile.class + This target only works when run from inside the NetBeans IDE. + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + + + Must select some files in the IDE or set test.includes + + + + + Must select one file in the IDE or set run.class + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + Some tests failed; see details above. + + + + + + + + + Must select some files in the IDE or set test.includes + + + + Some tests failed; see details above. + + + + Must select some files in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + Some tests failed; see details above. + + + + + Must select one file in the IDE or set test.class + + + + Must select one file in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + + + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/nbproject/genfiles.properties b/nbproject/genfiles.properties new file mode 100644 index 0000000..48c669f --- /dev/null +++ b/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=a389ccf1 +build.xml.script.CRC32=a2ccc2bf +build.xml.stylesheet.CRC32=8064a381@1.79.1.48 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=a389ccf1 +nbproject/build-impl.xml.script.CRC32=1ba23e68 +nbproject/build-impl.xml.stylesheet.CRC32=05530350@1.79.1.48 diff --git a/nbproject/project.properties b/nbproject/project.properties new file mode 100644 index 0000000..755bb6f --- /dev/null +++ b/nbproject/project.properties @@ -0,0 +1,76 @@ +annotation.processing.enabled=true +annotation.processing.enabled.in.editor=false +annotation.processing.processors.list= +annotation.processing.run.all.processors=true +annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output +application.title=Osu_Shrinker +application.vendor=newkey +build.classes.dir=${build.dir}/classes +build.classes.excludes=**/*.java,**/*.form +# This directory is removed when the project is cleaned: +build.dir=build +build.generated.dir=${build.dir}/generated +build.generated.sources.dir=${build.dir}/generated-sources +# Only compile against the classpath explicitly listed here: +build.sysclasspath=ignore +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +# Uncomment to specify the preferred debugger connection transport: +#debug.transport=dt_socket +debug.classpath=\ + ${run.classpath} +debug.test.classpath=\ + ${run.test.classpath} +# Files in build.classes.dir which should be excluded from distribution jar +dist.archive.excludes= +# This directory is removed when the project is cleaned: +dist.dir=dist +dist.jar=${dist.dir}/Osu_Shrinker.jar +dist.javadoc.dir=${dist.dir}/javadoc +endorsed.classpath= +excludes= +includes=** +jar.compress=false +javac.classpath= +# Space-separated list of extra javac options +javac.compilerargs= +javac.deprecation=false +javac.external.vm=true +javac.processorpath=\ + ${javac.classpath} +javac.source=1.8 +javac.target=1.8 +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +javac.test.processorpath=\ + ${javac.test.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding=${source.encoding} +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +main.class=OsuShrinker.Window +manifest.file=manifest.mf +meta.inf.dir=${src.dir}/META-INF +mkdist.disabled=false +platform.active=default_platform +run.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +# Space-separated list of JVM arguments used when running the project. +# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value. +# To set system properties for unit tests define test-sys-prop.name=value: +run.jvmargs= +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +source.encoding=UTF-8 +src.dir=src +test.src.dir=test diff --git a/nbproject/project.xml b/nbproject/project.xml new file mode 100644 index 0000000..5e5a68b --- /dev/null +++ b/nbproject/project.xml @@ -0,0 +1,15 @@ + + + org.netbeans.modules.java.j2seproject + + + Osu_Shrinker + + + + + + + + + diff --git a/src/OsuShrinker/RunIt.java b/src/OsuShrinker/RunIt.java new file mode 100644 index 0000000..1540717 --- /dev/null +++ b/src/OsuShrinker/RunIt.java @@ -0,0 +1,388 @@ +/* + [Osu!Shrinker] + Copyright (C) 2016 NewKey + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +*/ + + +package OsuShrinker; + +import java.util.List; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Set; +import java.io.BufferedInputStream; +import java.io.DataInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import javax.swing.JOptionPane; + +public class RunIt{ + + public static boolean find=false,pause=false; + public static boolean Astd=false,Ataiko=false,Amania=false,Afruts=false; + public static List alertFiles = new ArrayList<>(); + public static File folder; + public static Runnable runnable = new Runnable() { + @Override + public void run() { + } + }; + public static Thread Thread= new Thread(); + + + + public static void Run() { + Runnable runnable = new Runnable() { + public void run() { + do{ + alertFiles = new ArrayList<>(); + List songs = Folder(folder); + List files = Files(songs); + Osu(files); + List pareF = pare(files,alertFiles); + // + + int respon = JOptionPane.showConfirmDialog(null, "We found for: \n"+ + ("-------------------- \n") + + + ((!Window.C_STD.isSelected())? Window.N_STD.getText()+": Osu!Standard Map's Songs. \n" : "") + + + ((!Window.C_Taiko.isSelected())? Window.N_Taiko.getText()+": Osu!Taiko Map's Songs. \n" : "") + + + ((!Window.C_CTB.isSelected())? Window.N_CTB.getText()+": Osu! Catch the Beat Map's Songs. \n" : "") + + + ((!Window.C_Mania.isSelected())? Window.N_Mania.getText()+": Osu!mania Songs. \n": "") + + + ("-------------------- \n") + + + ("Are you sure to delete PERMANENTLY those maps? \n") + , "ALERT", + JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); + if (respon == JOptionPane.YES_OPTION) { + delete(pareF,files,songs); + aux("END"); + } + if (respon == JOptionPane.NO_OPTION) { + Window.Clean(); + } + }while(pause); + } + }; + Thread = new Thread(runnable); + Thread.start(); + + } + + + public static void Stop(){ + Thread.stop(); + } + + public static void Pause(){ + pause=true; + } + + public static void Resume(){ + pause=false; + } + + public static List Folder(File Ruta){ + List route = new ArrayList<>(); + for (File file : Ruta.listFiles()) + if (file.isDirectory()) { + route.add(file.getAbsolutePath()); + } + return route; + }//Folder + + public static List Files(List songs){ + List files = new ArrayList<>(); + aux("Indexing Folders."); + for(int i=0;i osu){ + aux("Analyzing songs and maps."); + Window.ProgressBar.setMaximum(osu.size()); + Window.L_max.setText(osu.size()+""); + for(int i=0;i pareF, List files,List songs){ + List del = new ArrayList<>(pareF); + aux("Deleting files."); + try { + for (int i=0;i pare(List files,List alertFiles){ + aux("Almost done, wait."); + List forSave = new ArrayList<>(); + files.removeAll(alertFiles); + List del = new ArrayList<>(files); + Set hs = new HashSet<>(); + hs.addAll(del); + forSave.clear(); + forSave.addAll(hs); + List forDell = new ArrayList<>(hs); + aux("Done."); + return forDell; + } + + public static void read(String osuRoute){ + do{ + alertFiles.add(osuRoute); + String route = osuRoute.substring(0,osuRoute.indexOf("\\",osuRoute.indexOf("Songs\\")+7)); + File file = new File(osuRoute); + FileInputStream fis = null; + BufferedInputStream bis = null; + DataInputStream dis = null; + try { + fis = new FileInputStream(file); + bis = new BufferedInputStream(fis); + dis = new DataInputStream(bis); + while (dis.available() != 0) { + String Line=dis.readLine(); + if(Line.startsWith("AudioFilename:")) + alertFiles.add(route+File.separator+Line.substring(Line.indexOf(":")+2, Line.length())); + if(Line.startsWith("0,0,")) + alertFiles.add(route+File.separator+Line.substring(Line.indexOf("\"")+1, Line.lastIndexOf("\""))); + if(Line.contains("[TimingPoints]")) + break; + } + fis.close(); + bis.close(); + dis.close(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + }while(pause==true); + } + + + public static List readOsu(String osuRoute){ + String mod = mode(osuRoute); + if(mod.equals("0")) + Window.N_STD.setText((Integer.parseInt(Window.N_STD.getText())+1)+""); + if(mod.equals("1")) + Window.N_Taiko.setText((Integer.parseInt(Window.N_Taiko.getText())+1)+""); + if(mod.equals("2")) + Window.N_CTB.setText((Integer.parseInt(Window.N_CTB.getText())+1)+""); + if(mod.equals("3")) + Window.N_Mania.setText((Integer.parseInt(Window.N_Mania.getText())+1)+""); + if(mod.equals("0") && Astd) + read(osuRoute); + if(mod.equals("1") && Ataiko) + read(osuRoute); + if(mod.equals("2") && Afruts) + read(osuRoute); + if(mod.equals("3") && Amania) + read(osuRoute); + return alertFiles; + } + + + public static void aux(Object aux){ + Window.T_Area.setText(Window.T_Area.getText()+aux.toString()+"\n"); + int len = Window.T_Area.getDocument().getLength(); + Window.T_Area.setCaretPosition(len); + } + /* +static boolean v1=false,v2=false,v3=false,v4=false,v5=false,v6=false,v7=false,v8=false, + v9=false,v10=false,v11=false,v12=false,v13=false,v14=false,v15=false; + + private static boolean iden(String Line, String osuRoute,boolean notfind) { + + if(Line.contains("v1") && v1==false){ + copy(osuRoute,"1",false,count); + v1=true; + return true; + } + if(Line.contains("v2") && v2==false){ + copy(osuRoute,"2",false,count); v2=true; + return true; + } + if(Line.contains("v3") && v3==false){ + copy(osuRoute,"3",false,count); v3=true; + return true; + } + if(Line.contains("v4") && v4==false){ + copy(osuRoute,"4",false,count); v4=true; + return true; + } + if(Line.contains("v5") && v5==false){ + copy(osuRoute,"5",false,count); v5=true; + return true; + } + if(Line.contains("v6") && v6==false){ + copy(osuRoute,"6",false,count); v6=true; + return true; + } + if(Line.contains("v7") && v7==false){ + copy(osuRoute,"7",false,count); v7=true; + return true; + } + if(Line.contains("v8") && v8==false){ + copy(osuRoute,"8",false,count); v8=true; + return true; + } + if(Line.contains("v9") && v9==false){ + copy(osuRoute,"9",false,count); v9=true; + return true; + } + if(Line.contains("v10") && v10==false){ + copy(osuRoute,"10",false,count); v10=true; + return true; + } + if(Line.contains("v11") && v11==false){ + copy(osuRoute,"11",false,count); v11=true; + return true; + } + if(Line.contains("v12") && v2==false){ + copy(osuRoute,"12",false,count); v12=true; + return true; + } + if(Line.contains("v13") && v13==false){ + copy(osuRoute,"13",false,count); v13=true; + return true; + } + if(Line.contains("v14") && v14==false){ + copy(osuRoute,"14",false,count); v14=true; + return true; + } + if(Line.contains("v15") && v15==false){ + copy(osuRoute,"15",false,count); v15=true; + return true; + } + if(notfind==true){ + count++; + copy(osuRoute," XXXX",true,count); return true; + } + return false; + } + + static int count = 0; + public static void copy(String osuRoute, String V,boolean x,int c){ + try { + File destDir = new File("C:\\Users\\miguel\\Desktop\\Songs"); + File srcFile = new File(osuRoute); + //FileUtils.copyFileToDirectory(srcFile, destDir); + if(x==true) + FileUtils.copyFile(srcFile,new File(destDir+File.separator+"VERSION "+V+" "+c)); + else + FileUtils.copyFile(srcFile,new File(destDir+File.separator+"VERSION "+V)); + } catch (IOException iOException) { + iOException.printStackTrace(); + } + } +*/ +} diff --git a/src/OsuShrinker/Window.form b/src/OsuShrinker/Window.form new file mode 100644 index 0000000..6cb673d --- /dev/null +++ b/src/OsuShrinker/Window.form @@ -0,0 +1,380 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/OsuShrinker/Window.java b/src/OsuShrinker/Window.java new file mode 100644 index 0000000..9d4e523 --- /dev/null +++ b/src/OsuShrinker/Window.java @@ -0,0 +1,499 @@ +/* + [Osu!Shrinker] + Copyright (C) 2016 NewKey + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +*/ + + +package OsuShrinker; + +import javax.swing.JOptionPane; +import javax.swing.JDialog; +import javax.swing.*; +import java.awt.*; +import java.io.File; +import java.awt.Cursor; +import java.awt.Desktop; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; + + +public class Window extends javax.swing.JFrame { + + private static boolean caution=false; + private boolean pass; + + + public Window() { + initComponents(); + } + + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + ProgressBar = new javax.swing.JProgressBar(); + Scroll = new javax.swing.JScrollPane(); + T_Area = new javax.swing.JTextPane(); + L_madeBy = new javax.swing.JLabel(); + B_Clear = new javax.swing.JButton(); + Panel = new javax.swing.JPanel(); + L_Alert = new javax.swing.JLabel(); + C_Taiko = new javax.swing.JCheckBox(); + C_Mania = new javax.swing.JCheckBox(); + C_CTB = new javax.swing.JCheckBox(); + B_SelectFolder = new javax.swing.JButton(); + L_Status = new javax.swing.JLabel(); + C_STD = new javax.swing.JCheckBox(); + L_STD = new javax.swing.JLabel(); + N_STD = new javax.swing.JLabel(); + L_Taiko = new javax.swing.JLabel(); + N_Taiko = new javax.swing.JLabel(); + L_CTB = new javax.swing.JLabel(); + N_CTB = new javax.swing.JLabel(); + L_Mania = new javax.swing.JLabel(); + N_Mania = new javax.swing.JLabel(); + B_Run = new javax.swing.JButton(); + B_Pause = new javax.swing.JToggleButton(); + jLabel1 = new javax.swing.JLabel(); + L_i = new javax.swing.JLabel(); + L_max = new javax.swing.JLabel(); + L_Separetor = new javax.swing.JLabel(); + + setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); + setTitle("Osu!Shrinker"); + setResizable(false); + + T_Area.setEditable(false); + Scroll.setViewportView(T_Area); + + L_madeBy.setText("Made by player: NewKey"); + + B_Clear.setText("Clear all (Stop)"); + B_Clear.setFocusable(false); + B_Clear.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + B_ClearActionPerformed(evt); + } + }); + + L_Alert.setText("Check the game Mode to Analyze, The rest will be PERMANENTLY DELETE "); + L_Alert.setToolTipText(""); + + C_Taiko.setText("Taiko"); + C_Taiko.setFocusPainted(false); + + C_Mania.setText("osu!mania"); + C_Mania.setFocusPainted(false); + + C_CTB.setText("Catch the Beat"); + C_CTB.setFocusPainted(false); + + B_SelectFolder.setText("Select Songs Folder"); + B_SelectFolder.setBorderPainted(false); + B_SelectFolder.setFocusPainted(false); + B_SelectFolder.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + B_SelectFolderActionPerformed(evt); + } + }); + + L_Status.setText("Status: INCORRECT "); + + C_STD.setText("Osu! Standard"); + C_STD.setFocusPainted(false); + + L_STD.setText("STD: "); + + N_STD.setText("0"); + + L_Taiko.setText("Taiko:"); + + N_Taiko.setText("0"); + + L_CTB.setText("CTB:"); + + N_CTB.setText("0"); + + L_Mania.setText("Mania:"); + + N_Mania.setText("0"); + + B_Run.setText("RUN"); + B_Run.setEnabled(false); + B_Run.setFocusable(false); + B_Run.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + B_RunActionPerformed(evt); + } + }); + + javax.swing.GroupLayout PanelLayout = new javax.swing.GroupLayout(Panel); + Panel.setLayout(PanelLayout); + PanelLayout.setHorizontalGroup( + PanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(PanelLayout.createSequentialGroup() + .addGroup(PanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, PanelLayout.createSequentialGroup() + .addContainerGap() + .addGroup(PanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) + .addComponent(L_Alert) + .addGroup(PanelLayout.createSequentialGroup() + .addGroup(PanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(PanelLayout.createSequentialGroup() + .addComponent(L_STD) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(N_STD, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(L_Taiko) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(N_Taiko, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(javax.swing.GroupLayout.Alignment.CENTER, PanelLayout.createSequentialGroup() + .addComponent(C_STD) + .addGap(2, 2, 2) + .addComponent(C_Taiko))) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(PanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(C_CTB) + .addGroup(PanelLayout.createSequentialGroup() + .addComponent(L_CTB) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(N_CTB, javax.swing.GroupLayout.PREFERRED_SIZE, 42, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(PanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(PanelLayout.createSequentialGroup() + .addComponent(L_Mania) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(N_Mania, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addComponent(C_Mania))))) + .addGroup(PanelLayout.createSequentialGroup() + .addGroup(PanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(PanelLayout.createSequentialGroup() + .addGap(107, 107, 107) + .addGroup(PanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) + .addComponent(L_Status, javax.swing.GroupLayout.PREFERRED_SIZE, 108, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(B_SelectFolder))) + .addGroup(PanelLayout.createSequentialGroup() + .addGap(105, 105, 105) + .addComponent(B_Run, javax.swing.GroupLayout.PREFERRED_SIZE, 128, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addGap(0, 0, Short.MAX_VALUE))) + .addContainerGap()) + ); + PanelLayout.setVerticalGroup( + PanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(PanelLayout.createSequentialGroup() + .addContainerGap() + .addComponent(L_Status) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(B_SelectFolder) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(L_Alert) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(PanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(C_STD) + .addComponent(C_Taiko) + .addComponent(C_CTB) + .addComponent(C_Mania)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(PanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(PanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(L_Mania) + .addComponent(N_Mania)) + .addGroup(PanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(L_CTB) + .addComponent(N_CTB)) + .addGroup(PanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(L_Taiko) + .addComponent(N_Taiko)) + .addGroup(PanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(L_STD) + .addComponent(N_STD))) + .addGap(18, 18, 18) + .addComponent(B_Run) + .addContainerGap()) + ); + + B_Pause.setText("||"); + B_Pause.setEnabled(false); + B_Pause.setFocusable(false); + B_Pause.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + B_PauseActionPerformed(evt); + } + }); + + jLabel1.setText("Files:"); + + L_i.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); + L_i.setText("0"); + + L_max.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); + L_max.setText("0"); + + L_Separetor.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); + L_Separetor.setText("/"); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); + getContentPane().setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(ProgressBar, javax.swing.GroupLayout.Alignment.CENTER, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(Panel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(Scroll) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addGap(0, 0, Short.MAX_VALUE) + .addComponent(L_madeBy)) + .addGroup(layout.createSequentialGroup() + .addComponent(jLabel1) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(L_i, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(L_Separetor) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(L_max, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(B_Pause) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(B_Clear))) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(Panel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGap(0, 0, 0) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(B_Clear) + .addComponent(B_Pause) + .addComponent(jLabel1) + .addComponent(L_i) + .addComponent(L_max) + .addComponent(L_Separetor)) + .addGap(0, 0, 0) + .addComponent(Scroll, javax.swing.GroupLayout.PREFERRED_SIZE, 85, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(ProgressBar, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(L_madeBy)) + ); + + pack(); + }// //GEN-END:initComponents + + JFileChooser chooser; + String choosertitle; + private void B_SelectFolderActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_B_SelectFolderActionPerformed + chooser = new JFileChooser(); + chooser.setCurrentDirectory(new java.io.File(".")); + chooser.setDialogTitle(choosertitle); + chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + chooser.setAcceptAllFileFilterUsed(false); + if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { + File route = chooser.getSelectedFile(); + + if(route.toString().endsWith("Songs")){ + RunIt.folder=route; + L_Status.setText("Status: Correct "); + B_Run.setEnabled(true); + T_Area.setText("Songs Route: \n"+route.toString()+"\n"); + pass=true; + }else{ + L_Status.setText("Status: INCORRECT "); + B_Run.setEnabled(false); + T_Area.setText("Incorrect Songs Route"); + RunIt.folder=null; + pass=false; + } + } + }//GEN-LAST:event_B_SelectFolderActionPerformed + + private static void disAble(){ + B_Run.setEnabled(false); + C_STD.setEnabled(false); + C_Mania.setEnabled(false); + C_CTB.setEnabled(false); + C_Taiko.setEnabled(false); + B_Pause.setEnabled(true); + } + + private void B_ClearActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_B_ClearActionPerformed + Clean(); + }//GEN-LAST:event_B_ClearActionPerformed + + public static void Clean(){ + B_Run.setEnabled(true); + RunIt.Astd=false; RunIt.Amania=false; RunIt.Afruts=false; RunIt.Ataiko=false; + RunIt.folder=new File(""); + B_Run.setEnabled(false); + L_max.setText("0"); + L_i.setText("0"); + N_STD.setText("0"); + N_Mania.setText("0"); + N_Taiko.setText("0"); + N_CTB.setText("0"); + C_STD.setEnabled(true); + C_Mania.setEnabled(true); + C_CTB.setEnabled(true); + C_Taiko.setEnabled(true); + C_STD.setSelected(false); + C_Mania.setSelected(false); + C_CTB.setSelected(false); + C_Taiko.setSelected(false); + B_Pause.setEnabled(true); + ProgressBar.setMaximum(0); + ProgressBar.setMinimum(0); + ProgressBar.setValue(0); + T_Area.setText(""); + L_Status.setText("Status: INCORRECT "); + caution=true; + RunIt.Stop(); + } + + private void B_PauseActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_B_PauseActionPerformed + if(B_Pause.getText().contains("||")){ + B_Pause.setText(">"); + RunIt.Pause(); + }else + if(B_Pause.getText().contains(">")){ + B_Pause.setText("||"); + RunIt.Resume(); + } + }//GEN-LAST:event_B_PauseActionPerformed + + private void B_RunActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_B_RunActionPerformed + if(C_STD.isSelected() && C_Mania.isSelected() && + C_CTB.isSelected() && C_Taiko.isSelected()) + JOptionPane.showMessageDialog(null, "My Goodness, do you want delete all the songs?"); + if(!C_STD.isSelected() && !C_Mania.isSelected() && + !C_CTB.isSelected() && !C_Taiko.isSelected()) + JOptionPane.showMessageDialog(null, "You're not selecting any Game Mode"); + if(C_STD.isSelected() || C_Mania.isSelected() || + C_CTB.isSelected() || C_Taiko.isSelected()){ + if(C_STD.isSelected()){ + RunIt.Astd=true; + } + if(C_Mania.isSelected()){ + RunIt.Amania=true; + } + if(C_CTB.isSelected()){ + RunIt.Afruts=true; + } + if(C_Taiko.isSelected()){ + RunIt.Ataiko=true; + } + if(pass==true){ + if(caution==true){ + JDialog.setDefaultLookAndFeelDecorated(true); + int response = JOptionPane.showConfirmDialog(null, "You already delete a Game Mode Before, Are you sure to delete another Game Mode?", "ALERT", + JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); + if (response == JOptionPane.YES_OPTION) { + int respon = JOptionPane.showConfirmDialog(null, "You still sure? You deleted a Game Mode before.", "ALERT", + JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); + if (respon == JOptionPane.NO_OPTION) { + } else if (respon == JOptionPane.YES_OPTION) { + disAble(); + RunIt.Run(); + } + } + }else{ + int respon = JOptionPane.showConfirmDialog(null, "Before Run It. Did you create a backup? ", "ALERT", + JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); + if (respon == JOptionPane.YES_OPTION) { + disAble(); + RunIt.Run(); + } + } + }else{ + JOptionPane.showMessageDialog(null, "You're not selecting the correct Songs Folder"); + } + } + }//GEN-LAST:event_B_RunActionPerformed + + + public static void main(String args[]) { + try { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } catch (InstantiationException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (UnsupportedLookAndFeelException e) { + e.printStackTrace(); + } + java.awt.EventQueue.invokeLater(new Runnable() { + public void run() { + Window Window = new Window(); + goWebsite(); + Window.setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("ico.png"))); + Window.setLocationRelativeTo(null); + Window.setVisible(true); + } + }); + } + + public static void goWebsite() { + String text="NewKey"; + L_madeBy.setText("Made by player: "+text+""); + L_madeBy.setCursor(new Cursor(Cursor.HAND_CURSOR)); + L_madeBy.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + try { + Desktop.getDesktop().browse(new URI("https://osu.ppy.sh/u/637668")); + } catch (URISyntaxException | IOException ex) {} + } + }); + } + + // Variables declaration - do not modify//GEN-BEGIN:variables + public static javax.swing.JButton B_Clear; + public static javax.swing.JToggleButton B_Pause; + public static javax.swing.JButton B_Run; + public static javax.swing.JButton B_SelectFolder; + public static javax.swing.JCheckBox C_CTB; + public static javax.swing.JCheckBox C_Mania; + public static javax.swing.JCheckBox C_STD; + public static javax.swing.JCheckBox C_Taiko; + public static javax.swing.JLabel L_Alert; + public static javax.swing.JLabel L_CTB; + public static javax.swing.JLabel L_Mania; + public static javax.swing.JLabel L_STD; + public static javax.swing.JLabel L_Separetor; + public static javax.swing.JLabel L_Status; + public static javax.swing.JLabel L_Taiko; + public static javax.swing.JLabel L_i; + public static javax.swing.JLabel L_madeBy; + public static javax.swing.JLabel L_max; + public static javax.swing.JLabel N_CTB; + public static javax.swing.JLabel N_Mania; + public static javax.swing.JLabel N_STD; + public static javax.swing.JLabel N_Taiko; + public static javax.swing.JPanel Panel; + public static javax.swing.JProgressBar ProgressBar; + public static javax.swing.JScrollPane Scroll; + public static javax.swing.JTextPane T_Area; + public static javax.swing.JLabel jLabel1; + // End of variables declaration//GEN-END:variables +} diff --git a/src/OsuShrinker/ico.png b/src/OsuShrinker/ico.png new file mode 100644 index 0000000000000000000000000000000000000000..63240ae456fc4a3a870ac73a065a5fecea6b8671 GIT binary patch literal 7569 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 literal 0 HcmV?d00001