/
Electron.hx
90 lines (86 loc) · 2.71 KB
/
Electron.hx
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
package electron;
import electron.Dialog.Electron_Dialog;
import electron.Menu;
#if !starter
import Main.window;
import js.Syntax;
import electron.FontScanner.FontScannerFallback;
import electron.extern.ElectronRemote;
import electron.extern.*;
import electron.ElectronMacros.*;
/*
* ...
* @author YellowAfterlife
*/
@:native("Electron_API") extern class Electron {
public static inline function isAvailable():Bool {
return Electron != null;
}
public static var shell:Dynamic;
public static var remote:ElectronRemote;
public static var clipboard:Clipboard;
public static var ipcRenderer:Dynamic;
public static inline function init():Void {
inline function load(hxname:String, ename:String):Void {
untyped window[hxname] = require(ename);
}
inline function set(hxname:String, ref:Dynamic):Void {
if (ref == null) throw "Can't find " + hxname;
untyped window[hxname] = ref;
}
inline function blank(hxname:String) {
untyped window[hxname] = null;
}
inline function req(name:String):Dynamic {
return (untyped require)(name);
}
if (untyped window.require != null) {
setExternTypeSafe(Electron, req("electron"));
var ver = (cast window).parseInt((cast window).process.versions.electron);
if (ver >= 14) {
remote = req("@electron/remote");
}
setExternTypeSafe(FileSystem, req("fs"));
setExternTypeSafe(Electron_Dialog, remote.dialog);
Dialog.initWorkarounds();
setExternTypeSafe(IPC, ipcRenderer);
setExternTypeSafe(Shell, shell);
setExternTypeSafe(Menu, remote.Menu);
setExternTypeSafe(MenuItem, remote.MenuItem);
setExternTypeSafe(AppTools, remote.app);
setExternTypeSafe(BrowserWindow, remote.BrowserWindow);
try {
setExternType(FontScanner, req("./native/font-scanner/index.js"));
} catch (x:Dynamic) {
Main.console.warn("font-scanner failed to load: ", x);
setExternType(FontScanner, cast FontScannerFallback);
}
function ensure(dir:String) {
FileSystem.ensureDirSync(dir);
}
var path = AppTools.getPath("userData") + "/GMEdit";
FileWrap.userPath = path;
ensure(path);
ensure(path + "/config");
ensure(path + "/snippets");
ensure(path + "/session");
ensure(path + "/cache");
ensure(path + "/themes");
ensure(path + "/plugins");
ensure(path + "/api");
ensure(path + "/api/v1");
ensure(path + "/api/v2");
ensure(path + "/api/live");
} else {
setExternType(Electron, null);
setExternType(FileSystem, cast FileSystem.FileSystemBrowser);
setExternType(IPC, null);
setExternType(Shell, null);
setExternType(Menu, cast MenuFallback);
setExternType(MenuItem, cast MenuFallback.MenuItemFallback);
setExternType(AppTools, null);
setExternType(FontScanner, cast FontScannerFallback);
}
}
}
#end