|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef PROGRESS_H |
|
#define PROGRESS_H |
|
|
|
#include <apt-pkg/progress.h> |
|
#include <apt-pkg/acquire.h> |
|
#include <apt-pkg/packagemanager.h> |
|
#include <apt-pkg/cdrom.h> |
|
#include <Python.h> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define PyCbObj_BEGIN_ALLOW_THREADS \ |
|
_save = PyEval_SaveThread(); |
|
#define PyCbObj_END_ALLOW_THREADS \ |
|
PyEval_RestoreThread(_save); \ |
|
_save = NULL; |
|
#define PyCbObj_BLOCK_THREADS Py_BLOCK_THREADS |
|
#define PyCbObj_UNBLOCK_THREADS Py_UNBLOCK_THREADS |
|
|
|
class PyCallbackObj { |
|
protected: |
|
PyObject *callbackInst; |
|
PyThreadState *_save; |
|
|
|
public: |
|
void setCallbackInst(PyObject *o) { |
|
Py_INCREF(o); |
|
callbackInst = o; |
|
} |
|
|
|
bool RunSimpleCallback(const char *method, PyObject *arglist=NULL, |
|
PyObject **result=NULL); |
|
|
|
PyCallbackObj() : callbackInst(0), _save(0) {}; |
|
~PyCallbackObj() {Py_DECREF(callbackInst); }; |
|
}; |
|
|
|
struct PyOpProgress : public OpProgress, public PyCallbackObj |
|
{ |
|
|
|
virtual void Update(); |
|
virtual void Done(); |
|
|
|
PyOpProgress() : OpProgress(), PyCallbackObj() {}; |
|
}; |
|
|
|
|
|
struct PyFetchProgress : public pkgAcquireStatus, public PyCallbackObj |
|
{ |
|
protected: |
|
PyObject *pyAcquire; |
|
PyObject *GetDesc(pkgAcquire::ItemDesc *item); |
|
public: |
|
enum { |
|
DLDone, DLQueued, DLFailed, DLHit, DLIgnored |
|
}; |
|
|
|
void UpdateStatus(pkgAcquire::ItemDesc & Itm, int status); |
|
|
|
virtual bool MediaChange(std::string Media, std::string Drive); |
|
|
|
void setPyAcquire(PyObject *o) { |
|
Py_CLEAR(pyAcquire); |
|
Py_INCREF(o); |
|
pyAcquire = o; |
|
} |
|
|
|
|
|
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 Start(); |
|
virtual void Stop(); |
|
|
|
bool Pulse(pkgAcquire * Owner); |
|
PyFetchProgress() : PyCallbackObj(), pyAcquire(0) {}; |
|
~PyFetchProgress() { Py_XDECREF(pyAcquire); }; |
|
}; |
|
|
|
struct PyInstallProgress : public PyCallbackObj |
|
{ |
|
void StartUpdate(); |
|
void UpdateInterface(); |
|
void FinishUpdate(); |
|
|
|
pkgPackageManager::OrderResult Run(pkgPackageManager *pm); |
|
|
|
PyInstallProgress() : PyCallbackObj() {}; |
|
}; |
|
|
|
struct PyCdromProgress : public pkgCdromStatus, public PyCallbackObj |
|
{ |
|
|
|
virtual void Update(std::string text="", int current=0); |
|
|
|
virtual bool ChangeCdrom(); |
|
|
|
virtual bool AskCdromName(std::string &Name); |
|
|
|
PyCdromProgress() : PyCallbackObj() {}; |
|
}; |
|
|
|
|
|
#endif |
|
|