Skip to content

Commit 1bccc4e

Browse files
committed
* prefer implemented interface over derived interface or classes from List<> for type of method param or return value
+ extension method `ICollection.AddRange()` @ `crawler.ExtensionMethods` @ c#
1 parent 07b6acc commit 1bccc4e

File tree

18 files changed

+55
-51
lines changed

18 files changed

+55
-51
lines changed

c#/crawler/src/Helper.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ public static byte[]? SerializedProtoBufWrapperOrNullIfEmpty<T>
1818
? null
1919
: SerializedProtoBufOrNullIfEmpty(wrapperFactory());
2020

21-
public static IReadOnlyList<Content>? ParseThenUnwrapPostContent(byte[]? serializedProtoBuf) =>
21+
public static IEnumerable<Content>? ParseThenUnwrapPostContent(byte[]? serializedProtoBuf) =>
2222
serializedProtoBuf == null ? null : PostContentWrapper.Parser.ParseFrom(serializedProtoBuf).Value;
2323

24-
public static PostContentWrapper? WrapPostContent(IReadOnlyList<Content>? contents) =>
24+
public static PostContentWrapper? WrapPostContent(IEnumerable<Content>? contents) =>
2525
contents == null ? null : new() {Value = {contents}};
2626

2727
public static void GetNowTimestamp(out Time now) => now = GetNowTimestamp();

c#/crawler/src/SonicPusher.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public SonicPusher(ILogger<SonicPusher> logger, IConfiguration config)
2222

2323
public void Dispose() => Ingest.Dispose();
2424

25-
public float PushPost(Fid fid, string type, PostId id, IReadOnlyList<Content>? content)
25+
public float PushPost(Fid fid, string type, PostId id, IEnumerable<Content>? content)
2626
{
2727
if (!_config.GetValue("Enabled", false)) return 0;
2828
var stopwatch = new Stopwatch();
@@ -61,7 +61,7 @@ public float PushPost(Fid fid, string type, PostId id, IReadOnlyList<Content>? c
6161
public void PushPostWithCancellationToken<T>(
6262
IReadOnlyCollection<T> posts, Fid fid, string postType,
6363
Func<T, PostId> postIdSelector,
64-
Func<T, IReadOnlyList<Content>?> postContentSelector,
64+
Func<T, IEnumerable<Content>?> postContentSelector,
6565
CancellationToken stoppingToken = default)
6666
{
6767
try

c#/crawler/src/Tieba/Crawl/CrawlPost.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ namespace tbm.Crawler.Tieba.Crawl;
44
#pragma warning disable SA1135 // Using directives should be qualified
55
#pragma warning disable SA1200 // Using directives should be placed correctly
66
using SavedRepliesKeyByTid = ConcurrentDictionary<Tid, SaverChangeSet<ReplyPost>>;
7-
using SavedThreadsList = IList<SaverChangeSet<ThreadPost>>;
7+
using SavedThreadsList = IReadOnlyCollection<SaverChangeSet<ThreadPost>>;
88

99
public class CrawlPost(
1010
Func<Owned<CrawlerDbContext.New>> dbContextFactory,

c#/crawler/src/Tieba/Crawl/Crawler/BaseCrawler.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ public abstract partial class BaseCrawler<TResponse, TPostProtoBuf>
55
public abstract Exception FillExceptionData(Exception e);
66

77
// ReSharper disable once UnusedParameter.Global
8-
public abstract IReadOnlyList<TPostProtoBuf> GetValidPosts(TResponse response, CrawlRequestFlag flag);
8+
public abstract IReadOnlyCollection<TPostProtoBuf> GetValidPosts(TResponse response, CrawlRequestFlag flag);
99
public abstract TbClient.Page? GetResponsePage(TResponse response);
10-
protected abstract IReadOnlyList<TPostProtoBuf> GetResponsePostList(TResponse response);
10+
protected abstract IReadOnlyCollection<TPostProtoBuf> GetResponsePostList(TResponse response);
1111
protected abstract int GetResponseErrorCode(TResponse response);
1212
protected abstract IEnumerable<Request> GetRequestsForPage(Page page, CancellationToken stoppingToken = default);
1313

@@ -31,7 +31,7 @@ protected void ValidateOtherErrorCode(TResponse response)
3131
throw new TiebaException("Error from tieba client.") {Data = {{"raw", response}}};
3232
}
3333

34-
protected IReadOnlyList<TPostProtoBuf> EnsureNonEmptyPostList(TResponse response, string exceptionMessage)
34+
protected IReadOnlyCollection<TPostProtoBuf> EnsureNonEmptyPostList(TResponse response, string exceptionMessage)
3535
{
3636
var posts = GetResponsePostList(response);
3737
return posts.Count != 0 ? posts : throw new EmptyPostListException(exceptionMessage);

c#/crawler/src/Tieba/Crawl/Crawler/ReplyCrawler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public override Exception FillExceptionData(Exception e)
1010
return e;
1111
}
1212

13-
public override IReadOnlyList<Reply> GetValidPosts(ReplyResponse response, CrawlRequestFlag flag)
13+
public override IReadOnlyCollection<Reply> GetValidPosts(ReplyResponse response, CrawlRequestFlag flag)
1414
{
1515
if (response.Error.Errorno is 4 or 350008)
1616
throw new EmptyPostListException("Thread already deleted when crawling reply.");

c#/crawler/src/Tieba/Crawl/Crawler/SubReplyCrawler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public override Exception FillExceptionData(Exception e)
1111
return e;
1212
}
1313

14-
public override IReadOnlyList<SubReply> GetValidPosts(SubReplyResponse response, CrawlRequestFlag flag)
14+
public override IReadOnlyCollection<SubReply> GetValidPosts(SubReplyResponse response, CrawlRequestFlag flag)
1515
{
1616
switch (response.Error.Errorno)
1717
{

c#/crawler/src/Tieba/Crawl/Crawler/ThreadCrawler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public override Exception FillExceptionData(Exception e)
1313
return e;
1414
}
1515

16-
public override IReadOnlyList<Thread> GetValidPosts(ThreadResponse response, CrawlRequestFlag flag)
16+
public override IReadOnlyCollection<Thread> GetValidPosts(ThreadResponse response, CrawlRequestFlag flag)
1717
{
1818
ValidateOtherErrorCode(response);
1919
return EnsureNonEmptyPostList(response,

c#/crawler/src/Tieba/Crawl/Facade/BaseCrawlFacade.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ public async Task<BaseCrawlFacade<TPost, TBaseRevision, TResponse, TPostProtoBuf
103103
}
104104

105105
public async Task<SaverChangeSet<TPost>?> RetryThenSave
106-
(IList<Page> pages, Func<Page, FailureCount> failureCountSelector, CancellationToken stoppingToken = default)
106+
(IReadOnlyList<Page> pages, Func<Page, FailureCount> failureCountSelector, CancellationToken stoppingToken = default)
107107
{
108108
if (_lockingPages.Count != 0) ThrowHelper.ThrowInvalidOperationException(
109109
"RetryPages() can only be called once, a instance of BaseCrawlFacade shouldn't be reuse for other crawls.");
@@ -136,14 +136,14 @@ private void ValidateThenParse(BaseCrawler<TResponse, TPostProtoBuf>.Response re
136136
parsedPostsInResponse.ForEach(pair => Posts[pair.Key] = pair.Value);
137137
if (flag == CrawlRequestFlag.None)
138138
{
139-
if (postsEmbeddedUsers.Count == 0 && postsInResponse.Any()) ThrowIfEmptyUsersEmbedInPosts();
139+
if (postsEmbeddedUsers.Count == 0 && postsInResponse.Count != 0) ThrowIfEmptyUsersEmbedInPosts();
140140
if (postsEmbeddedUsers.Count != 0) UserParser.Parse(postsEmbeddedUsers);
141141
}
142142
PostParseHook(response, flag, parsedPostsInResponse);
143143
}
144144

145145
private async Task CrawlPages(
146-
IList<Page> pages,
146+
IReadOnlyList<Page> pages,
147147
Func<Page, FailureCount>? previousFailureCountSelector = null,
148148
CancellationToken stoppingToken = default)
149149
{

c#/crawler/src/Tieba/Crawl/Facade/ReplyCrawlFacade.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public class ReplyCrawlFacade(
2121
protected override void PostParseHook(
2222
ReplyResponse response,
2323
CrawlRequestFlag flag,
24-
IDictionary<PostId, ReplyPost> parsedPostsInResponse)
24+
IReadOnlyDictionary<PostId, ReplyPost> parsedPostsInResponse)
2525
{
2626
parsedPostsInResponse.Values.ForEach(r => r.Tid = tid);
2727
var data = response.Data;

c#/crawler/src/Tieba/Crawl/Parser/Post/BasePostParser.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ public abstract class BasePostParser<TPost, TPostProtoBuf>
55
where TPostProtoBuf : class, IMessage<TPostProtoBuf>
66
{
77
public void Parse(
8-
CrawlRequestFlag requestFlag, IReadOnlyList<TPostProtoBuf> inPosts,
9-
out IDictionary<PostId, TPost> outPosts, out IList<TbClient.User> outUsers)
8+
CrawlRequestFlag requestFlag, IReadOnlyCollection<TPostProtoBuf> inPosts,
9+
out IReadOnlyDictionary<PostId, TPost> outPosts, out IReadOnlyCollection<TbClient.User> outUsers)
1010
{
1111
if (ShouldSkipParse(requestFlag))
1212
{
@@ -29,7 +29,7 @@ public void Parse(
2929
// ReSharper disable once UnusedMemberInSuper.Global
3030
protected abstract TPost Convert(TPostProtoBuf inPost);
3131
protected abstract IEnumerable<TPost> ParseInternal
32-
(IReadOnlyList<TPostProtoBuf> inPosts, IList<TbClient.User?> outUsers);
32+
(IReadOnlyCollection<TPostProtoBuf> inPosts, ICollection<TbClient.User?> outUsers);
3333
protected virtual bool ShouldSkipParse(CrawlRequestFlag requestFlag) => false;
3434
protected abstract PostId PostIdSelector(TPost post);
3535
}

0 commit comments

Comments
 (0)