85 lines
2.5 KiB
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(),
|
|
),
|
|
);
|
|
}
|