1/*
2 * Copyright 2017, Haiku, Inc. All Rights Reserved.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		Brian Hill <supernova@tycho.email>
7 */
8
9
10#include "CheckAction.h"
11
12#include <Application.h>
13#include <Catalog.h>
14#include <package/manager/Exceptions.h>
15
16
17#undef B_TRANSLATION_CONTEXT
18#define B_TRANSLATION_CONTEXT "CheckAction"
19
20
21using namespace BPackageKit;
22//using namespace BPackageKit::BPrivate;
23using namespace BPackageKit::BManager::BPrivate;
24
25
26CheckAction::CheckAction(bool verbose)
27{
28	fCheckManager = new(std::nothrow)
29		CheckManager(B_PACKAGE_INSTALLATION_LOCATION_SYSTEM, verbose);
30}
31
32
33CheckAction::~CheckAction()
34{
35	delete fCheckManager;
36}
37
38
39status_t
40CheckAction::Perform()
41{
42	try {
43		fCheckManager->CheckNetworkConnection();
44
45		fCheckManager->Init(BPackageManager::B_ADD_INSTALLED_REPOSITORIES
46			| BPackageManager::B_ADD_REMOTE_REPOSITORIES
47			| BPackageManager::B_REFRESH_REPOSITORIES);
48
49//		fUpdateManager->SetDebugLevel(1);
50		// These values indicate that all updates should be installed
51		int packageCount = 0;
52		const char* const packages = "";
53		fCheckManager->Update(&packages, packageCount);
54	} catch (BFatalErrorException& ex) {
55		fprintf(stderr, B_TRANSLATE(
56				"Fatal error while checking for updates: %s\n"),
57			ex.Message().String());
58		be_app->PostMessage(kMsgFinalQuit);
59		return ex.Error();
60	} catch (BAbortedByUserException& ex) {
61		be_app->PostMessage(kMsgFinalQuit);
62		return B_OK;
63	} catch (BNothingToDoException& ex) {
64		puts(B_TRANSLATE("There were no updates found."));
65		fCheckManager->NoUpdatesNotification();
66		be_app->PostMessage(kMsgFinalQuit);
67		return B_OK;
68	} catch (BException& ex) {
69		fprintf(stderr, B_TRANSLATE(
70				"Exception occurred while checking for updates: %s\n"),
71			ex.Message().String());
72		be_app->PostMessage(kMsgFinalQuit);
73		return B_ERROR;
74	}
75
76	return B_OK;
77}
78