* Copyright (c) 2007-2009, Haiku, Inc. All rights reserved.
* Distributed under the terms of the MIT license.
*
* Author:
* Łukasz 'Sil2100' Zemczak <sil2100@vexillium.org>
*/
#include "main.h"
#include "PackageWindow.h"
#include "UninstallWindow.h"
#include <Alert.h>
#include <Application.h>
#include <Autolock.h>
#include <Catalog.h>
#include <Entry.h>
#include <List.h>
#include <Locale.h>
#include <Path.h>
#include <TextView.h>
#include <stdio.h>
#undef B_TRANSLATION_CONTEXT
#define B_TRANSLATION_CONTEXT "Packageinstaller main"
bool gVerbose = false;
PackageInstaller::PackageInstaller()
:
BApplication("application/x-vnd.Haiku-PackageInstaller"),
fWindowCount(0)
{
}
PackageInstaller::~PackageInstaller()
{
}
void
PackageInstaller::ReadyToRun()
{
if (fWindowCount == 0) {
(new UninstallWindow)->Show();
fWindowCount++;
}
}
void
PackageInstaller::RefsReceived(BMessage* message)
{
entry_ref ref;
for (int32 i = 0; message->FindRef("refs", i, &ref) == B_OK; i++)
_NewWindow(&ref);
}
void
PackageInstaller::ArgvReceived(int32 argc, char** argv)
{
for (int i = 1; i < argc; i++) {
if (strcmp("--verbose", argv[i]) == 0 || strcmp("-v", argv[i]) == 0) {
gVerbose = true;
continue;
}
BPath path;
if (path.SetTo(argv[i]) != B_OK) {
fprintf(stderr, B_TRANSLATE("Error! \"%s\" is not a valid path.\n"),
argv[i]);
continue;
}
entry_ref ref;
status_t ret = get_ref_for_path(path.Path(), &ref);
if (ret != B_OK) {
fprintf(stderr, B_TRANSLATE("Error (%s)! Could not open \"%s\".\n"),
strerror(ret), argv[i]);
continue;
}
_NewWindow(&ref);
}
}
void
PackageInstaller::MessageReceived(BMessage* message)
{
switch (message->what) {
case P_WINDOW_QUIT:
fWindowCount--;
case B_CANCEL:
if (fWindowCount == 0)
PostMessage(B_QUIT_REQUESTED);
break;
default:
BApplication::MessageReceived(message);
}
}
void
PackageInstaller::_NewWindow(const entry_ref* ref)
{
PackageWindow* window = new PackageWindow(ref);
window->Show();
fWindowCount++;
}
int
main(void)
{
PackageInstaller app;
app.Run();
return 0;
}