diff --git a/CODEOWNERS b/CODEOWNERS index 6d8ddc9c790ab..4b4e4a859c790 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -355,7 +355,6 @@ /bundles/org.openhab.binding.tplinksmarthome/ @Hilbrand /bundles/org.openhab.binding.tr064/ @J-N-K /bundles/org.openhab.binding.tradfri/ @cweitkamp @kaikreuzer -/bundles/org.openhab.binding.twitter/ @computergeek1507 /bundles/org.openhab.binding.unifi/ @mgbowman @Hilbrand /bundles/org.openhab.binding.unifiedremote/ @GiviMAD /bundles/org.openhab.binding.upb/ @marcusb @@ -386,6 +385,7 @@ /bundles/org.openhab.binding.wled/ @Skinah /bundles/org.openhab.binding.wolfsmartset/ @BoBiene /bundles/org.openhab.binding.wundergroundupdatereceiver/ @danieldemus +/bundles/org.openhab.binding.x/ @computergeek1507 /bundles/org.openhab.binding.xmltv/ @clinique /bundles/org.openhab.binding.xmppclient/ @pavel-gololobov /bundles/org.openhab.binding.yamahamusiccast/ @coop-git diff --git a/bom/openhab-addons/pom.xml b/bom/openhab-addons/pom.xml index 9f322e518bc05..bfee3215ad361 100644 --- a/bom/openhab-addons/pom.xml +++ b/bom/openhab-addons/pom.xml @@ -1761,11 +1761,6 @@ org.openhab.binding.tradfri ${project.version} - - org.openhab.addons.bundles - org.openhab.binding.twitter - ${project.version} - org.openhab.addons.bundles org.openhab.binding.unifi @@ -1921,6 +1916,11 @@ org.openhab.binding.wundergroundupdatereceiver ${project.version} + + org.openhab.addons.bundles + org.openhab.binding.x + ${project.version} + org.openhab.addons.bundles org.openhab.binding.xmltv diff --git a/bundles/org.openhab.binding.twitter/README.md b/bundles/org.openhab.binding.twitter/README.md deleted file mode 100644 index b0ed2e6abae62..0000000000000 --- a/bundles/org.openhab.binding.twitter/README.md +++ /dev/null @@ -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" ) - -``` diff --git a/bundles/org.openhab.binding.twitter/src/main/resources/OH-INF/i18n/twitter.properties b/bundles/org.openhab.binding.twitter/src/main/resources/OH-INF/i18n/twitter.properties deleted file mode 100644 index 161cccf2a81be..0000000000000 --- a/bundles/org.openhab.binding.twitter/src/main/resources/OH-INF/i18n/twitter.properties +++ /dev/null @@ -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. diff --git a/bundles/org.openhab.binding.twitter/src/main/resources/OH-INF/i18n/twitter_fr.properties b/bundles/org.openhab.binding.twitter/src/main/resources/OH-INF/i18n/twitter_fr.properties deleted file mode 100644 index 06d82693efbf8..0000000000000 --- a/bundles/org.openhab.binding.twitter/src/main/resources/OH-INF/i18n/twitter_fr.properties +++ /dev/null @@ -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. diff --git a/bundles/org.openhab.binding.twitter/src/main/resources/OH-INF/i18n/twitter_ru.properties b/bundles/org.openhab.binding.twitter/src/main/resources/OH-INF/i18n/twitter_ru.properties deleted file mode 100644 index 6991945830740..0000000000000 --- a/bundles/org.openhab.binding.twitter/src/main/resources/OH-INF/i18n/twitter_ru.properties +++ /dev/null @@ -1,9 +0,0 @@ -# actions -sendTweetActionLabel = отправить твит -sendTweetActionDescription = Отправляет твит. - -sendAttachmentTweetActionLabel = отправить твит с вложением -sendAttachmentTweetActionDescription = Отправляет твит с вложением. - -sendDirectMessageActionLabel = отправить личное сообщение -sendDirectMessageActionDescription = Отправляет личное сообщение. diff --git a/bundles/org.openhab.binding.twitter/NOTICE b/bundles/org.openhab.binding.x/NOTICE similarity index 100% rename from bundles/org.openhab.binding.twitter/NOTICE rename to bundles/org.openhab.binding.x/NOTICE diff --git a/bundles/org.openhab.binding.x/README.md b/bundles/org.openhab.binding.x/README.md new file mode 100644 index 0000000000000..846ee864b1164 --- /dev/null +++ b/bundles/org.openhab.binding.x/README.md @@ -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" ) +``` diff --git a/bundles/org.openhab.binding.twitter/pom.xml b/bundles/org.openhab.binding.x/pom.xml similarity index 67% rename from bundles/org.openhab.binding.twitter/pom.xml rename to bundles/org.openhab.binding.x/pom.xml index 00e42c8b7ff4f..f7020d2f91e9e 100644 --- a/bundles/org.openhab.binding.twitter/pom.xml +++ b/bundles/org.openhab.binding.x/pom.xml @@ -10,19 +10,19 @@ 4.1.0-SNAPSHOT - org.openhab.binding.twitter + org.openhab.binding.x - openHAB Add-ons :: Bundles :: Twitter Binding + openHAB Add-ons :: Bundles :: X Binding - !android.*,!com.android.org.*,!dalvik.*,!javax.annotation.meta.*,!org.apache.harmony.*,!org.conscrypt.*,!sun.*,!com.google.appengine.api.* + !org.slf4j.impl.*,!android.*,!com.android.org.*,!dalvik.*,!javax.annotation.meta.*,!org.apache.harmony.*,!org.conscrypt.*,!sun.*,!com.google.appengine.api.* org.twitter4j twitter4j-core - 4.0.7 + 4.1.2 compile diff --git a/bundles/org.openhab.binding.twitter/src/main/feature/feature.xml b/bundles/org.openhab.binding.x/src/main/feature/feature.xml similarity index 53% rename from bundles/org.openhab.binding.twitter/src/main/feature/feature.xml rename to bundles/org.openhab.binding.x/src/main/feature/feature.xml index 86048f2829fcf..ffb954879f7c5 100644 --- a/bundles/org.openhab.binding.twitter/src/main/feature/feature.xml +++ b/bundles/org.openhab.binding.x/src/main/feature/feature.xml @@ -1,9 +1,9 @@ - + mvn:org.openhab.core.features.karaf/org.openhab.core.features.karaf.openhab-core/${ohc.version}/xml/features - + openhab-runtime-base - mvn:org.openhab.addons.bundles/org.openhab.binding.twitter/${project.version} + mvn:org.openhab.addons.bundles/org.openhab.binding.x/${project.version} diff --git a/bundles/org.openhab.binding.twitter/src/main/java/org/openhab/binding/twitter/internal/TwitterBindingConstants.java b/bundles/org.openhab.binding.x/src/main/java/org/openhab/binding/x/internal/XBindingConstants.java similarity index 72% rename from bundles/org.openhab.binding.twitter/src/main/java/org/openhab/binding/twitter/internal/TwitterBindingConstants.java rename to bundles/org.openhab.binding.x/src/main/java/org/openhab/binding/x/internal/XBindingConstants.java index c42baaeb2ba68..d35f5246b6285 100644 --- a/bundles/org.openhab.binding.twitter/src/main/java/org/openhab/binding/twitter/internal/TwitterBindingConstants.java +++ b/bundles/org.openhab.binding.x/src/main/java/org/openhab/binding/x/internal/XBindingConstants.java @@ -10,25 +10,25 @@ * * 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.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. * * @author Scott Hanson - Initial contribution */ @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 public static final ThingTypeUID THING_TYPE_ACCOUNT = new ThingTypeUID(BINDING_ID, "account"); // List of all Channel ids - public static final String CHANNEL_LASTTWEET = "lasttweet"; + public static final String CHANNEL_LASTPOST = "lastpost"; } diff --git a/bundles/org.openhab.binding.twitter/src/main/java/org/openhab/binding/twitter/internal/TwitterHandler.java b/bundles/org.openhab.binding.x/src/main/java/org/openhab/binding/x/internal/XHandler.java similarity index 64% rename from bundles/org.openhab.binding.twitter/src/main/java/org/openhab/binding/twitter/internal/TwitterHandler.java rename to bundles/org.openhab.binding.x/src/main/java/org/openhab/binding/x/internal/XHandler.java index 8b962d7902e9f..b262840e2e6f9 100644 --- a/bundles/org.openhab.binding.twitter/src/main/java/org/openhab/binding/twitter/internal/TwitterHandler.java +++ b/bundles/org.openhab.binding.x/src/main/java/org/openhab/binding/x/internal/XHandler.java @@ -10,9 +10,9 @@ * * 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.FileNotFoundException; @@ -27,8 +27,8 @@ import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; -import org.openhab.binding.twitter.internal.action.TwitterActions; -import org.openhab.binding.twitter.internal.config.TwitterConfig; +import org.openhab.binding.x.internal.action.XActions; +import org.openhab.binding.x.internal.config.XConfig; import org.openhab.core.io.net.http.HttpUtil; import org.openhab.core.library.types.RawType; import org.openhab.core.library.types.StringType; @@ -41,28 +41,26 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import twitter4j.DirectMessage; -import twitter4j.ResponseList; -import twitter4j.Status; -import twitter4j.StatusUpdate; import twitter4j.Twitter; import twitter4j.TwitterException; -import twitter4j.TwitterFactory; -import twitter4j.auth.AccessToken; +import twitter4j.v1.DirectMessage; +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. * * @author Scott Hanson - Initial contribution */ @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; @@ -71,7 +69,7 @@ public class TwitterHandler extends BaseThingHandler { private static @Nullable Twitter client = null; boolean isProperlyConfigured = false; - public TwitterHandler(Thing thing) { + public XHandler(Thing thing) { super(thing); } @@ -82,14 +80,14 @@ public void handleCommand(ChannelUID channelUID, Command command) { // creates list of available Actions @Override public Collection> getServices() { - return List.of(TwitterActions.class); + return List.of(XActions.class); } @Override 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(); client = localClient; refresh();// Get latest status @@ -107,7 +105,7 @@ public void dispose() { } /** - * Internal method for Getting Twitter Status + * Internal method for Getting X Status * */ private void refresh() { @@ -117,83 +115,83 @@ private void refresh() { } Twitter localClient = client; if (localClient != null) { - ResponseList statuses = localClient.getUserTimeline(); + ResponseList statuses = localClient.v1().timelines().getUserTimeline(); if (!statuses.isEmpty()) { - updateState(CHANNEL_LASTTWEET, StringType.valueOf(statuses.get(0).getText())); + updateState(CHANNEL_LASTPOST, StringType.valueOf(statuses.get(0).getText())); } else { logger.debug("No Statuses Found"); } } } 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 - * text string to be sent as a Tweet + * @param postTxt + * text string to be sent as a Post * @param fileToAttach * the file to attach. May be null if no attached file. * - * @return true, if sending the tweet has been successful and + * @return true, if sending the post has been successful and * false 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()) { return false; } - // abbreviate the Tweet to meet the 280 character limit ... - String abbreviatedTweetTxt = abbreviateString(tweetTxt, CHARACTER_LIMIT); + // abbreviate the Post to meet the 280 character limit ... + String abbreviatedPostTxt = abbreviateString(postTxt, CHARACTER_LIMIT); try { Twitter localClient = client; if (localClient != null) { - // send the Tweet - StatusUpdate status = new StatusUpdate(abbreviatedTweetTxt); + // send the Post + StatusUpdate status = StatusUpdate.of(abbreviatedPostTxt); if (fileToAttach != null && fileToAttach.isFile()) { - status.setMedia(fileToAttach); + status = status.media(fileToAttach); } - Status updatedStatus = localClient.updateStatus(status); - logger.debug("Successfully sent Tweet '{}'", updatedStatus.getText()); - updateState(CHANNEL_LASTTWEET, StringType.valueOf(updatedStatus.getText())); + Status updatedStatus = localClient.v1().tweets().updateStatus(status); + logger.debug("Successfully sent Post '{}'", updatedStatus.getText()); + updateState(CHANNEL_LASTPOST, StringType.valueOf(updatedStatus.getText())); return true; } } 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; } /** - * Sends a standard Tweet. + * Sends a standard Post. * - * @param tweetTxt - * text string to be sent as a Tweet + * @param postTxt + * text string to be sent as a Post * - * @return true, if sending the tweet has been successful and + * @return true, if sending the post has been successful and * false in all other cases. */ - public boolean sendTweet(String tweetTxt) { + public boolean sendPost(String postTxt) { if (!checkPrerequisites()) { 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 - * text string to be sent as a Tweet - * @param tweetPicture + * @param postTxt + * text string to be sent as a Post + * @param postPicture * the path of the picture that needs to be attached (either an url, * either a path pointing to a local file) * - * @return true, if sending the tweet has been successful and + * @return true, if sending the post has been successful and * false in all other cases. */ - public boolean sendTweet(String tweetTxt, String tweetPicture) { + public boolean sendPost(String postTxt, String postPicture) { if (!checkPrerequisites()) { return false; } @@ -201,18 +199,18 @@ public boolean sendTweet(String tweetTxt, String tweetPicture) { // prepare the image attachment File fileToAttach = null; boolean deleteTemporaryFile = false; - if (tweetPicture.startsWith("http://") || tweetPicture.startsWith("https://")) { + if (postPicture.startsWith("http://") || postPicture.startsWith("https://")) { try { // we have a remote url and need to download the remote file to a temporary location Path tDir = Files.createTempDirectory("TempDirectory"); - String path = tDir + File.separator + "openhab-twitter-remote_attached_file" + "." - + getExtension(tweetPicture); + String path = tDir + File.separator + "openhab-x-remote_attached_file" + "." + + getExtension(postPicture); - // URL url = new URL(tweetPicture); + // URL url = new URL(postPicture); fileToAttach = new File(path); deleteTemporaryFile = true; - RawType rawPicture = HttpUtil.downloadImage(tweetPicture); + RawType rawPicture = HttpUtil.downloadImage(postPicture); if (rawPicture != null) { try (FileOutputStream fos = new FileOutputStream(path)) { fos.write(rawPicture.getBytes(), 0, rawPicture.getBytes().length); @@ -222,24 +220,24 @@ public boolean sendTweet(String tweetTxt, String tweetPicture) { logger.debug("Could not write {} to temp dir. {}", path, ex.getMessage()); } } else { - logger.debug("Could not download tweet file from {}", tweetPicture); + logger.debug("Could not download post file from {}", postPicture); } } 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 { // we have a local file and can just use it directly - fileToAttach = new File(tweetPicture); + fileToAttach = new File(postPicture); } 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 { - logger.warn("Image '{}' not found, will only tweet text", tweetPicture); + logger.warn("Image '{}' not found, will only post text", postPicture); } - // send the Tweet - boolean result = sendTweet(tweetTxt, fileToAttach); + // send the Post + boolean result = sendPost(postTxt, fileToAttach); // delete temp file (if needed) if (deleteTemporaryFile) { if (fileToAttach != null) { @@ -272,10 +270,11 @@ public boolean sendDirectMessage(String recipientId, String messageTxt) { try { Twitter localClient = client; 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); // 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(), message.getRecipientId()); return true; @@ -287,18 +286,18 @@ public boolean sendDirectMessage(String recipientId, String messageTxt) { } /** - * check if twitter account was created with prerequisites - * - * @return true, if twitter account was initialized + * check if X account was created with prerequisites + * + * @return true, if X account was initialized * false in all other cases. */ private boolean checkPrerequisites() { 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; } 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 true; @@ -310,9 +309,9 @@ private boolean checkPrerequisites() { * @return a new instance of a Twitter4J Twitter client. */ private twitter4j.Twitter createClient() { - twitter4j.Twitter client = TwitterFactory.getSingleton(); - client.setOAuthConsumer(config.consumerKey, config.consumerSecret); - client.setOAuthAccessToken(new AccessToken(config.accessToken, config.accessTokenSecret)); + Twitter client = Twitter.newBuilder().oAuthConsumer(config.consumerKey, config.consumerSecret) + .oAuthAccessToken(config.accessToken, config.accessTokenSecret).build(); + return client; } diff --git a/bundles/org.openhab.binding.twitter/src/main/java/org/openhab/binding/twitter/internal/TwitterHandlerFactory.java b/bundles/org.openhab.binding.x/src/main/java/org/openhab/binding/x/internal/XHandlerFactory.java similarity index 76% rename from bundles/org.openhab.binding.twitter/src/main/java/org/openhab/binding/twitter/internal/TwitterHandlerFactory.java rename to bundles/org.openhab.binding.x/src/main/java/org/openhab/binding/x/internal/XHandlerFactory.java index d27f76f7bd945..50a9341d2525a 100644 --- a/bundles/org.openhab.binding.twitter/src/main/java/org/openhab/binding/twitter/internal/TwitterHandlerFactory.java +++ b/bundles/org.openhab.binding.x/src/main/java/org/openhab/binding/x/internal/XHandlerFactory.java @@ -10,9 +10,9 @@ * * 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; @@ -26,14 +26,14 @@ 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. * * @author Scott Hanson - Initial contribution */ @NonNullByDefault -@Component(configurationPid = "binding.twitter", service = ThingHandlerFactory.class) -public class TwitterHandlerFactory extends BaseThingHandlerFactory { +@Component(configurationPid = "binding.x", service = ThingHandlerFactory.class) +public class XHandlerFactory extends BaseThingHandlerFactory { private static final Set SUPPORTED_THING_TYPES_UIDS = Set.of(THING_TYPE_ACCOUNT); @@ -47,7 +47,7 @@ public boolean supportsThingType(ThingTypeUID thingTypeUID) { ThingTypeUID thingTypeUID = thing.getThingTypeUID(); if (THING_TYPE_ACCOUNT.equals(thingTypeUID)) { - return new TwitterHandler(thing); + return new XHandler(thing); } return null; diff --git a/bundles/org.openhab.binding.twitter/src/main/java/org/openhab/binding/twitter/internal/action/TwitterActions.java b/bundles/org.openhab.binding.x/src/main/java/org/openhab/binding/x/internal/action/XActions.java similarity index 60% rename from bundles/org.openhab.binding.twitter/src/main/java/org/openhab/binding/twitter/internal/action/TwitterActions.java rename to bundles/org.openhab.binding.x/src/main/java/org/openhab/binding/x/internal/action/XActions.java index 12a56c3574161..8133645ddf4f5 100644 --- a/bundles/org.openhab.binding.twitter/src/main/java/org/openhab/binding/twitter/internal/action/TwitterActions.java +++ b/bundles/org.openhab.binding.x/src/main/java/org/openhab/binding/x/internal/action/XActions.java @@ -10,11 +10,11 @@ * * 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.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.ActionOutput; import org.openhab.core.automation.annotation.RuleAction; @@ -25,53 +25,53 @@ 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 */ -@ThingActionsScope(name = "twitter") +@ThingActionsScope(name = "x") @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") - public @ActionOutput(name = "success", type = "java.lang.Boolean") Boolean sendTweet( + @RuleAction(label = "@text/sendPostActionLabel", description = "@text/sendPostActionDescription") + public @ActionOutput(name = "success", type = "java.lang.Boolean") Boolean sendPost( @ActionInput(name = "text") @Nullable String text) { if (text == null) { - logger.warn("Cannot send Tweet as text is missing."); + logger.warn("Cannot send Post as text is missing."); return false; } - final TwitterHandler handler = this.handler; + final XHandler handler = this.handler; if (handler == null) { - logger.debug("Handler is null, cannot tweet."); + logger.debug("Handler is null, cannot post."); return false; } else { - return handler.sendTweet(text); + return handler.sendPost(text); } } - @RuleAction(label = "@text/sendAttachmentTweetActionLabel", description = "@text/sendAttachmentTweetActionDescription") - public @ActionOutput(name = "success", type = "java.lang.Boolean") Boolean sendTweetWithAttachment( + @RuleAction(label = "@text/sendAttachmentPostActionLabel", description = "@text/sendAttachmentPostActionDescription") + public @ActionOutput(name = "success", type = "java.lang.Boolean") Boolean sendPostWithAttachment( @ActionInput(name = "text") @Nullable String text, @ActionInput(name = "url") @Nullable String urlString) { if (text == null) { - logger.warn("Cannot send Tweet as text is missing."); + logger.warn("Cannot send Post as text is missing."); return false; } if (urlString == null) { - logger.warn("Cannot send Tweet as urlString is missing."); + logger.warn("Cannot send Post as urlString is missing."); return false; } - final TwitterHandler handler = this.handler; + final XHandler handler = this.handler; if (handler == null) { - logger.debug("Handler is null, cannot tweet."); + logger.debug("Handler is null, cannot post."); return false; } else { - return handler.sendTweet(text, urlString); + return handler.sendPost(text, urlString); } } @@ -88,32 +88,32 @@ public class TwitterActions implements ThingActions { return false; } - final TwitterHandler handler = this.handler; + final XHandler handler = this.handler; if (handler == null) { - logger.debug("Handler is null, cannot tweet."); + logger.debug("Handler is null, cannot post."); return false; } else { return handler.sendDirectMessage(recipient, text); } } - public static boolean sendTweet(ThingActions actions, @Nullable String text) { - return ((TwitterActions) actions).sendTweet(text); + public static boolean sendPost(ThingActions actions, @Nullable String 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) { - return ((TwitterActions) actions).sendTweetWithAttachment(text, urlString); + return ((XActions) actions).sendPostWithAttachment(text, urlString); } 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 public void setThingHandler(@Nullable ThingHandler handler) { - if (handler instanceof TwitterHandler twitterHandler) { - this.handler = twitterHandler; + if (handler instanceof XHandler xHandler) { + this.handler = xHandler; } } diff --git a/bundles/org.openhab.binding.twitter/src/main/java/org/openhab/binding/twitter/internal/config/TwitterConfig.java b/bundles/org.openhab.binding.x/src/main/java/org/openhab/binding/x/internal/config/XConfig.java similarity index 80% rename from bundles/org.openhab.binding.twitter/src/main/java/org/openhab/binding/twitter/internal/config/TwitterConfig.java rename to bundles/org.openhab.binding.x/src/main/java/org/openhab/binding/x/internal/config/XConfig.java index 529bee31a858a..73e11d9dd7547 100644 --- a/bundles/org.openhab.binding.twitter/src/main/java/org/openhab/binding/twitter/internal/config/TwitterConfig.java +++ b/bundles/org.openhab.binding.x/src/main/java/org/openhab/binding/x/internal/config/XConfig.java @@ -10,18 +10,18 @@ * * 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; /** - * 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 */ @NonNullByDefault -public class TwitterConfig { +public class XConfig { public String consumerKey = ""; public String consumerSecret = ""; public String accessToken = ""; diff --git a/bundles/org.openhab.binding.twitter/src/main/resources/OH-INF/addon/addon.xml b/bundles/org.openhab.binding.x/src/main/resources/OH-INF/addon/addon.xml similarity index 54% rename from bundles/org.openhab.binding.twitter/src/main/resources/OH-INF/addon/addon.xml rename to bundles/org.openhab.binding.x/src/main/resources/OH-INF/addon/addon.xml index 8c90697c78f48..acb27648087c2 100644 --- a/bundles/org.openhab.binding.twitter/src/main/resources/OH-INF/addon/addon.xml +++ b/bundles/org.openhab.binding.x/src/main/resources/OH-INF/addon/addon.xml @@ -1,11 +1,11 @@ - binding - Twitter Binding - Supports adding Thing for getting the Last Tweet. Send Tweets and Pictures with Actions. + X Binding + Supports adding Thing for getting the Last Post. Send Posts and Pictures with Actions. cloud diff --git a/bundles/org.openhab.binding.x/src/main/resources/OH-INF/i18n/x.properties b/bundles/org.openhab.binding.x/src/main/resources/OH-INF/i18n/x.properties new file mode 100644 index 0000000000000..66bc6924ed3df --- /dev/null +++ b/bundles/org.openhab.binding.x/src/main/resources/OH-INF/i18n/x.properties @@ -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. diff --git a/bundles/org.openhab.binding.twitter/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.x/src/main/resources/OH-INF/thing/thing-types.xml similarity index 78% rename from bundles/org.openhab.binding.twitter/src/main/resources/OH-INF/thing/thing-types.xml rename to bundles/org.openhab.binding.x/src/main/resources/OH-INF/thing/thing-types.xml index 1ec1355e99059..d18df8f5e1c0c 100644 --- a/bundles/org.openhab.binding.twitter/src/main/resources/OH-INF/thing/thing-types.xml +++ b/bundles/org.openhab.binding.x/src/main/resources/OH-INF/thing/thing-types.xml @@ -1,15 +1,14 @@ - - - Account uses for sending Tweets + + Account uses for sending posts - + @@ -38,10 +37,10 @@ - + String - - Users Last Tweet + + Users Last Post diff --git a/bundles/pom.xml b/bundles/pom.xml index e992b98ac4dfc..24ba021ef0c0a 100644 --- a/bundles/pom.xml +++ b/bundles/pom.xml @@ -387,7 +387,6 @@ org.openhab.binding.tplinksmarthome org.openhab.binding.tr064 org.openhab.binding.tradfri - org.openhab.binding.twitter org.openhab.binding.unifi org.openhab.binding.unifiedremote org.openhab.binding.upnpcontrol @@ -419,6 +418,7 @@ org.openhab.binding.wled org.openhab.binding.wolfsmartset org.openhab.binding.wundergroundupdatereceiver + org.openhab.binding.x org.openhab.binding.xmltv org.openhab.binding.xmppclient org.openhab.binding.yamahamusiccast