11import { memo , useCallback , useMemo } from "react"
22import { Settings as SettingsComponent , IconView } from "@/components/settings"
33import { Toggle } from "@/components/nativewindui/Toggle"
4- import useCameraUpload from "@/hooks/useCameraUpload"
5- import { useRouter , useFocusEffect } from "expo-router"
4+ import useCameraUpload , { setCameraUploadState } from "@/hooks/useCameraUpload"
5+ import { useRouter } from "expo-router"
66import driveService from "@/services/drive.service"
77import nodeWorker from "@/lib/nodeWorker"
88import alerts from "@/lib/alerts"
@@ -15,7 +15,7 @@ import { foregroundCameraUpload } from "@/lib/cameraUpload"
1515import { View } from "react-native"
1616
1717export const Settings = memo ( ( ) => {
18- const [ cameraUpload , setCameraUpload ] = useCameraUpload ( )
18+ const [ cameraUpload ] = useCameraUpload ( )
1919 const { push : routerPush } = useRouter ( )
2020
2121 const [ permissions , requestPermissions ] = MediaLibrary . usePermissions ( {
@@ -35,103 +35,68 @@ export const Settings = memo(() => {
3535 return cameraUploadParentQuery . data !== null
3636 } , [ cameraUploadParentQuery . data , cameraUploadParentQuery . status , cameraUpload . enabled ] )
3737
38- const toggleEnabled = useCallback (
39- async ( enable : boolean ) => {
40- setCameraUpload ( prev => ( {
41- ...prev ,
42- enabled : enable ,
43- version : ( prev . version ?? 0 ) + 1 ,
44- onlyDeltasAfterActivationTimestamp :
45- enable && ( prev . onlyDeltasAfterActivation ?? false ) ? Date . now ( ) : prev . onlyDeltasAfterActivationTimestamp
46- } ) )
38+ const toggleEnabled = useCallback ( async ( enable : boolean ) => {
39+ setCameraUploadState ( prev => ( {
40+ ...prev ,
41+ enabled : enable ,
42+ version : ( prev . version ?? 0 ) + 1 ,
43+ enabledTimestamp : Date . now ( )
44+ } ) )
4745
48- if ( enable ) {
49- setTimeout ( ( ) => {
50- cameraUploadParentQuery . refetch ( ) . catch ( console . error )
51- foregroundCameraUpload . run ( ) . catch ( console . error )
52- } , 1000 )
53- }
54- } ,
55- [ setCameraUpload , cameraUploadParentQuery ]
56- )
46+ if ( enable ) {
47+ setTimeout ( ( ) => {
48+ foregroundCameraUpload . run ( ) . catch ( console . error )
49+ } , 1000 )
50+ }
51+ } , [ ] )
5752
5853 const toggleCellular = useCallback ( ( ) => {
59- setCameraUpload ( prev => ( {
54+ setCameraUploadState ( prev => ( {
6055 ...prev ,
6156 cellular : ! prev . cellular ,
6257 version : ( prev . version ?? 0 ) + 1
6358 } ) )
64-
65- setTimeout ( ( ) => {
66- cameraUploadParentQuery . refetch ( ) . catch ( console . error )
67- foregroundCameraUpload . run ( ) . catch ( console . error )
68- } , 1000 )
69- } , [ setCameraUpload , cameraUploadParentQuery ] )
59+ } , [ ] )
7060
7161 const toggleCompress = useCallback ( ( ) => {
72- setCameraUpload ( prev => ( {
62+ setCameraUploadState ( prev => ( {
7363 ...prev ,
7464 compress : ! prev . compress ,
7565 version : ( prev . version ?? 0 ) + 1
7666 } ) )
77-
78- setTimeout ( ( ) => {
79- cameraUploadParentQuery . refetch ( ) . catch ( console . error )
80- foregroundCameraUpload . run ( ) . catch ( console . error )
81- } , 1000 )
82- } , [ setCameraUpload , cameraUploadParentQuery ] )
67+ } , [ ] )
8368
8469 const toggleBackground = useCallback ( ( ) => {
85- setCameraUpload ( prev => ( {
70+ setCameraUploadState ( prev => ( {
8671 ...prev ,
8772 background : ! prev . background
8873 } ) )
89-
90- setTimeout ( ( ) => {
91- cameraUploadParentQuery . refetch ( ) . catch ( console . error )
92- foregroundCameraUpload . run ( ) . catch ( console . error )
93- } , 1000 )
94- } , [ setCameraUpload , cameraUploadParentQuery ] )
74+ } , [ ] )
9575
9676 const toggleLowBattery = useCallback ( ( ) => {
97- setCameraUpload ( prev => ( {
77+ setCameraUploadState ( prev => ( {
9878 ...prev ,
9979 lowBattery : ! prev . lowBattery ,
10080 version : ( prev . version ?? 0 ) + 1
10181 } ) )
102-
103- setTimeout ( ( ) => {
104- cameraUploadParentQuery . refetch ( ) . catch ( console . error )
105- foregroundCameraUpload . run ( ) . catch ( console . error )
106- } , 1000 )
107- } , [ setCameraUpload , cameraUploadParentQuery ] )
82+ } , [ ] )
10883
10984 const toggleVideos = useCallback ( ( ) => {
110- setCameraUpload ( prev => ( {
85+ setCameraUploadState ( prev => ( {
11186 ...prev ,
11287 videos : ! prev . videos ,
11388 version : ( prev . version ?? 0 ) + 1
11489 } ) )
90+ } , [ ] )
11591
116- setTimeout ( ( ) => {
117- cameraUploadParentQuery . refetch ( ) . catch ( console . error )
118- foregroundCameraUpload . run ( ) . catch ( console . error )
119- } , 1000 )
120- } , [ setCameraUpload , cameraUploadParentQuery ] )
121-
122- const toggleOnlyDeltasAfterActivation = useCallback ( ( ) => {
123- setCameraUpload ( prev => ( {
92+ const toggleOnlyDeltasAfterEnabled = useCallback ( ( ) => {
93+ setCameraUploadState ( prev => ( {
12494 ...prev ,
125- onlyDeltasAfterActivation : ! prev . onlyDeltasAfterActivation ,
126- onlyDeltasAfterActivationTimestamp : ! prev . onlyDeltasAfterActivation ? Date . now ( ) : undefined ,
95+ onlyDeltasAfterEnabled : ! prev . onlyDeltasAfterEnabled ,
96+ enabledTimestamp : Date . now ( ) ,
12797 version : ( prev . version ?? 0 ) + 1
12898 } ) )
129-
130- setTimeout ( ( ) => {
131- cameraUploadParentQuery . refetch ( ) . catch ( console . error )
132- foregroundCameraUpload . run ( ) . catch ( console . error )
133- } , 1000 )
134- } , [ setCameraUpload , cameraUploadParentQuery ] )
99+ } , [ ] )
135100
136101 const selectRemoteDirectory = useCallback ( async ( ) => {
137102 const selectDriveItemsResponse = await driveService . selectDriveItems ( {
@@ -155,7 +120,7 @@ export const Settings = memo(() => {
155120 uuid : directory . uuid
156121 } )
157122
158- setCameraUpload ( prev => ( {
123+ setCameraUploadState ( prev => ( {
159124 ...prev ,
160125 version : ( prev . version ?? 0 ) + 1 ,
161126 remote : {
@@ -164,8 +129,9 @@ export const Settings = memo(() => {
164129 }
165130 } ) )
166131
132+ cameraUploadParentQuery . refetch ( ) . catch ( console . error )
133+
167134 setTimeout ( ( ) => {
168- cameraUploadParentQuery . refetch ( ) . catch ( console . error )
169135 foregroundCameraUpload . run ( ) . catch ( console . error )
170136 } , 1000 )
171137 } catch ( e ) {
@@ -175,7 +141,7 @@ export const Settings = memo(() => {
175141 alerts . error ( e . message )
176142 }
177143 }
178- } , [ setCameraUpload , cameraUploadParentQuery ] )
144+ } , [ cameraUploadParentQuery ] )
179145
180146 const items = useMemo ( ( ) => {
181147 if ( permissions && ! permissions . granted ) {
@@ -216,7 +182,7 @@ export const Settings = memo(() => {
216182 rightView : (
217183 < View testID = "photos.settings.enabled" >
218184 < Toggle
219- value = { cameraUpload . enabled }
185+ value = { cameraUpload . enabled && permissions ?. granted && cameraUploadParentExists }
220186 onValueChange = { toggleEnabled }
221187 />
222188 </ View >
@@ -353,10 +319,8 @@ export const Settings = memo(() => {
353319 ) ,
354320 rightView : (
355321 < Toggle
356- value = {
357- ( cameraUpload . onlyDeltasAfterActivation ?? false ) && ( cameraUpload . onlyDeltasAfterActivationTimestamp ?? 0 ) > 0
358- }
359- onValueChange = { toggleOnlyDeltasAfterActivation }
322+ value = { cameraUpload . onlyDeltasAfterEnabled ?? false }
323+ onValueChange = { toggleOnlyDeltasAfterEnabled }
360324 />
361325 )
362326 }
@@ -374,17 +338,9 @@ export const Settings = memo(() => {
374338 permissions ,
375339 requestPermissions ,
376340 cameraUploadParentExists ,
377- toggleOnlyDeltasAfterActivation
341+ toggleOnlyDeltasAfterEnabled
378342 ] )
379343
380- useFocusEffect (
381- useCallback ( ( ) => {
382- setTimeout ( ( ) => {
383- foregroundCameraUpload . run ( ) . catch ( console . error )
384- } , 1000 )
385- } , [ ] )
386- )
387-
388344 return (
389345 < RequireInternet >
390346 < SettingsComponent
0 commit comments