X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/a246f2dc8c6084d857edb2792ce6b37c794e3d69..883ed339e5eb0c9ecac82dc81fc3c720bf5d36a5:/apt-pkg/contrib/progress.cc?ds=inline diff --git a/apt-pkg/contrib/progress.cc b/apt-pkg/contrib/progress.cc index 9a29c4b66..ab81e0643 100644 --- a/apt-pkg/contrib/progress.cc +++ b/apt-pkg/contrib/progress.cc @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: progress.cc,v 1.7 1998/09/07 05:28:38 jgg Exp $ +// $Id: progress.cc,v 1.11 2001/05/07 05:25:13 jgg Exp $ /* ###################################################################### OpProgress - Operation Progress @@ -13,9 +13,16 @@ #endif #include #include +#include + +#include + +#include #include /*}}}*/ +using namespace std; + // OpProgress::OpProgress - Constructor /*{{{*/ // --------------------------------------------------------------------- /* */ @@ -32,7 +39,10 @@ OpProgress::OpProgress() : Current(0), Total(0), Size(0), SubTotal(1), percent of Total SubTotal is. */ void OpProgress::Progress(unsigned long Cur) { - Percent = (Current + Cur/((float)SubTotal)*Size)*100.0/Total; + if (Total == 0 || Size == 0 || SubTotal == 0) + Percent = 0; + else + Percent = (Current + Cur/((float)SubTotal)*Size)*100.0/Total; Update(); } /*}}}*/ @@ -47,7 +57,10 @@ void OpProgress::OverallProgress(unsigned long Current, unsigned long Total, this->Size = Size; this->Op = Op; SubOp = string(); - Percent = Current*100.0/Total; + if (Total == 0) + Percent = 0; + else + Percent = Current*100.0/Total; Update(); } /*}}}*/ @@ -58,7 +71,10 @@ void OpProgress::SubProgress(unsigned long SubTotal,string Op) { this->SubTotal = SubTotal; SubOp = Op; - Percent = Current*100.0/Total; + if (Total == 0) + Percent = 0; + else + Percent = Current*100.0/Total; Update(); } /*}}}*/ @@ -68,7 +84,10 @@ void OpProgress::SubProgress(unsigned long SubTotal,string Op) void OpProgress::SubProgress(unsigned long SubTotal) { this->SubTotal = SubTotal; - Percent = Current*100.0/Total; + if (Total == 0) + Percent = 0; + else + Percent = Current*100.0/Total; Update(); } /*}}}*/ @@ -97,6 +116,9 @@ bool OpProgress::CheckChange(float Interval) if ((int)LastPercent == (int)Percent) return false; + if (Interval == 0) + return false; + // Check time delta struct timeval Now; gettimeofday(&Now,0); @@ -108,6 +130,18 @@ bool OpProgress::CheckChange(float Interval) return true; } /*}}}*/ +// OpTextProgress::OpTextProgress - Constructor /*{{{*/ +// --------------------------------------------------------------------- +/* */ +OpTextProgress::OpTextProgress(Configuration &Config) : + NoUpdate(false), NoDisplay(false), LastLen(0) +{ + if (Config.FindI("quiet",0) >= 1) + NoUpdate = true; + if (Config.FindI("quiet",0) >= 2) + NoDisplay = true; +}; + /*}}}*/ // OpTextProgress::Done - Clean up the display /*{{{*/ // --------------------------------------------------------------------- /* */ @@ -117,13 +151,19 @@ void OpTextProgress::Done() { char S[300]; if (_error->PendingError() == true) - snprintf(S,sizeof(S),"\r%s... Error!",OldOp.c_str()); + snprintf(S,sizeof(S),_("\r%s... Error!"),OldOp.c_str()); else - snprintf(S,sizeof(S),"\r%s... Done",OldOp.c_str()); + snprintf(S,sizeof(S),_("\r%s... Done"),OldOp.c_str()); Write(S); cout << endl; OldOp = string(); - } + } + + if (NoUpdate == true && NoDisplay == false && OldOp.empty() == false) + { + OldOp = string(); + cout << endl; + } } /*}}}*/ // OpTextProgress::Update - Simple text spinner /*{{{*/ @@ -131,7 +171,7 @@ void OpTextProgress::Done() /* */ void OpTextProgress::Update() { - if (CheckChange() == false) + if (CheckChange((NoUpdate == true?0:0.7)) == false) return; // No percent spinner @@ -139,7 +179,14 @@ void OpTextProgress::Update() { if (MajorChange == false) return; - cout << Op << endl; + if (NoDisplay == false) + { + if (OldOp.empty() == false) + cout << endl; + OldOp = "a"; + cout << Op << "..." << flush; + } + return; }