You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
jade_gui/lib/functions/install.dart

157 lines
4.4 KiB
Dart

import 'package:flutter/material.dart';
3 years ago
import 'package:jade_gui/classes/install_prefs.dart';
import 'package:jade_gui/classes/desktop.dart';
import 'package:jade_gui/classes/location.dart';
import 'dart:convert';
import 'dart:io';
test(setOutput, running, setRunning, config, writeToLog) async {
if (!running) {
const filename = "/tmp/jade.json";
3 years ago
await File(filename).writeAsString(config);
writeToLog("Json config: $config");
var process = await Process.start('pkexec', ['jade', 'config', filename]);
//await Process.start('/opt/jade_gui/scripts/jadeemu.sh', []);
process.stdout.transform(utf8.decoder).forEach(setOutput);
setRunning(true);
}
}
Widget install(
3 years ago
Location locale,
String keymap,
String layout,
String username,
String password,
bool enableSudo,
String rootPass,
Desktop desktop,
String disk,
bool isEfi,
String bootloader,
String hostname,
bool ipv6,
bool enableTimeshift,
bool enableFlatpak,
bool enableUnakite,
String unakiteRoot,
String unakiteBootDev,
String unakiteEfiDir,
String crystalRoot,
3 years ago
setOutput,
output,
running,
setRunning,
writeToLog,
partitions,
manual) {
List<String> partsParsed = <String>[];
for (var part in partitions) {
if (part.mountpoint != "none" && part.filesystem != "none") {
if (part.mountpoint == "unakite") {
partsParsed.add("none:${part.partition}:btrfs");
} else {
partsParsed
.add("/mnt${part.mountpoint}:${part.partition}:${part.filesystem}");
}
3 years ago
}
}
3 years ago
InstallPrefs prefs = InstallPrefs(
locale: locale,
keymap: keymap,
layout: layout,
username: username,
password: password,
enableSudo: enableSudo,
rootPass: rootPass,
desktop: desktop,
disk: disk.replaceAll("/dev/", ""),
3 years ago
manualPartitioning: manual,
partitions: partsParsed,
isEfi: isEfi,
bootloader: bootloader,
bootloaderLocation: isEfi ? "/boot/efi" : disk,
hostname: hostname,
ipv6: ipv6,
enableTimeshift: enableTimeshift,
enableFlatpak: enableFlatpak,
enableUnakite: enableUnakite,
unakiteRoot: unakiteRoot,
unakiteBootDev: unakiteBootDev,
unakiteEfiDir: unakiteEfiDir,
crystalRoot: crystalRoot,
);
String jsonPrefs = jsonEncode(prefs.toJson());
//writeConfig(jsonPrefs);
test(setOutput, running, setRunning, jsonPrefs, writeToLog);
return Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
output
.toString()
.contains("Installation finished! You may reboot now!")
? "Installed!"
: " Installing...",
style: const TextStyle(
fontSize: 50,
fontWeight: FontWeight.bold,
color: Color.fromARGB(255, 169, 0, 255)),
),
],
),
const SizedBox(
height: 20,
),
const SizedBox(width: 40),
Container(
width: 1000,
height: 500,
padding: const EdgeInsets.all(10),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
border: Border.all(color: Colors.black),
3 years ago
color: const Color.fromARGB(255, 15, 15, 15),
),
child: SingleChildScrollView(
reverse: true,
child: Text(
output,
style: const TextStyle(
color: Colors.white,
fontSize: 15,
fontFamily: 'Monospace',
fontWeight: FontWeight.w100,
),
),
),
),
const SizedBox(height: 20),
Text(
output.toString().contains("Installation finished! You may reboot now!")
? "Installation finished! You may reboot now!"
: "This may take a while...",
style: const TextStyle(
fontSize: 20,
fontWeight: FontWeight.bold,
color: Color.fromARGB(255, 169, 0, 255),
),
),
Text(
output.toString().contains("Installation finished! You may reboot now!")
? "You can now close this window and reboot your computer."
: "Please do not close this window until the installation is finished.",
style: const TextStyle(
fontSize: 20,
fontWeight: FontWeight.bold,
color: Color.fromARGB(255, 169, 0, 255),
),
),
],
);
}