summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/apt_pkgmodule.cc3
-rw-r--r--python/apt_pkgmodule.h4
-rw-r--r--python/cdrom.cc105
-rw-r--r--python/makefile2
-rw-r--r--python/progress.cc69
-rw-r--r--python/progress.h17
6 files changed, 190 insertions, 10 deletions
diff --git a/python/apt_pkgmodule.cc b/python/apt_pkgmodule.cc
index 95201f35..7bf7f3e3 100644
--- a/python/apt_pkgmodule.cc
+++ b/python/apt_pkgmodule.cc
@@ -336,6 +336,9 @@ static PyMethodDef methods[] =
{"GetPkgSrcRecords",GetPkgSrcRecords,METH_VARARGS,"GetPkgSrcRecords() -> PkgSrcRecords"},
{"GetPkgSourceList",GetPkgSourceList,METH_VARARGS,"GetPkgSourceList() -> PkgSourceList"},
+ // Cdrom
+ {"GetCdrom",GetCdrom,METH_VARARGS,"GetCdrom() -> Cdrom"},
+
{}
};
diff --git a/python/apt_pkgmodule.h b/python/apt_pkgmodule.h
index bc4c5509..d0bfbeae 100644
--- a/python/apt_pkgmodule.h
+++ b/python/apt_pkgmodule.h
@@ -63,6 +63,10 @@ PyObject *TmpGetCache(PyObject *Self,PyObject *Args);
extern PyTypeObject PkgDepCacheType;
PyObject *GetDepCache(PyObject *Self,PyObject *Args);
+// cdrom
+extern PyTypeObject PkgCdromType;
+PyObject *GetCdrom(PyObject *Self,PyObject *Args);
+
// PkgRecords Stuff
extern PyTypeObject PkgRecordsType;
PyObject *GetPkgRecords(PyObject *Self,PyObject *Args);
diff --git a/python/cdrom.cc b/python/cdrom.cc
new file mode 100644
index 00000000..764110ce
--- /dev/null
+++ b/python/cdrom.cc
@@ -0,0 +1,105 @@
+// Description /*{{{*/
+// $Id: cdrom.cc,v 1.1 2003/06/03 03:03:23 mvo Exp $
+/* ######################################################################
+
+ Cdrom - Wrapper for the apt-cdrom support
+
+ ##################################################################### */
+
+#include "generic.h"
+#include "apt_pkgmodule.h"
+#include "progress.h"
+
+#include <apt-pkg/cdrom.h>
+
+
+struct PkgCdromStruct
+{
+ pkgCdrom cdrom;
+};
+
+static PyObject *PkgCdromAdd(PyObject *Self,PyObject *Args)
+{
+ PkgCdromStruct &Struct = GetCpp<PkgCdromStruct>(Self);
+
+ PyObject *pyCdromProgressInst = 0;
+ if (PyArg_ParseTuple(Args, "O", &pyCdromProgressInst) == 0) {
+ return 0;
+ }
+
+ PyCdromProgress progress;
+ progress.setCallbackInst(pyCdromProgressInst);
+
+ Struct.cdrom.Add(&progress);
+
+ Py_INCREF(Py_None);
+ return HandleErrors(Py_None);
+}
+
+static PyObject *PkgCdromIdent(PyObject *Self,PyObject *Args)
+{
+ PkgCdromStruct &Struct = GetCpp<PkgCdromStruct>(Self);
+
+ if (PyArg_ParseTuple(Args,"") == 0)
+ return 0;
+
+ //pkgFixBroken(*Struct.depcache);
+
+ Py_INCREF(Py_None);
+ return HandleErrors(Py_None);
+}
+
+
+static PyMethodDef PkgCdromMethods[] =
+{
+ {"Add",PkgCdromAdd,METH_VARARGS,"Add a cdrom"},
+ {"Ident",PkgCdromIdent,METH_VARARGS,"Ident a cdrom"},
+ {}
+};
+
+
+static PyObject *CdromAttr(PyObject *Self,char *Name)
+{
+ PkgCdromStruct &Struct = GetCpp<PkgCdromStruct>(Self);
+
+
+ return Py_FindMethod(PkgCdromMethods,Self,Name);
+}
+
+
+
+
+PyTypeObject PkgCdromType =
+{
+ PyObject_HEAD_INIT(&PyType_Type)
+ 0, // ob_size
+ "Cdrom", // tp_name
+ sizeof(CppOwnedPyObject<PkgCdromStruct>), // tp_basicsize
+ 0, // tp_itemsize
+ // Methods
+ CppOwnedDealloc<PkgCdromStruct>, // tp_dealloc
+ 0, // tp_print
+ CdromAttr, // tp_getattr
+ 0, // tp_setattr
+ 0, // tp_compare
+ 0, // tp_repr
+ 0, // tp_as_number
+ 0, // tp_as_sequence
+ 0, // tp_as_mapping
+ 0, // tp_hash
+};
+
+PyObject *GetCdrom(PyObject *Self,PyObject *Args)
+{
+ pkgCdrom *cdrom = new pkgCdrom();
+
+ CppOwnedPyObject<pkgCdrom> *CdromObj =
+ CppOwnedPyObject_NEW<pkgCdrom>(0,&PkgCdromType, *cdrom);
+
+ return CdromObj;
+}
+
+
+
+
+ /*}}}*/
diff --git a/python/makefile b/python/makefile
index 29bbaca9..273096a7 100644
--- a/python/makefile
+++ b/python/makefile
@@ -11,7 +11,7 @@ SLIBS = -lapt-pkg
LIB_MAKES = apt-pkg/makefile
APT_PKG_SRC = apt_pkgmodule.cc configuration.cc generic.cc tag.cc string.cc \
cache.cc pkgrecords.cc pkgsrcrecords.cc sourcelist.cc \
- depcache.cc progress.cc
+ depcache.cc progress.cc cdrom.cc
SOURCE := $(APT_PKG_SRC)
include $(PYTHON_H) progress.h
diff --git a/python/progress.cc b/python/progress.cc
index 43490247..54e2096e 100644
--- a/python/progress.cc
+++ b/python/progress.cc
@@ -1,5 +1,5 @@
// Description /*{{{*/
-// $Id: progress.cc,v 1.5 2003/06/03 03:03:23 mdz Exp $
+// $Id: progress.cc,v 1.5 2003/06/03 03:03:23 mvo Exp $
/* ######################################################################
Progress - Wrapper for the progress related functions
@@ -13,7 +13,8 @@
// generic
bool PyCallbackObj::RunSimpleCallback(const char* method_name,
- PyObject *arglist)
+ PyObject *arglist,
+ PyObject **res)
{
if(callbackInst == 0)
return false;
@@ -35,8 +36,10 @@ bool PyCallbackObj::RunSimpleCallback(const char* method_name,
return NULL;
}
-
- Py_XDECREF(result);
+ if(res != NULL)
+ *res = result;
+ else
+ Py_XDECREF(result);
Py_XDECREF(method);
return true;
@@ -71,10 +74,17 @@ bool PyFetchProgress::MediaChange(string Media, string Drive)
{
//std::cout << "MediaChange" << std::endl;
PyObject *arglist = Py_BuildValue("(ss)", Media.c_str(), Drive.c_str());
- RunSimpleCallback("MediaChange", arglist);
-
- // FIXME: need to return depending on the python result
- return true;
+ PyObject *result;
+ RunSimpleCallback("MediaChange", arglist, &result);
+
+ bool res = true;
+ if(!PyArg_Parse(result, "b", &res))
+ std::cerr << "result could not be parsed" << std::endl;
+
+ // FIXME: find out what it should return usually
+ //std::cerr << "res is: " << res << std::endl;
+
+ return res;
}
void PyFetchProgress::UpdateStatus(pkgAcquire::ItemDesc &Itm, int status)
@@ -223,3 +233,46 @@ pkgPackageManager::OrderResult PyInstallProgress::Run(pkgPackageManager *pm)
return res;
}
+
+
+//-----------------------------------------------------------------------------
+// apt-cdrom interface
+
+void PyCdromProgress::Update(string text, int current)
+{
+ PyObject *arglist = Py_BuildValue("(si)", text.c_str(), current);
+ RunSimpleCallback("Update", arglist);
+}
+
+bool PyCdromProgress::ChangeCdrom()
+{
+ PyObject *arglist = Py_BuildValue("()");
+ PyObject *result;
+ RunSimpleCallback("ChangeCdrom", arglist, &result);
+
+ bool res = true;
+ if(!PyArg_Parse(result, "b", &res))
+ std::cerr << "ChangeCdrom: result could not be parsed" << std::endl;
+
+ return res;
+}
+
+
+bool PyCdromProgress::AskCdromName(string &Name)
+{
+ PyObject *arglist = Py_BuildValue("()");
+ PyObject *result;
+ RunSimpleCallback("AskCdromName", arglist, &result);
+
+ const char *new_name;
+ bool res;
+ if(!PyArg_Parse(result, "(bs)", &res, &new_name))
+ std::cerr << "AskCdromName: result could not be parsed" << std::endl;
+
+ //std::cerr << "got: " << res << " " << "name: " << new_name << std::endl;
+
+ // set the new name
+ Name = string(new_name);
+
+ return res;
+}
diff --git a/python/progress.h b/python/progress.h
index 2514623a..f116c811 100644
--- a/python/progress.h
+++ b/python/progress.h
@@ -12,6 +12,7 @@
#include <apt-pkg/progress.h>
#include <apt-pkg/acquire.h>
#include <apt-pkg/packagemanager.h>
+#include <apt-pkg/cdrom.h>
#include <Python.h>
class PyCallbackObj {
@@ -24,7 +25,8 @@ class PyCallbackObj {
callbackInst = o;
}
- bool RunSimpleCallback(const char *method, PyObject *arglist=NULL);
+ bool RunSimpleCallback(const char *method, PyObject *arglist=NULL,
+ PyObject **result=NULL);
PyCallbackObj() : callbackInst(0) {};
~PyCallbackObj() {Py_DECREF(callbackInst); };
@@ -70,4 +72,17 @@ struct PyInstallProgress : public PyCallbackObj
PyInstallProgress() : PyCallbackObj() {};
};
+struct PyCdromProgress : public pkgCdromStatus, public PyCallbackObj
+{
+ // update steps, will be called regularly as a "pulse"
+ virtual void Update(string text="", int current=0);
+ // ask for cdrom insert
+ virtual bool ChangeCdrom();
+ // ask for cdrom name
+ virtual bool AskCdromName(string &Name);
+
+ PyCdromProgress() : PyCallbackObj() {};
+};
+
+
#endif