1/*
2 * Copyright 2013-2019, Haiku, Inc. All Rights Reserved.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		Ingo Weinhold <ingo_weinhold@gmx.de>
7 *		Rene Gollent <rene@gollent.com>
8 *		Brian Hill <supernova@tycho.email>
9 *		Jacob Secunda
10 */
11#ifndef UPDATE_MANAGER_H
12#define UPDATE_MANAGER_H
13
14
15#include <package/DaemonClient.h>
16#include <package/manager/PackageManager.h>
17
18#include "constants.h"
19#include "SoftwareUpdaterWindow.h"
20
21class ProblemWindow;
22
23//using namespace BPackageKit;
24using BPackageKit::BPackageInstallationLocation;
25using BPackageKit::BPrivate::BDaemonClient;
26using BPackageKit::BManager::BPrivate::BPackageManager;
27
28
29class UpdateManager : public BPackageManager,
30	private BPackageManager::UserInteractionHandler {
31public:
32								UpdateManager(
33									BPackageInstallationLocation location,
34									bool verbose);
35								~UpdateManager();
36
37			void				CheckNetworkConnection();
38			update_type			GetUpdateType();
39			void				CheckRepositories();
40	virtual	void				JobFailed(BSupportKit::BJob* job);
41	virtual	void				JobAborted(BSupportKit::BJob* job);
42			void				FinalUpdate(const char* header,
43									const char* text);
44private:
45	// UserInteractionHandler
46	virtual	void				HandleProblems();
47	virtual	void				ConfirmChanges(bool fromMostSpecific);
48	virtual	void				Warn(status_t error, const char* format, ...);
49
50	virtual	void				ProgressPackageDownloadStarted(
51									const char* packageName);
52	virtual	void				ProgressPackageDownloadActive(
53									const char* packageName,
54									float completionValue,
55									off_t bytes, off_t totalBytes);
56	virtual	void				ProgressPackageDownloadComplete(
57									const char* packageName);
58	virtual	void				ProgressPackageChecksumStarted(
59									const char* packageName);
60	virtual	void				ProgressPackageChecksumComplete(
61									const char* packageName);
62
63	virtual	void				ProgressStartApplyingChanges(
64									InstalledRepository& repository);
65	virtual	void				ProgressTransactionCommitted(
66									InstalledRepository& repository,
67									const BPackageKit::BCommitTransactionResult& result);
68	virtual	void				ProgressApplyingChangesDone(
69									InstalledRepository& repository);
70
71private:
72			void				_PrintResult(InstalledRepository&
73									installationRepository,
74									int32& upgradeCount,
75									int32& installCount,
76									int32& uninstallCount);
77			void				_UpdateStatusWindow(const char* header,
78									const char* detail);
79			void				_UpdateDownloadProgress(const char* header,
80									const char* packageName,
81									float percentageComplete);
82			void				_FinalUpdate(const char* header,
83									const char* text);
84			void				_SetCurrentStep(int32 step);
85
86private:
87			BPackageManager::ClientInstallationInterface
88									fClientInstallationInterface;
89
90			SoftwareUpdaterWindow*	fStatusWindow;
91			BMessenger				fStatusWindowMessenger;
92			ProblemWindow*			fProblemWindow;
93			BMessenger				fProblemWindowMessenger;
94			uint32					fCurrentStep;
95			bool					fChangesConfirmed;
96			bool					fNewDownloadStarted;
97			int32					fPackageDownloadsTotal;
98			int32					fPackageDownloadsCount;
99			bool					fVerbose;
100};
101
102
103#endif	// UPDATE_MANAGER_H
104