* Copyright 2024-2025, Andrew Lindesay <apl@lindesay.co.nz>.
* All rights reserved. Distributed under the terms of the MIT License.
*/
#ifndef PACKAGE_LOCAL_INFO_H
#define PACKAGE_LOCAL_INFO_H
#include <sys/types.h>
#include <set>
#include <Referenceable.h>
#include <String.h>
typedef std::set<int32> PackageInstallationLocationSet;
enum PackageState {
NONE = 0,
INSTALLED = 1,
DOWNLOADING = 2,
ACTIVATED = 3,
UNINSTALLED = 4,
PENDING = 5,
};
class PackageLocalInfoBuilder;
PackageLocalInfoBuilder class as a builder-constructor.
*/
class PackageLocalInfo : public BReferenceable
{
friend class PackageLocalInfoBuilder;
public:
PackageLocalInfo();
PackageLocalInfo(const PackageLocalInfo& other);
virtual ~PackageLocalInfo();
bool operator==(const PackageLocalInfo& other) const;
bool operator!=(const PackageLocalInfo& other) const;
bool IsLocalFile() const;
bool Viewed() const;
const BString& LocalFilePath() const;
const BString& FileName() const;
off_t Size() const;
int32 Flags() const;
bool IsSystemPackage() const;
bool IsSystemDependency() const;
PackageState State() const;
bool HasInstallationLocation(int32 location) const;
int32 CountInstallationLocations() const;
const PackageInstallationLocationSet&
InstallationLocations() const;
float DownloadProgress() const;
private:
void SetViewed();
void SetLocalFilePath(const char* path);
void SetFileName(const BString& value);
void SetSize(off_t size);
void SetFlags(int32 value);
void SetSystemDependency(bool isDependency);
void SetState(PackageState state);
void AddInstallationLocation(int32 location);
void SetDownloadProgress(float progress);
private:
bool fViewed;
BString fLocalFilePath;
BString fFileName;
off_t fSize;
int32 fFlags;
bool fSystemDependency;
PackageState fState;
PackageInstallationLocationSet
fInstallationLocations;
float fDownloadProgress;
};
typedef BReference<PackageLocalInfo> PackageLocalInfoRef;
class PackageLocalInfoBuilder
{
public:
PackageLocalInfoBuilder();
PackageLocalInfoBuilder(const PackageLocalInfoRef& value);
virtual ~PackageLocalInfoBuilder();
PackageLocalInfoRef BuildRef();
PackageLocalInfoBuilder&
WithViewed();
PackageLocalInfoBuilder&
WithLocalFilePath(const char* path);
PackageLocalInfoBuilder&
WithFileName(const BString& value);
PackageLocalInfoBuilder&
WithSize(off_t size);
PackageLocalInfoBuilder&
WithFlags(int32 value);
PackageLocalInfoBuilder&
WithSystemDependency(bool isDependency);
PackageLocalInfoBuilder&
WithState(PackageState state);
PackageLocalInfoBuilder&
WithDownloadProgress(float progress);
PackageLocalInfoBuilder&
AddInstallationLocation(int32 location);
PackageLocalInfoBuilder&
ClearInstallationLocations();
private:
void _InitFromSource();
void _Init(const PackageLocalInfo* value);
private:
PackageLocalInfoRef fSource;
bool fViewed;
BString fLocalFilePath;
BString fFileName;
off_t fSize;
int32 fFlags;
bool fSystemDependency;
PackageState fState;
PackageInstallationLocationSet
fInstallationLocations;
float fDownloadProgress;
};
#endif