From 1f517aa47913090c409178db1d01ceb370c9ac87 Mon Sep 17 00:00:00 2001 From: Anas Elgarhy Date: Fri, 19 Aug 2022 22:26:49 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=98=86=20Compleate=20the=20plugin=20base?= =?UTF-8?q?=20yooooo=20=F0=9F=A5=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugins/ayah/AyahPreLoadingActivity.java | 20 +++++++ .../plugins/ayah/AyahStartupActivity.java | 3 + .../plugins/ayah/NotificationTimer.java | 34 +++++++++++ .../plugins/ayah/NotificationTimerTask.java | 56 +++++++++++++++++++ .../settings/AyahSettingsConfigurable.java | 9 ++- .../ayah/settings/AyahSettingsState.java | 2 +- src/main/resources/META-INF/plugin.xml | 2 + 7 files changed, 124 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/anas/intellij/plugins/ayah/AyahPreLoadingActivity.java create mode 100644 src/main/java/com/anas/intellij/plugins/ayah/NotificationTimer.java create mode 100644 src/main/java/com/anas/intellij/plugins/ayah/NotificationTimerTask.java diff --git a/src/main/java/com/anas/intellij/plugins/ayah/AyahPreLoadingActivity.java b/src/main/java/com/anas/intellij/plugins/ayah/AyahPreLoadingActivity.java new file mode 100644 index 0000000..e5307ec --- /dev/null +++ b/src/main/java/com/anas/intellij/plugins/ayah/AyahPreLoadingActivity.java @@ -0,0 +1,20 @@ +package com.anas.intellij.plugins.ayah; + +import com.intellij.openapi.application.PreloadingActivity; +import com.intellij.openapi.progress.ProgressIndicator; +import org.jetbrains.annotations.NotNull; + +/** + * @author: Anas Elgarhy + * @date: 8/19/22 + */ +public class AyahPreLoadingActivity extends PreloadingActivity { + @Override + public void preload(@NotNull ProgressIndicator indicator) { +/* + // Start notification timer. + indicator.setText("Ayah is preloading..."); + NotificationTimer.INSTANCE.start(); +*/ + } +} diff --git a/src/main/java/com/anas/intellij/plugins/ayah/AyahStartupActivity.java b/src/main/java/com/anas/intellij/plugins/ayah/AyahStartupActivity.java index 93d513b..72db903 100644 --- a/src/main/java/com/anas/intellij/plugins/ayah/AyahStartupActivity.java +++ b/src/main/java/com/anas/intellij/plugins/ayah/AyahStartupActivity.java @@ -19,6 +19,7 @@ public class AyahStartupActivity implements StartupActivity { @Override public void runActivity(@NotNull final Project project) { final var basmalhOnStartSettingsState = AyahSettingsState.getInstance().getBasmalhOnStart(); + // Basmalh on start if (basmalhOnStartSettingsState.isActive()) { try { final var bassmalh = Ayah.getAyah(1, @@ -34,5 +35,7 @@ public class AyahStartupActivity implements StartupActivity { e.printStackTrace(); } } + // Start notification timer. + NotificationTimer.INSTANCE.start(project); } } diff --git a/src/main/java/com/anas/intellij/plugins/ayah/NotificationTimer.java b/src/main/java/com/anas/intellij/plugins/ayah/NotificationTimer.java new file mode 100644 index 0000000..a88e7cb --- /dev/null +++ b/src/main/java/com/anas/intellij/plugins/ayah/NotificationTimer.java @@ -0,0 +1,34 @@ +package com.anas.intellij.plugins.ayah; + +import com.anas.intellij.plugins.ayah.settings.AyahSettingsState; +import com.intellij.openapi.project.Project; +import org.jetbrains.annotations.NotNull; + +import java.util.Timer; + +/** + * @author: Anas Elgarhy + * @date: 8/19/22 + */ +public enum NotificationTimer { + INSTANCE + ; + + private final Timer timer; + private final NotificationTimerTask notificationTimerTask; + + NotificationTimer() { + timer = new Timer(); + notificationTimerTask = new NotificationTimerTask(); + } + public void start(@NotNull Project project) { + notificationTimerTask.setProject(project); + timer.schedule(notificationTimerTask, 0, + (long) AyahSettingsState.getInstance().getIntervalTimeBetweenNotifications() * 60 * 1000); + } + + public void updateIntervalTimeBetweenNotifications(final int intervalTimeBetweenNotifications) { + timer.cancel(); + timer.schedule(notificationTimerTask, 0, (long) intervalTimeBetweenNotifications * 60 * 1000); + } +} diff --git a/src/main/java/com/anas/intellij/plugins/ayah/NotificationTimerTask.java b/src/main/java/com/anas/intellij/plugins/ayah/NotificationTimerTask.java new file mode 100644 index 0000000..6d0674b --- /dev/null +++ b/src/main/java/com/anas/intellij/plugins/ayah/NotificationTimerTask.java @@ -0,0 +1,56 @@ +package com.anas.intellij.plugins.ayah; + +import com.anas.alqurancloudapi.Ayah; +import com.anas.intellij.plugins.ayah.audio.AudioPlayer; +import com.anas.intellij.plugins.ayah.settings.AyahSettingsState; +import com.intellij.notification.Notification; +import com.intellij.notification.NotificationType; +import com.intellij.openapi.actionSystem.AnAction; +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.project.Project; +import org.jetbrains.annotations.NotNull; + +import java.io.IOException; +import java.util.TimerTask; + +/** + * @author: Anas Elgarhy + * @date: 8/19/22 + */ +public class NotificationTimerTask extends TimerTask { + private Project project; + @Override + public void run() { + final var settings = AyahSettingsState.getInstance(); + + try { + final var randomAyah = Ayah.getRandomAyah(); + + // Set up the notification. + final var notification = new Notification("Random Ayah Notification", + randomAyah.getSurah().getName(), randomAyah.getText(), NotificationType.INFORMATION); + + notification.addAction(new AnAction() { + @Override + public void actionPerformed(@NotNull AnActionEvent e) { + System.out.println("Action performed"); + } + }); + + // Show notification + notification.notify(project); + + // Play sound if enabled. + if (settings.isAutoPlayAudio()) { + new AudioPlayer(settings.getVolume(), randomAyah.getAudioUrl()).play(); + } + + } catch (final IOException e) { + e.printStackTrace(); + } + } + + public void setProject(final Project project) { + this.project = project; + } +} diff --git a/src/main/java/com/anas/intellij/plugins/ayah/settings/AyahSettingsConfigurable.java b/src/main/java/com/anas/intellij/plugins/ayah/settings/AyahSettingsConfigurable.java index 611c8c6..3a184d9 100644 --- a/src/main/java/com/anas/intellij/plugins/ayah/settings/AyahSettingsConfigurable.java +++ b/src/main/java/com/anas/intellij/plugins/ayah/settings/AyahSettingsConfigurable.java @@ -1,7 +1,7 @@ package com.anas.intellij.plugins.ayah.settings; +import com.anas.intellij.plugins.ayah.NotificationTimer; import com.intellij.openapi.options.Configurable; -import com.intellij.openapi.options.ConfigurationException; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.Nullable; @@ -40,6 +40,13 @@ public class AyahSettingsConfigurable implements Configurable { settingsState.setAutoPlayAudio(settingsComponent.isAutoPlayAudio()); settingsState.setPlayerId(settingsComponent.getPlayerId()); settingsState.setVolume(settingsComponent.getVolume()); + + // Update the timer with the new interval time between notifications if interval time between notifications has changed + if (settingsState.getIntervalTimeBetweenNotifications() != + settingsComponent.getIntervalTimeBetweenNotifications()) { + NotificationTimer.INSTANCE + .updateIntervalTimeBetweenNotifications(settingsState.getIntervalTimeBetweenNotifications()); + } } @Override diff --git a/src/main/java/com/anas/intellij/plugins/ayah/settings/AyahSettingsState.java b/src/main/java/com/anas/intellij/plugins/ayah/settings/AyahSettingsState.java index 780a889..b93fa5e 100644 --- a/src/main/java/com/anas/intellij/plugins/ayah/settings/AyahSettingsState.java +++ b/src/main/java/com/anas/intellij/plugins/ayah/settings/AyahSettingsState.java @@ -62,7 +62,7 @@ public class AyahSettingsState implements PersistentStateComponent + + \ No newline at end of file