@@ -9,30 +9,51 @@ public static class MessageBuilder
9
9
{
10
10
public static UpdateMessage BuildForRelease ( RepositoryRelease release )
11
11
{
12
+ string moreInfoAndHashTagContent = $ "{ Environment . NewLine } " +
13
+ $ "{ Environment . NewLine } " +
14
+ $ "See { release . HtmlUrl } for more information." +
15
+ $ "{ Environment . NewLine } " +
16
+ $ "{ Environment . NewLine } " +
17
+ $ "{ release . HashTags } ";
18
+
19
+ int effectiveMoreInfoAndHashTagContentLength = moreInfoAndHashTagContent . Length - release . HtmlUrl . Length + TwitterShortenedUrlCharacterCount ;
20
+ int maxReleaseDescriptionLength = MaxTwitterCharacterCount - effectiveMoreInfoAndHashTagContentLength ;
21
+
12
22
string firstLine ;
13
23
if ( string . IsNullOrEmpty ( release . ReleaseName ) || release . ReleaseName == release . TagName )
14
24
{
15
- firstLine = $ "A new { release . RepositoryName } release, tagged { release . TagName } , " +
16
- $ "is available on GitHub since { release . ReleaseCreatedAt . ToString ( "D" ) } .";
25
+ firstLine = GetReleaseDescriptionWithoutReleaseName ( release ) ;
17
26
}
18
27
else
19
28
{
20
- firstLine = $ "A new { release . RepositoryName } release, { release . ReleaseName } (tagged { release . TagName } ), " +
21
- $ "is available on GitHub since { release . ReleaseCreatedAt . ToString ( "D" ) } .";
29
+ firstLine = GetReleaseDescriptionWithReleaseName ( release ) ;
30
+ if ( firstLine . Length > maxReleaseDescriptionLength )
31
+ {
32
+ firstLine = GetReleaseDescriptionWithoutReleaseName ( release ) ;
33
+ }
22
34
}
23
35
24
36
var topic = $ "{ nameof ( RepositoryRelease ) } |{ release . RepositoryName } ";
25
- var content = firstLine +
26
- $ "{ Environment . NewLine } " +
27
- $ "{ Environment . NewLine } " +
28
- $ "See { release . HtmlUrl } for more information." +
29
- $ "{ Environment . NewLine } " +
30
- $ "{ Environment . NewLine } " +
31
- $ "{ release . HashTags } ";
37
+ var content = firstLine + moreInfoAndHashTagContent ;
32
38
33
39
return new UpdateMessage ( topic , content ) ;
40
+
41
+ string GetReleaseDescriptionWithoutReleaseName ( RepositoryRelease repositoryRelease )
42
+ {
43
+ return $ "A new { repositoryRelease . RepositoryName } release, tagged { repositoryRelease . TagName } , " +
44
+ $ "is available on GitHub since { repositoryRelease . ReleaseCreatedAt : D} .";
45
+ }
46
+
47
+ string GetReleaseDescriptionWithReleaseName ( RepositoryRelease repositoryRelease )
48
+ {
49
+ return $ "A new { release . RepositoryName } release, { release . ReleaseName } (tagged { release . TagName } ), " +
50
+ $ "is available on GitHub since { release . ReleaseCreatedAt : D} .";
51
+ }
34
52
}
35
53
54
+ public const int TwitterShortenedUrlCharacterCount = 28 ; // Urls are shortened to 28 characters by Twitter.
55
+ public const int MaxTwitterCharacterCount = 255 ; // Urls are shortened to 28 characters by Twitter.
56
+
36
57
public static UpdateMessage BuildForPublication ( Publication publication )
37
58
{
38
59
var topic = $ "{ nameof ( Publication ) } |{ publication . Title } ";
0 commit comments