diff --git a/src/apps/haiku-depot/PackageInfo.cpp b/src/apps/haiku-depot/PackageInfo.cpp index f3310053f8..6c8b82ce92 100644 --- a/src/apps/haiku-depot/PackageInfo.cpp +++ b/src/apps/haiku-depot/PackageInfo.cpp @@ -446,7 +446,8 @@ PackageInfo::PackageInfo() fChangelog(), fUserRatings(), fScreenshots(), - fState(NONE) + fState(NONE), + fDownloadProgress(0.0) { } @@ -466,7 +467,8 @@ PackageInfo::PackageInfo(const BitmapRef& icon, const BString& title, fCategories(), fUserRatings(), fScreenshots(), - fState(NONE) + fState(NONE), + fDownloadProgress(0.0) { } @@ -483,7 +485,8 @@ PackageInfo::PackageInfo(const PackageInfo& other) fCategories(other.fCategories), fUserRatings(other.fUserRatings), fScreenshots(other.fScreenshots), - fState(other.fState) + fState(other.fState), + fDownloadProgress(other.fDownloadProgress) { } @@ -502,6 +505,7 @@ PackageInfo::operator=(const PackageInfo& other) fUserRatings = other.fUserRatings; fScreenshots = other.fScreenshots; fState = other.fState; + fDownloadProgress = other.fDownloadProgress; return *this; } @@ -519,7 +523,8 @@ PackageInfo::operator==(const PackageInfo& other) const && fCategories == other.fCategories && fUserRatings == other.fUserRatings && fScreenshots == other.fScreenshots - && fState == other.fState; + && fState == other.fState + && fDownloadProgress == other.fDownloadProgress; } @@ -542,11 +547,29 @@ PackageInfo::SetState(PackageState state) { if (fState != state) { fState = state; + if (fState != DOWNLOADING) + fDownloadProgress = 0.0; _NotifyListeners(PKG_CHANGED_STATE); } } +float +PackageInfo::DownloadProgress() const +{ + return fDownloadProgress; +} + + +void +PackageInfo::SetDownloadProgress(float progress) +{ + fState = DOWNLOADING; + fDownloadProgress = progress; + _NotifyListeners(PKG_CHANGED_STATE); +} + + bool PackageInfo::AddUserRating(const UserRating& rating) { diff --git a/src/apps/haiku-depot/PackageInfo.h b/src/apps/haiku-depot/PackageInfo.h index 485b139096..7ba86d1c54 100644 --- a/src/apps/haiku-depot/PackageInfo.h +++ b/src/apps/haiku-depot/PackageInfo.h @@ -188,8 +188,9 @@ typedef List PackageListenerList; enum PackageState { NONE = 0, INSTALLED = 1, - ACTIVATED = 2, - UNINSTALLED = 3, + DOWNLOADING = 2, + ACTIVATED = 3, + UNINSTALLED = 4, }; @@ -228,6 +229,9 @@ public: { return fState; } void SetState(PackageState state); + float DownloadProgress() const; + void SetDownloadProgress(float progress); + bool AddCategory(const CategoryRef& category); const CategoryList& Categories() const { return fCategories; } @@ -261,6 +265,7 @@ private: UserRatingList fUserRatings; BitmapList fScreenshots; PackageState fState; + float fDownloadProgress; PackageListenerList fListeners; }; diff --git a/src/apps/haiku-depot/PackageListView.cpp b/src/apps/haiku-depot/PackageListView.cpp index 8ec419c834..780e2b4f3d 100644 --- a/src/apps/haiku-depot/PackageListView.cpp +++ b/src/apps/haiku-depot/PackageListView.cpp @@ -26,9 +26,9 @@ static const char* skPackageStateInactive = B_TRANSLATE_MARK("Inactive"); inline BString -package_state_to_string(PackageState state) +package_state_to_string(PackageInfoRef ref) { - switch (state) { + switch (ref->State()) { case NONE: return B_TRANSLATE(skPackageStateAvailable); case INSTALLED: @@ -37,6 +37,12 @@ package_state_to_string(PackageState state) return B_TRANSLATE(skPackageStateActive); case UNINSTALLED: return B_TRANSLATE(skPackageStateUninstalled); + case DOWNLOADING: + { + BString data; + data.SetToFormat("%3.2f%%", ref->DownloadProgress() * 100.0); + return data; + } } return B_TRANSLATE("Unknown"); @@ -473,7 +479,7 @@ PackageRow::PackageRow(const PackageInfoRef& packageRef, // Status // 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); package.AddListener(fPackageListener); @@ -493,7 +499,7 @@ PackageRow::UpdateState() if (fPackage.Get() == NULL) return; - SetField(new BStringField(package_state_to_string(fPackage->State())), + SetField(new BStringField(package_state_to_string(fPackage)), kStatusColumn); }