Exemplo n.º 1
0
  public void onLocalDeviceComplete(@Observes @Phase.Complete LocalDeviceDiscovery discovery) {
    LocalDevice device = discovery.getDevice();

    String[] labels =
        new String[] {
          device.getDetails().getFriendlyName(),
          device.getDisplayString(),
          "(LOCAL) " + device.getType().getDisplayString()
        };

    final DeviceItem deviceItem = new DeviceItem(device, labels);

    Icon usableIcon = findUsableIcon(device);
    if (usableIcon != null) {
      ImageIcon imageIcon = new ImageIcon(usableIcon.getData());
      deviceItem.setIcon(imageIcon);
    } else {
      deviceItem.setIcon(getUnknownDeviceIcon(deviceItem.getLabel()[0]));
    }

    SwingUtilities.invokeLater(
        new Runnable() {
          public void run() {
            view.addDeviceItem(deviceItem);
          }
        });
  }
Exemplo n.º 2
0
 protected Icon findUsableIcon(Device device) {
   // Needs to be certain format and size
   for (Object o : device.getIcons()) {
     Icon icon = (Icon) o;
     if (icon.getWidth() <= 64 && icon.getHeight() <= 64 && isUsableImageType(icon.getMimeType()))
       return icon;
   }
   return null;
 }
Exemplo n.º 3
0
  @Override
  public InputStream getInputStream() throws IOException {
    InputStream in = null;
    Device device = icon.getDevice();

    if (device instanceof RemoteDevice) {
      URL url = ((RemoteDevice) icon.getDevice()).normalizeURI(icon.getUri());

      in = url.openStream();
    }

    return in;
  }
Exemplo n.º 4
0
 public static String getDeviceIcon(Device d, int maxHeight) {
   URL base = getURL(d);
   Icon icon = null;
   String url = null;
   int maxH = maxHeight == 0 ? 99999 : maxHeight, height = 0;
   for (Icon i : d.getIcons()) {
     int h = i.getHeight();
     if (h < maxH && h > height) {
       icon = i;
       height = h;
     }
   }
   try {
     url = icon != null ? new URL(base, icon.getUri().toString()).toString() : null;
   } catch (Exception e) {
   }
   LOGGER.debug("Device icon: " + url);
   return url;
 }
Exemplo n.º 5
0
 @Override
 public int getDepth() {
   return icon.getDepth();
 }
Exemplo n.º 6
0
 @Override
 public int getHeight() {
   return icon.getHeight();
 }
Exemplo n.º 7
0
 @Override
 public int getWidth() {
   return icon.getWidth();
 }
Exemplo n.º 8
0
 @Override
 public String getMimeType() {
   return icon.getMimeType().toString();
 }
Exemplo n.º 9
0
 public URI getIconPath(Icon icon) {
   return URI.create(getPath(icon.getDevice()).toString() + "/" + icon.getUri().toString());
 }
Exemplo n.º 10
0
  public void onRemoteDeviceComplete(@Observes @Phase.Complete RemoteDeviceDiscovery discovery) {

    RemoteDevice device = discovery.getDevice();

    Workbench.log(new LogMessage(Level.INFO, "Remote device added: " + device));

    final DeviceItem deviceItem =
        new DeviceItem(
            device,
            device.getDetails().getFriendlyName(),
            device.getDisplayString(),
            "(REMOTE) " + device.getType().getDisplayString());

    Icon usableIcon = findUsableIcon(device);

    if (usableIcon != null) {

      // We retrieve it using our own infrastructure, we know how that works and behaves

      final StreamRequestMessage iconRetrievalMsg =
          new StreamRequestMessage(
              UpnpRequest.Method.GET, device.normalizeURI(usableIcon.getUri()));

      StreamResponseMessage responseMsg = router.send(iconRetrievalMsg);

      if (responseMsg != null && !responseMsg.getOperation().isFailed()) {

        MimeType contentType =
            responseMsg
                .getHeaders()
                .getFirstHeader(UpnpHeader.Type.CONTENT_TYPE, ContentTypeHeader.class)
                .getValue();

        if (isUsableImageType(contentType)) {
          byte[] imageBody = (byte[]) responseMsg.getBody();
          if (imageBody != null) {
            ImageIcon imageIcon = new ImageIcon(imageBody);
            deviceItem.setIcon(imageIcon);
          } else {
            Workbench.log(
                Level.WARNING,
                "Icon request did not return with response body '"
                    + contentType
                    + "': "
                    + iconRetrievalMsg.getUri());
          }
        } else {
          Workbench.log(
              Level.WARNING,
              "Icon was delivered with unsupported content type '"
                  + contentType
                  + "': "
                  + iconRetrievalMsg.getUri());
        }

      } else {
        if (responseMsg != null) {
          Workbench.log(
              Level.WARNING,
              "Icon retrieval of '"
                  + iconRetrievalMsg.getUri()
                  + "' failed: "
                  + responseMsg.getOperation().getResponseDetails());
        } else {
          Workbench.log(
              Level.WARNING,
              "Icon retrieval of '"
                  + iconRetrievalMsg.getUri()
                  + "' failed, no response received.");
        }
      }
    }

    if (deviceItem.getIcon() == null) {
      deviceItem.setIcon(getUnknownDeviceIcon(deviceItem.getLabel()[0]));
    }

    SwingUtilities.invokeLater(
        new Runnable() {
          public void run() {
            view.addDeviceItem(deviceItem);
          }
        });
  }