Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
c0ceb34
WIP
cassidyjames May 1, 2018
2570d9b
Merge branch 'master' into check-if-vm
cassidyjames May 1, 2018
4eb2180
Add VM, comment out some magic
cassidyjames May 1, 2018
41408ad
Better copy
cassidyjames May 1, 2018
35dba8d
Revert more magic
cassidyjames May 1, 2018
3ab04e4
Check for virtual instead of galago
cassidyjames May 1, 2018
f04bbb5
Clean up comment and copyright date
cassidyjames May 1, 2018
fd3774e
Fix cancelling the check view
cassidyjames May 1, 2018
62e8f9e
Remove extra debugs
cassidyjames May 1, 2018
d229dcf
Merge branch 'master' into check-if-vm
cassidyjames May 1, 2018
a30a803
Merge branch 'master' into check-if-vm
cassidyjames May 1, 2018
1f0a8d6
Check cpuinfo instead of dmi info
cassidyjames May 1, 2018
2a42cca
Actually check the right line
cassidyjames May 1, 2018
0febdc8
Merge branch 'master' into check-if-vm
cassidyjames May 1, 2018
d1a0509
Merge branch 'master' into check-if-vm
donadigo May 3, 2018
6bcf880
Merge branch 'master' into check-if-vm
cassidyjames May 14, 2018
9e6b669
Merge branch 'master' into check-if-vm
cassidyjames May 15, 2018
a56d0ce
Merge branch 'master' into check-if-vm
cassidyjames May 21, 2018
97f36c1
Merge branch 'master' into check-if-vm
cassidyjames May 22, 2018
aded26e
Merge branch 'master' into check-if-vm
donadigo Jun 5, 2018
2df8663
Merge branch 'master' into check-if-vm
cassidyjames Jun 15, 2018
2ae7d32
Merge branch 'master' into check-if-vm
cassidyjames Jun 15, 2018
8b407d0
Merge branch 'master' into check-if-vm
cassidyjames Jun 15, 2018
6bca0d4
Update MainWindow.vala
cassidyjames Jun 15, 2018
86576dc
Support multiple views
cassidyjames Jun 15, 2018
b19b482
Merge branch 'master' into check-if-vm
cassidyjames Jun 18, 2018
e15a577
Merge branch 'master' into check-if-vm
cassidyjames Jun 18, 2018
9d960b9
Merge branch 'master' into check-if-vm
cassidyjames Jun 19, 2018
ce288b9
Merge branch 'master' into check-if-vm
cassidyjames Sep 4, 2018
0ebbcc3
Merge branch 'master' into check-if-vm
cassidyjames Sep 4, 2018
103a1fc
Merge branch 'master' into check-if-vm
cassidyjames Nov 7, 2018
6c83858
Merge branch 'master' into check-if-vm
cassidyjames Nov 9, 2018
bcf97ee
Merge branch 'master' into check-if-vm
cassidyjames Jan 21, 2019
a8ef394
Merge branch 'master' into check-if-vm
cassidyjames May 1, 2019
ebe16d2
Merge branch 'master' into check-if-vm
fabiozaramella Aug 11, 2019
b6b35bf
Merge branch 'master' into check-if-vm
vjr Oct 26, 2019
c3e7632
Merge branch 'master' into check-if-vm
danirabbit Feb 18, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 39 additions & 48 deletions src/MainWindow.vala
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// -*- Mode: vala; indent-tabs-mode: nil; tab-width: 4 -*-
/*-
* Copyright (c) 2016-2017 elementary LLC. (https://elementary.io)
* Copyright (c) 2016–2018 elementary LLC. (https://elementary.io)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Expand Down Expand Up @@ -31,7 +31,6 @@ public class Installer.MainWindow : Gtk.Window {
private SuccessView success_view;
private EncryptView encrypt_view;
private ErrorView error_view;
private bool check_ignored = false;

private uint64 minimum_disk_size;

Expand Down Expand Up @@ -95,65 +94,39 @@ public class Installer.MainWindow : Gtk.Window {
stack.add (try_install_view);
stack.visible_child = try_install_view;

try_install_view.custom_step.connect (() => load_partitioning_view ());
try_install_view.next_step.connect (() => load_disk_view ());
}
try_install_view.custom_step.connect (() => {
load_check_view ("custom");
});

private void set_check_view_visible (bool show) {
if (show) {
check_view.previous_view = stack.visible_child;
stack.visible_child = check_view;
} else if (check_view.previous_view != null) {
stack.visible_child = check_view.previous_view;
check_view.previous_view = null;
}
try_install_view.next_step.connect (() => {
load_check_view ("clean");
});
}

private void load_check_view () {
private void load_check_view (string next_view) {
if (check_view != null) {
check_view.destroy ();
}

check_view = new Installer.CheckView (minimum_disk_size);
stack.add (check_view);

check_view.status_changed.connect ((met_requirements) => {
if (!check_ignored) {
set_check_view_visible (!met_requirements);
}
});

check_view.cancel.connect (() => {
stack.visible_child = try_install_view;
check_view.previous_view = null;
check_view.destroy ();
});

check_view.next_step.connect (() => {
check_ignored = true;
set_check_view_visible (false);
});

set_check_view_visible (!check_ignored && !check_view.check_requirements ());
}
check_view = new CheckView (minimum_disk_size);
check_view.previous_view = try_install_view;

private void load_encrypt_view () {
if (encrypt_view != null) {
encrypt_view.destroy ();
if (next_view == "custom") {
check_view.next_step.connect (() => load_partitioning_view ());
} else {
check_view.next_step.connect (() => load_disk_view ());
}

encrypt_view = new EncryptView ();
encrypt_view.previous_view = disk_view;
stack.add (encrypt_view);
stack.visible_child = encrypt_view;

load_check_view ();
if (check_view.check_requirements ()) {
check_view.next_step ();
} else {
stack.add (check_view);
stack.visible_child = check_view;
}

encrypt_view.cancel.connect (() => {
check_view.cancel.connect (() => {
stack.visible_child = try_install_view;
});

encrypt_view.next_step.connect (() => load_progress_view ());
}

private void load_disk_view () {
Expand Down Expand Up @@ -192,6 +165,23 @@ public class Installer.MainWindow : Gtk.Window {
});
}

private void load_encrypt_view () {
if (encrypt_view != null) {
encrypt_view.destroy ();
}

encrypt_view = new EncryptView ();
encrypt_view.previous_view = disk_view;
stack.add (encrypt_view);
stack.visible_child = encrypt_view;

encrypt_view.cancel.connect (() => {
stack.visible_child = try_install_view;
});

encrypt_view.next_step.connect (() => load_progress_view ());
}

private void load_progress_view () {
if (progress_view != null) {
progress_view.destroy ();
Expand Down Expand Up @@ -231,3 +221,4 @@ public class Installer.MainWindow : Gtk.Window {
error_view.previous_view = disk_view;
}
}

80 changes: 65 additions & 15 deletions src/Views/CheckView.vala
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// -*- Mode: vala; indent-tabs-mode: nil; tab-width: 4 -*-
/*-
* Copyright (c) 2016-2017 elementary LLC. (https://elementary.io)
* Copyright (c) 2016–2018 elementary LLC. (https://elementary.io)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Expand Down Expand Up @@ -32,7 +32,8 @@ public class Installer.CheckView : AbstractInstallerView {
public signal void status_changed (bool met_requirements);

bool enough_space = true;
bool enough_power = true;
bool minimum_specs = true;
bool vm = false;
bool powered = true;

int frequency = 0;
Expand All @@ -45,6 +46,7 @@ public class Installer.CheckView : AbstractInstallerView {
NONE,
SPACE,
SPECS,
VM,
POWERED
}

Expand All @@ -65,7 +67,7 @@ public class Installer.CheckView : AbstractInstallerView {

ignore_button = new Gtk.Button.with_label (_("Ignore"));
ignore_button.get_style_context ().add_class (Gtk.STYLE_CLASS_DESTRUCTIVE_ACTION);
ignore_button.clicked.connect (() => next_step ());
ignore_button.clicked.connect (() => show_next ());

show_all ();
}
Expand All @@ -76,17 +78,19 @@ public class Installer.CheckView : AbstractInstallerView {

frequency = get_frequency ();
if (frequency < MINIMUM_FREQUENCY && frequency > 0) {
enough_power = false;
minimum_specs = false;
}

memory = get_mem_info ();
if (memory < MINIMUM_MEMORY) {
enough_power = false;
minimum_specs = false;
}

powered = !get_is_on_battery ();

bool result = enough_space && enough_power && powered;
vm = get_vm ();

bool result = enough_space && minimum_specs && !vm && powered;
if (result == false) {
show_next ();
}
Expand Down Expand Up @@ -144,13 +148,6 @@ public class Installer.CheckView : AbstractInstallerView {
if (upower == null) {
try {
upower = Bus.get_proxy_sync (BusType.SYSTEM, "org.freedesktop.UPower", "/org/freedesktop/UPower", GLib.DBusProxyFlags.GET_INVALIDATED_PROPERTIES);

(upower as DBusProxy).g_properties_changed.connect ((changed, invalid) => {
var _on_battery = changed.lookup_value ("OnBattery", GLib.VariantType.BOOLEAN);
if (_on_battery != null) {
status_changed (check_requirements ());
}
});
} catch (Error e) {
warning (e.message);
return false;
Expand All @@ -160,40 +157,76 @@ public class Installer.CheckView : AbstractInstallerView {
return upower.on_battery;
}

private static bool get_vm () {
File file = File.new_for_path ("/proc/cpuinfo");
try {
DataInputStream dis = new DataInputStream (file.read ());
string? line;
while ((line = dis.read_line (null,null)) != null) {
if (line.has_prefix ("flags") && line.contains ("hypervisor")) {
return true;
}
}
} catch (Error e) {
critical (e.message);
}

return false;
}

private void show_next () {
State next_state = State.NONE;
switch (current_state) {
case State.NONE:
if (!enough_space) {
next_state = State.SPACE;
} else if (!enough_power) {
} else if (!minimum_specs) {
next_state = State.SPECS;
} else if (vm) {
next_state = State.VM;
} else if (!powered) {
next_state = State.POWERED;
} else {
next_step ();
return;
}

break;
case State.SPACE:
if (!enough_power) {
if (!minimum_specs) {
next_state = State.SPECS;
} else if (vm) {
next_state = State.VM;
} else if (!powered) {
next_state = State.POWERED;
} else {
next_step ();
return;
}

break;
case State.SPECS:
if (vm) {
next_state = State.VM;
} else if (!powered) {
next_state = State.POWERED;
} else {
next_step ();
return;
}

break;
case State.VM:
if (!powered) {
next_state = State.POWERED;
} else {
next_step ();
return;
}

break;
case State.POWERED:
next_step ();
return;
}

Expand Down Expand Up @@ -227,6 +260,22 @@ public class Installer.CheckView : AbstractInstallerView {
stack.set_visible_child (grid);
break;

case State.VM:
var grid = setup_grid (
_("Virtual Machine"),
_("You appear to be installing in a virtual machine. Some parts of %s may run slowly, freeze, or not function properly in a virtual machine. It's recommended to install on real hardware.").printf (Utils.get_pretty_name ()),
"utilities-system-monitor"
);
grid.show_all ();

if (ignore_button.parent == null) {
action_area.add (ignore_button);
}

stack.add (grid);
stack.set_visible_child (grid);
break;

case State.POWERED:
var grid = setup_grid (
_("Connect to a Power Source"),
Expand Down Expand Up @@ -343,3 +392,4 @@ public class Installer.CheckView : AbstractInstallerView {
public interface UPower : GLib.Object {
public abstract bool on_battery { owned get; set; }
}