ok-script 0.0.14__tar.gz → 0.0.16__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. {ok-script-0.0.14 → ok-script-0.0.16}/PKG-INFO +1 -1
  2. {ok-script-0.0.14 → ok-script-0.0.16}/ok/OK.py +46 -49
  3. {ok-script-0.0.14 → ok-script-0.0.16}/ok/capture/adb/DeviceManager.py +5 -1
  4. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/Communicate.py +0 -1
  5. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/debug/Screenshot.py +2 -1
  6. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/resources.py +335 -321
  7. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/tasks/LabelAndSwitchButton.py +2 -0
  8. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/tasks/ModifyListDialog.py +1 -1
  9. ok-script-0.0.16/ok/gui/tasks/TaskCard.py +159 -0
  10. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/util/InitWorker.py +0 -2
  11. {ok-script-0.0.14 → ok-script-0.0.16}/ok/task/BaseTask.py +3 -1
  12. {ok-script-0.0.14 → ok-script-0.0.16}/ok/task/TaskExecutor.py +11 -7
  13. {ok-script-0.0.14 → ok-script-0.0.16}/ok_script.egg-info/PKG-INFO +1 -1
  14. {ok-script-0.0.14 → ok-script-0.0.16}/setup.py +1 -1
  15. ok-script-0.0.14/ok/gui/tasks/TaskCard.py +0 -97
  16. {ok-script-0.0.14 → ok-script-0.0.16}/README.md +0 -0
  17. {ok-script-0.0.14 → ok-script-0.0.16}/ok/__init__.py +0 -0
  18. {ok-script-0.0.14 → ok-script-0.0.16}/ok/capture/BaseCaptureMethod.py +0 -0
  19. {ok-script-0.0.14 → ok-script-0.0.16}/ok/capture/HwndWindow.py +0 -0
  20. {ok-script-0.0.14 → ok-script-0.0.16}/ok/capture/__init__.py +0 -0
  21. {ok-script-0.0.14 → ok-script-0.0.16}/ok/capture/adb/ADBCaptureMethod.py +0 -0
  22. {ok-script-0.0.14 → ok-script-0.0.16}/ok/capture/adb/__init__.py +0 -0
  23. {ok-script-0.0.14 → ok-script-0.0.16}/ok/capture/adb/bin/__init__.py +0 -0
  24. {ok-script-0.0.14 → ok-script-0.0.16}/ok/capture/adb/targets.py +0 -0
  25. {ok-script-0.0.14 → ok-script-0.0.16}/ok/capture/adb/vbox.py +0 -0
  26. {ok-script-0.0.14 → ok-script-0.0.16}/ok/capture/windows/WindowsGraphicsCaptureMethod.py +0 -0
  27. {ok-script-0.0.14 → ok-script-0.0.16}/ok/capture/windows/__init__.py +0 -0
  28. {ok-script-0.0.14 → ok-script-0.0.16}/ok/capture/windows/d3d11.py +0 -0
  29. {ok-script-0.0.14 → ok-script-0.0.16}/ok/capture/windows/utils.py +0 -0
  30. {ok-script-0.0.14 → ok-script-0.0.16}/ok/capture/windows/window.py +0 -0
  31. {ok-script-0.0.14 → ok-script-0.0.16}/ok/color/Color.py +0 -0
  32. {ok-script-0.0.14 → ok-script-0.0.16}/ok/color/__init__.py +0 -0
  33. {ok-script-0.0.14 → ok-script-0.0.16}/ok/config/Config.py +0 -0
  34. {ok-script-0.0.14 → ok-script-0.0.16}/ok/config/InfoDict.py +0 -0
  35. {ok-script-0.0.14 → ok-script-0.0.16}/ok/config/__init__.py +0 -0
  36. {ok-script-0.0.14 → ok-script-0.0.16}/ok/feature/Box.py +0 -0
  37. {ok-script-0.0.14 → ok-script-0.0.16}/ok/feature/Feature.py +0 -0
  38. {ok-script-0.0.14 → ok-script-0.0.16}/ok/feature/FeatureSet.py +0 -0
  39. {ok-script-0.0.14 → ok-script-0.0.16}/ok/feature/FindFeature.py +0 -0
  40. {ok-script-0.0.14 → ok-script-0.0.16}/ok/feature/__init__.py +0 -0
  41. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/App.py +0 -0
  42. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/MainWindow.py +0 -0
  43. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/TabTitles.py +0 -0
  44. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/__init__.py +0 -0
  45. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/about/AboutTab.py +0 -0
  46. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/about/__init__.py +0 -0
  47. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/common/OKIcon.py +0 -0
  48. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/common/__init__.py +0 -0
  49. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/common/config.py +0 -0
  50. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/common/style_sheet.py +0 -0
  51. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/debug/AspectRatioWidget.py +0 -0
  52. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/debug/DebugTab.py +0 -0
  53. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/debug/FrameWidget.py +0 -0
  54. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/debug/InfoWidget.py +0 -0
  55. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/debug/LoggerWidget.py +0 -0
  56. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/debug/__init__.py +0 -0
  57. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/i18n/__init__.py +0 -0
  58. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/i18n/path.py +0 -0
  59. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/i18n/update.py +0 -0
  60. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/icon/__init__.py +0 -0
  61. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/icon/icon.py +0 -0
  62. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/overlay/OverlayWindow.py +0 -0
  63. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/overlay/__init__.py +0 -0
  64. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/qss/__init__.py +0 -0
  65. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/settings/SettingTab.py +0 -0
  66. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/settings/__init__.py +0 -0
  67. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/start/SelectCaptureListView.py +0 -0
  68. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/start/SelectHwndWindow.py +0 -0
  69. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/start/StartCard.py +0 -0
  70. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/start/StartTab.py +0 -0
  71. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/start/__init__.py +0 -0
  72. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/tasks/ConfigItemFactory.py +0 -0
  73. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/tasks/ConfigLabelAndWidget.py +0 -0
  74. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/tasks/LabelAndDoubleSpinBox.py +0 -0
  75. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/tasks/LabelAndLineEdit.py +0 -0
  76. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/tasks/LabelAndList.py +0 -0
  77. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/tasks/LabelAndSpinBox.py +0 -0
  78. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/tasks/LabelAndWidget.py +0 -0
  79. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/tasks/ModifyListItem.py +0 -0
  80. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/tasks/OneTimeTaskTab.py +0 -0
  81. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/tasks/StartButton.py +0 -0
  82. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/tasks/TaskOpButton.py +0 -0
  83. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/tasks/TooltipTableWidget.py +0 -0
  84. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/tasks/TriggerTaskTab.py +0 -0
  85. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/tasks/__init__.py +0 -0
  86. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/util/Alert.py +0 -0
  87. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/util/__init__.py +0 -0
  88. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/widget/Card.py +0 -0
  89. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/widget/FramelessDialog.py +0 -0
  90. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/widget/ListTableWidgetItem.py +0 -0
  91. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/widget/NumericTableWidgetItem.py +0 -0
  92. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/widget/StatusBar.py +0 -0
  93. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/widget/Tab.py +0 -0
  94. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/widget/TabWidget.py +0 -0
  95. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/widget/UpdateConfigWidgetItem.py +0 -0
  96. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/widget/YesNonWidgetItem.py +0 -0
  97. {ok-script-0.0.14 → ok-script-0.0.16}/ok/gui/widget/__init__.py +0 -0
  98. {ok-script-0.0.14 → ok-script-0.0.16}/ok/interaction/ADBInteraction.py +0 -0
  99. {ok-script-0.0.14 → ok-script-0.0.16}/ok/interaction/BaseInteraction.py +0 -0
  100. {ok-script-0.0.14 → ok-script-0.0.16}/ok/interaction/Win32Interaction.py +0 -0
  101. {ok-script-0.0.14 → ok-script-0.0.16}/ok/interaction/__init__.py +0 -0
  102. {ok-script-0.0.14 → ok-script-0.0.16}/ok/logging/Logger.py +0 -0
  103. {ok-script-0.0.14 → ok-script-0.0.16}/ok/logging/__init__.py +0 -0
  104. {ok-script-0.0.14 → ok-script-0.0.16}/ok/ocr/OCR.py +0 -0
  105. {ok-script-0.0.14 → ok-script-0.0.16}/ok/ocr/__init__.py +0 -0
  106. {ok-script-0.0.14 → ok-script-0.0.16}/ok/predict/__init__.py +0 -0
  107. {ok-script-0.0.14 → ok-script-0.0.16}/ok/predict/predict.py +0 -0
  108. {ok-script-0.0.14 → ok-script-0.0.16}/ok/rotypes/Windows/Foundation/Collections.py +0 -0
  109. {ok-script-0.0.14 → ok-script-0.0.16}/ok/rotypes/Windows/Foundation/__init__.py +0 -0
  110. {ok-script-0.0.14 → ok-script-0.0.16}/ok/rotypes/Windows/Globalization/__init__.py +0 -0
  111. {ok-script-0.0.14 → ok-script-0.0.16}/ok/rotypes/Windows/Graphics/Capture/__init__.py +0 -0
  112. {ok-script-0.0.14 → ok-script-0.0.16}/ok/rotypes/Windows/Graphics/DirectX/Direct3D11/__init__.py +0 -0
  113. {ok-script-0.0.14 → ok-script-0.0.16}/ok/rotypes/Windows/Graphics/DirectX/__init__.py +0 -0
  114. {ok-script-0.0.14 → ok-script-0.0.16}/ok/rotypes/Windows/Graphics/Imaging/__init__.py +0 -0
  115. {ok-script-0.0.14 → ok-script-0.0.16}/ok/rotypes/Windows/Graphics/__init__.py +0 -0
  116. {ok-script-0.0.14 → ok-script-0.0.16}/ok/rotypes/Windows/Media/Ocr/__init__.py +0 -0
  117. {ok-script-0.0.14 → ok-script-0.0.16}/ok/rotypes/Windows/Media/__init__.py +0 -0
  118. {ok-script-0.0.14 → ok-script-0.0.16}/ok/rotypes/Windows/Security/Cryptography/__init__.py +0 -0
  119. {ok-script-0.0.14 → ok-script-0.0.16}/ok/rotypes/Windows/Security/__init__.py +0 -0
  120. {ok-script-0.0.14 → ok-script-0.0.16}/ok/rotypes/Windows/Storage/Streams/__init__.py +0 -0
  121. {ok-script-0.0.14 → ok-script-0.0.16}/ok/rotypes/Windows/Storage/__init__.py +0 -0
  122. {ok-script-0.0.14 → ok-script-0.0.16}/ok/rotypes/Windows/__init__.py +0 -0
  123. {ok-script-0.0.14 → ok-script-0.0.16}/ok/rotypes/__init__.py +0 -0
  124. {ok-script-0.0.14 → ok-script-0.0.16}/ok/rotypes/delegate.py +0 -0
  125. {ok-script-0.0.14 → ok-script-0.0.16}/ok/rotypes/export.py +0 -0
  126. {ok-script-0.0.14 → ok-script-0.0.16}/ok/rotypes/idldsl.py +0 -0
  127. {ok-script-0.0.14 → ok-script-0.0.16}/ok/rotypes/inspectable.py +0 -0
  128. {ok-script-0.0.14 → ok-script-0.0.16}/ok/rotypes/roapi.py +0 -0
  129. {ok-script-0.0.14 → ok-script-0.0.16}/ok/rotypes/types.py +0 -0
  130. {ok-script-0.0.14 → ok-script-0.0.16}/ok/rotypes/winstring.py +0 -0
  131. {ok-script-0.0.14 → ok-script-0.0.16}/ok/save/BlackBarProcessor.py +0 -0
  132. {ok-script-0.0.14 → ok-script-0.0.16}/ok/save/PostProcessor.py +0 -0
  133. {ok-script-0.0.14 → ok-script-0.0.16}/ok/save/SaveByInterval.py +0 -0
  134. {ok-script-0.0.14 → ok-script-0.0.16}/ok/save/SaveByKeyPress.py +0 -0
  135. {ok-script-0.0.14 → ok-script-0.0.16}/ok/save/SaveMethodBase.py +0 -0
  136. {ok-script-0.0.14 → ok-script-0.0.16}/ok/save/__init__.py +0 -0
  137. {ok-script-0.0.14 → ok-script-0.0.16}/ok/scene/FeatureScene.py +0 -0
  138. {ok-script-0.0.14 → ok-script-0.0.16}/ok/scene/Scene.py +0 -0
  139. {ok-script-0.0.14 → ok-script-0.0.16}/ok/scene/__init__.py +0 -0
  140. {ok-script-0.0.14 → ok-script-0.0.16}/ok/stats/StreamStats.py +0 -0
  141. {ok-script-0.0.14 → ok-script-0.0.16}/ok/stats/__init__.py +0 -0
  142. {ok-script-0.0.14 → ok-script-0.0.16}/ok/task/ExecutorOperation.py +0 -0
  143. {ok-script-0.0.14 → ok-script-0.0.16}/ok/task/OneTimeTask.py +0 -0
  144. {ok-script-0.0.14 → ok-script-0.0.16}/ok/task/TriggerTask.py +0 -0
  145. {ok-script-0.0.14 → ok-script-0.0.16}/ok/task/__init__.py +0 -0
  146. {ok-script-0.0.14 → ok-script-0.0.16}/ok/util/__init__.py +0 -0
  147. {ok-script-0.0.14 → ok-script-0.0.16}/ok/util/json.py +0 -0
  148. {ok-script-0.0.14 → ok-script-0.0.16}/ok/util/list.py +0 -0
  149. {ok-script-0.0.14 → ok-script-0.0.16}/ok/util/path.py +0 -0
  150. {ok-script-0.0.14 → ok-script-0.0.16}/ok/util/thread.py +0 -0
  151. {ok-script-0.0.14 → ok-script-0.0.16}/ok/util/win32_process.py +0 -0
  152. {ok-script-0.0.14 → ok-script-0.0.16}/ok/util/yaml.py +0 -0
  153. {ok-script-0.0.14 → ok-script-0.0.16}/ok_script.egg-info/SOURCES.txt +0 -0
  154. {ok-script-0.0.14 → ok-script-0.0.16}/ok_script.egg-info/dependency_links.txt +0 -0
  155. {ok-script-0.0.14 → ok-script-0.0.16}/ok_script.egg-info/requires.txt +0 -0
  156. {ok-script-0.0.14 → ok-script-0.0.16}/ok_script.egg-info/top_level.txt +0 -0
  157. {ok-script-0.0.14 → ok-script-0.0.16}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ok-script
3
- Version: 0.0.14
3
+ Version: 0.0.16
4
4
  Summary: Automation with Computer Vision for Python
5
5
  Home-page: https://github.com/ok-oldking/ok-script
6
6
  Author: ok-oldking
@@ -28,75 +28,73 @@ class OK:
28
28
  ok.gui.ok = self
29
29
  self.debug = config.get("debug", False)
30
30
  self.exit_event = threading.Event()
31
- self.config = config
32
- self.init_device_manager()
33
- from ok.gui.debug.Screenshot import Screenshot
34
- self.screenshot = Screenshot()
35
- if config.get("use_gui"):
36
- from ok.gui.App import App
37
- self.app = App(config, self.exit_event)
38
- ok.gui.app = self.app
39
- else:
40
- self.device_manager.set_preferred_device()
41
- self.device_manager.start()
42
- self.do_init()
31
+ try:
32
+ self.config = config
33
+ self.init_device_manager()
34
+ from ok.gui.debug.Screenshot import Screenshot
35
+ self.screenshot = Screenshot()
36
+ if config.get("use_gui"):
37
+ from ok.gui.App import App
38
+ self.app = App(config, self.exit_event)
39
+ ok.gui.app = self.app
40
+ else:
41
+ self.device_manager.set_preferred_device()
42
+ self.device_manager.start()
43
+ self.do_init()
44
+ except Exception as e:
45
+ self.exit_event.set()
46
+ raise e
43
47
 
44
48
  def start(self):
45
- if self.config.get("use_gui"):
46
- self.do_init()
47
- self.app.show_main_window()
48
- self.app.exec()
49
- else:
50
- self.task_executor.start()
51
- if self.config.get("debug"):
52
- self.app = QApplication(sys.argv)
53
- from ok.gui.overlay.OverlayWindow import OverlayWindow
54
- self.overlay_window = OverlayWindow(ok.gui.device_manager.hwnd)
49
+ try:
50
+ if self.config.get("use_gui"):
51
+ self.do_init()
52
+ self.app.show_main_window()
55
53
  self.app.exec()
56
54
  else:
57
- try:
58
- # Starting the task in a separate thread (optional)
59
- # This allows the main thread to remain responsive to keyboard interrupts
60
- task_thread = threading.Thread(target=self.wait_task)
61
- task_thread.start()
62
-
63
- # Wait for the task thread to end (which it won't, in this case, without an interrupt)
64
- task_thread.join()
65
- except KeyboardInterrupt:
66
- self.exit_event.set()
67
- logger.info("Keyboard interrupt received, exiting script.")
68
- finally:
69
- # Clean-up code goes here (if any)
70
- # This block ensures that the script terminates gracefully,
71
- # releasing resources or performing necessary clean-up operations.
72
- logger.info("Script has terminated.")
73
-
74
- def init_message(self, message: str, done=False):
75
- ok.gui.Communicate.communicate.init.emit(done, message)
76
- if self.exit_event.is_set():
77
- self.worker.quit()
55
+ self.task_executor.start()
56
+ if self.config.get("debug"):
57
+ self.app = QApplication(sys.argv)
58
+ from ok.gui.overlay.OverlayWindow import OverlayWindow
59
+ self.overlay_window = OverlayWindow(ok.gui.device_manager.hwnd)
60
+ self.app.exec()
61
+ else:
62
+ try:
63
+ # Starting the task in a separate thread (optional)
64
+ # This allows the main thread to remain responsive to keyboard interrupts
65
+ task_thread = threading.Thread(target=self.wait_task)
66
+ task_thread.start()
67
+
68
+ # Wait for the task thread to end (which it won't, in this case, without an interrupt)
69
+ task_thread.join()
70
+ except KeyboardInterrupt:
71
+ self.exit_event.set()
72
+ logger.info("Keyboard interrupt received, exiting script.")
73
+ finally:
74
+ # Clean-up code goes here (if any)
75
+ # This block ensures that the script terminates gracefully,
76
+ # releasing resources or performing necessary clean-up operations.
77
+ logger.info("Script has terminated.")
78
+ except Exception as e:
79
+ logger.error("start error", e)
80
+ self.exit_event.set()
78
81
 
79
82
  def do_init(self):
80
83
  logger.info(f"initializing {self.__class__.__name__}, config: {self.config}")
81
84
  if self.config.get('ocr'):
82
- self.init_message("RapidOCR init Start")
83
85
  from rapidocr_onnxruntime import RapidOCR
84
86
  self.ocr = RapidOCR()
85
- self.init_message("RapidOCR init Complete")
86
87
 
87
88
  config_logger(self.config)
88
89
 
89
90
  if self.config.get('coco_feature_folder') is not None:
90
- self.init_message("FeatureSet init Start")
91
91
  coco_feature_folder = self.config.get('coco_feature_folder')
92
92
  from ok.feature.FeatureSet import FeatureSet
93
93
  self.feature_set = FeatureSet(coco_feature_folder,
94
94
  default_horizontal_variance=self.config.get('default_horizontal_variance', 0),
95
95
  default_vertical_variance=self.config.get('default_vertical_variance', 0),
96
96
  default_threshold=self.config.get('default_threshold', 0))
97
- self.init_message("FeatureSet init Complete")
98
97
 
99
- self.init_message("TaskExecutor init Start")
100
98
  from ok.task.TaskExecutor import TaskExecutor
101
99
  self.task_executor = TaskExecutor(self.device_manager, exit_event=self.exit_event,
102
100
  onetime_tasks=self.config.get('onetime_tasks', []),
@@ -104,7 +102,6 @@ class OK:
104
102
  scenes=self.config['scenes'],
105
103
  feature_set=self.feature_set,
106
104
  ocr=self.ocr, config_folder=self.config.get("config_folder") or "config")
107
- self.init_message("TaskExecutor init Done")
108
105
 
109
106
  if self.app:
110
107
  ok.gui.executor = self.task_executor
@@ -126,9 +126,9 @@ class DeviceManager:
126
126
  if imei not in adb_connected and self.device_dict[imei]['device'] == 'adb':
127
127
  self.device_dict[imei]['connected'] = False
128
128
 
129
- communicate.adb_devices.emit(True)
130
129
  self.config.save_file()
131
130
  self.start()
131
+ communicate.adb_devices.emit(True)
132
132
  logger.debug(f'refresh {self.device_dict}')
133
133
 
134
134
  def set_preferred_device(self, imei=None):
@@ -144,6 +144,7 @@ class DeviceManager:
144
144
  self.config.save_file()
145
145
  logger.debug(f'preferred device: {preferred}')
146
146
  self.start()
147
+ return preferred
147
148
 
148
149
  def get_preferred_device(self):
149
150
  imei = self.config.get("preferred")
@@ -178,7 +179,10 @@ class DeviceManager:
178
179
  def start(self):
179
180
  preferred = self.get_preferred_device()
180
181
  if preferred is None:
182
+ if self.device_dict:
183
+ self.set_preferred_device()
181
184
  return
185
+
182
186
  if preferred['device'] == 'windows':
183
187
  self.ensure_hwnd(self.hwnd_title, self.exe_name)
184
188
  if not isinstance(self.capture_method, WindowsGraphicsCaptureMethod):
@@ -12,7 +12,6 @@ class Communicate(QObject):
12
12
  task_info = Signal()
13
13
  window = Signal(bool, int, int, int, int, int, int, float)
14
14
  loading_progress = Signal(str)
15
- init = Signal(bool, str)
16
15
  notification = Signal(str, str)
17
16
  executor_paused: Signal = Signal(bool)
18
17
  screenshot = Signal(np.ndarray, str)
@@ -136,7 +136,8 @@ class Screenshot(QObject):
136
136
  pil_image.save(file)
137
137
 
138
138
  def stop(self):
139
- self.task_queue.put(None)
139
+ if self.task_queue is not None:
140
+ self.task_queue.put(None)
140
141
 
141
142
  def to_pil_image(self, frame):
142
143
  if frame is None: