GUI: detect remote connection failures
[nikiroo-utils.git] / src / be / nikiroo / fanfix / library / RemoteLibrary.java
index ea155eb88d14515cf4334dfc38eb1843e0b9f005..63d2d7d345952820ff42a5ef3c9c8b395492c55b 100644 (file)
@@ -3,6 +3,7 @@ package be.nikiroo.fanfix.library;
 import java.awt.image.BufferedImage;
 import java.io.File;
 import java.io.IOException;
+import java.net.UnknownHostException;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -47,6 +48,50 @@ public class RemoteLibrary extends BasicLibrary {
                return host + ":" + port;
        }
 
+       @Override
+       public Status getStatus() {
+               final Status[] result = new Status[1];
+
+               result[0] = Status.INVALID;
+
+               ConnectActionClientObject action = null;
+               try {
+                       action = new ConnectActionClientObject(host, port, true) {
+                               @Override
+                               public void action(Version serverVersion) throws Exception {
+                                       Object rep = send(new Object[] { key, "PING" });
+                                       if ("PONG".equals(rep)) {
+                                               result[0] = Status.READY;
+                                       } else {
+                                               result[0] = Status.UNAUTORIZED;
+                                       }
+                               }
+
+                               @Override
+                               protected void onError(Exception e) {
+                                       result[0] = Status.UNAVAILABLE;
+                               }
+                       };
+
+               } catch (UnknownHostException e) {
+                       result[0] = Status.INVALID;
+               } catch (IllegalArgumentException e) {
+                       result[0] = Status.INVALID;
+               } catch (Exception e) {
+                       result[0] = Status.UNAVAILABLE;
+               }
+
+               if (action != null) {
+                       try {
+                               action.connect();
+                       } catch (Exception e) {
+                               result[0] = Status.UNAVAILABLE;
+                       }
+               }
+
+               return result[0];
+       }
+
        @Override
        public BufferedImage getCover(final String luid) {
                final BufferedImage[] result = new BufferedImage[1];