-
Notifications
You must be signed in to change notification settings - Fork 81
/
Directories.ts
109 lines (87 loc) · 3.82 KB
/
Directories.ts
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
import path from "path";
import { Addon } from "renderer/utils/InstallerConfiguration";
import fs from "fs-extra";
import settings from "common/settings";
export class Directories {
static community(): string {
return settings.get('mainSettings.msfsPackagePath') as string;
}
static inCommunity(targetDir: string): string {
return path.join(Directories.community(), targetDir);
}
static tempLocation(): string {
return settings.get('mainSettings.separateTempLocation') ? settings.get('mainSettings.tempLocation') as string : settings.get('mainSettings.msfsPackagePath') as string;
}
static inTempLocation(targetDir: string): string {
return path.join(Directories.tempLocation(), targetDir);
}
static liveries(): string {
return settings.get('mainSettings.liveriesPath') as string;
}
static inLiveries(targetDir: string): string {
return path.join(settings.get('mainSettings.liveriesPath') as string, targetDir);
}
static inPackagesMicrosoftStore(targetDir: string): string {
return path.join(process.env.LOCALAPPDATA, 'Packages\\Microsoft.FlightSimulator_8wekyb3d8bbwe\\LocalState\\packages\\', targetDir);
}
static inPackagesSteam(targetDir: string): string {
return path.join(process.env.APPDATA, 'Microsoft Flight Simulator\\Packages', targetDir);
}
static temp(): string {
const dir = path.join(Directories.tempLocation(), `flybywire_current_install_${(Math.random() * 1000).toFixed(0)}`);
if (fs.existsSync(dir)) {
return Directories.temp();
}
return dir;
}
static removeAllTemp(): void {
console.log('[CLEANUP] Removing all temp directories');
if (!fs.existsSync(Directories.tempLocation())) {
console.warn('[CLEANUP] Location of temporary folders does not exist. Aborting');
return;
}
fs.readdirSync(Directories.tempLocation(), { withFileTypes: true })
.filter(dirEnt => dirEnt.isDirectory())
.filter(dirEnt => dirEnt.name.startsWith('flybywire_current_install_'))
.forEach(dir => {
const fullPath = Directories.inTempLocation(dir.name);
console.log('[CLEANUP] Removing', fullPath);
fs.removeSync(fullPath);
console.log('[CLEANUP] Removed', fullPath);
});
console.log('[CLEANUP] Finished removing all temp directories');
}
static removeAlternativesForAddon(addon: Addon): void {
addon.alternativeNames?.forEach(altName => {
const altDir = Directories.inCommunity(altName);
if (fs.existsSync(altDir)) {
console.log('Removing alternative', altDir);
fs.removeSync(altDir);
}
});
}
static removeTargetForAddon(addon: Addon): void {
const dir = Directories.inCommunity(addon.targetDirectory);
if (fs.existsSync(dir)) {
console.log('Removing', dir);
fs.removeSync(dir);
}
}
static isFragmenterInstall(target: string | Addon): boolean {
const targetDir = typeof target === 'string' ? target : Directories.inCommunity(target.targetDirectory);
return fs.existsSync(path.join(targetDir, 'install.json'));
}
static isGitInstall(target: string | Addon): boolean {
const targetDir = typeof target === 'string' ? target : Directories.inCommunity(target.targetDirectory);
try {
const symlinkPath = fs.readlinkSync(targetDir);
if (symlinkPath && fs.existsSync(path.join(symlinkPath, '/../.git'))) {
console.log('Is git repo', targetDir);
return true;
}
} catch {
console.log('Is not git repo', targetDir);
return false;
}
}
}