ok-script 0.0.183__tar.gz → 0.0.185__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 (204) hide show
  1. {ok-script-0.0.183/ok_script.egg-info → ok-script-0.0.185}/PKG-INFO +1 -1
  2. {ok-script-0.0.183 → ok-script-0.0.185}/ok/capture/BaseCaptureMethod.py +1 -1
  3. {ok-script-0.0.183 → ok-script-0.0.185}/ok/capture/adb/DeviceManager.py +18 -9
  4. ok-script-0.0.185/ok/capture/adb/NemuIpcCaptureMethod.py +121 -0
  5. ok-script-0.0.185/ok/capture/adb/nemu_ipc.py +595 -0
  6. ok-script-0.0.185/ok/capture/adb/nemu_utils.py +295 -0
  7. ok-script-0.0.185/ok/gui/StartController.py +152 -0
  8. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/debug/DebugTab.py +15 -12
  9. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/start/SelectCaptureListView.py +13 -4
  10. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/start/StartTab.py +9 -7
  11. {ok-script-0.0.183 → ok-script-0.0.185}/ok/interaction/PyDirectInteraction.py +1 -1
  12. {ok-script-0.0.183 → ok-script-0.0.185}/ok/task/TaskExecutor.py +3 -3
  13. {ok-script-0.0.183 → ok-script-0.0.185/ok_script.egg-info}/PKG-INFO +1 -1
  14. {ok-script-0.0.183 → ok-script-0.0.185}/ok_script.egg-info/SOURCES.txt +3 -1
  15. {ok-script-0.0.183 → ok-script-0.0.185}/setup.py +1 -1
  16. ok-script-0.0.183/ok/gui/StartController.py +0 -142
  17. ok-script-0.0.183/ok/util/__init__.py +0 -0
  18. {ok-script-0.0.183 → ok-script-0.0.185}/LICENSE.txt +0 -0
  19. {ok-script-0.0.183 → ok-script-0.0.185}/MANIFEST.in +0 -0
  20. {ok-script-0.0.183 → ok-script-0.0.185}/README.md +0 -0
  21. {ok-script-0.0.183 → ok-script-0.0.185}/ok/OK.py +0 -0
  22. {ok-script-0.0.183 → ok-script-0.0.185}/ok/__init__.py +0 -0
  23. {ok-script-0.0.183 → ok-script-0.0.185}/ok/alas/__init__.py +0 -0
  24. {ok-script-0.0.183 → ok-script-0.0.185}/ok/alas/emulator_base.py +0 -0
  25. {ok-script-0.0.183 → ok-script-0.0.185}/ok/alas/emulator_windows.py +0 -0
  26. {ok-script-0.0.183 → ok-script-0.0.185}/ok/alas/platform_base.py +0 -0
  27. {ok-script-0.0.183 → ok-script-0.0.185}/ok/alas/platform_windows.py +0 -0
  28. {ok-script-0.0.183 → ok-script-0.0.185}/ok/alas/utils.py +0 -0
  29. {ok-script-0.0.183 → ok-script-0.0.185}/ok/analytics/Analytics.py +0 -0
  30. {ok-script-0.0.183 → ok-script-0.0.185}/ok/analytics/__init__.py +0 -0
  31. {ok-script-0.0.183 → ok-script-0.0.185}/ok/binaries/__init__.py +0 -0
  32. {ok-script-0.0.183 → ok-script-0.0.185}/ok/binaries/__pycache__/__init__.cpython-311.pyc +0 -0
  33. {ok-script-0.0.183 → ok-script-0.0.185}/ok/binaries/updater.exe +0 -0
  34. {ok-script-0.0.183 → ok-script-0.0.185}/ok/capture/HwndWindow.py +0 -0
  35. {ok-script-0.0.183 → ok-script-0.0.185}/ok/capture/__init__.py +0 -0
  36. {ok-script-0.0.183 → ok-script-0.0.185}/ok/capture/adb/ADBCaptureMethod.py +0 -0
  37. {ok-script-0.0.183 → ok-script-0.0.185}/ok/capture/adb/WindowsCaptureFactory.py +0 -0
  38. {ok-script-0.0.183 → ok-script-0.0.185}/ok/capture/adb/__init__.py +0 -0
  39. {ok-script-0.0.183 → ok-script-0.0.185}/ok/capture/image/ImageCaptureMethod.py +0 -0
  40. {ok-script-0.0.183/ok/capture/adb/bin → ok-script-0.0.185/ok/capture/image}/__init__.py +0 -0
  41. {ok-script-0.0.183 → ok-script-0.0.185}/ok/capture/windows/BaseWindowsCaptureMethod.py +0 -0
  42. {ok-script-0.0.183 → ok-script-0.0.185}/ok/capture/windows/BitBltCaptureMethod.py +0 -0
  43. {ok-script-0.0.183 → ok-script-0.0.185}/ok/capture/windows/DesktopDuplicationCaptureMethod.py +0 -0
  44. {ok-script-0.0.183 → ok-script-0.0.185}/ok/capture/windows/WindowsGraphicsCaptureMethod.py +0 -0
  45. {ok-script-0.0.183/ok/capture/image → ok-script-0.0.185/ok/capture/windows}/__init__.py +0 -0
  46. {ok-script-0.0.183 → ok-script-0.0.185}/ok/capture/windows/d3d11.py +0 -0
  47. {ok-script-0.0.183 → ok-script-0.0.185}/ok/capture/windows/dump.py +0 -0
  48. {ok-script-0.0.183 → ok-script-0.0.185}/ok/capture/windows/utils.py +0 -0
  49. {ok-script-0.0.183 → ok-script-0.0.185}/ok/capture/windows/window.py +0 -0
  50. {ok-script-0.0.183 → ok-script-0.0.185}/ok/color/Color.py +0 -0
  51. {ok-script-0.0.183/ok/capture/windows → ok-script-0.0.185/ok/color}/__init__.py +0 -0
  52. {ok-script-0.0.183 → ok-script-0.0.185}/ok/config/Config.py +0 -0
  53. {ok-script-0.0.183 → ok-script-0.0.185}/ok/config/ConfigOption.py +0 -0
  54. {ok-script-0.0.183 → ok-script-0.0.185}/ok/config/GlobalConfig.py +0 -0
  55. {ok-script-0.0.183 → ok-script-0.0.185}/ok/config/InfoDict.py +0 -0
  56. {ok-script-0.0.183/ok/color → ok-script-0.0.185/ok/config}/__init__.py +0 -0
  57. {ok-script-0.0.183/ok/config → ok-script-0.0.185/ok/display}/__init__.py +0 -0
  58. {ok-script-0.0.183 → ok-script-0.0.185}/ok/display/custom_types.py +0 -0
  59. {ok-script-0.0.183 → ok-script-0.0.185}/ok/display/display.py +0 -0
  60. {ok-script-0.0.183 → ok-script-0.0.185}/ok/display/display_adapters.py +0 -0
  61. {ok-script-0.0.183 → ok-script-0.0.185}/ok/display/display_monitors.py +0 -0
  62. {ok-script-0.0.183 → ok-script-0.0.185}/ok/display/windows_types.py +0 -0
  63. {ok-script-0.0.183 → ok-script-0.0.185}/ok/feature/Box.py +0 -0
  64. {ok-script-0.0.183 → ok-script-0.0.185}/ok/feature/CompressCoco.py +0 -0
  65. {ok-script-0.0.183 → ok-script-0.0.185}/ok/feature/Feature.py +0 -0
  66. {ok-script-0.0.183 → ok-script-0.0.185}/ok/feature/FeatureSet.py +0 -0
  67. {ok-script-0.0.183 → ok-script-0.0.185}/ok/feature/FindFeature.py +0 -0
  68. {ok-script-0.0.183/ok/display → ok-script-0.0.185/ok/feature}/__init__.py +0 -0
  69. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/App.py +0 -0
  70. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/Communicate.py +0 -0
  71. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/MainWindow.py +0 -0
  72. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/MessageWindow.py +0 -0
  73. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/TabTitles.py +0 -0
  74. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/__init__.py +0 -0
  75. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/about/AboutTab.py +0 -0
  76. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/about/HttpTextEdit.py +0 -0
  77. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/about/VersionCard.py +0 -0
  78. {ok-script-0.0.183/ok/feature → ok-script-0.0.185/ok/gui/about}/__init__.py +0 -0
  79. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/common/OKIcon.py +0 -0
  80. {ok-script-0.0.183/ok/gui/about → ok-script-0.0.185/ok/gui/common}/__init__.py +0 -0
  81. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/common/config.py +0 -0
  82. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/common/style_sheet.py +0 -0
  83. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/debug/FrameWidget.py +0 -0
  84. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/debug/LogWindow.py +0 -0
  85. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/debug/Screenshot.py +0 -0
  86. {ok-script-0.0.183/ok/gui/common → ok-script-0.0.185/ok/gui/debug}/__init__.py +0 -0
  87. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/i18n/GettextTranslator.py +0 -0
  88. {ok-script-0.0.183/ok/gui/debug → ok-script-0.0.185/ok/gui/i18n}/__init__.py +0 -0
  89. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/i18n/path.py +0 -0
  90. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/i18n/update.py +0 -0
  91. {ok-script-0.0.183/ok/gui/i18n → ok-script-0.0.185/ok/gui/icon}/__init__.py +0 -0
  92. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/icon/icon.py +0 -0
  93. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/overlay/OverlayWindow.py +0 -0
  94. {ok-script-0.0.183/ok/gui/icon → ok-script-0.0.185/ok/gui/overlay}/__init__.py +0 -0
  95. {ok-script-0.0.183/ok/gui/overlay → ok-script-0.0.185/ok/gui/qss}/__init__.py +0 -0
  96. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/resources.py +0 -0
  97. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/settings/GlobalConfigCard.py +0 -0
  98. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/settings/SettingTab.py +0 -0
  99. {ok-script-0.0.183/ok/gui/qss → ok-script-0.0.185/ok/gui/settings}/__init__.py +0 -0
  100. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/start/StartCard.py +0 -0
  101. {ok-script-0.0.183/ok/gui/settings → ok-script-0.0.185/ok/gui/start}/__init__.py +0 -0
  102. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/tasks/ConfigCard.py +0 -0
  103. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/tasks/ConfigItemFactory.py +0 -0
  104. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/tasks/ConfigLabelAndWidget.py +0 -0
  105. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/tasks/LabelAndDoubleSpinBox.py +0 -0
  106. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/tasks/LabelAndDropDown.py +0 -0
  107. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/tasks/LabelAndLineEdit.py +0 -0
  108. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/tasks/LabelAndList.py +0 -0
  109. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/tasks/LabelAndMultiSelection.py +0 -0
  110. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/tasks/LabelAndSpinBox.py +0 -0
  111. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/tasks/LabelAndSwitchButton.py +0 -0
  112. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/tasks/LabelAndWidget.py +0 -0
  113. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/tasks/ModifyListDialog.py +0 -0
  114. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/tasks/ModifyListItem.py +0 -0
  115. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/tasks/OneTimeTaskTab.py +0 -0
  116. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/tasks/StartButton.py +0 -0
  117. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/tasks/TaskCard.py +0 -0
  118. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/tasks/TaskOpButton.py +0 -0
  119. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/tasks/TaskTab.py +0 -0
  120. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/tasks/TooltipTableWidget.py +0 -0
  121. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/tasks/TriggerTaskTab.py +0 -0
  122. {ok-script-0.0.183/ok/gui/start → ok-script-0.0.185/ok/gui/tasks}/__init__.py +0 -0
  123. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/util/Alert.py +0 -0
  124. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/util/InitWorker.py +0 -0
  125. {ok-script-0.0.183/ok/gui/tasks → ok-script-0.0.185/ok/gui/util}/__init__.py +0 -0
  126. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/widget/Card.py +0 -0
  127. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/widget/EmptyCard.py +0 -0
  128. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/widget/FlowLayout.py +0 -0
  129. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/widget/FramelessDialog.py +0 -0
  130. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/widget/ListTableWidgetItem.py +0 -0
  131. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/widget/NumericTableWidgetItem.py +0 -0
  132. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/widget/StartLoadingDialog.py +0 -0
  133. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/widget/StatusBar.py +0 -0
  134. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/widget/Tab.py +0 -0
  135. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/widget/TabWidget.py +0 -0
  136. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/widget/UpdateConfigWidgetItem.py +0 -0
  137. {ok-script-0.0.183 → ok-script-0.0.185}/ok/gui/widget/YesNonWidgetItem.py +0 -0
  138. {ok-script-0.0.183/ok/gui/util → ok-script-0.0.185/ok/gui/widget}/__init__.py +0 -0
  139. {ok-script-0.0.183 → ok-script-0.0.185}/ok/interaction/ADBInteraction.py +0 -0
  140. {ok-script-0.0.183 → ok-script-0.0.185}/ok/interaction/BaseInteraction.py +0 -0
  141. {ok-script-0.0.183 → ok-script-0.0.185}/ok/interaction/DoNothingInteraction.py +0 -0
  142. {ok-script-0.0.183 → ok-script-0.0.185}/ok/interaction/PostMessageInteraction.py +0 -0
  143. {ok-script-0.0.183/ok/gui/widget → ok-script-0.0.185/ok/interaction}/__init__.py +0 -0
  144. {ok-script-0.0.183 → ok-script-0.0.185}/ok/logging/Logger.py +0 -0
  145. {ok-script-0.0.183/ok/interaction → ok-script-0.0.185/ok/logging}/__init__.py +0 -0
  146. {ok-script-0.0.183 → ok-script-0.0.185}/ok/ocr/OCR.py +0 -0
  147. {ok-script-0.0.183/ok/logging → ok-script-0.0.185/ok/ocr}/__init__.py +0 -0
  148. {ok-script-0.0.183 → ok-script-0.0.185}/ok/rotypes/Windows/Foundation/Collections.py +0 -0
  149. {ok-script-0.0.183 → ok-script-0.0.185}/ok/rotypes/Windows/Foundation/__init__.py +0 -0
  150. {ok-script-0.0.183 → ok-script-0.0.185}/ok/rotypes/Windows/Globalization/__init__.py +0 -0
  151. {ok-script-0.0.183 → ok-script-0.0.185}/ok/rotypes/Windows/Graphics/Capture/__init__.py +0 -0
  152. {ok-script-0.0.183 → ok-script-0.0.185}/ok/rotypes/Windows/Graphics/DirectX/Direct3D11/__init__.py +0 -0
  153. {ok-script-0.0.183 → ok-script-0.0.185}/ok/rotypes/Windows/Graphics/DirectX/__init__.py +0 -0
  154. {ok-script-0.0.183 → ok-script-0.0.185}/ok/rotypes/Windows/Graphics/Imaging/__init__.py +0 -0
  155. {ok-script-0.0.183 → ok-script-0.0.185}/ok/rotypes/Windows/Graphics/__init__.py +0 -0
  156. {ok-script-0.0.183 → ok-script-0.0.185}/ok/rotypes/Windows/Media/Ocr/__init__.py +0 -0
  157. {ok-script-0.0.183/ok/ocr → ok-script-0.0.185/ok/rotypes/Windows/Media}/__init__.py +0 -0
  158. {ok-script-0.0.183 → ok-script-0.0.185}/ok/rotypes/Windows/Security/Cryptography/__init__.py +0 -0
  159. {ok-script-0.0.183/ok/rotypes/Windows/Media → ok-script-0.0.185/ok/rotypes/Windows/Security}/__init__.py +0 -0
  160. {ok-script-0.0.183 → ok-script-0.0.185}/ok/rotypes/Windows/Storage/Streams/__init__.py +0 -0
  161. {ok-script-0.0.183/ok/rotypes/Windows/Security → ok-script-0.0.185/ok/rotypes/Windows/Storage}/__init__.py +0 -0
  162. {ok-script-0.0.183/ok/rotypes/Windows/Storage → ok-script-0.0.185/ok/rotypes/Windows}/__init__.py +0 -0
  163. {ok-script-0.0.183 → ok-script-0.0.185}/ok/rotypes/__init__.py +0 -0
  164. {ok-script-0.0.183 → ok-script-0.0.185}/ok/rotypes/delegate.py +0 -0
  165. {ok-script-0.0.183 → ok-script-0.0.185}/ok/rotypes/export.py +0 -0
  166. {ok-script-0.0.183 → ok-script-0.0.185}/ok/rotypes/idldsl.py +0 -0
  167. {ok-script-0.0.183 → ok-script-0.0.185}/ok/rotypes/inspectable.py +0 -0
  168. {ok-script-0.0.183 → ok-script-0.0.185}/ok/rotypes/roapi.py +0 -0
  169. {ok-script-0.0.183 → ok-script-0.0.185}/ok/rotypes/types.py +0 -0
  170. {ok-script-0.0.183 → ok-script-0.0.185}/ok/rotypes/winstring.py +0 -0
  171. {ok-script-0.0.183 → ok-script-0.0.185}/ok/save/BlackBarProcessor.py +0 -0
  172. {ok-script-0.0.183 → ok-script-0.0.185}/ok/save/PostProcessor.py +0 -0
  173. {ok-script-0.0.183 → ok-script-0.0.185}/ok/save/SaveByInterval.py +0 -0
  174. {ok-script-0.0.183 → ok-script-0.0.185}/ok/save/SaveByKeyPress.py +0 -0
  175. {ok-script-0.0.183 → ok-script-0.0.185}/ok/save/SaveMethodBase.py +0 -0
  176. {ok-script-0.0.183/ok/rotypes/Windows → ok-script-0.0.185/ok/save}/__init__.py +0 -0
  177. {ok-script-0.0.183 → ok-script-0.0.185}/ok/scene/FeatureScene.py +0 -0
  178. {ok-script-0.0.183 → ok-script-0.0.185}/ok/scene/Scene.py +0 -0
  179. {ok-script-0.0.183/ok/save → ok-script-0.0.185/ok/scene}/__init__.py +0 -0
  180. {ok-script-0.0.183 → ok-script-0.0.185}/ok/stats/StreamStats.py +0 -0
  181. {ok-script-0.0.183/ok/scene → ok-script-0.0.185/ok/stats}/__init__.py +0 -0
  182. {ok-script-0.0.183 → ok-script-0.0.185}/ok/task/BaseTask.py +0 -0
  183. {ok-script-0.0.183 → ok-script-0.0.185}/ok/task/ExecutorOperation.py +0 -0
  184. {ok-script-0.0.183 → ok-script-0.0.185}/ok/task/TriggerTask.py +0 -0
  185. {ok-script-0.0.183/ok/stats → ok-script-0.0.185/ok/task}/__init__.py +0 -0
  186. {ok-script-0.0.183 → ok-script-0.0.185}/ok/update/GithubMultiDownloader.py +0 -0
  187. {ok-script-0.0.183 → ok-script-0.0.185}/ok/update/Updater.py +0 -0
  188. {ok-script-0.0.183/ok/task → ok-script-0.0.185/ok/update}/__init__.py +0 -0
  189. {ok-script-0.0.183 → ok-script-0.0.185}/ok/update/gen_md5.py +0 -0
  190. {ok-script-0.0.183 → ok-script-0.0.185}/ok/util/Handler.py +0 -0
  191. {ok-script-0.0.183/ok/update → ok-script-0.0.185/ok/util}/__init__.py +0 -0
  192. {ok-script-0.0.183 → ok-script-0.0.185}/ok/util/exit_event.py +0 -0
  193. {ok-script-0.0.183 → ok-script-0.0.185}/ok/util/json.py +0 -0
  194. {ok-script-0.0.183 → ok-script-0.0.185}/ok/util/list.py +0 -0
  195. {ok-script-0.0.183 → ok-script-0.0.185}/ok/util/path.py +0 -0
  196. {ok-script-0.0.183 → ok-script-0.0.185}/ok/util/thread.py +0 -0
  197. {ok-script-0.0.183 → ok-script-0.0.185}/ok/util/win32_process.py +0 -0
  198. {ok-script-0.0.183 → ok-script-0.0.185}/ok/util/yaml.py +0 -0
  199. {ok-script-0.0.183 → ok-script-0.0.185}/ok_script.egg-info/dependency_links.txt +0 -0
  200. {ok-script-0.0.183 → ok-script-0.0.185}/ok_script.egg-info/requires.txt +0 -0
  201. {ok-script-0.0.183 → ok-script-0.0.185}/ok_script.egg-info/top_level.txt +0 -0
  202. {ok-script-0.0.183 → ok-script-0.0.185}/setup.cfg +0 -0
  203. {ok-script-0.0.183 → ok-script-0.0.185}/tests/__init__.py +0 -0
  204. {ok-script-0.0.183 → ok-script-0.0.185}/tests/test_updater.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ok-script
3
- Version: 0.0.183
3
+ Version: 0.0.185
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
@@ -39,7 +39,7 @@ class BaseCaptureMethod:
39
39
  frame = frame[:, :, :3]
40
40
  return frame
41
41
  except Exception as e:
42
- raise CaptureException() from e
42
+ raise CaptureException(str(e)) from e
43
43
 
44
44
  def __str__(self):
45
45
  return f'{self.__class__.__name__}_{self.width}x{self.height}'
@@ -93,21 +93,23 @@ class DeviceManager:
93
93
  def adb_connect(self, addr, try_connect=True):
94
94
  from adbutils import AdbError
95
95
  try:
96
- for device in self.adb.device_list():
96
+ for device in self.adb.list():
97
97
  if self.exit_event.is_set():
98
98
  logger.error(f"adb_connect exit_event is set")
99
99
  return None
100
100
  if device.serial == addr:
101
- if device.info['state'] == 'offline':
101
+ if device.state == 'offline':
102
102
  logger.debug(f'adb_connect offline disconnect first {addr}')
103
103
  self.adb.disconnect(addr)
104
104
  else:
105
105
  logger.debug(f'adb_connect already connected {addr}')
106
- return device
106
+ return self.adb.device(addr)
107
107
  if try_connect:
108
- self.adb.connect(addr, timeout=5)
109
- logger.debug(f'adb_connect {addr}')
108
+ ret = self.adb.connect(addr, timeout=5)
109
+ logger.debug(f'adb_connect try_connect {addr} {ret}')
110
110
  return self.adb_connect(addr, try_connect=False)
111
+ else:
112
+ logger.debug(f'adb_connect {addr} not in device list {self.adb.list()}')
111
113
  except AdbError as e:
112
114
  logger.error(f"adb connect error {addr}", e)
113
115
  self.try_kill_adb(e)
@@ -185,19 +187,19 @@ class DeviceManager:
185
187
  logger.debug(f"refresh current only skip others {preferred['imei']} != {emulator.name}")
186
188
  continue
187
189
  adb_device = self.adb_connect(emulator.serial)
190
+ logger.info(f'adb_connect emulator result {emulator.type} {adb_device}')
188
191
  width, height = self.get_resolution(adb_device) if adb_device is not None else 0, 0
189
192
  name, hwnd, full_path, x, y, width, height = find_hwnd(None,
190
193
  emulator.path, width, height, emulator.player_id)
191
194
  connected = adb_device is not None and name is not None
192
- emulator_device = {"address": emulator.serial, "device": "adb",
193
- "full_path": emulator.path, "connected": connected,
194
- "imei": emulator.name, "player_id": emulator.player_id,
195
+ emulator_device = {"address": emulator.serial, "device": "adb", "full_path": emulator.path,
196
+ "connected": connected, "imei": emulator.name, "player_id": emulator.player_id,
195
197
  "nick": name or emulator.name, "emulator": emulator}
196
198
  if adb_device is not None:
197
199
  emulator_device["resolution"] = f"{width}x{height}"
198
200
  emulator_device["adb_imei"] = self.adb_get_imei(adb_device)
199
201
  self.device_dict[emulator.name] = emulator_device
200
- logger.debug(f'refresh emulators {self.device_dict}')
202
+ logger.info(f'refresh emulators {self.device_dict}')
201
203
 
202
204
  def get_resolution(self, device=None):
203
205
  if device is None:
@@ -334,6 +336,13 @@ class DeviceManager:
334
336
  self.ensure_hwnd(None, preferred.get('full_path'), width, height, preferred['player_id'])
335
337
  self.use_windows_capture({'can_bit_blt': True}, require_bg=True, use_bit_blt_only=False,
336
338
  bit_blt_render_full=False)
339
+ elif self.config.get('capture') == 'ipc':
340
+ from ok.capture.adb.NemuIpcCaptureMethod import NemuIpcCaptureMethod
341
+ if not isinstance(self.capture_method, NemuIpcCaptureMethod):
342
+ if self.capture_method is not None:
343
+ self.capture_method.close()
344
+ self.capture_method = NemuIpcCaptureMethod(self, self.exit_event)
345
+ self.capture_method.update_emulator(self.get_preferred_device()['emulator'])
337
346
  else:
338
347
  if not isinstance(self.capture_method, ADBCaptureMethod):
339
348
  logger.debug(f'use adb capture')
@@ -0,0 +1,121 @@
1
+ # original https://github.com/Toufool/AutoSplit/blob/master/src/capture_method/WindowsGraphicsCaptureMethod.py
2
+ import json
3
+ import os
4
+
5
+ import numpy as np
6
+ from typing_extensions import override
7
+
8
+ from ok.alas.emulator_windows import EmulatorInstance
9
+ from ok.capture.BaseCaptureMethod import BaseCaptureMethod
10
+ from ok.capture.adb.nemu_ipc import NemuIpcImpl
11
+ from ok.logging.Logger import get_logger
12
+
13
+ logger = get_logger(__name__)
14
+
15
+
16
+ class NemuIpcCaptureMethod(BaseCaptureMethod):
17
+ name = "Nemu Ipc Capture"
18
+ description = "mumu player 12 only"
19
+
20
+ def __init__(self, device_manager, exit_event, width=0, height=0):
21
+ super().__init__()
22
+ self.device_manager = device_manager
23
+ self.exit_event = exit_event
24
+ self._connected = (width != 0 and height != 0)
25
+ self.nemu_impl: NemuIpcImpl | None = None
26
+ self.emulator: EmulatorInstance | None = None
27
+
28
+ def update_emulator(self, emulator: EmulatorInstance):
29
+ self.emulator = emulator
30
+ logger.info(f'update_path_and_id {emulator}')
31
+ if self.nemu_impl:
32
+ self.nemu_impl.disconnect()
33
+ self.nemu_impl = None
34
+
35
+ def init_nemu(self):
36
+ self.check_mumu_app_keep_alive_400()
37
+ if not self.nemu_impl:
38
+ self.nemu_impl = NemuIpcImpl(
39
+ nemu_folder=self.base_folder(),
40
+ instance_id=self.emulator.player_id,
41
+ display_id=0
42
+ ).__enter__()
43
+
44
+ def base_folder(self):
45
+ return os.path.dirname(os.path.dirname(self.emulator.path))
46
+
47
+ def check_mumu_app_keep_alive_400(self):
48
+ """
49
+ Check app_keep_alive from emulator config if version >= 4.0
50
+
51
+ Args:
52
+ file: E:/ProgramFiles/MuMuPlayer-12.0/vms/MuMuPlayer-12.0-1/config/customer_config.json
53
+
54
+ Returns:
55
+ bool: If success to read file
56
+ """
57
+ file = os.path.abspath(os.path.join(
58
+ self.base_folder(),
59
+ f'vms/MuMuPlayer-12.0-{self.emulator.player_id}/configs/customer_config.json'))
60
+
61
+ # with E:\ProgramFiles\MuMuPlayer-12.0\shell\MuMuPlayer.exe
62
+ # config is E:\ProgramFiles\MuMuPlayer-12.0\vms\MuMuPlayer-12.0-1\config\customer_config.json
63
+ try:
64
+ with open(file, mode='r', encoding='utf-8') as f:
65
+ s = f.read()
66
+ data = json.loads(s)
67
+ except FileNotFoundError:
68
+ logger.warning(f'Failed to check check_mumu_app_keep_alive, file {file} not exists')
69
+ return False
70
+ value = deep_get(data, keys='customer.app_keptlive', default=None)
71
+ logger.info(f'customer.app_keptlive {value}')
72
+ if str(value).lower() == 'true':
73
+ # https://mumu.163.com/help/20230802/35047_1102450.html
74
+ logger.error('Please turn off enable background keep alive in MuMuPlayer settings')
75
+ raise Exception('Please turn off enable background keep alive in MuMuPlayer settings')
76
+ return True
77
+
78
+ @override
79
+ def close(self):
80
+ super().close()
81
+ if self.nemu_impl:
82
+ self.nemu_impl.disconnect()
83
+ self.nemu_impl = None
84
+
85
+ @override
86
+ def do_get_frame(self) -> np.ndarray | None:
87
+ self.init_nemu()
88
+ return self.screencap()
89
+
90
+ def screencap(self):
91
+ if self.exit_event.is_set():
92
+ return None
93
+ if self.nemu_impl:
94
+ frame = self.nemu_impl.screenshot(timeout=0.5)
95
+ return frame
96
+
97
+ def connected(self):
98
+ return True
99
+
100
+
101
+ def deep_get(d, keys, default=None):
102
+ """
103
+ Get values in dictionary safely.
104
+ https://stackoverflow.com/questions/25833613/safe-method-to-get-value-of-nested-dictionary
105
+
106
+ Args:
107
+ d (dict):
108
+ keys (str, list): Such as `Scheduler.NextRun.value`
109
+ default: Default return if key not found.
110
+
111
+ Returns:
112
+
113
+ """
114
+ if isinstance(keys, str):
115
+ keys = keys.split('.')
116
+ assert type(keys) is list
117
+ if d is None:
118
+ return default
119
+ if not keys:
120
+ return d
121
+ return deep_get(d.get(keys[0]), keys[1:], default)