1/*
2 * Copyright 2020, Panagiotis "Ivory" Vasilopoulos <git@n0toose.net>
3 * Copyright 2015, Axel D��rfler <axeld@pinc-software.de>
4 * Copyright 2009, Stephan A��mus <superstippi@gmx.de>
5 * Copyright 2005, J��r��me DUVAL.
6 * All rights reserved. Distributed under the terms of the MIT License.
7 */
8
9#include "InstallerApp.h"
10
11#include <unistd.h>
12
13#include <Alert.h>
14#include <Roster.h>
15#include <TextView.h>
16
17#include <syscalls.h>
18
19#include "tracker_private.h"
20#include "Utility.h"
21
22
23static const uint32 kMsgAgree = 'agre';
24static const uint32 kMsgNext = 'next';
25
26#undef B_TRANSLATION_CONTEXT
27#define B_TRANSLATION_CONTEXT "InstallerApp"
28
29
30int main(int, char **)
31{
32	InstallerApp installer;
33	installer.Run();
34	return 0;
35}
36
37
38InstallerApp::InstallerApp()
39	:
40	BApplication("application/x-vnd.Haiku-Installer")
41{
42}
43
44
45void
46InstallerApp::MessageReceived(BMessage* message)
47{
48	switch (message->what) {
49		case kMsgAgree:
50			fEULAWindow->PostMessage(B_QUIT_REQUESTED);
51			break;
52		case kMsgNext:
53			new InstallerWindow();
54			break;
55
56		default:
57			BApplication::MessageReceived(message);
58	}
59}
60
61
62void
63InstallerApp::ReadyToRun()
64{
65#if 1
66	// Show the EULA first.
67	fEULAWindow = new EULAWindow();
68#else
69	// Show the installer window without EULA.
70	new InstallerWindow();
71#endif
72}
73
74
75void
76InstallerApp::Quit()
77{
78	BApplication::Quit();
79
80	if (!be_roster->IsRunning(kDeskbarSignature)) {
81		if (CurrentMessage()->GetBool("install_complete")) {
82			// Synchronize disks
83			sync();
84
85			if (Utility::IsReadOnlyVolume("/boot")) {
86				// Unblock CD tray, and eject the CD
87				Utility::BlockMedia("/boot", false);
88				Utility::EjectMedia("/boot");
89			}
90
91			// Quickly reboot without touching anything
92			// on disk (which we might just have ejected)
93			_kern_shutdown(true);
94		} else {
95			// Return to FirstBootPrompt if the user hasn't
96			// installed Haiku yet
97			be_roster->Launch("application/x-vnd.Haiku-FirstBootPrompt");
98		}
99	}
100}
101