1/*
2 * Copyright (c) 2007-2009, Haiku, Inc. All rights reserved.
3 * Distributed under the terms of the MIT license.
4 *
5 * Author:
6 *		Łukasz 'Sil2100' Zemczak <sil2100@vexillium.org>
7 */
8
9#include "main.h"
10
11#include "PackageWindow.h"
12#include "UninstallWindow.h"
13
14#include <Alert.h>
15#include <Application.h>
16#include <Autolock.h>
17#include <Catalog.h>
18#include <Entry.h>
19#include <List.h>
20#include <Locale.h>
21#include <Path.h>
22#include <TextView.h>
23
24#include <stdio.h>
25
26
27#undef B_TRANSLATION_CONTEXT
28#define B_TRANSLATION_CONTEXT "Packageinstaller main"
29
30
31bool gVerbose = false;
32
33
34PackageInstaller::PackageInstaller()
35	:
36	BApplication("application/x-vnd.Haiku-PackageInstaller"),
37	fWindowCount(0)
38{
39}
40
41
42PackageInstaller::~PackageInstaller()
43{
44}
45
46
47void
48PackageInstaller::ReadyToRun()
49{
50	// We're ready to run - if no windows are yet visible, this means that
51	// we should show the UninstallWindow
52	if (fWindowCount == 0) {
53		(new UninstallWindow)->Show();
54		fWindowCount++;
55	}
56}
57
58
59void
60PackageInstaller::RefsReceived(BMessage* message)
61{
62	entry_ref ref;
63	for (int32 i = 0; message->FindRef("refs", i, &ref) == B_OK; i++)
64		_NewWindow(&ref);
65}
66
67
68void
69PackageInstaller::ArgvReceived(int32 argc, char** argv)
70{
71	for (int i = 1; i < argc; i++) {
72		if (strcmp("--verbose", argv[i]) == 0 || strcmp("-v", argv[i]) == 0) {
73			gVerbose = true;
74			continue;
75		}
76
77		BPath path;
78		if (path.SetTo(argv[i]) != B_OK) {
79			fprintf(stderr, B_TRANSLATE("Error! \"%s\" is not a valid path.\n"),
80				argv[i]);
81			continue;
82		}
83
84		entry_ref ref;
85		status_t ret = get_ref_for_path(path.Path(), &ref);
86		if (ret != B_OK) {
87			fprintf(stderr, B_TRANSLATE("Error (%s)! Could not open \"%s\".\n"),
88				strerror(ret), argv[i]);
89			continue;
90		}
91
92		_NewWindow(&ref);
93	}
94}
95
96
97void
98PackageInstaller::MessageReceived(BMessage* message)
99{
100	switch (message->what) {
101		case P_WINDOW_QUIT:
102			fWindowCount--;
103			// fall through
104		case B_CANCEL:
105			if (fWindowCount == 0)
106				PostMessage(B_QUIT_REQUESTED);
107			break;
108
109		default:
110			BApplication::MessageReceived(message);
111	}
112}
113
114
115void
116PackageInstaller::_NewWindow(const entry_ref* ref)
117{
118	PackageWindow* window = new PackageWindow(ref);
119	window->Show();
120
121	fWindowCount++;
122}
123
124
125int
126main(void)
127{
128	PackageInstaller app;
129	app.Run();
130
131	return 0;
132}
133
134