HaikuDepot: Add download progress package state.
- Add accessors for storing/retrieving current download progress. - Adjust PackageListView to be able to create a progress state from the download percentage.
This commit is contained in:
@@ -446,7 +446,8 @@ PackageInfo::PackageInfo()
|
|||||||
fChangelog(),
|
fChangelog(),
|
||||||
fUserRatings(),
|
fUserRatings(),
|
||||||
fScreenshots(),
|
fScreenshots(),
|
||||||
fState(NONE)
|
fState(NONE),
|
||||||
|
fDownloadProgress(0.0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -466,7 +467,8 @@ PackageInfo::PackageInfo(const BitmapRef& icon, const BString& title,
|
|||||||
fCategories(),
|
fCategories(),
|
||||||
fUserRatings(),
|
fUserRatings(),
|
||||||
fScreenshots(),
|
fScreenshots(),
|
||||||
fState(NONE)
|
fState(NONE),
|
||||||
|
fDownloadProgress(0.0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -483,7 +485,8 @@ PackageInfo::PackageInfo(const PackageInfo& other)
|
|||||||
fCategories(other.fCategories),
|
fCategories(other.fCategories),
|
||||||
fUserRatings(other.fUserRatings),
|
fUserRatings(other.fUserRatings),
|
||||||
fScreenshots(other.fScreenshots),
|
fScreenshots(other.fScreenshots),
|
||||||
fState(other.fState)
|
fState(other.fState),
|
||||||
|
fDownloadProgress(other.fDownloadProgress)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -502,6 +505,7 @@ PackageInfo::operator=(const PackageInfo& other)
|
|||||||
fUserRatings = other.fUserRatings;
|
fUserRatings = other.fUserRatings;
|
||||||
fScreenshots = other.fScreenshots;
|
fScreenshots = other.fScreenshots;
|
||||||
fState = other.fState;
|
fState = other.fState;
|
||||||
|
fDownloadProgress = other.fDownloadProgress;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -519,7 +523,8 @@ PackageInfo::operator==(const PackageInfo& other) const
|
|||||||
&& fCategories == other.fCategories
|
&& fCategories == other.fCategories
|
||||||
&& fUserRatings == other.fUserRatings
|
&& fUserRatings == other.fUserRatings
|
||||||
&& fScreenshots == other.fScreenshots
|
&& fScreenshots == other.fScreenshots
|
||||||
&& fState == other.fState;
|
&& fState == other.fState
|
||||||
|
&& fDownloadProgress == other.fDownloadProgress;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -542,11 +547,29 @@ PackageInfo::SetState(PackageState state)
|
|||||||
{
|
{
|
||||||
if (fState != state) {
|
if (fState != state) {
|
||||||
fState = state;
|
fState = state;
|
||||||
|
if (fState != DOWNLOADING)
|
||||||
|
fDownloadProgress = 0.0;
|
||||||
_NotifyListeners(PKG_CHANGED_STATE);
|
_NotifyListeners(PKG_CHANGED_STATE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
float
|
||||||
|
PackageInfo::DownloadProgress() const
|
||||||
|
{
|
||||||
|
return fDownloadProgress;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
PackageInfo::SetDownloadProgress(float progress)
|
||||||
|
{
|
||||||
|
fState = DOWNLOADING;
|
||||||
|
fDownloadProgress = progress;
|
||||||
|
_NotifyListeners(PKG_CHANGED_STATE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
PackageInfo::AddUserRating(const UserRating& rating)
|
PackageInfo::AddUserRating(const UserRating& rating)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -188,8 +188,9 @@ typedef List<PackageInfoListenerRef, false, 2> PackageListenerList;
|
|||||||
enum PackageState {
|
enum PackageState {
|
||||||
NONE = 0,
|
NONE = 0,
|
||||||
INSTALLED = 1,
|
INSTALLED = 1,
|
||||||
ACTIVATED = 2,
|
DOWNLOADING = 2,
|
||||||
UNINSTALLED = 3,
|
ACTIVATED = 3,
|
||||||
|
UNINSTALLED = 4,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -228,6 +229,9 @@ public:
|
|||||||
{ return fState; }
|
{ return fState; }
|
||||||
void SetState(PackageState state);
|
void SetState(PackageState state);
|
||||||
|
|
||||||
|
float DownloadProgress() const;
|
||||||
|
void SetDownloadProgress(float progress);
|
||||||
|
|
||||||
bool AddCategory(const CategoryRef& category);
|
bool AddCategory(const CategoryRef& category);
|
||||||
const CategoryList& Categories() const
|
const CategoryList& Categories() const
|
||||||
{ return fCategories; }
|
{ return fCategories; }
|
||||||
@@ -261,6 +265,7 @@ private:
|
|||||||
UserRatingList fUserRatings;
|
UserRatingList fUserRatings;
|
||||||
BitmapList fScreenshots;
|
BitmapList fScreenshots;
|
||||||
PackageState fState;
|
PackageState fState;
|
||||||
|
float fDownloadProgress;
|
||||||
PackageListenerList fListeners;
|
PackageListenerList fListeners;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -26,9 +26,9 @@ static const char* skPackageStateInactive = B_TRANSLATE_MARK("Inactive");
|
|||||||
|
|
||||||
|
|
||||||
inline BString
|
inline BString
|
||||||
package_state_to_string(PackageState state)
|
package_state_to_string(PackageInfoRef ref)
|
||||||
{
|
{
|
||||||
switch (state) {
|
switch (ref->State()) {
|
||||||
case NONE:
|
case NONE:
|
||||||
return B_TRANSLATE(skPackageStateAvailable);
|
return B_TRANSLATE(skPackageStateAvailable);
|
||||||
case INSTALLED:
|
case INSTALLED:
|
||||||
@@ -37,6 +37,12 @@ package_state_to_string(PackageState state)
|
|||||||
return B_TRANSLATE(skPackageStateActive);
|
return B_TRANSLATE(skPackageStateActive);
|
||||||
case UNINSTALLED:
|
case UNINSTALLED:
|
||||||
return B_TRANSLATE(skPackageStateUninstalled);
|
return B_TRANSLATE(skPackageStateUninstalled);
|
||||||
|
case DOWNLOADING:
|
||||||
|
{
|
||||||
|
BString data;
|
||||||
|
data.SetToFormat("%3.2f%%", ref->DownloadProgress() * 100.0);
|
||||||
|
return data;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return B_TRANSLATE("Unknown");
|
return B_TRANSLATE("Unknown");
|
||||||
@@ -473,7 +479,7 @@ PackageRow::PackageRow(const PackageInfoRef& packageRef,
|
|||||||
|
|
||||||
// Status
|
// Status
|
||||||
// TODO: Fetch info about installed/deactivated/uninstalled/...
|
// TODO: Fetch info about installed/deactivated/uninstalled/...
|
||||||
SetField(new BStringField(package_state_to_string(package.State())),
|
SetField(new BStringField(package_state_to_string(fPackage)),
|
||||||
kStatusColumn);
|
kStatusColumn);
|
||||||
|
|
||||||
package.AddListener(fPackageListener);
|
package.AddListener(fPackageListener);
|
||||||
@@ -493,7 +499,7 @@ PackageRow::UpdateState()
|
|||||||
if (fPackage.Get() == NULL)
|
if (fPackage.Get() == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
SetField(new BStringField(package_state_to_string(fPackage->State())),
|
SetField(new BStringField(package_state_to_string(fPackage)),
|
||||||
kStatusColumn);
|
kStatusColumn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user