Files
umbrix/lib/features/app_update/data/github_release_parser.dart
Umbrix Developer 95383d09fc
Some checks failed
CI / run (push) Waiting to run
Upload store MSIX to release / upload-store-msix-to-release (push) Has been cancelled
feat: update to v1.7.3 with smart asset detection and auto-install
2026-01-18 20:14:19 +03:00

52 lines
1.7 KiB
Dart

import 'package:dartx/dartx.dart';
import 'package:umbrix/core/model/environment.dart';
import 'package:umbrix/features/app_update/model/remote_version_entity.dart';
abstract class GithubReleaseParser {
static RemoteVersionEntity parse(Map<String, dynamic> json) {
final fullTag = json['tag_name'] as String;
final fullVersion = fullTag.removePrefix("v").split("-").first.split("+");
var version = fullVersion.first;
var buildNumber = fullVersion.elementAtOrElse(1, (index) => "");
var flavor = Environment.prod;
for (final env in Environment.values) {
final suffix = ".${env.name}";
if (version.endsWith(suffix)) {
version = version.removeSuffix(suffix);
flavor = env;
break;
} else if (buildNumber.endsWith(suffix)) {
buildNumber = buildNumber.removeSuffix(suffix);
flavor = env;
break;
}
}
final preRelease = json["prerelease"] as bool;
final publishedAt = DateTime.parse(json["published_at"] as String);
// Парсим assets
final List<ReleaseAsset> assets = [];
if (json["assets"] != null) {
for (final assetJson in json["assets"] as List) {
final asset = assetJson as Map<String, dynamic>;
assets.add(ReleaseAsset(
name: asset["name"] as String,
downloadUrl: asset["browser_download_url"] as String,
size: asset["size"] as int,
));
}
}
return RemoteVersionEntity(
version: version,
buildNumber: buildNumber,
releaseTag: fullTag,
preRelease: preRelease,
url: json["html_url"] as String,
publishedAt: publishedAt,
flavor: flavor,
assets: assets,
);
}
}