@@ -23,6 +23,7 @@ public class LinkProcessor : IBackgroundProcessor
2323 private readonly IDbConnectionFactory _dbConnectionFactory ;
2424 private readonly ResourceAccessManager _resourceAccessManager ;
2525 private readonly SubmissionBrowser _submissionBrowser ;
26+ private readonly SubredditBrowser _subredditBrowser ;
2627
2728 public LinkProcessor ( ILogger < LinkProcessor > logger ,
2829 LinkProvider linkProvider ,
@@ -32,7 +33,8 @@ public LinkProcessor(ILogger<LinkProcessor> logger,
3233 TemplateCache templateCache ,
3334 IDbConnectionFactory dbConnectionFactory ,
3435 ResourceAccessManager resourceAccessManager ,
35- SubmissionBrowser submissionBrowser
36+ SubmissionBrowser submissionBrowser ,
37+ SubredditBrowser subredditBrowser
3638 )
3739 {
3840 _logger = logger ;
@@ -44,6 +46,7 @@ SubmissionBrowser submissionBrowser
4446 _dbConnectionFactory = dbConnectionFactory ;
4547 _resourceAccessManager = resourceAccessManager ;
4648 _submissionBrowser = submissionBrowser ;
49+ _subredditBrowser = subredditBrowser ;
4750 }
4851
4952 /// <inheritdoc />
@@ -111,40 +114,34 @@ private async Task<bool> IsCommentAbleToBePosted(LinkThing redditPostId, Cancell
111114
112115 private async Task ProcessLink ( string redditPostId , int queuedItemId , CancellationToken cancellationToken )
113116 {
114- var links = await _linkProvider . GetLinksByRedditPostId ( redditPostId ) ;
115- var maybeExistingComment = await _commentProvider . FindCommentIdByPostId ( redditPostId ) ;
117+ var redditPostLinkId = LinkThing . CreateFromShortId ( redditPostId ) ;
118+
119+ var maybeExistingSubmission = await _submissionBrowser . GetSubmission ( redditPostLinkId ) ;
120+ var links = await _linkProvider . GetLinksByRedditPostId ( redditPostLinkId . ShortId ) ;
121+ var maybeExistingComment = await _commentProvider . FindCommentIdByPostId ( redditPostLinkId . ShortId ) ;
116122
117123 await using var connection = _dbConnectionFactory . CreateConnection ( ) ;
118124 await using var lazyTx = LazyDbTransaction . CreateFrom ( connection , IsolationLevel . Serializable ) ;
119125
120- if ( ! links . Any ( ) )
126+ if ( ! maybeExistingSubmission . Try ( out var submission ) )
127+ {
128+ _logger . LogDebug ( "Submission {RedditPostId} not found, skipping processing" , redditPostLinkId ) ;
129+ }
130+ else if ( links . Count == 0 && maybeExistingComment . HasValue )
121131 {
122- if ( maybeExistingComment . HasValue )
123- await _commentBrowser . DeleteComment ( CommentThing . CreateFromShortId ( maybeExistingComment . Value ) ) ;
132+ await _commentBrowser . DeleteComment ( CommentThing . CreateFromShortId ( maybeExistingComment . Value ) ) ;
124133 }
125134 else
126135 {
127- var redditPostLinkId = LinkThing . CreateFromShortId ( redditPostId ) ;
128-
129- var message = await BuildComment ( links ,
130- getUsername : async userId => ( await _userProvider . FindUserByIdIncludeDeleted ( userId ) ) . Value . DisplayUsername ,
136+ var subreddit = await _subredditBrowser . GetAboutSubreddit ( submission . Subreddit ) ;
137+
138+ await CreateOrEditComment (
139+ lazyTx ,
140+ redditPostLinkId ,
141+ links ,
142+ maybeExistingComment ,
143+ isUserModerator : subreddit . Data . IsUserModerator ,
131144 cancellationToken ) ;
132-
133- if ( maybeExistingComment . HasValue )
134- {
135- var result = await _commentBrowser . EditComment ( CommentThing . CreateFromShortId ( maybeExistingComment . Value ) , message ) ;
136- await TryDistinguishStickyAndLockLogFailure ( result . ParentId , result . CommentId ) ;
137- }
138- else if ( await IsCommentAbleToBePosted ( redditPostLinkId , cancellationToken ) )
139- {
140- var result = await _commentBrowser . SubmitComment ( redditPostLinkId , message ) ;
141- await TryDistinguishStickyAndLockLogFailure ( result . ParentId , result . CommentId ) ;
142-
143- #pragma warning disable IDISP001
144- var innerTx = await lazyTx . GetOrCreateTx ( cancellationToken ) ;
145- #pragma warning restore IDISP001
146- await RedditCommentProvider . CreateOrUpdateLinkedComment ( innerTx , redditPostId , result . CommentId . ShortId ) ;
147- }
148145 }
149146
150147#pragma warning disable IDISP001
@@ -156,6 +153,40 @@ private async Task ProcessLink(string redditPostId, int queuedItemId, Cancellati
156153 await tx . Commit ( cancellationToken ) ;
157154 }
158155
156+ private async Task CreateOrEditComment (
157+ LazyDbTransaction lazyTx ,
158+ LinkThing redditPostId ,
159+ IReadOnlyCollection < Link > links ,
160+ Maybe < string > maybeExistingComment ,
161+ bool isUserModerator ,
162+ CancellationToken cancellationToken
163+ )
164+ {
165+ var message = await BuildComment ( links ,
166+ getUsername : async userId => ( await _userProvider . FindUserByIdIncludeDeleted ( userId ) ) . Value . DisplayUsername ,
167+ cancellationToken ) ;
168+
169+ if ( maybeExistingComment . HasValue )
170+ {
171+ var result = await _commentBrowser . EditComment ( CommentThing . CreateFromShortId ( maybeExistingComment . Value ) , message ) ;
172+
173+ if ( isUserModerator )
174+ await TryDistinguishStickyAndLockLogFailure ( result . ParentId , result . CommentId ) ;
175+ }
176+ else if ( await IsCommentAbleToBePosted ( redditPostId , cancellationToken ) )
177+ {
178+ var result = await _commentBrowser . SubmitComment ( redditPostId , message ) ;
179+
180+ if ( isUserModerator )
181+ await TryDistinguishStickyAndLockLogFailure ( result . ParentId , result . CommentId ) ;
182+
183+ #pragma warning disable IDISP001
184+ var innerTx = await lazyTx . GetOrCreateTx ( cancellationToken ) ;
185+ #pragma warning restore IDISP001
186+ await RedditCommentProvider . CreateOrUpdateLinkedComment ( innerTx , redditPostId . ShortId , result . CommentId . ShortId ) ;
187+ }
188+ }
189+
159190 private async Task < string > BuildComment ( IReadOnlyCollection < Link > links , Func < int , Task < string > > getUsername , CancellationToken cancellationToken )
160191 {
161192 var mirrors = links
@@ -196,7 +227,10 @@ static async IAsyncEnumerable<string> BuildSection(string heading, string prefix
196227 }
197228 }
198229
199- private async Task TryDistinguishStickyAndLockLogFailure ( OneOf < LinkThing , CommentThing > parent , CommentThing comment )
230+ private async Task TryDistinguishStickyAndLockLogFailure (
231+ OneOf < LinkThing , CommentThing > parent ,
232+ CommentThing comment
233+ )
200234 {
201235 try
202236 {
0 commit comments