Compare commits
8
Commits
cb3cb451db
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
98e5e86a2a | ||
|
|
fb3b98d98a | ||
|
|
36392679c4 | ||
|
|
0f7d0def17 | ||
|
|
e8925b2b62 | ||
|
|
a7b728fba6 | ||
|
|
583b0d034e | ||
|
|
5eb82f83b0 |
@@ -5,6 +5,7 @@ import CameraScreen from './src/screens/CameraScreen';
|
||||
import PreviewScreen from './src/screens/PreviewScreen';
|
||||
import AdminScreen from './src/screens/AdminScreen';
|
||||
import { loadSettings, saveSettings, AppSettings } from './src/services/settings';
|
||||
import { StickerData } from './src/components/DraggableSticker';
|
||||
import { logger, setLogsEnabled } from './src/services/logger';
|
||||
import * as FileSystem from 'expo-file-system/legacy';
|
||||
|
||||
@@ -29,6 +30,10 @@ export default function App() {
|
||||
const [settings, setSettings] = useState<AppSettings | null>(null);
|
||||
const [showEventModal, setShowEventModal] = useState(false);
|
||||
const [tempEventName, setTempEventName] = useState('');
|
||||
|
||||
// Persist edits across camera switches for collages
|
||||
const [stickers, setStickers] = useState<StickerData[]>([]);
|
||||
const [selectedFrameId, setSelectedFrameId] = useState<string | null>(null);
|
||||
|
||||
// 1. Load configuration settings on app start
|
||||
useEffect(() => {
|
||||
@@ -45,6 +50,10 @@ export default function App() {
|
||||
console.warn('Failed to auto-start Kiosk mode:', e);
|
||||
}
|
||||
}
|
||||
|
||||
if (savedSettings.frameMode === 'always') {
|
||||
setSelectedFrameId(savedSettings.selectedFrameId);
|
||||
}
|
||||
}
|
||||
initApp();
|
||||
}, []);
|
||||
@@ -67,6 +76,8 @@ export default function App() {
|
||||
}
|
||||
setPhotoUris([]);
|
||||
setCaptureHistory([]);
|
||||
setStickers([]);
|
||||
setSelectedFrameId(settings?.frameMode === 'always' ? settings.selectedFrameId : null);
|
||||
setCurrentScreen('camera');
|
||||
};
|
||||
|
||||
@@ -81,6 +92,8 @@ export default function App() {
|
||||
// Resume start
|
||||
setPhotoUris([]);
|
||||
setCaptureHistory([]);
|
||||
setStickers([]);
|
||||
setSelectedFrameId(updated.frameMode === 'always' ? updated.selectedFrameId : null);
|
||||
setCurrentScreen('camera');
|
||||
};
|
||||
|
||||
@@ -110,26 +123,7 @@ export default function App() {
|
||||
setCurrentScreen('preview');
|
||||
};
|
||||
|
||||
const handleRetakeLast = async () => {
|
||||
// Remove photos from the last capture event
|
||||
const lastCaptureCount = captureHistory.length > 0 ? captureHistory[captureHistory.length - 1] : 1;
|
||||
const updatedUris = [...photoUris];
|
||||
const removedUris = updatedUris.splice(-lastCaptureCount, lastCaptureCount);
|
||||
setPhotoUris(updatedUris);
|
||||
setCaptureHistory((prev) => prev.slice(0, -1));
|
||||
|
||||
// Clean up temp files
|
||||
for (const uri of removedUris) {
|
||||
try {
|
||||
await FileSystem.deleteAsync(uri, { idempotent: true });
|
||||
} catch (e) {
|
||||
console.warn('Failed to delete temp file:', e);
|
||||
}
|
||||
}
|
||||
|
||||
// Always let user retake
|
||||
setCurrentScreen('camera');
|
||||
};
|
||||
|
||||
const handleAddAnother = () => {
|
||||
setCurrentScreen('camera');
|
||||
@@ -146,6 +140,8 @@ export default function App() {
|
||||
}
|
||||
setPhotoUris([]);
|
||||
setCaptureHistory([]);
|
||||
setStickers([]);
|
||||
setSelectedFrameId(settings?.frameMode === 'always' ? settings.selectedFrameId : null);
|
||||
setCurrentScreen('home'); // Go to home when cancelled
|
||||
};
|
||||
|
||||
@@ -199,7 +195,6 @@ export default function App() {
|
||||
<PreviewScreen
|
||||
photoUris={photoUris}
|
||||
printerIp={settings.printerIp}
|
||||
onRetakeLast={handleRetakeLast}
|
||||
onAddAnother={handleAddAnother}
|
||||
onReset={handleReset}
|
||||
frameMode={settings.frameMode}
|
||||
@@ -208,6 +203,10 @@ export default function App() {
|
||||
dateOverlay={settings.dateOverlay}
|
||||
dateOverlayTransform={settings.dateOverlayTransform}
|
||||
eventText={settings.eventText}
|
||||
stickers={stickers}
|
||||
setStickers={setStickers}
|
||||
selectedFrameId={selectedFrameId}
|
||||
setSelectedFrameId={setSelectedFrameId}
|
||||
/>
|
||||
</View>
|
||||
)}
|
||||
|
||||
Binary file not shown.
@@ -45,3 +45,49 @@
|
||||
42514 42649 8048871219047361 C:/GitHub/Schnappix/android/app/build/intermediates/cxx/RelWithDebInfo/3x5j4n2e/obj/arm64-v8a/libappmodules.so 22f7dfe7517aece
|
||||
20 71 0 C:/GitHub/Schnappix/android/app/.cxx/RelWithDebInfo/3x5j4n2e/arm64-v8a/CMakeFiles/cmake.verify_globs 5250f1b80cb55465
|
||||
2 24 0 C:/GitHub/Schnappix/android/app/.cxx/RelWithDebInfo/3x5j4n2e/arm64-v8a/CMakeFiles/cmake.verify_globs 5250f1b80cb55465
|
||||
6 63 0 C:/GitHub/Schnappix/android/app/.cxx/RelWithDebInfo/3x5j4n2e/arm64-v8a/CMakeFiles/cmake.verify_globs 5250f1b80cb55465
|
||||
16 68 0 C:/GitHub/Schnappix/android/app/.cxx/RelWithDebInfo/3x5j4n2e/arm64-v8a/CMakeFiles/cmake.verify_globs 5250f1b80cb55465
|
||||
39 11962 8067876840172561 rngesturehandler_codegen_autolinked_build/CMakeFiles/react_codegen_rngesturehandler_codegen.dir/react/renderer/components/rngesturehandler_codegen/States.cpp.o 514f8eadb5ceae54
|
||||
93 12270 8067876841950033 rnreanimated_autolinked_build/CMakeFiles/react_codegen_rnreanimated.dir/react/renderer/components/rnreanimated/States.cpp.o c0e323ac87ca8f5
|
||||
67 38259 8067877103673433 rnreanimated_autolinked_build/CMakeFiles/react_codegen_rnreanimated.dir/react/renderer/components/rnreanimated/EventEmitters.cpp.o 5fab905c5a1886af
|
||||
34 41433 8067877135401579 rngesturehandler_codegen_autolinked_build/CMakeFiles/react_codegen_rngesturehandler_codegen.dir/react/renderer/components/rngesturehandler_codegen/EventEmitters.cpp.o 5865a655bb29d648
|
||||
80 46060 8067877179734156 rnreanimated_autolinked_build/CMakeFiles/react_codegen_rnreanimated.dir/react/renderer/components/rnreanimated/Props.cpp.o bc975827f9c392af
|
||||
12050 50306 8067877222554408 rnsvg_autolinked_build/CMakeFiles/react_codegen_rnsvg.dir/ed4baae83e9195c96c883bf313e2f3f9/common/cpp/react/renderer/components/rnsvg/RNSVGLayoutableShadowNode.cpp.o 6a6264bd229fa67
|
||||
50397 53390 8067877254648648 rnsvg_autolinked_build/CMakeFiles/react_codegen_rnsvg.dir/b27a5e984ce42aaf944331ae62f1045c/build/generated/source/codegen/jni/react/renderer/components/rnsvg/States.cpp.o f5996da00b619a22
|
||||
107 55300 8067877273666426 rnreanimated_autolinked_build/CMakeFiles/react_codegen_rnreanimated.dir/rnreanimated-generated.cpp.o f2504786ca5135e
|
||||
61 59148 8067877309658268 rngesturehandler_codegen_autolinked_build/CMakeFiles/react_codegen_rngesturehandler_codegen.dir/rngesturehandler_codegen-generated.cpp.o 61eb1759977b64c9
|
||||
86 60104 8067877321444368 rnreanimated_autolinked_build/CMakeFiles/react_codegen_rnreanimated.dir/react/renderer/components/rnreanimated/ShadowNodes.cpp.o 5a8c7b1eb7201a39
|
||||
53466 60764 8067877328135231 rnsvg_autolinked_build/CMakeFiles/react_codegen_rnsvg.dir/b27a5e984ce42aaf944331ae62f1045c/build/generated/source/codegen/jni/react/renderer/components/rnsvg/EventEmitters.cpp.o 2fdf9d8e033877e8
|
||||
99 61191 8067877333531999 rnreanimated_autolinked_build/CMakeFiles/react_codegen_rnreanimated.dir/react/renderer/components/rnreanimated/rnreanimatedJSI-generated.cpp.o 81983df5eac725cd
|
||||
44 61476 8067877336170327 rngesturehandler_codegen_autolinked_build/CMakeFiles/react_codegen_rngesturehandler_codegen.dir/react/renderer/components/rngesturehandler_codegen/ShadowNodes.cpp.o ef1e8f41cf50d620
|
||||
73 62158 8067877343034540 rnreanimated_autolinked_build/CMakeFiles/react_codegen_rnreanimated.dir/react/renderer/components/rnreanimated/ComponentDescriptors.cpp.o 5e49b673eb9e6994
|
||||
56 62412 8067877345657360 rngesturehandler_codegen_autolinked_build/CMakeFiles/react_codegen_rngesturehandler_codegen.dir/bac033cd950586cef66695376748dd33/rngesturehandler_codegenJSI-generated.cpp.o a8621c1dc52de450
|
||||
115 62611 8067877347263395 rnsvg_autolinked_build/CMakeFiles/react_codegen_rnsvg.dir/C_/GitHub/Schnappix/node_modules/react-native-svg/common/cpp/react/renderer/components/rnsvg/RNSVGImageState.cpp.o b39d8ddd78bfed7d
|
||||
60140 62936 8067877352369752 rnviewshot_autolinked_build/CMakeFiles/react_codegen_rnviewshot.dir/react/renderer/components/rnviewshot/ComponentDescriptors.cpp.o e0c859f10011869f
|
||||
60894 63090 8067877352701218 rnviewshot_autolinked_build/CMakeFiles/react_codegen_rnviewshot.dir/react/renderer/components/rnviewshot/EventEmitters.cpp.o b50bb47661446406
|
||||
61265 63885 8067877360703490 rnviewshot_autolinked_build/CMakeFiles/react_codegen_rnviewshot.dir/react/renderer/components/rnviewshot/Props.cpp.o 3ade7339824a7fdd
|
||||
62207 64067 8067877363964917 rnviewshot_autolinked_build/CMakeFiles/react_codegen_rnviewshot.dir/react/renderer/components/rnviewshot/States.cpp.o 1210bb3b266dfaf
|
||||
61579 64266 8067877365915246 rnviewshot_autolinked_build/CMakeFiles/react_codegen_rnviewshot.dir/rnviewshot-generated.cpp.o afcd0969490e9583
|
||||
62485 65578 8067877377623437 rnviewshot_autolinked_build/CMakeFiles/react_codegen_rnviewshot.dir/react/renderer/components/rnviewshot/ShadowNodes.cpp.o c1345a784086bc84
|
||||
62682 65763 8067877378560971 rnviewshot_autolinked_build/CMakeFiles/react_codegen_rnviewshot.dir/react/renderer/components/rnviewshot/rnviewshotJSI-generated.cpp.o 53e5fa6dcffa236
|
||||
63130 66206 8067877383466150 rnworklets_autolinked_build/CMakeFiles/react_codegen_rnworklets.dir/rnworklets-generated.cpp.o b8120434211d4acf
|
||||
62994 66258 8067877383586537 rnworklets_autolinked_build/CMakeFiles/react_codegen_rnworklets.dir/react/renderer/components/rnworklets/ComponentDescriptors.cpp.o bcdbcf721f70c3ad
|
||||
64069 66417 8067877383925564 rnworklets_autolinked_build/CMakeFiles/react_codegen_rnworklets.dir/react/renderer/components/rnworklets/States.cpp.o b0f847c5aa4204aa
|
||||
63970 66658 8067877389336489 rnworklets_autolinked_build/CMakeFiles/react_codegen_rnworklets.dir/react/renderer/components/rnworklets/Props.cpp.o 449860324565a66
|
||||
24 66777 8067877387882726 CMakeFiles/appmodules.dir/OnLoad.cpp.o ec4ae42652f424c6
|
||||
64329 66925 8067877390204586 rnworklets_autolinked_build/CMakeFiles/react_codegen_rnworklets.dir/react/renderer/components/rnworklets/EventEmitters.cpp.o d3445560e89aa213
|
||||
59150 66985 8067877387712638 rnsvg_autolinked_build/CMakeFiles/react_codegen_rnsvg.dir/13532d5ffa794772a98bb0ca30645658/generated/source/codegen/jni/react/renderer/components/rnsvg/rnsvgJSI-generated.cpp.o a853714c3ad1640e
|
||||
122 67108 8067877391158546 rnsvg_autolinked_build/CMakeFiles/react_codegen_rnsvg.dir/C_/GitHub/Schnappix/node_modules/react-native-svg/common/cpp/react/renderer/components/rnsvg/RNSVGShadowNodes.cpp.o 3aaeb3976de48e79
|
||||
65764 68275 8067877406012635 rnworklets_autolinked_build/CMakeFiles/react_codegen_rnworklets.dir/react/renderer/components/rnworklets/rnworkletsJSI-generated.cpp.o c04fc477babbcb5a
|
||||
65580 68729 8067877409322013 rnworklets_autolinked_build/CMakeFiles/react_codegen_rnworklets.dir/react/renderer/components/rnworklets/ShadowNodes.cpp.o 225504c291da8059
|
||||
12271 74455 8067877466238824 rnsvg_autolinked_build/CMakeFiles/react_codegen_rnsvg.dir/C_/GitHub/Schnappix/node_modules/react-native-svg/common/cpp/react/renderer/components/rnsvg/RNSVGImageShadowNode.cpp.o be1b8401c87dbf16
|
||||
46160 79236 8067877514107502 rnsvg_autolinked_build/CMakeFiles/react_codegen_rnsvg.dir/b27a5e984ce42aaf944331ae62f1045c/build/generated/source/codegen/jni/react/renderer/components/rnsvg/ShadowNodes.cpp.o a2b3d7f2a14cc09f
|
||||
29 80750 8067877528637806 rngesturehandler_codegen_autolinked_build/CMakeFiles/react_codegen_rngesturehandler_codegen.dir/react/renderer/components/rngesturehandler_codegen/ComponentDescriptors.cpp.o 8ca77c41abe17a89
|
||||
50 92522 8067877647067369 rngesturehandler_codegen_autolinked_build/CMakeFiles/react_codegen_rngesturehandler_codegen.dir/react/renderer/components/rngesturehandler_codegen/Props.cpp.o 736a732250759f24
|
||||
38262 93024 8067877652692687 rnsvg_autolinked_build/CMakeFiles/react_codegen_rnsvg.dir/rnsvg.cpp.o ef79ead4853998a4
|
||||
41434 96585 8067877687504381 rnsvg_autolinked_build/CMakeFiles/react_codegen_rnsvg.dir/fac004eecd1c436c431fe9bb5a199f65/source/codegen/jni/react/renderer/components/rnsvg/ComponentDescriptors.cpp.o 8765168d668536bc
|
||||
55334 269753 8067878183841155 rnsvg_autolinked_build/CMakeFiles/react_codegen_rnsvg.dir/ed4baae83e9195c96c883bf313e2f3f9/android/build/generated/source/codegen/jni/react/renderer/components/rnsvg/Props.cpp.o 5c071a6c4e62fa8e
|
||||
18 269786 8067878287372035 CMakeFiles/appmodules.dir/C_/GitHub/Schnappix/android/app/build/generated/autolinking/src/main/jni/autolinking.cpp.o 6a96579f5a61004e
|
||||
269754 270830 8067879423941988 C:/GitHub/Schnappix/android/app/build/intermediates/cxx/RelWithDebInfo/3x5j4n2e/obj/arm64-v8a/libreact_codegen_rnsvg.so 3f1a32ff06dfb001
|
||||
270832 271088 8067879433961654 C:/GitHub/Schnappix/android/app/build/intermediates/cxx/RelWithDebInfo/3x5j4n2e/obj/arm64-v8a/libappmodules.so 22f7dfe7517aece
|
||||
7 49 0 C:/GitHub/Schnappix/android/app/.cxx/RelWithDebInfo/3x5j4n2e/arm64-v8a/CMakeFiles/cmake.verify_globs 5250f1b80cb55465
|
||||
|
||||
@@ -2,41 +2,41 @@ C/C++ Structured Logg
|
||||
e
|
||||
cC:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\arm64-v8a\additional_project_files.txtC
|
||||
A
|
||||
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint Îïìòò3Å, ½Ñªðò3d
|
||||
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint †¸�ûù3Å, ½Ñªðò3d
|
||||
b
|
||||
`C:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\arm64-v8a\android_gradle_build.json Îïìòò3û" ÂѪðò3i
|
||||
`C:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\arm64-v8a\android_gradle_build.json †¸�ûù3û" ÂѪðò3i
|
||||
g
|
||||
eC:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\arm64-v8a\android_gradle_build_mini.json Îïìòò3ï Òªðò3V
|
||||
eC:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\arm64-v8a\android_gradle_build_mini.json †¸�ûù3ï Òªðò3V
|
||||
T
|
||||
RC:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\arm64-v8a\build.ninja Îïìòò3œÞ åͪðò3Z
|
||||
RC:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\arm64-v8a\build.ninja †¸�ûù3œÞ åͪðò3Z
|
||||
X
|
||||
VC:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\arm64-v8a\build.ninja.txt Îïìòò3_
|
||||
VC:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\arm64-v8a\build.ninja.txt †¸�ûù3_
|
||||
]
|
||||
[C:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\arm64-v8a\build_file_index.txt Îïìòò3� ¨Òªðò3`
|
||||
[C:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\arm64-v8a\build_file_index.txt †¸�ûù3� ¨Òªðò3`
|
||||
^
|
||||
\C:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\arm64-v8a\compile_commands.json Îïìòò3‘Ø ãͪðò3d
|
||||
\C:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\arm64-v8a\compile_commands.json †¸�ûù3‘Ø ãͪðò3d
|
||||
b
|
||||
`C:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\arm64-v8a\compile_commands.json.bin Îïìòò3 Ê„ ãͪðò3j
|
||||
`C:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\arm64-v8a\compile_commands.json.bin †¸�ûù3 Ê„ ãͪðò3j
|
||||
h
|
||||
fC:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\arm64-v8a\metadata_generation_command.txt Îïìòò3
|
||||
fC:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\arm64-v8a\metadata_generation_command.txt †¸�ûù3
|
||||
¸ §Òªðò3]
|
||||
[
|
||||
YC:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\arm64-v8a\prefab_config.json Îïìòò3€ ¨Òªðò3b
|
||||
YC:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\arm64-v8a\prefab_config.json †¸�ûù3€ ¨Òªðò3b
|
||||
`
|
||||
^C:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\arm64-v8a\symbol_folder_index.txt Îïìòò3␍] ¨Òªðò3{
|
||||
^C:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\arm64-v8a\symbol_folder_index.txt †¸�ûù3␍] ¨Òªðò3{
|
||||
y
|
||||
wC:\GitHub\Schnappix\node_modules\react-native-gesture-handler\android\build\generated\source\codegen\jni\CMakeLists.txt Îïìòò3␍¾ Ü…§ðò3v
|
||||
wC:\GitHub\Schnappix\node_modules\react-native-gesture-handler\android\build\generated\source\codegen\jni\CMakeLists.txt †¸�ûù3␍¾ Ü…§ðò3v
|
||||
t
|
||||
rC:\GitHub\Schnappix\node_modules\react-native-reanimated\android\build\generated\source\codegen\jni\CMakeLists.txt Îïìòò3ö ùާðò3µ
|
||||
rC:\GitHub\Schnappix\node_modules\react-native-reanimated\android\build\generated\source\codegen\jni\CMakeLists.txt †¸�ûù3ö ùާðò3µ
|
||||
²
|
||||
¯C:\GitHub\Schnappix\node_modules\react-native-reanimated\android\build\intermediates\prefab_package_configuration\release\prefabReleaseConfigurePackage\prefab_publication.json Îïìòò3Y
|
||||
¯C:\GitHub\Schnappix\node_modules\react-native-reanimated\android\build\intermediates\prefab_package_configuration\release\prefabReleaseConfigurePackage\prefab_publication.json †¸�ûù3Y
|
||||
W
|
||||
UC:\GitHub\Schnappix\node_modules\react-native-svg\android\src\main\jni\CMakeLists.txt Îïìòò3½ œ§ØÖç3u
|
||||
UC:\GitHub\Schnappix\node_modules\react-native-svg\android\src\main\jni\CMakeLists.txt †¸�ûù3½ œ§ØÖç3u
|
||||
s
|
||||
qC:\GitHub\Schnappix\node_modules\react-native-view-shot\android\build\generated\source\codegen\jni\CMakeLists.txt Îïìòò3ê ú„§ðò3t
|
||||
qC:\GitHub\Schnappix\node_modules\react-native-view-shot\android\build\generated\source\codegen\jni\CMakeLists.txt †¸�ûù3ê ú„§ðò3t
|
||||
r
|
||||
pC:\GitHub\Schnappix\node_modules\react-native-worklets\android\build\generated\source\codegen\jni\CMakeLists.txt Îïìòò3ê è„§ðò3³
|
||||
pC:\GitHub\Schnappix\node_modules\react-native-worklets\android\build\generated\source\codegen\jni\CMakeLists.txt †¸�ûù3ê è„§ðò3³
|
||||
°
|
||||
C:\GitHub\Schnappix\node_modules\react-native-worklets\android\build\intermediates\prefab_package_configuration\release\prefabReleaseConfigurePackage\prefab_publication.json Îïìòò3k
|
||||
C:\GitHub\Schnappix\node_modules\react-native-worklets\android\build\intermediates\prefab_package_configuration\release\prefabReleaseConfigurePackage\prefab_publication.json †¸�ûù3k
|
||||
i
|
||||
gC:\GitHub\Schnappix\node_modules\react-native\ReactAndroid\cmake-utils\default-app-setup\CMakeLists.txt Îïìòò3ð ®¡ÈÑç3
|
||||
gC:\GitHub\Schnappix\node_modules\react-native\ReactAndroid\cmake-utils\default-app-setup\CMakeLists.txt †¸�ûù3ð ®¡ÈÑç3
|
||||
Binary file not shown.
@@ -45,3 +45,49 @@
|
||||
20839 20978 8048871470843232 C:/GitHub/Schnappix/android/app/build/intermediates/cxx/RelWithDebInfo/3x5j4n2e/obj/armeabi-v7a/libappmodules.so 7a2dfc40ee7e94c1
|
||||
2 33 0 C:/GitHub/Schnappix/android/app/.cxx/RelWithDebInfo/3x5j4n2e/armeabi-v7a/CMakeFiles/cmake.verify_globs 1eb2d1da6ebc2e74
|
||||
2 27 0 C:/GitHub/Schnappix/android/app/.cxx/RelWithDebInfo/3x5j4n2e/armeabi-v7a/CMakeFiles/cmake.verify_globs 1eb2d1da6ebc2e74
|
||||
3 46 0 C:/GitHub/Schnappix/android/app/.cxx/RelWithDebInfo/3x5j4n2e/armeabi-v7a/CMakeFiles/cmake.verify_globs 1eb2d1da6ebc2e74
|
||||
6 62 0 C:/GitHub/Schnappix/android/app/.cxx/RelWithDebInfo/3x5j4n2e/armeabi-v7a/CMakeFiles/cmake.verify_globs 1eb2d1da6ebc2e74
|
||||
111 16565 8067879608890385 rnreanimated_autolinked_build/CMakeFiles/react_codegen_rnreanimated.dir/react/renderer/components/rnreanimated/States.cpp.o dadf9318e68c7867
|
||||
67 17419 8067879617433859 rngesturehandler_codegen_autolinked_build/CMakeFiles/react_codegen_rngesturehandler_codegen.dir/react/renderer/components/rngesturehandler_codegen/States.cpp.o ac6b83f51627fb0a
|
||||
91 18224 8067879625916844 rnreanimated_autolinked_build/CMakeFiles/react_codegen_rnreanimated.dir/react/renderer/components/rnreanimated/EventEmitters.cpp.o 394b8ed6e004e498
|
||||
46 19112 8067879634010605 rngesturehandler_codegen_autolinked_build/CMakeFiles/react_codegen_rngesturehandler_codegen.dir/react/renderer/components/rngesturehandler_codegen/EventEmitters.cpp.o ec271ae7205c055b
|
||||
16611 21532 8067879658946727 rnsvg_autolinked_build/CMakeFiles/react_codegen_rnsvg.dir/ed4baae83e9195c96c883bf313e2f3f9/common/cpp/react/renderer/components/rnsvg/RNSVGLayoutableShadowNode.cpp.o 21a248b57ee79d1c
|
||||
17480 23017 8067879673863924 rnsvg_autolinked_build/CMakeFiles/react_codegen_rnsvg.dir/C_/GitHub/Schnappix/node_modules/react-native-svg/common/cpp/react/renderer/components/rnsvg/RNSVGShadowNodes.cpp.o d1dfe22d28656d25
|
||||
118 30475 8067879746823081 rnreanimated_autolinked_build/CMakeFiles/react_codegen_rnreanimated.dir/react/renderer/components/rnreanimated/rnreanimatedJSI-generated.cpp.o 36204aecff2ca134
|
||||
105 30851 8067879752271040 rnreanimated_autolinked_build/CMakeFiles/react_codegen_rnreanimated.dir/react/renderer/components/rnreanimated/Props.cpp.o ed0ac52f1581a6e
|
||||
74 32391 8067879768045710 rngesturehandler_codegen_autolinked_build/CMakeFiles/react_codegen_rngesturehandler_codegen.dir/bac033cd950586cef66695376748dd33/rngesturehandler_codegenJSI-generated.cpp.o 200af45e1ce8e783
|
||||
30579 32739 8067879771702149 rnsvg_autolinked_build/CMakeFiles/react_codegen_rnsvg.dir/b27a5e984ce42aaf944331ae62f1045c/build/generated/source/codegen/jni/react/renderer/components/rnsvg/States.cpp.o 94d1b28fbb75a450
|
||||
30853 33051 8067879776334150 rnsvg_autolinked_build/CMakeFiles/react_codegen_rnsvg.dir/13532d5ffa794772a98bb0ca30645658/generated/source/codegen/jni/react/renderer/components/rnsvg/EventEmitters.cpp.o c3e7187e0358e39e
|
||||
98 33862 8067879781598429 rnreanimated_autolinked_build/CMakeFiles/react_codegen_rnreanimated.dir/react/renderer/components/rnreanimated/ShadowNodes.cpp.o aed2ec35d3d77291
|
||||
125 34160 8067879784297746 rnreanimated_autolinked_build/CMakeFiles/react_codegen_rnreanimated.dir/rnreanimated-generated.cpp.o b44a5283cbfafd29
|
||||
79 34258 8067879784817672 rngesturehandler_codegen_autolinked_build/CMakeFiles/react_codegen_rngesturehandler_codegen.dir/rngesturehandler_codegen-generated.cpp.o 7d62a6c9a8f0dcb7
|
||||
32468 35140 8067879795765731 rnsvg_autolinked_build/CMakeFiles/react_codegen_rnsvg.dir/fac004eecd1c436c431fe9bb5a199f65/source/codegen/jni/react/renderer/components/rnsvg/rnsvgJSI-generated.cpp.o 29f011ed4cdb4f07
|
||||
33052 35288 8067879796292675 rnviewshot_autolinked_build/CMakeFiles/react_codegen_rnviewshot.dir/react/renderer/components/rnviewshot/EventEmitters.cpp.o ab66270134867aeb
|
||||
32817 35428 8067879799382468 rnviewshot_autolinked_build/CMakeFiles/react_codegen_rnviewshot.dir/react/renderer/components/rnviewshot/ComponentDescriptors.cpp.o 8900f919aa835022
|
||||
85 36223 8067879806685069 rnreanimated_autolinked_build/CMakeFiles/react_codegen_rnreanimated.dir/react/renderer/components/rnreanimated/ComponentDescriptors.cpp.o 97078bc7f7917824
|
||||
62 36389 8067879807504556 rngesturehandler_codegen_autolinked_build/CMakeFiles/react_codegen_rngesturehandler_codegen.dir/react/renderer/components/rngesturehandler_codegen/ShadowNodes.cpp.o cba3ef2e5f5e1567
|
||||
33897 36519 8067879809299933 rnviewshot_autolinked_build/CMakeFiles/react_codegen_rnviewshot.dir/react/renderer/components/rnviewshot/Props.cpp.o 301b94dc713f1d72
|
||||
34206 37021 8067879814500051 rnviewshot_autolinked_build/CMakeFiles/react_codegen_rnviewshot.dir/react/renderer/components/rnviewshot/ShadowNodes.cpp.o 900d667c55cfa9bb
|
||||
34294 37191 8067879814625267 rnviewshot_autolinked_build/CMakeFiles/react_codegen_rnviewshot.dir/rnviewshot-generated.cpp.o cd8693631437a31e
|
||||
138 37309 8067879814359993 rnsvg_autolinked_build/CMakeFiles/react_codegen_rnsvg.dir/C_/GitHub/Schnappix/node_modules/react-native-svg/common/cpp/react/renderer/components/rnsvg/RNSVGImageState.cpp.o 6b7d752433bdadd2
|
||||
35216 37491 8067879816764957 rnviewshot_autolinked_build/CMakeFiles/react_codegen_rnviewshot.dir/react/renderer/components/rnviewshot/States.cpp.o 82afe18d3b39de38
|
||||
35318 38375 8067879826994166 rnviewshot_autolinked_build/CMakeFiles/react_codegen_rnviewshot.dir/react/renderer/components/rnviewshot/rnviewshotJSI-generated.cpp.o 74701146f1c1f4ca
|
||||
35429 38500 8067879828168553 rnworklets_autolinked_build/CMakeFiles/react_codegen_rnworklets.dir/react/renderer/components/rnworklets/ComponentDescriptors.cpp.o 8987d1a0fc4c8b95
|
||||
36452 38773 8067879832414777 rnworklets_autolinked_build/CMakeFiles/react_codegen_rnworklets.dir/react/renderer/components/rnworklets/EventEmitters.cpp.o 58163f70eadd8135
|
||||
36273 39128 8067879836027847 rnworklets_autolinked_build/CMakeFiles/react_codegen_rnworklets.dir/rnworklets-generated.cpp.o 437c67fc7f8aed69
|
||||
37232 39178 8067879836997953 rnworklets_autolinked_build/CMakeFiles/react_codegen_rnworklets.dir/react/renderer/components/rnworklets/States.cpp.o cb46fd5e8ecc9d26
|
||||
23084 39258 8067879836604927 rnsvg_autolinked_build/CMakeFiles/react_codegen_rnsvg.dir/b27a5e984ce42aaf944331ae62f1045c/build/generated/source/codegen/jni/react/renderer/components/rnsvg/ShadowNodes.cpp.o 34c405488a7a7372
|
||||
36520 39431 8067879838971300 rnworklets_autolinked_build/CMakeFiles/react_codegen_rnworklets.dir/react/renderer/components/rnworklets/ShadowNodes.cpp.o aec44fb5698f0340
|
||||
37069 39712 8067879842899779 rnworklets_autolinked_build/CMakeFiles/react_codegen_rnworklets.dir/react/renderer/components/rnworklets/rnworkletsJSI-generated.cpp.o af3255647817bd98
|
||||
37372 40210 8067879846854411 rnworklets_autolinked_build/CMakeFiles/react_codegen_rnworklets.dir/react/renderer/components/rnworklets/Props.cpp.o f4d6f28ab9fcb330
|
||||
32 41169 8067879856179238 CMakeFiles/appmodules.dir/OnLoad.cpp.o 3a08168a491d9ca
|
||||
18276 43620 8067879880077340 rnsvg_autolinked_build/CMakeFiles/react_codegen_rnsvg.dir/rnsvg.cpp.o ba9b4594d5381a25
|
||||
132 48539 8067879930101143 rnsvg_autolinked_build/CMakeFiles/react_codegen_rnsvg.dir/ed4baae83e9195c96c883bf313e2f3f9/common/cpp/react/renderer/components/rnsvg/RNSVGImageShadowNode.cpp.o 86bea39fd11a607b
|
||||
21666 49060 8067879934327259 rnsvg_autolinked_build/CMakeFiles/react_codegen_rnsvg.dir/fac004eecd1c436c431fe9bb5a199f65/source/codegen/jni/react/renderer/components/rnsvg/ComponentDescriptors.cpp.o 29308712f2de7281
|
||||
51 49858 8067879943511158 rngesturehandler_codegen_autolinked_build/CMakeFiles/react_codegen_rngesturehandler_codegen.dir/react/renderer/components/rngesturehandler_codegen/ComponentDescriptors.cpp.o 20294c6a25d8dcc9
|
||||
57 52536 8067879970113652 rngesturehandler_codegen_autolinked_build/CMakeFiles/react_codegen_rngesturehandler_codegen.dir/react/renderer/components/rngesturehandler_codegen/Props.cpp.o 1f2336aa249f35d0
|
||||
19157 76031 8067880205271867 rnsvg_autolinked_build/CMakeFiles/react_codegen_rnsvg.dir/b27a5e984ce42aaf944331ae62f1045c/build/generated/source/codegen/jni/react/renderer/components/rnsvg/Props.cpp.o 45386128c3316239
|
||||
76034 76331 8067880209067630 C:/GitHub/Schnappix/android/app/build/intermediates/cxx/RelWithDebInfo/3x5j4n2e/obj/armeabi-v7a/libreact_codegen_rnsvg.so 9b90bcb36f3c3b1c
|
||||
40 83398 8067880278673809 CMakeFiles/appmodules.dir/C_/GitHub/Schnappix/android/app/build/generated/autolinking/src/main/jni/autolinking.cpp.o d06b7304ac1d0873
|
||||
83400 83654 8067880282135600 C:/GitHub/Schnappix/android/app/build/intermediates/cxx/RelWithDebInfo/3x5j4n2e/obj/armeabi-v7a/libappmodules.so 7a2dfc40ee7e94c1
|
||||
5 45 0 C:/GitHub/Schnappix/android/app/.cxx/RelWithDebInfo/3x5j4n2e/armeabi-v7a/CMakeFiles/cmake.verify_globs 1eb2d1da6ebc2e74
|
||||
|
||||
@@ -2,41 +2,41 @@ C/C++ Structured Logi
|
||||
g
|
||||
eC:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\armeabi-v7a\additional_project_files.txtC
|
||||
A
|
||||
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint Ýðìòò3ý, ÷Ãðò3f
|
||||
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint ¨º�ûù3ý, ÷Ãðò3f
|
||||
d
|
||||
bC:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\armeabi-v7a\android_gradle_build.json Ýðìòò3�# øÃðò3k
|
||||
bC:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\armeabi-v7a\android_gradle_build.json ¨º�ûù3�# øÃðò3k
|
||||
i
|
||||
gC:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\armeabi-v7a\android_gradle_build_mini.json Ýðìòò3‘ ŸÄðò3X
|
||||
gC:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\armeabi-v7a\android_gradle_build_mini.json ¨º�ûù3‘ ŸÄðò3X
|
||||
V
|
||||
TC:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\armeabi-v7a\build.ninja Ýðìòò3Áå âÀðò3\
|
||||
TC:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\armeabi-v7a\build.ninja ¨º�ûù3Áå âÀðò3\
|
||||
Z
|
||||
XC:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\armeabi-v7a\build.ninja.txt Ýðìòò3a
|
||||
XC:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\armeabi-v7a\build.ninja.txt ¨º�ûù3a
|
||||
_
|
||||
]C:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\armeabi-v7a\build_file_index.txt Ýðìòò3� Äðò3b
|
||||
]C:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\armeabi-v7a\build_file_index.txt ¨º�ûù3� Äðò3b
|
||||
`
|
||||
^C:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\armeabi-v7a\compile_commands.json Ýðìòò3´à àÀðò3f
|
||||
^C:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\armeabi-v7a\compile_commands.json ¨º�ûù3´à àÀðò3f
|
||||
d
|
||||
bC:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\armeabi-v7a\compile_commands.json.bin Ýðìòò3 ò„ àÀðò3l
|
||||
bC:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\armeabi-v7a\compile_commands.json.bin ©º�ûù3 ò„ àÀðò3l
|
||||
j
|
||||
hC:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\armeabi-v7a\metadata_generation_command.txt Ýðìòò3
|
||||
hC:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\armeabi-v7a\metadata_generation_command.txt ©º�ûù3
|
||||
Ä ŸÄðò3_
|
||||
]
|
||||
[C:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\armeabi-v7a\prefab_config.json Ýðìòò3€ ŸÄðò3d
|
||||
[C:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\armeabi-v7a\prefab_config.json ©º�ûù3€ ŸÄðò3d
|
||||
b
|
||||
`C:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\armeabi-v7a\symbol_folder_index.txt Ýðìòò3␍_ Äðò3{
|
||||
`C:\GitHub\Schnappix\android\app\.cxx\RelWithDebInfo\3x5j4n2e\armeabi-v7a\symbol_folder_index.txt ©º�ûù3␍_ Äðò3{
|
||||
y
|
||||
wC:\GitHub\Schnappix\node_modules\react-native-gesture-handler\android\build\generated\source\codegen\jni\CMakeLists.txt Ýðìòò3␍¾ Ü…§ðò3v
|
||||
wC:\GitHub\Schnappix\node_modules\react-native-gesture-handler\android\build\generated\source\codegen\jni\CMakeLists.txt ©º�ûù3␍¾ Ü…§ðò3v
|
||||
t
|
||||
rC:\GitHub\Schnappix\node_modules\react-native-reanimated\android\build\generated\source\codegen\jni\CMakeLists.txt Ýðìòò3ö ùާðò3µ
|
||||
rC:\GitHub\Schnappix\node_modules\react-native-reanimated\android\build\generated\source\codegen\jni\CMakeLists.txt ©º�ûù3ö ùާðò3µ
|
||||
²
|
||||
¯C:\GitHub\Schnappix\node_modules\react-native-reanimated\android\build\intermediates\prefab_package_configuration\release\prefabReleaseConfigurePackage\prefab_publication.json Ýðìòò3Y
|
||||
¯C:\GitHub\Schnappix\node_modules\react-native-reanimated\android\build\intermediates\prefab_package_configuration\release\prefabReleaseConfigurePackage\prefab_publication.json ©º�ûù3Y
|
||||
W
|
||||
UC:\GitHub\Schnappix\node_modules\react-native-svg\android\src\main\jni\CMakeLists.txt Ýðìòò3½ œ§ØÖç3u
|
||||
UC:\GitHub\Schnappix\node_modules\react-native-svg\android\src\main\jni\CMakeLists.txt ©º�ûù3½ œ§ØÖç3u
|
||||
s
|
||||
qC:\GitHub\Schnappix\node_modules\react-native-view-shot\android\build\generated\source\codegen\jni\CMakeLists.txt Ýðìòò3ê ú„§ðò3t
|
||||
qC:\GitHub\Schnappix\node_modules\react-native-view-shot\android\build\generated\source\codegen\jni\CMakeLists.txt ©º�ûù3ê ú„§ðò3t
|
||||
r
|
||||
pC:\GitHub\Schnappix\node_modules\react-native-worklets\android\build\generated\source\codegen\jni\CMakeLists.txt Ýðìòò3ê è„§ðò3³
|
||||
pC:\GitHub\Schnappix\node_modules\react-native-worklets\android\build\generated\source\codegen\jni\CMakeLists.txt ©º�ûù3ê è„§ðò3³
|
||||
°
|
||||
C:\GitHub\Schnappix\node_modules\react-native-worklets\android\build\intermediates\prefab_package_configuration\release\prefabReleaseConfigurePackage\prefab_publication.json Ýðìòò3k
|
||||
C:\GitHub\Schnappix\node_modules\react-native-worklets\android\build\intermediates\prefab_package_configuration\release\prefabReleaseConfigurePackage\prefab_publication.json ©º�ûù3k
|
||||
i
|
||||
gC:\GitHub\Schnappix\node_modules\react-native\ReactAndroid\cmake-utils\default-app-setup\CMakeLists.txt Ýðìòò3ð ®¡ÈÑç3
|
||||
gC:\GitHub\Schnappix\node_modules\react-native\ReactAndroid\cmake-utils\default-app-setup\CMakeLists.txt ©º�ûù3ð ®¡ÈÑç3
|
||||
@@ -92,8 +92,8 @@ android {
|
||||
applicationId 'de.orfel.schnappix'
|
||||
minSdkVersion rootProject.ext.minSdkVersion
|
||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
||||
versionCode 16
|
||||
versionName "23.01.16"
|
||||
versionCode 18
|
||||
versionName "23.01.18"
|
||||
|
||||
buildConfigField "String", "REACT_NATIVE_RELEASE_LEVEL", "\"${findProperty('reactNativeReleaseLevel') ?: 'stable'}\""
|
||||
}
|
||||
|
||||
@@ -64,7 +64,7 @@ expo.useLegacyPackaging=false
|
||||
# WARNING: This property has been deprecated and will be removed in Expo SDK 55. Use `edgeToEdgeEnabled` or `react.edgeToEdgeEnabled` to determine whether the project is using edge-to-edge.
|
||||
expo.edgeToEdgeEnabled=true
|
||||
|
||||
android.compileSdkVersion=35
|
||||
android.targetSdkVersion=35
|
||||
android.compileSdkVersion=36
|
||||
android.targetSdkVersion=36
|
||||
android.enableMinifyInReleaseBuilds=true
|
||||
android.extraMavenRepos=[{"url":"https://jitpack.io"}]
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -3,7 +3,7 @@
|
||||
"newArchEnabled": true,
|
||||
"name": "Schnappix",
|
||||
"slug": "Schnappix",
|
||||
"version": "23.01.16",
|
||||
"version": "23.01.18",
|
||||
"orientation": "landscape",
|
||||
"icon": "./Icon.png",
|
||||
"userInterfaceStyle": "dark",
|
||||
@@ -13,7 +13,7 @@
|
||||
},
|
||||
"android": {
|
||||
"package": "de.orfel.schnappix",
|
||||
"versionCode": 16,
|
||||
"versionCode": 18,
|
||||
"adaptiveIcon": {
|
||||
"backgroundColor": "#050510",
|
||||
"foregroundImage": "./Icon-padded.png"
|
||||
@@ -43,8 +43,8 @@
|
||||
"expo-build-properties",
|
||||
{
|
||||
"android": {
|
||||
"compileSdkVersion": 35,
|
||||
"targetSdkVersion": 35,
|
||||
"compileSdkVersion": 36,
|
||||
"targetSdkVersion": 36,
|
||||
"enableProguardInReleaseBuilds": true,
|
||||
"extraMavenRepos": [
|
||||
"https://jitpack.io"
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,2 +1,2 @@
|
||||
#Mon May 25 16:29:05 CEST 2026
|
||||
gradle.version=8.9
|
||||
#Sun Jul 26 18:22:44 CEST 2026
|
||||
gradle.version=9.2.0
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "schnappix",
|
||||
"version": "23.01.16",
|
||||
"version": "23.01.18",
|
||||
"main": "index.ts",
|
||||
"dependencies": {
|
||||
"@fortawesome/fontawesome-svg-core": "^6.7.2",
|
||||
|
||||
+23
-25
@@ -67,7 +67,7 @@ export default function AdminScreen({ currentSettings, onSave, onClose }: AdminS
|
||||
const [isTogglingKiosk, setIsTogglingKiosk] = useState<boolean>(false);
|
||||
const [logs, setLogs] = useState<string | null>(null);
|
||||
const scrollViewRef = useRef<ScrollView>(null);
|
||||
|
||||
|
||||
const [kioskActive, setKioskActive] = useState<boolean>(false);
|
||||
const [isDeviceOwner, setIsDeviceOwner] = useState<boolean>(false);
|
||||
|
||||
@@ -150,7 +150,7 @@ export default function AdminScreen({ currentSettings, onSave, onClose }: AdminS
|
||||
return () => subscription.remove();
|
||||
}, [
|
||||
countdown, printerIp, password, kioskActive, frameMode, selectedFrameId, availableFrameIds,
|
||||
dateOverlay, dateOverlayTransform, eventText, burstCount, burstIntervalSec, welcomeText,
|
||||
dateOverlay, dateOverlayTransform, eventText, burstCount, burstIntervalSec, welcomeText,
|
||||
footerText, useFrontCamera, enableLogs, currentSettings
|
||||
]);
|
||||
|
||||
@@ -213,12 +213,10 @@ export default function AdminScreen({ currentSettings, onSave, onClose }: AdminS
|
||||
|
||||
const ipTrimmed = printerIp.trim();
|
||||
const ipRegex = /^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$/;
|
||||
if (!ipTrimmed) {
|
||||
Alert.alert('Ungültige Eingabe', 'Die Drucker-IP-Adresse darf nicht leer sein.');
|
||||
return;
|
||||
}
|
||||
if (!ipRegex.test(ipTrimmed)) {
|
||||
Alert.alert('Ungültige Eingabe', 'Bitte gib eine gültige IP-Adresse ein (z.B. 192.168.1.100).');
|
||||
|
||||
// IP may be empty to enable digital-only mode
|
||||
if (ipTrimmed !== '' && !ipRegex.test(ipTrimmed)) {
|
||||
Alert.alert('Ungültige Eingabe', 'Bitte gib eine gültige IP-Adresse ein oder lass das Feld leer (für rein digitalen Modus).');
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -330,9 +328,9 @@ export default function AdminScreen({ currentSettings, onSave, onClose }: AdminS
|
||||
<FontAwesomeIcon icon={faArrowLeft} size={14} color={THEME.colors.text} />
|
||||
<Text style={styles.closeBtnText}>Zurück zur Fotobox</Text>
|
||||
</TouchableOpacity>
|
||||
<TouchableOpacity
|
||||
style={styles.logBtn}
|
||||
onPress={async () => setLogs(await logger.readLogs())}
|
||||
<TouchableOpacity
|
||||
style={styles.logBtn}
|
||||
onPress={async () => setLogs(await logger.readLogs())}
|
||||
>
|
||||
<FontAwesomeIcon icon={faFileLines} size={16} color={THEME.colors.text} />
|
||||
<Text style={styles.closeBtnText}>Logs</Text>
|
||||
@@ -356,7 +354,7 @@ export default function AdminScreen({ currentSettings, onSave, onClose }: AdminS
|
||||
/>
|
||||
</View>
|
||||
<View style={styles.inputGroup}>
|
||||
<Text style={styles.label}>Subtext (Footer)</Text>
|
||||
<Text style={styles.label}>Fußtext</Text>
|
||||
<TextInput
|
||||
style={styles.input}
|
||||
placeholder="Display tippen! • Lächeln! • Foto schnappen!"
|
||||
@@ -433,7 +431,7 @@ export default function AdminScreen({ currentSettings, onSave, onClose }: AdminS
|
||||
<Text style={styles.cardTitle}>Gestaltung: Fotorahmen</Text>
|
||||
</View>
|
||||
{renderSegment(FRAME_MODE_OPTIONS, frameMode, setFrameMode)}
|
||||
|
||||
|
||||
{frameMode === 'always' && FRAMES.length > 0 && (
|
||||
<View style={styles.inputGroup}>
|
||||
<Text style={styles.label}>Ausgewählter Rahmen</Text>
|
||||
@@ -500,21 +498,21 @@ export default function AdminScreen({ currentSettings, onSave, onClose }: AdminS
|
||||
<Text style={styles.cardTitle}>Gestaltung: Datum/Uhrzeit-Einblendung</Text>
|
||||
</View>
|
||||
{renderSegment(DATE_OVERLAY_OPTIONS, dateOverlay, setDateOverlay)}
|
||||
|
||||
|
||||
{dateOverlay !== 'off' && (
|
||||
<View style={styles.inputGroup}>
|
||||
<Text style={styles.label}>Vorschau: Positionieren & Drehen</Text>
|
||||
<Text style={styles.cardDesc}>
|
||||
Ziehe den Text in der Vorschau mit dem Finger an die gewünschte Position. Passe Rotation und Größe mit den +/- Tasten an.
|
||||
</Text>
|
||||
|
||||
|
||||
<View style={styles.previewBoxContainer}>
|
||||
<View style={styles.previewBox}>
|
||||
<View
|
||||
<View
|
||||
style={[
|
||||
styles.previewTextWrapper,
|
||||
{
|
||||
left: `${dateOverlayTransform.x}%`,
|
||||
styles.previewTextWrapper,
|
||||
{
|
||||
left: `${dateOverlayTransform.x}%`,
|
||||
top: `${dateOverlayTransform.y}%`,
|
||||
transform: [
|
||||
{ rotate: `${dateOverlayTransform.rotation}deg` },
|
||||
@@ -579,7 +577,7 @@ export default function AdminScreen({ currentSettings, onSave, onClose }: AdminS
|
||||
placeholderTextColor={THEME.colors.textMuted}
|
||||
value={printerIp}
|
||||
onChangeText={setPrinterIp}
|
||||
keyboardType="numeric"
|
||||
keyboardType="numbers-and-punctuation"
|
||||
/>
|
||||
</View>
|
||||
<View style={styles.inputGroup}>
|
||||
@@ -596,7 +594,7 @@ export default function AdminScreen({ currentSettings, onSave, onClose }: AdminS
|
||||
/>
|
||||
</View>
|
||||
<View style={styles.toggleRow}>
|
||||
<Text style={styles.toggleLabel}>Tablet-Frontkamera als Fallback erzwingen</Text>
|
||||
<Text style={styles.toggleLabel}>Frontkamera nutzen (Deaktiviert externe Kamera)</Text>
|
||||
<Switch
|
||||
value={useFrontCamera}
|
||||
onValueChange={setUseFrontCamera}
|
||||
@@ -605,7 +603,7 @@ export default function AdminScreen({ currentSettings, onSave, onClose }: AdminS
|
||||
/>
|
||||
</View>
|
||||
<View style={styles.toggleRow}>
|
||||
<Text style={styles.toggleLabel}>App-Protokollierung (Logs) aktivieren</Text>
|
||||
<Text style={styles.toggleLabel}>Logs aktivieren</Text>
|
||||
<Switch
|
||||
value={enableLogs}
|
||||
onValueChange={setEnableLogs}
|
||||
@@ -676,7 +674,7 @@ export default function AdminScreen({ currentSettings, onSave, onClose }: AdminS
|
||||
</TouchableOpacity>
|
||||
</View>
|
||||
</View>
|
||||
|
||||
|
||||
{/* Log Modal */}
|
||||
<Modal visible={logs !== null} transparent animationType="slide">
|
||||
<View style={{ flex: 1, backgroundColor: 'rgba(0,0,0,0.8)', justifyContent: 'center', alignItems: 'center' }}>
|
||||
@@ -697,10 +695,10 @@ export default function AdminScreen({ currentSettings, onSave, onClose }: AdminS
|
||||
<Text style={{ color: '#fff', fontWeight: 'bold' }}>Teilen / Kopieren</Text>
|
||||
</TouchableOpacity>
|
||||
</View>
|
||||
<ScrollView
|
||||
<ScrollView
|
||||
style={{ flex: 1, backgroundColor: '#000', padding: 10, borderRadius: 5 }}
|
||||
ref={scrollViewRef}
|
||||
onContentSizeChange={() => scrollViewRef.current?.scrollToEnd({animated: true})}
|
||||
onContentSizeChange={() => scrollViewRef.current?.scrollToEnd({ animated: true })}
|
||||
>
|
||||
<Text style={{ color: '#0f0', fontFamily: 'monospace' }}>{logs}</Text>
|
||||
</ScrollView>
|
||||
|
||||
@@ -348,7 +348,7 @@ export default function CameraScreen({
|
||||
});
|
||||
capturedUri = photo.uri;
|
||||
} else {
|
||||
throw new Error('Kamera-Referenz ist nicht verfügbar. Bitte stelle sicher, dass die externe Kamera verbunden ist, oder aktiviere den Front-Kamera-Fallback in den Admin-Einstellungen.');
|
||||
throw new Error('Externe Kamera nicht gefunden. Bitte stelle sicher, dass die externe Kamera richtig verbunden ist oder aktiviere die Front-Kamera in den Admin-Einstellungen (oben rechts).');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -562,7 +562,7 @@ export default function CameraScreen({
|
||||
<Text style={styles.modalTitle}>Admin-Zugang</Text>
|
||||
<Text style={styles.modalSub}>Passwort eingeben, um Einstellungen zu öffnen</Text>
|
||||
<Text style={[styles.modalSub, { color: THEME.colors.error, marginTop: 10, fontSize: 14, fontStyle: 'italic' }]}>
|
||||
Tipp: Standardcode ist 1234. Bitte ändern! Ein Zurücksetzen ist nur durch Neuinstallation der App möglich.
|
||||
Standardcode: 1234. Bitte in den Einstellungen ändern! Ein Zurücksetzen ist nur durch Neuinstallation der App möglich.
|
||||
</Text>
|
||||
|
||||
<TextInput
|
||||
|
||||
@@ -27,7 +27,6 @@ import { FRAMES } from '../data/frames';
|
||||
interface PreviewScreenProps {
|
||||
photoUris: string[];
|
||||
printerIp: string;
|
||||
onRetakeLast: () => void;
|
||||
onAddAnother: () => void;
|
||||
onReset: () => void;
|
||||
// Frame settings
|
||||
@@ -39,6 +38,11 @@ interface PreviewScreenProps {
|
||||
dateOverlayTransform: { x: number; y: number; rotation: number; scale: number };
|
||||
// Event text
|
||||
eventText: string;
|
||||
// Hoisted state
|
||||
stickers: StickerData[];
|
||||
setStickers: React.Dispatch<React.SetStateAction<StickerData[]>>;
|
||||
selectedFrameId: string | null;
|
||||
setSelectedFrameId: React.Dispatch<React.SetStateAction<string | null>>;
|
||||
}
|
||||
|
||||
type CollageLayout = 'single' | 'strip' | 'grid' | 'duo';
|
||||
@@ -46,7 +50,6 @@ type CollageLayout = 'single' | 'strip' | 'grid' | 'duo';
|
||||
export default function PreviewScreen({
|
||||
photoUris,
|
||||
printerIp,
|
||||
onRetakeLast,
|
||||
onAddAnother,
|
||||
onReset,
|
||||
frameMode,
|
||||
@@ -55,6 +58,10 @@ export default function PreviewScreen({
|
||||
dateOverlay,
|
||||
dateOverlayTransform,
|
||||
eventText,
|
||||
stickers,
|
||||
setStickers,
|
||||
selectedFrameId,
|
||||
setSelectedFrameId,
|
||||
}: PreviewScreenProps) {
|
||||
const [layout, setLayout] = useState<CollageLayout>('single');
|
||||
const [isProcessing, setIsProcessing] = useState<boolean>(false);
|
||||
@@ -107,8 +114,6 @@ export default function PreviewScreen({
|
||||
|
||||
|
||||
|
||||
// Sticker state
|
||||
const [stickers, setStickers] = useState<StickerData[]>([]);
|
||||
const [selectedStickerId, setSelectedStickerId] = useState<string | null>(null);
|
||||
|
||||
const mountedRef = useRef(true);
|
||||
@@ -147,10 +152,6 @@ export default function PreviewScreen({
|
||||
};
|
||||
}, [onReset]);
|
||||
|
||||
// Frame state
|
||||
const [selectedFrameId, setSelectedFrameId] = useState<string | null>(
|
||||
frameMode === 'always' ? initialFrameId : null
|
||||
);
|
||||
|
||||
const viewShotRef = useRef<any>(null);
|
||||
|
||||
@@ -372,26 +373,26 @@ export default function PreviewScreen({
|
||||
};
|
||||
}, [resetIdleTimer]);
|
||||
|
||||
const handleRetakeClick = async () => {
|
||||
logger.log('Action: Clicked Retake button');
|
||||
const handleAddAnotherClick = async () => {
|
||||
logger.log('Action: Clicked Add Another button');
|
||||
if (idleTimerRef.current) clearTimeout(idleTimerRef.current);
|
||||
if (!mountedRef.current) return;
|
||||
if (isProcessing) return;
|
||||
if (stickers.length > 0 || layout !== 'single' || activeFrame || dateOverlay !== 'off') {
|
||||
setIsProcessing(true);
|
||||
try {
|
||||
const capturedUri = await captureComposite(currentPhoto);
|
||||
if (!mountedRef.current) return;
|
||||
setStatusMessage('Wird vor dem Wiederholen gespeichert...');
|
||||
await saveToGallery(capturedUri, 'Collage', eventText);
|
||||
if (!mountedRef.current) return;
|
||||
} catch (e) {
|
||||
if (!mountedRef.current) return;
|
||||
console.error('Failed to auto-save before retake:', e);
|
||||
}
|
||||
setIsProcessing(false);
|
||||
|
||||
// Auto-save the intermediate collage before adding another photo
|
||||
setIsProcessing(true);
|
||||
try {
|
||||
const capturedUri = await captureComposite(currentPhoto);
|
||||
if (!mountedRef.current) return;
|
||||
setStatusMessage('Wird zwischengespeichert...');
|
||||
await saveToGallery(capturedUri, 'Collage', eventText);
|
||||
} catch (e) {
|
||||
if (!mountedRef.current) return;
|
||||
console.error('Failed to auto-save before adding another:', e);
|
||||
}
|
||||
onRetakeLast();
|
||||
setIsProcessing(false);
|
||||
|
||||
onAddAnother();
|
||||
};
|
||||
|
||||
// ── Render the collage ──
|
||||
@@ -635,34 +636,31 @@ export default function PreviewScreen({
|
||||
|
||||
{/* Action Buttons */}
|
||||
<View style={styles.actions}>
|
||||
<TouchableOpacity style={[styles.actionBtn, styles.printBtn, isProcessing && styles.btnDisabled, isSmallDevice && { marginBottom: THEME.spacing.sm }]} onPress={handlePrint} activeOpacity={0.8} disabled={isProcessing}>
|
||||
<LinearGradient
|
||||
colors={THEME.gradient.primary}
|
||||
start={{ x: 0, y: 0.5 }}
|
||||
end={{ x: 1, y: 0.5 }}
|
||||
style={[styles.printGradient, isSmallDevice && { paddingVertical: THEME.spacing.sm }]}
|
||||
>
|
||||
<FontAwesomeIcon icon={faPrint} size={18} color={THEME.colors.text} style={{ marginRight: 8 }} />
|
||||
<Text style={styles.actionBtnText}>JETZT DRUCKEN</Text>
|
||||
</LinearGradient>
|
||||
</TouchableOpacity>
|
||||
{!!printerIp?.trim() && (
|
||||
<TouchableOpacity style={[styles.actionBtn, styles.printBtn, isProcessing && styles.btnDisabled, isSmallDevice && { marginBottom: THEME.spacing.sm }]} onPress={handlePrint} activeOpacity={0.8} disabled={isProcessing}>
|
||||
<LinearGradient
|
||||
colors={THEME.gradient.primary}
|
||||
start={{ x: 0, y: 0.5 }}
|
||||
end={{ x: 1, y: 0.5 }}
|
||||
style={[styles.printGradient, isSmallDevice && { paddingVertical: THEME.spacing.sm }]}
|
||||
>
|
||||
<FontAwesomeIcon icon={faPrint} size={18} color={THEME.colors.text} style={{ marginRight: 8 }} />
|
||||
<Text style={styles.actionBtnText}>JETZT DRUCKEN</Text>
|
||||
</LinearGradient>
|
||||
</TouchableOpacity>
|
||||
)}
|
||||
|
||||
|
||||
|
||||
{photoUris.length < 4 && (
|
||||
<TouchableOpacity style={[styles.actionBtn, styles.addBtn, isProcessing && styles.btnDisabled, isSmallDevice && { paddingVertical: THEME.spacing.sm, marginBottom: THEME.spacing.sm }]} onPress={onAddAnother} disabled={isProcessing}>
|
||||
<TouchableOpacity style={[styles.actionBtn, styles.addBtn, isProcessing && styles.btnDisabled, isSmallDevice && { paddingVertical: THEME.spacing.sm, marginBottom: THEME.spacing.sm }]} onPress={handleAddAnotherClick} disabled={isProcessing}>
|
||||
<FontAwesomeIcon icon={faPlus} size={16} color={THEME.colors.text} style={{ marginRight: 8 }} />
|
||||
<Text style={styles.actionBtnText}>Weiteres Foto aufnehmen</Text>
|
||||
<Text style={styles.actionBtnText}>Foto zur Collage hinzufügen</Text>
|
||||
</TouchableOpacity>
|
||||
)}
|
||||
|
||||
<View style={styles.rowActions}>
|
||||
<TouchableOpacity style={[styles.smallBtn, styles.retakeBtn, isProcessing && styles.btnDisabled]} onPress={handleRetakeClick} disabled={isProcessing}>
|
||||
<FontAwesomeIcon icon={faRotateLeft} size={14} color={THEME.colors.error} style={{ marginRight: 6 }} />
|
||||
<Text style={[styles.smallBtnText, { color: THEME.colors.error }]}>Wiederholen</Text>
|
||||
</TouchableOpacity>
|
||||
|
||||
<TouchableOpacity style={[styles.smallBtn, styles.resetBtn, isProcessing && styles.btnDisabled]} onPress={handleExit} disabled={isProcessing}>
|
||||
<TouchableOpacity style={[styles.smallBtn, styles.resetBtn, isProcessing && styles.btnDisabled, { width: '100%' }]} onPress={handleExit} disabled={isProcessing}>
|
||||
<FontAwesomeIcon icon={faRightFromBracket} size={14} color={THEME.colors.textMuted} style={{ marginRight: 6 }} />
|
||||
<Text style={styles.smallBtnText}>Beenden</Text>
|
||||
</TouchableOpacity>
|
||||
|
||||
@@ -18,8 +18,9 @@ export interface PrintOptions {
|
||||
export async function printImageLocal(imageUri: string, options: PrintOptions): Promise<void> {
|
||||
const { ipAddress, jobName = 'Schnappix Photo', username = 'Schnappix Kiosk' } = options;
|
||||
|
||||
if (!ipAddress) {
|
||||
throw new Error('Drucker-IP-Adresse ist erforderlich.');
|
||||
if (!ipAddress || ipAddress.trim() === '') {
|
||||
console.log('Drucken übersprungen: Keine Drucker-IP-Adresse hinterlegt (Digitaler Modus).');
|
||||
return;
|
||||
}
|
||||
|
||||
// 1. Read the image file from local storage as Base64 and convert to binary Buffer
|
||||
|
||||
@@ -48,7 +48,7 @@ const DEFAULT_SETTINGS: AppSettings = {
|
||||
burstIntervalSec: 5,
|
||||
welcomeText: 'Zeit für ein Erinnerungsfoto!',
|
||||
footerText: 'Display tippen! • Lächeln! • Foto schnappen!',
|
||||
useFrontCamera: false,
|
||||
useFrontCamera: true,
|
||||
enableLogs: true,
|
||||
};
|
||||
|
||||
@@ -67,7 +67,7 @@ export async function loadSettings(): Promise<AppSettings> {
|
||||
try {
|
||||
const content = await settingsFile.text();
|
||||
const parsed = JSON.parse(content);
|
||||
|
||||
|
||||
// Reset to defaults if the app installation/update time has changed
|
||||
// Also reset if appLastUpdate is completely missing (updating from older version)
|
||||
if (!parsed.appLastUpdate || (currentUpdateTime && Math.abs(parsed.appLastUpdate - currentUpdateTime) > 5000)) {
|
||||
|
||||
Reference in New Issue
Block a user