Skip to content

Commit 39331b7

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

File tree

5 files changed

+93
-14
lines changed

5 files changed

+93
-14
lines changed

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

Lines changed: 5 additions & 4 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();

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/models/RadAuthor.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@ public String toString() {
3838
return "{\"id\": " + id + "\", \"alias\": \"" + alias + "\"}";
3939
}
4040

41-
public void tryResolveAlias(RadicleCliService rad) {
42-
if (Strings.isNullOrEmpty(alias) && rad != null) {
43-
alias = Strings.nullToEmpty(rad.getAlias(id));
41+
public void tryResolveAlias(RadicleCliService cli) {
42+
if (Strings.isNullOrEmpty(alias) && cli != null) {
43+
alias = Strings.nullToEmpty(cli.getAlias(id));
4444
}
4545
}
4646

@@ -49,4 +49,9 @@ public boolean contains(RadicleCliService rad, String query) {
4949
final var cq = Strings.nullToEmpty(query).toLowerCase();
5050
return Strings.nullToEmpty(id).toLowerCase().contains(cq) || Strings.nullToEmpty(alias).toLowerCase().contains(cq);
5151
}
52+
53+
public boolean contains(String query) {
54+
final var cq = Strings.nullToEmpty(query).toLowerCase();
55+
return Strings.nullToEmpty(id).toLowerCase().contains(cq) || Strings.nullToEmpty(alias).toLowerCase().contains(cq);
56+
}
5257
}

src/main/java/network/radicle/jetbrains/radiclejetbrainsplugin/models/Reaction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@
44

55
public record Reaction(String emoji, List<RadAuthor> authors) {
66
public RadAuthor findAuthor(String did) {
7-
return authors.stream().filter(r -> did.contains(r.id)).findFirst().orElse(null);
7+
return authors.stream().filter(r -> r.contains(did)).findFirst().orElse(null);
88
}
99
}

src/main/java/network/radicle/jetbrains/radiclejetbrainsplugin/services/RadicleCliService.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,7 @@ public RadIssue getIssue(GitRepository repo, String projectId, String objectId)
104104
public List<RadIssue> getIssues(GitRepository repo, String projectId) {
105105
var cobList = new RadCobList(repo, projectId, RadCobList.Type.ISSUE);
106106
var listOutput = cobList.perform();
107-
var listOutputSuccess = RadAction.isSuccess(listOutput);
108-
if (!listOutputSuccess) {
107+
if (!RadAction.isSuccess(listOutput)) {
109108
return List.of();
110109
}
111110
var issueIds = listOutput.getStdoutLines();
@@ -350,6 +349,9 @@ public RadProject getRadRepo(GitRepository repo) {
350349
}
351350
}
352351
delegates.add(new RadAuthor(key, alias));
352+
if (!Strings.isNullOrEmpty(alias)) {
353+
jrad.aliases.put(RadicleNativeService.normalizeNid(key), alias);
354+
}
353355
}
354356

355357
radRepo = new RadProject(radProjectId, name, description, defaultBranch, delegates);

0 commit comments

Comments
 (0)