[twitter] rename binding to X (#15809)
Signed-off-by: Leo Siepel <leosiepel@gmail.com>
This commit is contained in:
parent
ab0ea34d5a
commit
12f02124b6
|
@ -355,7 +355,6 @@
|
||||||
/bundles/org.openhab.binding.tplinksmarthome/ @Hilbrand
|
/bundles/org.openhab.binding.tplinksmarthome/ @Hilbrand
|
||||||
/bundles/org.openhab.binding.tr064/ @J-N-K
|
/bundles/org.openhab.binding.tr064/ @J-N-K
|
||||||
/bundles/org.openhab.binding.tradfri/ @cweitkamp @kaikreuzer
|
/bundles/org.openhab.binding.tradfri/ @cweitkamp @kaikreuzer
|
||||||
/bundles/org.openhab.binding.twitter/ @computergeek1507
|
|
||||||
/bundles/org.openhab.binding.unifi/ @mgbowman @Hilbrand
|
/bundles/org.openhab.binding.unifi/ @mgbowman @Hilbrand
|
||||||
/bundles/org.openhab.binding.unifiedremote/ @GiviMAD
|
/bundles/org.openhab.binding.unifiedremote/ @GiviMAD
|
||||||
/bundles/org.openhab.binding.upb/ @marcusb
|
/bundles/org.openhab.binding.upb/ @marcusb
|
||||||
|
@ -386,6 +385,7 @@
|
||||||
/bundles/org.openhab.binding.wled/ @Skinah
|
/bundles/org.openhab.binding.wled/ @Skinah
|
||||||
/bundles/org.openhab.binding.wolfsmartset/ @BoBiene
|
/bundles/org.openhab.binding.wolfsmartset/ @BoBiene
|
||||||
/bundles/org.openhab.binding.wundergroundupdatereceiver/ @danieldemus
|
/bundles/org.openhab.binding.wundergroundupdatereceiver/ @danieldemus
|
||||||
|
/bundles/org.openhab.binding.x/ @computergeek1507
|
||||||
/bundles/org.openhab.binding.xmltv/ @clinique
|
/bundles/org.openhab.binding.xmltv/ @clinique
|
||||||
/bundles/org.openhab.binding.xmppclient/ @pavel-gololobov
|
/bundles/org.openhab.binding.xmppclient/ @pavel-gololobov
|
||||||
/bundles/org.openhab.binding.yamahamusiccast/ @coop-git
|
/bundles/org.openhab.binding.yamahamusiccast/ @coop-git
|
||||||
|
|
|
@ -1761,11 +1761,6 @@
|
||||||
<artifactId>org.openhab.binding.tradfri</artifactId>
|
<artifactId>org.openhab.binding.tradfri</artifactId>
|
||||||
<version>${project.version}</version>
|
<version>${project.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>org.openhab.addons.bundles</groupId>
|
|
||||||
<artifactId>org.openhab.binding.twitter</artifactId>
|
|
||||||
<version>${project.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.openhab.addons.bundles</groupId>
|
<groupId>org.openhab.addons.bundles</groupId>
|
||||||
<artifactId>org.openhab.binding.unifi</artifactId>
|
<artifactId>org.openhab.binding.unifi</artifactId>
|
||||||
|
@ -1921,6 +1916,11 @@
|
||||||
<artifactId>org.openhab.binding.wundergroundupdatereceiver</artifactId>
|
<artifactId>org.openhab.binding.wundergroundupdatereceiver</artifactId>
|
||||||
<version>${project.version}</version>
|
<version>${project.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.openhab.addons.bundles</groupId>
|
||||||
|
<artifactId>org.openhab.binding.x</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.openhab.addons.bundles</groupId>
|
<groupId>org.openhab.addons.bundles</groupId>
|
||||||
<artifactId>org.openhab.binding.xmltv</artifactId>
|
<artifactId>org.openhab.binding.xmltv</artifactId>
|
||||||
|
|
|
@ -1,63 +0,0 @@
|
||||||
# Twitter Binding
|
|
||||||
|
|
||||||
The Twitter binding allows your home to Tweet 280 characters at a time. It also supports direct messages and tweeting with media.
|
|
||||||
|
|
||||||
## Supported Things
|
|
||||||
|
|
||||||
```text
|
|
||||||
account - Twitter Account.
|
|
||||||
```
|
|
||||||
|
|
||||||
## Thing Configuration
|
|
||||||
|
|
||||||
The Twitter Account Thing requires you to create a Twitter App in the Twitter Developer Page.
|
|
||||||
|
|
||||||
| Property | Default | Required | Description |
|
|
||||||
|-------------------|---------|:--------:|-----------------------------------|
|
|
||||||
| consumerKey | | Yes | Consumer API Key |
|
|
||||||
| consumerSecret | | Yes | Consumer API Secret |
|
|
||||||
| accessToken | | Yes | Access Token |
|
|
||||||
| accessTokenSecret | | Yes | Access Token Secret |
|
|
||||||
| refresh | 30 | No | Tweet refresh interval in minutes |
|
|
||||||
|
|
||||||
## Channels
|
|
||||||
|
|
||||||
| channel | type | description |
|
|
||||||
|------------|--------|------------------------------------------------|
|
|
||||||
| lasttweet | String | This channel provides the Latest Tweet message |
|
|
||||||
|
|
||||||
## Full Example
|
|
||||||
|
|
||||||
twitter.things:
|
|
||||||
|
|
||||||
```java
|
|
||||||
Thing twitter:account:sampleaccount [ consumerKey="11111", consumerSecret="22222", accessToken="33333", accessTokenSecret="444444" ]
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
twitter.items:
|
|
||||||
|
|
||||||
```java
|
|
||||||
String sample_tweet "Latest Tweet: [%s]" { channel="twitter:account:sampleaccount:lasttweet" }
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
## Rule Action
|
|
||||||
|
|
||||||
This binding includes rule actions for sending tweets and direct messages.
|
|
||||||
|
|
||||||
- `boolean success = sendTweet(String text)`
|
|
||||||
- `boolean success = sendTweetWithAttachment(String text, String URL)`
|
|
||||||
- `boolean success = sendDirectMessage(String recipientID, String text)`
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
```java
|
|
||||||
val tweetActions = getActions("twitter","twitter:account:sampleaccount")
|
|
||||||
val success = tweetActions.sendTweet("This is A Tweet")
|
|
||||||
val success2 = tweetActions.sendTweetWithAttachment("This is A Tweet with a Pic", file:///tmp/201601011031.jpg)
|
|
||||||
val success3 = tweetActions.sendTweetWithAttachment("Windows Picture", "D:\\Test.png" )
|
|
||||||
val success4 = tweetActions.sendTweetWithAttachment("HTTP Picture", "http://www.mywebsite.com/Test.png" )
|
|
||||||
val success5 = tweetActions.sendDirectMessage("1234567", "Wake Up" )
|
|
||||||
|
|
||||||
```
|
|
|
@ -1,32 +0,0 @@
|
||||||
# add-on
|
|
||||||
|
|
||||||
addon.twitter.name = Twitter Binding
|
|
||||||
addon.twitter.description = Supports adding Thing for getting the Last Tweet. Send Tweets and Pictures with Actions.
|
|
||||||
|
|
||||||
# thing types
|
|
||||||
|
|
||||||
thing-type.twitter.account.label = Twitter Account
|
|
||||||
thing-type.twitter.account.description = Account uses for sending Tweets
|
|
||||||
|
|
||||||
# thing types config
|
|
||||||
|
|
||||||
thing-type.config.twitter.account.accessToken.label = Access Token
|
|
||||||
thing-type.config.twitter.account.accessTokenSecret.label = Access Token Secret
|
|
||||||
thing-type.config.twitter.account.consumerKey.label = Consumer API Key
|
|
||||||
thing-type.config.twitter.account.consumerSecret.label = Consumer API Secret
|
|
||||||
thing-type.config.twitter.account.refresh.label = Refresh Time
|
|
||||||
thing-type.config.twitter.account.refresh.description = Refresh Time for This Account in Mins
|
|
||||||
|
|
||||||
# channel types
|
|
||||||
|
|
||||||
channel-type.twitter.lasttweet.label = Last Tweet
|
|
||||||
channel-type.twitter.lasttweet.description = Users Last Tweet
|
|
||||||
|
|
||||||
# actions
|
|
||||||
|
|
||||||
sendAttachmentTweetActionLabel = send a Tweet with attachment
|
|
||||||
sendAttachmentTweetActionDescription = Sends a Tweet with an attachment.
|
|
||||||
sendDirectMessageActionLabel = send a DirectMessage
|
|
||||||
sendDirectMessageActionDescription = Sends a DirectMessage.
|
|
||||||
sendTweetActionLabel = send a Tweet
|
|
||||||
sendTweetActionDescription = Sends a Tweet.
|
|
|
@ -1,32 +0,0 @@
|
||||||
# add-on
|
|
||||||
|
|
||||||
addon.twitter.name = Extension Twitter
|
|
||||||
addon.twitter.description = Cette extension permet d'obtenir le dernier Tweet ou d'envoyer des Tweets et des images depuis vos règles d'automatisation.
|
|
||||||
|
|
||||||
# thing types
|
|
||||||
|
|
||||||
thing-type.twitter.account.label = Compte Twitter
|
|
||||||
thing-type.twitter.account.description = Compte pour envoyer des Tweets
|
|
||||||
|
|
||||||
# thing types config
|
|
||||||
|
|
||||||
thing-type.config.twitter.account.accessToken.label = Jeton d'authentification
|
|
||||||
thing-type.config.twitter.account.accessTokenSecret.label = Code secret du jeton d'authentification
|
|
||||||
thing-type.config.twitter.account.consumerKey.label = Clé d'accès à l'API
|
|
||||||
thing-type.config.twitter.account.consumerSecret.label = Code secret pour l'accès à l'API
|
|
||||||
thing-type.config.twitter.account.refresh.label = Fréquence de rafraîchissement
|
|
||||||
thing-type.config.twitter.account.refresh.description = Fréquence de rafraîchissement de ce compte en minutes
|
|
||||||
|
|
||||||
# channel types
|
|
||||||
|
|
||||||
channel-type.twitter.lasttweet.label = Dernier Tweet
|
|
||||||
channel-type.twitter.lasttweet.description = Dernier Tweet des utilisateurs
|
|
||||||
|
|
||||||
# actions
|
|
||||||
|
|
||||||
sendAttachmentTweetActionLabel = envoyer un Tweet avec pièce jointe
|
|
||||||
sendAttachmentTweetActionDescription = Envoie un Tweet avec pièce jointe.
|
|
||||||
sendDirectMessageActionLabel = envoyer un message privé
|
|
||||||
sendDirectMessageActionDescription = Envoie un message privé.
|
|
||||||
sendTweetActionLabel = envoyer un Tweet
|
|
||||||
sendTweetActionDescription = Envoie un Tweet.
|
|
|
@ -1,9 +0,0 @@
|
||||||
# actions
|
|
||||||
sendTweetActionLabel = отправить твит
|
|
||||||
sendTweetActionDescription = Отправляет твит.
|
|
||||||
|
|
||||||
sendAttachmentTweetActionLabel = отправить твит с вложением
|
|
||||||
sendAttachmentTweetActionDescription = Отправляет твит с вложением.
|
|
||||||
|
|
||||||
sendDirectMessageActionLabel = отправить личное сообщение
|
|
||||||
sendDirectMessageActionDescription = Отправляет личное сообщение.
|
|
|
@ -0,0 +1,60 @@
|
||||||
|
# X Binding
|
||||||
|
|
||||||
|
The X (formerly known as Twitter) binding allows your home to post 280 characters at a time. It also supports direct messages and posting with media.
|
||||||
|
|
||||||
|
## Supported Things
|
||||||
|
|
||||||
|
```text
|
||||||
|
account - X Account.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Thing Configuration
|
||||||
|
|
||||||
|
The X Account Thing requires you to create a X App in the X Developer Page.
|
||||||
|
|
||||||
|
| Property | Default | Required | Description |
|
||||||
|
|-------------------|---------|:--------:|-----------------------------------|
|
||||||
|
| consumerKey | | Yes | Consumer API Key |
|
||||||
|
| consumerSecret | | Yes | Consumer API Secret |
|
||||||
|
| accessToken | | Yes | Access Token |
|
||||||
|
| accessTokenSecret | | Yes | Access Token Secret |
|
||||||
|
| refresh | 30 | No | Post refresh interval in minutes |
|
||||||
|
|
||||||
|
## Channels
|
||||||
|
|
||||||
|
| channel | type | description |
|
||||||
|
|----------|--------|-----------------------------------------------|
|
||||||
|
| lastpost | String | This channel provides the Latest post message |
|
||||||
|
|
||||||
|
## Full Example
|
||||||
|
|
||||||
|
x.things:
|
||||||
|
|
||||||
|
```java
|
||||||
|
Thing x:account:sampleaccount [ consumerKey="11111", consumerSecret="22222", accessToken="33333", accessTokenSecret="444444" ]
|
||||||
|
```
|
||||||
|
|
||||||
|
x.items:
|
||||||
|
|
||||||
|
```java
|
||||||
|
String sample_post "Latest post: [%s]" { channel="x:account:sampleaccount:lastpost" }
|
||||||
|
```
|
||||||
|
|
||||||
|
## Rule Action
|
||||||
|
|
||||||
|
This binding includes rule actions for sending posts and direct messages.
|
||||||
|
|
||||||
|
- `boolean success = sendPost(String text)`
|
||||||
|
- `boolean success = sendPostWithAttachment(String text, String URL)`
|
||||||
|
- `boolean success = sendDirectMessage(String recipientID, String text)`
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
```java
|
||||||
|
val postActions = getActions("x","x:account:sampleaccount")
|
||||||
|
val success = postActions.sendPost("This is A Post")
|
||||||
|
val success2 = postActions.sendPostWithAttachment("This is A Post with a Pic", file:///tmp/201601011031.jpg)
|
||||||
|
val success3 = postActions.sendPostWithAttachment("Windows Picture", "D:\\Test.png" )
|
||||||
|
val success4 = postActions.sendPostWithAttachment("HTTP Picture", "http://www.mywebsite.com/Test.png" )
|
||||||
|
val success5 = postActions.sendDirectMessage("1234567", "Wake Up" )
|
||||||
|
```
|
|
@ -10,19 +10,19 @@
|
||||||
<version>4.1.0-SNAPSHOT</version>
|
<version>4.1.0-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>org.openhab.binding.twitter</artifactId>
|
<artifactId>org.openhab.binding.x</artifactId>
|
||||||
|
|
||||||
<name>openHAB Add-ons :: Bundles :: Twitter Binding</name>
|
<name>openHAB Add-ons :: Bundles :: X Binding</name>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<bnd.importpackage>!android.*,!com.android.org.*,!dalvik.*,!javax.annotation.meta.*,!org.apache.harmony.*,!org.conscrypt.*,!sun.*,!com.google.appengine.api.*</bnd.importpackage>
|
<bnd.importpackage>!org.slf4j.impl.*,!android.*,!com.android.org.*,!dalvik.*,!javax.annotation.meta.*,!org.apache.harmony.*,!org.conscrypt.*,!sun.*,!com.google.appengine.api.*</bnd.importpackage>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.twitter4j</groupId>
|
<groupId>org.twitter4j</groupId>
|
||||||
<artifactId>twitter4j-core</artifactId>
|
<artifactId>twitter4j-core</artifactId>
|
||||||
<version>4.0.7</version>
|
<version>4.1.2</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
|
@ -1,9 +1,9 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<features name="org.openhab.binding.twitter-${project.version}" xmlns="http://karaf.apache.org/xmlns/features/v1.4.0">
|
<features name="org.openhab.binding.x-${project.version}" xmlns="http://karaf.apache.org/xmlns/features/v1.4.0">
|
||||||
<repository>mvn:org.openhab.core.features.karaf/org.openhab.core.features.karaf.openhab-core/${ohc.version}/xml/features</repository>
|
<repository>mvn:org.openhab.core.features.karaf/org.openhab.core.features.karaf.openhab-core/${ohc.version}/xml/features</repository>
|
||||||
|
|
||||||
<feature name="openhab-binding-twitter" description="Twitter Binding" version="${project.version}">
|
<feature name="openhab-binding-x" description="X Binding" version="${project.version}">
|
||||||
<feature>openhab-runtime-base</feature>
|
<feature>openhab-runtime-base</feature>
|
||||||
<bundle start-level="80">mvn:org.openhab.addons.bundles/org.openhab.binding.twitter/${project.version}</bundle>
|
<bundle start-level="80">mvn:org.openhab.addons.bundles/org.openhab.binding.x/${project.version}</bundle>
|
||||||
</feature>
|
</feature>
|
||||||
</features>
|
</features>
|
|
@ -10,25 +10,25 @@
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: EPL-2.0
|
* SPDX-License-Identifier: EPL-2.0
|
||||||
*/
|
*/
|
||||||
package org.openhab.binding.twitter.internal;
|
package org.openhab.binding.x.internal;
|
||||||
|
|
||||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||||
import org.openhab.core.thing.ThingTypeUID;
|
import org.openhab.core.thing.ThingTypeUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The {@link TwitterBindingConstants} class defines common constants, which are
|
* The {@link XBindingConstants} class defines common constants, which are
|
||||||
* used across the whole binding.
|
* used across the whole binding.
|
||||||
*
|
*
|
||||||
* @author Scott Hanson - Initial contribution
|
* @author Scott Hanson - Initial contribution
|
||||||
*/
|
*/
|
||||||
@NonNullByDefault
|
@NonNullByDefault
|
||||||
public class TwitterBindingConstants {
|
public class XBindingConstants {
|
||||||
|
|
||||||
private static final String BINDING_ID = "twitter";
|
private static final String BINDING_ID = "x";
|
||||||
|
|
||||||
// List of all Thing Type UIDs
|
// List of all Thing Type UIDs
|
||||||
public static final ThingTypeUID THING_TYPE_ACCOUNT = new ThingTypeUID(BINDING_ID, "account");
|
public static final ThingTypeUID THING_TYPE_ACCOUNT = new ThingTypeUID(BINDING_ID, "account");
|
||||||
|
|
||||||
// List of all Channel ids
|
// List of all Channel ids
|
||||||
public static final String CHANNEL_LASTTWEET = "lasttweet";
|
public static final String CHANNEL_LASTPOST = "lastpost";
|
||||||
}
|
}
|
|
@ -10,9 +10,9 @@
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: EPL-2.0
|
* SPDX-License-Identifier: EPL-2.0
|
||||||
*/
|
*/
|
||||||
package org.openhab.binding.twitter.internal;
|
package org.openhab.binding.x.internal;
|
||||||
|
|
||||||
import static org.openhab.binding.twitter.internal.TwitterBindingConstants.CHANNEL_LASTTWEET;
|
import static org.openhab.binding.x.internal.XBindingConstants.CHANNEL_LASTPOST;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
|
@ -27,8 +27,8 @@ import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||||
import org.eclipse.jdt.annotation.Nullable;
|
import org.eclipse.jdt.annotation.Nullable;
|
||||||
import org.openhab.binding.twitter.internal.action.TwitterActions;
|
import org.openhab.binding.x.internal.action.XActions;
|
||||||
import org.openhab.binding.twitter.internal.config.TwitterConfig;
|
import org.openhab.binding.x.internal.config.XConfig;
|
||||||
import org.openhab.core.io.net.http.HttpUtil;
|
import org.openhab.core.io.net.http.HttpUtil;
|
||||||
import org.openhab.core.library.types.RawType;
|
import org.openhab.core.library.types.RawType;
|
||||||
import org.openhab.core.library.types.StringType;
|
import org.openhab.core.library.types.StringType;
|
||||||
|
@ -41,28 +41,26 @@ import org.openhab.core.types.Command;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import twitter4j.DirectMessage;
|
|
||||||
import twitter4j.ResponseList;
|
|
||||||
import twitter4j.Status;
|
|
||||||
import twitter4j.StatusUpdate;
|
|
||||||
import twitter4j.Twitter;
|
import twitter4j.Twitter;
|
||||||
import twitter4j.TwitterException;
|
import twitter4j.TwitterException;
|
||||||
import twitter4j.TwitterFactory;
|
import twitter4j.v1.DirectMessage;
|
||||||
import twitter4j.auth.AccessToken;
|
import twitter4j.v1.ResponseList;
|
||||||
|
import twitter4j.v1.Status;
|
||||||
|
import twitter4j.v1.StatusUpdate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The {@link TwitterHandler} is responsible for handling commands, which are
|
* The {@link XHandler} is responsible for handling commands, which are
|
||||||
* sent to one of the channels.
|
* sent to one of the channels.
|
||||||
*
|
*
|
||||||
* @author Scott Hanson - Initial contribution
|
* @author Scott Hanson - Initial contribution
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@NonNullByDefault
|
@NonNullByDefault
|
||||||
public class TwitterHandler extends BaseThingHandler {
|
public class XHandler extends BaseThingHandler {
|
||||||
|
|
||||||
private final Logger logger = LoggerFactory.getLogger(TwitterHandler.class);
|
private final Logger logger = LoggerFactory.getLogger(XHandler.class);
|
||||||
|
|
||||||
private TwitterConfig config = new TwitterConfig();
|
private XConfig config = new XConfig();
|
||||||
|
|
||||||
private @Nullable ScheduledFuture<?> refreshTask;
|
private @Nullable ScheduledFuture<?> refreshTask;
|
||||||
|
|
||||||
|
@ -71,7 +69,7 @@ public class TwitterHandler extends BaseThingHandler {
|
||||||
private static @Nullable Twitter client = null;
|
private static @Nullable Twitter client = null;
|
||||||
boolean isProperlyConfigured = false;
|
boolean isProperlyConfigured = false;
|
||||||
|
|
||||||
public TwitterHandler(Thing thing) {
|
public XHandler(Thing thing) {
|
||||||
super(thing);
|
super(thing);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -82,14 +80,14 @@ public class TwitterHandler extends BaseThingHandler {
|
||||||
// creates list of available Actions
|
// creates list of available Actions
|
||||||
@Override
|
@Override
|
||||||
public Collection<Class<? extends ThingHandlerService>> getServices() {
|
public Collection<Class<? extends ThingHandlerService>> getServices() {
|
||||||
return List.of(TwitterActions.class);
|
return List.of(XActions.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize() {
|
public void initialize() {
|
||||||
config = getConfigAs(TwitterConfig.class);
|
config = getConfigAs(XConfig.class);
|
||||||
|
|
||||||
// create a New Twitter Client
|
// create a New X/Twitter Client
|
||||||
Twitter localClient = createClient();
|
Twitter localClient = createClient();
|
||||||
client = localClient;
|
client = localClient;
|
||||||
refresh();// Get latest status
|
refresh();// Get latest status
|
||||||
|
@ -107,7 +105,7 @@ public class TwitterHandler extends BaseThingHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Internal method for Getting Twitter Status
|
* Internal method for Getting X Status
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private void refresh() {
|
private void refresh() {
|
||||||
|
@ -117,83 +115,83 @@ public class TwitterHandler extends BaseThingHandler {
|
||||||
}
|
}
|
||||||
Twitter localClient = client;
|
Twitter localClient = client;
|
||||||
if (localClient != null) {
|
if (localClient != null) {
|
||||||
ResponseList<Status> statuses = localClient.getUserTimeline();
|
ResponseList<Status> statuses = localClient.v1().timelines().getUserTimeline();
|
||||||
if (!statuses.isEmpty()) {
|
if (!statuses.isEmpty()) {
|
||||||
updateState(CHANNEL_LASTTWEET, StringType.valueOf(statuses.get(0).getText()));
|
updateState(CHANNEL_LASTPOST, StringType.valueOf(statuses.get(0).getText()));
|
||||||
} else {
|
} else {
|
||||||
logger.debug("No Statuses Found");
|
logger.debug("No Statuses Found");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (TwitterException e) {
|
} catch (TwitterException e) {
|
||||||
logger.debug("Error when trying to refresh Twitter Account: {}", e.getMessage());
|
logger.debug("Error when trying to refresh X Account: {}", e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Internal method for sending a tweet, with or without image
|
* Internal method for sending a post, with or without image
|
||||||
*
|
*
|
||||||
* @param tweetTxt
|
* @param postTxt
|
||||||
* text string to be sent as a Tweet
|
* text string to be sent as a Post
|
||||||
* @param fileToAttach
|
* @param fileToAttach
|
||||||
* the file to attach. May be null if no attached file.
|
* the file to attach. May be null if no attached file.
|
||||||
*
|
*
|
||||||
* @return <code>true</code>, if sending the tweet has been successful and
|
* @return <code>true</code>, if sending the post has been successful and
|
||||||
* <code>false</code> in all other cases.
|
* <code>false</code> in all other cases.
|
||||||
*/
|
*/
|
||||||
private boolean sendTweet(final String tweetTxt, final @Nullable File fileToAttach) {
|
private boolean sendPost(final String postTxt, final @Nullable File fileToAttach) {
|
||||||
if (!checkPrerequisites()) {
|
if (!checkPrerequisites()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// abbreviate the Tweet to meet the 280 character limit ...
|
// abbreviate the Post to meet the 280 character limit ...
|
||||||
String abbreviatedTweetTxt = abbreviateString(tweetTxt, CHARACTER_LIMIT);
|
String abbreviatedPostTxt = abbreviateString(postTxt, CHARACTER_LIMIT);
|
||||||
try {
|
try {
|
||||||
Twitter localClient = client;
|
Twitter localClient = client;
|
||||||
if (localClient != null) {
|
if (localClient != null) {
|
||||||
// send the Tweet
|
// send the Post
|
||||||
StatusUpdate status = new StatusUpdate(abbreviatedTweetTxt);
|
StatusUpdate status = StatusUpdate.of(abbreviatedPostTxt);
|
||||||
if (fileToAttach != null && fileToAttach.isFile()) {
|
if (fileToAttach != null && fileToAttach.isFile()) {
|
||||||
status.setMedia(fileToAttach);
|
status = status.media(fileToAttach);
|
||||||
}
|
}
|
||||||
Status updatedStatus = localClient.updateStatus(status);
|
Status updatedStatus = localClient.v1().tweets().updateStatus(status);
|
||||||
logger.debug("Successfully sent Tweet '{}'", updatedStatus.getText());
|
logger.debug("Successfully sent Post '{}'", updatedStatus.getText());
|
||||||
updateState(CHANNEL_LASTTWEET, StringType.valueOf(updatedStatus.getText()));
|
updateState(CHANNEL_LASTPOST, StringType.valueOf(updatedStatus.getText()));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
} catch (TwitterException e) {
|
} catch (TwitterException e) {
|
||||||
logger.warn("Failed to send Tweet '{}' because of : {}", abbreviatedTweetTxt, e.getLocalizedMessage());
|
logger.warn("Failed to send Post '{}' because of : {}", abbreviatedPostTxt, e.getLocalizedMessage());
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sends a standard Tweet.
|
* Sends a standard Post.
|
||||||
*
|
*
|
||||||
* @param tweetTxt
|
* @param postTxt
|
||||||
* text string to be sent as a Tweet
|
* text string to be sent as a Post
|
||||||
*
|
*
|
||||||
* @return <code>true</code>, if sending the tweet has been successful and
|
* @return <code>true</code>, if sending the post has been successful and
|
||||||
* <code>false</code> in all other cases.
|
* <code>false</code> in all other cases.
|
||||||
*/
|
*/
|
||||||
public boolean sendTweet(String tweetTxt) {
|
public boolean sendPost(String postTxt) {
|
||||||
if (!checkPrerequisites()) {
|
if (!checkPrerequisites()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return sendTweet(tweetTxt, (File) null);
|
return sendPost(postTxt, (File) null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sends a Tweet with an image
|
* Sends a Post with an image
|
||||||
*
|
*
|
||||||
* @param tweetTxt
|
* @param postTxt
|
||||||
* text string to be sent as a Tweet
|
* text string to be sent as a Post
|
||||||
* @param tweetPicture
|
* @param postPicture
|
||||||
* the path of the picture that needs to be attached (either an url,
|
* the path of the picture that needs to be attached (either an url,
|
||||||
* either a path pointing to a local file)
|
* either a path pointing to a local file)
|
||||||
*
|
*
|
||||||
* @return <code>true</code>, if sending the tweet has been successful and
|
* @return <code>true</code>, if sending the post has been successful and
|
||||||
* <code>false</code> in all other cases.
|
* <code>false</code> in all other cases.
|
||||||
*/
|
*/
|
||||||
public boolean sendTweet(String tweetTxt, String tweetPicture) {
|
public boolean sendPost(String postTxt, String postPicture) {
|
||||||
if (!checkPrerequisites()) {
|
if (!checkPrerequisites()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -201,18 +199,18 @@ public class TwitterHandler extends BaseThingHandler {
|
||||||
// prepare the image attachment
|
// prepare the image attachment
|
||||||
File fileToAttach = null;
|
File fileToAttach = null;
|
||||||
boolean deleteTemporaryFile = false;
|
boolean deleteTemporaryFile = false;
|
||||||
if (tweetPicture.startsWith("http://") || tweetPicture.startsWith("https://")) {
|
if (postPicture.startsWith("http://") || postPicture.startsWith("https://")) {
|
||||||
try {
|
try {
|
||||||
// we have a remote url and need to download the remote file to a temporary location
|
// we have a remote url and need to download the remote file to a temporary location
|
||||||
Path tDir = Files.createTempDirectory("TempDirectory");
|
Path tDir = Files.createTempDirectory("TempDirectory");
|
||||||
String path = tDir + File.separator + "openhab-twitter-remote_attached_file" + "."
|
String path = tDir + File.separator + "openhab-x-remote_attached_file" + "."
|
||||||
+ getExtension(tweetPicture);
|
+ getExtension(postPicture);
|
||||||
|
|
||||||
// URL url = new URL(tweetPicture);
|
// URL url = new URL(postPicture);
|
||||||
fileToAttach = new File(path);
|
fileToAttach = new File(path);
|
||||||
deleteTemporaryFile = true;
|
deleteTemporaryFile = true;
|
||||||
|
|
||||||
RawType rawPicture = HttpUtil.downloadImage(tweetPicture);
|
RawType rawPicture = HttpUtil.downloadImage(postPicture);
|
||||||
if (rawPicture != null) {
|
if (rawPicture != null) {
|
||||||
try (FileOutputStream fos = new FileOutputStream(path)) {
|
try (FileOutputStream fos = new FileOutputStream(path)) {
|
||||||
fos.write(rawPicture.getBytes(), 0, rawPicture.getBytes().length);
|
fos.write(rawPicture.getBytes(), 0, rawPicture.getBytes().length);
|
||||||
|
@ -222,24 +220,24 @@ public class TwitterHandler extends BaseThingHandler {
|
||||||
logger.debug("Could not write {} to temp dir. {}", path, ex.getMessage());
|
logger.debug("Could not write {} to temp dir. {}", path, ex.getMessage());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
logger.debug("Could not download tweet file from {}", tweetPicture);
|
logger.debug("Could not download post file from {}", postPicture);
|
||||||
}
|
}
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
logger.debug("Could not write {} to temp dir. {}", tweetPicture, ex.getMessage());
|
logger.debug("Could not write {} to temp dir. {}", postPicture, ex.getMessage());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// we have a local file and can just use it directly
|
// we have a local file and can just use it directly
|
||||||
fileToAttach = new File(tweetPicture);
|
fileToAttach = new File(postPicture);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fileToAttach != null && fileToAttach.isFile()) {
|
if (fileToAttach != null && fileToAttach.isFile()) {
|
||||||
logger.debug("Image '{}' correctly found, will be included in tweet", tweetPicture);
|
logger.debug("Image '{}' correctly found, will be included in post", postPicture);
|
||||||
} else {
|
} else {
|
||||||
logger.warn("Image '{}' not found, will only tweet text", tweetPicture);
|
logger.warn("Image '{}' not found, will only post text", postPicture);
|
||||||
}
|
}
|
||||||
|
|
||||||
// send the Tweet
|
// send the Post
|
||||||
boolean result = sendTweet(tweetTxt, fileToAttach);
|
boolean result = sendPost(postTxt, fileToAttach);
|
||||||
// delete temp file (if needed)
|
// delete temp file (if needed)
|
||||||
if (deleteTemporaryFile) {
|
if (deleteTemporaryFile) {
|
||||||
if (fileToAttach != null) {
|
if (fileToAttach != null) {
|
||||||
|
@ -272,10 +270,11 @@ public class TwitterHandler extends BaseThingHandler {
|
||||||
try {
|
try {
|
||||||
Twitter localClient = client;
|
Twitter localClient = client;
|
||||||
if (localClient != null) {
|
if (localClient != null) {
|
||||||
// abbreviate the Tweet to meet the allowed character limit ...
|
// abbreviate the Post to meet the allowed character limit ...
|
||||||
String abbreviatedMessageTxt = abbreviateString(messageTxt, CHARACTER_LIMIT);
|
String abbreviatedMessageTxt = abbreviateString(messageTxt, CHARACTER_LIMIT);
|
||||||
// send the direct message
|
// send the direct message
|
||||||
DirectMessage message = localClient.sendDirectMessage(recipientId, abbreviatedMessageTxt);
|
DirectMessage message = localClient.v1().directMessages().sendDirectMessage(recipientId,
|
||||||
|
abbreviatedMessageTxt);
|
||||||
logger.debug("Successfully sent direct message '{}' to @'{}'", message.getText(),
|
logger.debug("Successfully sent direct message '{}' to @'{}'", message.getText(),
|
||||||
message.getRecipientId());
|
message.getRecipientId());
|
||||||
return true;
|
return true;
|
||||||
|
@ -287,18 +286,18 @@ public class TwitterHandler extends BaseThingHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* check if twitter account was created with prerequisites
|
* check if X account was created with prerequisites
|
||||||
*
|
*
|
||||||
* @return <code>true</code>, if twitter account was initialized
|
* @return <code>true</code>, if X account was initialized
|
||||||
* <code>false</code> in all other cases.
|
* <code>false</code> in all other cases.
|
||||||
*/
|
*/
|
||||||
private boolean checkPrerequisites() {
|
private boolean checkPrerequisites() {
|
||||||
if (client == null) {
|
if (client == null) {
|
||||||
logger.debug("Twitter client is not yet configured > execution aborted!");
|
logger.debug("X client is not yet configured > execution aborted!");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!isProperlyConfigured) {
|
if (!isProperlyConfigured) {
|
||||||
logger.debug("Twitter client is not yet configured > execution aborted!");
|
logger.debug("X client is not yet configured > execution aborted!");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -310,9 +309,9 @@ public class TwitterHandler extends BaseThingHandler {
|
||||||
* @return a new instance of a Twitter4J Twitter client.
|
* @return a new instance of a Twitter4J Twitter client.
|
||||||
*/
|
*/
|
||||||
private twitter4j.Twitter createClient() {
|
private twitter4j.Twitter createClient() {
|
||||||
twitter4j.Twitter client = TwitterFactory.getSingleton();
|
Twitter client = Twitter.newBuilder().oAuthConsumer(config.consumerKey, config.consumerSecret)
|
||||||
client.setOAuthConsumer(config.consumerKey, config.consumerSecret);
|
.oAuthAccessToken(config.accessToken, config.accessTokenSecret).build();
|
||||||
client.setOAuthAccessToken(new AccessToken(config.accessToken, config.accessTokenSecret));
|
|
||||||
return client;
|
return client;
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,9 +10,9 @@
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: EPL-2.0
|
* SPDX-License-Identifier: EPL-2.0
|
||||||
*/
|
*/
|
||||||
package org.openhab.binding.twitter.internal;
|
package org.openhab.binding.x.internal;
|
||||||
|
|
||||||
import static org.openhab.binding.twitter.internal.TwitterBindingConstants.THING_TYPE_ACCOUNT;
|
import static org.openhab.binding.x.internal.XBindingConstants.THING_TYPE_ACCOUNT;
|
||||||
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
@ -26,14 +26,14 @@ import org.openhab.core.thing.binding.ThingHandlerFactory;
|
||||||
import org.osgi.service.component.annotations.Component;
|
import org.osgi.service.component.annotations.Component;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The {@link TwitterHandlerFactory} is responsible for creating things and thing
|
* The {@link XHandlerFactory} is responsible for creating things and thing
|
||||||
* handlers.
|
* handlers.
|
||||||
*
|
*
|
||||||
* @author Scott Hanson - Initial contribution
|
* @author Scott Hanson - Initial contribution
|
||||||
*/
|
*/
|
||||||
@NonNullByDefault
|
@NonNullByDefault
|
||||||
@Component(configurationPid = "binding.twitter", service = ThingHandlerFactory.class)
|
@Component(configurationPid = "binding.x", service = ThingHandlerFactory.class)
|
||||||
public class TwitterHandlerFactory extends BaseThingHandlerFactory {
|
public class XHandlerFactory extends BaseThingHandlerFactory {
|
||||||
|
|
||||||
private static final Set<ThingTypeUID> SUPPORTED_THING_TYPES_UIDS = Set.of(THING_TYPE_ACCOUNT);
|
private static final Set<ThingTypeUID> SUPPORTED_THING_TYPES_UIDS = Set.of(THING_TYPE_ACCOUNT);
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ public class TwitterHandlerFactory extends BaseThingHandlerFactory {
|
||||||
ThingTypeUID thingTypeUID = thing.getThingTypeUID();
|
ThingTypeUID thingTypeUID = thing.getThingTypeUID();
|
||||||
|
|
||||||
if (THING_TYPE_ACCOUNT.equals(thingTypeUID)) {
|
if (THING_TYPE_ACCOUNT.equals(thingTypeUID)) {
|
||||||
return new TwitterHandler(thing);
|
return new XHandler(thing);
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
|
@ -10,11 +10,11 @@
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: EPL-2.0
|
* SPDX-License-Identifier: EPL-2.0
|
||||||
*/
|
*/
|
||||||
package org.openhab.binding.twitter.internal.action;
|
package org.openhab.binding.x.internal.action;
|
||||||
|
|
||||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||||
import org.eclipse.jdt.annotation.Nullable;
|
import org.eclipse.jdt.annotation.Nullable;
|
||||||
import org.openhab.binding.twitter.internal.TwitterHandler;
|
import org.openhab.binding.x.internal.XHandler;
|
||||||
import org.openhab.core.automation.annotation.ActionInput;
|
import org.openhab.core.automation.annotation.ActionInput;
|
||||||
import org.openhab.core.automation.annotation.ActionOutput;
|
import org.openhab.core.automation.annotation.ActionOutput;
|
||||||
import org.openhab.core.automation.annotation.RuleAction;
|
import org.openhab.core.automation.annotation.RuleAction;
|
||||||
|
@ -25,53 +25,53 @@ import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The {@link TwitterActions} class defines rule actions for sending tweet
|
* The {@link XActions} class defines rule actions for sending post
|
||||||
*
|
*
|
||||||
* @author Scott Hanson - Initial contribution
|
* @author Scott Hanson - Initial contribution
|
||||||
*/
|
*/
|
||||||
@ThingActionsScope(name = "twitter")
|
@ThingActionsScope(name = "x")
|
||||||
@NonNullByDefault
|
@NonNullByDefault
|
||||||
public class TwitterActions implements ThingActions {
|
public class XActions implements ThingActions {
|
||||||
|
|
||||||
private final Logger logger = LoggerFactory.getLogger(TwitterActions.class);
|
private final Logger logger = LoggerFactory.getLogger(XActions.class);
|
||||||
|
|
||||||
private @Nullable TwitterHandler handler;
|
private @Nullable XHandler handler;
|
||||||
|
|
||||||
@RuleAction(label = "@text/sendTweetActionLabel", description = "@text/sendTweetActionDescription")
|
@RuleAction(label = "@text/sendPostActionLabel", description = "@text/sendPostActionDescription")
|
||||||
public @ActionOutput(name = "success", type = "java.lang.Boolean") Boolean sendTweet(
|
public @ActionOutput(name = "success", type = "java.lang.Boolean") Boolean sendPost(
|
||||||
@ActionInput(name = "text") @Nullable String text) {
|
@ActionInput(name = "text") @Nullable String text) {
|
||||||
if (text == null) {
|
if (text == null) {
|
||||||
logger.warn("Cannot send Tweet as text is missing.");
|
logger.warn("Cannot send Post as text is missing.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
final TwitterHandler handler = this.handler;
|
final XHandler handler = this.handler;
|
||||||
if (handler == null) {
|
if (handler == null) {
|
||||||
logger.debug("Handler is null, cannot tweet.");
|
logger.debug("Handler is null, cannot post.");
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
return handler.sendTweet(text);
|
return handler.sendPost(text);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@RuleAction(label = "@text/sendAttachmentTweetActionLabel", description = "@text/sendAttachmentTweetActionDescription")
|
@RuleAction(label = "@text/sendAttachmentPostActionLabel", description = "@text/sendAttachmentPostActionDescription")
|
||||||
public @ActionOutput(name = "success", type = "java.lang.Boolean") Boolean sendTweetWithAttachment(
|
public @ActionOutput(name = "success", type = "java.lang.Boolean") Boolean sendPostWithAttachment(
|
||||||
@ActionInput(name = "text") @Nullable String text, @ActionInput(name = "url") @Nullable String urlString) {
|
@ActionInput(name = "text") @Nullable String text, @ActionInput(name = "url") @Nullable String urlString) {
|
||||||
if (text == null) {
|
if (text == null) {
|
||||||
logger.warn("Cannot send Tweet as text is missing.");
|
logger.warn("Cannot send Post as text is missing.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (urlString == null) {
|
if (urlString == null) {
|
||||||
logger.warn("Cannot send Tweet as urlString is missing.");
|
logger.warn("Cannot send Post as urlString is missing.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
final TwitterHandler handler = this.handler;
|
final XHandler handler = this.handler;
|
||||||
if (handler == null) {
|
if (handler == null) {
|
||||||
logger.debug("Handler is null, cannot tweet.");
|
logger.debug("Handler is null, cannot post.");
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
return handler.sendTweet(text, urlString);
|
return handler.sendPost(text, urlString);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -88,32 +88,32 @@ public class TwitterActions implements ThingActions {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
final TwitterHandler handler = this.handler;
|
final XHandler handler = this.handler;
|
||||||
if (handler == null) {
|
if (handler == null) {
|
||||||
logger.debug("Handler is null, cannot tweet.");
|
logger.debug("Handler is null, cannot post.");
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
return handler.sendDirectMessage(recipient, text);
|
return handler.sendDirectMessage(recipient, text);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean sendTweet(ThingActions actions, @Nullable String text) {
|
public static boolean sendPost(ThingActions actions, @Nullable String text) {
|
||||||
return ((TwitterActions) actions).sendTweet(text);
|
return ((XActions) actions).sendPost(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean sendTweetWithAttachment(ThingActions actions, @Nullable String text,
|
public static boolean sendPostWithAttachment(ThingActions actions, @Nullable String text,
|
||||||
@Nullable String urlString) {
|
@Nullable String urlString) {
|
||||||
return ((TwitterActions) actions).sendTweetWithAttachment(text, urlString);
|
return ((XActions) actions).sendPostWithAttachment(text, urlString);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean sendDirectMessage(ThingActions actions, @Nullable String recipient, @Nullable String text) {
|
public static boolean sendDirectMessage(ThingActions actions, @Nullable String recipient, @Nullable String text) {
|
||||||
return ((TwitterActions) actions).sendDirectMessage(recipient, text);
|
return ((XActions) actions).sendDirectMessage(recipient, text);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setThingHandler(@Nullable ThingHandler handler) {
|
public void setThingHandler(@Nullable ThingHandler handler) {
|
||||||
if (handler instanceof TwitterHandler twitterHandler) {
|
if (handler instanceof XHandler xHandler) {
|
||||||
this.handler = twitterHandler;
|
this.handler = xHandler;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,18 +10,18 @@
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: EPL-2.0
|
* SPDX-License-Identifier: EPL-2.0
|
||||||
*/
|
*/
|
||||||
package org.openhab.binding.twitter.internal.config;
|
package org.openhab.binding.x.internal.config;
|
||||||
|
|
||||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The {@link TwitterConfig} class contains fields mapping thing configuration parameters.
|
* The {@link XConfig} class contains fields mapping thing configuration parameters.
|
||||||
*
|
*
|
||||||
* @author Scott Hanson - Initial contribution
|
* @author Scott Hanson - Initial contribution
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@NonNullByDefault
|
@NonNullByDefault
|
||||||
public class TwitterConfig {
|
public class XConfig {
|
||||||
public String consumerKey = "";
|
public String consumerKey = "";
|
||||||
public String consumerSecret = "";
|
public String consumerSecret = "";
|
||||||
public String accessToken = "";
|
public String accessToken = "";
|
|
@ -1,11 +1,11 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<addon:addon id="twitter" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<addon:addon id="x" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:addon="https://openhab.org/schemas/addon/v1.0.0"
|
xmlns:addon="https://openhab.org/schemas/addon/v1.0.0"
|
||||||
xsi:schemaLocation="https://openhab.org/schemas/addon/v1.0.0 https://openhab.org/schemas/addon-1.0.0.xsd">
|
xsi:schemaLocation="https://openhab.org/schemas/addon/v1.0.0 https://openhab.org/schemas/addon-1.0.0.xsd">
|
||||||
|
|
||||||
<type>binding</type>
|
<type>binding</type>
|
||||||
<name>Twitter Binding</name>
|
<name>X Binding</name>
|
||||||
<description>Supports adding Thing for getting the Last Tweet. Send Tweets and Pictures with Actions.</description>
|
<description>Supports adding Thing for getting the Last Post. Send Posts and Pictures with Actions.</description>
|
||||||
<connection>cloud</connection>
|
<connection>cloud</connection>
|
||||||
|
|
||||||
</addon:addon>
|
</addon:addon>
|
|
@ -0,0 +1,32 @@
|
||||||
|
# add-on
|
||||||
|
|
||||||
|
addon.x.name = X Binding
|
||||||
|
addon.x.description = Supports adding Thing for getting the Last Post. Send Posts and Pictures with Actions.
|
||||||
|
|
||||||
|
# thing types
|
||||||
|
|
||||||
|
thing-type.x.account.label = X Account
|
||||||
|
thing-type.x.account.description = Account uses for sending posts
|
||||||
|
|
||||||
|
# thing types config
|
||||||
|
|
||||||
|
thing-type.config.x.account.accessToken.label = Access Token
|
||||||
|
thing-type.config.x.account.accessTokenSecret.label = Access Token Secret
|
||||||
|
thing-type.config.x.account.consumerKey.label = Consumer API Key
|
||||||
|
thing-type.config.x.account.consumerSecret.label = Consumer API Secret
|
||||||
|
thing-type.config.x.account.refresh.label = Refresh Time
|
||||||
|
thing-type.config.x.account.refresh.description = Refresh Time for This Account in Mins
|
||||||
|
|
||||||
|
# channel types
|
||||||
|
|
||||||
|
channel-type.x.lastpost.label = Last Post
|
||||||
|
channel-type.x.lastpost.description = Users Last Post
|
||||||
|
|
||||||
|
# actions
|
||||||
|
|
||||||
|
sendAttachmentPostActionLabel = send a Post with attachment
|
||||||
|
sendAttachmentPostActionDescription = Sends a Post with an attachment.
|
||||||
|
sendDirectMessageActionLabel = send a DirectMessage
|
||||||
|
sendDirectMessageActionDescription = Sends a DirectMessage.
|
||||||
|
sendPostActionLabel = send a Post
|
||||||
|
sendPostActionDescription = Sends a Post.
|
|
@ -1,15 +1,14 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<thing:thing-descriptions bindingId="twitter"
|
<thing:thing-descriptions bindingId="x" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
|
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
|
||||||
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
|
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
|
||||||
|
|
||||||
<thing-type id="account">
|
<thing-type id="account">
|
||||||
<label>Twitter Account</label>
|
<label>X Account</label>
|
||||||
<description>Account uses for sending Tweets</description>
|
<description>Account uses for sending posts</description>
|
||||||
|
|
||||||
<channels>
|
<channels>
|
||||||
<channel id="lasttweet" typeId="lasttweet"/>
|
<channel id="lastpost" typeId="lastpost"/>
|
||||||
</channels>
|
</channels>
|
||||||
|
|
||||||
<config-description>
|
<config-description>
|
||||||
|
@ -38,10 +37,10 @@
|
||||||
|
|
||||||
</thing-type>
|
</thing-type>
|
||||||
|
|
||||||
<channel-type id="lasttweet">
|
<channel-type id="lastpost">
|
||||||
<item-type>String</item-type>
|
<item-type>String</item-type>
|
||||||
<label>Last Tweet</label>
|
<label>Last Post</label>
|
||||||
<description>Users Last Tweet</description>
|
<description>Users Last Post</description>
|
||||||
<state readOnly="true"/>
|
<state readOnly="true"/>
|
||||||
</channel-type>
|
</channel-type>
|
||||||
</thing:thing-descriptions>
|
</thing:thing-descriptions>
|
|
@ -387,7 +387,6 @@
|
||||||
<module>org.openhab.binding.tplinksmarthome</module>
|
<module>org.openhab.binding.tplinksmarthome</module>
|
||||||
<module>org.openhab.binding.tr064</module>
|
<module>org.openhab.binding.tr064</module>
|
||||||
<module>org.openhab.binding.tradfri</module>
|
<module>org.openhab.binding.tradfri</module>
|
||||||
<module>org.openhab.binding.twitter</module>
|
|
||||||
<module>org.openhab.binding.unifi</module>
|
<module>org.openhab.binding.unifi</module>
|
||||||
<module>org.openhab.binding.unifiedremote</module>
|
<module>org.openhab.binding.unifiedremote</module>
|
||||||
<module>org.openhab.binding.upnpcontrol</module>
|
<module>org.openhab.binding.upnpcontrol</module>
|
||||||
|
@ -419,6 +418,7 @@
|
||||||
<module>org.openhab.binding.wled</module>
|
<module>org.openhab.binding.wled</module>
|
||||||
<module>org.openhab.binding.wolfsmartset</module>
|
<module>org.openhab.binding.wolfsmartset</module>
|
||||||
<module>org.openhab.binding.wundergroundupdatereceiver</module>
|
<module>org.openhab.binding.wundergroundupdatereceiver</module>
|
||||||
|
<module>org.openhab.binding.x</module>
|
||||||
<module>org.openhab.binding.xmltv</module>
|
<module>org.openhab.binding.xmltv</module>
|
||||||
<module>org.openhab.binding.xmppclient</module>
|
<module>org.openhab.binding.xmppclient</module>
|
||||||
<module>org.openhab.binding.yamahamusiccast</module>
|
<module>org.openhab.binding.yamahamusiccast</module>
|
||||||
|
|
Loading…
Reference in New Issue