Skip to content

Commit 5b71b25

Browse files
fix: android
1 parent f6a1610 commit 5b71b25

8 files changed

Lines changed: 85 additions & 34 deletions

File tree

Dockerfile

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,14 @@ WORKDIR /app
6161
COPY package.json package-lock.json* ./
6262
RUN npm ci --omit=dev
6363

64+
# Pre-cache Capacitor dependencies for Android builds
65+
RUN mkdir -p /tmp/capacitor-cache && \
66+
cd /tmp/capacitor-cache && \
67+
echo '{"dependencies":{"@capacitor/cli":"^8.0.0","@capacitor-community/text-to-speech":"git+https://github.com/capacitor-community/text-to-speech.git#v8.0.0","@capacitor/android":"^8.0.0","@capacitor/assets":"^3.0.5","@capacitor/core":"^8.0.0"}}' > package.json && \
68+
npm install && \
69+
cd / && \
70+
rm -rf /tmp/capacitor-cache
71+
6472
# Copy the dist folder
6573
COPY dist/ ./dist/
6674

dist/index.js

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/server/public/app.js

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ function updateFileList() {
193193
<span class="file-size">${formatFileSize(file.size)}</span>
194194
<button type="button" class="remove-file" data-index="${index}" title="Entfernen">×</button>
195195
</div>
196-
`
196+
`,
197197
)
198198
.join('')
199199

@@ -261,7 +261,7 @@ function initializeExportSelection() {
261261
const checkedPreset = document.querySelector('input[name="preset"]:checked')
262262
if (checkedPreset) {
263263
const presetOptions = JSON.parse(
264-
checkedPreset.dataset.presetOptions || '{}'
264+
checkedPreset.dataset.presetOptions || '{}',
265265
)
266266
const format = presetOptions.format || checkedPreset.value
267267
applyPresetOptions(checkedPreset)
@@ -330,11 +330,25 @@ function updateAdvancedSettings(selectedValue) {
330330
if (group.classList.contains('no-settings')) return
331331

332332
const formats = group.dataset.formats
333-
if (formats && formats.split(',').includes(selectedValue)) {
333+
const isVisible = formats && formats.split(',').includes(selectedValue)
334+
335+
if (isVisible) {
334336
group.style.display = 'block'
335337
hasVisibleSettings = true
338+
// Enable required fields in visible groups
339+
group
340+
.querySelectorAll('input[data-required], select[data-required]')
341+
.forEach((field) => {
342+
field.required = true
343+
})
336344
} else {
337345
group.style.display = 'none'
346+
// Disable required fields in hidden groups to prevent validation errors
347+
group
348+
.querySelectorAll('input[required], select[required]')
349+
.forEach((field) => {
350+
field.required = false
351+
})
338352
}
339353
})
340354

@@ -401,10 +415,10 @@ function initializeForm() {
401415

402416
// Add export target
403417
const selectedPreset = document.querySelector(
404-
'input[name="preset"]:checked'
418+
'input[name="preset"]:checked',
405419
)
406420
const selectedFormat = document.querySelector(
407-
'input[name="format"]:checked'
421+
'input[name="format"]:checked',
408422
)
409423

410424
if (selectedPreset) {

dist/server/public/index.html

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -823,25 +823,28 @@ <h3 class="settings-heading">PDF Einstellungen</h3>
823823
<h3 class="settings-heading">Android Einstellungen</h3>
824824

825825
<div class="form-group">
826-
<label for="appName">App Name</label>
826+
<label for="androidAppName">App Name</label>
827827
<input
828828
type="text"
829-
id="appName"
830-
name="option_appName"
829+
id="androidAppName"
830+
name="option_android-appName"
831831
placeholder="Meine App"
832832
/>
833833
<span class="hint">Name der Android-App</span>
834834
</div>
835835

836836
<div class="form-group">
837-
<label for="packageId">Package ID</label>
837+
<label for="androidAppId">App ID *</label>
838838
<input
839839
type="text"
840-
id="packageId"
841-
name="option_packageId"
842-
placeholder="com.example.app"
840+
id="androidAppId"
841+
name="option_android-appId"
842+
placeholder="io.github.liascript"
843+
data-required="true"
843844
/>
844-
<span class="hint">Eindeutige Package-Identifier</span>
845+
<span class="hint"
846+
>Eindeutiger App-Identifier (z.B. io.github.liascript)</span
847+
>
845848
</div>
846849
</div>
847850

src/export/android.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,8 @@ export default config`,
168168
return
169169
}
170170

171+
console.warn('XXXXXXXXXXXXXXXXXXXXXXXxx Prepared project in ' + tmp)
172+
171173
execute(
172174
[
173175
'npm i',
@@ -258,7 +260,7 @@ function execute(cmds: string[], cwd: string, callback: () => void) {
258260
const cmd = cmds.shift()
259261

260262
if (cmd) {
261-
console.log('exec:', cmd)
263+
console.warn('XXXXXXXXXXXXXx exec:', cmd)
262264
exec(
263265
cmd,
264266
{ cwd: cwd },

src/server/public/app.js

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ function updateFileList() {
193193
<span class="file-size">${formatFileSize(file.size)}</span>
194194
<button type="button" class="remove-file" data-index="${index}" title="Entfernen">×</button>
195195
</div>
196-
`
196+
`,
197197
)
198198
.join('')
199199

@@ -261,7 +261,7 @@ function initializeExportSelection() {
261261
const checkedPreset = document.querySelector('input[name="preset"]:checked')
262262
if (checkedPreset) {
263263
const presetOptions = JSON.parse(
264-
checkedPreset.dataset.presetOptions || '{}'
264+
checkedPreset.dataset.presetOptions || '{}',
265265
)
266266
const format = presetOptions.format || checkedPreset.value
267267
applyPresetOptions(checkedPreset)
@@ -330,11 +330,25 @@ function updateAdvancedSettings(selectedValue) {
330330
if (group.classList.contains('no-settings')) return
331331

332332
const formats = group.dataset.formats
333-
if (formats && formats.split(',').includes(selectedValue)) {
333+
const isVisible = formats && formats.split(',').includes(selectedValue)
334+
335+
if (isVisible) {
334336
group.style.display = 'block'
335337
hasVisibleSettings = true
338+
// Enable required fields in visible groups
339+
group
340+
.querySelectorAll('input[data-required], select[data-required]')
341+
.forEach((field) => {
342+
field.required = true
343+
})
336344
} else {
337345
group.style.display = 'none'
346+
// Disable required fields in hidden groups to prevent validation errors
347+
group
348+
.querySelectorAll('input[required], select[required]')
349+
.forEach((field) => {
350+
field.required = false
351+
})
338352
}
339353
})
340354

@@ -401,10 +415,10 @@ function initializeForm() {
401415

402416
// Add export target
403417
const selectedPreset = document.querySelector(
404-
'input[name="preset"]:checked'
418+
'input[name="preset"]:checked',
405419
)
406420
const selectedFormat = document.querySelector(
407-
'input[name="format"]:checked'
421+
'input[name="format"]:checked',
408422
)
409423

410424
if (selectedPreset) {

src/server/public/index.html

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -823,25 +823,28 @@ <h3 class="settings-heading">PDF Einstellungen</h3>
823823
<h3 class="settings-heading">Android Einstellungen</h3>
824824

825825
<div class="form-group">
826-
<label for="appName">App Name</label>
826+
<label for="androidAppName">App Name</label>
827827
<input
828828
type="text"
829-
id="appName"
830-
name="option_appName"
829+
id="androidAppName"
830+
name="option_android-appName"
831831
placeholder="Meine App"
832832
/>
833833
<span class="hint">Name der Android-App</span>
834834
</div>
835835

836836
<div class="form-group">
837-
<label for="packageId">Package ID</label>
837+
<label for="androidAppId">App ID *</label>
838838
<input
839839
type="text"
840-
id="packageId"
841-
name="option_packageId"
842-
placeholder="com.example.app"
840+
id="androidAppId"
841+
name="option_android-appId"
842+
placeholder="io.github.liascript"
843+
data-required="true"
843844
/>
844-
<span class="hint">Eindeutige Package-Identifier</span>
845+
<span class="hint"
846+
>Eindeutiger App-Identifier (z.B. io.github.liascript)</span
847+
>
845848
</div>
846849
</div>
847850

src/server/queue/jobQueue.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ export class JobQueue extends EventEmitter {
269269
ims: ['ims'],
270270
web: ['web'],
271271
pdf: ['pdf'],
272-
android: ['app', 'package'],
272+
android: ['android'],
273273
ios: ['ios'],
274274
epub: ['epub'],
275275
json: ['json'],
@@ -312,8 +312,14 @@ export class JobQueue extends EventEmitter {
312312
}
313313

314314
// Default mapper for formats without special mapping
315-
const defaultMapper = (key: string) =>
316-
key.replace(/([A-Z])/g, '-$1').toLowerCase()
315+
const defaultMapper = (key: string) => {
316+
// If the key already contains hyphens (kebab-case), return as-is
317+
if (key.includes('-')) {
318+
return key
319+
}
320+
// Otherwise convert camelCase to kebab-case
321+
return key.replace(/([A-Z])/g, '-$1').toLowerCase()
322+
}
317323

318324
// Get valid prefixes for the current format
319325
const validPrefixes = formatOptionPrefixes[format] || []
@@ -351,6 +357,7 @@ export class JobQueue extends EventEmitter {
351357
)
352358

353359
if (!belongsToThisFormat || belongsToOtherFormat) {
360+
console.log(`[DEBUG] SKIPPING option: ${key}`)
354361
continue
355362
}
356363
}

0 commit comments

Comments
 (0)