44import com .intellij .execution .process .ProcessOutput ;
55import com .intellij .openapi .diagnostic .Logger ;
66import git4idea .repo .GitRepository ;
7+ import network .radicle .jetbrains .radiclejetbrainsplugin .models .RadDiscussion ;
78import network .radicle .jetbrains .radiclejetbrainsplugin .models .RadIssue ;
89import network .radicle .jetbrains .radiclejetbrainsplugin .models .RadPatch ;
910import network .radicle .jetbrains .radiclejetbrainsplugin .services .RadicleCliService ;
10- import network .radicle .jetbrains .radiclejetbrainsplugin .services .RadicleProjectService ;
1111
1212public 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 ;
0 commit comments