// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
-// $Id: acquire.cc,v 1.47 2001/02/20 07:03:17 jgg Exp $
+// $Id: acquire.cc,v 1.50 2004/03/17 05:17:11 mdz Exp $
/* ######################################################################
Acquire - File Acquiration
#include <apt-pkg/strutl.h>
#include <apti18n.h>
+
+#include <iostream>
#include <dirent.h>
#include <sys/time.h>
#include <sys/stat.h>
/*}}}*/
+using namespace std;
+
// Acquire::pkgAcquire - Constructor /*{{{*/
// ---------------------------------------------------------------------
/* We grab some runtime state from the configuration space */
void pkgAcquire::Shutdown()
{
while (Items.size() != 0)
+ {
+ if (Items[0]->Status == Item::StatFetching)
+ Items[0]->Status = Item::StatError;
delete Items[0];
+ }
while (Queues != 0)
{
{
Dequeue(Itm);
- for (vector<Item *>::iterator I = Items.begin(); I < Items.end(); I++)
+ for (ItemIterator I = Items.begin(); I != Items.end();)
{
if (*I == Itm)
+ {
Items.erase(I);
+ I = Items.begin();
+ }
+ else
+ I++;
}
}
/*}}}*/
/* This runs the queues. It manages a select loop for all of the
Worker tasks. The workers interact with the queues and items to
manage the actual fetch. */
-pkgAcquire::RunResult pkgAcquire::Run()
+pkgAcquire::RunResult pkgAcquire::Run(int PulseIntervall)
{
Running = true;
// Run till all things have been acquired
struct timeval tv;
tv.tv_sec = 0;
- tv.tv_usec = 500000;
+ tv.tv_usec = PulseIntervall;
while (ToFetch > 0)
{
fd_set RFds;
// Timeout, notify the log class
if (Res == 0 || (Log != 0 && Log->Update == true))
{
- tv.tv_usec = 500000;
+ tv.tv_usec = PulseIntervall;
for (Worker *I = Workers; I != 0; I = I->NextAcquire)
I->Pulse();
if (Log != 0 && Log->Pulse(this) == false)
I->Shutdown(false);
// Shut down the items
- for (Item **I = Items.begin(); I != Items.end(); I++)
+ for (ItemIterator I = Items.begin(); I != Items.end(); I++)
(*I)->Finished();
if (_error->PendingError())
continue;
// Look in the get list
- vector<Item *>::iterator I = Items.begin();
+ ItemCIterator I = Items.begin();
for (; I != Items.end(); I++)
if (flNotDir((*I)->DestFile) == Dir->d_name)
break;
double pkgAcquire::TotalNeeded()
{
double Total = 0;
- for (pkgAcquire::Item **I = ItemsBegin(); I != ItemsEnd(); I++)
+ for (ItemCIterator I = ItemsBegin(); I != ItemsEnd(); I++)
Total += (*I)->FileSize;
return Total;
}
double pkgAcquire::FetchNeeded()
{
double Total = 0;
- for (pkgAcquire::Item **I = ItemsBegin(); I != ItemsEnd(); I++)
+ for (ItemCIterator I = ItemsBegin(); I != ItemsEnd(); I++)
if ((*I)->Local == false)
Total += (*I)->FileSize;
return Total;
double pkgAcquire::PartialPresent()
{
double Total = 0;
- for (pkgAcquire::Item **I = ItemsBegin(); I != ItemsEnd(); I++)
+ for (ItemCIterator I = ItemsBegin(); I != ItemsEnd(); I++)
if ((*I)->Local == false)
Total += (*I)->PartialSize;
return Total;
}
- /*}}}*/
+
// Acquire::UriBegin - Start iterator for the uri list /*{{{*/
// ---------------------------------------------------------------------
/* */
// Compute the total number of bytes to fetch
unsigned int Unknown = 0;
unsigned int Count = 0;
- for (pkgAcquire::Item **I = Owner->ItemsBegin(); I != Owner->ItemsEnd();
+ for (pkgAcquire::ItemCIterator I = Owner->ItemsBegin(); I != Owner->ItemsEnd();
I++, Count++)
{
TotalItems++;