forked from Tormak9970/bash-shortcuts
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmain.py
205 lines (153 loc) · 6.86 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
#!/usr/bin/env python
import json
import os
import sys
sys.path.append(os.path.dirname(__file__))
from py_backend.instanceManager import InstanceManager
from py_backend.jsInterop import JsInteropManager
from settings import SettingsManager
from py_backend.logger import log
Initialized = False
class Plugin:
pluginUser = os.environ["DECKY_USER"]
pluginSettingsDir = os.environ["DECKY_PLUGIN_SETTINGS_DIR"]
oldShortcutsPath = f"/home/{pluginUser}/.config/bash-shortcuts/shortcuts.json"
shortcutsRunnerPath = f"\"/home/{pluginUser}/homebrew/plugins/bash-shortcuts/shortcutsRunner.sh\""
guidesDirPath = f"/home/{pluginUser}/homebrew/plugins/bash-shortcuts/guides"
settingsManager = SettingsManager(name='bash-shortcuts', settings_directory=pluginSettingsDir)
guides = {}
# Normal methods: can be called from JavaScript using call_plugin_function("signature", argument)
async def getShortcuts(self):
shortcuts = self.settingsManager.getSetting("shortcuts", {})
needToSet = False
for key in shortcuts.keys():
if not "hooks" in shortcuts[key]:
shortcuts[key]["hooks"] = []
needToSet = True
if not "passFlags" in shortcuts[key]:
shortcuts[key]["passFlags"] = False
needToSet = True
if needToSet:
self.settingsManager.setSetting("shortcuts", shortcuts)
return shortcuts
async def getGuides(self):
self._getGuides(self)
return self.guides
async def getSetting(self, key, defaultVal):
return self.settingsManager.getSetting(key, defaultVal)
async def setSetting(self, key, newVal):
self.settingsManager.setSetting(key, newVal)
log(f"Set setting {key} to {newVal}")
pass
async def addShortcut(self, shortcut):
self._addShortcut(self, shortcut)
return self.settingsManager.getSetting("shortcuts", {})
async def setShortcuts(self, shortcuts):
self._setShortcuts(self, shortcuts)
return self.settingsManager.getSetting("shortcuts", {})
async def modShortcut(self, shortcut):
self._modShortcut(self, shortcut)
return self.settingsManager.getSetting("shortcuts", {})
async def remShortcut(self, shortcut):
self._remShortcut(self, shortcut)
return self.settingsManager.getSetting("shortcuts", {})
async def runNonAppShortcut(self, shortcutId, flags):
self._runNonAppShortcut(self, shortcutId, flags)
async def killNonAppShortcut(self, shortcutId):
self._killNonAppShortcut(self, shortcutId)
async def getHomeDir(self):
return self.pluginUser
async def logMessage(self, message):
log(message)
# Asyncio-compatible long-running code, executed in a task when the plugin is loaded
async def _main(self):
global Initialized
if Initialized:
return
Initialized = True
log("Initializing Shorcuts Plugin")
self.settingsManager.read()
if "shortcuts" not in self.settingsManager.settings:
log("No shortcuts detected in settings.")
if (os.path.exists(self.oldShortcutsPath)):
log("Converting old shortcuts.")
try:
with open(self.oldShortcutsPath, "r") as file:
shortcutsDict = json.load(file)
log(f"Got shortcuts from old shortcuts.json. Shortcuts: {json.dumps(shortcutsDict)}")
self.settingsManager.setSetting("shortcuts", shortcutsDict)
except Exception as e:
log(f"Exception while parsing shortcuts: {e}") # error reading json
else:
log("Adding default shortcut.")
self.settingsManager.setSetting("shortcuts", {
"fcba1cb4-4601-45d8-b919-515d152c56ef": {
"id": "fcba1cb4-4601-45d8-b919-515d152c56ef",
"name": "Konsole",
"cmd": "LD_PRELOAD= QT_SCALE_FACTOR=1.25 konsole",
"position": 1,
"isApp": True,
"hooks": []
}
})
else:
log(f"Shortcuts loaded from settings. Shortcuts: {json.dumps(self.settingsManager.getSetting('shortcuts', {}))}")
if "webSocketPort" not in self.settingsManager.settings:
log("No WebSocket port detected in settings.")
self.settingsManager.setSetting("webSocketPort", "5000")
log("Set WebSocket port to default; \"5000\"")
else:
log(f"WebSocket port loaded from settings. Port: {self.settingsManager.getSetting('webSocketPort', '')}")
self.jsInteropManager = JsInteropManager("localhost", self.settingsManager.getSetting("webSocketPort", "5000"))
self.instanceManager = InstanceManager(0.25, self.jsInteropManager)
#* start websocket server
self.jsInteropManager.startServer()
async def _unload(self):
self.jsInteropManager.stopServer()
log("Plugin unloaded")
pass
def _addShortcut(self, shortcut):
if (shortcut["id"] not in self.settingsManager.getSetting("shortcuts", {})):
log(f"Adding shortcut {shortcut['name']}")
shortcutsDict = self.settingsManager.getSetting("shortcuts", {})
shortcutsDict[shortcut["id"]] = shortcut
self.settingsManager.setSetting("shortcuts", shortcutsDict)
else:
log(f"Shortcut {shortcut['name']} already exists")
pass
def _setShortcuts(self, shortcuts):
log(f"Setting shortcuts...")
self.settingsManager.setSetting("shortcuts", shortcuts)
pass
def _modShortcut(self, shortcut):
if (shortcut["id"] in self.settingsManager.getSetting("shortcuts", {})):
log(f"Modifying shortcut {shortcut['name']}")
log(f"JSON: {json.dumps(shortcut)}")
shortcutsDict = self.settingsManager.getSetting("shortcuts", {})
shortcutsDict[shortcut["id"]] = shortcut
self.settingsManager.setSetting("shortcuts", shortcutsDict)
else:
log(f"Shortcut {shortcut['name']} does not exist")
pass
def _remShortcut(self, shortcut):
if (shortcut["id"] in self.settingsManager.getSetting("shortcuts", {})):
log(f"Removing shortcut {shortcut['name']}")
shortcutsDict = self.settingsManager.getSetting("shortcuts", {})
del shortcutsDict[shortcut["id"]]
self.settingsManager.setSetting("shortcuts", shortcutsDict)
else:
log(f"Shortcut {shortcut['name']} does not exist")
pass
def _getGuides(self):
for guideFileName in os.listdir(self.guidesDirPath):
with open(os.path.join(self.guidesDirPath, guideFileName), 'r') as guideFile:
guideName = guideFileName.replace("_", " ").replace(".md", "")
self.guides[guideName] = "".join(guideFile.readlines())
pass
def _runNonAppShortcut(self, shortcutId, flags):
shortcut = self.settingsManager.getSetting("shortcuts", {})[shortcutId]
log(f"Running createInstance for shortcut with Id: {shortcutId} and Flags: {json.dumps(flags)}")
self.instanceManager.createInstance(shortcut, flags)
def _killNonAppShortcut(self, shortcutId):
log(f"Running killInstance for shortcut with Id: {shortcutId}")
self.instanceManager.killInstance(self.settingsManager.getSetting("shortcuts", {})[shortcutId])