sync every hour the latest version of packages with aur

display current version and if outdated in ui
display correct time in output log
This commit is contained in:
2024-01-01 23:07:52 +01:00
parent eb4ca46562
commit 80e2299dc8
17 changed files with 199 additions and 26 deletions

View File

@ -58,7 +58,10 @@ class _YourPackagesState extends State<YourPackages> {
label: Text("Package Name"),
),
DataColumn(
label: Text("Number of versions"),
label: Text("Version"),
),
DataColumn(
label: Text("Up-To-Date"),
),
DataColumn(
label: Text("Status"),
@ -85,14 +88,25 @@ class _YourPackagesState extends State<YourPackages> {
cells: [
DataCell(Text(package.id.toString())),
DataCell(Text(package.name)),
DataCell(Text(package.count.toString())),
DataCell(Text(package.latest_version.toString())),
DataCell(IconButton(
icon: Icon(
package.outofdate ? Icons.update : Icons.verified,
color: package.outofdate ? Color(0xFF6B43A4) : Color(0xFF0A6900),
),
onPressed: package.outofdate
? () {
// todo open build info with logs
}
: null,
)),
DataCell(IconButton(
icon: Icon(
switchSuccessIcon(package.status),
color: switchSuccessColor(package.status),
),
onPressed: () {
// todo open build info with logs
//context.push("/build/${package.latest_version_id}");
},
)),
DataCell(

View File

@ -3,17 +3,22 @@ class Build {
final String pkg_name;
final String version;
final int status;
final int? start_time, end_time;
Build(
{required this.id,
required this.pkg_name,
required this.version,
required this.start_time,
required this.end_time,
required this.status});
factory Build.fromJson(Map<String, dynamic> json) {
return Build(
id: json["id"] as int,
status: json["status"] as int,
start_time: json["start_time"] as int?,
end_time: json["end_time"] as int?,
pkg_name: json["pkg_name"] as String,
version: json["version"] as String,
);

View File

@ -1,21 +1,28 @@
class Package {
final int id;
final int id, latest_version_id;
final String name;
final int count;
final bool outofdate;
final int status;
final String latest_version, latest_aur_version;
Package(
{required this.id,
required this.latest_version_id,
required this.name,
required this.count,
required this.status});
required this.status,
required this.latest_version,
required this.latest_aur_version,
required this.outofdate});
factory Package.fromJson(Map<String, dynamic> json) {
return Package(
id: json["id"] as int,
count: json["count"] as int,
outofdate: json["outofdate"] as bool,
status: json["status"] as int,
name: json["name"] as String,
latest_version: json["latest_version"] as String,
latest_version_id: json["latest_version_id"] as int,
latest_aur_version: json["latest_aur_version"] as String,
);
}
}

View File

@ -1,14 +1,11 @@
import 'dart:async';
import 'package:aurcache/api/builds.dart';
import 'package:aurcache/components/build_output.dart';
import 'package:aurcache/models/build.dart';
import 'package:aurcache/components/api/APIBuilder.dart';
import 'package:aurcache/providers/build_provider.dart';
import 'package:aurcache/utils/time_formatter.dart';
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import '../api/API.dart';
import '../components/dashboard/your_packages.dart';
class BuildScreen extends StatefulWidget {
@ -29,6 +26,9 @@ class _BuildScreenState extends State<BuildScreen> {
interval: const Duration(seconds: 10),
onLoad: () => const Text("no data"),
onData: (buildData) {
final start_time = DateTime.fromMillisecondsSinceEpoch(
(buildData.start_time ?? 0) * 1000);
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
@ -58,7 +58,7 @@ class _BuildScreenState extends State<BuildScreen> {
const SizedBox(
width: 10,
),
const Text("triggered 2 months ago")
Text("triggered ${start_time.readableDuration()}")
],
),
const SizedBox(

View File

@ -23,6 +23,7 @@ class _DashboardScreenState extends State<DashboardScreen> {
@override
Widget build(BuildContext context) {
return APIBuilder<StatsProvider, Stats, Object>(
interval: const Duration(seconds: 10),
onData: (stats) {
return SafeArea(
child: SingleChildScrollView(

View File

@ -0,0 +1,20 @@
extension TimeFormatter on DateTime {
String readableDuration() {
final now = DateTime.now();
final duration = now.difference(this);
if (duration.inSeconds < 60) {
return '${duration.inSeconds} seconds ago';
} else if (duration.inMinutes < 60) {
return '${duration.inMinutes} minutes ago';
} else if (duration.inHours < 24) {
return '${duration.inHours} hours ago';
} else if (duration.inDays < 30) {
return '${duration.inDays} days ago';
} else if ((duration.inDays / 30) < 12) {
return '${duration.inDays ~/ 30} months ago';
} else {
return '${duration.inDays ~/ 365} years ago';
}
}
}