diff --git a/build.properties b/build.properties index e984a6e99..93d29bfb7 100644 --- a/build.properties +++ b/build.properties @@ -83,6 +83,7 @@ app.bundle.dir = mac/bundle changelog.file = CHANGELOG.md src.dir = src resources.dir = resources +metainfo.file = ${resources.dir}/com.jpexs.decompiler.flash.metainfo.xml test.dir = test test.lib.dir = testlib test.result.dir = reports/tests diff --git a/build.xml b/build.xml index 16c766229..db4a47588 100644 --- a/build.xml +++ b/build.xml @@ -904,4 +904,110 @@ + + + + + + + + + + + + + + + + + + + + + + Version number must be nonempty + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/com/jpexs/decompiler/flash/gui/ChangelogUpdater.java b/src/com/jpexs/build/ChangelogUpdater.java similarity index 91% rename from src/com/jpexs/decompiler/flash/gui/ChangelogUpdater.java rename to src/com/jpexs/build/ChangelogUpdater.java index 9ce33ae50..af82d0f57 100644 --- a/src/com/jpexs/decompiler/flash/gui/ChangelogUpdater.java +++ b/src/com/jpexs/build/ChangelogUpdater.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.jpexs.decompiler.flash.gui; +package com.jpexs.build; import com.jpexs.helpers.Helper; import java.io.UnsupportedEncodingException; @@ -26,16 +26,18 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; /** - * + * Updates CHANGELOG.md file. Adds links to issue numbers - brackets, adds links to versions * @author JPEXS */ public class ChangelogUpdater { private static final String GITHUB_ADDRESS = "https://github.com/jindrapetrik/jpexs-decompiler/"; private static final String ISSUE_TRACKER_ADDRESS = "https://www.free-decompiler.com/flash/issues/"; + + private static final String CHANGELOG_FILENAME = "CHANGELOG.md"; public static void main(String[] args) throws UnsupportedEncodingException { - String changeLog = Helper.readTextFile("CHANGELOG.md"); + String changeLog = Helper.readTextFile(CHANGELOG_FILENAME); changeLog = changeLog.replaceAll("\\[[^\\]]+\\]: [^\\r\\n]+\\r\\n", ""); changeLog = changeLog.replaceAll("\\[#([0-9]+)\\]", "#$1"); @@ -89,6 +91,6 @@ public class ChangelogUpdater { changeLog += "[#" + issue + "]: " + ISSUE_TRACKER_ADDRESS + issue + "\r\n"; } - Helper.writeFile("CHANGELOG.md", changeLog.getBytes("UTF-8")); + Helper.writeFile(CHANGELOG_FILENAME, changeLog.getBytes("UTF-8")); } } diff --git a/src/com/jpexs/build/MetainfoUpdater.java b/src/com/jpexs/build/MetainfoUpdater.java new file mode 100644 index 000000000..a56bd0cf4 --- /dev/null +++ b/src/com/jpexs/build/MetainfoUpdater.java @@ -0,0 +1,117 @@ +/* + * Copyright (C) 2023 JPEXS + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.jpexs.build; + +import com.jpexs.helpers.Helper; +import java.io.UnsupportedEncodingException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Update Flatpak metainfo XML file. Generates metainfo from CHANGELOG.md file. Appends new versions that are not present in metainfo file. + * @author JPEXS + */ +public class MetainfoUpdater { + + public static final String METAINFO_FILENAME = "resources/com.jpexs.decompiler.flash.metainfo.xml"; + private static final String CHANGELOG_FILENAME = "CHANGELOG.md"; + + public static void main(String[] args) throws UnsupportedEncodingException { + String metainfo = Helper.readTextFile(METAINFO_FILENAME); + + String changeLog = Helper.readTextFile(CHANGELOG_FILENAME); + String newline = System.lineSeparator(); + + + Pattern metainfoVersionPattern = Pattern.compile("[0-9]+\\.[0-9]+\\.[0-9]+)\" date=\"(?[0-9]+-[0-9]+-[0-9]+)\">"); + Matcher metainfoVersionMatcher = metainfoVersionPattern.matcher(metainfo); + if (!metainfoVersionMatcher.find()) { + throw new IllegalArgumentException("No last metainfo version found"); + } + String latestMetainfoVersion = metainfoVersionMatcher.group("version"); + + Pattern changelogVersionPattern = Pattern.compile("## \\[(?[0-9]+\\.[0-9]+\\.[0-9]+)\\] - (?[0-9]+-[0-9]+-[0-9]+)"); + Matcher changelogVersionMatcher = changelogVersionPattern.matcher(changeLog); + int prevMatchEnd = -1; + String prevVersion = null; + String prevDate = null; + String releases = ""; + while (changelogVersionMatcher.find()) { + if(prevMatchEnd != -1) { + if (prevVersion.equals(latestMetainfoVersion)) { + break; + } + String versionChangelog = changeLog.substring(prevMatchEnd, changelogVersionMatcher.start()).trim(); + String parts[] = (versionChangelog + "\r\n").split("\r?\n"); + String prev = null; + String description = ""; + String li = ""; + for (String s:parts) { + if (s.startsWith("### ")) { + if (!li.isEmpty()) { + description += "\t\t\t\t\t
  • " + filterLiText(li) + "
  • "+newline; + li = ""; + } + if (!description.isEmpty()) { + description += "\t\t\t\t"+newline; + } + description += "\t\t\t\t

    " + s.substring(4).trim() + "

    "+newline; + description += "\t\t\t\t
      " + newline; + continue; + } + + if (s.startsWith("- ")) { + if (!li.isEmpty()) { + description += "\t\t\t\t\t
    • " + filterLiText(li) + "
    • "+newline; + } + + li = s.trim().substring(2); + } else { + if (!s.trim().isEmpty()) { + li = li + " " + s.trim(); + } + } + } + if (!li.isEmpty()) { + description += "\t\t\t\t\t
    • " + filterLiText(li) + "
    • "+newline; + } + if (!description.isEmpty()) { + description += "\t\t\t\t
    " + newline; + } + + String release = "\t\t" + newline + + "\t\t\t" + newline + + description + + "\t\t\t" + newline + + "\t\t" + newline; + releases += release; + } + + prevVersion = changelogVersionMatcher.group("version"); + prevDate = changelogVersionMatcher.group("date"); + prevMatchEnd = changelogVersionMatcher.end(); + } + + metainfo = metainfo.replaceAll("", ("" + newline + releases).trim()); + + Helper.writeFile(METAINFO_FILENAME, metainfo.getBytes("UTF-8")); + } + + private static String filterLiText(String li) { + return li.replaceAll("\\[(#[0-9]+)\\]", "$1"); + } +}