You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.2 KiB
83 lines
2.2 KiB
import 'package:quiver/core.dart'; |
|
|
|
class ChangelogEntry { |
|
final ChangelogVersion version; |
|
final String description; |
|
final Uri? apkLink; |
|
final Uri? linuxLink; |
|
final Uri? windowsLink; |
|
|
|
ChangelogEntry({ |
|
required this.version, |
|
required this.description, |
|
this.apkLink, |
|
this.linuxLink, |
|
this.windowsLink, |
|
}); |
|
|
|
factory ChangelogEntry.fromTextBlock(String text) { |
|
final lines = text.split(RegExp(r'(\r?\n)+')); |
|
return ChangelogEntry( |
|
version: ChangelogVersion.parse(lines.first), |
|
description: lines.skip(1).join('\n'), |
|
); |
|
} |
|
|
|
static List<ChangelogEntry> fromTextFile(String text) { |
|
final blocks = text.split(RegExp(r'(\r?\n){2}')); |
|
return blocks.map(ChangelogEntry.fromTextBlock).toList(); |
|
} |
|
} |
|
|
|
class ChangelogVersion implements Comparable<ChangelogVersion> { |
|
final int major; |
|
final int minor; |
|
final int patch; |
|
final String? prerelease; |
|
|
|
ChangelogVersion(this.major, this.minor, this.patch, [this.prerelease]); |
|
|
|
factory ChangelogVersion.parse(String version) { |
|
if (version.startsWith('v')) { |
|
version = version.substring(1); |
|
} |
|
String? prerelease; |
|
if (version.contains('-')) { |
|
final index = version.indexOf('-'); |
|
prerelease = version.substring(index + 1); |
|
version = version.substring(0, index); |
|
} |
|
final splitted = version.split('.').map(int.parse).toList(); |
|
return ChangelogVersion(splitted[0], splitted[1], splitted[2], prerelease); |
|
} |
|
|
|
@override |
|
String toString() { |
|
final vString = 'v$major.$minor.$patch'; |
|
return prerelease == null ? vString : '$vString-$prerelease'; |
|
} |
|
|
|
@override |
|
bool operator==(dynamic other) { |
|
if (other is! ChangelogVersion) { |
|
return false; |
|
} |
|
return major == other.major && minor == other.minor && patch == other.patch && prerelease == other.prerelease; |
|
} |
|
|
|
@override |
|
int get hashCode { |
|
return hash3(major.hashCode, minor.hashCode, patch.hashCode); |
|
} |
|
|
|
@override |
|
int compareTo(ChangelogVersion other) { |
|
if (major != other.major) { |
|
return major.compareTo(other.major); |
|
} |
|
if (minor != other.minor) { |
|
return minor.compareTo(other.minor); |
|
} |
|
return patch.compareTo(other.patch); |
|
} |
|
}
|
|
|