package hueimmersive; import javax.swing.JFrame; import javax.swing.JLabel; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import javax.swing.JScrollPane; import javax.swing.JTextArea; import java.awt.Font; import javax.swing.JButton; import java.awt.Desktop; import java.awt.Toolkit; import java.awt.Cursor; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import javax.swing.SwingConstants; import java.awt.Color; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class UpdateInterface { private JFrame frame; private JLabel label_LVersion; private JTextArea textarea_Changelog; private JButton button_Update; private JLabel label_Status; public UpdateInterface() throws Exception { Main.ui.setEnabled(false); initialize(); checkForUpdates(); } private void initialize() { frame = new JFrame(); frame.setResizable(false); frame.setTitle("check for updates"); frame.setBounds(100, 100, 435, 426); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame.setVisible(true); frame.getContentPane().setLayout(null); frame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { Main.ui.setEnabled(true); } }); int screenWidth = Toolkit.getDefaultToolkit().getScreenSize().width; int screenHeight = Toolkit.getDefaultToolkit().getScreenSize().height; frame.setLocation(screenWidth / 2 - frame.getSize().width / 2, screenHeight / 2 - frame.getSize().height / 2); JScrollPane scrollpane = new JScrollPane(); scrollpane.setCursor(Cursor.getPredefinedCursor(Cursor.TEXT_CURSOR)); scrollpane.setBounds(10, 61, 409, 288); frame.getContentPane().add(scrollpane); textarea_Changelog = new JTextArea(); textarea_Changelog.setWrapStyleWord(true); textarea_Changelog.setFont(new Font("Monospaced", Font.PLAIN, 12)); textarea_Changelog.setTabSize(4); textarea_Changelog.setEditable(false); scrollpane.setViewportView(textarea_Changelog); textarea_Changelog.setLineWrap(true); textarea_Changelog.setCaretPosition(0); JLabel lblThisVersion = new JLabel(" this version:"); lblThisVersion.setBounds(10, 11, 75, 14); frame.getContentPane().add(lblThisVersion); JLabel lblLatestVersion = new JLabel(" latest version:"); lblLatestVersion.setBounds(10, 36, 75, 14); frame.getContentPane().add(lblLatestVersion); JLabel label_TVersion = new JLabel(String.valueOf(Main.version)); label_TVersion.setFont(new Font("Tahoma", Font.PLAIN, 12)); label_TVersion.setBounds(95, 11, 46, 14); frame.getContentPane().add(label_TVersion); label_LVersion = new JLabel("-"); label_LVersion.setFont(new Font("Tahoma", Font.PLAIN, 12)); label_LVersion.setBounds(95, 36, 46, 14); frame.getContentPane().add(label_LVersion); button_Update = new JButton("UPDATE"); button_Update.setToolTipText(""); button_Update.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { try { update(); } catch (Exception e) { Debug.exception(e); } } }); button_Update.setEnabled(false); button_Update.setBounds(10, 360, 409, 26); frame.getContentPane().add(button_Update); label_Status = new JLabel("up to date"); label_Status.setHorizontalAlignment(SwingConstants.CENTER); label_Status.setFont(new Font("Tahoma", Font.PLAIN, 17)); label_Status.setBounds(158, 11, 261, 39); frame.getContentPane().add(label_Status); } private void checkForUpdates() throws Exception { URL versionUrl = new URL("https://raw.githubusercontent.com/Blodjer/HueImmersive/master/VERSION"); // get version and build number from GitHub URL changelogUrl = new URL("https://raw.githubusercontent.com/Blodjer/HueImmersive/master/CHANGELOG.md"); // get the CHANGELOG.md from GitHub try // to get the latest version { BufferedReader versionIn = new BufferedReader(new InputStreamReader(versionUrl.openStream())); BufferedReader changelogIn = new BufferedReader(new InputStreamReader(changelogUrl.openStream())); String lBuild = versionIn.readLine(); String lVersion = versionIn.readLine(); label_LVersion.setText(lVersion); versionIn.close(); String changelog = ""; String line; while((line = changelogIn.readLine()) != null) { changelog = changelog + line + "\r\n"; } changelog = changelog.replaceAll("##", "===="); textarea_Changelog.setText(changelog); textarea_Changelog.setCaretPosition(0); changelogIn.close(); if(Main.build < Integer.valueOf(lBuild)) { button_Update.setEnabled(true); label_Status.setText("update available"); label_Status.setForeground(new Color(51, 153, 255)); Main.ui.noteUpdate(); } else { label_Status.setText("up to date"); button_Update.setEnabled(false); } } catch (Exception e) { Debug.exception(e); label_Status.setText("no connection"); button_Update.setEnabled(false); } } private void update() throws Exception // open a link to download the latest version { Desktop.getDesktop().browse(new URL("https://github.com/Blodjer/HueImmersive/releases/latest").toURI()); } }