Skip to content

Commit 9a6726a

Browse files
authored
Merge pull request #29 from timonmdy/v2.2/hotfix-1
Languages for FAQ
2 parents 4f74d5f + 0bc9b57 commit 9a6726a

28 files changed

Lines changed: 488 additions & 188 deletions

languages/de.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@
192192
"panels.settings": "Anwendungseinstellungen",
193193
"panels.faq": "FAQ",
194194
"panels.utilities": "Werkzeuge",
195-
"panels.developer": "Entwickler",
195+
"panels.developer": "Entwickleroptionen",
196196
"dev.mode": "Entwicklermodus",
197197
"faq.searchPlaceholder": "FAQ durchsuchen...",
198198
"faq.noResults": "Keine Ergebnisse gefunden.",

src/main/AssetManager.ts

Lines changed: 55 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,18 @@ function httpsGetJson(url: string): Promise<unknown> {
2323
let data = '';
2424
res.on('data', (c) => (data += c));
2525
res.on('end', () => {
26-
try { resolve(JSON.parse(data)); }
27-
catch { reject(new Error('JSON parse error')); }
26+
try {
27+
resolve(JSON.parse(data));
28+
} catch {
29+
reject(new Error('JSON parse error'));
30+
}
2831
});
2932
});
3033
req.on('error', reject);
31-
req.setTimeout(10000, () => { req.destroy(); reject(new Error('Timeout')); });
34+
req.setTimeout(10000, () => {
35+
req.destroy();
36+
reject(new Error('Timeout'));
37+
});
3238
});
3339
}
3440

@@ -80,7 +86,11 @@ export function setActiveTheme(themeId: string): ThemeDefinition {
8086
return getActiveTheme();
8187
}
8288

83-
export async function fetchRemoteThemes(): Promise<{ ok: boolean; themes?: ThemeDefinition[]; error?: string }> {
89+
export async function fetchRemoteThemes(): Promise<{
90+
ok: boolean;
91+
themes?: ThemeDefinition[];
92+
error?: string;
93+
}> {
8494
try {
8595
const listing = await httpsGetJson(contentsUrl(THEME_GITHUB_PATH));
8696
if (!Array.isArray(listing)) return { ok: false, error: 'Themes folder not found' };
@@ -89,24 +99,30 @@ export async function fetchRemoteThemes(): Promise<{ ok: boolean; themes?: Theme
8999
try {
90100
const theme = (await httpsGetJson(rawUrl(THEME_GITHUB_PATH, f.name))) as ThemeDefinition;
91101
if (theme.id && theme.name && theme.colors) themes.push(theme);
92-
} catch { /* skip */ }
102+
} catch {
103+
/* skip */
104+
}
93105
}
94106
return { ok: true, themes };
95107
} catch (e) {
96108
return { ok: false, error: String(e) };
97109
}
98110
}
99111

100-
export async function checkThemeUpdate(themeId: string): Promise<{ hasUpdate: boolean; remoteVersion: number; localVersion: number }> {
112+
export async function checkThemeUpdate(
113+
themeId: string
114+
): Promise<{ hasUpdate: boolean; remoteVersion: number; localVersion: number }> {
101115
const state = loadThemeState();
102116
const local = state.themes.find((t) => t.id === themeId);
103117
if (!local) return { hasUpdate: false, remoteVersion: 0, localVersion: 0 };
104118

105119
const result = await fetchRemoteThemes();
106-
if (!result.ok || !result.themes) return { hasUpdate: false, remoteVersion: local.version, localVersion: local.version };
120+
if (!result.ok || !result.themes)
121+
return { hasUpdate: false, remoteVersion: local.version, localVersion: local.version };
107122

108123
const remote = result.themes.find((t) => t.id === themeId);
109-
if (!remote) return { hasUpdate: false, remoteVersion: local.version, localVersion: local.version };
124+
if (!remote)
125+
return { hasUpdate: false, remoteVersion: local.version, localVersion: local.version };
110126

111127
return {
112128
hasUpdate: remote.version > local.version,
@@ -177,33 +193,45 @@ export function setActiveLanguage(langId: string): LanguageDefinition {
177193
return getActiveLanguage();
178194
}
179195

180-
export async function fetchRemoteLanguages(): Promise<{ ok: boolean; languages?: LanguageDefinition[]; error?: string }> {
196+
export async function fetchRemoteLanguages(): Promise<{
197+
ok: boolean;
198+
languages?: LanguageDefinition[];
199+
error?: string;
200+
}> {
181201
try {
182202
const listing = await httpsGetJson(contentsUrl(GITHUB_CONFIG.languagesPath));
183203
if (!Array.isArray(listing)) return { ok: false, error: 'Languages folder not found' };
184204
const languages: LanguageDefinition[] = [];
185205
for (const f of (listing as Array<{ name: string }>).filter((f) => f.name.endsWith('.json'))) {
186206
try {
187-
const lang = (await httpsGetJson(rawUrl(GITHUB_CONFIG.languagesPath, f.name))) as LanguageDefinition;
207+
const lang = (await httpsGetJson(
208+
rawUrl(GITHUB_CONFIG.languagesPath, f.name)
209+
)) as LanguageDefinition;
188210
if (lang.id && lang.name && lang.strings) languages.push(lang);
189-
} catch { /* skip */ }
211+
} catch {
212+
/* skip */
213+
}
190214
}
191215
return { ok: true, languages };
192216
} catch (e) {
193217
return { ok: false, error: String(e) };
194218
}
195219
}
196220

197-
export async function checkLanguageUpdate(langId: string): Promise<{ hasUpdate: boolean; remoteVersion: number; localVersion: number }> {
221+
export async function checkLanguageUpdate(
222+
langId: string
223+
): Promise<{ hasUpdate: boolean; remoteVersion: number; localVersion: number }> {
198224
const state = loadLanguageState();
199225
const local = state.languages.find((l) => l.id === langId);
200226
if (!local) return { hasUpdate: false, remoteVersion: 0, localVersion: 0 };
201227

202228
const result = await fetchRemoteLanguages();
203-
if (!result.ok || !result.languages) return { hasUpdate: false, remoteVersion: local.version, localVersion: local.version };
229+
if (!result.ok || !result.languages)
230+
return { hasUpdate: false, remoteVersion: local.version, localVersion: local.version };
204231

205232
const remote = result.languages.find((l) => l.id === langId);
206-
if (!remote) return { hasUpdate: false, remoteVersion: local.version, localVersion: local.version };
233+
if (!remote)
234+
return { hasUpdate: false, remoteVersion: local.version, localVersion: local.version };
207235

208236
return {
209237
hasUpdate: remote.version > local.version,
@@ -212,7 +240,9 @@ export async function checkLanguageUpdate(langId: string): Promise<{ hasUpdate:
212240
};
213241
}
214242

215-
export async function applyLanguageUpdate(langId: string): Promise<{ ok: boolean; error?: string }> {
243+
export async function applyLanguageUpdate(
244+
langId: string
245+
): Promise<{ ok: boolean; error?: string }> {
216246
const result = await fetchRemoteLanguages();
217247
if (!result.ok || !result.languages) return { ok: false, error: result.error ?? 'Fetch failed' };
218248

@@ -244,14 +274,17 @@ function projectRoot(): string {
244274
export function loadLocalDevThemes(): ThemeDefinition[] {
245275
const dir = path.join(projectRoot(), 'themes');
246276
if (!fs.existsSync(dir)) return [];
247-
return fs.readdirSync(dir)
277+
return fs
278+
.readdirSync(dir)
248279
.filter((f) => f.endsWith('.json'))
249280
.map((f) => {
250281
try {
251282
const raw = fs.readFileSync(path.join(dir, f), 'utf8');
252283
const theme = JSON.parse(raw) as ThemeDefinition;
253284
if (theme.id && theme.name && theme.colors) return theme;
254-
} catch { /* skip */ }
285+
} catch {
286+
/* skip */
287+
}
255288
return null;
256289
})
257290
.filter((t): t is ThemeDefinition => t !== null);
@@ -260,14 +293,17 @@ export function loadLocalDevThemes(): ThemeDefinition[] {
260293
export function loadLocalDevLanguages(): LanguageDefinition[] {
261294
const dir = path.join(projectRoot(), 'languages');
262295
if (!fs.existsSync(dir)) return [];
263-
return fs.readdirSync(dir)
296+
return fs
297+
.readdirSync(dir)
264298
.filter((f) => f.endsWith('.json'))
265299
.map((f) => {
266300
try {
267301
const raw = fs.readFileSync(path.join(dir, f), 'utf8');
268302
const lang = JSON.parse(raw) as LanguageDefinition;
269303
if (lang.id && lang.name && lang.strings) return lang;
270-
} catch { /* skip */ }
304+
} catch {
305+
/* skip */
306+
}
271307
return null;
272308
})
273309
.filter((l): l is LanguageDefinition => l !== null);
@@ -286,4 +322,3 @@ export function syncLocalDevAssets(): { themes: number; languages: number } {
286322
}
287323
return { themes: tc, languages: lc };
288324
}
289-

src/main/FileLogger.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,18 @@ export function getLogFiles(profileId: string): LogFileInfo[] {
114114
filename,
115115
filePath,
116116
size: stat.size,
117-
startedAt: match?.[1]?.replace(/_/g, ' ').replace(/-/g, ':').replace(/^(\d{4}):/, '$1-').replace(/:(\d{2}):/, '-$1 ') ?? '',
118-
stoppedAt: match?.[2]?.replace(/_/g, ' ').replace(/-/g, ':').replace(/^(\d{4}):/, '$1-').replace(/:(\d{2}):/, '-$1 ') ?? undefined,
117+
startedAt:
118+
match?.[1]
119+
?.replace(/_/g, ' ')
120+
.replace(/-/g, ':')
121+
.replace(/^(\d{4}):/, '$1-')
122+
.replace(/:(\d{2}):/, '-$1 ') ?? '',
123+
stoppedAt:
124+
match?.[2]
125+
?.replace(/_/g, ' ')
126+
.replace(/-/g, ':')
127+
.replace(/^(\d{4}):/, '$1-')
128+
.replace(/:(\d{2}):/, '-$1 ') ?? undefined,
119129
};
120130
})
121131
.sort((a, b) => b.filename.localeCompare(a.filename));

src/main/ProcessManager.ts

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -140,10 +140,7 @@ class ProcessManager {
140140
this.window = win;
141141
}
142142

143-
private buildArgs(
144-
profile: Profile,
145-
resolvedJarPath: string
146-
): { cmd: string; args: string[] } {
143+
private buildArgs(profile: Profile, resolvedJarPath: string): { cmd: string; args: string[] } {
147144
const cmd = profile.javaPath || 'java';
148145
const args: string[] = [];
149146
for (const a of profile.jvmArgs) if (a.enabled && a.value.trim()) args.push(a.value.trim());
@@ -303,7 +300,12 @@ class ProcessManager {
303300
m.intentionallyStopped = true;
304301
this.cancelRestartTimer(profileId);
305302

306-
this.pushSystem('stopping', profileId, String(m.process.pid ?? 0), 'Stopping process gracefully...');
303+
this.pushSystem(
304+
'stopping',
305+
profileId,
306+
String(m.process.pid ?? 0),
307+
'Stopping process gracefully...'
308+
);
307309

308310
gracefulStop(
309311
m.process,
@@ -587,11 +589,7 @@ class ProcessManager {
587589
}
588590
}
589591

590-
private flushPartial(
591-
profileId: string,
592-
type: 'stdout' | 'stderr',
593-
m: ManagedProcess
594-
) {
592+
private flushPartial(profileId: string, type: 'stdout' | 'stderr', m: ManagedProcess) {
595593
const partialKey = type === 'stdout' ? 'stdoutPartial' : 'stderrPartial';
596594
const text = m[partialKey].trim();
597595
if (!text) return;

src/main/ipc/Process.ipc.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,8 @@ export const ProcessIPC = {
6262
handler: (_e: any, profileId: string) => {
6363
const profile = getAllProfiles().find((p) => p.id === profileId);
6464
if (!profile) return { ok: false, error: 'Profile not found' };
65-
const dir = profile.workingDir || (profile.jarPath ? require('path').dirname(profile.jarPath) : '');
65+
const dir =
66+
profile.workingDir || (profile.jarPath ? require('path').dirname(profile.jarPath) : '');
6667
if (!dir) return { ok: false, error: 'No working directory configured' };
6768
shell.openPath(dir);
6869
return { ok: true };

src/main/shared/config/GitHub.config.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,7 @@ export const GITHUB_CONFIG = {
1414
templateMinVersion: 1,
1515
apiBase: 'https://api.github.com',
1616

17-
trustedPublishers: [
18-
{ login: 'timonmdy', label: 'Lead Developer' },
19-
] as TrustedPublisher[],
17+
trustedPublishers: [{ login: 'timonmdy', label: 'Lead Developer' }] as TrustedPublisher[],
2018

2119
automationAccounts: ['github-actions[bot]', 'github-actions'],
2220
} as const;
@@ -39,13 +37,11 @@ export function rawTemplateUrl(filename: string): string {
3937

4038
export function getPublisherTrust(login: string): { level: TrustLevel; label: string } {
4139
const trusted = GITHUB_CONFIG.trustedPublishers.find(
42-
(p) => p.login.toLowerCase() === login.toLowerCase(),
40+
(p) => p.login.toLowerCase() === login.toLowerCase()
4341
);
4442
if (trusted) return { level: 'trusted', label: trusted.label };
4543

46-
if (
47-
GITHUB_CONFIG.automationAccounts.some((a) => a.toLowerCase() === login.toLowerCase())
48-
) {
44+
if (GITHUB_CONFIG.automationAccounts.some((a) => a.toLowerCase() === login.toLowerCase())) {
4945
return { level: 'automation', label: 'GitHub Actions' };
5046
}
5147

0 commit comments

Comments
 (0)