瀏覽代碼

Replace mentions with links to profiles in the release information (#9859)

Replace mentions with links in the release information.
Alessandro Jean 1 年之前
父節點
當前提交
ed80ac3154
共有 1 個文件被更改,包括 16 次插入1 次删除
  1. 16 1
      data/src/main/java/tachiyomi/data/release/GithubRelease.kt

+ 16 - 1
data/src/main/java/tachiyomi/data/release/GithubRelease.kt

@@ -21,10 +21,25 @@ data class GithubRelease(
 @Serializable
 data class GitHubAssets(@SerialName("browser_download_url") val downloadLink: String)
 
+/**
+ * Regular expression that matches a mention to a valid GitHub username, like it's
+ * done in GitHub Flavored Markdown. It follows these constraints:
+ *
+ * - Alphanumeric with single hyphens (no consecutive hyphens)
+ * - Cannot begin or end with a hyphen
+ * - Max length of 39 characters
+ *
+ * Reference: https://stackoverflow.com/a/30281147
+ */
+val gitHubUsernameMentionRegex =
+    """\B@([a-z0-9](?:-(?=[a-z0-9])|[a-z0-9]){0,38}(?<=[a-z0-9]))""".toRegex(RegexOption.IGNORE_CASE)
+
 val releaseMapper: (GithubRelease) -> Release = {
     Release(
         it.version,
-        it.info,
+        it.info.replace(gitHubUsernameMentionRegex) { mention ->
+            "[${mention.value}](https://github.com/${mention.value.substring(1)})"
+        },
         it.releaseLink,
         it.assets.map(GitHubAssets::downloadLink),
     )