MaaFw 2.1.0__py3-none-manylinux2014_x86_64.whl → 5.4.0b1__py3-none-manylinux2014_x86_64.whl

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.
maa/toolkit.py CHANGED
@@ -3,15 +3,27 @@ import json
3
3
  from dataclasses import dataclass
4
4
  from pathlib import Path
5
5
  from typing import Dict, List, Union, Optional, Any
6
- from collections import defaultdict
7
6
 
8
7
  from .define import *
9
8
  from .library import Library
10
- from .notification_handler import NotificationHandler
11
9
 
12
10
 
13
11
  @dataclass
14
12
  class AdbDevice:
13
+ """ADB 设备信息 / ADB device information
14
+
15
+ 通过 Toolkit.find_adb_devices 获取。
16
+ Obtained via Toolkit.find_adb_devices.
17
+
18
+ Attributes:
19
+ name: 设备名称 / Device name
20
+ adb_path: adb 可执行文件路径 / Path to adb executable
21
+ address: 设备地址 (如 127.0.0.1:5555) / Device address (e.g., 127.0.0.1:5555)
22
+ screencap_methods: 可用的截图方式位掩码 / Available screenshot methods bitmask
23
+ input_methods: 可用的输入方式位掩码 / Available input methods bitmask
24
+ config: 额外配置信息 / Extra configuration
25
+ """
26
+
15
27
  name: str
16
28
  adb_path: Path
17
29
  address: str
@@ -22,21 +34,46 @@ class AdbDevice:
22
34
 
23
35
  @dataclass
24
36
  class DesktopWindow:
37
+ """桌面窗口信息 / Desktop window information
38
+
39
+ 通过 Toolkit.find_desktop_windows 获取。
40
+ Obtained via Toolkit.find_desktop_windows.
41
+
42
+ Attributes:
43
+ hwnd: 窗口句柄 / Window handle
44
+ class_name: 窗口类名 / Window class name
45
+ window_name: 窗口标题 / Window title
46
+ """
47
+
25
48
  hwnd: ctypes.c_void_p
26
49
  class_name: str
27
50
  window_name: str
28
51
 
29
52
 
30
53
  class Toolkit:
54
+ """工具包 / Toolkit
55
+
56
+ 提供设备发现、配置初始化等辅助功能。
57
+ Provides auxiliary functions such as device discovery and configuration initialization.
58
+ """
31
59
 
32
60
  ### public ###
33
61
 
34
62
  @staticmethod
35
63
  def init_option(user_path: Union[str, Path], default_config: Dict = {}) -> bool:
64
+ """从 user_path 中加载全局配置 / Load global config from user_path
65
+
66
+ Args:
67
+ user_path: 配置存储路径 / Config storage path
68
+ default_config: 默认配置 / Default config
69
+
70
+ Returns:
71
+ bool: 是否成功 / Whether successful
72
+ """
36
73
  Toolkit._set_api_properties()
37
74
 
38
75
  return bool(
39
- Library.toolkit.MaaToolkitConfigInitOption(
76
+ Library.toolkit().MaaToolkitConfigInitOption(
40
77
  str(user_path).encode(),
41
78
  json.dumps(default_config, ensure_ascii=False).encode(),
42
79
  )
@@ -46,38 +83,46 @@ class Toolkit:
46
83
  def find_adb_devices(
47
84
  specified_adb: Optional[Union[str, Path]] = None
48
85
  ) -> List[AdbDevice]:
86
+ """搜索所有已知安卓模拟器 / Search all known Android emulators
87
+
88
+ Args:
89
+ specified_adb: 可选,指定 adb 路径进行搜索 / Optional, search using specified adb path
90
+
91
+ Returns:
92
+ List[AdbDevice]: 设备列表 / Device list
93
+ """
49
94
  Toolkit._set_api_properties()
50
95
 
51
- list_handle = Library.toolkit.MaaToolkitAdbDeviceListCreate()
96
+ list_handle = Library.toolkit().MaaToolkitAdbDeviceListCreate()
52
97
 
53
98
  if specified_adb:
54
- Library.toolkit.MaaToolkitAdbDeviceFindSpecified(
99
+ Library.toolkit().MaaToolkitAdbDeviceFindSpecified(
55
100
  str(specified_adb).encode(), list_handle
56
101
  )
57
102
  else:
58
- Library.toolkit.MaaToolkitAdbDeviceFind(list_handle)
103
+ Library.toolkit().MaaToolkitAdbDeviceFind(list_handle)
59
104
 
60
- count = Library.toolkit.MaaToolkitAdbDeviceListSize(list_handle)
105
+ count = Library.toolkit().MaaToolkitAdbDeviceListSize(list_handle)
61
106
 
62
107
  devices = []
63
108
  for i in range(count):
64
- device_handle = Library.toolkit.MaaToolkitAdbDeviceListAt(list_handle, i)
109
+ device_handle = Library.toolkit().MaaToolkitAdbDeviceListAt(list_handle, i)
65
110
 
66
- name = Library.toolkit.MaaToolkitAdbDeviceGetName(device_handle).decode()
111
+ name = Library.toolkit().MaaToolkitAdbDeviceGetName(device_handle).decode()
67
112
  adb_path = Path(
68
- Library.toolkit.MaaToolkitAdbDeviceGetAdbPath(device_handle).decode()
113
+ Library.toolkit().MaaToolkitAdbDeviceGetAdbPath(device_handle).decode()
114
+ )
115
+ address = (
116
+ Library.toolkit().MaaToolkitAdbDeviceGetAddress(device_handle).decode()
69
117
  )
70
- address = Library.toolkit.MaaToolkitAdbDeviceGetAddress(
71
- device_handle
72
- ).decode()
73
118
  screencap_methods = int(
74
- Library.toolkit.MaaToolkitAdbDeviceGetScreencapMethods(device_handle)
119
+ Library.toolkit().MaaToolkitAdbDeviceGetScreencapMethods(device_handle)
75
120
  )
76
121
  input_methods = int(
77
- Library.toolkit.MaaToolkitAdbDeviceGetInputMethods(device_handle)
122
+ Library.toolkit().MaaToolkitAdbDeviceGetInputMethods(device_handle)
78
123
  )
79
124
  config = json.loads(
80
- Library.toolkit.MaaToolkitAdbDeviceGetConfig(device_handle).decode()
125
+ Library.toolkit().MaaToolkitAdbDeviceGetConfig(device_handle).decode()
81
126
  )
82
127
 
83
128
  devices.append(
@@ -86,102 +131,50 @@ class Toolkit:
86
131
  )
87
132
  )
88
133
 
89
- Library.toolkit.MaaToolkitAdbDeviceListDestroy(list_handle)
134
+ Library.toolkit().MaaToolkitAdbDeviceListDestroy(list_handle)
90
135
 
91
136
  return devices
92
137
 
93
138
  @staticmethod
94
139
  def find_desktop_windows() -> List[DesktopWindow]:
140
+ """查询所有窗口信息 / Query all window info
141
+
142
+ Returns:
143
+ List[DesktopWindow]: 窗口列表 / Window list
144
+ """
95
145
  Toolkit._set_api_properties()
96
146
 
97
- list_handle = Library.toolkit.MaaToolkitDesktopWindowListCreate()
147
+ list_handle = Library.toolkit().MaaToolkitDesktopWindowListCreate()
98
148
 
99
- Library.toolkit.MaaToolkitDesktopWindowFindAll(list_handle)
149
+ Library.toolkit().MaaToolkitDesktopWindowFindAll(list_handle)
100
150
 
101
- count = Library.toolkit.MaaToolkitDesktopWindowListSize(list_handle)
151
+ count = Library.toolkit().MaaToolkitDesktopWindowListSize(list_handle)
102
152
 
103
153
  windows = []
104
154
  for i in range(count):
105
- window_handle = Library.toolkit.MaaToolkitDesktopWindowListAt(
155
+ window_handle = Library.toolkit().MaaToolkitDesktopWindowListAt(
106
156
  list_handle, i
107
157
  )
108
- hwnd = Library.toolkit.MaaToolkitDesktopWindowGetHandle(window_handle)
109
- class_name = Library.toolkit.MaaToolkitDesktopWindowGetClassName(
110
- window_handle
111
- ).decode()
112
- window_name = Library.toolkit.MaaToolkitDesktopWindowGetWindowName(
113
- window_handle
114
- ).decode()
158
+ hwnd = Library.toolkit().MaaToolkitDesktopWindowGetHandle(window_handle)
159
+ class_name = (
160
+ Library.toolkit()
161
+ .MaaToolkitDesktopWindowGetClassName(window_handle)
162
+ .decode()
163
+ )
164
+ window_name = (
165
+ Library.toolkit()
166
+ .MaaToolkitDesktopWindowGetWindowName(window_handle)
167
+ .decode()
168
+ )
115
169
 
116
170
  windows.append(DesktopWindow(hwnd, class_name, window_name))
117
171
 
118
- Library.toolkit.MaaToolkitDesktopWindowListDestroy(list_handle)
172
+ Library.toolkit().MaaToolkitDesktopWindowListDestroy(list_handle)
119
173
  return windows
120
174
 
121
- @staticmethod
122
- def pi_register_custom_recognition(
123
- name: str, recognition: "CustomRecognition", inst_id: int = 0 # type: ignore
124
- ) -> bool:
125
- Toolkit._set_api_properties()
126
-
127
- # avoid gc
128
- Toolkit._pi_custom_recognition_holder[inst_id][name] = recognition
129
-
130
- return bool(
131
- Library.toolkit.MaaToolkitProjectInterfaceRegisterCustomRecognition(
132
- ctypes.c_uint64(inst_id),
133
- name.encode(),
134
- recognition.c_handle,
135
- recognition.c_arg,
136
- )
137
- )
138
-
139
- @staticmethod
140
- def pi_register_custom_action(
141
- name: str, action: "CustomAction", inst_id: int = 0 # type: ignore
142
- ) -> bool:
143
- Toolkit._set_api_properties()
144
-
145
- # avoid gc
146
- Toolkit._pi_custom_recognition_holder[inst_id][name] = action
147
-
148
- return bool(
149
- Library.toolkit.MaaToolkitProjectInterfaceRegisterCustomAction(
150
- ctypes.c_uint64(inst_id),
151
- name.encode(),
152
- action.c_handle,
153
- action.c_arg,
154
- ),
155
- )
156
-
157
- @staticmethod
158
- def pi_run_cli(
159
- resource_path: Union[str, Path],
160
- user_path: Union[str, Path],
161
- directly: bool = False,
162
- notification_handler: Optional[NotificationHandler] = None,
163
- inst_id: int = 0,
164
- ) -> bool:
165
- Toolkit._set_api_properties()
166
-
167
- Toolkit._pi_notification_handler = notification_handler
168
-
169
- return bool(
170
- Library.toolkit.MaaToolkitProjectInterfaceRunCli(
171
- ctypes.c_uint64(inst_id),
172
- str(resource_path).encode(),
173
- str(user_path).encode(),
174
- directly,
175
- *NotificationHandler._gen_c_param(Toolkit._pi_notification_handler),
176
- )
177
- )
178
-
179
175
  ### private ###
180
176
 
181
177
  _api_properties_initialized: bool = False
182
- _pi_custom_recognition_holder = defaultdict(dict)
183
- _pi_custom_action_holder = defaultdict(dict)
184
- _pi_notification_handler: Optional[NotificationHandler] = None
185
178
 
186
179
  @staticmethod
187
180
  def _set_api_properties():
@@ -189,148 +182,115 @@ class Toolkit:
189
182
  return
190
183
  Toolkit._api_properties_initialized = True
191
184
 
192
- if not Library.initialized:
193
- raise RuntimeError(
194
- "Library not initialized, please call `library.open()` first."
195
- )
196
-
197
- Library.toolkit.MaaToolkitConfigInitOption.restype = MaaBool
198
- Library.toolkit.MaaToolkitConfigInitOption.argtypes = [
185
+ Library.toolkit().MaaToolkitConfigInitOption.restype = MaaBool
186
+ Library.toolkit().MaaToolkitConfigInitOption.argtypes = [
199
187
  ctypes.c_char_p,
200
188
  ctypes.c_char_p,
201
189
  ]
202
190
 
203
- Library.toolkit.MaaToolkitAdbDeviceListCreate.restype = (
191
+ Library.toolkit().MaaToolkitAdbDeviceListCreate.restype = (
204
192
  MaaToolkitAdbDeviceListHandle
205
193
  )
206
- Library.toolkit.MaaToolkitAdbDeviceListCreate.argtypes = []
194
+ Library.toolkit().MaaToolkitAdbDeviceListCreate.argtypes = []
207
195
 
208
- Library.toolkit.MaaToolkitAdbDeviceListDestroy.restype = None
209
- Library.toolkit.MaaToolkitAdbDeviceListDestroy.argtypes = [
196
+ Library.toolkit().MaaToolkitAdbDeviceListDestroy.restype = None
197
+ Library.toolkit().MaaToolkitAdbDeviceListDestroy.argtypes = [
210
198
  MaaToolkitAdbDeviceListHandle
211
199
  ]
212
200
 
213
- Library.toolkit.MaaToolkitAdbDeviceFind.restype = MaaBool
214
- Library.toolkit.MaaToolkitAdbDeviceFind.argtypes = [
201
+ Library.toolkit().MaaToolkitAdbDeviceFind.restype = MaaBool
202
+ Library.toolkit().MaaToolkitAdbDeviceFind.argtypes = [
215
203
  MaaToolkitAdbDeviceListHandle
216
204
  ]
217
205
 
218
- Library.toolkit.MaaToolkitAdbDeviceFindSpecified.restype = MaaBool
219
- Library.toolkit.MaaToolkitAdbDeviceFindSpecified.argtypes = [
206
+ Library.toolkit().MaaToolkitAdbDeviceFindSpecified.restype = MaaBool
207
+ Library.toolkit().MaaToolkitAdbDeviceFindSpecified.argtypes = [
220
208
  ctypes.c_char_p,
221
209
  MaaToolkitAdbDeviceListHandle,
222
210
  ]
223
211
 
224
- Library.toolkit.MaaToolkitAdbDeviceListSize.restype = MaaSize
225
- Library.toolkit.MaaToolkitAdbDeviceListSize.argtypes = [
212
+ Library.toolkit().MaaToolkitAdbDeviceListSize.restype = MaaSize
213
+ Library.toolkit().MaaToolkitAdbDeviceListSize.argtypes = [
226
214
  MaaToolkitAdbDeviceListHandle
227
215
  ]
228
216
 
229
- Library.toolkit.MaaToolkitAdbDeviceListAt.restype = MaaToolkitAdbDeviceHandle
230
- Library.toolkit.MaaToolkitAdbDeviceListAt.argtypes = [
217
+ Library.toolkit().MaaToolkitAdbDeviceListAt.restype = MaaToolkitAdbDeviceHandle
218
+ Library.toolkit().MaaToolkitAdbDeviceListAt.argtypes = [
231
219
  MaaToolkitAdbDeviceListHandle,
232
220
  MaaSize,
233
221
  ]
234
222
 
235
- Library.toolkit.MaaToolkitAdbDeviceGetName.restype = ctypes.c_char_p
236
- Library.toolkit.MaaToolkitAdbDeviceGetName.argtypes = [
223
+ Library.toolkit().MaaToolkitAdbDeviceGetName.restype = ctypes.c_char_p
224
+ Library.toolkit().MaaToolkitAdbDeviceGetName.argtypes = [
237
225
  MaaToolkitAdbDeviceHandle
238
226
  ]
239
227
 
240
- Library.toolkit.MaaToolkitAdbDeviceGetAdbPath.restype = ctypes.c_char_p
241
- Library.toolkit.MaaToolkitAdbDeviceGetAdbPath.argtypes = [
228
+ Library.toolkit().MaaToolkitAdbDeviceGetAdbPath.restype = ctypes.c_char_p
229
+ Library.toolkit().MaaToolkitAdbDeviceGetAdbPath.argtypes = [
242
230
  MaaToolkitAdbDeviceHandle
243
231
  ]
244
232
 
245
- Library.toolkit.MaaToolkitAdbDeviceGetAddress.restype = ctypes.c_char_p
246
- Library.toolkit.MaaToolkitAdbDeviceGetAddress.argtypes = [
233
+ Library.toolkit().MaaToolkitAdbDeviceGetAddress.restype = ctypes.c_char_p
234
+ Library.toolkit().MaaToolkitAdbDeviceGetAddress.argtypes = [
247
235
  MaaToolkitAdbDeviceHandle
248
236
  ]
249
237
 
250
- Library.toolkit.MaaToolkitAdbDeviceGetScreencapMethods.restype = (
238
+ Library.toolkit().MaaToolkitAdbDeviceGetScreencapMethods.restype = (
251
239
  MaaAdbScreencapMethod
252
240
  )
253
- Library.toolkit.MaaToolkitAdbDeviceGetScreencapMethods.argtypes = [
241
+ Library.toolkit().MaaToolkitAdbDeviceGetScreencapMethods.argtypes = [
254
242
  MaaToolkitAdbDeviceHandle
255
243
  ]
256
244
 
257
- Library.toolkit.MaaToolkitAdbDeviceGetInputMethods.restype = MaaAdbInputMethod
258
- Library.toolkit.MaaToolkitAdbDeviceGetInputMethods.argtypes = [
245
+ Library.toolkit().MaaToolkitAdbDeviceGetInputMethods.restype = MaaAdbInputMethod
246
+ Library.toolkit().MaaToolkitAdbDeviceGetInputMethods.argtypes = [
259
247
  MaaToolkitAdbDeviceHandle
260
248
  ]
261
249
 
262
- Library.toolkit.MaaToolkitAdbDeviceGetConfig.restype = ctypes.c_char_p
263
- Library.toolkit.MaaToolkitAdbDeviceGetConfig.argtypes = [
250
+ Library.toolkit().MaaToolkitAdbDeviceGetConfig.restype = ctypes.c_char_p
251
+ Library.toolkit().MaaToolkitAdbDeviceGetConfig.argtypes = [
264
252
  MaaToolkitAdbDeviceHandle
265
253
  ]
266
254
 
267
- Library.toolkit.MaaToolkitDesktopWindowListCreate.restype = (
255
+ Library.toolkit().MaaToolkitDesktopWindowListCreate.restype = (
268
256
  MaaToolkitDesktopWindowListHandle
269
257
  )
270
- Library.toolkit.MaaToolkitDesktopWindowListCreate.argtypes = []
258
+ Library.toolkit().MaaToolkitDesktopWindowListCreate.argtypes = []
271
259
 
272
- Library.toolkit.MaaToolkitDesktopWindowListDestroy.restype = None
273
- Library.toolkit.MaaToolkitDesktopWindowListDestroy.argtypes = [
260
+ Library.toolkit().MaaToolkitDesktopWindowListDestroy.restype = None
261
+ Library.toolkit().MaaToolkitDesktopWindowListDestroy.argtypes = [
274
262
  MaaToolkitDesktopWindowListHandle
275
263
  ]
276
264
 
277
- Library.toolkit.MaaToolkitDesktopWindowFindAll.restype = MaaBool
278
- Library.toolkit.MaaToolkitDesktopWindowFindAll.argtypes = [
265
+ Library.toolkit().MaaToolkitDesktopWindowFindAll.restype = MaaBool
266
+ Library.toolkit().MaaToolkitDesktopWindowFindAll.argtypes = [
279
267
  MaaToolkitDesktopWindowListHandle
280
268
  ]
281
269
 
282
- Library.toolkit.MaaToolkitDesktopWindowListSize.restype = MaaSize
283
- Library.toolkit.MaaToolkitDesktopWindowListSize.argtypes = [
270
+ Library.toolkit().MaaToolkitDesktopWindowListSize.restype = MaaSize
271
+ Library.toolkit().MaaToolkitDesktopWindowListSize.argtypes = [
284
272
  MaaToolkitDesktopWindowListHandle
285
273
  ]
286
274
 
287
- Library.toolkit.MaaToolkitDesktopWindowListAt.restype = (
275
+ Library.toolkit().MaaToolkitDesktopWindowListAt.restype = (
288
276
  MaaToolkitDesktopWindowHandle
289
277
  )
290
- Library.toolkit.MaaToolkitDesktopWindowListAt.argtypes = [
278
+ Library.toolkit().MaaToolkitDesktopWindowListAt.argtypes = [
291
279
  MaaToolkitDesktopWindowListHandle,
292
280
  MaaSize,
293
281
  ]
294
282
 
295
- Library.toolkit.MaaToolkitDesktopWindowGetHandle.restype = ctypes.c_void_p
296
- Library.toolkit.MaaToolkitDesktopWindowGetHandle.argtypes = [
283
+ Library.toolkit().MaaToolkitDesktopWindowGetHandle.restype = ctypes.c_void_p
284
+ Library.toolkit().MaaToolkitDesktopWindowGetHandle.argtypes = [
297
285
  MaaToolkitDesktopWindowHandle
298
286
  ]
299
287
 
300
- Library.toolkit.MaaToolkitDesktopWindowGetClassName.restype = ctypes.c_char_p
301
- Library.toolkit.MaaToolkitDesktopWindowGetClassName.argtypes = [
288
+ Library.toolkit().MaaToolkitDesktopWindowGetClassName.restype = ctypes.c_char_p
289
+ Library.toolkit().MaaToolkitDesktopWindowGetClassName.argtypes = [
302
290
  MaaToolkitDesktopWindowHandle
303
291
  ]
304
292
 
305
- Library.toolkit.MaaToolkitDesktopWindowGetWindowName.restype = ctypes.c_char_p
306
- Library.toolkit.MaaToolkitDesktopWindowGetWindowName.argtypes = [
293
+ Library.toolkit().MaaToolkitDesktopWindowGetWindowName.restype = ctypes.c_char_p
294
+ Library.toolkit().MaaToolkitDesktopWindowGetWindowName.argtypes = [
307
295
  MaaToolkitDesktopWindowHandle
308
296
  ]
309
-
310
- Library.toolkit.MaaToolkitProjectInterfaceRegisterCustomRecognition.restype = (
311
- None
312
- )
313
- Library.toolkit.MaaToolkitProjectInterfaceRegisterCustomRecognition.argtypes = [
314
- ctypes.c_uint64,
315
- ctypes.c_char_p,
316
- MaaCustomRecognitionCallback,
317
- ctypes.c_void_p,
318
- ]
319
-
320
- Library.toolkit.MaaToolkitProjectInterfaceRegisterCustomAction.restype = None
321
- Library.toolkit.MaaToolkitProjectInterfaceRegisterCustomAction.argtypes = [
322
- ctypes.c_uint64,
323
- ctypes.c_char_p,
324
- MaaCustomActionCallback,
325
- ctypes.c_void_p,
326
- ]
327
-
328
- Library.toolkit.MaaToolkitProjectInterfaceRunCli.restype = MaaBool
329
- Library.toolkit.MaaToolkitProjectInterfaceRunCli.argtypes = [
330
- ctypes.c_uint64,
331
- ctypes.c_char_p,
332
- ctypes.c_char_p,
333
- MaaBool,
334
- MaaNotificationCallback,
335
- ctypes.c_void_p,
336
- ]