@@ -22,6 +22,7 @@ public class LinkProcessor : IBackgroundProcessor
2222 private readonly TemplateCache _templateCache ;
2323 private readonly IDbConnectionFactory _dbConnectionFactory ;
2424 private readonly ResourceAccessManager _resourceAccessManager ;
25+ private readonly SubmissionBrowser _submissionBrowser ;
2526
2627 public LinkProcessor ( ILogger < LinkProcessor > logger ,
2728 LinkProvider linkProvider ,
@@ -30,7 +31,8 @@ public LinkProcessor(ILogger<LinkProcessor> logger,
3031 UserProvider userProvider ,
3132 TemplateCache templateCache ,
3233 IDbConnectionFactory dbConnectionFactory ,
33- ResourceAccessManager resourceAccessManager
34+ ResourceAccessManager resourceAccessManager ,
35+ SubmissionBrowser submissionBrowser
3436 )
3537 {
3638 _logger = logger ;
@@ -41,6 +43,7 @@ ResourceAccessManager resourceAccessManager
4143 _templateCache = templateCache ;
4244 _dbConnectionFactory = dbConnectionFactory ;
4345 _resourceAccessManager = resourceAccessManager ;
46+ _submissionBrowser = submissionBrowser ;
4447 }
4548
4649 /// <inheritdoc />
@@ -82,6 +85,30 @@ private async Task WithLogging(string redditPostId, int queuedItemId, Func<Cance
8285 }
8386 }
8487
88+ private async Task < bool > IsCommentAbleToBePosted ( LinkThing redditPostId , CancellationToken cancellationToken )
89+ {
90+ var maybeSubmission = await _submissionBrowser . GetSubmission ( redditPostId ) ;
91+
92+ if ( ! maybeSubmission . Try ( out var submission ) )
93+ {
94+ _logger . LogDebug ( "Submission {RedditPostId} not found, skipping processing" , redditPostId ) ;
95+ return false ;
96+ }
97+
98+ if ( submission . IsLocked )
99+ {
100+ _logger . LogDebug ( "Submission {RedditPostId} is locked, skipping processing" , redditPostId ) ;
101+ return false ;
102+ }
103+ else if ( submission . IsArchived )
104+ {
105+ _logger . LogDebug ( "Submission {RedditPostId} is archived, skipping processing" , redditPostId ) ;
106+ return false ;
107+ }
108+
109+ return true ;
110+ }
111+
85112 private async Task ProcessLink ( string redditPostId , int queuedItemId , CancellationToken cancellationToken )
86113 {
87114 var links = await _linkProvider . GetLinksByRedditPostId ( redditPostId ) ;
@@ -97,6 +124,8 @@ private async Task ProcessLink(string redditPostId, int queuedItemId, Cancellati
97124 }
98125 else
99126 {
127+ var redditPostLinkId = LinkThing . CreateFromShortId ( redditPostId ) ;
128+
100129 var message = await BuildComment ( links ,
101130 getUsername : async userId => ( await _userProvider . FindUserByIdIncludeDeleted ( userId ) ) . Value . DisplayUsername ,
102131 cancellationToken ) ;
@@ -106,9 +135,9 @@ private async Task ProcessLink(string redditPostId, int queuedItemId, Cancellati
106135 var result = await _commentBrowser . EditComment ( CommentThing . CreateFromShortId ( maybeExistingComment . Value ) , message ) ;
107136 await TryDistinguishStickyAndLockLogFailure ( result . ParentId , result . CommentId ) ;
108137 }
109- else
138+ else if ( await IsCommentAbleToBePosted ( redditPostLinkId , cancellationToken ) )
110139 {
111- var result = await _commentBrowser . SubmitComment ( LinkThing . CreateFromShortId ( redditPostId ) , message ) ;
140+ var result = await _commentBrowser . SubmitComment ( redditPostLinkId , message ) ;
112141 await TryDistinguishStickyAndLockLogFailure ( result . ParentId , result . CommentId ) ;
113142
114143#pragma warning disable IDISP001
0 commit comments