essential-actions
Clone or download
Modified Files
#!/bin/bash
#!/bin/bash
FOLD=../PreBuiltPlugins
FOLD=../PreBuiltPlugins
hotkey() {
hotkey() {
pushd . || exit
pushd . || exit
cd hotkeyaction && mvn clean package
cd hotkeyaction && mvn clean -Dmaven.test.skip package
mv target/hotkeyaction-1.0.0.jar $FOLD/hotkeyaction.jar
mv target/hotkeyaction-1.0.0.jar $FOLD/hotkeyaction.jar
popd || exit
popd || exit
}
}
mediakey() {
mediakey() {
pushd . || exit
pushd . || exit
cd mediakeyaction && mvn clean package
cd mediakeyaction && mvn clean -Dmaven.test.skip package
mv target/mediakeyaction-1.0.0.jar $FOLD/mediakeyaction.jar
mv target/mediakeyaction-1.0.0.jar $FOLD/mediakeyaction.jar
popd || exit
popd || exit
}
}
obssuite() {
obssuite() {
pushd . || exit
pushd . || exit
cd obssuite/mother && mvn clean install package
cd obssuite/mother && mvn clean install package
mv target/obssuite_motheraction-1.0.0.jar ../$FOLD/obssuite_motheraction.jar
mv target/obssuite_motheraction-1.0.0.jar ../$FOLD/obssuite_motheraction.jar
cd ../setcurrentprofile && mvn clean package
cd ../setcurrentprofile && mvn clean -Dmaven.test.skip package
mv target/obssuite_setcurrentprofileaction-1.0.0.jar ../$FOLD/obssuite_setcurrentprofileaction.jar
mv target/obssuite_setcurrentprofileaction-1.0.0.jar ../$FOLD/obssuite_setcurrentprofileaction.jar
cd ../setcurrentscene && mvn clean package
cd ../setcurrentscene && mvn clean -Dmaven.test.skip package
mv target/obssuite_setcurrentsceneaction-1.0.0.jar ../$FOLD/obssuite_setcurrentsceneaction.jar
mv target/obssuite_setcurrentsceneaction-1.0.0.jar ../$FOLD/obssuite_setcurrentsceneaction.jar
cd ../setcurrenttransition && mvn clean package
cd ../setcurrenttransition && mvn clean -Dmaven.test.skip package
mv target/obssuite_setcurrenttransitionaction-1.0.0.jar ../$FOLD/obssuite_setcurrenttransitionaction.jar
mv target/obssuite_setcurrenttransitionaction-1.0.0.jar ../$FOLD/obssuite_setcurrenttransitionaction.jar
cd ../setmute && mvn clean package
cd ../setmute && mvn clean -Dmaven.test.skip package
mv target/obssuite_setmuteaction-1.0.0.jar ../$FOLD/obssuite_setmuteaction.jar
mv target/obssuite_setmuteaction-1.0.0.jar ../$FOLD/obssuite_setmuteaction.jar
cd ../setcurrentprofile && mvn clean package
cd ../setcurrentprofile && mvn clean -Dmaven.test.skip package
mv target/obssuite_setcurrentprofileaction-1.0.0.jar ../$FOLD/obssuite_setcurrentprofileaction.jar
mv target/obssuite_setcurrentprofileaction-1.0.0.jar ../$FOLD/obssuite_setcurrentprofileaction.jar
cd ../setpreviewscene && mvn clean package
cd ../setpreviewscene && mvn clean -Dmaven.test.skip package
mv target/obssuite_setpreviewsceneaction-1.0.0.jar ../$FOLD/obssuite_setpreviewsceneaction.jar
mv target/obssuite_setpreviewsceneaction-1.0.0.jar ../$FOLD/obssuite_setpreviewsceneaction.jar
cd ../setrecording && mvn clean package
cd ../setrecording && mvn clean -Dmaven.test.skip package
mv target/obssuite_setrecordingaction-1.0.0.jar ../$FOLD/obssuite_setrecordingaction.jar
mv target/obssuite_setrecordingaction-1.0.0.jar ../$FOLD/obssuite_setrecordingaction.jar
cd ../setreplaybuffer && mvn clean package
cd ../setreplaybuffer && mvn clean -Dmaven.test.skip package
mv target/obssuite_setreplaybufferaction-1.0.0.jar ../$FOLD/obssuite_setreplaybufferaction.jar
mv target/obssuite_setreplaybufferaction-1.0.0.jar ../$FOLD/obssuite_setreplaybufferaction.jar
cd ../setstreaming && mvn clean package
cd ../setstreaming && mvn clean -Dmaven.test.skip package
mv target/obssuite_setstreamingaction-1.0.0.jar ../$FOLD/obssuite_setstreamingaction.jar
mv target/obssuite_setstreamingaction-1.0.0.jar ../$FOLD/obssuite_setstreamingaction.jar
cd ../setstudiomode && mvn clean package
cd ../setstudiomode && mvn clean -Dmaven.test.skip package
mv target/obssuite_setstudiomodeaction-1.0.0.jar ../$FOLD/obssuite_setstudiomodeaction.jar
mv target/obssuite_setstudiomodeaction-1.0.0.jar ../$FOLD/obssuite_setstudiomodeaction.jar
cd ../setvolume && mvn clean package
cd ../setvolume && mvn clean -Dmaven.test.skip package
mv target/obssuite_setvolumeaction-1.0.0.jar ../$FOLD/obssuite_setvolumeaction.jar
mv target/obssuite_setvolumeaction-1.0.0.jar ../$FOLD/obssuite_setvolumeaction.jar
popd || exit
popd || exit
}
}
playaudioclip() {
playaudioclip() {
pushd . || exit
pushd . || exit
cd playaudioclipaction && mvn clean package
cd playaudioclipaction && mvn clean -Dmaven.test.skip package
mv target/playaudioclipaction-1.0.0.jar $FOLD/playaudioclipaction.jar
mv target/playaudioclipaction-1.0.0.jar $FOLD/playaudioclipaction.jar
popd || exit
popd || exit
}
}
runcommand() {
runcommand() {
pushd . || exit
pushd . || exit
cd runcommandaction && mvn clean package
cd runcommandaction && mvn clean -Dmaven.test.skip package
mv target/runcommandaction-1.0.0.jar $FOLD/runcommandaction.jar
mv target/runcommandaction-1.0.0.jar $FOLD/runcommandaction.jar
popd || exit
popd || exit
}
}
textblock() {
textblock() {
pushd . || exit
pushd . || exit
cd textblockaction && mvn clean package
cd textblockaction && mvn clean -Dmaven.test.skip package
mv target/textblockaction-1.0.0.jar $FOLD/textblockaction.jar
mv target/textblockaction-1.0.0.jar $FOLD/textblockaction.jar
popd || exit
popd || exit
}
}
twitter() {
twitter() {
pushd . || exit
pushd . || exit
cd twitteraction && mvn clean package
cd twitteraction && mvn clean -Dmaven.test.skip package
mv target/twitteraction-1.0.0.jar $FOLD/twitteraction.jar
mv target/twitteraction-1.0.0.jar $FOLD/twitteraction.jar
popd || exit
popd || exit
}
}
twitchchat() {
twitchchat() {
pushd . || exit
pushd . || exit
cd twitch/twitch-chat-connect && mvn clean install package
cd twitch/twitch-chat-connect && mvn clean install package
mv target/twitch-chat-connect-1.0.0.jar ../$FOLD/twitch-chat-connect.jar
mv target/twitch-chat-connect-1.0.0.jar ../$FOLD/twitch-chat-connect.jar
cd ../send-channel-msg && mvn clean install package
cd ../send-channel-msg && mvn clean install package
mv target/twitch-send-channel-msg-1.0.0.jar ../$FOLD/twitch-send-channel-msg.jar
mv target/twitch-send-channel-msg-1.0.0.jar ../$FOLD/twitch-send-channel-msg.jar
cd ../clear-chat && mvn clean install package
cd ../clear-chat && mvn clean install package
mv target/twitch-clear-chat-1.0.0.jar ../$FOLD/twitch-clear-chat.jar
mv target/twitch-clear-chat-1.0.0.jar ../$FOLD/twitch-clear-chat.jar
cd ../set-color && mvn clean install package
cd ../set-color && mvn clean install package
mv target/twitch-set-color-1.0.0.jar ../$FOLD/twitch-set-color.jar
mv target/twitch-set-color-1.0.0.jar ../$FOLD/twitch-set-color.jar
cd ../whisper && mvn clean install package
cd ../whisper && mvn clean install package
mv target/twitch-whisper-1.0.0.jar ../$FOLD/twitch-whisper.jar
mv target/twitch-whisper-1.0.0.jar ../$FOLD/twitch-whisper.jar
cd ../unraid && mvn clean install package
cd ../unraid && mvn clean install package
mv target/twitch-unraid-1.0.0.jar ../$FOLD/twitch-unraid.jar
mv target/twitch-unraid-1.0.0.jar ../$FOLD/twitch-unraid.jar
cd ../unhost && mvn clean install package
cd ../unhost && mvn clean install package
mv target/twitch-unhost-1.0.0.jar ../$FOLD/twitch-unhost.jar
mv target/twitch-unhost-1.0.0.jar ../$FOLD/twitch-unhost.jar
cd ../add-stream-marker && mvn clean install package
cd ../add-stream-marker && mvn clean install package
mv target/twitch-add-stream-marker-1.0.0.jar ../$FOLD/twitch-add-stream-marker.jar
mv target/twitch-add-stream-marker-1.0.0.jar ../$FOLD/twitch-add-stream-marker.jar
cd ../host-channel && mvn clean install package
cd ../host-channel && mvn clean install package
mv target/twitch-host-channel-1.0.0.jar ../$FOLD/twitch-host-channel.jar
mv target/twitch-host-channel-1.0.0.jar ../$FOLD/twitch-host-channel.jar
cd ../raid-channel && mvn clean install package
cd ../raid-channel && mvn clean install package
mv target/twitch-raid-channel-1.0.0.jar ../$FOLD/twitch-raid-channel.jar
mv target/twitch-raid-channel-1.0.0.jar ../$FOLD/twitch-raid-channel.jar
cd ../start-commercial && mvn clean install package
cd ../start-commercial && mvn clean install package
mv target/twitch-start-commercial-1.0.0.jar ../$FOLD/twitch-start-commercial.jar
mv target/twitch-start-commercial-1.0.0.jar ../$FOLD/twitch-start-commercial.jar
popd || exit
popd || exit
}
}
websiteaction() {
websiteaction() {
pushd . || exit
pushd . || exit
cd websiteaction && mvn clean package
cd websiteaction && mvn clean -Dmaven.test.skip package
mv target/websiteaction-1.0.0.jar $FOLD/websiteaction.jar
mv target/websiteaction-1.0.0.jar $FOLD/websiteaction.jar
popd || exit
popd || exit
}
}
case "$1" in
case "$1" in
hotkey)
hotkey)
hotkey
hotkey
;;
;;
mediakey)
mediakey)
mediakey
mediakey
;;
;;
playaudioclip)
playaudioclip)
playaudioclip
playaudioclip
;;
;;
runcommand)
runcommand)
runcommand
runcommand
;;
;;
textblock)
textblock)
textblock
textblock
;;
;;
twitter)
twitter)
twitter
twitter
;;
;;
website)
website)
website
website
;;
;;
obssuite)
obssuite)
obssuite
obssuite
;;
;;
twitchchat)
twitchchat)
twitchchat
twitchchat
;;
;;
*)
*)
# build all actions as default
# build all actions as default
hotkey
hotkey
mediakey
mediakey
obssuite
obssuite
playaudioclip
playaudioclip
runcommand
runcommand
textblock
textblock
twitter
twitter
twitchchat
twitchchat
website
website
;;
;;
esac
esac
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Maven: com.stream-pi:util:1.0.0-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: org.openjfx:javafx-controls:16-ea+6" level="project" />
<orderEntry type="library" name="Maven: org.openjfx:javafx-controls:linux:16-ea+6" level="project" />
<orderEntry type="library" name="Maven: org.openjfx:javafx-graphics:16-ea+6" level="project" />
<orderEntry type="library" name="Maven: org.openjfx:javafx-graphics:linux:16-ea+6" level="project" />
<orderEntry type="library" name="Maven: org.openjfx:javafx-base:16-ea+6" level="project" />
<orderEntry type="library" name="Maven: org.openjfx:javafx-base:linux:16-ea+6" level="project" />
<orderEntry type="library" name="Maven: com.stream-pi:action-api:1.0.0-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: org.kordamp.ikonli:ikonli-fontawesome5-pack:11.5.0" level="project" />
<orderEntry type="library" name="Maven: org.kordamp.ikonli:ikonli-core:11.5.0" level="project" />
<orderEntry type="library" name="Maven: org.kordamp.ikonli:ikonli-javafx:11.5.0" level="project" />
</component>
</module>
package com.stream_pi.runcommandaction;
package com.stream_pi.runcommandaction;
import com.stream_pi.action_api.actionproperty.property.Property;
import com.stream_pi.action_api.actionproperty.property.Property;
import com.stream_pi.action_api.actionproperty.property.Type;
import com.stream_pi.action_api.actionproperty.property.Type;
import com.stream_pi.action_api.normalaction.NormalAction;
import com.stream_pi.action_api.externalplugin.NormalAction;
import com.stream_pi.util.version.Version;
import com.stream_pi.util.version.Version;
public class RunCommandAction extends NormalAction {
public class RunCommandAction extends NormalAction {
public RunCommandAction()
public RunCommandAction()
{
{
setName("Run Command");
setName("Run Command");
setCategory("Essentials");
setCategory("Essentials");
setAuthor("rnayabed");
setAuthor("rnayabed");
setServerButtonGraphic("fas-terminal");
setServerButtonGraphic("fas-terminal");
setHelpLink("https://github.com/stream-pi/essentialactions/blob/master/runcommandaction/README.md");
setHelpLink("https://github.com/stream-pi/essentialactions/blob/master/runcommandaction/README.md");
setVersion(new Version(1,1,1));
setVersion(new Version(1,1,1));
}
}
@Override
@Override
public void initProperties() throws Exception {
public void initProperties() throws Exception {
Property commandProperty = new Property("command", Type.STRING);
Property commandProperty = new Property("command", Type.STRING);
commandProperty.setDisplayName("Command");
commandProperty.setDisplayName("Command");
addClientProperties(commandProperty);
addClientProperties(commandProperty);
}
}
@Override
@Override
public void initAction() throws Exception {
public void initAction() throws Exception {
}
}
@Override
@Override
public void onActionClicked() throws Exception
public void onActionClicked() throws Exception
{
{
runCommand(getClientProperties().getSingleProperty("command").getStringValue());
runCommand(getClientProperties().getSingleProperty("command").getStringValue());
}
}
@Override
@Override
public void onShutDown() throws Exception {
public void onShutDown() throws Exception {
// TODO Auto-generated method stub
// TODO Auto-generated method stub
}
}
private void runCommand(String command) throws Exception
private void runCommand(String command) throws Exception
{
{
Runtime rt = Runtime.getRuntime();
Runtime rt = Runtime.getRuntime();
rt.exec(command);
rt.exec(command);
}
}
}
}
module com.stream_pi.runcommandaction
module com.stream_pi.runcommandaction
{
{
requires com.stream_pi.action_api;
requires com.stream_pi.action_api;
requires com.stream_pi.util;
requires com.stream_pi.util;
requires org.kordamp.ikonli.javafx;
requires org.kordamp.ikonli.javafx;
requires org.kordamp.ikonli.fontawesome5;
requires org.kordamp.ikonli.fontawesome5;
provides com.stream_pi.action_api.normalaction.NormalAction with com.stream_pi.runcommandaction.RunCommandAction;
provides com.stream_pi.action_api.externalplugin.ExternalPlugin with com.stream_pi.runcommandaction.RunCommandAction;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Maven: com.stream-pi:util:1.0.0-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: org.openjfx:javafx-controls:16-ea+6" level="project" />
<orderEntry type="library" name="Maven: org.openjfx:javafx-controls:linux:16-ea+6" level="project" />
<orderEntry type="library" name="Maven: org.openjfx:javafx-graphics:16-ea+6" level="project" />
<orderEntry type="library" name="Maven: org.openjfx:javafx-graphics:linux:16-ea+6" level="project" />
<orderEntry type="library" name="Maven: org.openjfx:javafx-base:16-ea+6" level="project" />
<orderEntry type="library" name="Maven: org.openjfx:javafx-base:linux:16-ea+6" level="project" />
<orderEntry type="library" name="Maven: com.stream-pi:action-api:1.0.0-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: org.kordamp.ikonli:ikonli-fontawesome5-pack:11.5.0" level="project" />
<orderEntry type="library" name="Maven: org.kordamp.ikonli:ikonli-core:11.5.0" level="project" />
<orderEntry type="library" name="Maven: org.kordamp.ikonli:ikonli-javafx:11.5.0" level="project" />
</component>
</module>
package com.stream_pi.textblockaction;
package com.stream_pi.textblockaction;
import com.stream_pi.action_api.actionproperty.property.Property;
import com.stream_pi.action_api.actionproperty.property.Property;
import com.stream_pi.action_api.actionproperty.property.Type;
import com.stream_pi.action_api.actionproperty.property.Type;
import com.stream_pi.action_api.normalaction.NormalAction;
import com.stream_pi.action_api.externalplugin.NormalAction;
import com.stream_pi.util.version.Version;
import com.stream_pi.util.version.Version;
import static java.awt.event.KeyEvent.*;
import static java.awt.event.KeyEvent.*;
import java.awt.*;
import java.awt.*;
public class TextBlockAction extends NormalAction {
public class TextBlockAction extends NormalAction {
public TextBlockAction()
public TextBlockAction()
{
{
setName("Text Block");
setName("Text Block");
setCategory("Essentials");
setCategory("Essentials");
setAuthor("rnayabed");
setAuthor("rnayabed");
setServerButtonGraphic("fas-keyboard");
setServerButtonGraphic("fas-keyboard");
setHelpLink("https://github.com/stream-pi/essentialactions");
setHelpLink("https://github.com/stream-pi/essentialactions");
setVersion(new Version(1,0,0));
setVersion(new Version(1,0,0));
}
}
@Override
@Override
public void initProperties() throws Exception {
public void initProperties() throws Exception {
Property textBlockProperty = new Property("text_block", Type.STRING);
Property textBlockProperty = new Property("text_block", Type.STRING);
textBlockProperty.setDisplayName("Text");
textBlockProperty.setDisplayName("Text");
textBlockProperty.setDefaultValueStr("Stream-Pi FTW");
textBlockProperty.setDefaultValueStr("Stream-Pi FTW");
textBlockProperty.setCanBeBlank(false);
textBlockProperty.setCanBeBlank(false);
addClientProperties(textBlockProperty);
addClientProperties(textBlockProperty);
}
}
private Robot robot;
private Robot robot;
@Override
@Override
public void initAction() throws Exception {
public void initAction() throws Exception {
robot = new Robot();
robot = new Robot();
}
}
@Override
@Override
public void onActionClicked() throws Exception
public void onActionClicked() throws Exception
{
{
Property textBlockProperty = getClientProperties().getSingleProperty("text_block");
Property textBlockProperty = getClientProperties().getSingleProperty("text_block");
type(textBlockProperty.getStringValue());
type(textBlockProperty.getStringValue());
}
}
public void type(String toType) throws Exception
public void type(String toType) throws Exception
{
{
release(VK_CAPS_LOCK);
release(VK_CAPS_LOCK);
release(VK_SHIFT);
release(VK_SHIFT);
for (int i = 0;i<toType.length();i ++)
for (int i = 0;i<toType.length();i ++)
{
{
char c = toType.charAt(i);
char c = toType.charAt(i);
pressAndReleaseKey(c);
pressAndReleaseKey(c);
}
}
if(isShiftOn)
if(isShiftOn)
{
{
isShiftOn = false;
isShiftOn = false;
release(VK_SHIFT);
release(VK_SHIFT);
}
}
}
}
private boolean isShiftOn = false;
private boolean isShiftOn = false;
public void pressAndReleaseKey(char c) throws Exception
public void pressAndReleaseKey(char c) throws Exception
{
{
if(Character.isUpperCase(c))
if(Character.isUpperCase(c))
{
{
if(!isShiftOn)
if(!isShiftOn)
{
{
isShiftOn = true;
isShiftOn = true;
press(VK_SHIFT);
press(VK_SHIFT);
}
}
}
}
else
else
{
{
if(isShiftOn)
if(isShiftOn)
{
{
isShiftOn = false;
isShiftOn = false;
release(VK_SHIFT);
release(VK_SHIFT);
}
}
}
}
switch (Character.toLowerCase(c)) {
switch (Character.toLowerCase(c)) {
case 'a': pressAndRelease(VK_A); break;
case 'a': pressAndRelease(VK_A); break;
case 'b': pressAndRelease(VK_B); break;
case 'b': pressAndRelease(VK_B); break;
case 'c': pressAndRelease(VK_C); break;
case 'c': pressAndRelease(VK_C); break;
case 'd': pressAndRelease(VK_D); break;
case 'd': pressAndRelease(VK_D); break;
case 'e': pressAndRelease(VK_E); break;
case 'e': pressAndRelease(VK_E); break;
case 'f': pressAndRelease(VK_F); break;
case 'f': pressAndRelease(VK_F); break;
case 'g': pressAndRelease(VK_G); break;
case 'g': pressAndRelease(VK_G); break;
case 'h': pressAndRelease(VK_H); break;
case 'h': pressAndRelease(VK_H); break;
case 'i': pressAndRelease(VK_I); break;
case 'i': pressAndRelease(VK_I); break;
case 'j': pressAndRelease(VK_J); break;
case 'j': pressAndRelease(VK_J); break;
case 'k': pressAndRelease(VK_K); break;
case 'k': pressAndRelease(VK_K); break;
case 'l': pressAndRelease(VK_L); break;
case 'l': pressAndRelease(VK_L); break;
case 'm': pressAndRelease(VK_M); break;
case 'm': pressAndRelease(VK_M); break;
case 'n': pressAndRelease(VK_N); break;
case 'n': pressAndRelease(VK_N); break;
case 'o': pressAndRelease(VK_O); break;
case 'o': pressAndRelease(VK_O); break;
case 'p': pressAndRelease(VK_P); break;
case 'p': pressAndRelease(VK_P); break;
case 'q': pressAndRelease(VK_Q); break;
case 'q': pressAndRelease(VK_Q); break;
case 'r': pressAndRelease(VK_R); break;
case 'r': pressAndRelease(VK_R); break;
case 's': pressAndRelease(VK_S); break;
case 's': pressAndRelease(VK_S); break;
case 't': pressAndRelease(VK_T); break;
case 't': pressAndRelease(VK_T); break;
case 'u': pressAndRelease(VK_U); break;
case 'u': pressAndRelease(VK_U); break;
case 'v': pressAndRelease(VK_V); break;
case 'v': pressAndRelease(VK_V); break;
case 'w': pressAndRelease(VK_W); break;
case 'w': pressAndRelease(VK_W); break;
case 'x': pressAndRelease(VK_X); break;
case 'x': pressAndRelease(VK_X); break;
case 'y': pressAndRelease(VK_Y); break;
case 'y': pressAndRelease(VK_Y); break;
case 'z': pressAndRelease(VK_Z); break;
case 'z': pressAndRelease(VK_Z); break;
case '0': pressAndRelease(VK_0); break;
case '0': pressAndRelease(VK_0); break;
case '1': pressAndRelease(VK_1); break;
case '1': pressAndRelease(VK_1); break;
case '2': pressAndRelease(VK_2); break;
case '2': pressAndRelease(VK_2); break;
case '3': pressAndRelease(VK_3); break;
case '3': pressAndRelease(VK_3); break;
case '4': pressAndRelease(VK_4); break;
case '4': pressAndRelease(VK_4); break;
case '5': pressAndRelease(VK_5); break;
case '5': pressAndRelease(VK_5); break;
case '6': pressAndRelease(VK_6); break;
case '6': pressAndRelease(VK_6); break;
case '7': pressAndRelease(VK_7); break;
case '7': pressAndRelease(VK_7); break;
case '8': pressAndRelease(VK_8); break;
case '8': pressAndRelease(VK_8); break;
case '9': pressAndRelease(VK_9); break;
case '9': pressAndRelease(VK_9); break;
case '-': pressAndRelease(VK_MINUS); break;
case '-': pressAndRelease(VK_MINUS); break;
case '=': pressAndRelease(VK_EQUALS); break;
case '=': pressAndRelease(VK_EQUALS); break;
case '`': pressAndRelease(VK_BACK_QUOTE); break;
case '`': pressAndRelease(VK_BACK_QUOTE); break;
case '[': pressAndRelease(VK_OPEN_BRACKET); break;
case '[': pressAndRelease(VK_OPEN_BRACKET); break;
case ']': pressAndRelease(VK_CLOSE_BRACKET); break;
case ']': pressAndRelease(VK_CLOSE_BRACKET); break;
case '\\': pressAndRelease(VK_BACK_SLASH); break;
case '\\': pressAndRelease(VK_BACK_SLASH); break;
case '{': pressAndRelease(VK_BRACELEFT); break;
case '{': pressAndRelease(VK_BRACELEFT); break;
case '}': pressAndRelease(VK_BRACERIGHT); break;
case '}': pressAndRelease(VK_BRACERIGHT); break;
case '/': pressAndRelease(VK_SLASH); break;
case '/': pressAndRelease(VK_SLASH); break;
case ':': pressAndRelease(VK_SHIFT, VK_SEMICOLON); break;
case ':': pressAndRelease(VK_SHIFT, VK_SEMICOLON); break;
case ';': pressAndRelease(VK_SEMICOLON); break;
case ';': pressAndRelease(VK_SEMICOLON); break;
case '\'': pressAndRelease(VK_QUOTE); break;
case '\'': pressAndRelease(VK_QUOTE); break;
case ',': pressAndRelease(VK_COMMA); break;
case ',': pressAndRelease(VK_COMMA); break;
case '<': pressAndRelease(VK_SHIFT, VK_COMMA); break;
case '<': pressAndRelease(VK_SHIFT, VK_COMMA); break;
case '>': pressAndRelease(VK_SHIFT, VK_PERIOD); break;
case '>': pressAndRelease(VK_SHIFT, VK_PERIOD); break;
case '.': pressAndRelease(VK_PERIOD); break;
case '.': pressAndRelease(VK_PERIOD); break;
case ' ': pressAndRelease(VK_SPACE); break;
case ' ': pressAndRelease(VK_SPACE); break;
case '~': pressAndRelease(VK_SHIFT, VK_BACK_QUOTE); break;
case '~': pressAndRelease(VK_SHIFT, VK_BACK_QUOTE); break;
case '!': pressAndRelease(VK_SHIFT, VK_1); break;
case '!': pressAndRelease(VK_SHIFT, VK_1); break;
case '@': pressAndRelease(VK_SHIFT, VK_2); break;
case '@': pressAndRelease(VK_SHIFT, VK_2); break;
case '#': pressAndRelease(VK_SHIFT, VK_3); break;
case '#': pressAndRelease(VK_SHIFT, VK_3); break;
case '$': pressAndRelease(VK_SHIFT, VK_4); break;
case '$': pressAndRelease(VK_SHIFT, VK_4); break;
case '%': pressAndRelease(VK_SHIFT, VK_5); break;
case '%': pressAndRelease(VK_SHIFT, VK_5); break;
case '^': pressAndRelease(VK_SHIFT, VK_6); break;
case '^': pressAndRelease(VK_SHIFT, VK_6); break;
case '&': pressAndRelease(VK_SHIFT, VK_7); break;
case '&': pressAndRelease(VK_SHIFT, VK_7); break;
case '*': pressAndRelease(VK_SHIFT, VK_8); break;
case '*': pressAndRelease(VK_SHIFT, VK_8); break;
case '(': pressAndRelease(VK_SHIFT, VK_9); break;
case '(': pressAndRelease(VK_SHIFT, VK_9); break;
case ')': pressAndRelease(VK_SHIFT, VK_0); break;
case ')': pressAndRelease(VK_SHIFT, VK_0); break;
case '_': pressAndRelease(VK_SHIFT, VK_MINUS); break;
case '_': pressAndRelease(VK_SHIFT, VK_MINUS); break;
case '+': pressAndRelease(VK_SHIFT, VK_EQUALS); break;
case '+': pressAndRelease(VK_SHIFT, VK_EQUALS); break;
case '|': pressAndRelease(VK_SHIFT, VK_BACK_SLASH); break;
case '|': pressAndRelease(VK_SHIFT, VK_BACK_SLASH); break;
case '?': pressAndRelease(VK_SHIFT, VK_SLASH); break;
case '?': pressAndRelease(VK_SHIFT, VK_SLASH); break;
default:
default:
throw new IllegalArgumentException("Cannot press character " + c);
throw new IllegalArgumentException("Cannot press character " + c);
}
}
}
}
private void pressAndRelease(int... keyCodes)
private void pressAndRelease(int... keyCodes)
{
{
for(int key : keyCodes)
for(int key : keyCodes)
{
{
press(key);
press(key);
}
}
for(int key : keyCodes)
for(int key : keyCodes)
{
{
release(key);
release(key);
}
}
}
}
private void press(int keyCode)
private void press(int keyCode)
{
{
robot.keyPress(keyCode);
robot.keyPress(keyCode);
}
}
private void release(int keyCode)
private void release(int keyCode)
{
{
robot.keyRelease(keyCode);
robot.keyRelease(keyCode);
}
}
@Override
@Override
public void onShutDown() throws Exception {
public void onShutDown() throws Exception {
// TODO Auto-generated method stub
// TODO Auto-generated method stub
}
}
}
}
import com.stream_pi.textblockaction.TextBlockAction;
import com.stream_pi.textblockaction.TextBlockAction;
module com.stream_pi.textblockaction {
module com.stream_pi.textblockaction {
requires com.stream_pi.action_api;
requires com.stream_pi.action_api;
requires com.stream_pi.util;
requires com.stream_pi.util;
requires org.kordamp.ikonli.javafx;
requires org.kordamp.ikonli.javafx;
requires org.kordamp.ikonli.fontawesome5;
requires org.kordamp.ikonli.fontawesome5;
requires java.desktop;
requires java.desktop;
provides com.stream_pi.action_api.normalaction.NormalAction with TextBlockAction;
provides com.stream_pi.action_api.externalplugin.ExternalPlugin with TextBlockAction;
}
}
package com.stream_pi.twitteraction;
package com.stream_pi.twitteraction;
import com.stream_pi.action_api.actionproperty.property.Property;
import com.stream_pi.action_api.actionproperty.property.Property;
import com.stream_pi.action_api.actionproperty.property.Type;
import com.stream_pi.action_api.actionproperty.property.Type;
import com.stream_pi.action_api.normalaction.NormalAction;
import com.stream_pi.action_api.externalplugin.NormalAction;
import com.stream_pi.util.alert.StreamPiAlert;
import com.stream_pi.util.alert.StreamPiAlert;
import com.stream_pi.util.alert.StreamPiAlertListener;
import com.stream_pi.util.alert.StreamPiAlertListener;
import com.stream_pi.util.alert.StreamPiAlertType;
import com.stream_pi.util.alert.StreamPiAlertType;
import com.stream_pi.util.uihelper.HBoxInputBox;
import com.stream_pi.util.uihelper.HBoxInputBox;
import com.stream_pi.util.version.Version;
import com.stream_pi.util.version.Version;
import javafx.application.Platform;
import javafx.application.Platform;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Task;
import javafx.concurrent.Task;
import javafx.scene.control.*;
import javafx.scene.control.*;
import javafx.scene.layout.HBox;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.layout.VBox;
import twitter4j.Status;
import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.TwitterFactory;
import twitter4j.auth.AccessToken;
import twitter4j.auth.AccessToken;
import twitter4j.auth.RequestToken;
import twitter4j.auth.RequestToken;
import twitter4j.conf.ConfigurationBuilder;
import twitter4j.conf.ConfigurationBuilder;
import java.net.URI;
import java.net.URI;
import java.util.Random;
import java.util.Random;
public class TwitterAction extends NormalAction {
public class TwitterAction extends NormalAction {
Button loginAsNewUserButton, logoutButton;
Button loginAsNewUserButton, logoutButton;
public TwitterAction()
public TwitterAction()
{
{
setName("Tweet");
setName("Tweet");
setCategory("Twitter");
setCategory("Twitter");
setAuthor("rnayabed");
setAuthor("rnayabed");
setServerButtonGraphic("fab-twitter");
setServerButtonGraphic("fab-twitter");
setHelpLink("https://github.com/stream-pi/essentialactions");
setHelpLink("https://github.com/stream-pi/essentialactions");
setVersion(new Version(1,0,1));
setVersion(new Version(1,0,1));
loginAsNewUserButton = new Button("Login as new user");
loginAsNewUserButton = new Button("Login as new user");
loginAsNewUserButton.setOnAction(event-> new Thread(new Task<Void>() {
loginAsNewUserButton.setOnAction(event-> new Thread(new Task<Void>() {
@Override
@Override
protected Void call()
protected Void call()
{
{
try {
try {
Platform.runLater(()->{
Platform.runLater(()->{
loginAsNewUserButton.setDisable(true);
loginAsNewUserButton.setDisable(true);
logoutButton.setDisable(true);
logoutButton.setDisable(true);
});
});
loginAsNewUser();
loginAsNewUser();
} catch (Exception e) {
} catch (Exception e) {
Platform.runLater(()-> {
Platform.runLater(()-> {
Platform.runLater(()->{
Platform.runLater(()->{
loginAsNewUserButton.setDisable(false);
loginAsNewUserButton.setDisable(false);
logoutButton.setDisable(false);
logoutButton.setDisable(false);
});
});
new StreamPiAlert(e.getMessage(), StreamPiAlertType.ERROR).show();
new StreamPiAlert(e.getMessage(), StreamPiAlertType.ERROR).show();
});
});
e.printStackTrace();
e.printStackTrace();
}
}
return null;
return null;
}
}
}).start());
}).start());
logoutButton = new Button("Logout");
logoutButton = new Button("Logout");
logoutButton.setOnAction(event-> new Thread(new Task<Void>() {
logoutButton.setOnAction(event-> new Thread(new Task<Void>() {
@Override
@Override
protected Void call()
protected Void call()
{
{
try {
try {
Platform.runLater(()->{
Platform.runLater(()->{
loginAsNewUserButton.setDisable(false);
loginAsNewUserButton.setDisable(false);
logoutButton.setDisable(false);
logoutButton.setDisable(false);
});
});
logout();
logout();
} catch (Exception e) {
} catch (Exception e) {
Platform.runLater(()-> {
Platform.runLater(()-> {
Platform.runLater(()->{
Platform.runLater(()->{
loginAsNewUserButton.setDisable(false);
loginAsNewUserButton.setDisable(false);
logoutButton.setDisable(false);
logoutButton.setDisable(false);
});
});
new StreamPiAlert(e.getMessage(), StreamPiAlertType.ERROR).show();
new StreamPiAlert(e.getMessage(), StreamPiAlertType.ERROR).show();
});
});
e.printStackTrace();
e.printStackTrace();
}
}
return null;
return null;
}
}
}).start());
}).start());
setButtonBar(loginAsNewUserButton, logoutButton);
setServerSettingsButtonBar(loginAsNewUserButton, logoutButton);
}
}
@Override
@Override
public void initProperties() throws Exception
public void initProperties() throws Exception
{
{
Property oAuthConsumerKey = new Property("consumer_key", Type.STRING);
Property oAuthConsumerKey = new Property("consumer_key", Type.STRING);
oAuthConsumerKey.setDisplayName("API Key");
oAuthConsumerKey.setDisplayName("API Key");
Property oAuthConsumerKeySecret = new Property("consumer_key_secret", Type.STRING);
Property oAuthConsumerKeySecret = new Property("consumer_key_secret", Type.STRING);
oAuthConsumerKeySecret.setDisplayName("API Key Secret");
oAuthConsumerKeySecret.setDisplayName("API Key Secret");
Property oAuthAccessToken = new Property("access_token", Type.STRING);
Property oAuthAccessToken = new Property("access_token", Type.STRING);
oAuthAccessToken.setDisplayName("Access Token");
oAuthAccessToken.setDisplayName("Access Token");
oAuthAccessToken.setVisible(false);
oAuthAccessToken.setVisible(false);
Property oAuthAccessTokenSecret = new Property("access_token_secret", Type.STRING);
Property oAuthAccessTokenSecret = new Property("access_token_secret", Type.STRING);
oAuthAccessTokenSecret.setDisplayName("Access Token Secret");
oAuthAccessTokenSecret.setDisplayName("Access Token Secret");
oAuthAccessTokenSecret.setVisible(false);
oAuthAccessTokenSecret.setVisible(false);
addServerProperties(
addServerProperties(
oAuthConsumerKey,
oAuthConsumerKey,
oAuthConsumerKeySecret,
oAuthConsumerKeySecret,
oAuthAccessToken,
oAuthAccessToken,
oAuthAccessTokenSecret
oAuthAccessTokenSecret
);
);
Property toBeTweeted = new Property("tweet", Type.STRING);
Property toBeTweeted = new Property("tweet", Type.STRING);
toBeTweeted.setDisplayName("Tweet");
toBeTweeted.setDisplayName("Tweet");
toBeTweeted.setDefaultValueStr("Hello From Stream-Pi!");
toBeTweeted.setDefaultValueStr("Hello From Stream-Pi!");
toBeTweeted.setCanBeBlank(false);
toBeTweeted.setCanBeBlank(false);
addClientProperties(
addClientProperties(
toBeTweeted
toBeTweeted
);
);
}
}
public void loginAsNewUser() throws Exception
public void loginAsNewUser() throws Exception
{
{
logout();
logout();
getAuthToken();
getAuthToken();
}
}
public void logout() throws Exception
public void logout() throws Exception
{
{
setNewTwitterConfig(
setNewTwitterConfig(
getServerProperties().getSingleProperty("consumer_key").getStringValue(),
getServerProperties().getSingleProperty("consumer_key").getStringValue(),
getServerProperties().getSingleProperty("consumer_key_secret").getStringValue(),
getServerProperties().getSingleProperty("consumer_key_secret").getStringValue(),
null,null
null,null
);
);
}
}
public void getAuthToken() throws Exception {
public void getAuthToken() throws Exception {
RequestToken requestToken = tf.getInstance().getOAuthRequestToken();
RequestToken requestToken = tf.getInstance().getOAuthRequestToken();
String cancel = "Cancel";
String cancel = "Cancel";
String login = "Log In";
String login = "Log In";
TextArea authURLTextArea = new TextArea(requestToken.getAuthorizationURL());
TextArea authURLTextArea = new TextArea(requestToken.getAuthorizationURL());
authURLTextArea.setEditable(false);
authURLTextArea.setEditable(false);
TextField pinTextField = new TextField();
TextField pinTextField = new TextField();
HBox textBox = new HBoxInputBox("PIN", pinTextField);
HBox textBox = new HBoxInputBox("PIN", pinTextField);
Platform.runLater(()->{
Platform.runLater(()->{
try
try
{
{
StreamPiAlert alert = new StreamPiAlert("Authorise App", StreamPiAlertType.INFORMATION, cancel, login);
StreamPiAlert alert = new StreamPiAlert("Authorise App", StreamPiAlertType.INFORMATION, cancel, login);
VBox vBox = new VBox(new Label("Go the following Link below, authorise app and then enter the PIN Below"), authURLTextArea, textBox);
VBox vBox = new VBox(new Label("Go the following Link below, authorise app and then enter the PIN Below"), authURLTextArea, textBox);
vBox.setSpacing(5.0);
vBox.setSpacing(5.0);
alert.setAlertContent(vBox);
alert.setAlertContent(vBox);
alert.show();
alert.show();
alert.setOnClicked(new StreamPiAlertListener(){
alert.setOnClicked(new StreamPiAlertListener(){
@Override
@Override
public void onClick(String buttonClicked) {
public void onClick(String buttonClicked) {
// TODO Auto-generated method stub
// TODO Auto-generated method stub
try
try
{
{
if(buttonClicked.equals(login))
if(buttonClicked.equals(login))
{
{
AccessToken accessToken = tf.getInstance().getOAuthAccessToken(requestToken, pinTextField.getText());
AccessToken accessToken = tf.getInstance().getOAuthAccessToken(requestToken, pinTextField.getText());
getServerProperties().getSingleProperty("access_token").setStringValue(accessToken.getToken());
getServerProperties().getSingleProperty("access_token").setStringValue(accessToken.getToken());
getServerProperties().getSingleProperty("access_token_secret").setStringValue(accessToken.getTokenSecret());
getServerProperties().getSingleProperty("access_token_secret").setStringValue(accessToken.getTokenSecret());
saveServerProperties();
saveServerProperties();
initAction();
initAction();
new StreamPiAlert("Success", "Login Successful!", StreamPiAlertType.INFORMATION).show();
new StreamPiAlert("Success", "Login Successful!", StreamPiAlertType.INFORMATION).show();
}
}
else
else
{
{
initAction();
initAction();
}
}
}
}
catch (Exception e)
catch (Exception e)
{
{
new StreamPiAlert(e.getMessage(), StreamPiAlertType.ERROR).show();
new StreamPiAlert(e.getMessage(), StreamPiAlertType.ERROR).show();
e.printStackTrace();
e.printStackTrace();
}
}
}
}
});
});
}
}
catch (Exception e)
catch (Exception e)
{
{
new StreamPiAlert(e.getMessage(), StreamPiAlertType.ERROR).show();
new StreamPiAlert(e.getMessage(), StreamPiAlertType.ERROR).show();
e.printStackTrace();
e.printStackTrace();
}
}
finally
finally
{
{
loginAsNewUserButton.setDisable(false);
loginAsNewUserButton.setDisable(false);
}
}
});
});
}
}
TwitterFactory tf;
TwitterFactory tf;
@Override
@Override
public void initAction() throws Exception {
public void initAction() throws Exception {
//System.setProperty("twitter4j.http.useSSL", "true");
//System.setProperty("twitter4j.http.useSSL", "true");
setNewTwitterConfig(
setNewTwitterConfig(
getServerProperties().getSingleProperty("consumer_key").getStringValue(),
getServerProperties().getSingleProperty("consumer_key").getStringValue(),
getServerProperties().getSingleProperty("consumer_key_secret").getStringValue(),
getServerProperties().getSingleProperty("consumer_key_secret").getStringValue(),
getServerProperties().getSingleProperty("access_token").getStringValue(),
getServerProperties().getSingleProperty("access_token").getStringValue(),
getServerProperties().getSingleProperty("access_token_secret").getStringValue()
getServerProperties().getSingleProperty("access_token_secret").getStringValue()
);
);
}
}
public void setNewTwitterConfig(String consumerKey, String consumerKeySecret, String accessToken, String accessTokenSecret)
public void setNewTwitterConfig(String consumerKey, String consumerKeySecret, String accessToken, String accessTokenSecret)
{
{
ConfigurationBuilder cb = new ConfigurationBuilder();
ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setDebugEnabled(true)
cb.setDebugEnabled(true)
.setOAuthConsumerKey(consumerKey)
.setOAuthConsumerKey(consumerKey)
.setOAuthConsumerSecret(consumerKeySecret)
.setOAuthConsumerSecret(consumerKeySecret)
.setOAuthAccessToken(accessToken)
.setOAuthAccessToken(accessToken)
.setOAuthAccessTokenSecret(accessTokenSecret);
.setOAuthAccessTokenSecret(accessTokenSecret);
tf = new TwitterFactory(cb.build());
tf = new TwitterFactory(cb.build());
}
}
@Override
@Override
public void onActionClicked() throws Exception {
public void onActionClicked() throws Exception {
Twitter twitter = tf.getInstance();
Twitter twitter = tf.getInstance();
twitter.updateStatus(getClientProperties().getSingleProperty("tweet").getStringValue());
twitter.updateStatus(getClientProperties().getSingleProperty("tweet").getStringValue());
}
}
/*public String addRandomBlank(String value)
/*public String addRandomBlank(String value)
{
{
return value+("⠀".repeat(new Random().nextInt(100)));
return value+("⠀".repeat(new Random().nextInt(100)));
}*/
}*/
@Override
@Override
public void onShutDown() throws Exception {
public void onShutDown() throws Exception {
// TODO Auto-generated method stub
// TODO Auto-generated method stub
}
}
}
}
module com.stream_pi.twitteraction {
module com.stream_pi.twitteraction {
requires com.stream_pi.action_api;
requires com.stream_pi.action_api;
requires com.stream_pi.util;
requires com.stream_pi.util;
requires javafx.controls;
requires javafx.controls;
requires org.kordamp.ikonli.javafx;
requires org.kordamp.ikonli.javafx;
requires org.kordamp.ikonli.fontawesome5;
requires org.kordamp.ikonli.fontawesome5;
requires org.twitter4j.core;
requires org.twitter4j.core;
requires java.desktop;
requires java.desktop;
provides com.stream_pi.action_api.normalaction.NormalAction with com.stream_pi.twitteraction.TwitterAction;
provides com.stream_pi.action_api.externalplugin.ExternalPlugin with com.stream_pi.twitteraction.TwitterAction;
}
}