182bdec56SStephan Aßmus/*
24fc7f247SStephan Aßmus * Copyright 2013-2014, Stephan A��mus <superstippi@gmx.de>.
3f85e0300SAndrew Lindesay * Copyright 2016-2019, Andrew Lindesay <apl@lindesay.co.nz>.
482bdec56SStephan Aßmus * All rights reserved. Distributed under the terms of the MIT License.
582bdec56SStephan Aßmus */
682bdec56SStephan Aßmus#ifndef PACKAGE_INFO_H
782bdec56SStephan Aßmus#define PACKAGE_INFO_H
882bdec56SStephan Aßmus
982bdec56SStephan Aßmus
10fe184534SRene Gollent#include <set>
11fe184534SRene Gollent
12f85e0300SAndrew Lindesay#include <Language.h>
13cdbf478fSStephan Aßmus#include <Referenceable.h>
146d519fd1SStephan Aßmus#include <package/PackageInfo.h>
1582bdec56SStephan Aßmus
1682bdec56SStephan Aßmus#include "List.h"
1792dbf186SStephan Aßmus#include "PackageInfoListener.h"
182e19e8fcSStephan Aßmus#include "SharedBitmap.h"
19cdbf478fSStephan Aßmus
20cdbf478fSStephan Aßmus
215f52e82cSStephan Aßmusclass BPath;
225f52e82cSStephan Aßmus
235f52e82cSStephan Aßmus
24f85e0300SAndrew Lindesay/*! This class represents a language that is supported by the Haiku
25f85e0300SAndrew Lindesay    Depot Server system.  This may differ from the set of languages
26f85e0300SAndrew Lindesay    that are supported in the platform itself.
27f85e0300SAndrew Lindesay*/
28f85e0300SAndrew Lindesay
29f85e0300SAndrew Lindesayclass Language : public BReferenceable, public BLanguage {
30f85e0300SAndrew Lindesaypublic:
31f85e0300SAndrew Lindesay								Language(const char* language,
32f85e0300SAndrew Lindesay									const BString& serverName,
33f85e0300SAndrew Lindesay									bool isPopular);
34f85e0300SAndrew Lindesay								Language(const Language& other);
35f85e0300SAndrew Lindesay
36f85e0300SAndrew Lindesay			status_t			GetName(BString& name,
37f85e0300SAndrew Lindesay									const BLanguage* displayLanguage = NULL
38f85e0300SAndrew Lindesay									) const;
39f85e0300SAndrew Lindesay			bool				IsPopular() const
40f85e0300SAndrew Lindesay									{ return fIsPopular; }
41f85e0300SAndrew Lindesay
42f85e0300SAndrew Lindesayprivate:
43f85e0300SAndrew Lindesay			BString				fServerName;
44f85e0300SAndrew Lindesay			bool				fIsPopular;
45f85e0300SAndrew Lindesay};
46f85e0300SAndrew Lindesay
47f85e0300SAndrew Lindesay
4882bdec56SStephan Aßmusclass UserInfo {
4982bdec56SStephan Aßmuspublic:
5082bdec56SStephan Aßmus								UserInfo();
5182bdec56SStephan Aßmus								UserInfo(const BString& nickName);
5282bdec56SStephan Aßmus								UserInfo(const UserInfo& other);
5382bdec56SStephan Aßmus
5482bdec56SStephan Aßmus			UserInfo&			operator=(const UserInfo& other);
5582bdec56SStephan Aßmus			bool				operator==(const UserInfo& other) const;
5682bdec56SStephan Aßmus			bool				operator!=(const UserInfo& other) const;
5782bdec56SStephan Aßmus
58cdbf478fSStephan Aßmus			const BString&		NickName() const
59cdbf478fSStephan Aßmus									{ return fNickName; }
6082bdec56SStephan Aßmus
6182bdec56SStephan Aßmusprivate:
6282bdec56SStephan Aßmus			BString				fNickName;
6382bdec56SStephan Aßmus};
6482bdec56SStephan Aßmus
6582bdec56SStephan Aßmus
6682bdec56SStephan Aßmusclass UserRating {
6782bdec56SStephan Aßmuspublic:
6882bdec56SStephan Aßmus								UserRating();
6982bdec56SStephan Aßmus								UserRating(const UserInfo& userInfo,
703883c020SStephan Aßmus									float rating,
713883c020SStephan Aßmus									const BString& comment,
723883c020SStephan Aßmus									const BString& language,
734f434bc6SStephan Aßmus									const BString& packageVersion,
74d2d4866dSAndrew Lindesay									uint64 createTimestamp);
7582bdec56SStephan Aßmus								UserRating(const UserRating& other);
7682bdec56SStephan Aßmus
7782bdec56SStephan Aßmus			UserRating&			operator=(const UserRating& other);
7882bdec56SStephan Aßmus			bool				operator==(const UserRating& other) const;
7982bdec56SStephan Aßmus			bool				operator!=(const UserRating& other) const;
8082bdec56SStephan Aßmus
8182bdec56SStephan Aßmus			const UserInfo&		User() const
8282bdec56SStephan Aßmus									{ return fUserInfo; }
8382bdec56SStephan Aßmus			const BString&		Comment() const
8482bdec56SStephan Aßmus									{ return fComment; }
8546d5f6b4SStephan Aßmus			const BString&		Language() const
8646d5f6b4SStephan Aßmus									{ return fLanguage; }
8782bdec56SStephan Aßmus			const float			Rating() const
8882bdec56SStephan Aßmus									{ return fRating; }
8982bdec56SStephan Aßmus			const BString&		PackageVersion() const
9082bdec56SStephan Aßmus									{ return fPackageVersion; }
91d2d4866dSAndrew Lindesay			const uint64		CreateTimestamp() const
92a9edb9bfSAndrew Lindesay									{ return fCreateTimestamp; }
9382bdec56SStephan Aßmusprivate:
9482bdec56SStephan Aßmus			UserInfo			fUserInfo;
9582bdec56SStephan Aßmus			float				fRating;
963883c020SStephan Aßmus			BString				fComment;
973883c020SStephan Aßmus			BString				fLanguage;
9882bdec56SStephan Aßmus			BString				fPackageVersion;
99d2d4866dSAndrew Lindesay			uint64				fCreateTimestamp;
100d2d4866dSAndrew Lindesay				// milliseconds since epoc
10182bdec56SStephan Aßmus};
10282bdec56SStephan Aßmus
10382bdec56SStephan Aßmus
10482bdec56SStephan Aßmustypedef List<UserRating, false> UserRatingList;
10582bdec56SStephan Aßmus
10682bdec56SStephan Aßmus
107c7689407SStephan Aßmusclass RatingSummary {
1087d0dab12SStephan Aßmuspublic:
1097d0dab12SStephan Aßmus								RatingSummary();
1107d0dab12SStephan Aßmus								RatingSummary(const RatingSummary& other);
1117d0dab12SStephan Aßmus
1127d0dab12SStephan Aßmus			RatingSummary&		operator=(const RatingSummary& other);
1137d0dab12SStephan Aßmus			bool				operator==(const RatingSummary& other) const;
1147d0dab12SStephan Aßmus			bool				operator!=(const RatingSummary& other) const;
1157d0dab12SStephan Aßmus
116c7689407SStephan Aßmuspublic:
117c7689407SStephan Aßmus			float				averageRating;
118c7689407SStephan Aßmus			int					ratingCount;
119c7689407SStephan Aßmus
120c7689407SStephan Aßmus			int					ratingCountByStar[5];
121c7689407SStephan Aßmus};
122c7689407SStephan Aßmus
123c7689407SStephan Aßmus
124967a2818SStephan Aßmusclass StabilityRating {
125967a2818SStephan Aßmuspublic:
126967a2818SStephan Aßmus								StabilityRating();
127967a2818SStephan Aßmus								StabilityRating(
128967a2818SStephan Aßmus									const BString& label,
129967a2818SStephan Aßmus									const BString& name);
130967a2818SStephan Aßmus								StabilityRating(const StabilityRating& other);
131967a2818SStephan Aßmus
132967a2818SStephan Aßmus			StabilityRating&	operator=(const StabilityRating& other);
133967a2818SStephan Aßmus			bool				operator==(const StabilityRating& other) const;
134967a2818SStephan Aßmus			bool				operator!=(const StabilityRating& other) const;
135967a2818SStephan Aßmus
136967a2818SStephan Aßmus			const BString&		Label() const
137967a2818SStephan Aßmus									{ return fLabel; }
138967a2818SStephan Aßmus			const BString&		Name() const
139967a2818SStephan Aßmus									{ return fName; }
140967a2818SStephan Aßmusprivate:
141967a2818SStephan Aßmus			BString				fLabel;
142967a2818SStephan Aßmus			BString				fName;
143967a2818SStephan Aßmus};
144967a2818SStephan Aßmus
145967a2818SStephan Aßmus
146967a2818SStephan Aßmustypedef List<StabilityRating, false> StabilityRatingList;
147967a2818SStephan Aßmus
148967a2818SStephan Aßmus
149b42e741fSStephan Aßmusclass PublisherInfo {
150b42e741fSStephan Aßmuspublic:
151b42e741fSStephan Aßmus								PublisherInfo();
152b42e741fSStephan Aßmus								PublisherInfo(const BitmapRef& logo,
153b42e741fSStephan Aßmus									const BString& name,
154b42e741fSStephan Aßmus									const BString& email,
155b42e741fSStephan Aßmus									const BString& website);
156b42e741fSStephan Aßmus								PublisherInfo(const PublisherInfo& other);
157b42e741fSStephan Aßmus
158b42e741fSStephan Aßmus			PublisherInfo&		operator=(const PublisherInfo& other);
159b42e741fSStephan Aßmus			bool				operator==(const PublisherInfo& other) const;
160b42e741fSStephan Aßmus			bool				operator!=(const PublisherInfo& other) const;
161b42e741fSStephan Aßmus
162b42e741fSStephan Aßmus			const BitmapRef&	Logo() const
163b42e741fSStephan Aßmus									{ return fLogo; }
164b42e741fSStephan Aßmus			const BString&		Name() const
165b42e741fSStephan Aßmus									{ return fName; }
166b42e741fSStephan Aßmus			const BString&		Email() const
167b42e741fSStephan Aßmus									{ return fEmail; }
168b42e741fSStephan Aßmus			const BString&		Website() const
169b42e741fSStephan Aßmus									{ return fWebsite; }
170b42e741fSStephan Aßmus
171b42e741fSStephan Aßmusprivate:
172b42e741fSStephan Aßmus			BitmapRef			fLogo;
173b42e741fSStephan Aßmus			BString				fName;
174b42e741fSStephan Aßmus			BString				fEmail;
175b42e741fSStephan Aßmus			BString				fWebsite;
176b42e741fSStephan Aßmus};
177b42e741fSStephan Aßmus
178b42e741fSStephan Aßmus
179f75ec10dSStephan Aßmusclass PackageCategory : public BReferenceable {
180f75ec10dSStephan Aßmuspublic:
181f75ec10dSStephan Aßmus								PackageCategory();
18289b16bb4SAndrew Lindesay								PackageCategory(const BString& code,
183f75ec10dSStephan Aßmus									const BString& name);
184f75ec10dSStephan Aßmus								PackageCategory(const PackageCategory& other);
185f75ec10dSStephan Aßmus
186f75ec10dSStephan Aßmus			PackageCategory&	operator=(const PackageCategory& other);
187f75ec10dSStephan Aßmus			bool				operator==(const PackageCategory& other) const;
188f75ec10dSStephan Aßmus			bool				operator!=(const PackageCategory& other) const;
189f75ec10dSStephan Aßmus
19089b16bb4SAndrew Lindesay			const BString&		Code() const
19189b16bb4SAndrew Lindesay									{ return fCode; }
192f75ec10dSStephan Aßmus			const BString&		Name() const
193f75ec10dSStephan Aßmus									{ return fName; }
194f75ec10dSStephan Aßmusprivate:
19589b16bb4SAndrew Lindesay			BString				fCode;
196f75ec10dSStephan Aßmus			BString				fName;
197f75ec10dSStephan Aßmus};
198f75ec10dSStephan Aßmus
199f75ec10dSStephan Aßmus
200f75ec10dSStephan Aßmustypedef BReference<PackageCategory> CategoryRef;
201f75ec10dSStephan Aßmustypedef List<CategoryRef, false> CategoryList;
202f75ec10dSStephan Aßmus
203f75ec10dSStephan Aßmus
2041d9d4873SStephan Aßmusclass ScreenshotInfo {
2051d9d4873SStephan Aßmuspublic:
2061d9d4873SStephan Aßmus								ScreenshotInfo();
2071d9d4873SStephan Aßmus								ScreenshotInfo(const BString& code,
2081d9d4873SStephan Aßmus									int32 width, int32 height, int32 dataSize);
2091d9d4873SStephan Aßmus								ScreenshotInfo(const ScreenshotInfo& other);
2101d9d4873SStephan Aßmus
2111d9d4873SStephan Aßmus			ScreenshotInfo&		operator=(const ScreenshotInfo& other);
2121d9d4873SStephan Aßmus			bool				operator==(const ScreenshotInfo& other) const;
2131d9d4873SStephan Aßmus			bool				operator!=(const ScreenshotInfo& other) const;
2141d9d4873SStephan Aßmus
2151d9d4873SStephan Aßmus			const BString&		Code() const
2161d9d4873SStephan Aßmus									{ return fCode; }
2171d9d4873SStephan Aßmus			int32				Width() const
2181d9d4873SStephan Aßmus									{ return fWidth; }
2191d9d4873SStephan Aßmus			int32				Height() const
2201d9d4873SStephan Aßmus									{ return fHeight; }
2211d9d4873SStephan Aßmus			int32				DataSize() const
2221d9d4873SStephan Aßmus									{ return fDataSize; }
2231d9d4873SStephan Aßmus
2241d9d4873SStephan Aßmusprivate:
2251d9d4873SStephan Aßmus			BString				fCode;
2261d9d4873SStephan Aßmus			int32				fWidth;
2271d9d4873SStephan Aßmus			int32				fHeight;
2281d9d4873SStephan Aßmus			int32				fDataSize;
2291d9d4873SStephan Aßmus};
2301d9d4873SStephan Aßmus
2311d9d4873SStephan Aßmus
2321d9d4873SStephan Aßmustypedef List<ScreenshotInfo, false, 2> ScreenshotInfoList;
2331d9d4873SStephan Aßmus
2341d9d4873SStephan Aßmus
23592dbf186SStephan Aßmustypedef List<PackageInfoListenerRef, false, 2> PackageListenerList;
236fe184534SRene Gollenttypedef std::set<int32> PackageInstallationLocationSet;
23792dbf186SStephan Aßmus
2381d9d4873SStephan Aßmus
239b4c8d2ffSRene Gollentenum PackageState {
240b4c8d2ffSRene Gollent	NONE		= 0,
241b4c8d2ffSRene Gollent	INSTALLED	= 1,
242647fb4edSRene Gollent	DOWNLOADING	= 2,
243647fb4edSRene Gollent	ACTIVATED	= 3,
244647fb4edSRene Gollent	UNINSTALLED	= 4,
2454fc7f247SStephan Aßmus	PENDING		= 5,
246b4c8d2ffSRene Gollent};
247b4c8d2ffSRene Gollent
248b4c8d2ffSRene Gollent
2496d519fd1SStephan Aßmususing BPackageKit::BPackageInfo;
25046bcb34dSStephan Aßmususing BPackageKit::BPackageVersion;
25146bcb34dSStephan Aßmus
25246bcb34dSStephan Aßmus
253779d8213SStephan Aßmusclass PackageInfo : public BReferenceable {
25482bdec56SStephan Aßmuspublic:
25582bdec56SStephan Aßmus								PackageInfo();
2566d519fd1SStephan Aßmus								PackageInfo(const BPackageInfo& info);
257a60a23f8SStephan Aßmus								PackageInfo(
25872992391SStephan Aßmus									const BString& name,
25946bcb34dSStephan Aßmus									const BPackageVersion& version,
260b42e741fSStephan Aßmus									const PublisherInfo& publisher,
26146d5f6b4SStephan Aßmus									const BString& shortDescription,
26246d5f6b4SStephan Aßmus									const BString& fullDescription,
2636e48c81bSStephan Aßmus									int32 packageFlags,
2646e48c81bSStephan Aßmus									const char* architecture);
26582bdec56SStephan Aßmus								PackageInfo(const PackageInfo& other);
26682bdec56SStephan Aßmus
26782bdec56SStephan Aßmus			PackageInfo&		operator=(const PackageInfo& other);
26882bdec56SStephan Aßmus			bool				operator==(const PackageInfo& other) const;
26982bdec56SStephan Aßmus			bool				operator!=(const PackageInfo& other) const;
27082bdec56SStephan Aßmus
27172992391SStephan Aßmus			const BString&		Name() const
27272992391SStephan Aßmus									{ return fName; }
27372992391SStephan Aßmus			void				SetTitle(const BString& title);
27472992391SStephan Aßmus			const BString&		Title() const;
27546bcb34dSStephan Aßmus			const BPackageVersion& Version() const
27682bdec56SStephan Aßmus									{ return fVersion; }
2776e48c81bSStephan Aßmus			void				SetShortDescription(const BString& description);
27846d5f6b4SStephan Aßmus			const BString&		ShortDescription() const
27946d5f6b4SStephan Aßmus									{ return fShortDescription; }
2806e48c81bSStephan Aßmus			void				SetFullDescription(const BString& description);
28146d5f6b4SStephan Aßmus			const BString&		FullDescription() const
28246d5f6b4SStephan Aßmus									{ return fFullDescription; }
283b42e741fSStephan Aßmus			const PublisherInfo& Publisher() const
284b42e741fSStephan Aßmus									{ return fPublisher; }
285a60a23f8SStephan Aßmus
286a60a23f8SStephan Aßmus			void				SetIcon(const BitmapRef& icon);
287a60a23f8SStephan Aßmus			const BitmapRef&	Icon() const
288a60a23f8SStephan Aßmus									{ return fIcon; }
289a60a23f8SStephan Aßmus			void				SetChangelog(const BString& changelog);
29082bdec56SStephan Aßmus			const BString&		Changelog() const
29182bdec56SStephan Aßmus									{ return fChangelog; }
29282bdec56SStephan Aßmus
293fe184534SRene Gollent			int32				Flags() const
294fe184534SRene Gollent									{ return fFlags; }
295fe184534SRene Gollent			bool				IsSystemPackage() const;
296fe184534SRene Gollent
2976ec9478bSRene Gollent			bool				IsSystemDependency() const
2986ec9478bSRene Gollent									{ return fSystemDependency; }
2996ec9478bSRene Gollent			void				SetSystemDependency(bool isDependency);
3006ec9478bSRene Gollent
3016e48c81bSStephan Aßmus			const BString		Architecture() const
3026e48c81bSStephan Aßmus									{ return fArchitecture; }
3036e48c81bSStephan Aßmus
304b4c8d2ffSRene Gollent			PackageState		State() const
305b4c8d2ffSRene Gollent									{ return fState; }
306b4c8d2ffSRene Gollent			void				SetState(PackageState state);
307b4c8d2ffSRene Gollent
308fe184534SRene Gollent			const PackageInstallationLocationSet&
309fe184534SRene Gollent								InstallationLocations() const
310fe184534SRene Gollent									{ return fInstallationLocations; }
311fe184534SRene Gollent			void				AddInstallationLocation(int32 location);
312fe184534SRene Gollent
313fe184534SRene Gollent			float				DownloadProgress() const
314fe184534SRene Gollent									{ return fDownloadProgress; }
315647fb4edSRene Gollent			void				SetDownloadProgress(float progress);
316647fb4edSRene Gollent
31789fbeddfSStephan Aßmus			void				SetLocalFilePath(const char* path);
31889fbeddfSStephan Aßmus			const BString&		LocalFilePath() const
31989fbeddfSStephan Aßmus									{ return fLocalFilePath; }
3205f52e82cSStephan Aßmus			bool				IsLocalFile() const;
3212d2824bfSStephan Aßmus			const BString&		FileName() const
3222d2824bfSStephan Aßmus									{ return fFileName; }
32387084745SMichael Lotz
3247eb09bfaSStephan Aßmus			void				ClearCategories();
325f75ec10dSStephan Aßmus			bool				AddCategory(const CategoryRef& category);
326f75ec10dSStephan Aßmus			const CategoryList&	Categories() const
327f75ec10dSStephan Aßmus									{ return fCategories; }
32882bdec56SStephan Aßmus
3297eb09bfaSStephan Aßmus			void				ClearUserRatings();
330f75ec10dSStephan Aßmus			bool				AddUserRating(const UserRating& rating);
331c7689407SStephan Aßmus			const UserRatingList& UserRatings() const
332c7689407SStephan Aßmus									{ return fUserRatings; }
3337d0dab12SStephan Aßmus			void				SetRatingSummary(const RatingSummary& summary);
334c7689407SStephan Aßmus			RatingSummary		CalculateRatingSummary() const;
335c7689407SStephan Aßmus
3366072a7e4SStephan Aßmus			void				SetProminence(float prominence);
3376072a7e4SStephan Aßmus			float				Prominence() const
3386072a7e4SStephan Aßmus									{ return fProminence; }
3396072a7e4SStephan Aßmus			bool				HasProminence() const
3406072a7e4SStephan Aßmus									{ return fProminence != 0.0f; }
3414fade61fSStephan Aßmus			bool				IsProminent() const;
3426072a7e4SStephan Aßmus
3437eb09bfaSStephan Aßmus			void				ClearScreenshotInfos();
3441d9d4873SStephan Aßmus			bool				AddScreenshotInfo(const ScreenshotInfo& info);
3451d9d4873SStephan Aßmus			const ScreenshotInfoList& ScreenshotInfos() const
3461d9d4873SStephan Aßmus									{ return fScreenshotInfos; }
3471d9d4873SStephan Aßmus
3487eb09bfaSStephan Aßmus			void				ClearScreenshots();
3499ecd9f02SStephan Aßmus			bool				AddScreenshot(const BitmapRef& screenshot);
3509ecd9f02SStephan Aßmus			const BitmapList&	Screenshots() const
3519ecd9f02SStephan Aßmus									{ return fScreenshots; }
3529ecd9f02SStephan Aßmus
353f67071b9SStephan Aßmus			void				SetSize(int64 size);
354f67071b9SStephan Aßmus			int64				Size() const
355f67071b9SStephan Aßmus									{ return fSize; }
356f67071b9SStephan Aßmus
357ebb1a01cSAndrew Lindesay			void				SetDepotName(const BString& depotName);
358ebb1a01cSAndrew Lindesay			const BString&		DepotName() const
359ebb1a01cSAndrew Lindesay									{ return fDepotName; }
360ebb1a01cSAndrew Lindesay
36192dbf186SStephan Aßmus			bool				AddListener(
36292dbf186SStephan Aßmus									const PackageInfoListenerRef& listener);
36392dbf186SStephan Aßmus			void				RemoveListener(
36492dbf186SStephan Aßmus									const PackageInfoListenerRef& listener);
36592dbf186SStephan Aßmus
3666d519fd1SStephan Aßmus	static	void				CleanupDefaultIcon();
3676d519fd1SStephan Aßmus
368d5b10131SAndrew Lindesay			void				StartCollatingChanges();
369d5b10131SAndrew Lindesay			void				EndCollatingChanges();
370d5b10131SAndrew Lindesay
37192dbf186SStephan Aßmusprivate:
37292dbf186SStephan Aßmus			void				_NotifyListeners(uint32 changes);
373d5b10131SAndrew Lindesay			void				_NotifyListenersImmediate(uint32 changes);
37492dbf186SStephan Aßmus
37582bdec56SStephan Aßmusprivate:
376cdbf478fSStephan Aßmus			BitmapRef			fIcon;
37772992391SStephan Aßmus			BString				fName;
37882bdec56SStephan Aßmus			BString				fTitle;
37946bcb34dSStephan Aßmus			BPackageVersion		fVersion;
380b42e741fSStephan Aßmus			PublisherInfo		fPublisher;
38146d5f6b4SStephan Aßmus			BString				fShortDescription;
38246d5f6b4SStephan Aßmus			BString				fFullDescription;
38382bdec56SStephan Aßmus			BString				fChangelog;
384f75ec10dSStephan Aßmus			CategoryList		fCategories;
38582bdec56SStephan Aßmus			UserRatingList		fUserRatings;
3867d0dab12SStephan Aßmus			RatingSummary		fCachedRatingSummary;
3876072a7e4SStephan Aßmus			float				fProminence;
3881d9d4873SStephan Aßmus			ScreenshotInfoList	fScreenshotInfos;
3899ecd9f02SStephan Aßmus			BitmapList			fScreenshots;
390b4c8d2ffSRene Gollent			PackageState		fState;
391fe184534SRene Gollent			PackageInstallationLocationSet
392fe184534SRene Gollent								fInstallationLocations;
393647fb4edSRene Gollent			float				fDownloadProgress;
39492dbf186SStephan Aßmus			PackageListenerList	fListeners;
395fe184534SRene Gollent			int32				fFlags;
3966ec9478bSRene Gollent			bool				fSystemDependency;
3976e48c81bSStephan Aßmus			BString				fArchitecture;
39889fbeddfSStephan Aßmus			BString				fLocalFilePath;
3992d2824bfSStephan Aßmus			BString				fFileName;
400f67071b9SStephan Aßmus			int64				fSize;
401ebb1a01cSAndrew Lindesay			BString				fDepotName;
4026d519fd1SStephan Aßmus
403d5b10131SAndrew Lindesay			bool				fIsCollatingChanges;
404d5b10131SAndrew Lindesay			uint32				fCollatedChanges;
405d5b10131SAndrew Lindesay
4066d519fd1SStephan Aßmus	static	BitmapRef			sDefaultIcon;
40782bdec56SStephan Aßmus};
40882bdec56SStephan Aßmus
40982bdec56SStephan Aßmus
410779d8213SStephan Aßmustypedef BReference<PackageInfo> PackageInfoRef;
411779d8213SStephan Aßmus
412779d8213SStephan Aßmus
413779d8213SStephan Aßmustypedef List<PackageInfoRef, false> PackageList;
414706edd80SStephan Aßmus
415706edd80SStephan Aßmus
416f34f805bSStephan Aßmusclass DepotInfo {
417f34f805bSStephan Aßmuspublic:
418f34f805bSStephan Aßmus								DepotInfo();
41942479955SStephan Aßmus								DepotInfo(const BString& name);
420f34f805bSStephan Aßmus								DepotInfo(const DepotInfo& other);
421f34f805bSStephan Aßmus
422f34f805bSStephan Aßmus			DepotInfo&			operator=(const DepotInfo& other);
423f34f805bSStephan Aßmus			bool				operator==(const DepotInfo& other) const;
424f34f805bSStephan Aßmus			bool				operator!=(const DepotInfo& other) const;
425f34f805bSStephan Aßmus
42642479955SStephan Aßmus			const BString&		Name() const
42742479955SStephan Aßmus									{ return fName; }
428f34f805bSStephan Aßmus
429706edd80SStephan Aßmus			const PackageList&	Packages() const
430f34f805bSStephan Aßmus									{ return fPackages; }
431f34f805bSStephan Aßmus
432779d8213SStephan Aßmus			bool				AddPackage(const PackageInfoRef& package);
433f34f805bSStephan Aßmus
4343369e03dSAndrew Lindesay			int32				PackageIndexByName(const BString& packageName)
4353369e03dSAndrew Lindesay									const;
4363094fef3SAndrew Lindesay
4377b2c59b9SStephan Aßmus			void				SyncPackages(const PackageList& packages);
4387b2c59b9SStephan Aßmus
4393b17d8ddSAndrew Lindesay			void				SetURL(const BString& URL);
4403b17d8ddSAndrew Lindesay			const BString&		URL() const
4413b17d8ddSAndrew Lindesay									{ return fURL; }
4423b17d8ddSAndrew Lindesay
443ebb1a01cSAndrew Lindesay			void				SetWebAppRepositoryCode(const BString& code);
444ebb1a01cSAndrew Lindesay			const BString&		WebAppRepositoryCode() const
445ebb1a01cSAndrew Lindesay									{ return fWebAppRepositoryCode; }
446ebb1a01cSAndrew Lindesay
447f0665db4SAndrew Lindesay			void				SetWebAppRepositorySourceCode(
448f0665db4SAndrew Lindesay									const BString& code);
449f0665db4SAndrew Lindesay			const BString&		WebAppRepositorySourceCode() const
450f0665db4SAndrew Lindesay									{ return fWebAppRepositorySourceCode; }
451f0665db4SAndrew Lindesay
452f34f805bSStephan Aßmusprivate:
45342479955SStephan Aßmus			BString				fName;
454706edd80SStephan Aßmus			PackageList			fPackages;
455ebb1a01cSAndrew Lindesay			BString				fWebAppRepositoryCode;
456f0665db4SAndrew Lindesay			BString				fWebAppRepositorySourceCode;
4573b17d8ddSAndrew Lindesay			BString				fURL;
4583b17d8ddSAndrew Lindesay				// this is actually a unique identifier for the repository.
459f34f805bSStephan Aßmus};
460f34f805bSStephan Aßmus
461f34f805bSStephan Aßmus
46242479955SStephan Aßmustypedef List<DepotInfo, false> DepotList;
463f34f805bSStephan Aßmus
464f34f805bSStephan Aßmus
4656bede507SStephan Aßmustypedef List<BString, false> StringList;
4666bede507SStephan Aßmus
4676bede507SStephan Aßmus
46882bdec56SStephan Aßmus#endif // PACKAGE_INFO_H
469