// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
-// $Id: progress.cc,v 1.5 1998/08/23 03:52:22 jgg Exp $
+// $Id: progress.cc,v 1.10 2001/02/20 07:03:17 jgg Exp $
/* ######################################################################
OpProgress - Operation Progress
#endif
#include <apt-pkg/progress.h>
#include <apt-pkg/error.h>
+#include <apt-pkg/configuration.h>
+
+#include <apti18n.h>
+
#include <stdio.h>
/*}}}*/
/*}}}*/
// OpProgress::Progress - Sub progress with no state change /*{{{*/
// ---------------------------------------------------------------------
-/* This assumes that Size is the same as the current sub size */
+/* Current is the Base Overall progress in units of Total. Cur is the sub
+ progress in units of SubTotal. Size is a scaling factor that says what
+ 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();
}
/*}}}*/
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();
}
/*}}}*/
{
this->SubTotal = SubTotal;
SubOp = Op;
- Percent = Current*100.0/Total;
+ if (Total == 0)
+ Percent = 0;
+ else
+ Percent = Current*100.0/Total;
+ Update();
+}
+ /*}}}*/
+// OpProgress::SubProgress - Set the sub progress state /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void OpProgress::SubProgress(unsigned long SubTotal)
+{
+ this->SubTotal = SubTotal;
+ if (Total == 0)
+ Percent = 0;
+ else
+ Percent = Current*100.0/Total;
Update();
}
/*}}}*/
if ((int)LastPercent == (int)Percent)
return false;
+ if (Interval == 0)
+ return false;
+
// Check time delta
struct timeval Now;
gettimeofday(&Now,0);
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 /*{{{*/
// ---------------------------------------------------------------------
/* */
{
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 /*{{{*/
/* */
void OpTextProgress::Update()
{
- if (CheckChange() == false)
+ if (CheckChange((NoUpdate == true?0:0.7)) == false)
return;
// No percent spinner
{
if (MajorChange == false)
return;
- cout << Op << endl;
+ if (NoDisplay == false)
+ {
+ if (OldOp.empty() == false)
+ cout << endl;
+ OldOp = "a";
+ cout << Op << "..." << flush;
+ }
+
return;
}