@@ -9,30 +9,51 @@ public static class MessageBuilder
99 {
1010 public static UpdateMessage BuildForRelease ( RepositoryRelease release )
1111 {
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+
1222 string firstLine ;
1323 if ( string . IsNullOrEmpty ( release . ReleaseName ) || release . ReleaseName == release . TagName )
1424 {
15- firstLine = $ "A new { release . RepositoryName } release, tagged { release . TagName } , " +
16- $ "is available on GitHub since { release . ReleaseCreatedAt . ToString ( "D" ) } .";
25+ firstLine = GetReleaseDescriptionWithoutReleaseName ( release ) ;
1726 }
1827 else
1928 {
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+ }
2234 }
2335
2436 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 ;
3238
3339 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+ }
3452 }
3553
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+
3657 public static UpdateMessage BuildForPublication ( Publication publication )
3758 {
3859 var topic = $ "{ nameof ( Publication ) } |{ publication . Title } ";
0 commit comments