callbacks.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. // callbacks.go - Handles libalpm callbacks.
  2. //
  3. // Copyright (c) 2013 The go-alpm Authors
  4. //
  5. // MIT Licensed. See LICENSE for details.
  6. package alpm
  7. /*
  8. #include <stdint.h>
  9. #include <alpm.h>
  10. void logCallback(alpm_loglevel_t level, char *cstring);
  11. void go_alpm_log_cb(alpm_loglevel_t level, const char *fmt, va_list arg);
  12. void go_alpm_set_logging(alpm_handle_t *handle);
  13. void go_alpm_set_question(alpm_handle_t *handle);
  14. */
  15. import "C"
  16. import (
  17. "unsafe"
  18. )
  19. type logCallbackSig func(LogLevel, string)
  20. type questionCallbackSig func(QuestionAny)
  21. var DefaultLogLevel = LogWarning
  22. func DefaultLogCallback(lvl LogLevel, s string) {
  23. if lvl <= DefaultLogLevel {
  24. print("go-alpm: ", s)
  25. }
  26. }
  27. var globalLogCallback logCallbackSig
  28. var globalQuestionCallback questionCallbackSig
  29. //export logCallback
  30. func logCallback(level C.alpm_loglevel_t, cstring *C.char) {
  31. globalLogCallback(LogLevel(level), C.GoString(cstring))
  32. }
  33. //export questionCallback
  34. func questionCallback(question *C.alpm_question_t) {
  35. q := (*C.alpm_question_any_t)(unsafe.Pointer(question))
  36. globalQuestionCallback(QuestionAny{q})
  37. }
  38. func (h *Handle) SetLogCallback(cb logCallbackSig) {
  39. globalLogCallback = cb
  40. C.go_alpm_set_logging(h.ptr)
  41. }
  42. func (h *Handle) SetQuestionCallback(cb questionCallbackSig) {
  43. globalQuestionCallback = cb
  44. C.go_alpm_set_question(h.ptr)
  45. }