X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/bfd22fc0ac2632c6196f5149dc3b3671d9ff15e0..db890fdba13d88ef85a2ac0ce39749ebfa835516:/apt-pkg/acquire.h diff --git a/apt-pkg/acquire.h b/apt-pkg/acquire.h index a4ea45bff..d6339e74d 100644 --- a/apt-pkg/acquire.h +++ b/apt-pkg/acquire.h @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: acquire.h,v 1.8 1998/11/05 07:21:41 jgg Exp $ +// $Id: acquire.h,v 1.17 1998/12/11 06:01:27 jgg Exp $ /* ###################################################################### Acquire - File Acquiration @@ -39,8 +39,10 @@ #pragma interface "apt-pkg/acquire.h" #endif +#include #include +class pkgAcquireStatus; class pkgAcquire { public: @@ -49,6 +51,7 @@ class pkgAcquire class Queue; class Worker; struct MethodConfig; + struct ItemDesc; friend Item; friend Queue; @@ -61,8 +64,9 @@ class pkgAcquire Queue *Queues; Worker *Workers; MethodConfig *Configs; + pkgAcquireStatus *Log; unsigned long ToFetch; - + // Configurable parameters for the schedular enum {QueueHost,QueueAccess} QueueMode; bool Debug; @@ -73,9 +77,9 @@ class pkgAcquire void Add(Worker *Work); void Remove(Worker *Work); - void Enqueue(Item *Item,string URI,string Description); + 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); @@ -88,11 +92,33 @@ class pkgAcquire MethodConfig *GetConfig(string Access); bool Run(); + + // Simple iteration mechanism + inline Worker *WorkersBegin() {return Workers;}; + Worker *WorkerStep(Worker *I); + inline Item **ItemsBegin() {return Items.begin();}; + inline Item **ItemsEnd() {return Items.end();}; + + // Cleans out the download dir + bool Clean(string Dir); + + // Returns the size of the total download set + unsigned long TotalNeeded(); + unsigned long FetchNeeded(); - pkgAcquire(); + pkgAcquire(pkgAcquireStatus *Log = 0); ~pkgAcquire(); }; +// Description of an Item+URI +struct pkgAcquire::ItemDesc +{ + string URI; + string Description; + string ShortDesc; + Item *Owner; +}; + // List of possible items queued for download. class pkgAcquire::Queue { @@ -102,15 +128,19 @@ class pkgAcquire::Queue protected: // Queued item - struct QItem + struct QItem : pkgAcquire::ItemDesc { - QItem *Next; - - string URI; - string Description; - Item *Owner; + QItem *Next; pkgAcquire::Worker *Worker; - }; + + void operator =(pkgAcquire::ItemDesc const &I) + { + URI = I.URI; + Description = I.Description; + ShortDesc = I.ShortDesc; + Owner = I.Owner; + }; + }; // Name of the queue string Name; @@ -119,15 +149,18 @@ class pkgAcquire::Queue QItem *Items; pkgAcquire::Worker *Workers; pkgAcquire *Owner; + unsigned long PipeDepth; + unsigned long MaxPipeDepth; public: // Put an item into this queue - void Enqueue(Item *Owner,string URI,string Description); + void Enqueue(ItemDesc &Item); bool Dequeue(Item *Owner); // Find a Queued item QItem *FindItem(string URI,pkgAcquire::Worker *Owner); + bool ItemStart(QItem *Itm,unsigned long Size); bool ItemDone(QItem *Itm); bool Startup(); @@ -148,11 +181,49 @@ 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 Start(); + virtual void Stop(); + + pkgAcquireStatus(); + virtual ~pkgAcquireStatus() {}; +}; + #endif