mirror of
https://github.com/SteamDeckHomebrew/decky-loader.git
synced 2026-07-11 11:41:58 +00:00
Add localplatform stuff to its own package
This commit is contained in:
@@ -17,7 +17,7 @@ from enum import IntEnum
|
|||||||
from typing import Dict, List, TypedDict
|
from typing import Dict, List, TypedDict
|
||||||
|
|
||||||
# Local modules
|
# Local modules
|
||||||
from .localplatform import chown, chmod
|
from .localplatform.localplatform import chown, chmod
|
||||||
from .loader import Loader, Plugins
|
from .loader import Loader, Plugins
|
||||||
from .helpers import get_ssl_context, download_remote_binary_to_path
|
from .helpers import get_ssl_context, download_remote_binary_to_path
|
||||||
from .settings import SettingsManager
|
from .settings import SettingsManager
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import certifi
|
|||||||
from aiohttp.web import Request, Response, middleware
|
from aiohttp.web import Request, Response, middleware
|
||||||
from aiohttp.typedefs import Handler
|
from aiohttp.typedefs import Handler
|
||||||
from aiohttp import ClientSession
|
from aiohttp import ClientSession
|
||||||
from . import localplatform
|
from .localplatform import localplatform
|
||||||
from .customtypes import UserType
|
from .customtypes import UserType
|
||||||
from logging import getLogger
|
from logging import getLogger
|
||||||
|
|
||||||
|
|||||||
@@ -1,84 +0,0 @@
|
|||||||
class PluginEventTarget extends EventTarget { }
|
|
||||||
method_call_ev_target = new PluginEventTarget();
|
|
||||||
|
|
||||||
window.addEventListener("message", function(evt) {
|
|
||||||
let ev = new Event(evt.data.call_id);
|
|
||||||
ev.data = evt.data.result;
|
|
||||||
method_call_ev_target.dispatchEvent(ev);
|
|
||||||
}, false);
|
|
||||||
|
|
||||||
async function call_server_method(method_name, arg_object={}) {
|
|
||||||
const token = await fetch("http://127.0.0.1:1337/auth/token").then(r => r.text());
|
|
||||||
const response = await fetch(`http://127.0.0.1:1337/methods/${method_name}`, {
|
|
||||||
method: 'POST',
|
|
||||||
credentials: "include",
|
|
||||||
headers: {
|
|
||||||
'Content-Type': 'application/json',
|
|
||||||
Authentication: token
|
|
||||||
},
|
|
||||||
body: JSON.stringify(arg_object),
|
|
||||||
});
|
|
||||||
|
|
||||||
const dta = await response.json();
|
|
||||||
if (!dta.success) throw dta.result;
|
|
||||||
return dta.result;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Source: https://stackoverflow.com/a/2117523 Thanks!
|
|
||||||
function uuidv4() {
|
|
||||||
return ([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g, c =>
|
|
||||||
(c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
async function fetch_nocors(url, request={}) {
|
|
||||||
let args = { method: "POST", headers: {}, body: "" };
|
|
||||||
request = {...args, ...request};
|
|
||||||
request.url = url;
|
|
||||||
request.data = request.body;
|
|
||||||
delete request.body; //maintain api-compatibility with fetch
|
|
||||||
return await call_server_method("http_request", request);
|
|
||||||
}
|
|
||||||
|
|
||||||
async function call_plugin_method(method_name, arg_object={}) {
|
|
||||||
if (plugin_name == undefined)
|
|
||||||
throw new Error("Plugin methods can only be called from inside plugins (duh)");
|
|
||||||
const token = await fetch("http://127.0.0.1:1337/auth/token").then(r => r.text());
|
|
||||||
const response = await fetch(`http://127.0.0.1:1337/plugins/${plugin_name}/methods/${method_name}`, {
|
|
||||||
method: 'POST',
|
|
||||||
credentials: "include",
|
|
||||||
headers: {
|
|
||||||
'Content-Type': 'application/json',
|
|
||||||
Authentication: token
|
|
||||||
},
|
|
||||||
body: JSON.stringify({
|
|
||||||
args: arg_object,
|
|
||||||
}),
|
|
||||||
});
|
|
||||||
|
|
||||||
const dta = await response.json();
|
|
||||||
if (!dta.success) throw dta.result;
|
|
||||||
return dta.result;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function execute_in_tab(tab, run_async, code) {
|
|
||||||
return await call_server_method("execute_in_tab", {
|
|
||||||
'tab': tab,
|
|
||||||
'run_async': run_async,
|
|
||||||
'code': code
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
async function inject_css_into_tab(tab, style) {
|
|
||||||
return await call_server_method("inject_css_into_tab", {
|
|
||||||
'tab': tab,
|
|
||||||
'style': style
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
async function remove_css_from_tab(tab, css_id) {
|
|
||||||
return await call_server_method("remove_css_from_tab", {
|
|
||||||
'tab': tab,
|
|
||||||
'css_id': css_id
|
|
||||||
});
|
|
||||||
}
|
|
||||||
@@ -16,8 +16,8 @@ from typing import TYPE_CHECKING
|
|||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from .main import PluginManager
|
from .main import PluginManager
|
||||||
|
|
||||||
from .injector import get_tab, get_gamepadui_tab
|
from .injector import get_gamepadui_tab
|
||||||
from .plugin import PluginWrapper
|
from .plugin.plugin import PluginWrapper
|
||||||
|
|
||||||
Plugins = dict[str, PluginWrapper]
|
Plugins = dict[str, PluginWrapper]
|
||||||
ReloadQueue = Queue[Tuple[str, str, bool | None] | Tuple[str, str]]
|
ReloadQueue = Queue[Tuple[str, str, bool | None] | Tuple[str, str]]
|
||||||
@@ -143,7 +143,7 @@ class Loader:
|
|||||||
self.plugins.pop(plugin.name, None)
|
self.plugins.pop(plugin.name, None)
|
||||||
if plugin.passive:
|
if plugin.passive:
|
||||||
self.logger.info(f"Plugin {plugin.name} is passive")
|
self.logger.info(f"Plugin {plugin.name} is passive")
|
||||||
self.plugins[plugin.name] = plugin.start()
|
self.plugins[plugin.name] = plugin
|
||||||
self.logger.info(f"Loaded {plugin.name}")
|
self.logger.info(f"Loaded {plugin.name}")
|
||||||
if not batch:
|
if not batch:
|
||||||
self.loop.create_task(self.dispatch_plugin(plugin.name, plugin.version))
|
self.loop.create_task(self.dispatch_plugin(plugin.name, plugin.version))
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import os, pwd, grp, sys, logging
|
import os, pwd, grp, sys, logging
|
||||||
from subprocess import call, run, DEVNULL, PIPE, STDOUT
|
from subprocess import call, run, DEVNULL, PIPE, STDOUT
|
||||||
from .customtypes import UserType
|
from ..customtypes import UserType
|
||||||
|
|
||||||
logger = logging.getLogger("localplatform")
|
logger = logging.getLogger("localplatform")
|
||||||
|
|
||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
# Change PyInstaller files permissions
|
# Change PyInstaller files permissions
|
||||||
import sys
|
import sys
|
||||||
from typing import Dict
|
from typing import Dict
|
||||||
from .localplatform import (chmod, chown, service_stop, service_start,
|
from .localplatform.localplatform import (chmod, chown, service_stop, service_start,
|
||||||
ON_WINDOWS, get_log_level, get_live_reload,
|
ON_WINDOWS, get_log_level, get_live_reload,
|
||||||
get_server_port, get_server_host, get_chown_plugin_path,
|
get_server_port, get_server_host, get_chown_plugin_path,
|
||||||
get_privileged_path)
|
get_privileged_path)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from json import dump, load
|
from json import dump, load
|
||||||
from os import mkdir, path, listdir, rename
|
from os import mkdir, path, listdir, rename
|
||||||
from typing import Any, Dict
|
from typing import Any, Dict
|
||||||
from .localplatform import chown, folder_owner, get_chown_plugin_path
|
from .localplatform.localplatform import chown, folder_owner, get_chown_plugin_path
|
||||||
from .customtypes import UserType
|
from .customtypes import UserType
|
||||||
|
|
||||||
from .helpers import get_homebrew_path
|
from .helpers import get_homebrew_path
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ from os import getcwd, path, remove
|
|||||||
from typing import TYPE_CHECKING, List, TypedDict
|
from typing import TYPE_CHECKING, List, TypedDict
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from .main import PluginManager
|
from .main import PluginManager
|
||||||
from .localplatform import chmod, service_restart, ON_LINUX, get_keep_systemd_service, get_selinux
|
from .localplatform.localplatform import chmod, service_restart, ON_LINUX, get_keep_systemd_service, get_selinux
|
||||||
|
|
||||||
from aiohttp import ClientSession, web
|
from aiohttp import ClientSession, web
|
||||||
|
|
||||||
|
|||||||
@@ -18,9 +18,9 @@ from .browser import PluginInstallRequest, PluginInstallType
|
|||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from .main import PluginManager
|
from .main import PluginManager
|
||||||
from .injector import inject_to_tab, get_gamepadui_tab, close_old_tabs, get_tab
|
from .injector import inject_to_tab, get_gamepadui_tab, close_old_tabs, get_tab
|
||||||
from .localplatform import ON_WINDOWS
|
from .localplatform.localplatform import ON_WINDOWS
|
||||||
from . import helpers
|
from . import helpers
|
||||||
from .localplatform import service_stop, service_start, get_home_path, get_username
|
from .localplatform.localplatform import service_stop, service_start, get_home_path, get_username
|
||||||
|
|
||||||
class FilePickerObj(TypedDict):
|
class FilePickerObj(TypedDict):
|
||||||
file: Path
|
file: Path
|
||||||
|
|||||||
Reference in New Issue
Block a user