Index: gtk/rgsummarywindow.cc =================================================================== --- gtk/rgsummarywindow.cc (revision 596) +++ gtk/rgsummarywindow.cc (working copy) @@ -34,6 +34,7 @@ #include #include +#include #include "rgsummarywindow.h" #include "rguserdialog.h" @@ -303,7 +304,7 @@ int toInstall, toRemove, toUpgrade, toDowngrade; int held, kept, essential; - double sizeChange, dlSize; + double sizeChange, dlSize, dlNeeded; int dlCount; GString *msg = g_string_new(""); GString *msg_space = g_string_new(""); @@ -311,7 +312,7 @@ lister->getSummary(held, kept, essential, toInstall, toUpgrade, toRemove, toDowngrade, sizeChange); - lister->getDownloadSummary(dlCount, dlSize); + lister->getDownloadSummary(dlCount, dlSize, dlNeeded); if (held) if(held == 1) @@ -363,6 +364,7 @@ if(msg->str[msg->len-1] == '\n') msg = g_string_truncate(msg, msg->len-1); + /* this stuff goes to the msg_space string */ if (sizeChange > 0) { g_string_append_printf(msg_space,_("%s of extra space will be used"), @@ -374,15 +376,20 @@ } if (dlSize > 0) { - g_string_append_printf(msg_space, _("\n%s have to be downloaded"), - SizeToStr(dlSize).c_str()); + if(dlNeeded != dlSize) + g_string_append_printf(msg_space, _("\n%s/%s have to be downloaded"), + SizeToStr(dlNeeded).c_str(), + SizeToStr(dlSize).c_str()); + else + g_string_append_printf(msg_space, _("%s have to be downloaded"), + SizeToStr(dlSize).c_str()); + } gtk_label_set_markup(GTK_LABEL(_summaryL), msg->str); gtk_label_set_markup(GTK_LABEL(_summarySpaceL), msg_space->str); g_string_free(msg,TRUE); g_string_free(msg_space,TRUE); - } Index: wings/rwsummarywindow.cc =================================================================== --- wings/rwsummarywindow.cc (revision 596) +++ wings/rwsummarywindow.cc (working copy) @@ -226,14 +226,14 @@ int used = 0; int toInstall, toRemove, toUpgrade; int held, kept, essential, toDowngrade; - double sizeChange, dlSize; + double sizeChange, dlSize, dlNeeded; int dlCount; lister->getSummary(held, kept, essential, toInstall, toUpgrade, toRemove, toDowngrade, sizeChange); - lister->getDownloadSummary(dlCount, dlSize); + lister->getDownloadSummary(dlCount, dlSize, dlNeeded); #define APPEND_TXT(descr, number)\ used += snprintf(buffer+used, left, descr, number, \ @@ -263,9 +263,9 @@ char *templ = NULL; if (sizeChange > 0) { - templ = _("\n%s B will be used after finished.\n"); + templ = _("\n%s will be used after finished.\n"); } else if (sizeChange < 0) { - templ = _("\n%s B will be freed after finished.\n"); + templ = _("\n%s will be freed after finished.\n"); sizeChange = -sizeChange; } @@ -278,7 +278,8 @@ if (dlSize > 0) { used += snprintf(buffer+used, left, - _("\n%s B need to be downloaded."), + _("\n%s/%s need to be downloaded."), + SizeToStr(dlNeeded).c_str(), SizeToStr(dlSize).c_str()); left -= used; lines++; Index: common/rpackagelister.h =================================================================== --- common/rpackagelister.h (revision 596) +++ common/rpackagelister.h (working copy) @@ -145,8 +145,6 @@ private: tree _treeOrganizer; - pkgPackageManager *_packMan; - void applyInitialSelection(); void makePresetFilters(); @@ -251,7 +249,7 @@ vector &toDowngrade, double &sizeChange); - void getDownloadSummary(int &dlCount, double &dlSize); + void getDownloadSummary(int &dlCount, double &dlSize, double &dlNeeded); void saveUndoState(pkgState &state); void saveUndoState(); Index: common/rpackagelister.cc =================================================================== --- common/rpackagelister.cc (revision 597) +++ common/rpackagelister.cc (working copy) @@ -58,6 +58,7 @@ #include #include + #ifndef HAVE_RPM #include "sections_trans.h" #endif @@ -84,6 +85,7 @@ _actors.push_back(new RCacheActorRecommends(this, Recommends)); #endif _actors.push_back(new RCacheActorPkgTrack(this)); + } RPackageLister::~RPackageLister() @@ -170,7 +172,6 @@ I != _cacheObservers.end(); I++) { (*I)->notifyCacheOpen(); } - } void RPackageLister::notifyCachePreChange() @@ -1060,10 +1061,23 @@ } -void RPackageLister::getDownloadSummary(int &dlCount, double &dlSize) +void RPackageLister::getDownloadSummary(int &dlCount, double &dlSize, + double &dlNeeded) { - dlCount = 0; - dlSize = _cache->deps()->DebSize(); + pkgAcquire fetcher; + pkgPackageManager *_packMan; + + dlSize = dlNeeded = dlCount = 0; + _packMan = _system->CreatePM(_cache->deps()); + if(!_packMan->GetArchives(&fetcher, _cache->list(), _records)) + return; + dlSize = fetcher.TotalNeeded(); + dlNeeded = fetcher.FetchNeeded(); + // count dlCount; + for (pkgAcquire::ItemIterator I = fetcher.ItemsBegin(); + I < fetcher.ItemsEnd();I++) + dlCount++; + delete _packMan; } @@ -1508,6 +1522,7 @@ bool RPackageLister::commitChanges(pkgAcquireStatus *status, RInstallProgress *iprog) { + pkgPackageManager *_packMan; FileFd lock; int numPackages = 0; bool Ret = true; @@ -1530,7 +1545,6 @@ _userDialog->warning(_("Ignoring invalid record(s) in sources.list file!")); } #endif - _packMan = _system->CreatePM(_cache->deps()); if (!_packMan->GetArchives(&fetcher, _cache->list(), _records) || _error->PendingError())