getRecentReleaseNotes method

List<String> getRecentReleaseNotes({
  1. required String currentVersion,
  2. String? previousVersion,
  3. String? changelogContent,
})

Gets release notes to show based on the previously seen version.

Shows up to _maxReleaseNotesShown items total, prioritizing the most recent versions.

Implementation

List<String> getRecentReleaseNotes({
  required String currentVersion,
  String? previousVersion,
  String? changelogContent,
}) {
  try {
    final content = changelogContent ?? getStoredChangelogFromMemory();
    final releaseNotes = parseChangelog(content);

    final baseCurrentVersion = semverCoerce(currentVersion);
    final basePreviousVersion = previousVersion != null
        ? semverCoerce(previousVersion)
        : null;

    if (basePreviousVersion == null ||
        (baseCurrentVersion != null &&
            semverGt(baseCurrentVersion, basePreviousVersion))) {
      final sortedEntries =
          releaseNotes.entries
              .where(
                (entry) =>
                    basePreviousVersion == null ||
                    semverGt(entry.key, basePreviousVersion),
              )
              .toList()
            ..sort((a, b) => semverGt(a.key, b.key) ? -1 : 1);
      return sortedEntries
          .map((entry) => entry.value)
          .expand((notes) => notes)
          .where((note) => note.isNotEmpty)
          .take(_maxReleaseNotesShown)
          .toList();
    }
  } catch (_) {
    return [];
  }
  return [];
}