From ed80ac3154625d52238ef3cbc295044fadb8ed70 Mon Sep 17 00:00:00 2001 From: Alessandro Jean <14254807+alessandrojean@users.noreply.github.com> Date: Thu, 24 Aug 2023 23:04:26 -0300 Subject: [PATCH] Replace mentions with links to profiles in the release information (#9859) Replace mentions with links in the release information. --- .../tachiyomi/data/release/GithubRelease.kt | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/data/src/main/java/tachiyomi/data/release/GithubRelease.kt b/data/src/main/java/tachiyomi/data/release/GithubRelease.kt index 3677dc122..94394cef0 100644 --- a/data/src/main/java/tachiyomi/data/release/GithubRelease.kt +++ b/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), )