xref: /haiku/src/apps/haikudepot/packagemanagement/InstallPackageProcess.h (revision ae5abb58266fba43b3479995388d13e92013e08f)
1 /*
2  * Copyright 2013, Stephan Aßmus <superstippi@gmx.de>.
3  * Copyright 2011, Ingo Weinhold, <ingo_weinhold@gmx.de>
4  * Copyright 2013, Rene Gollent, <rene@gollent.com>
5  * Copyright 2017, Julian Harnath <julian.harnath@rwth-aachen.de>.
6  * Copyright 2021, Andrew Lindesay <apl@lindesay.co.nz>.
7  *
8  * All rights reserved. Distributed under the terms of the MIT License.
9  *
10  * Note that this file has been re-factored from `PackageManager.h` and
11  * copyrights have been carried across in 2021.
12  */
13 #ifndef INSTALL_PACKAGE_PROCESS_H
14 #define INSTALL_PACKAGE_PROCESS_H
15 
16 #include <vector>
17 
18 #include "AbstractPackageProcess.h"
19 #include "PackageProgressListener.h"
20 
21 
22 typedef std::set<PackageInfoRef> PackageInfoSet;
23 
24 
25 class DownloadProgress;
26 
27 
28 class InstallPackageProcess
29 	: public AbstractPackageProcess,
30 		private PackageProgressListener {
31 public:
32 								InstallPackageProcess(
33 									PackageInfoRef package, Model* model);
34 	virtual						~InstallPackageProcess();
35 
36 	virtual	const char*			Name() const;
37 	virtual	const char*			Description() const;
38 	virtual float				Progress();
39 
40 	// DownloadProgressListener
41 	virtual void 				DownloadProgressChanged(
42 									const char* packageName,
43 									float progress);
44 	virtual void				DownloadProgressComplete(
45 									const char* packageName);
46 	virtual	void				ConfirmedChanges(
47 									BPackageManager::InstalledRepository&
48 									repository);
49 
50 protected:
51 	virtual	status_t			RunInternal();
52 
53 private:
54 	static	status_t			_DeriveSimplePackageName(
55 									const BString& canonicalForm,
56 									BString& simplePackageName);
57 
58 			void				_SetDownloadedPackagesState(
59 									PackageState state);
60 
61 			void				_SetDownloadProgress(
62 									const BString& simplePackageName,
63 									float progress);
64 
65 private:
66 			std::vector<DownloadProgress>
67 								fDownloadProgresses;
68 			BString				fDescription;
69 			bigtime_t			fLastDownloadUpdate;
70 			PackageInfoSet		fDownloadedPackages;
71 };
72 
73 #endif // INSTALL_PACKAGE_PROCESS_H
74