11import asyncio
22from pathlib import Path
3- from winsdk .windows .data .xml .dom import XmlDocument
4- from winsdk .windows .foundation import IPropertyValue
5- from winsdk .windows .ui .notifications import (
3+ from winrt .windows .data .xml .dom import XmlDocument
4+ from winrt .windows .foundation import IPropertyValue
5+ from winrt .windows .ui .notifications import (
66 ToastNotificationManager ,
77 ToastNotification ,
88 NotificationData ,
@@ -152,18 +152,21 @@ def add_selection(selection, document):
152152 selection_element .set_attribute (name , value )
153153 input .append_child (selection_element )
154154
155+
155156result = list ()
156157
158+
157159def result_wrapper (* args ):
158160 global result
159161 result = args
160162 return result
161163
164+
162165def activated_args (_ , event ):
163166 global result
164167 e = ToastActivatedEventArgs ._from (event )
165168 user_input = dict ([(name , IPropertyValue ._from (
166- e .user_input [name ]).get_string ()) for name in e .user_input ])
169+ e .user_input [name ]).get_string ()) for name in e .user_input () ])
167170 result = {
168171 'arguments' : e .arguments ,
169172 'user_input' : user_input
@@ -172,14 +175,14 @@ def activated_args(_, event):
172175
173176
174177async def play_sound (audio ):
175- from winsdk .windows .media .core import MediaSource
176- from winsdk .windows .media .playback import MediaPlayer
178+ from winrt .windows .media .core import MediaSource
179+ from winrt .windows .media .playback import MediaPlayer
177180
178181 if audio .startswith ('http' ):
179- from winsdk .windows .foundation import Uri
182+ from winrt .windows .foundation import Uri
180183 source = MediaSource .create_from_uri (Uri (audio ))
181184 else :
182- from winsdk .windows .storage import StorageFile
185+ from winrt .windows .storage import StorageFile
183186 file = await StorageFile .get_file_from_path_async (audio )
184187 source = MediaSource .create_from_storage_file (file )
185188
@@ -190,43 +193,44 @@ async def play_sound(audio):
190193
191194
192195async def speak (text ):
193- from winsdk .windows .media .core import MediaSource
194- from winsdk .windows .media .playback import MediaPlayer
195- from winsdk .windows .media .speechsynthesis import SpeechSynthesizer
196+ from winrt .windows .media .core import MediaSource
197+ from winrt .windows .media .playback import MediaPlayer
198+ from winrt .windows .media .speechsynthesis import SpeechSynthesizer
196199
197200 # print(list(map(lambda info: info.description, SpeechSynthesizer.get_all_voices())))
198201
199202 stream = await SpeechSynthesizer ().synthesize_text_to_stream_async (text )
200203 player = MediaPlayer ()
201- player .source = MediaSource .create_from_stream (stream , stream .content_type )
204+ player .source = MediaSource .create_from_stream (stream , stream .content_type () )
202205 player .play ()
203206 await asyncio .sleep (7 )
204207
205208
206209async def recognize (ocr ):
207- from winsdk .windows .media .ocr import OcrEngine
208- from winsdk .windows .graphics .imaging import BitmapDecoder
210+ from winrt .windows .media .ocr import OcrEngine
211+ from winrt .windows .graphics .imaging import BitmapDecoder
209212 if isinstance (ocr , str ):
210213 ocr = {'ocr' : ocr }
211214 if ocr ['ocr' ].startswith ('http' ):
212- from winsdk .windows .foundation import Uri
213- from winsdk .windows .storage .streams import RandomAccessStreamReference
215+ from winrt .windows .foundation import Uri
216+ from winrt .windows .storage .streams import RandomAccessStreamReference
214217 ref = RandomAccessStreamReference .create_from_uri (Uri (ocr ['ocr' ]))
215218 stream = await ref .open_read_async ()
216219 else :
217- from winsdk .windows .storage import StorageFile , FileAccessMode
220+ from winrt .windows .storage import StorageFile , FileAccessMode
218221 file = await StorageFile .get_file_from_path_async (ocr ['ocr' ])
219222 stream = await file .open_async (FileAccessMode .READ )
220223 decoder = await BitmapDecoder .create_async (stream )
221224 bitmap = await decoder .get_software_bitmap_async ()
222225 if 'lang' in ocr :
223- from winsdk .windows .globalization import Language
226+ from winrt .windows .globalization import Language
224227 if OcrEngine .is_language_supported (Language (ocr ['lang' ])):
225228 engine = OcrEngine .try_create_from_language (Language (ocr ['lang' ]))
226229 else :
227230 class UnsupportedOcrResult :
228231 def __init__ (self ):
229232 self .text = 'Please install. Get-WindowsCapability -Online -Name "Language.OCR*"'
233+
230234 return UnsupportedOcrResult ()
231235 else :
232236 engine = OcrEngine .try_create_from_user_profile_languages ()
@@ -236,15 +240,17 @@ def __init__(self):
236240
237241
238242def available_recognizer_languages ():
239- from winsdk .windows .media .ocr import OcrEngine
243+ from winrt .windows .media .ocr import OcrEngine
240244 for language in OcrEngine .get_available_recognizer_languages ():
241245 print (language .display_name , language .language_tag )
242246 print ('Run as Administrator' )
243247 print ('Get-WindowsCapability -Online -Name "Language.OCR*"' )
244248 print ('Add-WindowsCapability -Online -Name "Language.OCR~~~en-US~0.0.1.0"' )
245249
246250
247- def notify (title = None , body = None , on_click = print , icon = None , image = None , progress = None , audio = None , dialogue = None , duration = None , input = None , inputs = [], selection = None , selections = [], button = None , buttons = [], xml = xml , app_id = DEFAULT_APP_ID , scenario = None , tag = None , group = None ):
251+ def notify (title = None , body = None , on_click = print , icon = None , image = None , progress = None , audio = None , dialogue = None ,
252+ duration = None , input = None , inputs = [], selection = None , selections = [], button = None , buttons = [], xml = xml ,
253+ app_id = DEFAULT_APP_ID , scenario = None , tag = None , group = None ):
248254 document = XmlDocument ()
249255 document .load_xml (xml .format (scenario = scenario if scenario else 'default' ))
250256 if isinstance (on_click , str ):
@@ -281,7 +287,7 @@ def notify(title=None, body=None, on_click=print, icon=None, image=None, progres
281287 if audio :
282288 if isinstance (audio , str ) and audio .startswith ('ms' ):
283289 add_audio (audio , document )
284- elif isinstance (audio , str ) and (path := Path (audio )).is_file ():
290+ elif isinstance (audio , str ) and (path := Path (audio )).is_file ():
285291 add_audio (f"file:///{ path .absolute ().as_posix ()} " , document )
286292 elif isinstance (audio , dict ) and 'src' in audio and audio ['src' ].startswith ('ms' ):
287293 add_audio (audio , document )
@@ -306,14 +312,17 @@ def notify(title=None, body=None, on_click=print, icon=None, image=None, progres
306312 try :
307313 notifier = ToastNotificationManager .create_toast_notifier ()
308314 except Exception as e :
309- notifier = ToastNotificationManager .create_toast_notifier (app_id )
315+ notifier = ToastNotificationManager .create_toast_notifier_with_id (app_id )
310316 else :
311- notifier = ToastNotificationManager .create_toast_notifier (app_id )
317+ notifier = ToastNotificationManager .create_toast_notifier_with_id (app_id )
312318 notifier .show (notification )
313319 return notification
314320
315321
316- async def toast_async (title = None , body = None , on_click = print , icon = None , image = None , progress = None , audio = None , dialogue = None , duration = None , input = None , inputs = [], selection = None , selections = [], button = None , buttons = [], xml = xml , app_id = DEFAULT_APP_ID , ocr = None , on_dismissed = print , on_failed = print , scenario = None , tag = None , group = None ):
322+ async def toast_async (title = None , body = None , on_click = print , icon = None , image = None , progress = None , audio = None ,
323+ dialogue = None , duration = None , input = None , inputs = [], selection = None , selections = [], button = None ,
324+ buttons = [], xml = xml , app_id = DEFAULT_APP_ID , ocr = None , on_dismissed = print , on_failed = print ,
325+ scenario = None , tag = None , group = None ):
317326 """
318327 Notify
319328 Args:
@@ -339,7 +348,8 @@ async def toast_async(title=None, body=None, on_click=print, icon=None, image=No
339348 src = ocr if isinstance (ocr , str ) else ocr ['ocr' ]
340349 image = {'placement' : 'hero' , 'src' : src }
341350 notification = notify (title , body , on_click , icon , image ,
342- progress , audio , dialogue , duration , input , inputs , selection , selections , button , buttons , xml , app_id , scenario , tag , group )
351+ progress , audio , dialogue , duration , input , inputs , selection , selections , button , buttons ,
352+ xml , app_id , scenario , tag , group )
343353 loop = asyncio .get_running_loop ()
344354 futures = []
345355
@@ -406,7 +416,10 @@ def on_done(t):
406416
407417 task .add_done_callback (on_done )
408418 return future
409-
419+
420+
421+ async def atoast (* args , ** kwargs ):
422+ return await toast_async (* args , ** kwargs )
410423
411424
412425def update_progress (progress , app_id = DEFAULT_APP_ID , tag = 'my_tag' ):
0 commit comments