uihelper.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #
  2. # Copyright (C) 2006 - 2007 Michael 'Mickey' Lauer
  3. # Copyright (C) 2006 - 2007 Richard Purdie
  4. #
  5. # SPDX-License-Identifier: GPL-2.0-only
  6. #
  7. import bb.build
  8. import time
  9. class BBUIHelper:
  10. def __init__(self):
  11. self.needUpdate = False
  12. self.running_tasks = {}
  13. # Running PIDs preserves the order tasks were executed in
  14. self.running_pids = []
  15. self.failed_tasks = []
  16. self.tasknumber_current = 0
  17. self.tasknumber_total = 0
  18. def eventHandler(self, event):
  19. if isinstance(event, bb.build.TaskStarted):
  20. if event._mc != "default":
  21. self.running_tasks[event.pid] = { 'title' : "mc:%s:%s %s" % (event._mc, event._package, event._task), 'starttime' : time.time() }
  22. else:
  23. self.running_tasks[event.pid] = { 'title' : "%s %s" % (event._package, event._task), 'starttime' : time.time() }
  24. self.running_pids.append(event.pid)
  25. self.needUpdate = True
  26. elif isinstance(event, bb.build.TaskSucceeded):
  27. del self.running_tasks[event.pid]
  28. self.running_pids.remove(event.pid)
  29. self.needUpdate = True
  30. elif isinstance(event, bb.build.TaskFailedSilent):
  31. del self.running_tasks[event.pid]
  32. self.running_pids.remove(event.pid)
  33. # Don't add to the failed tasks list since this is e.g. a setscene task failure
  34. self.needUpdate = True
  35. elif isinstance(event, bb.build.TaskFailed):
  36. del self.running_tasks[event.pid]
  37. self.running_pids.remove(event.pid)
  38. self.failed_tasks.append( { 'title' : "%s %s" % (event._package, event._task)})
  39. self.needUpdate = True
  40. elif isinstance(event, bb.runqueue.runQueueTaskStarted) or isinstance(event, bb.runqueue.sceneQueueTaskStarted):
  41. self.tasknumber_current = event.stats.completed + event.stats.active + event.stats.failed + 1
  42. self.tasknumber_total = event.stats.total
  43. self.needUpdate = True
  44. elif isinstance(event, bb.build.TaskProgress):
  45. if event.pid > 0:
  46. self.running_tasks[event.pid]['progress'] = event.progress
  47. self.running_tasks[event.pid]['rate'] = event.rate
  48. self.needUpdate = True
  49. else:
  50. return False
  51. return True
  52. def getTasks(self):
  53. self.needUpdate = False
  54. return (self.running_tasks, self.failed_tasks)