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
16a9edb9bfSAndrew Lindesay#include "DateTime.h"
1782bdec56SStephan Aßmus#include "List.h"
1892dbf186SStephan Aßmus#include "PackageInfoListener.h"
192e19e8fcSStephan Aßmus#include "SharedBitmap.h"
20cdbf478fSStephan Aßmus
21cdbf478fSStephan Aßmus
225f52e82cSStephan Aßmusclass BPath;
235f52e82cSStephan Aßmus
245f52e82cSStephan Aßmus
25f85e0300SAndrew Lindesay/*! This class represents a language that is supported by the Haiku
26f85e0300SAndrew Lindesay    Depot Server system.  This may differ from the set of languages
27f85e0300SAndrew Lindesay    that are supported in the platform itself.
28f85e0300SAndrew Lindesay*/
29f85e0300SAndrew Lindesay
30f85e0300SAndrew Lindesayclass Language : public BReferenceable, public BLanguage {
31f85e0300SAndrew Lindesaypublic:
32f85e0300SAndrew Lindesay								Language(const char* language,
33f85e0300SAndrew Lindesay									const BString& serverName,
34f85e0300SAndrew Lindesay									bool isPopular);
35f85e0300SAndrew Lindesay								Language(const Language& other);
36f85e0300SAndrew Lindesay
37f85e0300SAndrew Lindesay			status_t			GetName(BString& name,
38f85e0300SAndrew Lindesay									const BLanguage* displayLanguage = NULL
39f85e0300SAndrew Lindesay									) const;
40f85e0300SAndrew Lindesay			bool				IsPopular() const
41f85e0300SAndrew Lindesay									{ return fIsPopular; }
42f85e0300SAndrew Lindesay
43f85e0300SAndrew Lindesayprivate:
44f85e0300SAndrew Lindesay			BString				fServerName;
45f85e0300SAndrew Lindesay			bool				fIsPopular;
46f85e0300SAndrew Lindesay};
47f85e0300SAndrew Lindesay
48f85e0300SAndrew Lindesay
4982bdec56SStephan Aßmusclass UserInfo {
5082bdec56SStephan Aßmuspublic:
5182bdec56SStephan Aßmus								UserInfo();
5282bdec56SStephan Aßmus								UserInfo(const BString& nickName);
53cdbf478fSStephan Aßmus								UserInfo(const BitmapRef& avatar,
54cdbf478fSStephan Aßmus									const BString& nickName);
5582bdec56SStephan Aßmus								UserInfo(const UserInfo& other);
5682bdec56SStephan Aßmus
5782bdec56SStephan Aßmus			UserInfo&			operator=(const UserInfo& other);
5882bdec56SStephan Aßmus			bool				operator==(const UserInfo& other) const;
5982bdec56SStephan Aßmus			bool				operator!=(const UserInfo& other) const;
6082bdec56SStephan Aßmus
61cdbf478fSStephan Aßmus			const BitmapRef&	Avatar() const
62cdbf478fSStephan Aßmus									{ return fAvatar; }
63cdbf478fSStephan Aßmus			const BString&		NickName() const
64cdbf478fSStephan Aßmus									{ return fNickName; }
6582bdec56SStephan Aßmus
6682bdec56SStephan Aßmusprivate:
670ee1699aSStephan Aßmus			BitmapRef			fAvatar;
6882bdec56SStephan Aßmus			BString				fNickName;
6982bdec56SStephan Aßmus};
7082bdec56SStephan Aßmus
7182bdec56SStephan Aßmus
7282bdec56SStephan Aßmusclass UserRating {
7382bdec56SStephan Aßmuspublic:
7482bdec56SStephan Aßmus								UserRating();
7582bdec56SStephan Aßmus								UserRating(const UserInfo& userInfo,
763883c020SStephan Aßmus									float rating,
773883c020SStephan Aßmus									const BString& comment,
783883c020SStephan Aßmus									const BString& language,
794f434bc6SStephan Aßmus									const BString& packageVersion,
80a9edb9bfSAndrew Lindesay									int32 upVotes, int32 downVotes,
81a9edb9bfSAndrew Lindesay									const BDateTime& createTimestamp);
8282bdec56SStephan Aßmus								UserRating(const UserRating& other);
8382bdec56SStephan Aßmus
8482bdec56SStephan Aßmus			UserRating&			operator=(const UserRating& other);
8582bdec56SStephan Aßmus			bool				operator==(const UserRating& other) const;
8682bdec56SStephan Aßmus			bool				operator!=(const UserRating& other) const;
8782bdec56SStephan Aßmus
8882bdec56SStephan Aßmus			const UserInfo&		User() const
8982bdec56SStephan Aßmus									{ return fUserInfo; }
9082bdec56SStephan Aßmus			const BString&		Comment() const
9182bdec56SStephan Aßmus									{ return fComment; }
9246d5f6b4SStephan Aßmus			const BString&		Language() const
9346d5f6b4SStephan Aßmus									{ return fLanguage; }
9482bdec56SStephan Aßmus			const float			Rating() const
9582bdec56SStephan Aßmus									{ return fRating; }
9682bdec56SStephan Aßmus			const BString&		PackageVersion() const
9782bdec56SStephan Aßmus									{ return fPackageVersion; }
9882bdec56SStephan Aßmus
994f434bc6SStephan Aßmus			int32				UpVotes() const
1004f434bc6SStephan Aßmus									{ return fUpVotes; }
1014f434bc6SStephan Aßmus			int32				DownVotes() const
1024f434bc6SStephan Aßmus									{ return fDownVotes; }
103a9edb9bfSAndrew Lindesay			const BDateTime&	CreateTimestamp() const
104a9edb9bfSAndrew Lindesay									{ return fCreateTimestamp; }
10582bdec56SStephan Aßmusprivate:
10682bdec56SStephan Aßmus			UserInfo			fUserInfo;
10782bdec56SStephan Aßmus			float				fRating;
1083883c020SStephan Aßmus			BString				fComment;
1093883c020SStephan Aßmus			BString				fLanguage;
11082bdec56SStephan Aßmus			BString				fPackageVersion;
1114f434bc6SStephan Aßmus			int32				fUpVotes;
1124f434bc6SStephan Aßmus			int32				fDownVotes;
113a9edb9bfSAndrew Lindesay			BDateTime			fCreateTimestamp;
11482bdec56SStephan Aßmus};
11582bdec56SStephan Aßmus
11682bdec56SStephan Aßmus
11782bdec56SStephan Aßmustypedef List<UserRating, false> UserRatingList;
11882bdec56SStephan Aßmus
11982bdec56SStephan Aßmus
120c7689407SStephan Aßmusclass RatingSummary {
1217d0dab12SStephan Aßmuspublic:
1227d0dab12SStephan Aßmus								RatingSummary();
1237d0dab12SStephan Aßmus								RatingSummary(const RatingSummary& other);
1247d0dab12SStephan Aßmus
1257d0dab12SStephan Aßmus			RatingSummary&		operator=(const RatingSummary& other);
1267d0dab12SStephan Aßmus			bool				operator==(const RatingSummary& other) const;
1277d0dab12SStephan Aßmus			bool				operator!=(const RatingSummary& other) const;
1287d0dab12SStephan Aßmus
129c7689407SStephan Aßmuspublic:
130c7689407SStephan Aßmus			float				averageRating;
131c7689407SStephan Aßmus			int					ratingCount;
132c7689407SStephan Aßmus
133c7689407SStephan Aßmus			int					ratingCountByStar[5];
134c7689407SStephan Aßmus};
135c7689407SStephan Aßmus
136c7689407SStephan Aßmus
137967a2818SStephan Aßmusclass StabilityRating {
138967a2818SStephan Aßmuspublic:
139967a2818SStephan Aßmus								StabilityRating();
140967a2818SStephan Aßmus								StabilityRating(
141967a2818SStephan Aßmus									const BString& label,
142967a2818SStephan Aßmus									const BString& name);
143967a2818SStephan Aßmus								StabilityRating(const StabilityRating& other);
144967a2818SStephan Aßmus
145967a2818SStephan Aßmus			StabilityRating&	operator=(const StabilityRating& other);
146967a2818SStephan Aßmus			bool				operator==(const StabilityRating& other) const;
147967a2818SStephan Aßmus			bool				operator!=(const StabilityRating& other) const;
148967a2818SStephan Aßmus
149967a2818SStephan Aßmus			const BString&		Label() const
150967a2818SStephan Aßmus									{ return fLabel; }
151967a2818SStephan Aßmus			const BString&		Name() const
152967a2818SStephan Aßmus									{ return fName; }
153967a2818SStephan Aßmusprivate:
154967a2818SStephan Aßmus			BString				fLabel;
155967a2818SStephan Aßmus			BString				fName;
156967a2818SStephan Aßmus};
157967a2818SStephan Aßmus
158967a2818SStephan Aßmus
159967a2818SStephan Aßmustypedef List<StabilityRating, false> StabilityRatingList;
160967a2818SStephan Aßmus
161967a2818SStephan Aßmus
162b42e741fSStephan Aßmusclass PublisherInfo {
163b42e741fSStephan Aßmuspublic:
164b42e741fSStephan Aßmus								PublisherInfo();
165b42e741fSStephan Aßmus								PublisherInfo(const BitmapRef& logo,
166b42e741fSStephan Aßmus									const BString& name,
167b42e741fSStephan Aßmus									const BString& email,
168b42e741fSStephan Aßmus									const BString& website);
169b42e741fSStephan Aßmus								PublisherInfo(const PublisherInfo& other);
170b42e741fSStephan Aßmus
171b42e741fSStephan Aßmus			PublisherInfo&		operator=(const PublisherInfo& other);
172b42e741fSStephan Aßmus			bool				operator==(const PublisherInfo& other) const;
173b42e741fSStephan Aßmus			bool				operator!=(const PublisherInfo& other) const;
174b42e741fSStephan Aßmus
175b42e741fSStephan Aßmus			const BitmapRef&	Logo() const
176b42e741fSStephan Aßmus									{ return fLogo; }
177b42e741fSStephan Aßmus			const BString&		Name() const
178b42e741fSStephan Aßmus									{ return fName; }
179b42e741fSStephan Aßmus			const BString&		Email() const
180b42e741fSStephan Aßmus									{ return fEmail; }
181b42e741fSStephan Aßmus			const BString&		Website() const
182b42e741fSStephan Aßmus									{ return fWebsite; }
183b42e741fSStephan Aßmus
184b42e741fSStephan Aßmusprivate:
185b42e741fSStephan Aßmus			BitmapRef			fLogo;
186b42e741fSStephan Aßmus			BString				fName;
187b42e741fSStephan Aßmus			BString				fEmail;
188b42e741fSStephan Aßmus			BString				fWebsite;
189b42e741fSStephan Aßmus};
190b42e741fSStephan Aßmus
191b42e741fSStephan Aßmus
192f75ec10dSStephan Aßmusclass PackageCategory : public BReferenceable {
193f75ec10dSStephan Aßmuspublic:
194f75ec10dSStephan Aßmus								PackageCategory();
19589b16bb4SAndrew Lindesay								PackageCategory(const BString& code,
196f75ec10dSStephan Aßmus									const BString& name);
197f75ec10dSStephan Aßmus								PackageCategory(const PackageCategory& other);
198f75ec10dSStephan Aßmus
199f75ec10dSStephan Aßmus			PackageCategory&	operator=(const PackageCategory& other);
200f75ec10dSStephan Aßmus			bool				operator==(const PackageCategory& other) const;
201f75ec10dSStephan Aßmus			bool				operator!=(const PackageCategory& other) const;
202f75ec10dSStephan Aßmus
20389b16bb4SAndrew Lindesay			const BString&		Code() const
20489b16bb4SAndrew Lindesay									{ return fCode; }
205f75ec10dSStephan Aßmus			const BString&		Name() const
206f75ec10dSStephan Aßmus									{ return fName; }
207f75ec10dSStephan Aßmusprivate:
20889b16bb4SAndrew Lindesay			BString				fCode;
209f75ec10dSStephan Aßmus			BString				fName;
210f75ec10dSStephan Aßmus};
211f75ec10dSStephan Aßmus
212f75ec10dSStephan Aßmus
213f75ec10dSStephan Aßmustypedef BReference<PackageCategory> CategoryRef;
214f75ec10dSStephan Aßmustypedef List<CategoryRef, false> CategoryList;
215f75ec10dSStephan Aßmus
216f75ec10dSStephan Aßmus
2171d9d4873SStephan Aßmusclass ScreenshotInfo {
2181d9d4873SStephan Aßmuspublic:
2191d9d4873SStephan Aßmus								ScreenshotInfo();
2201d9d4873SStephan Aßmus								ScreenshotInfo(const BString& code,
2211d9d4873SStephan Aßmus									int32 width, int32 height, int32 dataSize);
2221d9d4873SStephan Aßmus								ScreenshotInfo(const ScreenshotInfo& other);
2231d9d4873SStephan Aßmus
2241d9d4873SStephan Aßmus			ScreenshotInfo&		operator=(const ScreenshotInfo& other);
2251d9d4873SStephan Aßmus			bool				operator==(const ScreenshotInfo& other) const;
2261d9d4873SStephan Aßmus			bool				operator!=(const ScreenshotInfo& other) const;
2271d9d4873SStephan Aßmus
2281d9d4873SStephan Aßmus			const BString&		Code() const
2291d9d4873SStephan Aßmus									{ return fCode; }
2301d9d4873SStephan Aßmus			int32				Width() const
2311d9d4873SStephan Aßmus									{ return fWidth; }
2321d9d4873SStephan Aßmus			int32				Height() const
2331d9d4873SStephan Aßmus									{ return fHeight; }
2341d9d4873SStephan Aßmus			int32				DataSize() const
2351d9d4873SStephan Aßmus									{ return fDataSize; }
2361d9d4873SStephan Aßmus
2371d9d4873SStephan Aßmusprivate:
2381d9d4873SStephan Aßmus			BString				fCode;
2391d9d4873SStephan Aßmus			int32				fWidth;
2401d9d4873SStephan Aßmus			int32				fHeight;
2411d9d4873SStephan Aßmus			int32				fDataSize;
2421d9d4873SStephan Aßmus};
2431d9d4873SStephan Aßmus
2441d9d4873SStephan Aßmus
2451d9d4873SStephan Aßmustypedef List<ScreenshotInfo, false, 2> ScreenshotInfoList;
2461d9d4873SStephan Aßmus
2471d9d4873SStephan Aßmus
24892dbf186SStephan Aßmustypedef List<PackageInfoListenerRef, false, 2> PackageListenerList;
249fe184534SRene Gollenttypedef std::set<int32> PackageInstallationLocationSet;
25092dbf186SStephan Aßmus
2511d9d4873SStephan Aßmus
252b4c8d2ffSRene Gollentenum PackageState {
253b4c8d2ffSRene Gollent	NONE		= 0,
254b4c8d2ffSRene Gollent	INSTALLED	= 1,
255647fb4edSRene Gollent	DOWNLOADING	= 2,
256647fb4edSRene Gollent	ACTIVATED	= 3,
257647fb4edSRene Gollent	UNINSTALLED	= 4,
2584fc7f247SStephan Aßmus	PENDING		= 5,
259b4c8d2ffSRene Gollent};
260b4c8d2ffSRene Gollent
261b4c8d2ffSRene Gollent
2626d519fd1SStephan Aßmususing BPackageKit::BPackageInfo;
26346bcb34dSStephan Aßmususing BPackageKit::BPackageVersion;
26446bcb34dSStephan Aßmus
26546bcb34dSStephan Aßmus
266779d8213SStephan Aßmusclass PackageInfo : public BReferenceable {
26782bdec56SStephan Aßmuspublic:
26882bdec56SStephan Aßmus								PackageInfo();
2696d519fd1SStephan Aßmus								PackageInfo(const BPackageInfo& info);
270a60a23f8SStephan Aßmus								PackageInfo(
27172992391SStephan Aßmus									const BString& name,
27246bcb34dSStephan Aßmus									const BPackageVersion& version,
273b42e741fSStephan Aßmus									const PublisherInfo& publisher,
27446d5f6b4SStephan Aßmus									const BString& shortDescription,
27546d5f6b4SStephan Aßmus									const BString& fullDescription,
2766e48c81bSStephan Aßmus									int32 packageFlags,
2776e48c81bSStephan Aßmus									const char* architecture);
27882bdec56SStephan Aßmus								PackageInfo(const PackageInfo& other);
27982bdec56SStephan Aßmus
28082bdec56SStephan Aßmus			PackageInfo&		operator=(const PackageInfo& other);
28182bdec56SStephan Aßmus			bool				operator==(const PackageInfo& other) const;
28282bdec56SStephan Aßmus			bool				operator!=(const PackageInfo& other) const;
28382bdec56SStephan Aßmus
28472992391SStephan Aßmus			const BString&		Name() const
28572992391SStephan Aßmus									{ return fName; }
28672992391SStephan Aßmus			void				SetTitle(const BString& title);
28772992391SStephan Aßmus			const BString&		Title() const;
28846bcb34dSStephan Aßmus			const BPackageVersion& Version() const
28982bdec56SStephan Aßmus									{ return fVersion; }
2906e48c81bSStephan Aßmus			void				SetShortDescription(const BString& description);
29146d5f6b4SStephan Aßmus			const BString&		ShortDescription() const
29246d5f6b4SStephan Aßmus									{ return fShortDescription; }
2936e48c81bSStephan Aßmus			void				SetFullDescription(const BString& description);
29446d5f6b4SStephan Aßmus			const BString&		FullDescription() const
29546d5f6b4SStephan Aßmus									{ return fFullDescription; }
296b42e741fSStephan Aßmus			const PublisherInfo& Publisher() const
297b42e741fSStephan Aßmus									{ return fPublisher; }
298a60a23f8SStephan Aßmus
299a60a23f8SStephan Aßmus			void				SetIcon(const BitmapRef& icon);
300a60a23f8SStephan Aßmus			const BitmapRef&	Icon() const
301a60a23f8SStephan Aßmus									{ return fIcon; }
302a60a23f8SStephan Aßmus			void				SetChangelog(const BString& changelog);
30382bdec56SStephan Aßmus			const BString&		Changelog() const
30482bdec56SStephan Aßmus									{ return fChangelog; }
30582bdec56SStephan Aßmus
306fe184534SRene Gollent			int32				Flags() const
307fe184534SRene Gollent									{ return fFlags; }
308fe184534SRene Gollent			bool				IsSystemPackage() const;
309fe184534SRene Gollent
3106ec9478bSRene Gollent			bool				IsSystemDependency() const
3116ec9478bSRene Gollent									{ return fSystemDependency; }
3126ec9478bSRene Gollent			void				SetSystemDependency(bool isDependency);
3136ec9478bSRene Gollent
3146e48c81bSStephan Aßmus			const BString		Architecture() const
3156e48c81bSStephan Aßmus									{ return fArchitecture; }
3166e48c81bSStephan Aßmus
317b4c8d2ffSRene Gollent			PackageState		State() const
318b4c8d2ffSRene Gollent									{ return fState; }
319b4c8d2ffSRene Gollent			void				SetState(PackageState state);
320b4c8d2ffSRene Gollent
321fe184534SRene Gollent			const PackageInstallationLocationSet&
322fe184534SRene Gollent								InstallationLocations() const
323fe184534SRene Gollent									{ return fInstallationLocations; }
324fe184534SRene Gollent			void				AddInstallationLocation(int32 location);
325fe184534SRene Gollent
326fe184534SRene Gollent			float				DownloadProgress() const
327fe184534SRene Gollent									{ return fDownloadProgress; }
328647fb4edSRene Gollent			void				SetDownloadProgress(float progress);
329647fb4edSRene Gollent
33089fbeddfSStephan Aßmus			void				SetLocalFilePath(const char* path);
33189fbeddfSStephan Aßmus			const BString&		LocalFilePath() const
33289fbeddfSStephan Aßmus									{ return fLocalFilePath; }
3335f52e82cSStephan Aßmus			bool				IsLocalFile() const;
3342d2824bfSStephan Aßmus			const BString&		FileName() const
3352d2824bfSStephan Aßmus									{ return fFileName; }
33687084745SMichael Lotz
3377eb09bfaSStephan Aßmus			void				ClearCategories();
338f75ec10dSStephan Aßmus			bool				AddCategory(const CategoryRef& category);
339f75ec10dSStephan Aßmus			const CategoryList&	Categories() const
340f75ec10dSStephan Aßmus									{ return fCategories; }
34182bdec56SStephan Aßmus
3427eb09bfaSStephan Aßmus			void				ClearUserRatings();
343f75ec10dSStephan Aßmus			bool				AddUserRating(const UserRating& rating);
344c7689407SStephan Aßmus			const UserRatingList& UserRatings() const
345c7689407SStephan Aßmus									{ return fUserRatings; }
3467d0dab12SStephan Aßmus			void				SetRatingSummary(const RatingSummary& summary);
347c7689407SStephan Aßmus			RatingSummary		CalculateRatingSummary() const;
348c7689407SStephan Aßmus
3496072a7e4SStephan Aßmus			void				SetProminence(float prominence);
3506072a7e4SStephan Aßmus			float				Prominence() const
3516072a7e4SStephan Aßmus									{ return fProminence; }
3526072a7e4SStephan Aßmus			bool				HasProminence() const
3536072a7e4SStephan Aßmus									{ return fProminence != 0.0f; }
3544fade61fSStephan Aßmus			bool				IsProminent() const;
3556072a7e4SStephan Aßmus
3567eb09bfaSStephan Aßmus			void				ClearScreenshotInfos();
3571d9d4873SStephan Aßmus			bool				AddScreenshotInfo(const ScreenshotInfo& info);
3581d9d4873SStephan Aßmus			const ScreenshotInfoList& ScreenshotInfos() const
3591d9d4873SStephan Aßmus									{ return fScreenshotInfos; }
3601d9d4873SStephan Aßmus
3617eb09bfaSStephan Aßmus			void				ClearScreenshots();
3629ecd9f02SStephan Aßmus			bool				AddScreenshot(const BitmapRef& screenshot);
3639ecd9f02SStephan Aßmus			const BitmapList&	Screenshots() const
3649ecd9f02SStephan Aßmus									{ return fScreenshots; }
3659ecd9f02SStephan Aßmus
366f67071b9SStephan Aßmus			void				SetSize(int64 size);
367f67071b9SStephan Aßmus			int64				Size() const
368f67071b9SStephan Aßmus									{ return fSize; }
369f67071b9SStephan Aßmus
370ebb1a01cSAndrew Lindesay			void				SetDepotName(const BString& depotName);
371ebb1a01cSAndrew Lindesay			const BString&		DepotName() const
372ebb1a01cSAndrew Lindesay									{ return fDepotName; }
373ebb1a01cSAndrew Lindesay
37492dbf186SStephan Aßmus			bool				AddListener(
37592dbf186SStephan Aßmus									const PackageInfoListenerRef& listener);
37692dbf186SStephan Aßmus			void				RemoveListener(
37792dbf186SStephan Aßmus									const PackageInfoListenerRef& listener);
37892dbf186SStephan Aßmus
3796d519fd1SStephan Aßmus	static	void				CleanupDefaultIcon();
3806d519fd1SStephan Aßmus
381d5b10131SAndrew Lindesay			void				StartCollatingChanges();
382d5b10131SAndrew Lindesay			void				EndCollatingChanges();
383d5b10131SAndrew Lindesay
38492dbf186SStephan Aßmusprivate:
38592dbf186SStephan Aßmus			void				_NotifyListeners(uint32 changes);
386d5b10131SAndrew Lindesay			void				_NotifyListenersImmediate(uint32 changes);
38792dbf186SStephan Aßmus
38882bdec56SStephan Aßmusprivate:
389cdbf478fSStephan Aßmus			BitmapRef			fIcon;
39072992391SStephan Aßmus			BString				fName;
39182bdec56SStephan Aßmus			BString				fTitle;
39246bcb34dSStephan Aßmus			BPackageVersion		fVersion;
393b42e741fSStephan Aßmus			PublisherInfo		fPublisher;
39446d5f6b4SStephan Aßmus			BString				fShortDescription;
39546d5f6b4SStephan Aßmus			BString				fFullDescription;
39682bdec56SStephan Aßmus			BString				fChangelog;
397f75ec10dSStephan Aßmus			CategoryList		fCategories;
39882bdec56SStephan Aßmus			UserRatingList		fUserRatings;
3997d0dab12SStephan Aßmus			RatingSummary		fCachedRatingSummary;
4006072a7e4SStephan Aßmus			float				fProminence;
4011d9d4873SStephan Aßmus			ScreenshotInfoList	fScreenshotInfos;
4029ecd9f02SStephan Aßmus			BitmapList			fScreenshots;
403b4c8d2ffSRene Gollent			PackageState		fState;
404fe184534SRene Gollent			PackageInstallationLocationSet
405fe184534SRene Gollent								fInstallationLocations;
406647fb4edSRene Gollent			float				fDownloadProgress;
40792dbf186SStephan Aßmus			PackageListenerList	fListeners;
408fe184534SRene Gollent			int32				fFlags;
4096ec9478bSRene Gollent			bool				fSystemDependency;
4106e48c81bSStephan Aßmus			BString				fArchitecture;
41189fbeddfSStephan Aßmus			BString				fLocalFilePath;
4122d2824bfSStephan Aßmus			BString				fFileName;
413f67071b9SStephan Aßmus			int64				fSize;
414ebb1a01cSAndrew Lindesay			BString				fDepotName;
4156d519fd1SStephan Aßmus
416d5b10131SAndrew Lindesay			bool				fIsCollatingChanges;
417d5b10131SAndrew Lindesay			uint32				fCollatedChanges;
418d5b10131SAndrew Lindesay
4196d519fd1SStephan Aßmus	static	BitmapRef			sDefaultIcon;
42082bdec56SStephan Aßmus};
42182bdec56SStephan Aßmus
42282bdec56SStephan Aßmus
423779d8213SStephan Aßmustypedef BReference<PackageInfo> PackageInfoRef;
424779d8213SStephan Aßmus
425779d8213SStephan Aßmus
426779d8213SStephan Aßmustypedef List<PackageInfoRef, false> PackageList;
427706edd80SStephan Aßmus
428706edd80SStephan Aßmus
429f34f805bSStephan Aßmusclass DepotInfo {
430f34f805bSStephan Aßmuspublic:
431f34f805bSStephan Aßmus								DepotInfo();
43242479955SStephan Aßmus								DepotInfo(const BString& name);
433f34f805bSStephan Aßmus								DepotInfo(const DepotInfo& other);
434f34f805bSStephan Aßmus
435f34f805bSStephan Aßmus			DepotInfo&			operator=(const DepotInfo& other);
436f34f805bSStephan Aßmus			bool				operator==(const DepotInfo& other) const;
437f34f805bSStephan Aßmus			bool				operator!=(const DepotInfo& other) const;
438f34f805bSStephan Aßmus
43942479955SStephan Aßmus			const BString&		Name() const
44042479955SStephan Aßmus									{ return fName; }
441f34f805bSStephan Aßmus
442706edd80SStephan Aßmus			const PackageList&	Packages() const
443f34f805bSStephan Aßmus									{ return fPackages; }
444f34f805bSStephan Aßmus
445779d8213SStephan Aßmus			bool				AddPackage(const PackageInfoRef& package);
446f34f805bSStephan Aßmus
4473369e03dSAndrew Lindesay			int32				PackageIndexByName(const BString& packageName)
4483369e03dSAndrew Lindesay									const;
4493094fef3SAndrew Lindesay
4507b2c59b9SStephan Aßmus			void				SyncPackages(const PackageList& packages);
4517b2c59b9SStephan Aßmus
4523b17d8ddSAndrew Lindesay			void				SetURL(const BString& URL);
4533b17d8ddSAndrew Lindesay			const BString&		URL() const
4543b17d8ddSAndrew Lindesay									{ return fURL; }
4553b17d8ddSAndrew Lindesay
456ebb1a01cSAndrew Lindesay			void				SetWebAppRepositoryCode(const BString& code);
457ebb1a01cSAndrew Lindesay			const BString&		WebAppRepositoryCode() const
458ebb1a01cSAndrew Lindesay									{ return fWebAppRepositoryCode; }
459ebb1a01cSAndrew Lindesay
460f0665db4SAndrew Lindesay			void				SetWebAppRepositorySourceCode(
461f0665db4SAndrew Lindesay									const BString& code);
462f0665db4SAndrew Lindesay			const BString&		WebAppRepositorySourceCode() const
463f0665db4SAndrew Lindesay									{ return fWebAppRepositorySourceCode; }
464f0665db4SAndrew Lindesay
465f34f805bSStephan Aßmusprivate:
46642479955SStephan Aßmus			BString				fName;
467706edd80SStephan Aßmus			PackageList			fPackages;
468ebb1a01cSAndrew Lindesay			BString				fWebAppRepositoryCode;
469f0665db4SAndrew Lindesay			BString				fWebAppRepositorySourceCode;
4703b17d8ddSAndrew Lindesay			BString				fURL;
4713b17d8ddSAndrew Lindesay				// this is actually a unique identifier for the repository.
472f34f805bSStephan Aßmus};
473f34f805bSStephan Aßmus
474f34f805bSStephan Aßmus
47542479955SStephan Aßmustypedef List<DepotInfo, false> DepotList;
476f34f805bSStephan Aßmus
477f34f805bSStephan Aßmus
4786bede507SStephan Aßmustypedef List<BString, false> StringList;
4796bede507SStephan Aßmus
4806bede507SStephan Aßmus
48182bdec56SStephan Aßmus#endif // PACKAGE_INFO_H
482