// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
-// $Id: acquire.h,v 1.9 1998/11/09 01:09:26 jgg Exp $
+// $Id: acquire.h,v 1.19 1999/01/30 06:07:24 jgg Exp $
/* ######################################################################
Acquire - File Acquiration
#pragma interface "apt-pkg/acquire.h"
#endif
+#include <sys/time.h>
#include <unistd.h>
class pkgAcquireStatus;
void Enqueue(ItemDesc &Item);
void Dequeue(Item *Item);
- string QueueName(string URI);
+ string QueueName(string URI,MethodConfig const *&Config);
// FDSET managers for derived classes
void SetFds(int &Fd,fd_set *RSet,fd_set *WSet);
inline Item **ItemsBegin() {return Items.begin();};
inline Item **ItemsEnd() {return Items.end();};
+ // Iterate over queued Item URIs
+ class UriIterator;
+ UriIterator UriBegin();
+ UriIterator UriEnd();
+
+ // Cleans out the download dir
+ bool Clean(string Dir);
+
+ // Returns the size of the total download set
+ unsigned long TotalNeeded();
+ unsigned long FetchNeeded();
+
pkgAcquire(pkgAcquireStatus *Log = 0);
~pkgAcquire();
};
class pkgAcquire::Queue
{
friend pkgAcquire;
+ friend pkgAcquire::UriIterator;
Queue *Next;
protected:
QItem *Items;
pkgAcquire::Worker *Workers;
pkgAcquire *Owner;
+ signed long PipeDepth;
+ unsigned long MaxPipeDepth;
public:
~Queue();
};
+class pkgAcquire::UriIterator
+{
+ pkgAcquire::Queue *CurQ;
+ pkgAcquire::Queue::QItem *CurItem;
+
+ public:
+
+ // Advance to the next item
+ inline void operator ++() {operator ++();};
+ void operator ++(int)
+ {
+ CurItem = CurItem->Next;
+ while (CurItem == 0 && CurQ != 0)
+ {
+ CurItem = CurQ->Items;
+ CurQ = CurQ->Next;
+ }
+ };
+
+ // Accessors
+ inline pkgAcquire::ItemDesc const *operator ->() const {return CurItem;};
+ inline bool operator !=(UriIterator const &rhs) const {return rhs.CurQ != CurQ || rhs.CurItem != CurItem;};
+ inline bool operator ==(UriIterator const &rhs) const {return rhs.CurQ == CurQ && rhs.CurItem == CurItem;};
+
+ UriIterator(pkgAcquire::Queue *Q) : CurQ(Q), CurItem(0)
+ {
+ while (CurItem == 0 && CurQ != 0)
+ {
+ CurItem = CurQ->Items;
+ CurQ = CurQ->Next;
+ }
+ }
+};
+
// Configuration information from each method
struct pkgAcquire::MethodConfig
{
string Version;
bool SingleInstance;
- bool PreScan;
bool Pipeline;
bool SendConfig;
-
+ bool LocalOnly;
+
MethodConfig();
};
class pkgAcquireStatus
{
+ protected:
+
+ struct timeval Time;
+ struct timeval StartTime;
+ unsigned long LastBytes;
+ double CurrentCPS;
+ unsigned long CurrentBytes;
+ unsigned long TotalBytes;
+ unsigned long FetchedBytes;
+ unsigned long ElapsedTime;
+ unsigned long TotalItems;
+ unsigned long CurrentItems;
+
public:
bool Update;
+ // Called by items when they have finished a real download
+ virtual void Fetched(unsigned long Size,unsigned long ResumePoint);
+
+ // Called to change media
+ virtual bool MediaChange(string Media,string Drive) = 0;
+
// Each of these is called by the workers when an event occures
virtual void IMSHit(pkgAcquire::ItemDesc &Itm) {};
virtual void Fetch(pkgAcquire::ItemDesc &Itm) {};
virtual void Done(pkgAcquire::ItemDesc &Itm) {};
- virtual void Fail(pkgAcquire::ItemDesc &Itm) {};
- virtual void Pulse(pkgAcquire *Owner) {};
+ virtual void Fail(pkgAcquire::ItemDesc &Itm) {};
+ virtual void Pulse(pkgAcquire *Owner);
+ virtual void Start();
+ virtual void Stop();
- pkgAcquireStatus() : Update(false) {};
+ pkgAcquireStatus();
virtual ~pkgAcquireStatus() {};
};