X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/314037ba995328f4ac1026bbfb2125af6224248c..a1b5561a036ebbe416cccfb2bd476a838ddb6286:/cmdline/acqprogress.cc?ds=sidebyside diff --git a/cmdline/acqprogress.cc b/cmdline/acqprogress.cc index 5e88d3cd0..3ac350aca 100644 --- a/cmdline/acqprogress.cc +++ b/cmdline/acqprogress.cc @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: acqprogress.cc,v 1.14 1999/06/06 05:52:37 jgg Exp $ +// $Id: acqprogress.cc,v 1.24 2003/04/27 01:56:48 doogie Exp $ /* ###################################################################### Acquire Progress - Command line progress meter @@ -8,21 +8,32 @@ ##################################################################### */ /*}}}*/ // Include files /*{{{*/ -#include "acqprogress.h" +#include + #include #include +#include #include +#include #include #include +#include +#include + +#include "acqprogress.h" +#include /*}}}*/ +using namespace std; + // AcqTextStatus::AcqTextStatus - Constructor /*{{{*/ // --------------------------------------------------------------------- /* */ AcqTextStatus::AcqTextStatus(unsigned int &ScreenWidth,unsigned int Quiet) : - ScreenWidth(ScreenWidth), Quiet(Quiet) + ScreenWidth(ScreenWidth), ID(0), Quiet(Quiet) { + BlankLine[0] = 0; } /*}}}*/ // AcqTextStatus::Start - Downloading has started /*{{{*/ @@ -46,7 +57,7 @@ void AcqTextStatus::IMSHit(pkgAcquire::ItemDesc &Itm) if (Quiet <= 0) cout << '\r' << BlankLine << '\r'; - cout << "Hit " << Itm.Description; + cout << _("Hit ") << Itm.Description; if (Itm.Owner->FileSize != 0) cout << " [" << SizeToStr(Itm.Owner->FileSize) << "B]"; cout << endl; @@ -70,7 +81,7 @@ void AcqTextStatus::Fetch(pkgAcquire::ItemDesc &Itm) if (Quiet <= 0) cout << '\r' << BlankLine << '\r'; - cout << "Get:" << Itm.Owner->ID << ' ' << Itm.Description; + cout << _("Get:") << Itm.Owner->ID << ' ' << Itm.Description; if (Itm.Owner->FileSize != 0) cout << " [" << SizeToStr(Itm.Owner->FileSize) << "B]"; cout << endl; @@ -92,16 +103,20 @@ void AcqTextStatus::Fail(pkgAcquire::ItemDesc &Itm) if (Quiet > 1) return; + // Ignore certain kinds of transient failures (bad code) + if (Itm.Owner->Status == pkgAcquire::Item::StatIdle) + return; + if (Quiet <= 0) cout << '\r' << BlankLine << '\r'; if (Itm.Owner->Status == pkgAcquire::Item::StatDone) { - cout << "Ign " << Itm.Description << endl; + cout << _("Ign ") << Itm.Description << endl; } else { - cout << "Err " << Itm.Description << endl; + cout << _("Err ") << Itm.Description << endl; cout << " " << Itm.Owner->ErrorText << endl; } @@ -119,12 +134,13 @@ void AcqTextStatus::Stop() return; if (Quiet <= 0) - cout << '\r' << BlankLine << '\r'; - - if (FetchedBytes != 0) - cout << "Fetched " << SizeToStr(FetchedBytes) << "B in " << - TimeToStr(ElapsedTime) << " (" << SizeToStr(CurrentCPS) << - "B/s)" << endl; + cout << '\r' << BlankLine << '\r' << flush; + + if (FetchedBytes != 0 && _error->PendingError() == false) + ioprintf(cout,_("Fetched %sB in %s (%sB/s)\n"), + SizeToStr(FetchedBytes).c_str(), + TimeToStr(ElapsedTime).c_str(), + SizeToStr(CurrentCPS).c_str()); } /*}}}*/ // AcqTextStatus::Pulse - Regular event pulse /*{{{*/ @@ -132,21 +148,23 @@ void AcqTextStatus::Stop() /* This draws the current progress. Each line has an overall percent meter and a per active item status meter along with an overall bandwidth and ETA indicator. */ -void AcqTextStatus::Pulse(pkgAcquire *Owner) +bool AcqTextStatus::Pulse(pkgAcquire *Owner) { - if (Quiet > 0) - return; - pkgAcquireStatus::Pulse(Owner); - enum {Long = 0,Medium,Short} Mode = Long; + if (Quiet > 0) + return true; + + enum {Long = 0,Medium,Short} Mode = Medium; - char Buffer[300]; + char Buffer[sizeof(BlankLine)]; char *End = Buffer + sizeof(Buffer); char *S = Buffer; - + if (ScreenWidth >= sizeof(Buffer)) + ScreenWidth = sizeof(Buffer)-1; + // Put in the percent done - sprintf(S,"%ld%%",long(double((CurrentBytes + CurrentItems)*100.0)/double(TotalBytes+TotalItems))); + sprintf(S,"%.0f%%",((CurrentBytes + CurrentItems)*100.0)/(TotalBytes+TotalItems)); bool Shown = false; for (pkgAcquire::Worker *I = Owner->WorkersBegin(); I != 0; @@ -185,7 +203,7 @@ void AcqTextStatus::Pulse(pkgAcquire *Owner) // Add the current progress if (Mode == Long) - snprintf(S,End-S," %lu",I->CurrentSize); + snprintf(S,End-S," %llu",I->CurrentSize); else { if (Mode == Medium || I->TotalSize == 0) @@ -197,11 +215,11 @@ void AcqTextStatus::Pulse(pkgAcquire *Owner) if (I->TotalSize > 0 && I->CurrentItem->Owner->Complete == false) { if (Mode == Short) - snprintf(S,End-S," %lu%%", - long(double(I->CurrentSize*100.0)/double(I->TotalSize))); + snprintf(S,End-S," %.0f%%", + (I->CurrentSize*100.0)/I->TotalSize); else - snprintf(S,End-S,"/%sB %lu%%",SizeToStr(I->TotalSize).c_str(), - long(double(I->CurrentSize*100.0)/double(I->TotalSize))); + snprintf(S,End-S,"/%sB %.0f%%",SizeToStr(I->TotalSize).c_str(), + (I->CurrentSize*100.0)/I->TotalSize); } S += strlen(S); snprintf(S,End-S,"]"); @@ -209,7 +227,7 @@ void AcqTextStatus::Pulse(pkgAcquire *Owner) // Show something.. if (Shown == false) - snprintf(S,End-S," [Working]"); + snprintf(S,End-S,_(" [Working]")); /* Put in the ETA and cps meter, block off signals to prevent strangeness during resizing */ @@ -221,7 +239,7 @@ void AcqTextStatus::Pulse(pkgAcquire *Owner) if (CurrentCPS != 0) { char Tmp[300]; - unsigned long ETA = (unsigned long)((TotalBytes - CurrentBytes)/CurrentCPS); + unsigned long long ETA = (TotalBytes - CurrentBytes)/CurrentCPS; sprintf(Tmp," %sB/s %s",SizeToStr(CurrentCPS).c_str(),TimeToStr(ETA).c_str()); unsigned int Len = strlen(Buffer); unsigned int LenT = strlen(Tmp); @@ -233,7 +251,7 @@ void AcqTextStatus::Pulse(pkgAcquire *Owner) } Buffer[ScreenWidth] = 0; BlankLine[ScreenWidth] = 0; - sigprocmask(SIG_UNBLOCK,&OldSigs,0); + sigprocmask(SIG_SETMASK,&OldSigs,0); // Draw the current status if (strlen(Buffer) == strlen(BlankLine)) @@ -244,6 +262,8 @@ void AcqTextStatus::Pulse(pkgAcquire *Owner) BlankLine[strlen(Buffer)] = 0; Update = false; + + return true; } /*}}}*/ // AcqTextStatus::MediaChange - Media need to be swapped /*{{{*/ @@ -251,16 +271,34 @@ void AcqTextStatus::Pulse(pkgAcquire *Owner) /* Prompt for a media swap */ bool AcqTextStatus::MediaChange(string Media,string Drive) { + // If we do not output on a terminal and one of the options to avoid user + // interaction is given, we assume that no user is present who could react + // on your media change request + if (isatty(STDOUT_FILENO) != 1 && Quiet >= 2 && + (_config->FindB("APT::Get::Assume-Yes",false) == true || + _config->FindB("APT::Get::Force-Yes",false) == true || + _config->FindB("APT::Get::Trivial-Only",false) == true)) + + return false; + if (Quiet <= 0) - cout << '\r' << BlankLine << '\r'; - cout << "Media Change: Please insert the disc labeled '" << Media << "' in "\ - "the drive '" << Drive << "' and press enter" << endl; + cout << '\r' << BlankLine << '\r'; + ioprintf(cout,_("Media change: please insert the disc labeled\n" + " '%s'\n" + "in the drive '%s' and press enter\n"), + Media.c_str(),Drive.c_str()); char C = 0; + bool bStatus = true; while (C != '\n' && C != '\r') - read(STDIN_FILENO,&C,1); - - Update = true; - return true; + { + int len = read(STDIN_FILENO,&C,1); + if(C == 'c' || len <= 0) + bStatus = false; + } + + if(bStatus) + Update = true; + return bStatus; } /*}}}*/