Skip to content

Commit bdf9f2d

Browse files
committed
fix: try resolving aliases off EDT
1 parent 0cbd78e commit bdf9f2d

24 files changed

+94
-92
lines changed

src/main/java/network/radicle/jetbrains/radiclejetbrainsplugin/actions/rad/RadAction.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import network.radicle.jetbrains.radiclejetbrainsplugin.config.RadicleSettingsView;
2020
import network.radicle.jetbrains.radiclejetbrainsplugin.dialog.IdentityDialog;
2121
import network.radicle.jetbrains.radiclejetbrainsplugin.models.RadDetails;
22+
import network.radicle.jetbrains.radiclejetbrainsplugin.services.RadicleCliService;
2223
import network.radicle.jetbrains.radiclejetbrainsplugin.services.RadicleProjectService;
2324
import network.radicle.jetbrains.radiclejetbrainsplugin.services.auth.AuthService;
2425
import org.jetbrains.annotations.NotNull;
@@ -36,10 +37,8 @@ public abstract class RadAction {
3637

3738
protected Project project;
3839
protected GitRepository repo;
39-
40-
public RadAction() {
41-
this(null, null);
42-
}
40+
protected RadicleCliService cli;
41+
protected RadicleProjectService rad;
4342

4443
public RadAction(Project project) {
4544
this(project, null);
@@ -52,6 +51,8 @@ public RadAction(GitRepository repo) {
5251
public RadAction(Project project, GitRepository repo) {
5352
this.project = project;
5453
this.repo = repo;
54+
this.cli = project.getService(RadicleCliService.class);
55+
this.rad = project.getService(RadicleProjectService.class);
5556
}
5657

5758
public abstract ProcessOutput run();
@@ -96,7 +97,6 @@ private ProcessOutput unlockIdentity(String radHome, String radPath, IdentityDia
9697
return new ProcessOutput(0);
9798
}
9899
var pr = project != null ? project : repo.getProject();
99-
var rad = pr.getService(RadicleProjectService.class);
100100
var output = rad.self(radHome, radPath);
101101
var lines = output.getStdoutLines(true);
102102
var radDetails = new RadDetails(lines);

src/main/java/network/radicle/jetbrains/radiclejetbrainsplugin/actions/rad/RadAuth.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import com.intellij.execution.process.ProcessOutput;
55
import com.intellij.openapi.project.Project;
66
import network.radicle.jetbrains.radiclejetbrainsplugin.RadicleBundle;
7-
import network.radicle.jetbrains.radiclejetbrainsplugin.services.RadicleProjectService;
87

98
public class RadAuth extends RadAction {
109
private final String alias;
@@ -49,7 +48,6 @@ public ProcessOutput run() {
4948
}
5049

5150
public ProcessOutput createNewIdentity() {
52-
var rad = project.getService(RadicleProjectService.class);
5351
var output = rad.auth(passphrase, alias, radHome, radPath);
5452
return validateOutput(output);
5553
}

src/main/java/network/radicle/jetbrains/radiclejetbrainsplugin/actions/rad/RadCheckout.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.intellij.execution.process.ProcessOutput;
44
import git4idea.repo.GitRepository;
5-
import network.radicle.jetbrains.radiclejetbrainsplugin.services.RadicleProjectService;
65

76
public class RadCheckout extends RadAction {
87
private String patchId;
@@ -14,7 +13,6 @@ public RadCheckout(GitRepository repo, String patchId) {
1413

1514
@Override
1615
public ProcessOutput run() {
17-
var rad = repo.getProject().getService(RadicleProjectService.class);
1816
return rad.checkout(repo, patchId);
1917
}
2018

src/main/java/network/radicle/jetbrains/radiclejetbrainsplugin/actions/rad/RadClone.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
import com.intellij.execution.process.ProcessOutput;
44
import com.intellij.openapi.project.Project;
5-
import network.radicle.jetbrains.radiclejetbrainsplugin.services.RadicleProjectService;
6-
75

86
public class RadClone extends RadAction {
97
private String radUrn;
@@ -26,7 +24,6 @@ public String getActionName() {
2624

2725
@Override
2826
public ProcessOutput run() {
29-
var rad = project.getService(RadicleProjectService.class);
3027
return rad.clone(radUrn, directory, this.radPath, this.radHome);
3128
}
3229
}

src/main/java/network/radicle/jetbrains/radiclejetbrainsplugin/actions/rad/RadCobList.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.intellij.execution.process.ProcessOutput;
44
import git4idea.repo.GitRepository;
5-
import network.radicle.jetbrains.radiclejetbrainsplugin.services.RadicleProjectService;
65

76
public class RadCobList extends RadAction {
87
private final String projectId;
@@ -16,7 +15,6 @@ public RadCobList(GitRepository repo, String projectId, Type type) {
1615

1716
@Override
1817
public ProcessOutput run() {
19-
var rad = project.getService(RadicleProjectService.class);
2018
return rad.cobList(repo, projectId, type);
2119
}
2220

src/main/java/network/radicle/jetbrains/radiclejetbrainsplugin/actions/rad/RadCobShow.java

Lines changed: 75 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
import com.intellij.execution.process.ProcessOutput;
55
import com.intellij.openapi.diagnostic.Logger;
66
import git4idea.repo.GitRepository;
7+
import network.radicle.jetbrains.radiclejetbrainsplugin.models.RadDiscussion;
78
import network.radicle.jetbrains.radiclejetbrainsplugin.models.RadIssue;
89
import network.radicle.jetbrains.radiclejetbrainsplugin.models.RadPatch;
910
import network.radicle.jetbrains.radiclejetbrainsplugin.services.RadicleCliService;
10-
import network.radicle.jetbrains.radiclejetbrainsplugin.services.RadicleProjectService;
1111

1212
public class RadCobShow extends RadAction {
1313
private static final Logger logger = Logger.getInstance(RadCobShow.class);
@@ -25,7 +25,6 @@ public RadCobShow(GitRepository repo, String projectId, String objectId, RadCobL
2525

2626
@Override
2727
public ProcessOutput run() {
28-
var rad = project.getService(RadicleProjectService.class);
2928
return rad.cobShow(repo, projectId, objectId, type);
3029
}
3130

@@ -39,8 +38,11 @@ public RadIssue getIssue() {
3938
RadIssue issue = null;
4039
try {
4140
issue = RadicleCliService.MAPPER.readValue(json, new TypeReference<>() { });
42-
var firstDiscussion = issue.discussion.getFirst();
43-
issue.author = firstDiscussion.author;
41+
tryResolveIssueAliases(issue);
42+
if (issue.discussion != null && !issue.discussion.isEmpty()) {
43+
var firstDiscussion = issue.discussion.getFirst();
44+
issue.author = firstDiscussion.author;
45+
}
4446
issue.project = repo.getProject();
4547
issue.repo = repo;
4648
issue.projectId = projectId;
@@ -61,13 +63,82 @@ public RadPatch getPatch() {
6163
RadPatch patch = null;
6264
try {
6365
patch = RadicleCliService.MAPPER.readValue(json, new TypeReference<>() { });
66+
tryResolvePatchAliases(patch);
6467
return patch;
6568
} catch (Exception e) {
6669
logger.warn("Unable to deserialize patch from json: " + json, e);
6770
}
6871
return patch;
6972
}
7073

74+
public void tryResolveIssueAliases(RadIssue issue) {
75+
if (issue.discussion != null && !issue.discussion.isEmpty()) {
76+
for (var disc : issue.discussion) {
77+
tryResolveDiscussionAliases(disc);
78+
}
79+
}
80+
if (issue.assignees != null && !issue.assignees.isEmpty()) {
81+
for (var as : issue.assignees) {
82+
as.tryResolveAlias(cli);
83+
}
84+
}
85+
}
86+
87+
public void tryResolvePatchAliases(RadPatch patch) {
88+
if (patch.author != null) {
89+
patch.author.tryResolveAlias(cli);
90+
}
91+
if (patch.revisions != null) {
92+
for (var rev : patch.revisions.values()) {
93+
if (rev.author() != null) {
94+
rev.author().tryResolveAlias(cli);
95+
}
96+
if (rev.edits() != null) {
97+
for (var edit : rev.edits()) {
98+
tryResolveEditAliases(edit);
99+
}
100+
}
101+
if (rev.discussion() != null && rev.discussion().comments != null) {
102+
for (var disc : rev.discussion().comments.values()) {
103+
tryResolveDiscussionAliases(disc);
104+
}
105+
}
106+
}
107+
}
108+
}
109+
110+
public void tryResolveEditAliases(RadPatch.Edit edit) {
111+
if (edit == null) {
112+
return;
113+
}
114+
if (edit.author() != null) {
115+
edit.author().tryResolveAlias(cli);
116+
}
117+
}
118+
119+
public void tryResolveDiscussionAliases(RadDiscussion disc) {
120+
if (disc == null) {
121+
return;
122+
}
123+
if (disc.author != null) {
124+
disc.author.tryResolveAlias(cli);
125+
}
126+
if (disc.edits != null) {
127+
for (var ed : disc.edits) {
128+
if (ed.author() != null) {
129+
ed.author().tryResolveAlias(cli);
130+
}
131+
}
132+
}
133+
if (disc.reactions != null) {
134+
for (var react : disc.reactions) {
135+
for (var auth : react.authors()) {
136+
auth.tryResolveAlias(cli);
137+
}
138+
}
139+
}
140+
}
141+
71142
@Override
72143
public String getActionName() {
73144
return null;

src/main/java/network/radicle/jetbrains/radiclejetbrainsplugin/actions/rad/RadComment.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.intellij.execution.process.ProcessOutput;
44
import git4idea.repo.GitRepository;
5-
import network.radicle.jetbrains.radiclejetbrainsplugin.services.RadicleProjectService;
65

76
public class RadComment extends RadAction {
87
private String replyTo;
@@ -27,7 +26,6 @@ public RadComment(GitRepository repo, String id, String comment, Type type) {
2726

2827
@Override
2928
public ProcessOutput run() {
30-
var rad = repo.getProject().getService(RadicleProjectService.class);
3129
return rad.comment(repo, id, comment, replyTo, type);
3230
}
3331

src/main/java/network/radicle/jetbrains/radiclejetbrainsplugin/actions/rad/RadInit.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.intellij.execution.process.ProcessOutput;
44
import git4idea.repo.GitRepository;
5-
import network.radicle.jetbrains.radiclejetbrainsplugin.services.RadicleProjectService;
65

76
public class RadInit extends RadAction {
87
private final String name;
@@ -25,7 +24,6 @@ public String getActionName() {
2524

2625
@Override
2726
public ProcessOutput run() {
28-
var rad = repo.getProject().getService(RadicleProjectService.class);
2927
return rad.init(repo, name, description, branch, visibility);
3028
}
3129
}

src/main/java/network/radicle/jetbrains/radiclejetbrainsplugin/actions/rad/RadIssueAssignee.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.intellij.execution.process.ProcessOutput;
44
import git4idea.repo.GitRepository;
5-
import network.radicle.jetbrains.radiclejetbrainsplugin.services.RadicleProjectService;
65

76
import java.util.List;
87

@@ -21,7 +20,6 @@ public RadIssueAssignee(GitRepository repo, String issueId, List<String> addedAs
2120

2221
@Override
2322
public ProcessOutput run() {
24-
var rad = project.getService(RadicleProjectService.class);
2523
return rad.addRemoveIssueAssignee(repo, issueId, addedAssignees, deleteAssignees);
2624
}
2725

src/main/java/network/radicle/jetbrains/radiclejetbrainsplugin/actions/rad/RadIssueCreate.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.intellij.execution.process.ProcessOutput;
44
import git4idea.repo.GitRepository;
5-
import network.radicle.jetbrains.radiclejetbrainsplugin.services.RadicleProjectService;
65

76
import java.util.List;
87

@@ -22,7 +21,6 @@ public RadIssueCreate(GitRepository repo, String title, String description, List
2221

2322
@Override
2423
public ProcessOutput run() {
25-
var rad = project.getService(RadicleProjectService.class);
2624
return rad.createIssue(repo, title, description, assignees, labels);
2725
}
2826

0 commit comments

Comments
 (0)