⛏️ index : haiku.git

/*
 * Copyright 2013-2014, Stephan Aßmus <superstippi@gmx.de>.
 * Copyright 2013, Rene Gollent <rene@gollent.com>.
 * Copyright 2016-2025, Andrew Lindesay <apl@lindesay.co.nz>.
 * All rights reserved. Distributed under the terms of the MIT License.
 */


#include "PackageInfo.h"

#include <algorithm>

#include <package/PackageDefs.h>
#include <package/PackageFlags.h>

#include "HaikuDepotConstants.h"
#include "Logger.h"
#include "PackageInfoListener.h"


// #pragma mark - PackageInfo


PackageInfo::PackageInfo()
	:
	fName(),

	fCoreInfo(),
	fLocalizedText(),
	fClassificationInfo(),
	fScreenshotInfo(),
	fUserRatingInfo(),
	fLocalInfo()
{
}


PackageInfo::PackageInfo(const PackageInfo& other)
	:
	fName(other.fName),

	fCoreInfo(other.fCoreInfo),
	fLocalizedText(other.fLocalizedText),
	fClassificationInfo(other.fClassificationInfo),
	fScreenshotInfo(other.fScreenshotInfo),
	fUserRatingInfo(other.fUserRatingInfo),
	fLocalInfo(other.fLocalInfo)
{
}


bool
PackageInfo::operator==(const PackageInfo& other) const
{
	return fName == other.fName
		&& fCoreInfo == other.fCoreInfo
		&& fLocalInfo == other.fLocalInfo
		&& fLocalizedText == other.fLocalizedText
		&& fClassificationInfo == other.fClassificationInfo
		&& fScreenshotInfo == other.fScreenshotInfo
		&& fUserRatingInfo == fUserRatingInfo;
}


bool
PackageInfo::operator!=(const PackageInfo& other) const
{
	return !(*this == other);
}


const BString&
PackageInfo::Name() const
{
	return fName;
}


const PackageCoreInfoRef
PackageInfo::CoreInfo() const
{
	return fCoreInfo;
}


const PackageClassificationInfoRef
PackageInfo::PackageClassificationInfo() const
{
	return fClassificationInfo;
}


const PackageScreenshotInfoRef
PackageInfo::ScreenshotInfo() const
{
	return fScreenshotInfo;
}


void
PackageInfo::SetName(const BString& value)
{
	fName = value;
}


uint32
PackageInfo::ChangeMask(const PackageInfo& other) const
{
	uint32 result = 0;

	if (fLocalizedText != fLocalizedText)
		result |= PKG_CHANGED_LOCALIZED_TEXT;
	if (fScreenshotInfo != other.fScreenshotInfo)
		result |= PKG_CHANGED_SCREENSHOTS;
	if (fUserRatingInfo != other.fUserRatingInfo)
		result |= PKG_CHANGED_RATINGS;
	if (fLocalInfo != other.fLocalInfo)
		result |= PKG_CHANGED_LOCAL_INFO;
	if (fClassificationInfo != other.fClassificationInfo)
		result |= PKG_CHANGED_CLASSIFICATION;
	if (fCoreInfo != other.fCoreInfo)
		result |= PKG_CHANGED_CORE_INFO;

	return result;
}


void
PackageInfo::SetCoreInfo(PackageCoreInfoRef value)
{
	fCoreInfo = value;
}


const PackageLocalizedTextRef
PackageInfo::LocalizedText() const
{
	return fLocalizedText;
}


void
PackageInfo::SetLocalizedText(PackageLocalizedTextRef value)
{
	fLocalizedText = value;
}


const PackageUserRatingInfoRef
PackageInfo::UserRatingInfo() const
{
	return fUserRatingInfo;
}


void
PackageInfo::SetUserRatingInfo(PackageUserRatingInfoRef& value)
{
	fUserRatingInfo = value;
}


const PackageLocalInfoRef
PackageInfo::LocalInfo() const
{
	return fLocalInfo;
}


void
PackageInfo::SetLocalInfo(PackageLocalInfoRef& localInfo)
{
	fLocalInfo = localInfo;
}


void
PackageInfo::SetPackageClassificationInfo(PackageClassificationInfoRef value)
{
	fClassificationInfo = value;
}


void
PackageInfo::SetScreenshotInfo(PackageScreenshotInfoRef value)
{
	fScreenshotInfo = value;
}


// #pragma mark - PackageLocalInfoBuilder


PackageInfoBuilder::PackageInfoBuilder(const BString& name)
	:
	fName(name),
	fCoreInfo(),
	fLocalizedText(),
	fClassificationInfo(),
	fScreenshotInfo(),
	fUserRatingInfo(),
	fLocalInfo()
{
}


PackageInfoBuilder::PackageInfoBuilder(const PackageInfoRef& value)
	:
	fName(),
	fCoreInfo(),
	fLocalizedText(),
	fClassificationInfo(),
	fScreenshotInfo(),
	fUserRatingInfo(),
	fLocalInfo()
{
	if (value.IsSet())
		_Init(value.Get());
}


PackageInfoBuilder::PackageInfoBuilder(const PackageInfo& value)
{
	_Init(&value);
}


PackageInfoBuilder::~PackageInfoBuilder()
{
}


void
PackageInfoBuilder::_Init(const PackageInfo* value)
{
	fName = value->Name();
	fCoreInfo = value->CoreInfo();
	fLocalizedText = value->LocalizedText();
	fClassificationInfo = value->PackageClassificationInfo();
	fScreenshotInfo = value->ScreenshotInfo();
	fUserRatingInfo = value->UserRatingInfo();
	fLocalInfo = value->LocalInfo();
}


PackageInfoRef
PackageInfoBuilder::BuildRef()
{
	PackageInfo* info = new PackageInfo();
	info->SetName(fName);
	info->SetCoreInfo(fCoreInfo);
	info->SetLocalizedText(fLocalizedText);
	info->SetPackageClassificationInfo(fClassificationInfo);
	info->SetScreenshotInfo(fScreenshotInfo);
	info->SetUserRatingInfo(fUserRatingInfo);
	info->SetLocalInfo(fLocalInfo);
	return PackageInfoRef(info, true);
}


PackageInfoBuilder&
PackageInfoBuilder::WithCoreInfo(PackageCoreInfoRef value)
{
	fCoreInfo = value;
	return *this;
}


PackageInfoBuilder&
PackageInfoBuilder::WithLocalizedText(PackageLocalizedTextRef value)
{
	fLocalizedText = value;
	return *this;
}


PackageInfoBuilder&
PackageInfoBuilder::WithPackageClassificationInfo(PackageClassificationInfoRef value)
{
	fClassificationInfo = value;
	return *this;
}


PackageInfoBuilder&
PackageInfoBuilder::WithUserRatingInfo(PackageUserRatingInfoRef value)
{
	fUserRatingInfo = value;
	return *this;
}


PackageInfoBuilder&
PackageInfoBuilder::WithLocalInfo(PackageLocalInfoRef value)
{
	fLocalInfo = value;
	return *this;
}


PackageInfoBuilder&
PackageInfoBuilder::WithScreenshotInfo(PackageScreenshotInfoRef value)
{
	fScreenshotInfo = value;
	return *this;
}