Skip to content

Commit e50a6fc

Browse files
New structure, new windows notification package.
1 parent 43e5f93 commit e50a6fc

27 files changed

+111
-78
lines changed
Binary file not shown.
8.71 MB
Binary file not shown.
Binary file not shown.
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import asyncio
22
import logging
3-
3+
import traceback
44

55
class Command:
66

@@ -18,8 +18,10 @@ async def execute(self):
1818
logging.info("Output: {}".format(output))
1919
logging.info("Error Code: {}".format(code))
2020
if self.return_flag:
21-
return {"output": output, "code": code}
21+
return {"output": output, "code": code, "error": stderr.decode().strip()}
2222
else:
2323
return None
2424
except Exception as err:
2525
logging.critical("ERROR: {}".format(err))
26+
logging.critical(f"Traceback: {traceback.format_exc()}")
27+

Sources/plugin/koltenfluckiger.streamdeck-python-plugin.py renamed to Source/plugin/koltenfluckiger.streamdeck-python-plugin.py

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
import re
55
import json
66
import websockets
7-
7+
import os
8+
import pathlib
9+
import traceback
810
from logging.handlers import RotatingFileHandler
911

1012
from process import ProcessManager
@@ -13,11 +15,14 @@
1315
from notifier import Notifier
1416
from command import Command
1517

18+
1619
logging.basicConfig(
17-
handlers=[RotatingFileHandler('debug.log', maxBytes=100000, backupCount=10)],
18-
level=logging.DEBUG,
19-
format="[%(asctime)s] %(levelname)s [%(name)s.%(funcName)s:%(lineno)d] %(message)s",
20-
datefmt='%Y-%m-%dT%H:%M:%S')
20+
handlers=[RotatingFileHandler(
21+
f'{pathlib.Path(os.environ["TEMP"]).joinpath("debug.log").resolve()}', maxBytes=100000, backupCount=10)],
22+
level=logging.DEBUG,
23+
format="[%(asctime)s] %(levelname)s [%(name)s.%(funcName)s:%(lineno)d] %(message)s",
24+
datefmt='%Y-%m-%dT%H:%M:%S')
25+
2126

2227
class Plugin(object):
2328

@@ -37,6 +42,7 @@ def __del__(self):
3742
self.loop.close()
3843
except Exception as err:
3944
logging.critical(err)
45+
logging.critical(f"Traceback: {traceback.format_exc()}")
4046

4147
async def listen(self):
4248
try:
@@ -45,14 +51,16 @@ async def listen(self):
4551
await self.on_message()
4652
except Exception as err:
4753
logging.critical(err)
54+
logging.critical(f"Traceback: {traceback.format_exc()}")
4855

4956
async def _init_websocket(self):
5057
uri = "ws://localhost:{}".format(self.port)
5158
try:
52-
self.websocket = await websockets.client.connect(uri)
59+
self.websocket = await websockets.connect(uri)
5360
return
5461
except Exception as err:
5562
logging.critical(err)
63+
logging.critical(f"Traceback: {traceback.format_exc()}")
5664

5765
async def _register_websocket(self):
5866
try:
@@ -66,20 +74,23 @@ async def _register_websocket(self):
6674
return
6775
except Exception as err:
6876
logging.critical(err)
77+
logging.critical(f"Traceback: {traceback.format_exc()}")
6978

7079
async def on_message(self):
7180
try:
7281
async for message in self.websocket:
7382
await self.process_data(json.loads(message))
7483
except Exception as err:
7584
logging.critical(err)
85+
logging.critical(f"Traceback: {traceback.format_exc()}")
7686

7787
async def send_message(self, event):
7888
try:
7989
logging.info("Sending event: {}".format(event))
8090
await self.websocket.send(event)
8191
except Exception as err:
8292
logging.critical(err)
93+
logging.critical(f"Traceback: {traceback.format_exc()}")
8394

8495
def generate_command(self, data):
8596
try:
@@ -93,6 +104,7 @@ def generate_command(self, data):
93104
return new_command
94105
except Exception as err:
95106
logging.critical(err)
107+
logging.critical(f"Traceback: {traceback.format_exc()}")
96108

97109
async def process_data(self, data):
98110
logging.info("Processing data: {}".format(data))
@@ -111,6 +123,7 @@ async def process_data(self, data):
111123

112124
except Exception as err:
113125
logging.critical(err)
126+
logging.critical(f"Traceback: {traceback.format_exc()}")
114127

115128

116129
def parse_args(sys_args):
@@ -128,31 +141,34 @@ def parse_args(sys_args):
128141
logging.info("Flag: {}, Value: {}".format(flag, value))
129142
except Exception as err:
130143
logging.critical(err)
144+
logging.critical(f"Traceback: {traceback.format_exc()}")
131145
return args
132146

133147

134148
def main():
135149
try:
136150
args = parse_args(sys.argv)
137-
loop = asyncio.get_event_loop()
138-
151+
logging.info(args)
152+
loop = asyncio.new_event_loop()
153+
eloop = asyncio.get_event_loop()
139154
os_manager = OSManager()
140155
os_type = os_manager._get_current_os()
141156
notifier = Notifier(os_type)
142157
process_manager = ProcessManager(notifier)
143158

144159
plugin = Plugin(port=args['port'], pluginUUID=args['pluginUUID'],
145-
registerEvent=args['registerEvent'], info=args['info'], loop=loop, process_manager=process_manager, os_manager=os_manager)
160+
registerEvent=args['registerEvent'], info=args['info'], loop=eloop, process_manager=process_manager, os_manager=os_manager)
146161

147-
loop.run_until_complete(asyncio.gather(
162+
eloop.run_until_complete(asyncio.gather(
148163
plugin.listen(), process_manager.process()))
149-
loop.run_forever()
150-
loop.stop()
151-
loop.close()
164+
eloop.run_forever()
165+
eloop.stop()
166+
eloop.close()
152167
except Exception as err:
153168
logging.critical(err)
154-
loop.stop()
155-
loop.close()
169+
logging.critical(f"Traceback: {traceback.format_exc()}")
170+
eloop.stop()
171+
eloop.close()
156172

157173

158174
if __name__ == '__main__':
Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,23 @@
22
from operatingsystem import OSTYPE
33
import platform
44
import logging
5+
import traceback
56
if 'windows' in platform.system().lower():
6-
from plyer.platforms.win.notification import instance as WinInstance
7+
from pywintoaster.toaster import Toaster
78
elif 'linux' in platform.system().lower():
89
from plyer.platforms.linux.notification import instance as LinuxInstance
910
elif 'mac' in platform.system().lower():
1011
from plyer.platforms.macosx.notification import instance as OSXInstance
1112
except ImportError as err:
1213
logging.critical("Import error: {}".format(err))
13-
14+
logging.critical(f"Traceback: {traceback.format_exc()}")
1415

1516
class Notifier():
1617

1718
def __init__(self, OS):
1819
if OS == OS.WINDOWS:
19-
self.instance = WinInstance()
20-
elif OS == OS.LINUX:
20+
self.instance = Toaster(group="StreamDeck Python Plugin")
21+
elif OS == OS.UNIX:
2122
self.instance = LinuxInstance()
2223
elif OS == OS.MACOS:
2324
self.instance = OSXInstance()
@@ -27,3 +28,4 @@ def notify(self, title, message):
2728
self.instance.notify(title=title, message=message)
2829
except Exception as err:
2930
logging.critical("Notify Error: {}".format(err))
31+
logging.critical(f"Traceback: {traceback.format_exc()}")

0 commit comments

Comments
 (0)