summaryrefslogtreecommitdiff
path: root/swig/CommitCallbacks.h
diff options
context:
space:
mode:
Diffstat (limited to 'swig/CommitCallbacks.h')
-rw-r--r--swig/CommitCallbacks.h193
1 files changed, 193 insertions, 0 deletions
diff --git a/swig/CommitCallbacks.h b/swig/CommitCallbacks.h
new file mode 100644
index 0000000..6df36be
--- /dev/null
+++ b/swig/CommitCallbacks.h
@@ -0,0 +1,193 @@
+class CommitCallbacks {
+
+ private:
+ PatchMessageReportReceiver _messageReceiver;
+ PatchScriptReportReceiver _scriptReceiver;
+ RemoveResolvableReportReceiver _removeReceiver;
+ InstallResolvableReportReceiver _installReceiver;
+ Target_Type _instance;
+
+ public:
+ CommitCallbacks()
+ : _instance(Target_Null)
+ {
+ _messageReceiver.connect();
+ _scriptReceiver.connect();
+ _installReceiver.connect();
+ _removeReceiver.connect();
+// printf("CommitCallbacks @ %p\n", this);
+ }
+
+ ~CommitCallbacks()
+ {
+// printf("~CommitCallbacks @ %p\n", this);
+ _removeReceiver.disconnect();
+ _installReceiver.disconnect();
+ _scriptReceiver.disconnect();
+ _messageReceiver.disconnect();
+ disconnect();
+ }
+ /*
+ * Connect callback to receiver instance
+ * Pass NULL receiver to disconnect
+ *
+ */
+ void connect(Target_Type instance) {
+// fprintf(stderr, "connect(%p)\n", instance);
+ disconnect();
+ if (instance) {
+ _instance = instance;
+ Target_INCREF(_instance);
+ _messageReceiver.instance = _instance;
+ _scriptReceiver.instance = _instance;
+ _installReceiver.instance = _instance;
+ _removeReceiver.instance = _instance;
+ }
+ }
+ /*
+ * Disconnect receiver instance
+ *
+ */
+ void disconnect() {
+// fprintf(stderr, "disconnect(%p)\n", _instance);
+ if (_instance != Target_Null) {
+ _messageReceiver.instance = Target_Null;
+ _scriptReceiver.instance = Target_Null;
+ _installReceiver.instance = Target_Null;
+ _removeReceiver.instance = Target_Null;
+ Target_DECREF(_instance);
+ _instance = Target_Null;
+ }
+ }
+ /*
+ * Get current receiver instance
+ *
+ */
+ Target_Type receiver() {
+// fprintf(stderr, "receiver(%p)\n", _instance);
+ return _instance;
+ }
+};
+
+
+/*
+ * A (dummy) commit callback emitter used for testing only
+ *
+ */
+
+class CommitCallbacksEmitter {
+ private:
+ callback::SendReport<target::rpm::InstallResolvableReport> _install_resolvable;
+ callback::SendReport<target::rpm::RemoveResolvableReport> _remove_resolvable;
+ callback::SendReport<target::PatchMessageReport> _patch_message;
+ callback::SendReport<target::PatchScriptReport> _patch_script;
+ public:
+ /*
+ * InstallResolvableReport
+ *
+ */
+ void install_start(zypp::ResObject::constPtr resobj)
+ {
+ _install_resolvable->start( resobj );
+ }
+
+ bool install_progress(zypp::ResObject::constPtr resobj, int value)
+ {
+ return _install_resolvable->progress( value, resobj ); /* arguments reversed :-/ */
+ }
+
+ target::rpm::InstallResolvableReport::Action install_problem(
+ zypp::ResObject::constPtr resobj,
+ target::rpm::InstallResolvableReport::Error error,
+ const std::string & description,
+ target::rpm::InstallResolvableReport::RpmLevel level)
+ {
+ return _install_resolvable->problem( resobj, error, description, level );
+ }
+
+ void install_finish(
+ zypp::ResObject::constPtr resobj,
+ target::rpm::InstallResolvableReport::Error error,
+ const std::string & reason,
+ target::rpm::InstallResolvableReport::RpmLevel level)
+ {
+ return _install_resolvable->finish( resobj, error, reason, level );
+ }
+
+ /*
+ * RemoveResolvableReport
+ *
+ */
+ void remove_start(zypp::ResObject::constPtr resobj)
+ {
+ _remove_resolvable->start( resobj );
+ }
+
+ bool remove_progress(zypp::ResObject::constPtr resobj, int value)
+ {
+ return _remove_resolvable->progress( value, resobj ); /* arguments reversed :-/ */
+ }
+
+ target::rpm::RemoveResolvableReport::Action remove_problem(
+ zypp::ResObject::constPtr resobj,
+ target::rpm::RemoveResolvableReport::Error error,
+ const std::string & description)
+ {
+ return _remove_resolvable->problem( resobj, error, description );
+ }
+
+ void remove_finish(
+ zypp::ResObject::constPtr resobj,
+ target::rpm::RemoveResolvableReport::Error error,
+ const std::string & reason)
+ {
+ return _remove_resolvable->finish( resobj, error, reason );
+ }
+
+ /*
+ * PatchMessageReport
+ *
+ */
+
+ bool patch_message(zypp::Patch::constPtr & patch)
+ {
+ return _patch_message->show(patch);
+ }
+
+ /*
+ * PatchScriptReport
+ *
+ */
+
+ void script_start( const zypp::Package::constPtr & package,
+ const zypp::Pathname & path_r ) // script path
+ {
+ _patch_script->start(package, path_r);
+ }
+
+ /**
+ * Progress provides the script output. If the script is quiet,
+ * from time to time still-alive pings are sent to the ui. (Notify=PING)
+ * Returning \c FALSE aborts script execution.
+ */
+ bool script_progress( target::PatchScriptReport::Notify kind, const std::string &output )
+ {
+ return _patch_script->progress(kind, output);
+ }
+
+ /** Report error. */
+ target::PatchScriptReport::Action script_problem( const std::string & description )
+ {
+ return _patch_script->problem(description);
+ }
+
+ /** Report success. */
+ void finish()
+ {
+ _patch_script->finish();
+ }
+
+};
+
+#define REMOVE_NO_ERROR target::rpm::RemoveResolvableReport::NO_ERROR
+#define INSTALL_NO_ERROR target::rpm::InstallResolvableReport::NO_ERROR