diff --git a/packaging/mirage.appdata.xml b/packaging/mirage.appdata.xml
index 3fd785de..8b70fa07 100644
--- a/packaging/mirage.appdata.xml
+++ b/packaging/mirage.appdata.xml
@@ -55,23 +55,23 @@
FSFAP
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
workstation
mobile
-
+
\ No newline at end of file
diff --git a/packaging/update-appdata-releases.py b/packaging/update-appdata-releases.py
new file mode 100755
index 00000000..eb4bf146
--- /dev/null
+++ b/packaging/update-appdata-releases.py
@@ -0,0 +1,32 @@
+#!/usr/bin/env python3
+
+import html
+import re
+from pathlib import Path
+
+root = Path(__file__).resolve().parent.parent
+title_pattern = re.compile(r"## (\d+\.\d+\.\d+) \((\d{4}-\d\d-\d\d)\)")
+release_lines = [" "]
+
+for line in (root / "docs" / "CHANGELOG.md").read_text().splitlines():
+ match = title_pattern.match(line)
+
+ if match:
+ args = (html.escape(match.group(1)), html.escape(match.group(2)))
+ release_lines.append(' ' % args)
+
+appdata = root / "packaging" / "mirage.appdata.xml"
+in_releases = False
+final_lines = []
+
+for line in appdata.read_text().splitlines():
+ if line == " ":
+ in_releases = True
+ final_lines += release_lines
+ elif line == " ":
+ in_releases = False
+
+ if not in_releases:
+ final_lines.append(line)
+
+appdata.write_text("\n".join(final_lines))
diff --git a/refresh-releases.py b/refresh-releases.py
deleted file mode 100755
index 107ebe8b..00000000
--- a/refresh-releases.py
+++ /dev/null
@@ -1,68 +0,0 @@
-#!/usr/bin/env python3
-
-from pathlib import Path
-import html
-import mistune
-import re
-
-
-def get_src_path():
- return str(Path(__file__).resolve().parent)
-
-
-def make_changelog_dict(title):
- title_parts = title.split(" ")
-
- return {
- "date": title_parts[2][1:-2],
- "version": title_parts[1]
- }
-
-
-def make_release_tag(version, date):
- return " \n" \
-
-
-markdown_parser = mistune.Markdown(escape=False)
-changelog_title_pattern = re.compile(r"##\ \d\.\d\.\d\ \(\d{4}-\d{2}-\d{2}\)")
-changelog_lines = open(get_src_path() + "/docs/CHANGELOG.md", "r").readlines()
-changelog_entries = []
-
-for line in changelog_lines:
- if changelog_title_pattern.match(line):
- changelog_entry = make_changelog_dict(line)
- changelog_entries.append(changelog_entry)
-
-appdata_releases = ""
-
-for entry in changelog_entries:
- appdata_releases += make_release_tag(entry["version"], entry["date"])
-
-appdata_path = get_src_path() + "/packaging/mirage.appdata.xml"
-appdata_lines = open(appdata_path, "r").readlines()
-releases_open_pattern = re.compile(r" ")
-releases_close_pattern = re.compile(r" ")
-
-opening_tag_found = False
-releases_open_line = 0
-releases_close_line = 0
-
-for line in appdata_lines:
- if not opening_tag_found:
- releases_open_line += 1
- if releases_open_pattern.match(line):
- opening_tag_found = True
- if releases_close_pattern.match(line):
- break
- releases_close_line += 1
-
-# We need to remove the old release entries since we're inserting
-# new ones unconditionally
-del appdata_lines[releases_open_line:releases_close_line]
-appdata_lines.insert(releases_open_line, appdata_releases)
-
-with open(appdata_path, "w") as appdata_file:
- appdata_lines = "".join(appdata_lines)
- appdata_file.write(appdata_lines)