Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@

# CodeClocker Changelog

## [Unreleased]
## 1.0.2
### Added
- Initial scaffold created from [IntelliJ Platform Plugin Template](https://github.com/JetBrains/intellij-platform-plugin-template)
- Support IntelliJ Platform 2024.3.5
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# CodeClocker – IntelliJ Plugin for Tracking Developer Activity

![Build](https://github.com/codeclocker/codeclocker-intellij-plugin/actions/workflows/gradle.yml/badge.svg)
[![Version](https://img.shields.io/jetbrains/plugin/v/MARKETPLACE_ID.svg)](https://plugins.jetbrains.com/plugin/MARKETPLACE_ID)
[![Downloads](https://img.shields.io/jetbrains/plugin/d/MARKETPLACE_ID.svg)](https://plugins.jetbrains.com/plugin/MARKETPLACE_ID)
[![Version](https://img.shields.io/jetbrains/plugin/v/MARKETPLACE_ID.svg)](https://plugins.jetbrains.com/plugin/26962)
[![Downloads](https://img.shields.io/jetbrains/plugin/d/MARKETPLACE_ID.svg)](https://plugins.jetbrains.com/plugin/26962)

<!-- Plugin description -->

Expand All @@ -29,9 +29,9 @@ CodeClocker automatically tracks coding activity and visualizes it on web dashbo

- Using JetBrains Marketplace:

Go to [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/MARKETPLACE_ID) and install it by clicking the <kbd>Install to ...</kbd> button in case your IDE is running.
Go to [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/26962) and install it by clicking the <kbd>Install to ...</kbd> button in case your IDE is running.

You can also download the [latest release](https://plugins.jetbrains.com/plugin/MARKETPLACE_ID/versions) from JetBrains Marketplace and install it manually using
You can also download the [latest release](https://plugins.jetbrains.com/plugin/26962/versions) from JetBrains Marketplace and install it manually using
<kbd>Settings/Preferences</kbd> > <kbd>Plugins</kbd> > <kbd>⚙️</kbd> > <kbd>Install plugin from disk...</kbd>

- Manually:
Expand Down
6 changes: 3 additions & 3 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ version = providers.gradleProperty("pluginVersion").get()

// Set the JVM language level used to build the project.
kotlin {
jvmToolchain(17)
jvmToolchain(21)
}

// Configure project's dependencies
Expand All @@ -33,6 +33,7 @@ repositories {
// Dependencies are managed with Gradle version catalog - read more: https://docs.gradle.org/current/userguide/platforms.html#sub:version-catalog
dependencies {
testImplementation(libs.junit)
testImplementation(libs.opentest4j)

// IntelliJ Platform Gradle Plugin Dependencies Extension - read more: https://plugins.jetbrains.com/docs/intellij/tools-intellij-platform-gradle-plugin-dependencies-extension.html
intellijPlatform {
Expand All @@ -44,15 +45,14 @@ dependencies {
// Plugin Dependencies. Uses `platformPlugins` property from the gradle.properties file for plugin from JetBrains Marketplace.
plugins(providers.gradleProperty("platformPlugins").map { it.split(',') })

pluginVerifier()
zipSigner()
testFramework(TestFrameworkType.Platform)
}
}

// Configure IntelliJ Platform Gradle Plugin - read more: https://plugins.jetbrains.com/docs/intellij/tools-intellij-platform-gradle-plugin-extension.html
intellijPlatform {
pluginConfiguration {
name = providers.gradleProperty("pluginName")
version = providers.gradleProperty("pluginVersion")

// Extract the <!-- Plugin description --> section from README.md and provide for the plugin's manifest
Expand Down
14 changes: 7 additions & 7 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,24 @@ pluginGroup = com.codeclocker
pluginName = CodeClocker - IntelliJ IDEA Activity Tracker
pluginRepositoryUrl = https://github.com/codeclocker/codeclocker-intellij-plugin
# SemVer format -> https://semver.org
pluginVersion = 1.0.0
pluginVersion = 1.0.2

# Supported build number ranges and IntelliJ Platform versions -> https://plugins.jetbrains.com/docs/intellij/build-number-ranges.html
pluginSinceBuild = 233
pluginUntilBuild = 242.*
pluginSinceBuild = 242
pluginUntilBuild = 252.*

# IntelliJ Platform Properties -> https://plugins.jetbrains.com/docs/intellij/tools-gradle-intellij-plugin.html#configuration-intellij-extension
platformType = IC
platformVersion = 2023.3.8
platformVersion = 2024.2.5

# Plugin Dependencies -> https://plugins.jetbrains.com/docs/intellij/plugin-dependencies.html
# Example: platformPlugins = com.jetbrains.php:203.4449.22, org.intellij.scala:2023.3.27@EAP
platformPlugins =
# Example: platformBundledPlugins = com.intellij.java
platformBundledPlugins = com.intellij.java
platformBundledPlugins =

# Gradle Releases -> https://github.com/gradle/gradle/releases
gradleVersion = 8.10.2
gradleVersion = 8.13

# Opt-out flag for bundling Kotlin standard library -> https://jb.gg/intellij-platform-kotlin-stdlib
kotlin.stdlib.default.dependency = false
Expand All @@ -30,4 +30,4 @@ kotlin.stdlib.default.dependency = false
org.gradle.configuration-cache = true

# Enable Gradle Build Cache -> https://docs.gradle.org/current/userguide/build_cache.html
org.gradle.caching = true
org.gradle.caching = true
10 changes: 6 additions & 4 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
[versions]
# libraries
junit = "4.13.2"
opentest4j = "1.3.0"

# plugins
changelog = "2.2.1"
intelliJPlatform = "2.3.0"
kotlin = "1.9.25"
kover = "0.8.3"
qodana = "2024.2.3"
intelliJPlatform = "2.5.0"
kotlin = "2.1.20"
kover = "0.9.1"
qodana = "2024.3.4"

[libraries]
junit = { group = "junit", name = "junit", version.ref = "junit" }
opentest4j = { group = "org.opentest4j", name = "opentest4j", version.ref = "opentest4j" }

[plugins]
changelog = { id = "org.jetbrains.changelog", version.ref = "changelog" }
Expand Down
5 changes: 2 additions & 3 deletions gradlew

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion src/main/java/com/codeclocker/plugin/intellij/HubHost.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@ public class HubHost {
public static final String HUB_UI_HOST = "https://hub.codeclocker.com";
public static final String HUB_API_HOST = "https://hub.codeclocker.com";
// public static final String HUB_UI_HOST = "http://localhost:5173";
// public static final String HUB_API_HOST = "http://localhost:8080";
// public static final String HUB_API_HOST = "http://localhost:8080";
}
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ private void checkApiKeyState() {
cancelTask();
}
} catch (Exception ex) {
LOG.error("Failed to check API key state: {}", ex.getMessage());
LOG.debug("Failed to check API key state: {}", ex.getMessage());
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,9 @@
import static com.codeclocker.plugin.intellij.HubHost.HUB_API_HOST;
import static com.codeclocker.plugin.intellij.Timeouts.CONNECT_TIMEOUT;
import static com.codeclocker.plugin.intellij.Timeouts.READ_TIMEOUT;
import static com.codeclocker.plugin.intellij.http.HttpResponseReader.readResponse;

import com.intellij.openapi.diagnostic.Logger;
import com.intellij.util.net.HttpConfigurable;
import java.net.HttpURLConnection;
import com.intellij.util.io.HttpRequests;
import org.jetbrains.annotations.Nullable;

public class CheckApiKeyStateHttpClient {
Expand All @@ -18,20 +16,13 @@ public class CheckApiKeyStateHttpClient {
public String check(String apiKey) {
LOG.debug("Checking subscription state by API Key: {}", apiKey);
try {
HttpURLConnection connection =
(HttpURLConnection)
HttpConfigurable.getInstance()
.openConnection(HUB_API_HOST + "/api/v1/subscriptions/state-by-api-key");
connection.setConnectTimeout(CONNECT_TIMEOUT);
connection.setReadTimeout(READ_TIMEOUT);
connection.setRequestMethod("GET");
connection.setRequestProperty("X-codeclocker-api-key", apiKey);
connection.setDoOutput(true);

LOG.debug("HTTP Response Code: " + connection.getResponseCode());
return readResponse(connection);
return HttpRequests.request(HUB_API_HOST + "/api/v1/subscriptions/state-by-api-key")
.connectTimeout(CONNECT_TIMEOUT)
.readTimeout(READ_TIMEOUT)
.tuner(connection -> connection.setRequestProperty("X-codeclocker-api-key", apiKey))
.readString();
} catch (Exception ex) {
LOG.error("Error checking subscription state: {}", ex.getMessage());
LOG.debug("Error checking subscription state: {}", ex.getMessage());
return null;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,11 @@ public class ConfigProvider {
private static final String NEXT_CONFIG_LOAD_TIMESTAMP =
"com.codeclocker.config.next-config-load-timestamp";

private final PluginConfigClient pluginConfigClient;
private final PluginConfigHttpClient pluginConfigHttpClient;

public ConfigProvider() {
this.pluginConfigClient =
ApplicationManager.getApplication().getService(PluginConfigClient.class);
this.pluginConfigHttpClient =
ApplicationManager.getApplication().getService(PluginConfigHttpClient.class);
long nextConfigLoadTimestamp =
PropertiesComponent.getInstance().getLong(NEXT_CONFIG_LOAD_TIMESTAMP, -1);
long now = System.currentTimeMillis();
Expand Down Expand Up @@ -57,9 +57,9 @@ private static int getProperty(String property) {
private void loadConfig() {
try {
String apiKey = ApiKeyLifecycle.getActiveApiKey();
PluginConfigDto config = pluginConfigClient.getConfig(apiKey);
PluginConfigDto config = pluginConfigHttpClient.getConfig(apiKey);
if (config == null) {
LOG.error("Failed to load plugin config");
LOG.debug("Failed to load plugin config");
return;
}

Expand All @@ -77,7 +77,7 @@ private void loadConfig() {
propertiesComponent.setValue(
NEXT_CONFIG_LOAD_TIMESTAMP, String.valueOf(nextConfigLoadTimestamp.toMillis()));
} catch (Exception e) {
LOG.error("Error loading config from hub: {}", e.getMessage());
LOG.debug("Error loading config from hub: {}", e.getMessage());
}
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package com.codeclocker.plugin.intellij.config;

import static com.codeclocker.plugin.intellij.HubHost.HUB_API_HOST;
import static com.codeclocker.plugin.intellij.JsonMapper.OBJECT_MAPPER;
import static com.codeclocker.plugin.intellij.Timeouts.CONNECT_TIMEOUT;
import static com.codeclocker.plugin.intellij.Timeouts.READ_TIMEOUT;
import static org.apache.commons.lang3.StringUtils.isNotBlank;

import com.intellij.openapi.diagnostic.Logger;
import com.intellij.util.io.HttpRequests;
import org.jetbrains.annotations.Nullable;

public class PluginConfigHttpClient {

private static final Logger LOG = Logger.getInstance(PluginConfigHttpClient.class);

@Nullable
public PluginConfigDto getConfig(String apiKey) {
LOG.debug("Getting plugin config with API Key: {}", apiKey);
try {
String response =
HttpRequests.request(HUB_API_HOST + "/api/v1/plugin-configs")
.connectTimeout(CONNECT_TIMEOUT)
.readTimeout(READ_TIMEOUT)
.tuner(
connection -> {
if (isNotBlank(apiKey)) {
connection.setRequestProperty("X-codeclocker-api-key", apiKey);
}
})
.readString();

return OBJECT_MAPPER.readValue(response, PluginConfigDto.class);
} catch (Exception ex) {
LOG.debug("Error getting plugin config: " + ex.getMessage());
}

return null;
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public void eventDispatched(AWTEvent event) {

Project project = getProject(component);
if (project == null) {
LOG.error("Project is null. Doing nothing");
LOG.debug("Project is null. Doing nothing");
return;
}

Expand Down
Loading