quickgui/lib/main.dart

85 lines
2.5 KiB
Dart

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:tuple/tuple.dart';
import 'package:window_manager/window_manager.dart';
import 'package:window_size/window_size.dart';
import 'src/app.dart';
import 'src/model/app_settings.dart';
import 'src/model/operating_system.dart';
import 'src/model/option.dart';
import 'src/model/version.dart';
Future<List<OperatingSystem>> loadOperatingSystems(bool showUbuntus) async {
var process = await Process.run('quickget', ['list_csv']);
var stdout = process.stdout as String;
var output = <OperatingSystem>[];
OperatingSystem? currentOperatingSystem;
Version? currentVersion;
stdout
.split('\n')
.skip(1)
.where((element) => element.isNotEmpty)
.map((e) => e.trim())
.forEach((element) {
var chunks = element.split(",");
Tuple5 supportedVersion;
if (chunks.length == 4) // Legacy version of quickget
{
supportedVersion = Tuple5.fromList([...chunks, "wget"]);
} else {
var t5 = [chunks[0], chunks[1], chunks[2], chunks[3], chunks[4]].toList();
supportedVersion = Tuple5.fromList(t5);
}
if (currentOperatingSystem?.code != supportedVersion.item2) {
currentOperatingSystem =
OperatingSystem(supportedVersion.item1, supportedVersion.item2);
output.add(currentOperatingSystem!);
currentVersion = null;
}
if (currentVersion?.version != supportedVersion.item3) {
currentVersion = Version(supportedVersion.item3);
currentOperatingSystem!.versions.add(currentVersion!);
}
currentVersion!.options
.add(Option(supportedVersion.item4, supportedVersion.item5));
});
return output;
}
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// Don't forget to also change the size in linux/my_application.cc:50
setWindowMinSize(const Size(692, 580));
setWindowMaxSize(const Size(692, 580));
await windowManager.ensureInitialized();
const windowOptions = WindowOptions(
size: Size(692, 580),
center: true,
backgroundColor: Colors.transparent,
skipTaskbar: false,
titleBarStyle: TitleBarStyle.hidden,
);
await windowManager.waitUntilReadyToShow(windowOptions, () async {
await windowManager.show();
await windowManager.focus();
});
runApp(
MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => AppSettings()),
],
builder: (context, _) => const App(),
),
);
}