From 223df87e4a97992e954c0401383c1ff4e17794d3 Mon Sep 17 00:00:00 2001 From: chenpuhao Date: Tue, 6 Jun 2023 18:25:58 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E8=8E=B7=E5=8F=96=E6=A1=8C?= =?UTF-8?q?=E9=9D=A2=E8=B7=AF=E5=BE=84=EF=BC=8C=E5=88=A0=E9=99=A4=E5=A4=9A?= =?UTF-8?q?=E5=9B=BD=E8=AF=AD=E8=A8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/misc.xml | 2 +- META-INF/MANIFEST.MF | 3 + README.md | 17 +- .../java/CN/Function/Update/CheckUpdate.java | 2 +- .../CN/UI/FunctionPanel/CollationPanel.java | 63 +--- .../java/EN/Function/Collation/Collation.java | 86 ------ src/main/java/EN/Function/Growth/Growth.java | 50 ---- src/main/java/EN/Function/Puppet/Puppet.java | 23 -- .../java/EN/Function/Puppet/PuppetRun.java | 23 -- .../java/EN/Function/Update/CheckUpdate.java | 57 ---- src/main/java/EN/Function/Update/Update.java | 120 -------- src/main/java/EN/README-EN.md | 94 ------ .../EN/UI/FunctionPanel/CollationPanel.java | 184 ------------ .../java/EN/UI/FunctionPanel/FindPanel.java | 86 ------ .../java/EN/UI/FunctionPanel/puppetPanel.java | 94 ------ src/main/java/EN/UI/FunctionUI/MoreUI.java | 98 ------- src/main/java/EN/UI/FunctionUI/UserUI.java | 151 ---------- src/main/java/EN/UI/IntroduceUI/UI0.java | 29 -- src/main/java/EN/UI/IntroduceUI/UI1.java | 29 -- src/main/java/EN/UI/IntroduceUI/UI10.java | 31 -- src/main/java/EN/UI/IntroduceUI/UI11.java | 31 -- src/main/java/EN/UI/IntroduceUI/UI2.java | 29 -- src/main/java/EN/UI/IntroduceUI/UI3.java | 31 -- src/main/java/EN/UI/IntroduceUI/UI4.java | 31 -- src/main/java/EN/UI/IntroduceUI/UI5.java | 31 -- src/main/java/EN/UI/IntroduceUI/UI6.java | 31 -- src/main/java/EN/UI/IntroduceUI/UI7.java | 31 -- src/main/java/EN/UI/IntroduceUI/UI8.java | 31 -- src/main/java/EN/UI/IntroduceUI/UI9.java | 31 -- src/main/java/EN/UI/Main.java | 156 ---------- src/main/java/EN/UI/MainUI/HelloUI.java | 127 -------- src/main/java/EN/UI/MainUI/MainUI.java | 272 ------------------ .../RUS/Function/Collation/Collation.java | 86 ------ src/main/java/RUS/Function/Growth/Growth.java | 50 ---- src/main/java/RUS/Function/Puppet/Puppet.java | 23 -- .../java/RUS/Function/Puppet/PuppetRun.java | 23 -- .../java/RUS/Function/Update/CheckUpdate.java | 57 ---- src/main/java/RUS/Function/Update/Update.java | 120 -------- .../RUS/UI/FunctionPanel/CollationPanel.java | 184 ------------ .../java/RUS/UI/FunctionPanel/FindPanel.java | 86 ------ .../RUS/UI/FunctionPanel/puppetPanel.java | 94 ------ src/main/java/RUS/UI/FunctionUI/MoreUI.java | 98 ------- src/main/java/RUS/UI/FunctionUI/UserUI.java | 151 ---------- src/main/java/RUS/UI/IntroduceUI/UI0.java | 31 -- src/main/java/RUS/UI/IntroduceUI/UI1.java | 32 --- src/main/java/RUS/UI/IntroduceUI/UI10.java | 31 -- src/main/java/RUS/UI/IntroduceUI/UI11.java | 31 -- src/main/java/RUS/UI/IntroduceUI/UI2.java | 31 -- src/main/java/RUS/UI/IntroduceUI/UI3.java | 31 -- src/main/java/RUS/UI/IntroduceUI/UI4.java | 31 -- src/main/java/RUS/UI/IntroduceUI/UI5.java | 31 -- src/main/java/RUS/UI/IntroduceUI/UI6.java | 31 -- src/main/java/RUS/UI/IntroduceUI/UI7.java | 31 -- src/main/java/RUS/UI/IntroduceUI/UI8.java | 31 -- src/main/java/RUS/UI/IntroduceUI/UI9.java | 31 -- src/main/java/RUS/UI/Main.java | 156 ---------- src/main/java/RUS/UI/MainUI/HelloUI.java | 126 -------- src/main/java/RUS/UI/MainUI/MainUI.java | 272 ------------------ target/DesktopAide-3.4.0.jar | Bin 207179 -> 206495 bytes .../CN/Function/Update/CheckUpdate.class | Bin 2195 -> 2195 bytes .../UI/FunctionPanel/CollationPanel$1.class | Bin 3908 -> 3179 bytes .../UI/FunctionPanel/CollationPanel$2.class | Bin 868 -> 868 bytes .../CN/UI/FunctionPanel/CollationPanel.class | Bin 5200 -> 4654 bytes target/classes/EN/UI/Main.class | Bin 6664 -> 6616 bytes target/classes/RUS/UI/Main.class | Bin 6798 -> 6749 bytes 65 files changed, 18 insertions(+), 3955 deletions(-) create mode 100644 META-INF/MANIFEST.MF delete mode 100644 src/main/java/EN/Function/Collation/Collation.java delete mode 100644 src/main/java/EN/Function/Growth/Growth.java delete mode 100644 src/main/java/EN/Function/Puppet/Puppet.java delete mode 100644 src/main/java/EN/Function/Puppet/PuppetRun.java delete mode 100644 src/main/java/EN/Function/Update/CheckUpdate.java delete mode 100644 src/main/java/EN/Function/Update/Update.java delete mode 100644 src/main/java/EN/README-EN.md delete mode 100644 src/main/java/EN/UI/FunctionPanel/CollationPanel.java delete mode 100644 src/main/java/EN/UI/FunctionPanel/FindPanel.java delete mode 100644 src/main/java/EN/UI/FunctionPanel/puppetPanel.java delete mode 100644 src/main/java/EN/UI/FunctionUI/MoreUI.java delete mode 100644 src/main/java/EN/UI/FunctionUI/UserUI.java delete mode 100644 src/main/java/EN/UI/IntroduceUI/UI0.java delete mode 100644 src/main/java/EN/UI/IntroduceUI/UI1.java delete mode 100644 src/main/java/EN/UI/IntroduceUI/UI10.java delete mode 100644 src/main/java/EN/UI/IntroduceUI/UI11.java delete mode 100644 src/main/java/EN/UI/IntroduceUI/UI2.java delete mode 100644 src/main/java/EN/UI/IntroduceUI/UI3.java delete mode 100644 src/main/java/EN/UI/IntroduceUI/UI4.java delete mode 100644 src/main/java/EN/UI/IntroduceUI/UI5.java delete mode 100644 src/main/java/EN/UI/IntroduceUI/UI6.java delete mode 100644 src/main/java/EN/UI/IntroduceUI/UI7.java delete mode 100644 src/main/java/EN/UI/IntroduceUI/UI8.java delete mode 100644 src/main/java/EN/UI/IntroduceUI/UI9.java delete mode 100644 src/main/java/EN/UI/Main.java delete mode 100644 src/main/java/EN/UI/MainUI/HelloUI.java delete mode 100644 src/main/java/EN/UI/MainUI/MainUI.java delete mode 100644 src/main/java/RUS/Function/Collation/Collation.java delete mode 100644 src/main/java/RUS/Function/Growth/Growth.java delete mode 100644 src/main/java/RUS/Function/Puppet/Puppet.java delete mode 100644 src/main/java/RUS/Function/Puppet/PuppetRun.java delete mode 100644 src/main/java/RUS/Function/Update/CheckUpdate.java delete mode 100644 src/main/java/RUS/Function/Update/Update.java delete mode 100644 src/main/java/RUS/UI/FunctionPanel/CollationPanel.java delete mode 100644 src/main/java/RUS/UI/FunctionPanel/FindPanel.java delete mode 100644 src/main/java/RUS/UI/FunctionPanel/puppetPanel.java delete mode 100644 src/main/java/RUS/UI/FunctionUI/MoreUI.java delete mode 100644 src/main/java/RUS/UI/FunctionUI/UserUI.java delete mode 100644 src/main/java/RUS/UI/IntroduceUI/UI0.java delete mode 100644 src/main/java/RUS/UI/IntroduceUI/UI1.java delete mode 100644 src/main/java/RUS/UI/IntroduceUI/UI10.java delete mode 100644 src/main/java/RUS/UI/IntroduceUI/UI11.java delete mode 100644 src/main/java/RUS/UI/IntroduceUI/UI2.java delete mode 100644 src/main/java/RUS/UI/IntroduceUI/UI3.java delete mode 100644 src/main/java/RUS/UI/IntroduceUI/UI4.java delete mode 100644 src/main/java/RUS/UI/IntroduceUI/UI5.java delete mode 100644 src/main/java/RUS/UI/IntroduceUI/UI6.java delete mode 100644 src/main/java/RUS/UI/IntroduceUI/UI7.java delete mode 100644 src/main/java/RUS/UI/IntroduceUI/UI8.java delete mode 100644 src/main/java/RUS/UI/IntroduceUI/UI9.java delete mode 100644 src/main/java/RUS/UI/Main.java delete mode 100644 src/main/java/RUS/UI/MainUI/HelloUI.java delete mode 100644 src/main/java/RUS/UI/MainUI/MainUI.java diff --git a/.idea/misc.xml b/.idea/misc.xml index 56c7380..e1c7304 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -8,5 +8,5 @@ - + \ No newline at end of file diff --git a/META-INF/MANIFEST.MF b/META-INF/MANIFEST.MF new file mode 100644 index 0000000..b438863 --- /dev/null +++ b/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Main-Class: CN.UI.Main + diff --git a/README.md b/README.md index 81a7087..0d792f7 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,12 @@ ![](https://img.shields.io/github/last-commit/chenpuhao/desktopaide) ![](https://img.shields.io/github/release-date/chenpuhao/desktopaide) +注意 +== +从3.4.3版本起,DesktopAide更名为DesktopAide community且因高三的学业压力,目前只支持中文(其余语言安装包请耐心等待。。。。) + +Starting from version 3.4.3, DesktopAide is renamed DesktopAide community. Due to the academic pressure of senior high school, only Chinese is currently supported (please wait patiently for installation packages of other languages...). + 针对无网或弱网用户 == 请加入[QQ群](https://qm.qq.com/cgi-bin/qm/qr?k=f9bsc0Rw7_9i7cCWgKMcSNgrWohzmI5z&authKey=ScZtpf95RkpFWGgxsefyO2WzMPYNsBcxuoTWRfVaBl4A5HfbKNrruAw4K75ljQa7&noverify=0&personal_qrcode_source=0)获取下载安装包,也适用于出现Connection timed out错误的用户 @@ -41,10 +47,6 @@ == [简体中文](src/main/java/CN/README-CN.md) -
-[English](src/main/java/EN/README-EN.md) -
-[русск(В настоящее время файлы README недоступны)](#) 注意 == @@ -54,10 +56,3 @@ All content is machine translation, if there are errors, criticism and correctio
Весь контент является машинным переводом, если есть ошибки, критика и исправление приветствуются -翻译原则 -== -该国访问主站的数目达到500 -
-The number of visits to the main site in the country reached 500 -
-Количество посещений главной площадки в стране достигло 500 diff --git a/src/main/java/CN/Function/Update/CheckUpdate.java b/src/main/java/CN/Function/Update/CheckUpdate.java index 55817c7..bf61063 100644 --- a/src/main/java/CN/Function/Update/CheckUpdate.java +++ b/src/main/java/CN/Function/Update/CheckUpdate.java @@ -51,7 +51,7 @@ public String CheckUpdate() throws IOException { downloadUsingStream("https://desktopaide.chenpuhao.me/update.txt",file.toString()); readAppointedLineNumber(file); file.delete(); - if(result.equals("3.4.1")){ + if(result.equals("3.4.3")){ result = "true"; } return result; diff --git a/src/main/java/CN/UI/FunctionPanel/CollationPanel.java b/src/main/java/CN/UI/FunctionPanel/CollationPanel.java index 26cd31b..98c09bf 100644 --- a/src/main/java/CN/UI/FunctionPanel/CollationPanel.java +++ b/src/main/java/CN/UI/FunctionPanel/CollationPanel.java @@ -1,6 +1,7 @@ package CN.UI.FunctionPanel; import javax.swing.*; +import javax.swing.filechooser.FileSystemView; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; @@ -36,38 +37,17 @@ public CollationPanel() throws IOException { //桌面路径 JPanel path = new JPanel(); path.setLayout(new GridLayout(4,1)); - JLabel desktopPath = new JLabel("选择您的桌面路径:"); + JLabel desktopPath = new JLabel(); + FileSystemView view = FileSystemView.getFileSystemView(); + File file = view.getHomeDirectory(); + String getDesktopPath = file.getPath(); + desktopPath.setText("您的桌面路径为"+getDesktopPath); ButtonGroup pathButtonGroup = new ButtonGroup(); Map map = System.getenv(); String userName = map.get("USERNAME"); - JRadioButton desktop = new JRadioButton("C:\\Users\\" + userName + "\\Desktop"); - JRadioButton oneDrive = new JRadioButton("C:\\Users\\" + userName + "\\OneDrive\\Desktop"); - JRadioButton other = new JRadioButton("其他:"); - pathButtonGroup.add(desktop); - pathButtonGroup.add(oneDrive); - pathButtonGroup.add(other); - JTextField otherTxt = new JTextField(); File folderPath = new File("C:\\Users\\" + userName + "\\.DesktopAide\\collation"); File filePath = new File(folderPath + "\\path.da"); - if(filePath.exists()) { - readAppointedLineNumber(filePath); - if (data.equals("C:\\Users\\" + userName + "\\Desktop")) { - desktop.setSelected(true); - } else if (data.equals("C:\\Users\\" + userName + "\\OneDrive\\Desktop")) { - oneDrive.setSelected(true); - } else { - other.setSelected(true); - otherTxt.setText(data); - } - } - JPanel otherPanel = new JPanel(); - otherPanel.setLayout(new BorderLayout()); - otherPanel.add(other,BorderLayout.WEST); - otherPanel.add(otherTxt,BorderLayout.CENTER); path.add(desktopPath); - path.add(desktop); - path.add(oneDrive); - path.add(otherPanel); //配置后缀 JPanel methodPanel = new JPanel(); methodPanel.setLayout(new BorderLayout()); @@ -94,9 +74,6 @@ public CollationPanel() throws IOException { methodSave.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { - if (!desktop.isSelected() && !oneDrive.isSelected() && !other.isSelected()) { - JOptionPane.showMessageDialog(null,"选择一个桌面路径","错误",JOptionPane.ERROR_MESSAGE); - } else { Map map = System.getenv(); String userName = map.get("USERNAME"); File folderPath = new File("C:\\Users\\" + userName + "\\.DesktopAide\\collation"); @@ -111,39 +88,15 @@ public void mouseClicked(MouseEvent e) { throw new RuntimeException(ex); } } - if (desktop.isSelected()) { - FileOutputStream fileOutputStream; - try { - fileOutputStream = new FileOutputStream(filePath); - fileOutputStream.write(desktop.getText().getBytes(StandardCharsets.UTF_8)); - fileOutputStream.flush(); - fileOutputStream.close(); - } catch (IOException ex) { - throw new RuntimeException(ex); - } - } - if (oneDrive.isSelected()) { FileOutputStream fileOutputStream; try { fileOutputStream = new FileOutputStream(filePath); - fileOutputStream.write(oneDrive.getText().getBytes(StandardCharsets.UTF_8)); + fileOutputStream.write(getDesktopPath.getBytes(StandardCharsets.UTF_8)); fileOutputStream.flush(); fileOutputStream.close(); } catch (IOException ex) { throw new RuntimeException(ex); } - } - if (other.isSelected()) { - FileOutputStream fileOutputStream; - try { - fileOutputStream = new FileOutputStream(filePath); - fileOutputStream.write(otherTxt.getText().getBytes(StandardCharsets.UTF_8)); - fileOutputStream.flush(); - fileOutputStream.close(); - } catch (IOException ex) { - throw new RuntimeException(ex); - } - } filePath = new File(folderPath + "\\data.da"); if(!filePath.exists()){ try { @@ -152,7 +105,6 @@ public void mouseClicked(MouseEvent e) { throw new RuntimeException(ex); } } - FileOutputStream fileOutputStream; try { fileOutputStream = new FileOutputStream(filePath); fileOutputStream.write(methodArea.getText().getBytes(StandardCharsets.UTF_8)); @@ -162,7 +114,6 @@ public void mouseClicked(MouseEvent e) { throw new RuntimeException(ex); } JOptionPane.showMessageDialog(null,"保存成功!","成功!",JOptionPane.PLAIN_MESSAGE); - } } }); JButton methodClean = new JButton("清空"); diff --git a/src/main/java/EN/Function/Collation/Collation.java b/src/main/java/EN/Function/Collation/Collation.java deleted file mode 100644 index 7d3cbb5..0000000 --- a/src/main/java/EN/Function/Collation/Collation.java +++ /dev/null @@ -1,86 +0,0 @@ -package EN.Function.Collation; - -import java.io.*; -import java.util.Map; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -@SuppressWarnings("ResultOfMethodCallIgnored") -public class Collation { - static String name; - static String data; - static void readAppointedLineNumber(File sourceFile) - throws IOException { - FileReader in = new FileReader(sourceFile); - LineNumberReader reader = new LineNumberReader(in); - String s = ""; - int lines = 0; - while (s != null) { - lines++; - s = reader.readLine(); - if((lines - 1) == 0) { - data = s; - } - } - reader.close(); - in.close(); - } - - public static void findEndsWith(File file, String sword) throws IOException { - //将父文件下的所有文件夹以及文件存入File[]中 - File[] files = file.listFiles(); - //遍历所有文件夹以及文件 - assert files != null; - for(File i : files) { - //判断是否是文件夹 - if(i.isDirectory()) { - //是文件夹,递归 - //findEndsWith(i,sword); - }else { - //是文件,判断是否是以.后缀名结尾 - if(i.getPath().endsWith(sword)) { - Map map = System.getenv(); - String userName = map.get("USERNAME"); - File folderPath = new File("C:\\Users\\"+userName+"\\.DesktopAide\\collation"); - File filePath = new File(folderPath+"\\path.da"); - readAppointedLineNumber(filePath); - File doc = new File(data+"\\"+name+"\\"+i.getName()); - File docp = new File(i.getPath()); - docp.renameTo(doc); - } - - } - } - } - public static void Collation() throws IOException { - BufferedReader reader; - Map map = System.getenv(); - String userName = map.get("USERNAME"); - File folderPath = new File("C:\\Users\\"+userName+"\\.DesktopAide\\collation"); - File filePath = new File(folderPath+"\\path.da"); - readAppointedLineNumber(filePath); - try { - reader = new BufferedReader(new FileReader( - folderPath+"\\data.da")); - String line = reader.readLine(); - while (line != null) { - int a = line.indexOf(" "); - name = line.substring(0,a); - String sword = line.substring(a+1); - File desktopFolder = new File(data+"\\"+name); - if (!desktopFolder.exists()){ - desktopFolder.mkdirs(); - } - findEndsWith(new File(data),sword); - // read next line - line = reader.readLine(); - } - reader.close(); - } catch (IOException e) { - e.printStackTrace(); - } - - } -} diff --git a/src/main/java/EN/Function/Growth/Growth.java b/src/main/java/EN/Function/Growth/Growth.java deleted file mode 100644 index f0fac9a..0000000 --- a/src/main/java/EN/Function/Growth/Growth.java +++ /dev/null @@ -1,50 +0,0 @@ -package EN.Function.Growth; - -import java.io.*; -import java.nio.charset.StandardCharsets; -import java.util.Map; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -@SuppressWarnings("ResultOfMethodCallIgnored") -public class Growth { - static String result; - static void readAppointedLineNumber(File sourceFile, int lineNumber) - throws IOException { - FileReader in = new FileReader(sourceFile); - LineNumberReader reader = new LineNumberReader(in); - String s = ""; - int lines = 0; - while (s != null) { - lines++; - s = reader.readLine(); - if((lines - lineNumber) == 0) { - result = s; - } - } - reader.close(); - in.close(); - } - public String growth() throws IOException { - - Map map = System.getenv(); - String userName = map.get("USERNAME"); - File folderPath = new File("C:\\Users\\"+userName+"\\.DesktopAide\\growth"); - File filePath = new File(folderPath+"\\growth.da"); - if(!folderPath.exists()) { - folderPath.mkdirs(); - } - if(!filePath.exists()){ - filePath.createNewFile(); - FileOutputStream fileOutputStream = new FileOutputStream(filePath); - fileOutputStream.write("0".getBytes(StandardCharsets.UTF_8)); - fileOutputStream.flush(); - fileOutputStream.close(); - } - int needReadLine = 1; - readAppointedLineNumber(filePath,needReadLine); - return result; - } -} diff --git a/src/main/java/EN/Function/Puppet/Puppet.java b/src/main/java/EN/Function/Puppet/Puppet.java deleted file mode 100644 index 106b6eb..0000000 --- a/src/main/java/EN/Function/Puppet/Puppet.java +++ /dev/null @@ -1,23 +0,0 @@ -package EN.Function.Puppet; - -import javax.swing.*; -import java.awt.*; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -public class Puppet extends JFrame { - public Puppet(){ - this.setSize(250,180); - ImageIcon puppetImage = new ImageIcon("Icon/Function/Puppet/1.png"); - JLabel puppet = new JLabel(puppetImage); - this.add(puppet); - this.setDefaultCloseOperation(HIDE_ON_CLOSE); - this.setResizable(false); - this.setUndecorated(true); - this.setBackground(new Color(0, 0, 0, 0)); - this.setType(Type.UTILITY); - this.setAlwaysOnTop(true); - } - } diff --git a/src/main/java/EN/Function/Puppet/PuppetRun.java b/src/main/java/EN/Function/Puppet/PuppetRun.java deleted file mode 100644 index f99e0a8..0000000 --- a/src/main/java/EN/Function/Puppet/PuppetRun.java +++ /dev/null @@ -1,23 +0,0 @@ -package EN.Function.Puppet; - -import java.awt.*; - -import static CN.UI.FunctionPanel.puppetPanel.puppet; - -/** - * @author chenpuhao - * @version 3.2.x - * @Date 2023/2/4 - */ -public class PuppetRun extends Thread{ - public static boolean exit = false; - public void run(){ - while (!exit){ - puppet.setVisible(true); - PointerInfo pInfo = MouseInfo.getPointerInfo(); - Point p = pInfo.getLocation(); - puppet.setLocation((int) p.getX()-110, (int) p.getY()); - } - puppet.setVisible(false); - } -} diff --git a/src/main/java/EN/Function/Update/CheckUpdate.java b/src/main/java/EN/Function/Update/CheckUpdate.java deleted file mode 100644 index d2317bc..0000000 --- a/src/main/java/EN/Function/Update/CheckUpdate.java +++ /dev/null @@ -1,57 +0,0 @@ -package EN.Function.Update; - -import java.io.*; -import java.net.URL; - -/** - * @author chenpuhao - * @Date 2023/2/6 - */ -public class CheckUpdate { - - private static void downloadUsingStream(String urlStr, String file) throws IOException{ - URL url = new URL(urlStr); - BufferedInputStream bis = new BufferedInputStream(url.openStream()); - FileOutputStream fis = new FileOutputStream(file); - byte[] buffer = new byte[1024]; - int count=0; - while((count = bis.read(buffer,0,1024)) != -1) - { - fis.write(buffer, 0, count); - } - fis.close(); - bis.close(); - } - static String result; - static void readAppointedLineNumber(File sourceFile) - throws IOException { - FileReader in = new FileReader(sourceFile); - LineNumberReader reader = new LineNumberReader(in); - String s = ""; - int lines = 0; - while (s != null) { - lines++; - s = reader.readLine(); - if((lines - 1) == 0) { - result = s; - } - } - reader.close(); - in.close(); - } - - public String CheckUpdate() throws IOException { - File file = new File("update.txt"); - if(!file.exists()){ - file.createNewFile(); - } - downloadUsingStream("https://desktopaide.chenpuhao.me/update.txt",file.toString()); - readAppointedLineNumber(file); - file.delete(); - if(result.equals("3.4.1")){ - result = "true"; - } - return result; - } - } - diff --git a/src/main/java/EN/Function/Update/Update.java b/src/main/java/EN/Function/Update/Update.java deleted file mode 100644 index c468df6..0000000 --- a/src/main/java/EN/Function/Update/Update.java +++ /dev/null @@ -1,120 +0,0 @@ -package EN.Function.Update; - -import javax.net.ssl.*; -import javax.swing.*; -import java.awt.*; -import java.io.*; -import java.net.URI; -import java.net.URL; -import java.security.cert.CertificateException; -import java.security.cert.X509Certificate; - -/** - * @author chenpuhao - * @Date 2023/2/6 - */ -public class Update { - private static void downloadUsingStream(String urlStr, String file) throws IOException{ - URL url = new URL(urlStr); - BufferedInputStream bis = new BufferedInputStream(url.openStream()); - FileOutputStream fis = new FileOutputStream(file); - byte[] buffer = new byte[10240000]; - int count=0; - while((count = bis.read(buffer,0,10240000)) != -1) - { - fis.write(buffer, 0, count); - } - fis.close(); - bis.close(); - } - public static byte[] readInputStream(InputStream inputStream) throws IOException { - byte[] buffer = new byte[10240]; - int len = 0; - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - while((len = inputStream.read(buffer)) != -1) { - bos.write(buffer, 0, len); - } - bos.close(); - return bos.toByteArray(); - } - public static void trustAllHttpsCertificates() throws Exception { - TrustManager[] trustAllCerts = new TrustManager[1]; - TrustManager tm = new miTM(); - trustAllCerts[0] = tm; - SSLContext sc = SSLContext.getInstance("SSL"); - sc.init(null, trustAllCerts, null); - HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); - } - - static class miTM implements TrustManager,X509TrustManager { - public X509Certificate[] getAcceptedIssuers() { - return null; - } - - public boolean isServerTrusted(X509Certificate[] certs) { - return true; - } - - public boolean isClientTrusted(X509Certificate[] certs) { - return true; - } - - public void checkServerTrusted(X509Certificate[] certs, String authType) - throws CertificateException { - return; - } - - public void checkClientTrusted(X509Certificate[] certs, String authType) throws CertificateException{ - return; - } - } - - /** - * 忽略HTTPS请求的SSL证书,必须在openConnection之前调用 - * @throws Exception - */ - public static void ignoreSsl() throws Exception{ - HostnameVerifier hv = new HostnameVerifier() { - public boolean verify(String urlHostName, SSLSession session) { - return true; - } - }; - trustAllHttpsCertificates(); - HttpsURLConnection.setDefaultHostnameVerifier(hv); - } - private static void browse2(String url) throws Exception { - Desktop desktop = Desktop.getDesktop(); - if (Desktop.isDesktopSupported() && desktop.isSupported(Desktop.Action.BROWSE)) { - URI uri = new URI(url); - desktop.browse(uri); - } - } - - public Update() throws Exception { - Update.ignoreSsl(); - System.setProperty("https.protocols", "TLSv1.2,TLSv1.1,SSLv3"); - CheckUpdate checkUpdate = new CheckUpdate(); - String result = checkUpdate.CheckUpdate(); - File filePath = new File("download"); - if(!filePath.exists()){ - filePath.mkdirs(); - } - if(!result.equals("true")){ - File file = new File("download/DesktopAide-en-"+result+"-beta-setup.exe"); - if(!file.exists()){ - file.createNewFile(); - } - int n = JOptionPane.showConfirmDialog(null,"If a version update is detected, select Yes to use the software to download the installation package, the estimated time is 15-20min, otherwise jump to the official website to download","A version update is available",JOptionPane.YES_NO_OPTION); - if(n == 0) { - - downloadUsingStream("https://github.com/chenpuhao/DesktopAide/releases/download/V" + result + "/DesktopAide-en-" + result + "-setup.exe", String.valueOf(file)); - JOptionPane.showMessageDialog(null, "The download is complete and the installer will open for you later", "The download is complete", JOptionPane.PLAIN_MESSAGE); - Desktop.getDesktop().open(file); - System.exit(0); - }else{ - browse2("https://desktopaide.chenpuhao.me/download.html"); - System.exit(0); - } - } - } -} diff --git a/src/main/java/EN/README-EN.md b/src/main/java/EN/README-EN.md deleted file mode 100644 index eb4c331..0000000 --- a/src/main/java/EN/README-EN.md +++ /dev/null @@ -1,94 +0,0 @@ -
- -

- -Logo - - -

DesktopAide

-

-Welcome to DesktopAide -
- Participate in our research -
- website -
- download the installation package -, - alternate download channel -, - Report bugs -

- -![](https://img.shields.io/github/license/chenpuhao/desktopaide) -![](https://img.shields.io/github/languages/count/chenpuhao/DesktopAide) -![](https://img.shields.io/github/languages/top/chenpuhao/desktopaide) -![](https://img.shields.io/github/languages/code-size/chenpuhao/desktopaide) -![](https://img.shields.io/github/repo-size/chenpuhao/desktopaide) -![](https://img.shields.io/github/downloads/chenpuhao/desktopaide/total) -![](https://img.shields.io/github/stars/chenpuhao/desktopaide) -![](https://img.shields.io/github/watchers/chenpuhao/desktopaide) -![](https://img.shields.io/github/last-commit/chenpuhao/desktopaide) -![](https://img.shields.io/github/release-date/chenpuhao/desktopaide) - -Pay attention -=== -Run the program in administrator mode - -directory -=== - -* [Pay attention](#pay-attention) -* [directory](#directory) - * [DesktopAide Introduction](#desktopaide-introduction) - * [Copyright description](#copyright-description) - * [Known problem](#known-problem) - * [Attention](#attention) - * [Donation](#donation) - * [Future plans](#future-plans) - * [Release version](#release-version) - * [V3.4.0 Updated](#v340-updated) - * [V3.3.1 update](#v331-update) - * [V3.3.0 Updated](#v330-updated) - - - -## DesktopAide Introduction -DeskAide is an open source Windows-based desktop program -It can help you organize your desktop, find files, especially suitable for school teachers - -### Copyright description -The project is licensed under the GPL-3.0 LICENSE. For details, see [LICENSE](LICENSE). -### Known problem -1. ~~Collate The default type is not available on the desktop. Please use custom type~~ -### Attention -1. If you can help me modify the code, please use IntelliJ IDEA, thank you! No IDEA? Let me go to download] [(https://www.jetbrains.com/zh-cn/idea/download/) -2. The Java development front end will be abandoned and C# will be used (as soon as the author remembers) -3. ~~So far we do not provide English installation package, if necessary, please clone to the local run~~ - -### Donation -If you like this product, please in [aifadian] (https://afdian.net/a/desktopaide) power for me, thank you - - -### Future plans -- [x] Completion of Version 3 (Completion date :2022/12/01) -- [x] Fix the default mode for Collation (completion date :2022/12/26) -- [x] Complete the new UI of the Organize desktop function (Completion date :2023/2/4) -- [ ] ~~Develop in C# (completion date :)~~ - -## Release version -### V3.4.0 Updated -1. Greatly modify the UI -2. Download the link to Release - - -### V3.3.1 update -1. Fix the default type is unavailable on the desktop and add an English page -2. [Cn](https://github.com/chenpuhao/DesktopAide/releases/download/V3.3.1/DesktopAide-withjre-3.3.1-cn-setup.exe) -3. [en](https://github.com/chenpuhao/DesktopAide/releases/download/V3.3.1/DesktopAide-withjre-3.3.1-en-setup.exe) - -### V3.3.0 Updated -1. New UI -2. Optimize most features -3. Disable the chat function -4. [download link ](https://github.com/chenpuhao/DesktopAide/releases/download/DesktopAide/DesktopAide-withjre-3.3-setup.exe) diff --git a/src/main/java/EN/UI/FunctionPanel/CollationPanel.java b/src/main/java/EN/UI/FunctionPanel/CollationPanel.java deleted file mode 100644 index 41701cb..0000000 --- a/src/main/java/EN/UI/FunctionPanel/CollationPanel.java +++ /dev/null @@ -1,184 +0,0 @@ -package EN.UI.FunctionPanel; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.io.*; -import java.nio.charset.StandardCharsets; -import java.util.Map; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -@SuppressWarnings("ResultOfMethodCallIgnored") -public class CollationPanel extends JPanel { - static String data; - static void readAppointedLineNumber(File sourceFile) - throws IOException { - FileReader in = new FileReader(sourceFile); - LineNumberReader reader = new LineNumberReader(in); - String s = ""; - int lines = 0; - while (s != null) { - lines++; - s = reader.readLine(); - if((lines - 1) == 0) { - data = s; - } - } - reader.close(); - in.close(); - } - public CollationPanel() throws IOException { - this.setLayout(new BorderLayout()); - //定义组件 - //桌面路径 - JPanel path = new JPanel(); - path.setLayout(new GridLayout(4,1)); - JLabel desktopPath = new JLabel("Select your desktop path:"); - ButtonGroup pathButtonGroup = new ButtonGroup(); - Map map = System.getenv(); - String userName = map.get("USERNAME"); - JRadioButton desktop = new JRadioButton("C:\\Users\\" + userName + "\\Desktop"); - JRadioButton oneDrive = new JRadioButton("C:\\Users\\" + userName + "\\OneDrive\\Desktop"); - JRadioButton other = new JRadioButton("other:"); - pathButtonGroup.add(desktop); - pathButtonGroup.add(oneDrive); - pathButtonGroup.add(other); - JTextField otherTxt = new JTextField(); - File folderPath = new File("C:\\Users\\" + userName + "\\.DesktopAide\\collation"); - File filePath = new File(folderPath + "\\path.da"); - if(filePath.exists()) { - readAppointedLineNumber(filePath); - if (data.equals("C:\\Users\\" + userName + "\\Desktop")) { - desktop.setSelected(true); - } else if (data.equals("C:\\Users\\" + userName + "\\OneDrive\\Desktop")) { - oneDrive.setSelected(true); - } else { - other.setSelected(true); - otherTxt.setText(data); - } - } - JPanel otherPanel = new JPanel(); - otherPanel.setLayout(new BorderLayout()); - otherPanel.add(other,BorderLayout.WEST); - otherPanel.add(otherTxt,BorderLayout.CENTER); - path.add(desktopPath); - path.add(desktop); - path.add(oneDrive); - path.add(otherPanel); - //配置后缀 - JPanel methodPanel = new JPanel(); - methodPanel.setLayout(new BorderLayout()); - JLabel method = new JLabel("The format of file suffix \n folder name [space] suffix, for example, ppt .ppt"); - JTextArea methodArea = new JTextArea(); - filePath = new File(folderPath + "\\data.da"); - if (filePath.exists()){ - long fileLengthLong = filePath.length(); - byte[] fileContent = new byte[(int) fileLengthLong]; - try { - FileInputStream inputStream = new FileInputStream(filePath); - inputStream.read(fileContent); - inputStream.close(); - } catch (Exception e) { - // TODO: handle exception - } - String string = new String(fileContent); - methodArea.setText(string); - } - JScrollPane methodJSP = new JScrollPane(methodArea); - JPanel methodCheck = new JPanel(); - methodCheck.setLayout(new GridLayout(1,2)); - JButton methodSave = new JButton("save"); - methodSave.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - if (!desktop.isSelected() && !oneDrive.isSelected() && !other.isSelected()) { - JOptionPane.showMessageDialog(null,"Select a desktop path "," Error",JOptionPane.ERROR_MESSAGE); - } else { - Map map = System.getenv(); - String userName = map.get("USERNAME"); - File folderPath = new File("C:\\Users\\" + userName + "\\.DesktopAide\\collation"); - File filePath = new File(folderPath + "\\path.da"); - if(!folderPath.exists()){ - folderPath.mkdirs(); - } - if (!filePath.exists()) { - try { - filePath.createNewFile(); - } catch (IOException ex) { - throw new RuntimeException(ex); - } - } - if (desktop.isSelected()) { - FileOutputStream fileOutputStream; - try { - fileOutputStream = new FileOutputStream(filePath); - fileOutputStream.write(desktop.getText().getBytes(StandardCharsets.UTF_8)); - fileOutputStream.flush(); - fileOutputStream.close(); - } catch (IOException ex) { - throw new RuntimeException(ex); - } - } - if (oneDrive.isSelected()) { - FileOutputStream fileOutputStream; - try { - fileOutputStream = new FileOutputStream(filePath); - fileOutputStream.write(oneDrive.getText().getBytes(StandardCharsets.UTF_8)); - fileOutputStream.flush(); - fileOutputStream.close(); - } catch (IOException ex) { - throw new RuntimeException(ex); - } - } - if (other.isSelected()) { - FileOutputStream fileOutputStream; - try { - fileOutputStream = new FileOutputStream(filePath); - fileOutputStream.write(otherTxt.getText().getBytes(StandardCharsets.UTF_8)); - fileOutputStream.flush(); - fileOutputStream.close(); - } catch (IOException ex) { - throw new RuntimeException(ex); - } - } - filePath = new File(folderPath + "\\data.da"); - if(!filePath.exists()){ - try { - filePath.createNewFile(); - } catch (IOException ex) { - throw new RuntimeException(ex); - } - } - FileOutputStream fileOutputStream; - try { - fileOutputStream = new FileOutputStream(filePath); - fileOutputStream.write(methodArea.getText().getBytes(StandardCharsets.UTF_8)); - fileOutputStream.flush(); - fileOutputStream.close(); - } catch (IOException ex) { - throw new RuntimeException(ex); - } - JOptionPane.showMessageDialog(null,"Save successfully!" ," Success!",JOptionPane.PLAIN_MESSAGE); - } - } - }); - JButton methodClean = new JButton("clean"); - methodClean.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - methodArea.setText(""); - } - }); - methodCheck.add(methodSave); - methodCheck.add(methodClean); - methodPanel.add(method,BorderLayout.NORTH); - methodPanel.add(methodJSP,BorderLayout.CENTER); - methodPanel.add(methodCheck,BorderLayout.SOUTH); - this.add(path,BorderLayout.NORTH); - this.add(methodPanel,BorderLayout.CENTER); - } -} diff --git a/src/main/java/EN/UI/FunctionPanel/FindPanel.java b/src/main/java/EN/UI/FunctionPanel/FindPanel.java deleted file mode 100644 index 862048d..0000000 --- a/src/main/java/EN/UI/FunctionPanel/FindPanel.java +++ /dev/null @@ -1,86 +0,0 @@ -package EN.UI.FunctionPanel; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -/** - * @author chenpuhao - * @version 3.2.x - * @Date 2023/2/4 - */ -public class FindPanel extends JPanel { - static JTextField pathField = new JTextField(); - static JTextField nameField = new JTextField(); - static File file = new File(pathField.getText()); - static String keyWord = nameField.getText(); - public static List searchFiles(File folder, final String keyword) { - List result = new ArrayList<>(); - if (folder.isFile()) - result.add(folder); - File[] subFolders = folder.listFiles(file -> { - if (file.isDirectory()) { - return true; - } - return file.getName().toLowerCase().contains(keyword); - }); - if (subFolders != null) { - for (File file : subFolders) { - if (file.isFile()) { - // 如果是文件则将文件添加到结果列表中 - result.add(file); - } else { - // 如果是文件夹,则递归调用本方法,然后把所有的文件加到结果列表中 - result.addAll(searchFiles(file, keyword)); - } - } - } - return result; - } - public FindPanel(){ - this.setLayout(new BorderLayout()); - Map map = System.getenv(); - String userName = map.get("USERNAME"); - JLabel pathLabel = new JLabel("The directory to look for,such as C:\\Users\\" + userName + "\\Desktop"); - JLabel fileLabel = new JLabel("The keyword of the file name to look for, such as DesktopAide"); - JButton check = new JButton("determine"); - check.addMouseListener(new MouseAdapter() { - public void mouseClicked(MouseEvent e) { - file = new File(pathField.getText()); - File file3 = new File(file.toURI()); - keyWord = nameField.getText(); - List files = searchFiles(file3, keyWord); - StringBuilder filePath = new StringBuilder(); - for (File file : files) { - File file1 = new File(file.getAbsolutePath()); - filePath.append("\n").append(file1); - try { - Desktop.getDesktop().open(file1); - } catch (IOException e1) { - - e1.printStackTrace(); - } - } - if (filePath.toString().equals("")) { - JOptionPane.showMessageDialog(null, "No file with this keyword found in this directory ", "search complete!", JOptionPane.ERROR_MESSAGE); - } else { - JOptionPane.showMessageDialog(null, "The following file is found :" + filePath, "search is complete!", JOptionPane.PLAIN_MESSAGE); - } - } - }); - JPanel findPanel = new JPanel(); - findPanel.setLayout(new GridLayout (5 , 1 )); - findPanel.add(pathLabel); - findPanel.add(pathField); - findPanel.add(fileLabel); - findPanel.add(nameField); - findPanel.add(check); - this.add(findPanel); - } -} diff --git a/src/main/java/EN/UI/FunctionPanel/puppetPanel.java b/src/main/java/EN/UI/FunctionPanel/puppetPanel.java deleted file mode 100644 index 9a213da..0000000 --- a/src/main/java/EN/UI/FunctionPanel/puppetPanel.java +++ /dev/null @@ -1,94 +0,0 @@ -package EN.UI.FunctionPanel; - -import EN.Function.Puppet.Puppet; -import EN.Function.Puppet.PuppetRun; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.io.*; -import java.nio.charset.StandardCharsets; -import java.util.Map; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -@SuppressWarnings("ResultOfMethodCallIgnored") -public class puppetPanel extends JPanel { - public static JRadioButton yes = new JRadioButton("open"); - static String result; - public static PuppetRun puppetRun ; - - static void readAppointedLineNumber(File sourceFile, int lineNumber) - throws IOException { - FileReader in = new FileReader(sourceFile); - LineNumberReader reader = new LineNumberReader(in); - String s = ""; - int lines = 0; - while (s != null) { - lines++; - s = reader.readLine(); - if((lines - lineNumber) == 0) { - result = s; - } - } - reader.close(); - in.close(); - } - public static Puppet puppet = new Puppet(); - public puppetPanel() throws IOException { - Map map = System.getenv(); - String userName = map.get("USERNAME"); - File folderPath = new File("C:\\Users\\"+userName+"\\.DesktopAide\\puppet"); - File filePath = new File(folderPath+"\\puppet.da"); - if(!folderPath.exists()) { - folderPath.mkdirs(); - } - if(!filePath.exists()){ - filePath.createNewFile(); - FileOutputStream fileOutputStream = new FileOutputStream(filePath); - fileOutputStream.write("false".getBytes(StandardCharsets.UTF_8)); - fileOutputStream.flush(); - fileOutputStream.close(); - } - //定义组件 - JLabel introduce = new JLabel("Turn on or off the mouse puppet function"); - ButtonGroup buttonGroup = new ButtonGroup(); - JRadioButton no = new JRadioButton("Shut down"); - buttonGroup.add(yes); - buttonGroup.add(no); - JPanel buttonPanel = new JPanel(); - buttonPanel.setLayout(new GridLayout(1,2)); - buttonPanel.add(yes); - buttonPanel.add(no); - JButton save = new JButton("save"); - - save.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - - if(yes.isSelected()){ - PuppetRun.exit = false; - puppetRun = new PuppetRun(); - puppetRun.start(); - }else{ - PuppetRun.exit = true; - - } - } - }); - this.setLayout(new GridLayout(3,1)); - this.add(introduce); - this.add(buttonPanel); - this.add(save); - int line = 1; - readAppointedLineNumber(filePath,line); - if(result.equals("true")){ - yes.setSelected(true); - }else{ - no.setSelected(true); - } - } -} diff --git a/src/main/java/EN/UI/FunctionUI/MoreUI.java b/src/main/java/EN/UI/FunctionUI/MoreUI.java deleted file mode 100644 index 4223295..0000000 --- a/src/main/java/EN/UI/FunctionUI/MoreUI.java +++ /dev/null @@ -1,98 +0,0 @@ -package EN.UI.FunctionUI; - -import EN.UI.FunctionPanel.CollationPanel; -import EN.UI.FunctionPanel.FindPanel; -import EN.UI.FunctionPanel.puppetPanel; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.io.IOException; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -public class MoreUI extends JFrame { - public MoreUI(){ - //获取桌面大小 - Dimension getScreenSize = Toolkit.getDefaultToolkit().getScreenSize(); - //基本设置 - this.setBounds((getScreenSize.width-600)/2,(getScreenSize.height-500)/2,600,500); - this.setDefaultCloseOperation(HIDE_ON_CLOSE); - this.setResizable(false); - JPanel moreUIPanel = new JPanel(); - moreUIPanel.setLayout(new BorderLayout()); - ImageIcon title = new ImageIcon("Icon/MoreUI/favicon.png"); - this.setIconImage(title.getImage()); - JScrollPane jsp = new JScrollPane(); - JPanel leftSetting = new JPanel(); - jsp.setViewportView(leftSetting); - leftSetting.setLayout(new GridLayout(3,1)); - //添加整理的设置 - ImageIcon collationImage = new ImageIcon("Icon/MoreUI/collation.png"); - JButton collation = new JButton("Collate file Settings"); - collation.setIcon(collationImage); - collation.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - moreUIPanel.removeAll(); - moreUIPanel.setLayout(new BorderLayout()); - moreUIPanel.add(leftSetting,BorderLayout.WEST); - CollationPanel collationPanel; - try { - collationPanel = new CollationPanel(); - } catch (IOException ex) { - throw new RuntimeException(ex); - } - moreUIPanel.add(collationPanel,BorderLayout.CENTER); - MoreUI.this.revalidate(); - MoreUI.this.repaint(); - } - }); - leftSetting.add(collation); - //添加QQ机器人设置 - ImageIcon qqImage = new ImageIcon("Icon/MoreUI/hand.png"); - JButton qq = new JButton("Mouse puppet"); - qq.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - moreUIPanel.removeAll(); - moreUIPanel.setLayout(new BorderLayout()); - moreUIPanel.add(leftSetting,BorderLayout.WEST); - puppetPanel handPanel; - try { - handPanel = new puppetPanel(); - } catch (IOException ex) { - throw new RuntimeException(ex); - } - moreUIPanel.add(handPanel,BorderLayout.CENTER); - MoreUI.this.revalidate(); - MoreUI.this.repaint(); - } - }); - qq.setIcon(qqImage); - leftSetting.add(qq); - //查找文件 - ImageIcon searchImage = new ImageIcon("Icon/MoreUI/search.png"); - JButton search = new JButton("Find file"); - search.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - moreUIPanel.removeAll(); - moreUIPanel.setLayout(new BorderLayout()); - moreUIPanel.add(leftSetting,BorderLayout.WEST); - FindPanel findPanel; - findPanel = new FindPanel(); - moreUIPanel.add(findPanel,BorderLayout.CENTER); - MoreUI.this.revalidate(); - MoreUI.this.repaint(); - } - }); - search.setIcon(searchImage); - leftSetting.add(search); - moreUIPanel.add(jsp,BorderLayout.WEST); - this.add(moreUIPanel); - } -} diff --git a/src/main/java/EN/UI/FunctionUI/UserUI.java b/src/main/java/EN/UI/FunctionUI/UserUI.java deleted file mode 100644 index 9831ef3..0000000 --- a/src/main/java/EN/UI/FunctionUI/UserUI.java +++ /dev/null @@ -1,151 +0,0 @@ -package EN.UI.FunctionUI; - -import EN.UI.IntroduceUI.*; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.io.*; -import java.util.Map; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -public class UserUI extends JFrame { - static String result; - static void readAppointedLineNumber(File sourceFile) - throws IOException { - FileReader in = new FileReader(sourceFile); - LineNumberReader reader = new LineNumberReader(in); - String s = ""; - int lines = 0; - while (s != null) { - lines++; - s = reader.readLine(); - if((lines - 1) == 0) { - result = s; - } - } - reader.close(); - in.close(); - } - static int getTotalLines(File file) throws IOException { - FileReader in = new FileReader(file); - LineNumberReader reader = new LineNumberReader(in); - String s = reader.readLine(); - int lines = 0; - while (s != null) { - lines++; - s = reader.readLine(); - } - reader.close(); - in.close(); - return lines; - } - public UserUI() throws IOException { - //获取屏幕大小 - Dimension getDesktopSize = Toolkit.getDefaultToolkit().getScreenSize(); - this.setBounds((getDesktopSize.width - 300) / 2, (getDesktopSize.height - 500) / 2, 300, 500); - this.setDefaultCloseOperation(HIDE_ON_CLOSE); - this.setLayout(new BorderLayout()); - this.setResizable(false); - this.setType(Type.UTILITY); - //用户姓名 - Map map = System.getenv(); - String userName = map.get("USERNAME"); - File folderPath = new File("C:\\Users\\" + userName + "\\.DesktopAide\\user"); - File filePath = new File(folderPath + "\\user.da"); - readAppointedLineNumber(filePath); - JLabel UserName = new JLabel("Welcome:"+result); - JLabel userData = new JLabel("You have planted the following plants so far (click for more information)"); - JPanel jp = new JPanel(); - jp.setLayout(new GridLayout(2,1)); - jp.add(UserName); - jp.add(userData); - filePath = new File(folderPath + "\\success.da"); - int total = getTotalLines(filePath); - JScrollPane jsp = new JScrollPane(); - jsp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); - JPanel success = new JPanel(); - jsp.setViewportView(success); - success.setLayout(new GridLayout(total,1)); - BufferedReader reader; - try { - reader = new BufferedReader(new FileReader( - filePath)); - String line = reader.readLine(); - while (line != null) { - ImageIcon img = new ImageIcon("Icon/MainUI/plant/success/"+line); - JButton jb = new JButton(img); - success.add(jb); - String finalLine = line; - jb.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - switch (finalLine) { - case "0.png" -> { - UI0 ui = new UI0(); - ui.setVisible(true); - } - case "1.png" -> { - UI1 ui = new UI1(); - ui.setVisible(true); - } - case "2.png" -> { - UI2 ui = new UI2(); - ui.setVisible(true); - } - case "3.png" -> { - UI3 ui = new UI3(); - ui.setVisible(true); - } - case "4.png" -> { - UI4 ui = new UI4(); - ui.setVisible(true); - } - case "5.png" -> { - UI5 ui = new UI5(); - ui.setVisible(true); - } - case "6.png" -> { - UI6 ui = new UI6(); - ui.setVisible(true); - } - case "7.png" -> { - UI7 ui = new UI7(); - ui.setVisible(true); - } - case "8.png" -> { - UI8 ui = new UI8(); - ui.setVisible(true); - } - case "9.png" -> { - UI9 ui = new UI9(); - ui.setVisible(true); - } - case "10.png" -> { - UI10 ui = new UI10(); - ui.setVisible(true); - } - case "11.png" -> { - UI11 ui = new UI11(); - ui.setVisible(true); - } - } - } - }); - // read next line - line = reader.readLine(); - } - reader.close(); - } catch (IOException e) { - e.printStackTrace(); - } - this.add(jp,BorderLayout.NORTH); - this.add(jsp); - } - - -} diff --git a/src/main/java/EN/UI/IntroduceUI/UI0.java b/src/main/java/EN/UI/IntroduceUI/UI0.java deleted file mode 100644 index e60b287..0000000 --- a/src/main/java/EN/UI/IntroduceUI/UI0.java +++ /dev/null @@ -1,29 +0,0 @@ -package EN.UI.IntroduceUI; -import javax.swing.*; -import java.awt.*; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -public class UI0 extends JFrame { - public UI0(){ - Dimension getDesktopSize = Toolkit.getDefaultToolkit().getScreenSize(); - this.setBounds((getDesktopSize.width-300)/2,(getDesktopSize.height-500)/2,300,500); - this.setDefaultCloseOperation(HIDE_ON_CLOSE); - this.setResizable(false); - this.setType(Type.UTILITY); - this. setTitle ("detailed description -- cactus"); - this.setLayout(new BorderLayout()); - ImageIcon img = new ImageIcon("Icon/MainUI/plant/success/0.png"); - JLabel label = new JLabel(img); - JPanel imgPanel = new JPanel(); - imgPanel.setLayout(new BorderLayout()); - imgPanel.add(label); - JPanel panel = new JPanel(); - JLabel introduce =new JLabel ("a cactus with good growth. The thorn on its body resists external attack"); - panel.add(introduce); - this.add(imgPanel,BorderLayout.NORTH); - this.add(panel); - } -} \ No newline at end of file diff --git a/src/main/java/EN/UI/IntroduceUI/UI1.java b/src/main/java/EN/UI/IntroduceUI/UI1.java deleted file mode 100644 index 61c94a4..0000000 --- a/src/main/java/EN/UI/IntroduceUI/UI1.java +++ /dev/null @@ -1,29 +0,0 @@ -package EN.UI.IntroduceUI; -import javax.swing.*; -import java.awt.*; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -public class UI1 extends JFrame { - public UI1(){ - Dimension getDesktopSize = Toolkit.getDefaultToolkit().getScreenSize(); - this.setBounds((getDesktopSize.width-300)/2,(getDesktopSize.height-500)/2,300,500); - this.setDefaultCloseOperation(HIDE_ON_CLOSE); - this.setResizable(false); - this.setType(Type.UTILITY); - this. setTitle ("Detailed description -- four-leaf clover"); - this.setLayout(new BorderLayout()); - ImageIcon img = new ImageIcon("Icon/MainUI/plant/success/1.png"); - JLabel label = new JLabel(img); - JPanel imgPanel = new JPanel(); - imgPanel.setLayout(new BorderLayout()); - imgPanel.add(label); - JPanel panel = new JPanel(); - JLabel introduce=new JLabel ("The four-leaf clover symbolizes luck. Maybe there will be good luck today?"); - panel.add(introduce); - this.add(imgPanel,BorderLayout.NORTH); - this.add(panel); - } -} \ No newline at end of file diff --git a/src/main/java/EN/UI/IntroduceUI/UI10.java b/src/main/java/EN/UI/IntroduceUI/UI10.java deleted file mode 100644 index 54d50f1..0000000 --- a/src/main/java/EN/UI/IntroduceUI/UI10.java +++ /dev/null @@ -1,31 +0,0 @@ -package EN.UI.IntroduceUI; - -import javax.swing.*; -import java.awt.*; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -public class UI10 extends JFrame { - public UI10(){ - - Dimension getDesktopSize = Toolkit.getDefaultToolkit().getScreenSize(); - this.setBounds((getDesktopSize.width-300)/2,(getDesktopSize.height-500)/2,300,500); - this.setDefaultCloseOperation(HIDE_ON_CLOSE); - this.setResizable(false); - this.setType(Type.UTILITY); - this.setTitle("Details -- Rose"); - this.setLayout(new BorderLayout()); - ImageIcon img = new ImageIcon("Icon/MainUI/plant/success/10.png"); - JLabel label = new JLabel(img); - JPanel imgPanel = new JPanel(); - imgPanel.setLayout(new BorderLayout()); - imgPanel.add(label); - JPanel panel = new JPanel(); - JLabel introduce = new JLabel("Bright roses, Valentine's Day must-have artifact"); - panel.add(introduce); - this.add(imgPanel,BorderLayout.NORTH); - this.add(panel); - } -} diff --git a/src/main/java/EN/UI/IntroduceUI/UI11.java b/src/main/java/EN/UI/IntroduceUI/UI11.java deleted file mode 100644 index b38f9bc..0000000 --- a/src/main/java/EN/UI/IntroduceUI/UI11.java +++ /dev/null @@ -1,31 +0,0 @@ -package EN.UI.IntroduceUI; - -import javax.swing.*; -import java.awt.*; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -public class UI11 extends JFrame { - public UI11(){ - - Dimension getDesktopSize = Toolkit.getDefaultToolkit().getScreenSize(); - this.setBounds((getDesktopSize.width-300)/2,(getDesktopSize.height-500)/2,300,500); - this.setDefaultCloseOperation(HIDE_ON_CLOSE); - this.setResizable(false); - this.setType(Type.UTILITY); - this.setTitle("Detailed description - ears of wheat"); - this.setLayout(new BorderLayout()); - ImageIcon img = new ImageIcon("Icon/MainUI/plant/success/11.png"); - JLabel label = new JLabel(img); - JPanel imgPanel = new JPanel(); - imgPanel.setLayout(new BorderLayout()); - imgPanel.add(label); - JPanel panel = new JPanel(); - JLabel introduce = new JLabel("Come with me to read: hoe Herday afternoon, sweat drip Wo......"); - panel.add(introduce); - this.add(imgPanel,BorderLayout.NORTH); - this.add(panel); - } -} diff --git a/src/main/java/EN/UI/IntroduceUI/UI2.java b/src/main/java/EN/UI/IntroduceUI/UI2.java deleted file mode 100644 index ccb5097..0000000 --- a/src/main/java/EN/UI/IntroduceUI/UI2.java +++ /dev/null @@ -1,29 +0,0 @@ -package EN.UI.IntroduceUI; -import javax.swing.*; -import java.awt.*; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -public class UI2 extends JFrame { - public UI2(){ - Dimension getDesktopSize = Toolkit.getDefaultToolkit().getScreenSize(); - this.setBounds((getDesktopSize.width-300)/2,(getDesktopSize.height-500)/2,300,500); - this.setDefaultCloseOperation(HIDE_ON_CLOSE); - this.setResizable(false); - this.setType(Type.UTILITY); - this. setTitle ("Detailed description -- corn"); - this.setLayout(new BorderLayout()); - ImageIcon img = new ImageIcon("Icon/MainUI/plant/success/2.png"); - JLabel label = new JLabel(img); - JPanel imgPanel = new JPanel(); - imgPanel.setLayout(new BorderLayout()); - imgPanel.add(label); - JPanel panel = new JPanel(); - JLabel introduce=new JLabel ("Golden corn, green oil shell, boiled or fried?"); - panel.add(introduce); - this.add(imgPanel,BorderLayout.NORTH); - this.add(panel); - } -} \ No newline at end of file diff --git a/src/main/java/EN/UI/IntroduceUI/UI3.java b/src/main/java/EN/UI/IntroduceUI/UI3.java deleted file mode 100644 index f9440eb..0000000 --- a/src/main/java/EN/UI/IntroduceUI/UI3.java +++ /dev/null @@ -1,31 +0,0 @@ -package EN.UI.IntroduceUI; - -import javax.swing.*; -import java.awt.*; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -public class UI3 extends JFrame { - public UI3(){ - - Dimension getDesktopSize = Toolkit.getDefaultToolkit().getScreenSize(); - this.setBounds((getDesktopSize.width-300)/2,(getDesktopSize.height-500)/2,300,500); - this.setDefaultCloseOperation(HIDE_ON_CLOSE); - this.setResizable(false); - this.setType(Type.UTILITY); - this.setTitle("Details -- eggplant"); - this.setLayout(new BorderLayout()); - ImageIcon img = new ImageIcon("Icon/MainUI/plant/success/3.png"); - JLabel label = new JLabel(img); - JPanel imgPanel = new JPanel(); - imgPanel.setLayout(new BorderLayout()); - imgPanel.add(label); - JPanel panel = new JPanel(); - JLabel introduce = new JLabel("Fat eggplant, its owner must have put a lot of effort"); - panel.add(introduce); - this.add(imgPanel,BorderLayout.NORTH); - this.add(panel); - } -} diff --git a/src/main/java/EN/UI/IntroduceUI/UI4.java b/src/main/java/EN/UI/IntroduceUI/UI4.java deleted file mode 100644 index e43539d..0000000 --- a/src/main/java/EN/UI/IntroduceUI/UI4.java +++ /dev/null @@ -1,31 +0,0 @@ -package EN.UI.IntroduceUI; - -import javax.swing.*; -import java.awt.*; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -public class UI4 extends JFrame { - public UI4(){ - - Dimension getDesktopSize = Toolkit.getDefaultToolkit().getScreenSize(); - this.setBounds((getDesktopSize.width-300)/2,(getDesktopSize.height-500)/2,300,500); - this.setDefaultCloseOperation(HIDE_ON_CLOSE); - this.setResizable(false); - this.setType(Type.UTILITY); - this.setTitle("Details -- grass"); - this.setLayout(new BorderLayout()); - ImageIcon img = new ImageIcon("Icon/MainUI/plant/success/4.png"); - JLabel label = new JLabel(img); - JPanel imgPanel = new JPanel(); - imgPanel.setLayout(new BorderLayout()); - imgPanel.add(label); - JPanel panel = new JPanel(); - JLabel introduce = new JLabel("Perhaps, it is a pot of grass......"); - panel.add(introduce); - this.add(imgPanel,BorderLayout.NORTH); - this.add(panel); - } -} diff --git a/src/main/java/EN/UI/IntroduceUI/UI5.java b/src/main/java/EN/UI/IntroduceUI/UI5.java deleted file mode 100644 index a01fac2..0000000 --- a/src/main/java/EN/UI/IntroduceUI/UI5.java +++ /dev/null @@ -1,31 +0,0 @@ -package EN.UI.IntroduceUI; - -import javax.swing.*; -import java.awt.*; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -public class UI5 extends JFrame { - public UI5(){ - - Dimension getDesktopSize = Toolkit.getDefaultToolkit().getScreenSize(); - this.setBounds((getDesktopSize.width-300)/2,(getDesktopSize.height-500)/2,300,500); - this.setDefaultCloseOperation(HIDE_ON_CLOSE); - this.setResizable(false); - this.setType(Type.UTILITY); - this.setTitle("Details -- Leaves"); - this.setLayout(new BorderLayout()); - ImageIcon img = new ImageIcon("Icon/MainUI/plant/success/5.png"); - JLabel label = new JLabel(img); - JPanel imgPanel = new JPanel(); - imgPanel.setLayout(new BorderLayout()); - imgPanel.add(label); - JPanel panel = new JPanel(); - JLabel introduce = new JLabel("This is no ordinary leaf, this is a leaf from Wang Wei's poem"); - panel.add(introduce); - this.add(imgPanel,BorderLayout.NORTH); - this.add(panel); - } -} diff --git a/src/main/java/EN/UI/IntroduceUI/UI6.java b/src/main/java/EN/UI/IntroduceUI/UI6.java deleted file mode 100644 index f6c09f4..0000000 --- a/src/main/java/EN/UI/IntroduceUI/UI6.java +++ /dev/null @@ -1,31 +0,0 @@ -package EN.UI.IntroduceUI; - -import javax.swing.*; -import java.awt.*; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -public class UI6 extends JFrame { - public UI6(){ - - Dimension getDesktopSize = Toolkit.getDefaultToolkit().getScreenSize(); - this.setBounds((getDesktopSize.width-300)/2,(getDesktopSize.height-500)/2,300,500); - this.setDefaultCloseOperation(HIDE_ON_CLOSE); - this.setResizable(false); - this.setType(Type.UTILITY); - this.setTitle("Details -- cabbage"); - this.setLayout(new BorderLayout()); - ImageIcon img = new ImageIcon("Icon/MainUI/plant/success/6.png"); - JLabel label = new JLabel(img); - JPanel imgPanel = new JPanel(); - imgPanel.setLayout(new BorderLayout()); - imgPanel.add(label); - JPanel panel = new JPanel(); - JLabel introduce = new JLabel("Plump cabbage, what can be in it?"); - panel.add(introduce); - this.add(imgPanel,BorderLayout.NORTH); - this.add(panel); - } -} diff --git a/src/main/java/EN/UI/IntroduceUI/UI7.java b/src/main/java/EN/UI/IntroduceUI/UI7.java deleted file mode 100644 index dcb7aa9..0000000 --- a/src/main/java/EN/UI/IntroduceUI/UI7.java +++ /dev/null @@ -1,31 +0,0 @@ -package EN.UI.IntroduceUI; - -import javax.swing.*; -import java.awt.*; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -public class UI7 extends JFrame { - public UI7(){ - - Dimension getDesktopSize = Toolkit.getDefaultToolkit().getScreenSize(); - this.setBounds((getDesktopSize.width-300)/2,(getDesktopSize.height-500)/2,300,500); - this.setDefaultCloseOperation(HIDE_ON_CLOSE); - this.setResizable(false); - this.setType(Type.UTILITY); - this.setTitle("Details -- Pumpkin"); - this.setLayout(new BorderLayout()); - ImageIcon img = new ImageIcon("Icon/MainUI/plant/success/7.png"); - JLabel label = new JLabel(img); - JPanel imgPanel = new JPanel(); - imgPanel.setLayout(new BorderLayout()); - imgPanel.add(label); - JPanel panel = new JPanel(); - JLabel introduce = new JLabel("This pumpkin would be great for a jack-o \'-lantern for Halloween"); - panel.add(introduce); - this.add(imgPanel,BorderLayout.NORTH); - this.add(panel); - } -} diff --git a/src/main/java/EN/UI/IntroduceUI/UI8.java b/src/main/java/EN/UI/IntroduceUI/UI8.java deleted file mode 100644 index aa9a423..0000000 --- a/src/main/java/EN/UI/IntroduceUI/UI8.java +++ /dev/null @@ -1,31 +0,0 @@ -package EN.UI.IntroduceUI; - -import javax.swing.*; -import java.awt.*; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -public class UI8 extends JFrame { - public UI8(){ - - Dimension getDesktopSize = Toolkit.getDefaultToolkit().getScreenSize(); - this.setBounds((getDesktopSize.width-300)/2,(getDesktopSize.height-500)/2,300,500); - this.setDefaultCloseOperation(HIDE_ON_CLOSE); - this.setResizable(false); - this.setType(Type.UTILITY); - this.setTitle("Details - Radish"); - this.setLayout(new BorderLayout()); - ImageIcon img = new ImageIcon("Icon/MainUI/plant/success/8.png"); - JLabel label = new JLabel(img); - JPanel imgPanel = new JPanel(); - imgPanel.setLayout(new BorderLayout()); - imgPanel.add(label); - JPanel panel = new JPanel(); - JLabel introduce = new JLabel("This radish is just a regular radish. Nothing to tell you about it"); - panel.add(introduce); - this.add(imgPanel,BorderLayout.NORTH); - this.add(panel); - } -} diff --git a/src/main/java/EN/UI/IntroduceUI/UI9.java b/src/main/java/EN/UI/IntroduceUI/UI9.java deleted file mode 100644 index e41d0dd..0000000 --- a/src/main/java/EN/UI/IntroduceUI/UI9.java +++ /dev/null @@ -1,31 +0,0 @@ -package EN.UI.IntroduceUI; - -import javax.swing.*; -import java.awt.*; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -public class UI9 extends JFrame { - public UI9(){ - - Dimension getDesktopSize = Toolkit.getDefaultToolkit().getScreenSize(); - this.setBounds((getDesktopSize.width-300)/2,(getDesktopSize.height-500)/2,300,500); - this.setDefaultCloseOperation(HIDE_ON_CLOSE); - this.setResizable(false); - this.setType(Type.UTILITY); - this.setTitle("Details -- tomatoes"); - this.setLayout(new BorderLayout()); - ImageIcon img = new ImageIcon("Icon/MainUI/plant/success/9.png"); - JLabel label = new JLabel(img); - JPanel imgPanel = new JPanel(); - imgPanel.setLayout(new BorderLayout()); - imgPanel.add(label); - JPanel panel = new JPanel(); - JLabel introduce = new JLabel("Scrambled eggs with tomatoes? What about eggs? Looking forward to the future ~"); - panel.add(introduce); - this.add(imgPanel,BorderLayout.NORTH); - this.add(panel); - } -} diff --git a/src/main/java/EN/UI/Main.java b/src/main/java/EN/UI/Main.java deleted file mode 100644 index 4cbf953..0000000 --- a/src/main/java/EN/UI/Main.java +++ /dev/null @@ -1,156 +0,0 @@ -package EN.UI; - -import EN.Function.Update.Update; -import EN.Function.Collation.Collation; -import EN.Function.Growth.Growth; -import EN.UI.MainUI.HelloUI; -import EN.UI.MainUI.MainUI; -import com.formdev.flatlaf.FlatDarculaLaf; -import com.formdev.flatlaf.FlatDarkLaf; -import com.formdev.flatlaf.intellijthemes.FlatDarkFlatIJTheme; - -import javax.swing.*; -import java.io.*; -import java.nio.charset.StandardCharsets; -import java.util.Map; -import java.util.Random; - -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ - -@SuppressWarnings({"ResultOfMethodCallIgnored", "InfiniteLoopStatement"}) -public class Main { - public static String readToString(String fileName) { - String encoding = "UTF-8"; - File file = new File(fileName); - long filelength = file.length(); - byte[] filecontent = new byte[(int) filelength]; - try { - FileInputStream in = new FileInputStream(file); - in.read(filecontent); - in.close(); - } catch (IOException e) { - e.printStackTrace(); - } - try { - return new String(filecontent, encoding); - } catch (UnsupportedEncodingException e) { - System.err.println("The OS does not support " + encoding); - e.printStackTrace(); - return null; - } - } - public static void main(String[] args) throws Exception { - //使用look and feel - FlatDarkLaf.setup(); - FlatDarculaLaf.setup(); - FlatDarkFlatIJTheme.setup(); - new Update(); - Map map = System.getenv(); - String userName = map.get("USERNAME"); - File folderPath = new File("C:\\Users\\" + userName + "\\.DesktopAide\\collation"); - File filePath = new File(folderPath + "\\path.da"); - if(!folderPath.exists()){ - folderPath.mkdirs(); - } - if (!filePath.exists()) { - try { - filePath.createNewFile(); - FileOutputStream fileOutputStream = new FileOutputStream(filePath); - String path = "C:\\Users\\" + userName + "\\Desktop"; - fileOutputStream.write(path.getBytes(StandardCharsets.UTF_8)); - fileOutputStream.flush(); - fileOutputStream.close(); - } catch (IOException ex) { - throw new RuntimeException(ex); - } - } - folderPath = new File("C:\\Users\\"+userName+"\\.DesktopAide\\growth"); - filePath = new File(folderPath+"\\growth.da"); - if(!folderPath.exists()) { - folderPath.mkdirs(); - } - if(!filePath.exists()){ - filePath.createNewFile(); - FileOutputStream fileOutputStream = new FileOutputStream(filePath); - fileOutputStream.write("0".getBytes(StandardCharsets.UTF_8)); - fileOutputStream.flush(); - fileOutputStream.close(); - } - folderPath = new File("C:\\Users\\"+userName+"\\.DesktopAide\\puppet"); - filePath = new File(folderPath+"\\puppet.da"); - if(!folderPath.exists()) { - folderPath.mkdirs(); - } - if(!filePath.exists()){ - filePath.createNewFile(); - FileOutputStream fileOutputStream = new FileOutputStream(filePath); - fileOutputStream.write("false".getBytes(StandardCharsets.UTF_8)); - fileOutputStream.flush(); - fileOutputStream.close(); - } - folderPath = new File("C:\\Users\\" + userName + "\\.DesktopAide\\user"); - filePath = new File(folderPath + "\\user.da"); - if(!filePath.exists()){ - HelloUI helloUI = new HelloUI(); - helloUI.setVisible(true); - } - MainUI mainUI = new MainUI(); - mainUI.setVisible(true); - while (true) { - if(MainUI.isInCollation){ - Collation.Collation(); - } - //桌宠 - ImageIcon petImage; - Growth growth = new Growth(); - int growthInt = Integer.parseInt(growth.growth()); - if (growthInt == 100) { - folderPath = new File("Icon/MainUI/plant/success"); - File[] list = folderPath.listFiles(); - int fileCount = 0; - assert list != null; - for (File file : list) { - if (file.isFile()) { - fileCount++; - } - } - Random getSuccessPlant = new Random(); - int successPlantInt = getSuccessPlant.nextInt(fileCount-1); - petImage = new ImageIcon(folderPath+"/"+successPlantInt+".png"); - MainUI.tablePet.setIcon(petImage); - JOptionPane.showMessageDialog(null,"Congratulations on your successful planting. After closing this pop-up window, the next round of planting will be conducted. The planting record can be viewed in the user interface "," planting success",JOptionPane.PLAIN_MESSAGE,petImage); - File path = new File("C:\\Users\\"+userName+"\\.DesktopAide\\growth"); - filePath = new File(path+"\\growth.da"); - FileOutputStream fileOutputStream = new FileOutputStream(filePath); - fileOutputStream.write("0".getBytes(StandardCharsets.UTF_8)); - fileOutputStream.flush(); - fileOutputStream.close(); - path = new File("C:\\Users\\"+userName+"\\.DesktopAide\\user"); - filePath = new File(path+"\\success.da"); - String result = readToString(String.valueOf(filePath)); - if(!(result ==null)) { - result = result + "\n" + successPlantInt + ".png"; - }else{ - result = successPlantInt + ".png"; - } - fileOutputStream = new FileOutputStream(filePath); - fileOutputStream.write(result.getBytes(StandardCharsets.UTF_8)); - fileOutputStream.flush(); - fileOutputStream.close(); - } else if (growthInt < 100 && growthInt >=50) { - petImage = new ImageIcon("Icon/MainUI/plant/growing/100of100.png"); - }else{ - petImage = new ImageIcon("Icon/MainUI/plant/growing/50of100.png"); - } - MainUI.tablePet.setIcon(petImage); - mainUI.revalidate(); - mainUI.repaint(); - Thread.sleep(500); - } - } - -} diff --git a/src/main/java/EN/UI/MainUI/HelloUI.java b/src/main/java/EN/UI/MainUI/HelloUI.java deleted file mode 100644 index 05d6ea3..0000000 --- a/src/main/java/EN/UI/MainUI/HelloUI.java +++ /dev/null @@ -1,127 +0,0 @@ -package EN.UI.MainUI; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.util.Map; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -@SuppressWarnings("ResultOfMethodCallIgnored") -public class HelloUI extends JFrame { - static int num = 1; - public HelloUI(){ - - //获取屏幕大小 - Dimension getDesktopSize = Toolkit.getDefaultToolkit().getScreenSize(); - this.setBounds((getDesktopSize.width-300)/2,(getDesktopSize.height-200)/2,300,200); - this.setDefaultCloseOperation(HIDE_ON_CLOSE); - this.setLayout(new BorderLayout()); - //用户姓名 - JPanel panel1 = new JPanel(); - JLabel userNameLabel = new JLabel("Enter your nickname here and don't worry, you can modify it later"); - JTextField userNameField = new JTextField(); - panel1.setLayout(new GridLayout(2,1)); - panel1.add(userNameLabel); - panel1.add(userNameField); - this.add(panel1); - this.setResizable(false); - this.setType(Type.UTILITY); - //介绍 - JPanel panel2 = new JPanel(); - panel2.setLayout(new GridLayout(3,1)); - JLabel introduceUser = new JLabel("Welcome",JLabel.CENTER); - JLabel introduce = new JLabel("",JLabel.CENTER); - JLabel introduceNext = new JLabel("The following pages will introduce you to the main features of this program",JLabel.CENTER); - panel2.add(introduceUser); - panel2.add(introduce); - panel2.add(introduceNext); - //介绍1 - JPanel panel3 = new JPanel(); - JTextArea introduce1 = new JTextArea(" Believed? How could such a small window hold so much text\n" + - "Use the method to view the pdf file, in the Documents under the installation directory"); - panel3.setLayout(new BorderLayout()); - panel3.add(introduce1); - introduce1.setEditable(false); - introduce1.setLineWrap(true); - //下一页按钮 - JPanel nextPanel = new JPanel(); - nextPanel.setLayout(new GridLayout(1,2)); - JButton last = new JButton("Previous"); - JButton next = new JButton("Next"); - last.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - if(num == 2){ - HelloUI.this.remove(panel2); - HelloUI.this.add(panel1); - next.setText("Previous"); - HelloUI.this.revalidate(); - HelloUI.this.repaint(); - num --; - } - else if(num ==3){ - HelloUI.this.remove(panel3); - HelloUI.this.add(panel2); - next.setText("Previous"); - HelloUI.this.revalidate(); - HelloUI.this.repaint(); - num--; - } - } - }); - - next.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - if(num == 1){ - introduce.setText(userNameField.getText()); - HelloUI.this.remove(panel1); - HelloUI.this.add(panel2); - next.setText("Previous"); - HelloUI.this.revalidate(); - HelloUI.this.repaint(); - num ++; - } - else if(num == 2){ - HelloUI.this.remove(panel2); - HelloUI.this.add(panel3); - next.setText("finish"); - HelloUI.this.revalidate(); - HelloUI.this.repaint(); - num ++; - } - else{ - Map map = System.getenv(); - String userName = map.get("USERNAME"); - File folderPath = new File("C:\\Users\\" + userName + "\\.DesktopAide\\user"); - File filePath = new File(folderPath + "\\user.da"); - folderPath.mkdirs(); - try { - filePath.createNewFile(); - FileOutputStream fileOutputStream = new FileOutputStream(filePath); - fileOutputStream.write(userNameField.getText().getBytes(StandardCharsets.UTF_8)); - fileOutputStream.flush(); - fileOutputStream.close(); - filePath = new File(folderPath + "\\success.da"); - filePath.createNewFile(); - } catch (IOException ex) { - throw new RuntimeException(ex); - } - HelloUI.this.setVisible(false); - } - } - }); - nextPanel.add(last); - nextPanel.add(next); - this.add(nextPanel,BorderLayout.SOUTH); - } - -} diff --git a/src/main/java/EN/UI/MainUI/MainUI.java b/src/main/java/EN/UI/MainUI/MainUI.java deleted file mode 100644 index 22c57ea..0000000 --- a/src/main/java/EN/UI/MainUI/MainUI.java +++ /dev/null @@ -1,272 +0,0 @@ -package EN.UI.MainUI; - - -import EN.UI.FunctionUI.MoreUI; -import EN.UI.FunctionUI.UserUI; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.io.*; -import java.nio.charset.StandardCharsets; -import java.util.Map; -import java.util.Random; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -public class MainUI extends JFrame { - public static boolean isInCollation = false; - public static JButton tablePet = new JButton(); - //获取X和Y值 - public static double X; - public static double Y; - //收起按钮 - public static ImageIcon lockImage = new ImageIcon("Icon/MainUI/function/unlock.png"); - public static JButton lock = new JButton(lockImage); - //判断是否收起 - public static Boolean isLocked = false; - //判断左侧功能是否展开 - public static Boolean isRelease = false; - - public static Boolean isInEating = false; - static String result; - static void readAppointedLineNumber(File sourceFile, int lineNumber) - throws IOException { - FileReader in = new FileReader(sourceFile); - LineNumberReader reader = new LineNumberReader(in); - String s = ""; - int lines = 0; - while (s != null) { - lines++; - s = reader.readLine(); - if((lines - lineNumber) == 0) { - result = s; - } - } - reader.close(); - in.close(); - } - public MainUI() { - - //获取toolkit - Dimension getScreenSize = Toolkit.getDefaultToolkit().getScreenSize(); - //基本设置 - this.setBounds(getScreenSize.width - 250, getScreenSize.height - 220, 230, 200); - this.setDefaultCloseOperation(EXIT_ON_CLOSE); - this.setResizable(false); - this.setUndecorated(true); - this.setBackground(new Color(0, 0, 0, 0)); - this.setLayout(new BorderLayout()); - this.setType(Type.UTILITY); - //右侧功能界面 - JPanel function = new JPanel(); - function.setPreferredSize(new Dimension(30, 200)); - function.setBackground(new Color(0, 0, 0, 0)); - function.setLayout(new BorderLayout()); - //移动按钮 - ImageIcon moveImage = new ImageIcon("Icon/MainUI/function/move.png"); - JLabel move = new JLabel(moveImage); - move.addMouseListener(new MouseAdapter() { - @Override - public void mousePressed(MouseEvent e) { - X = e.getPoint().getX(); - Y = e.getPoint().getY(); - - } - }); - move.addMouseMotionListener(new MouseAdapter() { - @Override - public void mouseDragged(MouseEvent e) { - MainUI.this.setLocation((int) (e.getXOnScreen() - X - 200), (int) (e.getYOnScreen() - Y)); - - } - }); - //收起按钮 - lock.setContentAreaFilled(false); - lock.setBorderPainted(false); - //整理按钮 - ImageIcon collationImage = new ImageIcon("Icon/MainUI/function/collation.png"); - JButton collation = new JButton(collationImage); - - collation.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - if(isInCollation){ - isInCollation = false; - JOptionPane.showMessageDialog(null,"已成功关闭","整理功能",JOptionPane.INFORMATION_MESSAGE); - }else{ - isInCollation = true; - JOptionPane.showMessageDialog(null,"已成功开启","整理功能",JOptionPane.INFORMATION_MESSAGE); - } - } - }); - collation.setContentAreaFilled(false); - collation.setBorderPainted(false); - //更多按钮 - ImageIcon moreImage = new ImageIcon("Icon/MainUI/function/more.png"); - JButton more = new JButton(moreImage); - more.setContentAreaFilled(false); - more.setBorderPainted(false); - more.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - MoreUI moreUI = new MoreUI(); - moreUI.setVisible(true); - } - }); - //退出按钮 - ImageIcon exitImage = new ImageIcon("Icon/MainUI/function/exit.png"); - JButton exit = new JButton(exitImage); - exit.setContentAreaFilled(false); - exit.setBorderPainted(false); - exit.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - System.exit(0); - } - }); - //将收起的整合到一起 - JPanel lockPanel = new JPanel(); - lockPanel.setBackground(new Color(0, 0, 0, 0)); - lockPanel.setLayout(new GridLayout(3, 1)); - lockPanel.add(collation); - lockPanel.add(more); - lockPanel.add(exit); - //将收起和移动合并为一个Panel - JPanel moveAndLock = new JPanel(); - moveAndLock.setLayout(new GridLayout(2, 1)); - moveAndLock.setBackground(new Color(0, 0, 0, 0)); - moveAndLock.add(move); - moveAndLock.add(lock); - //lock的监听函数 - lock.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - if (isLocked) { - lockImage = new ImageIcon("Icon/MainUI/function/unlock.png"); - lock.setIcon(lockImage); - function.add(lockPanel, BorderLayout.CENTER); - isLocked = false; - } else { - lockImage = new ImageIcon("Icon/MainUI/function/lock.png"); - lock.setIcon(lockImage); - function.remove(lockPanel); - isLocked = true; - } - MainUI.this.revalidate(); - MainUI.this.repaint(); - } - }); - //将所有组件加入到function中 - function.add(moveAndLock, BorderLayout.NORTH); - function.add(lockPanel, BorderLayout.CENTER); - //将function加入到UI中 - this.add(function, BorderLayout.EAST); - //添加桌宠 - - tablePet.setContentAreaFilled(false); - tablePet.setBorderPainted(false); - this.add(tablePet, BorderLayout.CENTER); - //添加桌宠左侧选项卡 - JPanel petPanel = new JPanel(); - petPanel.setLayout(new GridLayout(3, 1)); - petPanel.setBackground(new Color(0, 0, 0, 0)); - //添加图标 - ImageIcon petEatImage = new ImageIcon("Icon/MainUI/action/eat.png"); - JButton petEat = new JButton(petEatImage); - petEat.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - Toolkit toolkit = Toolkit.getDefaultToolkit(); - Random whatToEat = new Random(); - int eat = whatToEat.nextInt(5); - ImageIcon eatImageIcon; - if (eat == 0) { - eatImageIcon = new ImageIcon("Icon/MainUI/food/hot dog.png"); - } else if (eat == 1) { - eatImageIcon = new ImageIcon("Icon/MainUI/food/ice.png"); - } else if (eat == 2) { - eatImageIcon = new ImageIcon("Icon/MainUI/food/meat.png"); - } else if (eat == 3) { - eatImageIcon = new ImageIcon("Icon/MainUI/food/spring roll.png"); - } else { - eatImageIcon = new ImageIcon("Icon/MainUI/food/taco.png"); - } - Image eatImage = eatImageIcon.getImage(); - Cursor cu = toolkit.createCustomCursor(eatImage, new Point(10, 10), "eat"); - MainUI.this.setCursor(cu); - isInEating = true; - } - }); - petEat.setContentAreaFilled(false); - petEat.setBorderPainted(false); - petPanel.add(petEat); - ImageIcon petChatImage = new ImageIcon("Icon/MainUI/action/chat.png"); - JButton petChat = new JButton(petChatImage); - petChat.setContentAreaFilled(false); - petChat.setBorderPainted(false); - petPanel.add(petChat); - ImageIcon petUserImage = new ImageIcon("Icon/MainUI/action/user.png"); - JButton petUser = new JButton(petUserImage); - petUser.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - UserUI userUI; - try { - userUI = new UserUI(); - } catch (IOException ex) { - throw new RuntimeException(ex); - } - userUI.setVisible(true); - } - }); - petUser.setContentAreaFilled(false); - petUser.setBorderPainted(false); - petPanel.add(petUser); - //给桌宠添加单击事件 - tablePet.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - if (isInEating) { - //noinspection deprecation - MainUI.this.setCursor(0); - Map map = System.getenv(); - String userName = map.get("USERNAME"); - File folderPath = new File("C:\\Users\\"+userName+"\\.DesktopAide\\growth"); - File filePath = new File(folderPath+"\\growth.da"); - int line = 1; - try { - readAppointedLineNumber(filePath,line); - } catch (IOException ex) { - throw new RuntimeException(ex); - } - int growth = Integer.parseInt(result)+5; - FileOutputStream fileOutputStream; - try { - fileOutputStream = new FileOutputStream(filePath); - fileOutputStream.write(String.valueOf(growth).getBytes(StandardCharsets.UTF_8)); - fileOutputStream.flush(); - fileOutputStream.close(); - } catch (IOException ex) { - throw new RuntimeException(ex); - } - - isInEating = false; - } else { - if (isRelease) { - MainUI.this.remove(petPanel); - isRelease = false; - } else { - MainUI.this.add(petPanel, BorderLayout.WEST); - isRelease = true; - } - MainUI.this.revalidate(); - MainUI.this.repaint(); - } - } - }); - } -} diff --git a/src/main/java/RUS/Function/Collation/Collation.java b/src/main/java/RUS/Function/Collation/Collation.java deleted file mode 100644 index 30ce47d..0000000 --- a/src/main/java/RUS/Function/Collation/Collation.java +++ /dev/null @@ -1,86 +0,0 @@ -package RUS.Function.Collation; - -import java.io.*; -import java.util.Map; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -@SuppressWarnings("ResultOfMethodCallIgnored") -public class Collation { - static String name; - static String data; - static void readAppointedLineNumber(File sourceFile) - throws IOException { - FileReader in = new FileReader(sourceFile); - LineNumberReader reader = new LineNumberReader(in); - String s = ""; - int lines = 0; - while (s != null) { - lines++; - s = reader.readLine(); - if((lines - 1) == 0) { - data = s; - } - } - reader.close(); - in.close(); - } - - public static void findEndsWith(File file, String sword) throws IOException { - //将父文件下的所有文件夹以及文件存入File[]中 - File[] files = file.listFiles(); - //遍历所有文件夹以及文件 - assert files != null; - for(File i : files) { - //判断是否是文件夹 - if(i.isDirectory()) { - //是文件夹,递归 - //findEndsWith(i,sword); - }else { - //是文件,判断是否是以.后缀名结尾 - if(i.getPath().endsWith(sword)) { - Map map = System.getenv(); - String userName = map.get("USERNAME"); - File folderPath = new File("C:\\Users\\"+userName+"\\.DesktopAide\\collation"); - File filePath = new File(folderPath+"\\path.da"); - readAppointedLineNumber(filePath); - File doc = new File(data+"\\"+name+"\\"+i.getName()); - File docp = new File(i.getPath()); - docp.renameTo(doc); - } - - } - } - } - public static void Collation() throws IOException { - BufferedReader reader; - Map map = System.getenv(); - String userName = map.get("USERNAME"); - File folderPath = new File("C:\\Users\\"+userName+"\\.DesktopAide\\collation"); - File filePath = new File(folderPath+"\\path.da"); - readAppointedLineNumber(filePath); - try { - reader = new BufferedReader(new FileReader( - folderPath+"\\data.da")); - String line = reader.readLine(); - while (line != null) { - int a = line.indexOf(" "); - name = line.substring(0,a); - String sword = line.substring(a+1); - File desktopFolder = new File(data+"\\"+name); - if (!desktopFolder.exists()){ - desktopFolder.mkdirs(); - } - findEndsWith(new File(data),sword); - // read next line - line = reader.readLine(); - } - reader.close(); - } catch (IOException e) { - e.printStackTrace(); - } - - } -} diff --git a/src/main/java/RUS/Function/Growth/Growth.java b/src/main/java/RUS/Function/Growth/Growth.java deleted file mode 100644 index 8120413..0000000 --- a/src/main/java/RUS/Function/Growth/Growth.java +++ /dev/null @@ -1,50 +0,0 @@ -package RUS.Function.Growth; - -import java.io.*; -import java.nio.charset.StandardCharsets; -import java.util.Map; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -@SuppressWarnings("ResultOfMethodCallIgnored") -public class Growth { - static String result; - static void readAppointedLineNumber(File sourceFile, int lineNumber) - throws IOException { - FileReader in = new FileReader(sourceFile); - LineNumberReader reader = new LineNumberReader(in); - String s = ""; - int lines = 0; - while (s != null) { - lines++; - s = reader.readLine(); - if((lines - lineNumber) == 0) { - result = s; - } - } - reader.close(); - in.close(); - } - public String growth() throws IOException { - - Map map = System.getenv(); - String userName = map.get("USERNAME"); - File folderPath = new File("C:\\Users\\"+userName+"\\.DesktopAide\\growth"); - File filePath = new File(folderPath+"\\growth.da"); - if(!folderPath.exists()) { - folderPath.mkdirs(); - } - if(!filePath.exists()){ - filePath.createNewFile(); - FileOutputStream fileOutputStream = new FileOutputStream(filePath); - fileOutputStream.write("0".getBytes(StandardCharsets.UTF_8)); - fileOutputStream.flush(); - fileOutputStream.close(); - } - int needReadLine = 1; - readAppointedLineNumber(filePath,needReadLine); - return result; - } -} diff --git a/src/main/java/RUS/Function/Puppet/Puppet.java b/src/main/java/RUS/Function/Puppet/Puppet.java deleted file mode 100644 index c42c366..0000000 --- a/src/main/java/RUS/Function/Puppet/Puppet.java +++ /dev/null @@ -1,23 +0,0 @@ -package RUS.Function.Puppet; - -import javax.swing.*; -import java.awt.*; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -public class Puppet extends JFrame { - public Puppet(){ - this.setSize(250,180); - ImageIcon puppetImage = new ImageIcon("Icon/Function/Puppet/1.png"); - JLabel puppet = new JLabel(puppetImage); - this.add(puppet); - this.setDefaultCloseOperation(HIDE_ON_CLOSE); - this.setResizable(false); - this.setUndecorated(true); - this.setBackground(new Color(0, 0, 0, 0)); - this.setType(Type.UTILITY); - this.setAlwaysOnTop(true); - } - } diff --git a/src/main/java/RUS/Function/Puppet/PuppetRun.java b/src/main/java/RUS/Function/Puppet/PuppetRun.java deleted file mode 100644 index 754886d..0000000 --- a/src/main/java/RUS/Function/Puppet/PuppetRun.java +++ /dev/null @@ -1,23 +0,0 @@ -package RUS.Function.Puppet; - -import java.awt.*; - -import static CN.UI.FunctionPanel.puppetPanel.puppet; - -/** - * @author chenpuhao - * @version 3.2.x - * @Date 2023/2/4 - */ -public class PuppetRun extends Thread{ - public static boolean exit = false; - public void run(){ - while (!exit){ - puppet.setVisible(true); - PointerInfo pInfo = MouseInfo.getPointerInfo(); - Point p = pInfo.getLocation(); - puppet.setLocation((int) p.getX()-110, (int) p.getY()); - } - puppet.setVisible(false); - } -} diff --git a/src/main/java/RUS/Function/Update/CheckUpdate.java b/src/main/java/RUS/Function/Update/CheckUpdate.java deleted file mode 100644 index 74ad49e..0000000 --- a/src/main/java/RUS/Function/Update/CheckUpdate.java +++ /dev/null @@ -1,57 +0,0 @@ -package RUS.Function.Update; - -import java.io.*; -import java.net.URL; - -/** - * @author chenpuhao - * @Date 2023/2/6 - */ -public class CheckUpdate { - - private static void downloadUsingStream(String urlStr, String file) throws IOException{ - URL url = new URL(urlStr); - BufferedInputStream bis = new BufferedInputStream(url.openStream()); - FileOutputStream fis = new FileOutputStream(file); - byte[] buffer = new byte[1024]; - int count=0; - while((count = bis.read(buffer,0,1024)) != -1) - { - fis.write(buffer, 0, count); - } - fis.close(); - bis.close(); - } - static String result; - static void readAppointedLineNumber(File sourceFile) - throws IOException { - FileReader in = new FileReader(sourceFile); - LineNumberReader reader = new LineNumberReader(in); - String s = ""; - int lines = 0; - while (s != null) { - lines++; - s = reader.readLine(); - if((lines - 1) == 0) { - result = s; - } - } - reader.close(); - in.close(); - } - - public String CheckUpdate() throws IOException { - File file = new File("update.txt"); - if(!file.exists()){ - file.createNewFile(); - } - downloadUsingStream("https://desktopaide.chenpuhao.me/update.txt",file.toString()); - readAppointedLineNumber(file); - file.delete(); - if(result.equals("3.4.1")){ - result = "true"; - } - return result; - } - } - diff --git a/src/main/java/RUS/Function/Update/Update.java b/src/main/java/RUS/Function/Update/Update.java deleted file mode 100644 index 8deec70..0000000 --- a/src/main/java/RUS/Function/Update/Update.java +++ /dev/null @@ -1,120 +0,0 @@ -package RUS.Function.Update; - -import javax.net.ssl.*; -import javax.swing.*; -import java.awt.*; -import java.io.*; -import java.net.URI; -import java.net.URL; -import java.security.cert.CertificateException; -import java.security.cert.X509Certificate; - -/** - * @author chenpuhao - * @Date 2023/2/6 - */ -public class Update { - private static void downloadUsingStream(String urlStr, String file) throws IOException{ - URL url = new URL(urlStr); - BufferedInputStream bis = new BufferedInputStream(url.openStream()); - FileOutputStream fis = new FileOutputStream(file); - byte[] buffer = new byte[10240000]; - int count=0; - while((count = bis.read(buffer,0,10240000)) != -1) - { - fis.write(buffer, 0, count); - } - fis.close(); - bis.close(); - } - public static byte[] readInputStream(InputStream inputStream) throws IOException { - byte[] buffer = new byte[10240]; - int len = 0; - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - while((len = inputStream.read(buffer)) != -1) { - bos.write(buffer, 0, len); - } - bos.close(); - return bos.toByteArray(); - } - public static void trustAllHttpsCertificates() throws Exception { - TrustManager[] trustAllCerts = new TrustManager[1]; - TrustManager tm = new miTM(); - trustAllCerts[0] = tm; - SSLContext sc = SSLContext.getInstance("SSL"); - sc.init(null, trustAllCerts, null); - HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); - } - - static class miTM implements TrustManager,X509TrustManager { - public X509Certificate[] getAcceptedIssuers() { - return null; - } - - public boolean isServerTrusted(X509Certificate[] certs) { - return true; - } - - public boolean isClientTrusted(X509Certificate[] certs) { - return true; - } - - public void checkServerTrusted(X509Certificate[] certs, String authType) - throws CertificateException { - return; - } - - public void checkClientTrusted(X509Certificate[] certs, String authType) throws CertificateException{ - return; - } - } - - /** - * 忽略HTTPS请求的SSL证书,必须在openConnection之前调用 - * @throws Exception - */ - public static void ignoreSsl() throws Exception{ - HostnameVerifier hv = new HostnameVerifier() { - public boolean verify(String urlHostName, SSLSession session) { - return true; - } - }; - trustAllHttpsCertificates(); - HttpsURLConnection.setDefaultHostnameVerifier(hv); - } - private static void browse2(String url) throws Exception { - Desktop desktop = Desktop.getDesktop(); - if (Desktop.isDesktopSupported() && desktop.isSupported(Desktop.Action.BROWSE)) { - URI uri = new URI(url); - desktop.browse(uri); - } - } - - public Update() throws Exception { - Update.ignoreSsl(); - System.setProperty("https.protocols", "TLSv1.2,TLSv1.1,SSLv3"); - CheckUpdate checkUpdate = new CheckUpdate(); - String result = checkUpdate.CheckUpdate(); - File filePath = new File("download"); - if(!filePath.exists()){ - filePath.mkdirs(); - } - if(!result.equals("true")){ - File file = new File("download/DesktopAide-rus-"+result+"-beta-setup.exe"); - if(!file.exists()){ - file.createNewFile(); - } - int n = JOptionPane.showConfirmDialog(null,"При обнаружении обновления версии выберите Да, чтобы использовать программное обеспечение для загрузки инсталляционного пакета, предполагаемое время составляет 15-20 мин, в противном случае перейдите на официальный сайт для загрузки","Доступно обновление версии",JOptionPane.YES_NO_OPTION); - if(n == 0) { - - downloadUsingStream("https://github.com/chenpuhao/DesktopAide/releases/download/V" + result + "/DesktopAide-rus-" + result + "-setup.exe", String.valueOf(file)); - JOptionPane.showMessageDialog(null, "Загрузка завершена, и установщик откроется для вас позже", "Загрузка завершена", JOptionPane.PLAIN_MESSAGE); - Desktop.getDesktop().open(file); - System.exit(0); - }else{ - browse2("https://desktopaide.chenpuhao.me/download.html"); - System.exit(0); - } - } - } -} diff --git a/src/main/java/RUS/UI/FunctionPanel/CollationPanel.java b/src/main/java/RUS/UI/FunctionPanel/CollationPanel.java deleted file mode 100644 index 4f4bb6a..0000000 --- a/src/main/java/RUS/UI/FunctionPanel/CollationPanel.java +++ /dev/null @@ -1,184 +0,0 @@ -package RUS.UI.FunctionPanel; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.io.*; -import java.nio.charset.StandardCharsets; -import java.util.Map; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -@SuppressWarnings("ResultOfMethodCallIgnored") -public class CollationPanel extends JPanel { - static String data; - static void readAppointedLineNumber(File sourceFile) - throws IOException { - FileReader in = new FileReader(sourceFile); - LineNumberReader reader = new LineNumberReader(in); - String s = ""; - int lines = 0; - while (s != null) { - lines++; - s = reader.readLine(); - if((lines - 1) == 0) { - data = s; - } - } - reader.close(); - in.close(); - } - public CollationPanel() throws IOException { - this.setLayout(new BorderLayout()); - //定义组件 - //桌面路径 - JPanel path = new JPanel(); - path.setLayout(new GridLayout(4,1)); - JLabel desktopPath = new JLabel("Выберите свой рабочий путь:"); - ButtonGroup pathButtonGroup = new ButtonGroup(); - Map map = System.getenv(); - String userName = map.get("USERNAME"); - JRadioButton desktop = new JRadioButton("C:\\Users\\" + userName + "\\Desktop"); - JRadioButton oneDrive = new JRadioButton("C:\\Users\\" + userName + "\\OneDrive\\Desktop"); - JRadioButton other = new JRadioButton("друг:"); - pathButtonGroup.add(desktop); - pathButtonGroup.add(oneDrive); - pathButtonGroup.add(other); - JTextField otherTxt = new JTextField(); - File folderPath = new File("C:\\Users\\" + userName + "\\.DesktopAide\\collation"); - File filePath = new File(folderPath + "\\path.da"); - if(filePath.exists()) { - readAppointedLineNumber(filePath); - if (data.equals("C:\\Users\\" + userName + "\\Desktop")) { - desktop.setSelected(true); - } else if (data.equals("C:\\Users\\" + userName + "\\OneDrive\\Desktop")) { - oneDrive.setSelected(true); - } else { - other.setSelected(true); - otherTxt.setText(data); - } - } - JPanel otherPanel = new JPanel(); - otherPanel.setLayout(new BorderLayout()); - otherPanel.add(other,BorderLayout.WEST); - otherPanel.add(otherTxt,BorderLayout.CENTER); - path.add(desktopPath); - path.add(desktop); - path.add(oneDrive); - path.add(otherPanel); - //配置后缀 - JPanel methodPanel = new JPanel(); - methodPanel.setLayout(new BorderLayout()); - JLabel method = new JLabel("Файловая фиксация/n, которая должна быть собрана для конфигурации, состоит из: имя папки (пустой) суффикс, например: PPT"); - JTextArea methodArea = new JTextArea(); - filePath = new File(folderPath + "\\data.da"); - if (filePath.exists()){ - long fileLengthLong = filePath.length(); - byte[] fileContent = new byte[(int) fileLengthLong]; - try { - FileInputStream inputStream = new FileInputStream(filePath); - inputStream.read(fileContent); - inputStream.close(); - } catch (Exception e) { - // TODO: handle exception - } - String string = new String(fileContent); - methodArea.setText(string); - } - JScrollPane methodJSP = new JScrollPane(methodArea); - JPanel methodCheck = new JPanel(); - methodCheck.setLayout(new GridLayout(1,2)); - JButton methodSave = new JButton("сохран"); - methodSave.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - if (!desktop.isSelected() && !oneDrive.isSelected() && !other.isSelected()) { - JOptionPane.showMessageDialog(null,"Выберите рабочий путь","ошибк",JOptionPane.ERROR_MESSAGE); - } else { - Map map = System.getenv(); - String userName = map.get("USERNAME"); - File folderPath = new File("C:\\Users\\" + userName + "\\.DesktopAide\\collation"); - File filePath = new File(folderPath + "\\path.da"); - if(!folderPath.exists()){ - folderPath.mkdirs(); - } - if (!filePath.exists()) { - try { - filePath.createNewFile(); - } catch (IOException ex) { - throw new RuntimeException(ex); - } - } - if (desktop.isSelected()) { - FileOutputStream fileOutputStream; - try { - fileOutputStream = new FileOutputStream(filePath); - fileOutputStream.write(desktop.getText().getBytes(StandardCharsets.UTF_8)); - fileOutputStream.flush(); - fileOutputStream.close(); - } catch (IOException ex) { - throw new RuntimeException(ex); - } - } - if (oneDrive.isSelected()) { - FileOutputStream fileOutputStream; - try { - fileOutputStream = new FileOutputStream(filePath); - fileOutputStream.write(oneDrive.getText().getBytes(StandardCharsets.UTF_8)); - fileOutputStream.flush(); - fileOutputStream.close(); - } catch (IOException ex) { - throw new RuntimeException(ex); - } - } - if (other.isSelected()) { - FileOutputStream fileOutputStream; - try { - fileOutputStream = new FileOutputStream(filePath); - fileOutputStream.write(otherTxt.getText().getBytes(StandardCharsets.UTF_8)); - fileOutputStream.flush(); - fileOutputStream.close(); - } catch (IOException ex) { - throw new RuntimeException(ex); - } - } - filePath = new File(folderPath + "\\data.da"); - if(!filePath.exists()){ - try { - filePath.createNewFile(); - } catch (IOException ex) { - throw new RuntimeException(ex); - } - } - FileOutputStream fileOutputStream; - try { - fileOutputStream = new FileOutputStream(filePath); - fileOutputStream.write(methodArea.getText().getBytes(StandardCharsets.UTF_8)); - fileOutputStream.flush(); - fileOutputStream.close(); - } catch (IOException ex) { - throw new RuntimeException(ex); - } - JOptionPane.showMessageDialog(null,"Спасти!","Получилось!",JOptionPane.PLAIN_MESSAGE); - } - } - }); - JButton methodClean = new JButton("очист"); - methodClean.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - methodArea.setText(""); - } - }); - methodCheck.add(methodSave); - methodCheck.add(methodClean); - methodPanel.add(method,BorderLayout.NORTH); - methodPanel.add(methodJSP,BorderLayout.CENTER); - methodPanel.add(methodCheck,BorderLayout.SOUTH); - this.add(path,BorderLayout.NORTH); - this.add(methodPanel,BorderLayout.CENTER); - } -} diff --git a/src/main/java/RUS/UI/FunctionPanel/FindPanel.java b/src/main/java/RUS/UI/FunctionPanel/FindPanel.java deleted file mode 100644 index a08eaf1..0000000 --- a/src/main/java/RUS/UI/FunctionPanel/FindPanel.java +++ /dev/null @@ -1,86 +0,0 @@ -package RUS.UI.FunctionPanel; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -/** - * @author chenpuhao - * @version 3.2.x - * @Date 2023/2/4 - */ -public class FindPanel extends JPanel { - static JTextField pathField = new JTextField(); - static JTextField nameField = new JTextField(); - static File file = new File(pathField.getText()); - static String keyWord = nameField.getText(); - public static List searchFiles(File folder, final String keyword) { - List result = new ArrayList<>(); - if (folder.isFile()) - result.add(folder); - File[] subFolders = folder.listFiles(file -> { - if (file.isDirectory()) { - return true; - } - return file.getName().toLowerCase().contains(keyword); - }); - if (subFolders != null) { - for (File file : subFolders) { - if (file.isFile()) { - // 如果是文件则将文件添加到结果列表中 - result.add(file); - } else { - // 如果是文件夹,则递归调用本方法,然后把所有的文件加到结果列表中 - result.addAll(searchFiles(file, keyword)); - } - } - } - return result; - } - public FindPanel(){ - this.setLayout(new BorderLayout()); - Map map = System.getenv(); - String userName = map.get("USERNAME"); - JLabel pathLabel = new JLabel("Каталог, который нужно найти, например :C:\\Users\\" + userName + "\\Desktop"); - JLabel fileLabel = new JLabel("Ключевые слова в названии файла, которые необходимо найти, например :DesktopAide"); - JButton check = new JButton("увер"); - check.addMouseListener(new MouseAdapter() { - public void mouseClicked(MouseEvent e) { - file = new File(pathField.getText()); - File file3 = new File(file.toURI()); - keyWord = nameField.getText(); - List files = searchFiles(file3, keyWord); - StringBuilder filePath = new StringBuilder(); - for (File file : files) { - File file1 = new File(file.getAbsolutePath()); - filePath.append("\n").append(file1); - try { - Desktop.getDesktop().open(file1); - } catch (IOException e1) { - - e1.printStackTrace(); - } - } - if (filePath.toString().equals("")) { - JOptionPane.showMessageDialog(null, "В этом каталоге нет документов с этим ключевым словом", "Поиск завершен!", JOptionPane.ERROR_MESSAGE); - } else { - JOptionPane.showMessageDialog(null, "В общей сложности были найдены следующие документы:" + filePath, "Поиск завершен!", JOptionPane.PLAIN_MESSAGE); - } - } - }); - JPanel findPanel = new JPanel(); - findPanel.setLayout(new GridLayout (5 , 1 )); - findPanel.add(pathLabel); - findPanel.add(pathField); - findPanel.add(fileLabel); - findPanel.add(nameField); - findPanel.add(check); - this.add(findPanel); - } -} diff --git a/src/main/java/RUS/UI/FunctionPanel/puppetPanel.java b/src/main/java/RUS/UI/FunctionPanel/puppetPanel.java deleted file mode 100644 index f80c350..0000000 --- a/src/main/java/RUS/UI/FunctionPanel/puppetPanel.java +++ /dev/null @@ -1,94 +0,0 @@ -package RUS.UI.FunctionPanel; - -import RUS.Function.Puppet.Puppet; -import RUS.Function.Puppet.PuppetRun; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.io.*; -import java.nio.charset.StandardCharsets; -import java.util.Map; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -@SuppressWarnings("ResultOfMethodCallIgnored") -public class puppetPanel extends JPanel { - public static JRadioButton yes = new JRadioButton("нача"); - static String result; - public static PuppetRun puppetRun ; - - static void readAppointedLineNumber(File sourceFile, int lineNumber) - throws IOException { - FileReader in = new FileReader(sourceFile); - LineNumberReader reader = new LineNumberReader(in); - String s = ""; - int lines = 0; - while (s != null) { - lines++; - s = reader.readLine(); - if((lines - lineNumber) == 0) { - result = s; - } - } - reader.close(); - in.close(); - } - public static Puppet puppet = new Puppet(); - public puppetPanel() throws IOException { - Map map = System.getenv(); - String userName = map.get("USERNAME"); - File folderPath = new File("C:\\Users\\"+userName+"\\.DesktopAide\\puppet"); - File filePath = new File(folderPath+"\\puppet.da"); - if(!folderPath.exists()) { - folderPath.mkdirs(); - } - if(!filePath.exists()){ - filePath.createNewFile(); - FileOutputStream fileOutputStream = new FileOutputStream(filePath); - fileOutputStream.write("false".getBytes(StandardCharsets.UTF_8)); - fileOutputStream.flush(); - fileOutputStream.close(); - } - //定义组件 - JLabel introduce = new JLabel("Открыть или выключить функцию марионетки мыши"); - ButtonGroup buttonGroup = new ButtonGroup(); - JRadioButton no = new JRadioButton("закр"); - buttonGroup.add(yes); - buttonGroup.add(no); - JPanel buttonPanel = new JPanel(); - buttonPanel.setLayout(new GridLayout(1,2)); - buttonPanel.add(yes); - buttonPanel.add(no); - JButton save = new JButton("сохран"); - - save.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - - if(yes.isSelected()){ - PuppetRun.exit = false; - puppetRun = new PuppetRun(); - puppetRun.start(); - }else{ - PuppetRun.exit = true; - - } - } - }); - this.setLayout(new GridLayout(3,1)); - this.add(introduce); - this.add(buttonPanel); - this.add(save); - int line = 1; - readAppointedLineNumber(filePath,line); - if(result.equals("true")){ - yes.setSelected(true); - }else{ - no.setSelected(true); - } - } -} diff --git a/src/main/java/RUS/UI/FunctionUI/MoreUI.java b/src/main/java/RUS/UI/FunctionUI/MoreUI.java deleted file mode 100644 index 28961e6..0000000 --- a/src/main/java/RUS/UI/FunctionUI/MoreUI.java +++ /dev/null @@ -1,98 +0,0 @@ -package RUS.UI.FunctionUI; - -import RUS.UI.FunctionPanel.CollationPanel; -import RUS.UI.FunctionPanel.FindPanel; -import RUS.UI.FunctionPanel.puppetPanel; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.io.IOException; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -public class MoreUI extends JFrame { - public MoreUI(){ - //获取桌面大小 - Dimension getScreenSize = Toolkit.getDefaultToolkit().getScreenSize(); - //基本设置 - this.setBounds((getScreenSize.width-600)/2,(getScreenSize.height-500)/2,600,500); - this.setDefaultCloseOperation(HIDE_ON_CLOSE); - this.setResizable(false); - JPanel moreUIPanel = new JPanel(); - moreUIPanel.setLayout(new BorderLayout()); - ImageIcon title = new ImageIcon("Icon/MoreUI/favicon.png"); - this.setIconImage(title.getImage()); - JScrollPane jsp = new JScrollPane(); - JPanel leftSetting = new JPanel(); - jsp.setViewportView(leftSetting); - leftSetting.setLayout(new GridLayout(3,1)); - //添加整理的设置 - ImageIcon collationImage = new ImageIcon("Icon/MoreUI/collation.png"); - JButton collation = new JButton("Настройка функции сортировки"); - collation.setIcon(collationImage); - collation.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - moreUIPanel.removeAll(); - moreUIPanel.setLayout(new BorderLayout()); - moreUIPanel.add(leftSetting,BorderLayout.WEST); - CollationPanel collationPanel; - try { - collationPanel = new CollationPanel(); - } catch (IOException ex) { - throw new RuntimeException(ex); - } - moreUIPanel.add(collationPanel,BorderLayout.CENTER); - MoreUI.this.revalidate(); - MoreUI.this.repaint(); - } - }); - leftSetting.add(collation); - //添加QQ机器人设置 - ImageIcon qqImage = new ImageIcon("Icon/MoreUI/hand.png"); - JButton qq = new JButton("Мышонок."); - qq.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - moreUIPanel.removeAll(); - moreUIPanel.setLayout(new BorderLayout()); - moreUIPanel.add(leftSetting,BorderLayout.WEST); - puppetPanel handPanel; - try { - handPanel = new puppetPanel(); - } catch (IOException ex) { - throw new RuntimeException(ex); - } - moreUIPanel.add(handPanel,BorderLayout.CENTER); - MoreUI.this.revalidate(); - MoreUI.this.repaint(); - } - }); - qq.setIcon(qqImage); - leftSetting.add(qq); - //查找文件 - ImageIcon searchImage = new ImageIcon("Icon/MoreUI/search.png"); - JButton search = new JButton("Найди файл."); - search.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - moreUIPanel.removeAll(); - moreUIPanel.setLayout(new BorderLayout()); - moreUIPanel.add(leftSetting,BorderLayout.WEST); - FindPanel findPanel; - findPanel = new FindPanel(); - moreUIPanel.add(findPanel,BorderLayout.CENTER); - MoreUI.this.revalidate(); - MoreUI.this.repaint(); - } - }); - search.setIcon(searchImage); - leftSetting.add(search); - moreUIPanel.add(jsp,BorderLayout.WEST); - this.add(moreUIPanel); - } -} diff --git a/src/main/java/RUS/UI/FunctionUI/UserUI.java b/src/main/java/RUS/UI/FunctionUI/UserUI.java deleted file mode 100644 index 70c5d8f..0000000 --- a/src/main/java/RUS/UI/FunctionUI/UserUI.java +++ /dev/null @@ -1,151 +0,0 @@ -package RUS.UI.FunctionUI; - -import RUS.UI.IntroduceUI.*; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.io.*; -import java.util.Map; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -public class UserUI extends JFrame { - static String result; - static void readAppointedLineNumber(File sourceFile) - throws IOException { - FileReader in = new FileReader(sourceFile); - LineNumberReader reader = new LineNumberReader(in); - String s = ""; - int lines = 0; - while (s != null) { - lines++; - s = reader.readLine(); - if((lines - 1) == 0) { - result = s; - } - } - reader.close(); - in.close(); - } - static int getTotalLines(File file) throws IOException { - FileReader in = new FileReader(file); - LineNumberReader reader = new LineNumberReader(in); - String s = reader.readLine(); - int lines = 0; - while (s != null) { - lines++; - s = reader.readLine(); - } - reader.close(); - in.close(); - return lines; - } - public UserUI() throws IOException { - //获取屏幕大小 - Dimension getDesktopSize = Toolkit.getDefaultToolkit().getScreenSize(); - this.setBounds((getDesktopSize.width - 300) / 2, (getDesktopSize.height - 500) / 2, 300, 500); - this.setDefaultCloseOperation(HIDE_ON_CLOSE); - this.setLayout(new BorderLayout()); - this.setResizable(false); - this.setType(Type.UTILITY); - //用户姓名 - Map map = System.getenv(); - String userName = map.get("USERNAME"); - File folderPath = new File("C:\\Users\\" + userName + "\\.DesktopAide\\user"); - File filePath = new File(folderPath + "\\user.da"); - readAppointedLineNumber(filePath); - JLabel UserName = new JLabel("Добр пожалова "+result); - JLabel userData = new JLabel("Вы посадили следующие растения."); - JPanel jp = new JPanel(); - jp.setLayout(new GridLayout(2,1)); - jp.add(UserName); - jp.add(userData); - filePath = new File(folderPath + "\\success.da"); - int total = getTotalLines(filePath); - JScrollPane jsp = new JScrollPane(); - jsp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); - JPanel success = new JPanel(); - jsp.setViewportView(success); - success.setLayout(new GridLayout(total,1)); - BufferedReader reader; - try { - reader = new BufferedReader(new FileReader( - filePath)); - String line = reader.readLine(); - while (line != null) { - ImageIcon img = new ImageIcon("Icon/MainUI/plant/success/"+line); - JButton jb = new JButton(img); - success.add(jb); - String finalLine = line; - jb.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - switch (finalLine) { - case "0.png" -> { - UI0 ui = new UI0(); - ui.setVisible(true); - } - case "1.png" -> { - UI1 ui = new UI1(); - ui.setVisible(true); - } - case "2.png" -> { - UI2 ui = new UI2(); - ui.setVisible(true); - } - case "3.png" -> { - UI3 ui = new UI3(); - ui.setVisible(true); - } - case "4.png" -> { - UI4 ui = new UI4(); - ui.setVisible(true); - } - case "5.png" -> { - UI5 ui = new UI5(); - ui.setVisible(true); - } - case "6.png" -> { - UI6 ui = new UI6(); - ui.setVisible(true); - } - case "7.png" -> { - UI7 ui = new UI7(); - ui.setVisible(true); - } - case "8.png" -> { - UI8 ui = new UI8(); - ui.setVisible(true); - } - case "9.png" -> { - UI9 ui = new UI9(); - ui.setVisible(true); - } - case "10.png" -> { - UI10 ui = new UI10(); - ui.setVisible(true); - } - case "11.png" -> { - UI11 ui = new UI11(); - ui.setVisible(true); - } - } - } - }); - // read next line - line = reader.readLine(); - } - reader.close(); - } catch (IOException e) { - e.printStackTrace(); - } - this.add(jp,BorderLayout.NORTH); - this.add(jsp); - } - - -} diff --git a/src/main/java/RUS/UI/IntroduceUI/UI0.java b/src/main/java/RUS/UI/IntroduceUI/UI0.java deleted file mode 100644 index e04f385..0000000 --- a/src/main/java/RUS/UI/IntroduceUI/UI0.java +++ /dev/null @@ -1,31 +0,0 @@ -package RUS.UI.IntroduceUI; - -import javax.swing.*; -import java.awt.*; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -public class UI0 extends JFrame { - public UI0(){ - - Dimension getDesktopSize = Toolkit.getDefaultToolkit().getScreenSize(); - this.setBounds((getDesktopSize.width-300)/2,(getDesktopSize.height-500)/2,300,500); - this.setDefaultCloseOperation(HIDE_ON_CLOSE); - this.setResizable(false); - this.setType(Type.UTILITY); - this.setTitle("Подробнее-кактус"); - this.setLayout(new BorderLayout()); - ImageIcon img = new ImageIcon("Icon/MainUI/plant/success/0.png"); - JLabel label = new JLabel(img); - JPanel imgPanel = new JPanel(); - imgPanel.setLayout(new BorderLayout()); - imgPanel.add(label); - JPanel panel = new JPanel(); - JLabel introduce = new JLabel("Кактус великого человека, шип которого защищает его от внешних атак"); - panel.add(introduce); - this.add(imgPanel,BorderLayout.NORTH); - this.add(panel); - } -} diff --git a/src/main/java/RUS/UI/IntroduceUI/UI1.java b/src/main/java/RUS/UI/IntroduceUI/UI1.java deleted file mode 100644 index a2bea9b..0000000 --- a/src/main/java/RUS/UI/IntroduceUI/UI1.java +++ /dev/null @@ -1,32 +0,0 @@ -package RUS.UI.IntroduceUI; - -import javax.swing.*; -import java.awt.*; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -public class UI1 extends JFrame { - public UI1(){ - - Dimension getDesktopSize = Toolkit.getDefaultToolkit().getScreenSize(); - this.setBounds((getDesktopSize.width-300)/2,(getDesktopSize.height-500)/2,300,500); - this.setDefaultCloseOperation(HIDE_ON_CLOSE); - this.setResizable(false); - this.setType(Type.UTILITY); - this.setTitle("Подробности-четырехлистник"); - this.setLayout(new BorderLayout()); - ImageIcon img = new ImageIcon("Icon/MainUI/plant/success/1.png"); - JLabel label = new JLabel(img); - JPanel imgPanel = new JPanel(); - imgPanel.setLayout(new BorderLayout()); - imgPanel.add(label); - JPanel panel = new JPanel(); - JLabel introduce = new JLabel("Может быть, сегодня нам повезет?"); - panel.add(introduce); - this.add(imgPanel,BorderLayout.NORTH); - this.add(panel); - } -} - diff --git a/src/main/java/RUS/UI/IntroduceUI/UI10.java b/src/main/java/RUS/UI/IntroduceUI/UI10.java deleted file mode 100644 index 0f2af90..0000000 --- a/src/main/java/RUS/UI/IntroduceUI/UI10.java +++ /dev/null @@ -1,31 +0,0 @@ -package RUS.UI.IntroduceUI; - -import javax.swing.*; -import java.awt.*; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -public class UI10 extends JFrame { - public UI10(){ - - Dimension getDesktopSize = Toolkit.getDefaultToolkit().getScreenSize(); - this.setBounds((getDesktopSize.width-300)/2,(getDesktopSize.height-500)/2,300,500); - this.setDefaultCloseOperation(HIDE_ON_CLOSE); - this.setResizable(false); - this.setType(Type.UTILITY); - this.setTitle("Подробнее-розы"); - this.setLayout(new BorderLayout()); - ImageIcon img = new ImageIcon("Icon/MainUI/plant/success/10.png"); - JLabel label = new JLabel(img); - JPanel imgPanel = new JPanel(); - imgPanel.setLayout(new BorderLayout()); - imgPanel.add(label); - JPanel panel = new JPanel(); - JLabel introduce = new JLabel("Яркие розы, обязательный артефакт на день святого валентина"); - panel.add(introduce); - this.add(imgPanel,BorderLayout.NORTH); - this.add(panel); - } -} diff --git a/src/main/java/RUS/UI/IntroduceUI/UI11.java b/src/main/java/RUS/UI/IntroduceUI/UI11.java deleted file mode 100644 index 953685f..0000000 --- a/src/main/java/RUS/UI/IntroduceUI/UI11.java +++ /dev/null @@ -1,31 +0,0 @@ -package RUS.UI.IntroduceUI; - -import javax.swing.*; -import java.awt.*; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -public class UI11 extends JFrame { - public UI11(){ - - Dimension getDesktopSize = Toolkit.getDefaultToolkit().getScreenSize(); - this.setBounds((getDesktopSize.width-300)/2,(getDesktopSize.height-500)/2,300,500); - this.setDefaultCloseOperation(HIDE_ON_CLOSE); - this.setResizable(false); - this.setType(Type.UTILITY); - this.setTitle("Подробности-пшеница"); - this.setLayout(new BorderLayout()); - ImageIcon img = new ImageIcon("Icon/MainUI/plant/success/11.png"); - JLabel label = new JLabel(img); - JPanel imgPanel = new JPanel(); - imgPanel.setLayout(new BorderLayout()); - imgPanel.add(label); - JPanel panel = new JPanel(); - JLabel introduce = new JLabel("Повторяй за мной: полдень злаков, капли пота..."); - panel.add(introduce); - this.add(imgPanel,BorderLayout.NORTH); - this.add(panel); - } -} diff --git a/src/main/java/RUS/UI/IntroduceUI/UI2.java b/src/main/java/RUS/UI/IntroduceUI/UI2.java deleted file mode 100644 index 14639de..0000000 --- a/src/main/java/RUS/UI/IntroduceUI/UI2.java +++ /dev/null @@ -1,31 +0,0 @@ -package RUS.UI.IntroduceUI; - -import javax.swing.*; -import java.awt.*; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -public class UI2 extends JFrame { - public UI2(){ - - Dimension getDesktopSize = Toolkit.getDefaultToolkit().getScreenSize(); - this.setBounds((getDesktopSize.width-300)/2,(getDesktopSize.height-500)/2,300,500); - this.setDefaultCloseOperation(HIDE_ON_CLOSE); - this.setResizable(false); - this.setType(Type.UTILITY); - this.setTitle("Подробнее-кукуруза"); - this.setLayout(new BorderLayout()); - ImageIcon img = new ImageIcon("Icon/MainUI/plant/success/2.png"); - JLabel label = new JLabel(img); - JPanel imgPanel = new JPanel(); - imgPanel.setLayout(new BorderLayout()); - imgPanel.add(label); - JPanel panel = new JPanel(); - JLabel introduce = new JLabel("Золотая чан-чан кукуруза и зелёная оболочка, кипящая или жареная?"); - panel.add(introduce); - this.add(imgPanel,BorderLayout.NORTH); - this.add(panel); - } -} diff --git a/src/main/java/RUS/UI/IntroduceUI/UI3.java b/src/main/java/RUS/UI/IntroduceUI/UI3.java deleted file mode 100644 index 6193f52..0000000 --- a/src/main/java/RUS/UI/IntroduceUI/UI3.java +++ /dev/null @@ -1,31 +0,0 @@ -package RUS.UI.IntroduceUI; - -import javax.swing.*; -import java.awt.*; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -public class UI3 extends JFrame { - public UI3(){ - - Dimension getDesktopSize = Toolkit.getDefaultToolkit().getScreenSize(); - this.setBounds((getDesktopSize.width-300)/2,(getDesktopSize.height-500)/2,300,500); - this.setDefaultCloseOperation(HIDE_ON_CLOSE); - this.setResizable(false); - this.setType(Type.UTILITY); - this.setTitle("В деталях-баклажаны"); - this.setLayout(new BorderLayout()); - ImageIcon img = new ImageIcon("Icon/MainUI/plant/success/3.png"); - JLabel label = new JLabel(img); - JPanel imgPanel = new JPanel(); - imgPanel.setLayout(new BorderLayout()); - imgPanel.add(label); - JPanel panel = new JPanel(); - JLabel introduce = new JLabel("Жирные баклажаны, которые должны были стоить владельцу целого состояния"); - panel.add(introduce); - this.add(imgPanel,BorderLayout.NORTH); - this.add(panel); - } -} diff --git a/src/main/java/RUS/UI/IntroduceUI/UI4.java b/src/main/java/RUS/UI/IntroduceUI/UI4.java deleted file mode 100644 index 58659fd..0000000 --- a/src/main/java/RUS/UI/IntroduceUI/UI4.java +++ /dev/null @@ -1,31 +0,0 @@ -package RUS.UI.IntroduceUI; - -import javax.swing.*; -import java.awt.*; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -public class UI4 extends JFrame { - public UI4(){ - - Dimension getDesktopSize = Toolkit.getDefaultToolkit().getScreenSize(); - this.setBounds((getDesktopSize.width-300)/2,(getDesktopSize.height-500)/2,300,500); - this.setDefaultCloseOperation(HIDE_ON_CLOSE); - this.setResizable(false); - this.setType(Type.UTILITY); - this.setTitle("Подробнее-трава"); - this.setLayout(new BorderLayout()); - ImageIcon img = new ImageIcon("Icon/MainUI/plant/success/4.png"); - JLabel label = new JLabel(img); - JPanel imgPanel = new JPanel(); - imgPanel.setLayout(new BorderLayout()); - imgPanel.add(label); - JPanel panel = new JPanel(); - JLabel introduce = new JLabel("Может, это просто трава..."); - panel.add(introduce); - this.add(imgPanel,BorderLayout.NORTH); - this.add(panel); - } -} diff --git a/src/main/java/RUS/UI/IntroduceUI/UI5.java b/src/main/java/RUS/UI/IntroduceUI/UI5.java deleted file mode 100644 index 7816978..0000000 --- a/src/main/java/RUS/UI/IntroduceUI/UI5.java +++ /dev/null @@ -1,31 +0,0 @@ -package RUS.UI.IntroduceUI; - -import javax.swing.*; -import java.awt.*; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -public class UI5 extends JFrame { - public UI5(){ - - Dimension getDesktopSize = Toolkit.getDefaultToolkit().getScreenSize(); - this.setBounds((getDesktopSize.width-300)/2,(getDesktopSize.height-500)/2,300,500); - this.setDefaultCloseOperation(HIDE_ON_CLOSE); - this.setResizable(false); - this.setType(Type.UTILITY); - this.setTitle("Подробнее-листья"); - this.setLayout(new BorderLayout()); - ImageIcon img = new ImageIcon("Icon/MainUI/plant/success/5.png"); - JLabel label = new JLabel(img); - JPanel imgPanel = new JPanel(); - imgPanel.setLayout(new BorderLayout()); - imgPanel.add(label); - JPanel panel = new JPanel(); - JLabel introduce = new JLabel("Это не обычный лист, это лист из королевской поэмы"); - panel.add(introduce); - this.add(imgPanel,BorderLayout.NORTH); - this.add(panel); - } -} diff --git a/src/main/java/RUS/UI/IntroduceUI/UI6.java b/src/main/java/RUS/UI/IntroduceUI/UI6.java deleted file mode 100644 index 69e7d9a..0000000 --- a/src/main/java/RUS/UI/IntroduceUI/UI6.java +++ /dev/null @@ -1,31 +0,0 @@ -package RUS.UI.IntroduceUI; - -import javax.swing.*; -import java.awt.*; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -public class UI6 extends JFrame { - public UI6(){ - - Dimension getDesktopSize = Toolkit.getDefaultToolkit().getScreenSize(); - this.setBounds((getDesktopSize.width-300)/2,(getDesktopSize.height-500)/2,300,500); - this.setDefaultCloseOperation(HIDE_ON_CLOSE); - this.setResizable(false); - this.setType(Type.UTILITY); - this.setTitle("Подробнее-капуста"); - this.setLayout(new BorderLayout()); - ImageIcon img = new ImageIcon("Icon/MainUI/plant/success/6.png"); - JLabel label = new JLabel(img); - JPanel imgPanel = new JPanel(); - imgPanel.setLayout(new BorderLayout()); - imgPanel.add(label); - JPanel panel = new JPanel(); - JLabel introduce = new JLabel("Капуста в барабане, что там может быть?"); - panel.add(introduce); - this.add(imgPanel,BorderLayout.NORTH); - this.add(panel); - } -} diff --git a/src/main/java/RUS/UI/IntroduceUI/UI7.java b/src/main/java/RUS/UI/IntroduceUI/UI7.java deleted file mode 100644 index a906718..0000000 --- a/src/main/java/RUS/UI/IntroduceUI/UI7.java +++ /dev/null @@ -1,31 +0,0 @@ -package RUS.UI.IntroduceUI; - -import javax.swing.*; -import java.awt.*; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -public class UI7 extends JFrame { - public UI7(){ - - Dimension getDesktopSize = Toolkit.getDefaultToolkit().getScreenSize(); - this.setBounds((getDesktopSize.width-300)/2,(getDesktopSize.height-500)/2,300,500); - this.setDefaultCloseOperation(HIDE_ON_CLOSE); - this.setResizable(false); - this.setType(Type.UTILITY); - this.setTitle("Подробнее-тыква"); - this.setLayout(new BorderLayout()); - ImageIcon img = new ImageIcon("Icon/MainUI/plant/success/7.png"); - JLabel label = new JLabel(img); - JPanel imgPanel = new JPanel(); - imgPanel.setLayout(new BorderLayout()); - imgPanel.add(label); - JPanel panel = new JPanel(); - JLabel introduce = new JLabel("Тыква для хэллоуина должна быть хорошей"); - panel.add(introduce); - this.add(imgPanel,BorderLayout.NORTH); - this.add(panel); - } -} diff --git a/src/main/java/RUS/UI/IntroduceUI/UI8.java b/src/main/java/RUS/UI/IntroduceUI/UI8.java deleted file mode 100644 index 4e25bc1..0000000 --- a/src/main/java/RUS/UI/IntroduceUI/UI8.java +++ /dev/null @@ -1,31 +0,0 @@ -package RUS.UI.IntroduceUI; - -import javax.swing.*; -import java.awt.*; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -public class UI8 extends JFrame { - public UI8(){ - - Dimension getDesktopSize = Toolkit.getDefaultToolkit().getScreenSize(); - this.setBounds((getDesktopSize.width-300)/2,(getDesktopSize.height-500)/2,300,500); - this.setDefaultCloseOperation(HIDE_ON_CLOSE); - this.setResizable(false); - this.setType(Type.UTILITY); - this.setTitle("Подробнее-редиска"); - this.setLayout(new BorderLayout()); - ImageIcon img = new ImageIcon("Icon/MainUI/plant/success/8.png"); - JLabel label = new JLabel(img); - JPanel imgPanel = new JPanel(); - imgPanel.setLayout(new BorderLayout()); - imgPanel.add(label); - JPanel panel = new JPanel(); - JLabel introduce = new JLabel("Эта репа-обычная редиска, и нечего тут представлять"); - panel.add(introduce); - this.add(imgPanel,BorderLayout.NORTH); - this.add(panel); - } -} diff --git a/src/main/java/RUS/UI/IntroduceUI/UI9.java b/src/main/java/RUS/UI/IntroduceUI/UI9.java deleted file mode 100644 index cd8c3f9..0000000 --- a/src/main/java/RUS/UI/IntroduceUI/UI9.java +++ /dev/null @@ -1,31 +0,0 @@ -package RUS.UI.IntroduceUI; - -import javax.swing.*; -import java.awt.*; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -public class UI9 extends JFrame { - public UI9(){ - - Dimension getDesktopSize = Toolkit.getDefaultToolkit().getScreenSize(); - this.setBounds((getDesktopSize.width-300)/2,(getDesktopSize.height-500)/2,300,500); - this.setDefaultCloseOperation(HIDE_ON_CLOSE); - this.setResizable(false); - this.setType(Type.UTILITY); - this.setTitle("Подробнее-помидоры"); - this.setLayout(new BorderLayout()); - ImageIcon img = new ImageIcon("Icon/MainUI/plant/success/9.png"); - JLabel label = new JLabel(img); - JPanel imgPanel = new JPanel(); - imgPanel.setLayout(new BorderLayout()); - imgPanel.add(label); - JPanel panel = new JPanel(); - JLabel introduce = new JLabel("Омлет с помидорами? Где яйца? Жду с нетерпением."); - panel.add(introduce); - this.add(imgPanel,BorderLayout.NORTH); - this.add(panel); - } -} diff --git a/src/main/java/RUS/UI/Main.java b/src/main/java/RUS/UI/Main.java deleted file mode 100644 index a1b081f..0000000 --- a/src/main/java/RUS/UI/Main.java +++ /dev/null @@ -1,156 +0,0 @@ -package RUS.UI; - -import RUS.Function.Collation.Collation; -import RUS.Function.Growth.Growth; -import RUS.Function.Update.Update; -import RUS.UI.MainUI.HelloUI; -import RUS.UI.MainUI.MainUI; -import com.formdev.flatlaf.FlatDarculaLaf; -import com.formdev.flatlaf.FlatDarkLaf; -import com.formdev.flatlaf.intellijthemes.FlatDarkFlatIJTheme; - -import javax.swing.*; -import java.io.*; -import java.nio.charset.StandardCharsets; -import java.util.Map; -import java.util.Random; - -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ - -@SuppressWarnings({"ResultOfMethodCallIgnored", "InfiniteLoopStatement"}) -public class Main { - public static String readToString(String fileName) { - String encoding = "UTF-8"; - File file = new File(fileName); - long filelength = file.length(); - byte[] filecontent = new byte[(int) filelength]; - try { - FileInputStream in = new FileInputStream(file); - in.read(filecontent); - in.close(); - } catch (IOException e) { - e.printStackTrace(); - } - try { - return new String(filecontent, encoding); - } catch (UnsupportedEncodingException e) { - System.err.println("The OS does not support " + encoding); - e.printStackTrace(); - return null; - } - } - public static void main(String[] args) throws Exception { - //使用look and feel - FlatDarkLaf.setup(); - FlatDarculaLaf.setup(); - FlatDarkFlatIJTheme.setup(); - new Update(); - Map map = System.getenv(); - String userName = map.get("USERNAME"); - File folderPath = new File("C:\\Users\\" + userName + "\\.DesktopAide\\collation"); - File filePath = new File(folderPath + "\\path.da"); - if(!folderPath.exists()){ - folderPath.mkdirs(); - } - if (!filePath.exists()) { - try { - filePath.createNewFile(); - FileOutputStream fileOutputStream = new FileOutputStream(filePath); - String path = "C:\\Users\\" + userName + "\\Desktop"; - fileOutputStream.write(path.getBytes(StandardCharsets.UTF_8)); - fileOutputStream.flush(); - fileOutputStream.close(); - } catch (IOException ex) { - throw new RuntimeException(ex); - } - } - folderPath = new File("C:\\Users\\"+userName+"\\.DesktopAide\\growth"); - filePath = new File(folderPath+"\\growth.da"); - if(!folderPath.exists()) { - folderPath.mkdirs(); - } - if(!filePath.exists()){ - filePath.createNewFile(); - FileOutputStream fileOutputStream = new FileOutputStream(filePath); - fileOutputStream.write("0".getBytes(StandardCharsets.UTF_8)); - fileOutputStream.flush(); - fileOutputStream.close(); - } - folderPath = new File("C:\\Users\\"+userName+"\\.DesktopAide\\puppet"); - filePath = new File(folderPath+"\\puppet.da"); - if(!folderPath.exists()) { - folderPath.mkdirs(); - } - if(!filePath.exists()){ - filePath.createNewFile(); - FileOutputStream fileOutputStream = new FileOutputStream(filePath); - fileOutputStream.write("false".getBytes(StandardCharsets.UTF_8)); - fileOutputStream.flush(); - fileOutputStream.close(); - } - folderPath = new File("C:\\Users\\" + userName + "\\.DesktopAide\\user"); - filePath = new File(folderPath + "\\user.da"); - if(!filePath.exists()){ - HelloUI helloUI = new HelloUI(); - helloUI.setVisible(true); - } - MainUI mainUI = new MainUI(); - mainUI.setVisible(true); - while (true) { - if(MainUI.isInCollation){ - Collation.Collation(); - } - //桌宠 - ImageIcon petImage; - Growth growth = new Growth(); - int growthInt = Integer.parseInt(growth.growth()); - if (growthInt == 100) { - folderPath = new File("Icon/MainUI/plant/success"); - File[] list = folderPath.listFiles(); - int fileCount = 0; - assert list != null; - for (File file : list) { - if (file.isFile()) { - fileCount++; - } - } - Random getSuccessPlant = new Random(); - int successPlantInt = getSuccessPlant.nextInt(fileCount-1); - petImage = new ImageIcon(folderPath+"/"+successPlantInt+".png"); - MainUI.tablePet.setIcon(petImage); - JOptionPane.showMessageDialog(null,"Поздравляю с успешными посадами, следующий раунд будет проведен после закрытия этого окна, и записи о посадах можно посмотреть в пользовательском интерфейсе","Успешно посажено.",JOptionPane.PLAIN_MESSAGE,petImage); - File path = new File("C:\\Users\\"+userName+"\\.DesktopAide\\growth"); - filePath = new File(path+"\\growth.da"); - FileOutputStream fileOutputStream = new FileOutputStream(filePath); - fileOutputStream.write("0".getBytes(StandardCharsets.UTF_8)); - fileOutputStream.flush(); - fileOutputStream.close(); - path = new File("C:\\Users\\"+userName+"\\.DesktopAide\\user"); - filePath = new File(path+"\\success.da"); - String result = readToString(String.valueOf(filePath)); - if(!(result ==null)) { - result = result + "\n" + successPlantInt + ".png"; - }else{ - result = successPlantInt + ".png"; - } - fileOutputStream = new FileOutputStream(filePath); - fileOutputStream.write(result.getBytes(StandardCharsets.UTF_8)); - fileOutputStream.flush(); - fileOutputStream.close(); - } else if (growthInt < 100 && growthInt >=50) { - petImage = new ImageIcon("Icon/MainUI/plant/growing/100of100.png"); - }else{ - petImage = new ImageIcon("Icon/MainUI/plant/growing/50of100.png"); - } - MainUI.tablePet.setIcon(petImage); - mainUI.revalidate(); - mainUI.repaint(); - Thread.sleep(500); - } - } - -} diff --git a/src/main/java/RUS/UI/MainUI/HelloUI.java b/src/main/java/RUS/UI/MainUI/HelloUI.java deleted file mode 100644 index 540afd5..0000000 --- a/src/main/java/RUS/UI/MainUI/HelloUI.java +++ /dev/null @@ -1,126 +0,0 @@ -package RUS.UI.MainUI; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.util.Map; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -@SuppressWarnings("ResultOfMethodCallIgnored") -public class HelloUI extends JFrame { - static int num = 1; - public HelloUI(){ - - //获取屏幕大小 - Dimension getDesktopSize = Toolkit.getDefaultToolkit().getScreenSize(); - this.setBounds((getDesktopSize.width-300)/2,(getDesktopSize.height-200)/2,300,200); - this.setDefaultCloseOperation(HIDE_ON_CLOSE); - this.setLayout(new BorderLayout()); - //用户姓名 - JPanel panel1 = new JPanel(); - JLabel userNameLabel = new JLabel("Введите свое прозвище здесь"); - JTextField userNameField = new JTextField(); - panel1.setLayout(new GridLayout(2,1)); - panel1.add(userNameLabel); - panel1.add(userNameField); - this.add(panel1); - this.setResizable(false); - this.setType(Type.UTILITY); - //介绍 - JPanel panel2 = new JPanel(); - panel2.setLayout(new GridLayout(3,1)); - JLabel introduceUser = new JLabel("Добр пожалова",JLabel.CENTER); - JLabel introduce = new JLabel("",JLabel.CENTER); - JLabel introduceNext = new JLabel("Следующие страницы покажут вам основные функции программы",JLabel.CENTER); - panel2.add(introduceUser); - panel2.add(introduce); - panel2.add(introduceNext); - //介绍1 - JPanel panel3 = new JPanel(); - JTextArea introduce1 = new JTextArea(" Да? Как может такое маленькое окно содержать так много текста/n методов для просмотра PDF файлов внутри документов в каталоге установки"); - panel3.setLayout(new BorderLayout()); - panel3.add(introduce1); - introduce1.setEditable(false); - introduce1.setLineWrap(true); - //На следующей странице.按钮 - JPanel nextPanel = new JPanel(); - nextPanel.setLayout(new GridLayout(1,2)); - JButton last = new JButton("На последней странице."); - JButton next = new JButton("На следующей странице."); - last.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - if(num == 2){ - HelloUI.this.remove(panel2); - HelloUI.this.add(panel1); - next.setText("На следующей странице."); - HelloUI.this.revalidate(); - HelloUI.this.repaint(); - num --; - } - else if(num ==3){ - HelloUI.this.remove(panel3); - HelloUI.this.add(panel2); - next.setText("На следующей странице."); - HelloUI.this.revalidate(); - HelloUI.this.repaint(); - num--; - } - } - }); - - next.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - if(num == 1){ - introduce.setText(userNameField.getText()); - HelloUI.this.remove(panel1); - HelloUI.this.add(panel2); - next.setText("На следующей странице."); - HelloUI.this.revalidate(); - HelloUI.this.repaint(); - num ++; - } - else if(num == 2){ - HelloUI.this.remove(panel2); - HelloUI.this.add(panel3); - next.setText("законч"); - HelloUI.this.revalidate(); - HelloUI.this.repaint(); - num ++; - } - else{ - Map map = System.getenv(); - String userName = map.get("USERNAME"); - File folderPath = new File("C:\\Users\\" + userName + "\\.DesktopAide\\user"); - File filePath = new File(folderPath + "\\user.da"); - folderPath.mkdirs(); - try { - filePath.createNewFile(); - FileOutputStream fileOutputStream = new FileOutputStream(filePath); - fileOutputStream.write(userNameField.getText().getBytes(StandardCharsets.UTF_8)); - fileOutputStream.flush(); - fileOutputStream.close(); - filePath = new File(folderPath + "\\success.da"); - filePath.createNewFile(); - } catch (IOException ex) { - throw new RuntimeException(ex); - } - HelloUI.this.setVisible(false); - } - } - }); - nextPanel.add(last); - nextPanel.add(next); - this.add(nextPanel,BorderLayout.SOUTH); - } - -} diff --git a/src/main/java/RUS/UI/MainUI/MainUI.java b/src/main/java/RUS/UI/MainUI/MainUI.java deleted file mode 100644 index 05baa20..0000000 --- a/src/main/java/RUS/UI/MainUI/MainUI.java +++ /dev/null @@ -1,272 +0,0 @@ -package RUS.UI.MainUI; - - -import RUS.UI.FunctionUI.MoreUI; -import RUS.UI.FunctionUI.UserUI; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.io.*; -import java.nio.charset.StandardCharsets; -import java.util.Map; -import java.util.Random; -/** - * @version 3.2.x - * @author chenpuhao - * @Date 2023/2/4 - */ -public class MainUI extends JFrame { - public static boolean isInCollation = false; - public static JButton tablePet = new JButton(); - //获取X和Y值 - public static double X; - public static double Y; - //收起按钮 - public static ImageIcon lockImage = new ImageIcon("Icon/MainUI/function/unlock.png"); - public static JButton lock = new JButton(lockImage); - //判断是否收起 - public static Boolean isLocked = false; - //判断左侧功能是否展开 - public static Boolean isRelease = false; - - public static Boolean isInEating = false; - static String result; - static void readAppointedLineNumber(File sourceFile, int lineNumber) - throws IOException { - FileReader in = new FileReader(sourceFile); - LineNumberReader reader = new LineNumberReader(in); - String s = ""; - int lines = 0; - while (s != null) { - lines++; - s = reader.readLine(); - if((lines - lineNumber) == 0) { - result = s; - } - } - reader.close(); - in.close(); - } - public MainUI() { - - //获取toolkit - Dimension getScreenSize = Toolkit.getDefaultToolkit().getScreenSize(); - //基本设置 - this.setBounds(getScreenSize.width - 250, getScreenSize.height - 220, 230, 200); - this.setDefaultCloseOperation(EXIT_ON_CLOSE); - this.setResizable(false); - this.setUndecorated(true); - this.setBackground(new Color(0, 0, 0, 0)); - this.setLayout(new BorderLayout()); - this.setType(Type.UTILITY); - //右侧功能界面 - JPanel function = new JPanel(); - function.setPreferredSize(new Dimension(30, 200)); - function.setBackground(new Color(0, 0, 0, 0)); - function.setLayout(new BorderLayout()); - //移动按钮 - ImageIcon moveImage = new ImageIcon("Icon/MainUI/function/move.png"); - JLabel move = new JLabel(moveImage); - move.addMouseListener(new MouseAdapter() { - @Override - public void mousePressed(MouseEvent e) { - X = e.getPoint().getX(); - Y = e.getPoint().getY(); - - } - }); - move.addMouseMotionListener(new MouseAdapter() { - @Override - public void mouseDragged(MouseEvent e) { - MainUI.this.setLocation((int) (e.getXOnScreen() - X - 200), (int) (e.getYOnScreen() - Y)); - - } - }); - //收起按钮 - lock.setContentAreaFilled(false); - lock.setBorderPainted(false); - //整理按钮 - ImageIcon collationImage = new ImageIcon("Icon/MainUI/function/collation.png"); - JButton collation = new JButton(collationImage); - - collation.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - if(isInCollation){ - isInCollation = false; - JOptionPane.showMessageDialog(null,"Успешно закрыто.","Функция сортировки",JOptionPane.INFORMATION_MESSAGE); - }else{ - isInCollation = true; - JOptionPane.showMessageDialog(null,"Получилось.","Функция сортировки",JOptionPane.INFORMATION_MESSAGE); - } - } - }); - collation.setContentAreaFilled(false); - collation.setBorderPainted(false); - //更多按钮 - ImageIcon moreImage = new ImageIcon("Icon/MainUI/function/more.png"); - JButton more = new JButton(moreImage); - more.setContentAreaFilled(false); - more.setBorderPainted(false); - more.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - MoreUI moreUI = new MoreUI(); - moreUI.setVisible(true); - } - }); - //退出按钮 - ImageIcon exitImage = new ImageIcon("Icon/MainUI/function/exit.png"); - JButton exit = new JButton(exitImage); - exit.setContentAreaFilled(false); - exit.setBorderPainted(false); - exit.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - System.exit(0); - } - }); - //将收起的整合到一起 - JPanel lockPanel = new JPanel(); - lockPanel.setBackground(new Color(0, 0, 0, 0)); - lockPanel.setLayout(new GridLayout(3, 1)); - lockPanel.add(collation); - lockPanel.add(more); - lockPanel.add(exit); - //将收起和移动合并为一个Panel - JPanel moveAndLock = new JPanel(); - moveAndLock.setLayout(new GridLayout(2, 1)); - moveAndLock.setBackground(new Color(0, 0, 0, 0)); - moveAndLock.add(move); - moveAndLock.add(lock); - //lock的监听函数 - lock.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - if (isLocked) { - lockImage = new ImageIcon("Icon/MainUI/function/unlock.png"); - lock.setIcon(lockImage); - function.add(lockPanel, BorderLayout.CENTER); - isLocked = false; - } else { - lockImage = new ImageIcon("Icon/MainUI/function/lock.png"); - lock.setIcon(lockImage); - function.remove(lockPanel); - isLocked = true; - } - MainUI.this.revalidate(); - MainUI.this.repaint(); - } - }); - //将所有组件加入到function中 - function.add(moveAndLock, BorderLayout.NORTH); - function.add(lockPanel, BorderLayout.CENTER); - //将function加入到UI中 - this.add(function, BorderLayout.EAST); - //添加桌宠 - - tablePet.setContentAreaFilled(false); - tablePet.setBorderPainted(false); - this.add(tablePet, BorderLayout.CENTER); - //添加桌宠左侧选项卡 - JPanel petPanel = new JPanel(); - petPanel.setLayout(new GridLayout(3, 1)); - petPanel.setBackground(new Color(0, 0, 0, 0)); - //添加图标 - ImageIcon petEatImage = new ImageIcon("Icon/MainUI/action/eat.png"); - JButton petEat = new JButton(petEatImage); - petEat.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - Toolkit toolkit = Toolkit.getDefaultToolkit(); - Random whatToEat = new Random(); - int eat = whatToEat.nextInt(5); - ImageIcon eatImageIcon; - if (eat == 0) { - eatImageIcon = new ImageIcon("Icon/MainUI/food/hot dog.png"); - } else if (eat == 1) { - eatImageIcon = new ImageIcon("Icon/MainUI/food/ice.png"); - } else if (eat == 2) { - eatImageIcon = new ImageIcon("Icon/MainUI/food/meat.png"); - } else if (eat == 3) { - eatImageIcon = new ImageIcon("Icon/MainUI/food/spring roll.png"); - } else { - eatImageIcon = new ImageIcon("Icon/MainUI/food/taco.png"); - } - Image eatImage = eatImageIcon.getImage(); - Cursor cu = toolkit.createCustomCursor(eatImage, new Point(10, 10), "eat"); - MainUI.this.setCursor(cu); - isInEating = true; - } - }); - petEat.setContentAreaFilled(false); - petEat.setBorderPainted(false); - petPanel.add(petEat); - ImageIcon petChatImage = new ImageIcon("Icon/MainUI/action/chat.png"); - JButton petChat = new JButton(petChatImage); - petChat.setContentAreaFilled(false); - petChat.setBorderPainted(false); - petPanel.add(petChat); - ImageIcon petUserImage = new ImageIcon("Icon/MainUI/action/user.png"); - JButton petUser = new JButton(petUserImage); - petUser.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - UserUI userUI; - try { - userUI = new UserUI(); - } catch (IOException ex) { - throw new RuntimeException(ex); - } - userUI.setVisible(true); - } - }); - petUser.setContentAreaFilled(false); - petUser.setBorderPainted(false); - petPanel.add(petUser); - //给桌宠添加单击事件 - tablePet.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - if (isInEating) { - //noinspection deprecation - MainUI.this.setCursor(0); - Map map = System.getenv(); - String userName = map.get("USERNAME"); - File folderPath = new File("C:\\Users\\"+userName+"\\.DesktopAide\\growth"); - File filePath = new File(folderPath+"\\growth.da"); - int line = 1; - try { - readAppointedLineNumber(filePath,line); - } catch (IOException ex) { - throw new RuntimeException(ex); - } - int growth = Integer.parseInt(result)+5; - FileOutputStream fileOutputStream; - try { - fileOutputStream = new FileOutputStream(filePath); - fileOutputStream.write(String.valueOf(growth).getBytes(StandardCharsets.UTF_8)); - fileOutputStream.flush(); - fileOutputStream.close(); - } catch (IOException ex) { - throw new RuntimeException(ex); - } - - isInEating = false; - } else { - if (isRelease) { - MainUI.this.remove(petPanel); - isRelease = false; - } else { - MainUI.this.add(petPanel, BorderLayout.WEST); - isRelease = true; - } - MainUI.this.revalidate(); - MainUI.this.repaint(); - } - } - }); - } -} diff --git a/target/DesktopAide-3.4.0.jar b/target/DesktopAide-3.4.0.jar index 080e9d8809f9974122af4ff8f0b28e65b37a1508..010f33ef37799356c746606f42f0566835dbf649 100644 GIT binary patch delta 21614 zcmaI81z43$^Ek{ohwc!NmPWb+1Oe#|>F$sY0YQ)>NJ@za2c%TGq)WQHOS(a65T)^d zpL3q)dEe*#eb>izaqZqav$M0aGqbz1yJuh=H**M=N>c@bij9JaiHV~4u3HZq?6DYw zf`U>5{NI5|`~s6hb))(4gC7&hU8()X_Yb0wqO45UbOo9`zV+waQ5Sun3$}?y7d6&|M`OeIT>}H|KI@#2`nI1h{C(>1WgbhA`Jm? zL*#((Y9O@%;9GxvlY{9Ia4|3sB6R_CBGNQ47a|=5vq5YD{4+2uBE1V?MWoUYK1BKr zLX!|Djgjyc4g2qJ7@jd0Ghq;d1(63D{08Ah0I*Q$5h)ic435pl@9TZgNAHa2#p`{J%UD?gaP?aL%?@}MJlo#ct=Ojco6kL=nROI1)Ud>8lrO{ z(nxe}MEVu|J_HbC!WKF^A|=5PMx<&OGVl)9O1OY_&@h3VUe_2cX{98g9T=*K8daCI z{t`mB(g9)A$N8-FY*`>G(H^}}=xxe|)m^$u^Tmpulcyx=K?CtOE470;pLI4pPwYIF zIE{B2pB2<|kS+Syo16W@rT5)rSRJ*Q)k>1eK*P7+RmgN~W8OTJ{mnd4Qk9fAJ+}7; zFY8V1hA}qkL3B}p=c80{R)Z^OuHnpJsd_4N=4nAx}SJ!oR*BSZ^FM3DtS*lSVhQ4Xse(}9^P}XjjL3k!otDok@ zH))VW%bv!AkOhZ@pEsM!8~2A2wPQ5@uyn>Ppq6z)Uqfd@9{rJ51EDGALoe*DwN)r2 za|F_NW4ONKc#VoQp;@n*kcJBr4Y|AlJkDnC+CvVy8aP37YL(s`!iHD7R1hfbNRyt&VsOzRs= zwXpQ{h9oSjw#eX|cJ;f0arV$p0)H=mEZqmTsN04|I8W`kJ=LdbpLQp{E} zvv%-nQ!eSn>u>!MtF0|hSwk}*Wi7v{u2cV@z#R%)mk&`iCBe4@2%;!18I+9%x8ll`A0eoSjQxQtDgyRa8T=AaR7I4uts8-_z_!TN1-1u(B|2(4w z7@mN62!W_z+zb$m+S@>|2r3qUr>D$HIL`_z-vZIqn!N@qBKar?2lFGyROY$ygYn^b z<~l{IF984e06hT|KnZ(w492Ro^nHiK!g+)2d8Kq}CK%EDY%16TnR}HBE=G#wYZX`t z;mK-Q!Qg!~1X;r=c7IKPxl42y5jB_!W}E@Ss{J$oeu|0@=iOW4J&qgzK1G5P2#v97 zAxmIWR6ICOSVGvUCio~QrmzwX5Dj$3?+?^}=)jSwEg08{#K6OFjksODo48wkjW`K~ z5fyz^q~k!*sB&(0Z`ku&WXC3B4WH7Y2)>K*S{1V^35GRcg-r-mUSxth;`LwYjg=PAAYxj!)Je#y8o*Kby}M4;$o{{h;o5Thl$w3AyVY_S{acfiEGa*1Fayayg7&GMAe zRhxgHN8=-!vFA{@SisBft=gt@qL$o8+c2}*VAvtp7F|AQlu%HtCOz>TharT$>kPeZ zl3|%4sY4(nMYO%{$qN08XzXdI*Mpgw!qV4As4VpP>UnkyTjW;UPnEXhds~*D#(&uDsCncRPib-_OEP>BNa@Sf z(wh^q-c5MIA)of-0>s%(jHlwwDYNM75H3(NtH7G_L$FEI@wz7XUB9>*J=Dy$DVDS@ z^y?|b)esp6#e+Rlj|P|<#k}GiMO(X;Fh9kePG!NTb!t8A-fUrM&Xv_x(AR?yOV;RvuXq7p1jeuCqg~D9yQ?biZ?B!9mg^A- z<7@?@m6$IzMsD=Dn7XIsBK-IEf2g(s@~rn7>(tktl9Y%=8w9$?(Tqgp?c&>@7?WJ zi-|3zS!!h;9;?2W%}Q`Lvbetb3c9V?m`O-dW41ZwO5^{&<>l5V-|k^3+o&1M*~5>` zH|4%_pvBU4MrL z{mOCnob@aVT3>?P^%_G}=xO>+=XAU`ag$j5&?$Q_Cti4d_X7;q5te=5%!e#L2-c($ z+X=?Vt(L}y%P((&k1e=2(`7=j%C%pXa z6-@0p))_N4tVy!QcWlI8+;Odb^l4q`5i{m^Mf$O7+B<`&lR2eTpMOTTJ!OvUC}^DOP^pv*l54( zKA&IQ?fb80uB8*aMmNy&ihB!`IqY)Jvm-2KY%9j{Q#=^1YrU?8nx(~vRUxGP6s$Q7 z-Di;~W}P#FX%olqJWXbS6-Vz7pqc_DoWsRY_LEaRf{l;fF~ll6Dez9`P3Vb6{Ol(M zo$l6cWSczFRxH++@2}OSuMrUEWSM-`PTN`}%59x&m?=mw8w;Jy_%J=EhgUiVdb6Wx zx@BSFmp}5IFL9P0_1If?-kf~Fq+PCrnFfmX6+6Lg=bUWmW2%eoxR7ohHjRz!;MP{L zi?Nbc07gsR>Y4X7=(fz@lyybZA*@Kt;q;4qB6FG25c®X1f+HE_KLWq&8x z2U}ejs9(jTd%fZ9swCT|AE6)NspAsX^CJPuB%K)c?4}b+D^7n88Xa69bz7i#&CdPuP%?j`y1%rWb^cK3_i8PRXUHWr=5QB+t(3S~KW?{`ZjX%_L=G7n`h3f8y0 zkI2&!rjky9?mXmKz<$3BTaf*2v@Gd-q$c)C-abi3#Ny8FQn3HySy)>+ys(8*&GwCQoXHzv+J zX>=EUgny!;V@EZy(5{vks#=3f91pym#w5-8()nZ^(xqo!X#|6yiA z+){#qhFf`%Tc;y||2>#HVc&e0>(ne)%eXJM_(*qsh1pxJiuEIEt$|@q<6Ajq`@~r3 z_1WBZk4bH7W$`|C0c-a(hC`Lq6z6umn^IS>=?N|`0>;IT zh!nl{XVj`!lfFg|Eo*X!4doqHb6+p&G1%qSKE!{<@bPG8_gPw}iUY@kXu*Ql9-sh` z2gIEmJp;z#hLwG9AEQn_j69?5+Dax6GsGCBDIeq(_I^!ZIE?e$#tON#EL!YHX5A*Qk zCu_#T(MDqS8{|5{6Kajm@Tq^!b2>qVblWR-iP*yvA0K`&`Rv46`IL`15`VZwEzoeN zzm+GocRE&akY6A^+g9O?11(X@sMHi!jK7%QDm103;`ywoK;?3cmeV@lGdC}ry`KZ7 zUg>+f4wamC=b;Xilrp+ZCj+9x-)GkKFqK=JEv8jGwt44IL9+K99p?h`bQC?d39I>V zz9?jWp5Za3PMm6xDT^uK_Fg;1pB+YL_K!0BPJO7^)3(N^@@B@5*~p3CAvc}fm4C&j z@(1)f)72<}`@^rc{K3y){=(UZriI66+R`={R@$@&W`pToado6ylIaZ0hk(U^WP6SL4x_r9SGPgPmr5uD?9izlm9*5Aort z5BU+(T*kAv-xFG_eaws2y8le#)3 z$Tq*nxma4j=)CXH=hXPM@)uzbVVs?1PVGoO2+;@Q7^6YvA+Xj^R_;$Fze<_<4AwIX zBA*i(liBKYI`t`Pnp=#+i6!HwtGZ8;N_zyG$3px0Jt9*zghjhLgw3etIyod9g-EHO zawL)?b`~Y5Oua>1j0etjrCN3R9gnt!SH?mlCVA&;4YO!L_hH!M6R(>S-iwCr?V^v? zIiWm1E)9iJ&5?x*wFC>1n{_n$Y|b&io`kIj&XQFdi@u7L+Vez-$;i2>I}^MP@Y=`r zPgARW5$HQZ7`*={5$A^D0&=)CA!+sgcH!=2qxL*|ed&7*hSg`ub; z>qU8d%+%*({bBAIUgTdwAThS96|3lri<)M-W;v2^sqMD9n;euJ?W8w#iuA0(o}W#I z&2Cl+(G~ggkBWjb3?#!SPw7oOPD{rzj>YlSb)6PrmS0UoX`SICARG zyI<7pe%%tmruDy1+V4S1LL(g8lL?La8aofV_OrIFJ4sEZ{GwxYLn>2v!s+$vc4p^g zTDH3_mXdwB;>D5Q;D&Vc}w(p)!b~YN^Ja|TJ$f6O>siF>S$6&W&6bpP^Y1-t?3c# z+|;c`k2+60Lkgg225}ZN>XwWW8hfRm5`R4v2pbKX8H;tZ##!pryMAR7IOutz?WK8( z&k~pyQl@QJW;594YWPaLg4)y*~@H(y;;xSMTxDaZTFZVN^?(dXZ*5#oWINAJNS#3_PJ>r$rs_H_qz=u zKVINyGz5ldf5}|Y{__0T;W^4kUEaFDfuZlTY0Su1^0kL&!~w(iKOC0dznctYOym#E z;fST+PqZCV$V6jiDpYG!N`9t%rLcs5to`(Z>h}EnUQJa(jA?q;=~!S>X& zPi`Ye5`unGu___g*M;Ads|RzST-poIY%&JzIfpzo63{lb+Zk&0$+SLD6`4wAnMwF= z@Lg0)Dsoku>o|v_^>-2Gt+WI==u@zpsUZ$OfNx(H3}u{#K`1Cp5E!8yu=nOc1@_(^`{3`$tvw|>cpRBS zvjYhsHvW|f7}=PJz5UeJMG!H3mn-0SVLS;Cu>p49>?kmLYzSwR?0Hq-&dZCtv`H57F<+FZnRmNnF5b6&aE$@$0~TWm_MyQwSN-Ko3#*w z1(%J#J(q5xH!^FgkdefN_xnbZ)vTvUy?Ml#T%=k?D z!l6)mf__j)_==8;}@I>L!s`nKCK`l%>OJaM#$;6uoK>PzXo*`~Ux z-w$=aq2!2ADYi=sPgMw0(hgiJQgZ|rJg=0^Z|>DD(x6k>66C_9fHeQv9mRyz&9~g|4vu;hE6NIhM*=0S7Zz#xVIk#``nT~f_9*gY9 zJ{W4IY6`~)sgAlJW*0Y1CO2$@VE?X4@++2o(hENGy0r>ekHWsK83FpRruV*Cs4w5jcg?w-L*2^9iwQ%V1!~_vn1~0<>sX&C7h*;DFBPbCW&vIe~y}(A4 zedhxOpuz*1*9C;mtvhX&$!<5K;&n$$_oY079Hy^?5tZf?4H`EU*c>$6Ms z^mJ+9jq)F{%GAAXwxe(L&qnIEFEXDUG#<5l%0gKRhjOqH9=T3qc$s&emO$Ug#uVX- zJ2O2ZbT43QzY}ynim^PRTIXYh=-Yu=&543mE_XX00m4WMmz$SVF|v9Q;J7iczdK5Dh5-&1=-l&ojEo))oF?rI*M7}5Ea>J1<1#2uXi5y%AEmSD}r z^n)wCUp>-#ozd01e2hCzf>}?XFZU8%L%db;65L=c51iQTEOH+|VRK|Ds44rJt1VjU z$BR=*n#Q=FnG!jsXYPqZaB1W`hP{QUGpqHBE6J@s<)bm^W$LV(pF6jm|I@t-cJ9_t zaFp`2-@t-@n9 zubRgqUTE^*8AP11)fsd#8!)*`anG}`@J?EfZ-=B0#=0mCeBX_}Yn;68+VP=IKUJxx zU_@B48dl)Ta}6fFGiCFef`b8z(IzF*Wuc!%2#1k?%sMhShaIGZn_n*r3MHQNF6vQf z<<>5zjsZ_xotkBhMTdG7K{>2`xhGbgCMRacO}T0OWDIYK zlYHMHx7%bHc4nMJVVur;wN5M8CxS6r_))EkvTCA@n%+mpK-#N40a4#MZs}+f3t{IWip{mGIjAq?*e^AStev1`Lj;1xu8KQf4rCwT`I>~?n!#8V| zT-aLPc`x8Lmr5Kwlku(o>|7u&=3q8(En`3Hxwv=0GFK15!QCeRnQ|{jo8|qU@LGTQ zLn>N|=Jjv!pY+2C>@cAOkHjn74lmaU2;zNWI)3jQxiAte$tL+Oc-9RUY-`zFQKB`a zIMNi|N%>{FCqnDo?aYInUYE?iRu}tFpho^3v9>dozKXO~XlNkuXZhm!opLNL>>8WV z_)zC(oJ($ekHeO>+fYnSwq@8QqT|ZQ`)*lqd~Z%Z*eQ+PS$N9@^%bk&s11v*+cV?m z6YjsW_z&w;nBv@kv3&+Ow4e_Jj6CS%Kpz z$KR|mDB9MY(IKt%521mSkkc_(k40R{jhFLjuez07Tie7>hff$7?s2C-%z|?A4kv7A z>y8b#%7#=8#48N&`>g8CKiZAss%iP&IYJSC$~3E3cYH6@+nwpO7xXM5CF!FPSzId7 zc*nX-vb&RDhx4b+b$_Q{F%<S0VB>Y-q}GJY($_gwVW*qICo^NsQdjI zQl!);h<__vbl-isX8Ot`xLW7VrbK42cy(3BxJ=WYli`i^Hw|`?cO}^Uj%EV#L~N1K zGvqy9D>TY+m;D>j*x#xtd94?9=Gxai6CkfwELgb=TGFOjT~PT=^fW?hhQ!lt62!g? zu<&w8?i)HPeN+4mHL`1b$KBRaDtT(VI2{g@O0wJhF>Vp|NjF)yi=Bcf^+=PmpKnq}Qi?wDgvv{_)^=6iYhhac(RDZ) zapIHY`JOh1g682bz6W#!zfK5ao(jCvE26j5xTni0tQNI0zFtz}(sy$IJPMHQf-_Zm4nOOW)kO9IAOChS!xJ z4BIKpKT^FF$Dy?Q`Pzot?sKdg&P5I8cB{ru+SSM?8j>TqNB#DEKjKzBKJ3ZiHHWZ1 zbtG*OZdP@GhQ9Zq&FIv2U**_Hj}1;(VAm=$2-5t>hIz8CBJ)O;Tn_g{vc-$q4TtX2 za-&C-%<1XgoZv7X{#xUmtz5pSqDqLjgANAi%sof#D!=1EFj)n0VP zVuveKjuIj@BoI+@t6ZX0q-bdj(@SYrAjs-9Pm$-%*TuCGi_G!7+7k3Ztsa+JSmPO( z)B2J)05zz4Q&Ikn71!9w3 z_Bl74V>*ZST6J+z{D<3Va`k6FO(v(6+E9gB|>d+}5~EMg*0e$1rb)SLglM zSSfSYrPm55e@4Wkt(%(Ko%K207I`|t%N{0htZ`>HLK|eyf@R+gpb1FSpFKKzp2on%<@jXF^i8C66?&apwMj;H!Q3l92T8 zHQ~RO`?coLAZjecd9Od|02&s28<{-xI94Y?gNm*eI3D#zu3vr2MS|sl_3KoE$H8BR zx_>@{ERew2$Amwn{s98#x>&Vu^FW5k742RT=n-;7%TWpvK(1&l%R#NkGNx(}u#yG# zowY8lpj71I8m9yF5Lu=$46;L0PlNjd?UB6HEVpk(A)n;a9Igxrmk5raP>si0GXlaV<*6;J}Q)!t38AM$+NJ7qx#^}vIqne_* zjb(6hv8ACRdB+9{ZquAsV<7&B#(`H(+Tc-UOS0^^MmRlQUVZGSzejrkcA;6uqIuUA zee&jYQa{PJ=i?u$-^FgKvxdKSYnZq{)HE$ivj$ETRFf)fgzcW@Fqb{(%+x@CCaXqE zk@QnpGJB2piJL`2B)TB>9%jAKGxq!TIYsYo%u+sXZc;xMSy8L-%x)KL`{&zpN58$KkO`8T7PqVj!QDJCEqylr@l`;$^w<(EOW`3>+oAn ztz@B5;=uDd@y9KUPZ|Q|0}=Ee?-bXe^2mJhWOlaOS*p z0x9^8J1}Gz$Zgs@arq&BHG_meYrk2ymo)qRZ~x55K$~Q@!K^Q6%u0U#yO&HZJzuMG zU$fA5J;6@->B3xJOS=ml_jnXxNy7Nmz%e&X>+Q^2J`zbRdcz)^WFsP)FV@Mt?hBpk zB5lP6mDkBQlS<2|LbYFrE{q8CZkIEguP*3DZng(!N6cT8){_|qeLdN1flAoE`sz}$ zCZTDvL+7!<>%u^gN=tCEWYU5Qb~2)^;Oa>w`)2O(n)|#;pX~)VG)kgclvST&dR~Z~ z_uJg_8?qYoW6>tX%IMrCYCOm9m8L28Nm+6vi=U|oKjLwEn3d$V>yLI<*Uwo02VVYI zg>cu&=sDL}#Rpee51;7Z1E@pK@Nn-!VsU+;q|dH({!7_mfytLn@5xghsGI5%3`91_ zmk^qdw$jWH_U`a}{|)`-uIpy|nWSgL0F6IF!%toPa`RJp!Pl*bd|mbymxAAi(jI+1 z1Ui+=E$Sjg_b_@JGJbtXr|zd{MxNKMqj#NpQ9IzS13yCFGz#8@8kXQ$z!O< zEN&y4`}Qx0l9&L$W_Z&pPs)Zz8fg8sZ){nlWN=Hnk2$XAS`Eda1c4oUbyjcphhGR( zSn2!8o*Ec#Uf_VY^=jI%tx|qi`migYbG^(E)@J{r4{{=OY$**2+?%uh+|JrGtzXUggcyuwa7{bZ_Q>B z1Lw+vAETo$k=0#=LH8aU`A_#(KQWB5wOMF$b@05aKuPt>o~Si_nU}Kt4|>|hQR?db zA%7j2x#uszW6f72clXK5jsqgTyT=d_i3EdZxJa$YX$dpl_`W*?O9bo?l^FJ|jAQpPh$wty(DyQ_K0 zf-@|5!0 zO`|%nM%YFyAj}~EFGTmAB4*6W0H$z6NUsw8z6w6#B9_=Lq3;k7y`zJ`f zEYwmK`s@jwJ~)ll-U`8(*w-(cu4)$Z={ZMDuiuj{!<17kLq2lIZwBwo#Zu^rt8*t( zIDZlQ3|t7)vBbK_9UA;7uyG=uZ&_f`Dz)B-$b; zmhB7Cc|=Aw^i}l@m-qgTMRjcL{if^4D%(`bY3wBRvD)Xg>FUXbthTo82Cpe;cJDaa zCbgf~F?tjV+cPOvS;m?I2Lk1^sqa;1v|P>fm5uSdgYmRyfEY}Gkkcl$z-*F|fzq1l zGF>~F^HiCdg814qH!*9mE#4TLEzhc*s*`YRY4)FjP=)XP=rm&PG`18%>M139ES4e) z+QWp)&ON;%H5S_U<2X@6%SmD=T}M5#PS(eX$*~1z7EnV6v zV+joESF;}y(L#B`-Ww%-A z0?Sj*P^fDBpqHq3t$+=F>Tlp`)NEjxKB%MWXCMv6=TWN^TiVeMPdXT`>-a`&EUmQNIA5hy(E zBVtS!Zos&GjxYB|Hn|LsJudc#$d^4DUX48G9=(rH643)MsgAsN1!*{6ReHqkua-8sE)nfPorzRO|T+PstJ zo;CV5AG+o~6BFztN_LMt{zKxe15HQoXn&R207Vbe=7+g1rJYOT_d13&hp0bWB|oS< zwBs9#%ZHLEC@iU+26-*fYQ3GJRM(ECfY1)xr%jeUB`mb3%-m>=u}Kl(b}=PP=c;ss$ctQAptPvXw|A zWreTk4rGZ25*?C<6nu++pS~tnY*O8$+jfp3;EE6RSS9LyDCdtK7gl%uF1F`*;MAet zb)?G3p<8(Bllx#U>k$#2#?E;@f45P^9BhPX(j$P9Pa=v*@aD^^KI+&k>XieUef~M- zdgHs5M-rdb!4d`IJ)zpObMJIF?q3&%nNJ+=p5x_y!<80G@EXk~cx||8c#Y`f9t6ElVdg^gUNA(laM+5i3?2P-lHzr|u?6tGC$P~(we(0HefMI+RYi+A|>~b9&wmfz0e|}@t zlo>AbiK0+B+d*FqN5!I&66aR)h*>DLEp2rJ2V~n*thyJSIMVe7pQ<;{`U{4V0o}a7 z3N*Ps*>PZ@JMGhZngOF(mka0U=!EI-dhLVB{Cb@Bn*x2w4|vto-g}Aqj7J~;wvlLy zHKMbAnfY)e1&ad~%^V%wPN|fVWyhb?U&r~=%TBfW%>qh;KWBub-QeI`ve2m`Pmg;k zLh`l75AZ1{YT^%9{6%k3p~_nRy_EY*Xid->VcYByDJlIi<8C&N|q#)DxFfUsL}Ju=C{)iJkL(qeX!t2^`nef{xTw7rQjvecWo)fb)Uh> zaJwJ{-N^50!Te5w%)!Z(+ZBc~%p*c-(2ixtOGYdAR{;&tmijel&Fl4sOrMjnbv5~F zyT>lEB_3!GNJ*uDN5j)RlW#HthYdCl3Tc#nU2YeVXr0yY|MX+u(Cm}?l=n6@TnEal zPUWaq&TN0<-&kF_(4y6`S>%Y$bfeA%5v`b@Yf zWCNbgtoAlyYWBU#bBQ1a+yOk#EEeH%MWu;J`}hIzM2d3t6uBVmOzx}b5bMoh%#5_f zvo{fFxftI)eqZ6yBzd!Ea($Y$3hB3C9=#$@+Ws2KX%yr2H9X7ynWj%UXMXMkbdf~G zD3@lyK)pD5oev8ePiJDz>vP;~jYe^`Psw1`HXS+&1(ORe<#BW4Bz7DNO<<4P#uzaLIc9(*nN@jy9G*Obk6WX6+TZkD-Euzv8UB z#-3VG7j+Zrz4hp1DZe$CY}q6hl9<0!7cpeaZ7s$dyF2wm?SwPOFzAJ#1)gNL@o0ak zODV^)tB$8>*P>(oA9qgrZtTu{SG=9FSV1bK>Wp`;_cp7!ZK*U|d+exJh0Dfwd0Pw} zMTD*ima>~?o^%v_7If>-Y951zC<`1%z%+O+J9~t`;?bUn*)`D79?5qB?PqrgAhO5y^iN`}VyG+7E}e)`v?*a=(wU1ZmP+ORk+Zmz!g` z;$NG~hhy+qyv*a@pB{J*TlX=9&AFsL9tki@98YsztqMzWL4s zJmXnrX8Le#^A`2#bLjgdp&k!M>LkxMB}wsoI_%JxaT=KWmhy4`^P!fL#VGT7+qT3f z(2ZtdeNw+=$;>l<;F8vIt;iw9*3ZDQ-iBTt{>boH({{!;1oSPukA+$rJon7Av% zK_wBI7_fJKCy9-Vart>7l}u>ERl~zV_K{mnu0LhCk}0i{F-;Dxml?k~>ho4IY4_G=*y<5AqI)QGlk@6U&i_WbbUe7~$b8By_V*%lMo_CupPx+aYC z3ydasVb&AgNdM@-6dFe0ufLAvh9|MM7{c0QeEg*LX>(hyg++;uGO3C_Hir$?fYmD@ z92HreRNoZdv-g)8P3c?qqgsaDwfeIzx);T7$!#ii20W8G$Ty7)={bmUZsmuy9N2~tERpjT!?EU9!quTVn6}(pC0ApxaVyJNa<9V}>l7fCl z!^+Xu!N5JOnBpvM-KFXZGa=q2J%3og{K-#?${C(i-&FF3N0K=vpz{sOi>gUwnw(`5 z_%$sq!rGOVkR0HeR-jsq<9AN@HLbI*G|{>$+xbLwFW1`{Spq;8JAh{g4A}f=V=#9HbYo zs&6s@T!LZ3MnU08pvRzt9nnAtp}sE8O}c8Xle~A9^mk~&h~_&5s&MkP^z+dQv~UtX zMwFyB+AOft*op~g(?bFU zsuX+w>~HtIxG;zXeH@!gO?Z!+`3sG3G2fS5gzqw?^D)qeCx5$tuKp&?#t7B6kRW18 zdo^Mk9BW4RSq*BlP+W>vm{~phfx~Ei$W8!SW66~fEpL5#d$bbc5ld&S<5`a$|U1G?~q#;8W8+^qL(MuD zy{sV^`R_yt<3DsWP0Ckb?5IMY9jD0?ehgcnH^n##YccFhtLdP)M7ztO=_{qGIZbw= zI(jF&)R$YPb=@AcGku!s$Urh`nyWs+>z%cdxgi*nwoC46S4NY9Qqo!XVYK9PFeYkQ zFRn$=s6vMQRl%Du^%T@L(kYV+a=&RWhMz~)+?ANQZ0eEfN{@~jbF)ODt$s3JCr88L zd?cNmv!L9n3K~wQpKDdpOMX4QUw~0CR~#QEn3Ib zz`7N@kbAr{b11po40D1iXX}GYd3cn^7?LIy0_qztFV?qy&g@2MaGfYWrt{cp*XhYM zVShy_mK_#7i$X=?<^Lvn^cc_wVDB5W4~p>;*%HKTa%A7oZ@%I*@w1=)9kL#J5FkO3I*xnDGpJp zk6+F%)_=_}WyXuyp`Eydm}Cx|m@ba5nL|5{&EZF3|E=|!Dj@J3$en+^Fh@f?F^6&f z0zaUGzdHZtu{MwaE>->YM~Jd7H3EC}3w##>yxE3{pM$B$egiPXYi>AEz@~r)n{b#b z07D}OVp%e<*mE%XJ@^UR-(=t^**_m}qEes)b0FTed=B^l024-V1Jw3L)W*F4UUCC> zz7S>LToCL)0!#+8xB%n8--RPeAu}KpSP(Jf4(#Iv7#D$DdI6@Qzy!=3U=6s(hwL(v zJ2-u*GcXmH6AZuRNd{}Z2IKx8{)qm?pBWhDfde5)x&g?;>yKOm^<#j-JkTA2|0Paz z1*QTu!D!FH)bN+!NHKi}c#(rYdjF4@;4rwDKv=LhKynZG{{In?03_iFn~ zR{TA_pjH^)HJDKZX#HPe#rW6Ao}eLF`X4#KS&oJeGC4XdE*DIWP!dE(5FJ&9?Op>N zg<~N^{sJ8qGyo?3mny)4n!q4|ieSz+U>f+NeONU7dj^(&1L!pTyAS@23gfv2({cQ_ zYW%MWvi*x^33vrzgvttrU5tJNx?m6JHr+o+C@9%MAs8?<7Z5!x3IxIZ=jQ=nZMR@D zhzH(Z=5lZgrlAKkM30F}wdNWi@%hgGlBpm@;8Ma4u^_|<-Nz$=P=T*#khb%f1VV#g zM1D+kLJ3f*I)IsfGxCxNZab8)dsiR~*dhf4X+cl!08~iW5M~8)BY>d82<}4ez~_0` z9u5Hd$^|zrG8o|!2$K^j8l=a9v-_4r#hVS#r6%CenCf4>mf}ZNbHIg=Ah^Az1&CD$ zAxkw0Atd+U1a4#$<|qI~5CBe`f&1kD{ACC6i^1qLz|^oz!oL`ep#umcNW>ls=+UAK-xATXh?wp2=)^sqza4!JHm$CK?u6bze2qWa3(WA|NkxM1Z`N$ zB;ZAPo52{cUQ`G!qN~@iE(cKn_vZh|Dn~CNUXKj6N&i=ySM)%eY{szFKrjuW{(n7P zZ@CNasX3woaMJ+;7Rc~dA7U6FRFFT`D6o4JfPhBA0T@2pUu~yr(SF?nytoLU82=t8 zLHh*DS7b2FQa~r50IP`m4Di?QFd{Mt8Q8%A0S4Z`WBg@P{|r7X1|49N(*-~vg?*%f z5F@0LjrE%P2_Th2pe4qCh7)cF-oAiqV1_M{{l)JfBT${(ANCdlLIX=9hL9noWc7{X zzyJq07Xb|5{=e!+y@Wde4p=J_&?&&T=%xMMFh2)oISN7)6qbLXibf)R#Yz>J2WOD)GNmMay81nE^is zJf1*maU3QkO%;=Rv|!1#DC#C+ydUxq5+u4@4_;GJVJRs ztp<_B!#;u_q!5fwgd?F!Ak4r(SO5Y6aUmae2q1vByWlQG1Th@{dmI060b~b}^dcP( zAmjfsiV7)Zm(KrBqe$yVdY^xc0?`A*KLE2OLkO<`9D-rMG+F*q+48)(Mlrx#rv8t) zD2*eXNGcW3WB9;9aRD(5O(RQ3w*XD9$Nh`Sn7O*S7~o&(fP=DskDmEF+`o_|#GPTn znuz`y>_e}V7-p9FVmA(h6odN8+J zFe$kE2e4Q`jswE7?ns{vB78rZ+X*o3!xnCVpU;8!K?xtARCe~a2O@*r691*PpWu+{ zKM2Sx3J4WKe_}q^d{+UOEcriPz83>VKmbAf1`kY<078Xkfdc{>YQurBAte3=C<8B& z!j1_5FVRE*I5S{Pr^g=fnt~pX_U!+Wwh1L1^**954Ixmsn-*F3A0K`(b`?Jd)KmOF zK3tL!MhACBZjvB$gd<0o$bX(j{I4^zWCtaDav?={cZ5`~&;Xxi%84w6`*j2X6Mq*X z_+0A%OqBQj)<_`D4qD{~!Ah^dq%bH5auR$qf|(NBl`&yz*nf@j2onHW6G4E0+2L<>NATyz47d~*F%Wz)1$QY(cTErX zPX9d20JQJlninhqf|cI`RPS$nM=;7ivbbsti~#HZ!RL`d;=_Q0V5Cc+p#oT%RQRhH z_=yvw9hAe1!&MQ*G>C}-K{*xD6Z5)6qCV!2<6`s0o)C_&;TfYMhFz-RDf9eQ(*zc?Y1D;p#+!`rhgAY zj4%O+fi*qM;~p@%3_XRtB8KoInEdyvk^gX+9VFodf{kKBNZ}JRKI{)b1|j-#VD$s? zg^dwI$l-(Xm!F5TgAey9us|67|7+vyW2&s;IL>npbTe;VS=`H;7cSf>^Ol7vzBIMw zA6BCIu4!0O){2EePN%au#Wq(1C*Hwn!C0tk-bPGCd}ETM*vb`T4Qkb{6ExI9+obfGKz z#m9DC?qmv4=tqd!8oSsj!Q1Fs_I^u+79$7G<=al7sCvz{+oP)Q+B((mwcx|o^h9_0M;2EGMrE@&`!O(R8W{KBe#Rb)lW8^$Cw zcYv-u8?&MtU$l)Rv1e8~O1B)hlyw))CMU@wUroi=&sgf*uU05w7_Xu@<%3RwN@bdi zuuQZyx6P%0y3>OWbS8V&x0)7YA6*WjA_F|B`cBtir%25?O{Ks6pi7-N&+mG(a~dYd zNf*vvxIn0h@cZvgM#HGn&UX3|@R(l|Bj`T-0Y*0Jb>`_W$jBWHtOmz3)Lk z5xb7n?kA!^eKl;aJGa5S$Q3u4Abv&mou8abtWdW#MpW-+>)`~)7lPgL{J%Cwh~#|B z0DkdAhOIb40@0p6k1F&@?*!748ME#M7lCuF_-m>h$GCS}g6~=HlLf2^gUM^#U%?=Z zK?gbK`DCJ6jePg*jTB$Dv2vc&5@rkScs|*xvDn$byX4qew83l zA)Y~E(X$NmIhT$QMOyO&!9}}w4!*n5b7v07+yOi}^QI-No)5}M9!{#Rns?+*?mE0X z{Y-cC!PJRDO&J!G)cv5$;x=SrnIVTz4CsV8@fj~8j}Jv0A)=Fn!HccBG|kroFS4Z2 zzDA?PIZ_)N_vwOBb$91X5zWO}ocQSRYd2#BCDUgM_4QcfCT*U)OUs~+`Rb>fxct&6 zo6|`y0KHVKs~YzIL3Hb1%%#S9hDpQa;q!aO;r~OO1s`CE&DWt_Wh(@>e}0!Tn-`#T zx=C5dG9XXAfvuCHaKdr7S=WIE_iV6BjoajRui8<$aR3ec20HItL^QvxZ!jJ-H-s>k z$^{4%QtLvtlX;IyZ&V1-Cz~BVk60&4#j;ImN*;Q|FrL$+xMuR*W0;Y@U`9?b??Xbr zeFxQ_%I)f%x8>`u%1EdHhc#!fT)kaXqe}B-LYcXNPom$%v0A>u z8q7hK#12;bFfTe?L9*+05VJ0z88>n}-Z?m%J`?Ji1apaf_wg)w=&*nd8ei99_gjcu z(3vl(5O|KS064FQQi{Bzk4a4n*XJRj$WIWly4r;L=N@L@>tUJB0n#qFt!#p>6k{JS zYw%!^l!O*^Q_|33lpd%@vnq(7c>mfEpVv>l#KfTFIF9_32V08Qk(+v_|@{pP-Zx-S?k| z%|7Q%`*VMK-vNA%yWlhNrVT119z2_`VkIW8+=^c#-Ee)7;poB{e`!1gE8Z`E3Lk7N WDNaGQBqg=uJAWEBiw5!dr2hfDVfIJ> delta 22326 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 O{)XS|a^-NJ;`%?Cq;Z%4 diff --git a/target/classes/CN/Function/Update/CheckUpdate.class b/target/classes/CN/Function/Update/CheckUpdate.class index 85f57ac3eb69c150836083b35026c8dd19443b6f..c0216348804e9d05d6550098e14cdfd479dc3b2c 100644 GIT binary patch delta 14 VcmbO%I9YH*4Kt(h=2~VkRsbT-1Nr~} delta 14 VcmbO%I9YH*4Kt(R=2~VkRsbTx1NZ;{ diff --git a/target/classes/CN/UI/FunctionPanel/CollationPanel$1.class b/target/classes/CN/UI/FunctionPanel/CollationPanel$1.class index 267409c49a9105782357e33ab21b1c1ed9247d17..70ae1239cd9c3ae6b8b90a6e6817b86e553f5068 100644 GIT binary patch delta 1511 zcmZWpT~Je35dKbbbI(n3ftZ325NHZjh(IW{QlYJ&LKPuIP$(+Z2q6iCK$GxO`;*er zmfAn)>5sMAcBT(~aO@1N1`3_(gEP*w(?0gC5B*VRtTX!5>4UA^lb|zdlDm8M+q3)a zIlDLKi~h>9{P5q>_W(BI(>cq=8vD2}TpIAlxA|j3@sUxlFCJvDw+{NoeeSR?5^#6M zqoGKk-V6gY9cEbOeyOzT$l%D-kp-K`WNxb+_i<$F$iZr{&QRmXW6<_=Hg$L!+nTJ% zM*+tg9fc?oQA1<({S3Cd2{;~L&{Jq=#N8YU`|VU@sg4J+R{UXT(wr!heC49rn6DLM zy^ac0iVkCKOQ{7;RO@&MH4LhMG8Bu)7>s4*d!=K8jz?0C;i3LeG$x^19gj*Vqc7_B z#r+=tgyiF>6F(XA*kj_7u~@6e6OwMT$WRJdqgbyLY7N*bp>4veWM`Psj3+s^>)3%7 zaa`F+HMQz!gGXFbs&+NNt78{B7)%qv>nf75nN3V{jaeyI5c-0&cQJgz8_^9$f&z`t=>gc7J*^5U$b86^gFsF@c z-%W84U9P;!Nq205n&)n5AB~4bB3@s_Z$Uo-I)Vs^3#?ON@Ro_s)e=@OoLcTTyHzJs z8HE?Lid8IIT<4k?<0ax0FBkuCpEAwhSaF!dxK_*F5MOD{nQvS04&LRMmF=1n2J?9) z#0B$O+Xqw^+doP}Rn_m)@R9h}T*!`z0*gyI&S)B{%taz#$xP_fYlF=O6I6gSjhRH~ z$-*EQhG?~wY(*ljiZfuY$}`}u1z6`(8^a`3+6c5@nB?k};0Q*@l4(Zq4EY(Nh@}%6 zrYW5UG8Pk9)mCB8{T2=b&Y{?|3};W}5=wvttgBO`=};EoT0&JCGC7na+{a*+`r&Se zDP`qJy|MdCWYww5sPA#83wZqOG8%durUh)NQyr@7G}zZ@N@8ac?G81GPAL*yGKQyO zcsk}bW6v$ddpPdcehfXe zL}DRijJhAh8jKT>O3Bk0r);-YS8uPVLb2K(KT&GG^80l=k z;RU=%z8d_D1g%U|^XLl6OLPx9 z;s&f74SmuKN#UWyuTrpqDu11{f*EAsND7(3o20X;oVSSVy_9@EB|pSb^2mP+`J%|r K$M^&%;P@YPpETwG literal 3908 zcmbtXTXa;_8UA)IbCTg;E^-^OR5aQog-og1LI!D*A(7ZzXfDt|Dm|ImFo&F(Go5oL z7ppB=ttcp{RDp7bO0^=znoFT--?~=c>~mkb7O>={edvp8S!=(2&PB}!1Lp-e|P0s?i>?(jfIxILSSxu%`kXr!bSj@p)G%r5Iz z3CtTcth%^#MqE2Ba98I}W7HTAJ7Z>QNBFT`BW~KQS=Y5w5hcDtN2QXjD<(T7*JsR8 zsW#^6(A7qzx8WvaMp5t3QHARKaYgMPcLkQrRnjlV-F8!2aZg39jythH;0`4zDcyt} zZ^=kQVDZgdY9kWFA}rRhL`MjB2`p6(gpDybEJtO^4R_gDN4CU`v@0_LfwgAJbk_-# z);DYl;%yeRN$Ke6$5>3z1=NcZS(LD9@g+J9pA=kf%%@O z{8>hXas(d88Cz&rPHZ7bL-Sl?JcBi?B~CoKrX6lKEm=!cuhR+a?=pT#V?;*nRLpQU zn{I+L$2C%}bA!^H?}bWpq#z<_RS1a+EG)D$&%$V}L7R?tJSw0Ods*4D{RZ*5U>6Zz z3xRb?$74Far?3=|1|6K|Guba8K4v zXI%zB8p$9AF{DKNP=Ue6LhcxORiSLt@guMdHRf7XtiXaiXnaihxT{1AaSc+(b`ZeJ zJ*!g`6-yWyN4nuYCN6Gd;!%Ii6qXP4w{Ih={N58TJe)hk8eaob$4-n8lr*4q!j+XS4#%YbM4ft)u)67#YEKpTDf4{!qoY^O9lW}G|CJYyFR#EZHcEf- z&p$pbaHhWV*1g)V@mVVhJF}Or|7&N~ryH~=y4PeIHVKqP?KmS?)oG?=cQ!f9ZmzH; zP}^z83~Q5-G1WRpEOQg4s?XbSt!`C>6{F7Au}{_A1_#gUN!8e+mKhsSO*s#R8ybI` zx&w${ffC6~E}TVnL3vSF^>)@@VLi;Eu}H1(d}-3)Wm)A*%lARjD`--t+emsrxn8ij zCc}GVyKTi~W~1RIc*D&aqpDwVD=YjxK?zI!{h}TblyieVk9ez$m{g{-Yt4OEG$}sDr!A!_iPuq=caLj0DRA$t zq0UHjOUK<{JM1#mt+wqtZpKLaLY%4qejUV{IIH0|>UwyKkhvaeGc{_DNOl=@3;H)k zyAgBk%!I(f!rquW=nLJzo@7a-`5=iy4X^OM8ocES-!!@{MNpz%A zG8457$B~YP_XO_0DKN$S)$l$G=*y3?K>gt09=5$jyqn9btJOmj;K)azH}VbWjePZa zBVTenS;D^%p5`6-3}*veYaEw1u9$>qTsaA?F;q5*U}LC!67w5Ffl1UfPGjK(kM-yL z2FMCLj%WE@B_$(!Zk&6@Zv-d>>*8OAq5d&NOcp;wjtfk92IIV0d+`cpaEar`_!OU^SJa5rBEoT4B*X~EF>y?s)P!V;BBL6#s)L{ui}kWIcm~JB0UQ^Ha6%lzX?k-~oW?0}4rhqnH$Bk5 zgBn^8#2)NrY>x2%m6z}`XCLHf8ZFDyKF`x=O^!wzd|r)Ob5f``zk52rizcxf`>>xS z)-0Z6L|#QHI>_@H4lu$)^x>DBmD9G$oCPehd?|AFI^JLj9%K%5j=r=*ly;buPE<91 z!G0akP@>^i8XnTHMni8n&Sdmeug%@?S0?zzVG69+)>Xq)sfWC1!j5@q5lFa1v7B~ diff --git a/target/classes/CN/UI/FunctionPanel/CollationPanel$2.class b/target/classes/CN/UI/FunctionPanel/CollationPanel$2.class index 7bfca4cc3147ba54769dcd2df9a201a52359d930..fce04793b720f4b747baa1c83c13f56fd3e15b6c 100644 GIT binary patch delta 23 fcmaFD_JnQ2X(q;s$!D0nS*sa18EPiWFna(1YN!Wx delta 23 fcmaFD_JnQ2X(q;%lg}`Dv#w#_WLP^{hS>uEa5V@C diff --git a/target/classes/CN/UI/FunctionPanel/CollationPanel.class b/target/classes/CN/UI/FunctionPanel/CollationPanel.class index b3938f49de11cb996e60920d638297dc0d09373e..99aa5902540e1d7b6b84cb041357840b2b9d9c76 100644 GIT binary patch delta 2228 zcma)7dwf&n8GgPr=}Avc(k4jbsRAPYuoq~cL(r5Wr4&jn6)3igiW-^&O({uDPHXW( zP>X=#1&?FYjZN@^is9PxpLjQGfnrntr$UeV_O8 zJ@1$2OYc8LefF!N{Q%Cyr+d|xL`p>^#;K^nj}%PPa2loyOzaHzhWi4^OQNxrffdm% zqrD>@Pa289Jg!^TBu!&=Yt*X|7#Z@4`}? zqo7qo8-8qUx7AKQm(k_CcZFG_7Bj(8`5;g$LtLi8f%z&zxKP7I2wU&vomOm-j8SaewP9Lt^ZHkK(^W$kv9% z?ljKnG0k|)iOme~z~kEw?%Aedlg#i&>!>o(GgZY6*dpz37A*To&T{J+mv8Jh=JK*? z8EDJj)s}dVR2_vKOib3Nw!1qXr99FUjTy~7tCt%I zYmM_UF=)*wIM874&9T4qhw_|7mt7>_Aw%aH$yH{&TN2gM)fVeH^?2(8^>eY`I^vq| z`L~J#IH=%|$W|kZ5^Cn}CP#Fzk4Qx_;Qc=8;1QV5S10Kv579puaSwc4B1s z@1S4C3FPf&#B6Y}!}`ion#y3x!a+=Jo}9*vpk248Q5|$l(j7yX4Fb%~q9K$)V=#XZ zX9X2q@hyH7EjB!XP|%sh%#iLJ!g-*J^MeJseZe3u7{c=5Beh~u8trXaj3vmJpi6gU zF`ml_X-v+dGUQ9G%pe-nvgqV#SJ3?(h}9zyx|&980JG(snBgh*Y~1Gz7G=>J($x(5 zf?nOL7p1YLP4}j8#V$C4-Yh~Py(oiq6uRZ{)mik1baw{V1U<)sDbx$INR@`{jtt6k z@oWnDuFK&1V3AJv8$#u}Lz>)_hLr_nKb10i%VK~sN`6L(UMQWnw{fN)&MsZ^{UVLq zxbXOHA6^vt?&PApLJD@3>n?e|YcFr*jTAn^msrbdlH_3&98czM0t$KEew<3elwuM| zFa_l#Oa*GVYoOj@K6I@JAVP_Wsn|fuTu&NpA)^T**Yq}fX(*Bi7x zf?4>Gum5Lkk1vs$jsKyJq?s!`m?v~T@+YG~Ou+(CjYiSLXRr-@Vg=TU7$3P_tP?3* zDK_#!+k&gbHuQ_zus+A&*U9!HaN|)7!Ap13k;OiE=rn-GupdQ|ns}T^c_sTup(lY9 z{Nh^t8c(qplSB`m#&1Z|DdJ*0gWr-Zx-^tW+jUhj8ZUGL8XE!MYdu{ zL4$&&xdpfU4of@j3SN_qx>kI#oUq@vsU5Eq(8iLz$yq)u1AN}!;<|(t_!nKjog0tj a#-q9Mef&2k&!gt>XJBOh03YEK=>G?F8y2wu delta 2683 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 delta 3308 zcmb7Gdw5jU5&zA-d-v|%z1buS$X*O2Kq7=!2v1p59wA6DF9-<)!edDmSP8pJcEd|$ zQ4oU|!QLW*#RshowGRzw2yB6hC{(J|wzjrdYg^l5Tlrd1OA95=xmkq3*FU;nGUuE* zbAEGX=FH4}Z)DRb?TyQaj{=xLi(0jF(h?PS5{$yqys3?$+E_3g%Bzgj`D20PpkXRx z4TCXV$6Y8U*p~)kfzT>K`oP@cyZx*Dd5y7PeO`$_GTwnwf}^scaAxVGl0p~CF+;^n z9Tk{m`s8W$**fN++H8_#e@rra*I^FYBsAG_SbZb!0YA<>X4M<(1q1M*6{{T zn`hM=*PD1t#ZPs-jdx71!$&_iD;$UEUDNHnDd$&&ocLU1E26f$7>#>;1A*oe>BfHd(ofFFPwwv zFJ?b&(1h*ySjS(5d$oqZDt~=Yq=ksh-*tQ<*lI%{!oiCvoKF0s&oulKpQ<>o<1>72 zZq>4#|H1_o|JL!J1MONlQOW_Qu1MW;R5BQ~a7}H%x^q;ek!C-4xqF;OJ{qsmZG0oT z-Q3_l(Vw5cF>6^MtE?icE*ywvg~G9{Xk#Q2Zir=(gC-IBnwe={GoI=iTtIMAO~fBt zHmuI?phAMDz*kcl4Kze+sAftax;z$+IEWLzk9FqFR7Z~@f{SXFHiTCvPu-Q=?G<4y zftZ6zEQ!vQgN{-8V>76~nNP$j#XYNCy`wSj2V+MX@8wd8g+ zr;ascv7%5Y&`?nCk46LRh8jYS`AS+JExR}zUfvi{X@Pk(ZRngKGDvw9vQ5kd))XEbHmzauez`%c*>YW0(j1FEo#dBcJMYAA%EnPB?q!+}6)J#t0 zzDQv-E=??3GA8x9^8%rdA)4wuiC^pGckE$r>BKE+Vj zSC1sHotIxrF3tV;`Yzbp@k9c9nE$j-HPkjd(~fVAarAJc)jdNKg%zIXg?rfZ-}5=; zG1`8-xEpDP^CVmeyv*kg9y6Rim*F}(MwiE=n9=T@cst{6(r8l(wRC)xK!T-?2$3F| zt*#9$n80x>z&-TCI3dh9>EnQ%GVE>m33-0z`GsWg#op@@AzzAE8Y$MhxDunQ(RUl} zE0KtcsJlhfnXFBMbb6}`$ot7y7&gXi$8UY9M(XQGH&Vs5KIDg#+5%n7e=p`;R2ivP zo{mI!jDi=Vk&Q9T8H*{nmA`Ao@wdu&%!%W6EWjQ7DKP;n zF%j!A2^%q)K?@nS0L?7E6L;b{Ok>v<;V7o#RTSeiO7IR!@jlA%F+-ih44g*=7m-=i zjmtzYR8b}ujsd8qp_ogzVjdNuhNfdam0=;x$07>DPw~}QOdC*3oB0!G8=mHwKKCY5v#3U!yN*=6}dgC4`ANNY*aGx{< z>!k|Br6t%Pt;GG(dORR)#73zJo1~q1P6( zwn?92yDZ}|IUS~)fgN%-9+z{mQyzvV_P~|d2JWOcQBN+E7Z7(@b<|C#Xb^eH;JSF422d}$85-O4A!Sf+xY)9H zsSopXw&`hB;zWwD%7S*Y9d}SBD^6wWPf!;1gv6z zIsBsPQa0tVHC{QBZsCX#vgK|xkO3u(kQK^hbuy+%=lP0G*k~K=qro(U??04Ji8j-D zav1jzQTk7zTL(W0g`1;_a&w-ySA4spgCCfylhfG`R5(@svQV*yd&+QbTbITDa3b#o zC>=P0v>T;W9KRy3BEijsA?g?oVEk-eSsHJ^M;teIfWPBz+)p9`l+QQk9!n$Opivyd z&OSSeNAXMdw6@`k-B4{Uu*nDT;`Ke(YniS<(kBwTel(wvXbg?zu?hhh-7F)E`qU9EyY0+60t+MDG;*Q5w5zV9dv=GLZMF`4z diff --git a/target/classes/RUS/UI/Main.class b/target/classes/RUS/UI/Main.class index 0fb257c57312fb5e3a210c346f39274f3f2eaa17..aac4a0ee1b88fe8471ade9a5a074e27f9d43b0cb 100644 GIT binary patch delta 3135 zcmb7Gd3aRS75|+#Gw;p3c{9mO7?KAekv)VZ2}_ibB@hA(kgz6@5WpcB!oV?lN$ zg!u{Pz?*if!ug~8gezA{*AuvRI!LuWZE zY6JdgpeWEVGZ+d;SgmE42YCGOxM4z$4Qo&(VXcB7)@fztLNTOZ1H#%7^O&)I)F`+U zwFFB;Z7>?(F=P4k5hXJGh$^Uq$ecByy2x6clPaN6b6C=?4Y*5z1)H?-mf?XIfwJ8Y zk>iGh94ofzXZ)c^zzwU;v>`{rE`n!K@#3svUsj<%80KMiAQY-D_Q}`@lTLOk_y!&z z$dN#_Bp3;<4zW4rjIt3W6831PEox4aF4%7MfW>d;! z?8gBKk0>~($>KQrmNrF9cQor~oAGT0EqGj8Cl0b7!gnNmSHY9`o_0W-NKa|6inoa0 zSMUQot$oGj815Cr2%T24rD{Sf|Eu*f{~u6KdWt(Joz2^ZU=s> z;3qgmkivn+s4pDV9r2CuNjS}6Sm&?zH)cf|g5jzx-v)nGz*kWnc0;GE{R4t2hSmnFQS;OF=SAxRr(P12TGhtRK1Y_<+3`nC3?Z7992y=+Uh zzJ@my{06_(F4#iiQT$%P+nQhY*q?L5fj{ax&TCuce)K2pQF)~KJ;G3}Medh5A-j4_ zPImT~nsAjKsh(f|Y#3boSpAe5fVZlkK12f`p3-{*HfWIrbs8f8t*f z{;lA%6D#ctiR2T<6syo@kVJhMqoA=OP@^X(B2l*XigST8SEgI(Hi;&(J>=Cg6VB2k z?LtBtP0^f*!!q&+HY%_2N7s(2^jm2+BM@01t*)`s3~gUx|9(}q z)eX_LR+>q$Q+dzII5wNN2Ycoi?3%ionn2WG&m*L2uEdn`I>xh7k)cbU8@mfQZInfN z9IUj6pip_FuA(9ki5S~U^liC!yM(X0F=a7dI2@?W5BVdJ0DD=gO?G9PmlM*oJXe}_ zzf0+V6av2ul$fI5D4vL6>C-%R%!l%bEVmCvGC_oa=_zhv1Wh9V^M-z(4%rmwY^T4lw&dvW@=g1p$suuS>H&GRj^*FTUdho6PC-}WL1Mk7!em(Y%UTodS7>COp$IjA| zxX)`*EzG(RJl26Ha;+X~V&&tMr-#Vhs;7h_ zf7oj?<;rb1(u_pa_5$p2wDGwgcBwY6UA3ReRZO`KkHe!JLVr~o?U7?YV*KqgZFf*> z_j_@4uym&`>XFTr?TF_pada7p_9&hBsc!vQuh@p4sbV``B=;}fuL>#~_{KGv@;daT z>M-ud)m(jj3!JL+YDQvu_MLk6nbh}!^hE6%khi{y8)J6hcisdw;d!{!1l_E6_(mnP zLeb}c(C62vQWL(;&sUmSk*UY;Pz)(Nj(q|y-B0(shI_4W8mm8FwMmIZek3nuS$Vj60|beyYZ5iZ!Bw?m>Wd zVGT85EolhSer%u?gy}G<=@@FL6L->S{>nIm2)&6YT|^ySLOoqZR3K~=WZWfqut^w! zyM-KV7AD~yVJ>3AN^B8=*ecZHUSSiq30tsT*oz&)A?y^M#xCJF?u!Xs*e#sH1Hx-) z63%0f@ILkmAL2pbGWMBl&`f>suqhS$O#^YjGz^cJM&Y3GyneyYtRLx=K#BZ%1(8fH zei}uNnoMqfLMI_v&iWvwXGSd?-4;%X zM2Be`-NJZQ{lQ&918ERnnM6}M4W=P{p;AprG?W1aWST5AjMbSiN%)iv6Je%Z^b}># z2(~|yPw6eD=j2F`@$8>NQa4{0i$tR&6lyNDU#!X6%@@qx!|CY-5^NHG3`l6^-Z7ek zbw%GFO_Xv8mTvy`NxV^7Lf2J!2_4)>7{bqR0OJqgm7(zle8kYdn?H_jvfqoyWiy6- z;dV+{uu=}^kXtHq#`CEEx!gzF@o6(8b1TfI6F735nSx$#hA243ddIUsQ1XaFKUUwS zaWtOC5(JzyfuV0V=wyRVHRv>h<{PxYptB6>Gw57{78-QEK^Gcyu|bQ8yB>Q*w2aEA G9O{>}s-BMk delta 3272 zcmb7Gdwf&X9smAra&wcL+a?XLHsw)~7AUXM@{)kON`cn4KuZgS@(68cBP9t*N&%Ii zAQlm*yF&zq2%D>OZnJ=GArl>wWO>xYes#bD(VjgvdTi$-l(r@P%#50 z6+=;=;T{wcEH%EUFR+G?G&r;HUhf)jR(;f8msR8qO|YVvU@a@nD=D5@lxN2r%vDgL zp%n9Uk7<@=zJ>*;&>Kw?W0e{fvkkEL*7_sShzc8)YFK87R;{e|hYitk4OK#vP!;yE zNyWZ~8U8w-0v{p8Q0)(93CZmGXsA9~8s%N9R8*sv3npaS;K#iRR%)ojDnftbivWL8 zRjcQkCtHFVLRhUgnn&bRBcdUSdV<^#_D30C9=vE;X1M@s(6AO3maM3&kJJiD9|ia6 z7tLwb^>{#oj19U&9yI770*!RRf@~KQWLvRCeB-T)_*}3Gp$*vz9@Q7isp(rqOt)gY zh8@^RP$Rx*xj*7xUdNivgBNC&D|lSrC%dzo#KtCUw=vnJ;R)>KX!s-ff!ttSomZrb zwJub#2YVIl)9`iu19_DBDNd<=AR*PEV!r^`kAoTx;Tw9Mm8PXvDWTr*LedqSyLksUsx#43x|VY6)y?} zHXPG%+{m6k(wUPgD=06iM^z~}0{)(C~xd|U?_=_kPHSAmC zt@DecBr^C{4VQ#i3Hw4`e;_LJ8RQ>*qT=uPSiuzypWq+5W>2^M3s)8VTf={jjJMAv zN;tAjvr0WP6mm0a-r6dkVR}TNQF?RYoW$`ed1!({6WK7jTbCWDXtI9R(a$`UYhDjJ zQ+ii**NT;L2{x(>d84%>s=Zdq)6<;EG*hp0_D-z{2OFZbR>~*Xsj_osY`TY+2e^t1 zai~5N@4$B7E7742wcb2>qDtSIvE)Fc@4}A3}e$KoW6sriglE&I~?Qe98!)@+^x-;!z&b z25MnO!ZoI18F1sjOtsDpxQ-5<*+gzx@~M6%X&qhDr@3+~#I6!Pqy3S&deOJfMgP*31y@($L?`Qw33arCUGBC$O}QR~%b8+S@#`Tjp3j7Dp3LzuGm`594clU}?vbaqMUL z0gvKVTJdx{zB$&~%j&Ftnx+UZT+fM=aO9u&*i2*9!+2pYoNn7`*yDJyqD?}Z{!!1g zSUY2FR%vqrHFvxpN1PE~^4Q(>UaGme6(`1Oahx=g+Dki*Q^L^G9!}C3x1|+7Cf8f8 zUr25?=GV7m#gibW?gXP2y7O`)`ibtu?%>BnrV~Y`nXKyq>5R}VAn$$_BF1dTdme|| z@j8;+4q?^>E*?iSG{OH~@VBUPJ8tCSGfmAHB4TwYh7=xi4kAhT>3ZLAuNjHP>`%8i zD{AqgARqO_<#zn7`MQ^n+5$9U8~XA2=L1eFP{9XrB+s(>;O6i_9EF}3jTDSQI>xeO z9H!$gezJ_`XUGIBh~aK5!6beXOvY+V!3IplCQM_{JciB1cHX`lGw}>&ap?1L0tI*# zg*b;IyoqAGi`n>)p)O-CuAr2=#60T3eIOO(l*XN55GrUm7Sdf$=deXO zibrD7F*Hi2@u>6$9+Td|cIhH^NSClv`WQ_n6CO7uK{xfmE>k+5FlA!5X#}1$jpm1i z=#JO8m->-LF7{dG_$5RLSAwhU$Kqs;vlPHZ9JJ|bEbO-f^ z#gqtB7uN?Vog6jOb{wKR`L1c9O*DYRFat`+G0Bw4 z>P(m}U11Y#Fw;(YmWI+WwtqN(CGL^VFGuhtk;sxW=+VI?A@hx=V2*wvB{kM$?cf5l zcS;ltP+&9un)pe$pD&G(d@o%W>m!L$u0rm>OK^UEw}O-1`xV6b{$P}9h65Nsoo9x| z&*3A6-W~i-`hxW?M1Zo{a=t_<2UZ%*IqbYhNAoCtNv@Vw{Bti9b2H4QBY5HVOEtxC zU52DhArAc*{zjs)G>*q|_!2q&M3W3U#h}v+I^Cc%3_8o81qLlNXt6=(7_`Ko^9)*U S&;`V|9D7Byh!)dQxc>*>M$Lf$