| 64 | } |
| 65 | |
| 66 | QString reprocessCommits(QByteArray json) |
| 67 | { |
| 68 | auto channel = APPLICATION->settings()->get("UpdateChannel").toString(); |
| 69 | try |
| 70 | { |
| 71 | QString result; |
| 72 | auto document = Json::requireDocument(json); |
| 73 | auto rootobject = Json::requireObject(document); |
| 74 | auto status = Json::requireString(rootobject, "status"); |
| 75 | auto diff_url = Json::requireString(rootobject, "html_url"); |
| 76 | |
| 77 | auto print_commits = [&]() |
| 78 | { |
| 79 | result += "<table cellspacing=0 cellpadding=2 style='border-width: 1px; border-style: solid'>"; |
| 80 | auto commitarray = Json::requireArray(rootobject, "commits"); |
| 81 | for(int i = commitarray.size() - 1; i >= 0; i--) |
| 82 | { |
| 83 | const auto & commitval = commitarray[i]; |
| 84 | auto commitobj = Json::requireValueObject(commitval); |
| 85 | auto parents_info = Json::ensureArray(commitobj, "parents"); |
| 86 | // NOTE: this ignores merge commits, because they have more than one parent |
| 87 | if(parents_info.size() > 1) |
| 88 | { |
| 89 | continue; |
| 90 | } |
| 91 | auto commit_url = Json::requireString(commitobj, "html_url"); |
| 92 | auto commit_info = Json::requireObject(commitobj, "commit"); |
| 93 | auto commit_message = Json::requireString(commit_info, "message"); |
| 94 | auto lines = commit_message.split('\n'); |
| 95 | QRegularExpression regexp("(?<prefix>(GH-(?<issuenr>[0-9]+))|(NOISSUE)|(SCRATCH))? *(?<rest>.*) *"); |
| 96 | auto match = regexp.match(lines.takeFirst(), 0, QRegularExpression::NormalMatch); |
| 97 | auto issuenr = match.captured("issuenr"); |
| 98 | auto prefix = match.captured("prefix"); |
| 99 | auto rest = match.captured("rest"); |
| 100 | result += "<tr><td>"; |
| 101 | if(issuenr.length()) |
| 102 | { |
| 103 | result += QString("<a href=\"https://github.com/MultiMC/Launcher/issues/%1\">GH-%2</a>").arg(issuenr, issuenr); |
| 104 | } |
| 105 | else if(prefix.length()) |
| 106 | { |
| 107 | result += QString("<a href=\"%1\">%2</a>").arg(commit_url, prefix); |
| 108 | } |
| 109 | else |
| 110 | { |
| 111 | result += QString("<a href=\"%1\">NOISSUE</a>").arg(commit_url); |
| 112 | } |
| 113 | result += "</td>"; |
| 114 | lines.prepend(rest); |
| 115 | result += "<td><p>" + lines.join("<br />") + "</p></td></tr>"; |
| 116 | } |
| 117 | result += "</table>"; |
| 118 | }; |
| 119 | |
| 120 | if(status == "identical") |
| 121 | { |
| 122 | return QObject::tr("<p>There are no code changes between your current version and latest %1.</p>").arg(channel); |
| 123 | } |
no test coverage detected