]> git.basschouten.com Git - openhab-addons.git/commitdiff
[xmppclient] Add send image throught HTTP (#11247)
authorFabien Carrion <fabien@carrion.mx>
Tue, 19 Oct 2021 17:08:48 +0000 (12:08 -0500)
committerGitHub <noreply@github.com>
Tue, 19 Oct 2021 17:08:48 +0000 (19:08 +0200)
Signed-off-by: Fabien Carrion <fabien@carrion.mx>
bundles/org.openhab.binding.xmppclient/pom.xml
bundles/org.openhab.binding.xmppclient/src/main/feature/feature.xml
bundles/org.openhab.binding.xmppclient/src/main/java/org/openhab/binding/xmppclient/internal/XMPPClient.java
bundles/org.openhab.binding.xmppclient/src/main/java/org/openhab/binding/xmppclient/internal/action/XMPPActions.java

index 26684f2f62fbc047b93217195053be4588a2e082..04d84db12ed1b0263e83dce07223da0ba0158429 100644 (file)
       <version>${smack.version}</version>
       <scope>compile</scope>
     </dependency>
+    <dependency>
+      <groupId>org.igniterealtime.smack</groupId>
+      <artifactId>smack-experimental</artifactId>
+      <version>${smack.version}</version>
+      <scope>compile</scope>
+    </dependency>
     <dependency>
       <groupId>org.minidns</groupId>
       <artifactId>minidns-core</artifactId>
index 6207675a23b63507f886651c924461b3545a90d3..f9d20cc4d999e76ea4ec3e550f8974da8f063b75 100644 (file)
@@ -6,12 +6,14 @@
                <feature>openhab-runtime-base</feature>
 
                <bundle dependency="true">mvn:org.igniterealtime.smack/smack-extensions/4.3.3</bundle>
+               <bundle dependency="true">mvn:org.igniterealtime.smack/smack-experimental/4.3.3</bundle>
                <bundle dependency="true">mvn:org.igniterealtime.smack/smack-im/4.3.3</bundle>
                <bundle dependency="true">mvn:org.igniterealtime.smack/smack-tcp/4.3.3</bundle>
                <bundle dependency="true">mvn:org.jxmpp/jxmpp-core/0.6.3</bundle>
                <bundle dependency="true">mvn:org.jxmpp/jxmpp-jid/0.6.3</bundle>
                <bundle dependency="true">mvn:org.jxmpp/jxmpp-util-cache/0.6.3</bundle>
                <bundle dependency="true">mvn:org.minidns/minidns-core/0.3.3</bundle>
+               <bundle dependency="true">mvn:org.bouncycastle/bcprov-jdk15on/1.69</bundle>
                <bundle dependency="true">mvn:org.igniterealtime.smack/smack-core/4.3.3</bundle>
                <bundle dependency="true">mvn:org.igniterealtime.smack/smack-sasl-javax/4.3.3</bundle>
                <bundle dependency="true">mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.xpp3/1.1.4c_7</bundle>
index 1d80f19ccdf5222d8269afbe0da7fe2952f1b2d5..eafe406dec7b0b1770fd4d8b64081eedfe80857b 100644 (file)
@@ -12,7 +12,9 @@
  */
 package org.openhab.binding.xmppclient.internal;
 
+import java.io.File;
 import java.io.IOException;
+import java.net.URL;
 import java.util.HashSet;
 import java.util.Set;
 
@@ -30,6 +32,7 @@ import org.jivesoftware.smack.tcp.XMPPTCPConnection;
 import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration;
 import org.jivesoftware.smackx.disco.ServiceDiscoveryManager;
 import org.jivesoftware.smackx.disco.packet.DiscoverInfo.Identity;
+import org.jivesoftware.smackx.httpfileupload.HttpFileUploadManager;
 import org.jxmpp.jid.EntityBareJid;
 import org.jxmpp.jid.impl.JidCreate;
 import org.jxmpp.stringprep.XmppStringprepException;
@@ -46,6 +49,7 @@ public class XMPPClient implements IncomingChatMessageListener, ConnectionListen
     private final Logger logger = LoggerFactory.getLogger(XMPPClient.class);
     private AbstractXMPPConnection connection;
     private ChatManager chatManager;
+    private HttpFileUploadManager httpFileUploadManager;
     private Set<XMPPClientMessageSubscriber> subscribers = new HashSet<>();
 
     public void subscribe(XMPPClientMessageSubscriber channel) {
@@ -90,6 +94,7 @@ public class XMPPClient implements IncomingChatMessageListener, ConnectionListen
 
         chatManager = ChatManager.getInstanceFor(connection);
         chatManager.addIncomingListener(this);
+        httpFileUploadManager = HttpFileUploadManager.getInstanceFor(connection);
     }
 
     public void disconnect() {
@@ -116,6 +121,24 @@ public class XMPPClient implements IncomingChatMessageListener, ConnectionListen
         }
     }
 
+    public void sendImageByHTTP(String to, String filename) {
+        if (connection == null) {
+            logger.warn("XMPP connection is null");
+            return;
+        }
+        if (httpFileUploadManager == null) {
+            logger.warn("XMPP httpFileUploadManager is null");
+            return;
+        }
+        try {
+            URL u = httpFileUploadManager.uploadFile(new File(filename));
+            // Use Stanza oob
+            this.sendMessage(to, u.toString());
+        } catch (XMPPException.XMPPErrorException | SmackException | InterruptedException | IOException e) {
+            logger.warn("XMPP HTTP image sending error", e);
+        }
+    }
+
     @Override
     public void newIncomingMessage(EntityBareJid from, Message message, Chat chat) {
         logger.debug("XMPP {} says {}", from.asBareJid().toString(), message.getBody());
index a25ca84b09ceb920d8906516e34c88de571e4258..2b2b11f6a7dee6b02d2c644c03e85fa256b9dc01 100644 (file)
@@ -66,7 +66,33 @@ public class XMPPActions implements ThingActions {
         connection.sendMessage(to, text);
     }
 
+    @RuleAction(label = "publish an image by HTTP", description = "Publish an image by HTTP using XMPP.")
+    public void publishXMPPImageByHTTP(
+            @ActionInput(name = "to", label = "To", description = "Send to") @Nullable String to,
+            @ActionInput(name = "filename", label = "Filename", description = "Image Filename") @Nullable String filename) {
+        XMPPClientHandler clientHandler = handler;
+        if (clientHandler == null) {
+            logger.warn("XMPP ThingHandler is null");
+            return;
+        }
+
+        XMPPClient connection = clientHandler.getXMPPClient();
+        if (connection == null) {
+            logger.warn("XMPP ThingHandler connection is null");
+            return;
+        }
+        if ((to == null) || (filename == null)) {
+            logger.warn("Skipping XMPP messaging to {} value {}", to, filename);
+            return;
+        }
+        connection.sendImageByHTTP(to, filename);
+    }
+
     public static void publishXMPP(ThingActions actions, @Nullable String to, @Nullable String text) {
         ((XMPPActions) actions).publishXMPP(to, text);
     }
+
+    public static void publishXMPPImageByHTTP(ThingActions actions, @Nullable String to, @Nullable String filename) {
+        ((XMPPActions) actions).publishXMPPImageByHTTP(to, filename);
+    }
 }