From 6a39d23f28c0a6c56230227754a2e2ea7f277957 Mon Sep 17 00:00:00 2001 From: Atridad Lahiji Date: Thu, 9 Oct 2025 21:00:12 -0600 Subject: [PATCH] [iOS & Android] iOS 1.3.0 & Android 1.8.0 --- android/app/build.gradle.kts | 4 +- .../openclimb/data/sync/SyncService.kt | 27 +- .../openclimb/ui/components/ImagePicker.kt | 312 ++++++++++++------ android/gradle/libs.versions.toml | 4 +- ios/OpenClimb.xcodeproj/project.pbxproj | 16 +- .../UserInterfaceState.xcuserstate | Bin 135753 -> 141374 bytes .../Components/CameraImagePicker.swift | 54 +++ .../Components/PhotoOptionSheet.swift | 83 +++++ ios/OpenClimb/Info.plist | 2 + ios/OpenClimb/Models/ActivityAttributes.swift | 1 + ios/OpenClimb/Services/SyncService.swift | 19 +- .../Views/AddEdit/AddAttemptView.swift | 216 +++++++++--- .../Views/AddEdit/AddEditProblemView.swift | 102 +++++- sync/main.go | 9 +- sync/version.md | 1 - 15 files changed, 643 insertions(+), 207 deletions(-) create mode 100644 ios/OpenClimb/Components/CameraImagePicker.swift create mode 100644 ios/OpenClimb/Components/PhotoOptionSheet.swift delete mode 100644 sync/version.md diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index ccb7b66..7f4349a 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -16,8 +16,8 @@ android { applicationId = "com.atridad.openclimb" minSdk = 31 targetSdk = 36 - versionCode = 33 - versionName = "1.7.4" + versionCode = 35 + versionName = "1.8.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } diff --git a/android/app/src/main/java/com/atridad/openclimb/data/sync/SyncService.kt b/android/app/src/main/java/com/atridad/openclimb/data/sync/SyncService.kt index e5006c8..ecd8b4a 100644 --- a/android/app/src/main/java/com/atridad/openclimb/data/sync/SyncService.kt +++ b/android/app/src/main/java/com/atridad/openclimb/data/sync/SyncService.kt @@ -113,7 +113,7 @@ class SyncService(private val context: Context, private val repository: ClimbRep updateConfiguredState() // Clear connection status when configuration changes _isConnected.value = false - sharedPreferences.edit().putBoolean(Keys.IS_CONNECTED, false).apply() + sharedPreferences.edit { putBoolean(Keys.IS_CONNECTED, false) } } val isConfigured: Boolean @@ -757,19 +757,16 @@ class SyncService(private val context: Context, private val repository: ClimbRep activeSessionIds.contains(it.sessionId) && !allDeletedAttemptIds.contains(it.id) } + // Merge deletion lists + val localDeletions = repository.getDeletedItems() + val allDeletions = (localDeletions + serverBackup.deletedItems).distinctBy { it.id } + Log.d(TAG, "Merging data...") - val mergedGyms = mergeGyms(localGyms, serverBackup.gyms, serverBackup.deletedItems) + val mergedGyms = mergeGyms(localGyms, serverBackup.gyms, allDeletions) val mergedProblems = - mergeProblems( - localProblems, - serverBackup.problems, - imagePathMapping, - serverBackup.deletedItems - ) - val mergedSessions = - mergeSessions(localSessions, serverBackup.sessions, serverBackup.deletedItems) - val mergedAttempts = - mergeAttempts(localAttempts, serverBackup.attempts, serverBackup.deletedItems) + mergeProblems(localProblems, serverBackup.problems, imagePathMapping, allDeletions) + val mergedSessions = mergeSessions(localSessions, serverBackup.sessions, allDeletions) + val mergedAttempts = mergeAttempts(localAttempts, serverBackup.attempts, allDeletions) // Clear and repopulate with merged data repository.resetAllData() @@ -823,11 +820,7 @@ class SyncService(private val context: Context, private val repository: ClimbRep } } - // Merge deletion lists - val localDeletions = repository.getDeletedItems() - val allDeletions = (localDeletions + serverBackup.deletedItems).distinctBy { it.id } - - // Clear and update local deletions with merged list + // Update local deletions with merged list repository.clearDeletedItems() allDeletions.forEach { deletion -> try { diff --git a/android/app/src/main/java/com/atridad/openclimb/ui/components/ImagePicker.kt b/android/app/src/main/java/com/atridad/openclimb/ui/components/ImagePicker.kt index 78e34e3..08ee0a3 100644 --- a/android/app/src/main/java/com/atridad/openclimb/ui/components/ImagePicker.kt +++ b/android/app/src/main/java/com/atridad/openclimb/ui/components/ImagePicker.kt @@ -1,5 +1,9 @@ package com.atridad.openclimb.ui.components +import android.Manifest +import android.content.pm.PackageManager +import android.net.Uri +import android.os.Environment import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.foundation.layout.* @@ -8,7 +12,9 @@ import androidx.compose.foundation.lazy.items import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Add +import androidx.compose.material.icons.filled.CameraAlt import androidx.compose.material.icons.filled.Close +import androidx.compose.material.icons.filled.PhotoLibrary import androidx.compose.material3.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment @@ -17,164 +23,262 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.dp +import androidx.core.content.ContextCompat +import androidx.core.content.FileProvider import coil.compose.AsyncImage import com.atridad.openclimb.utils.ImageUtils +import java.io.File +import java.text.SimpleDateFormat +import java.util.* @Composable fun ImagePicker( - imageUris: List, - onImagesChanged: (List) -> Unit, - modifier: Modifier = Modifier, - maxImages: Int = 5 + imageUris: List, + onImagesChanged: (List) -> Unit, + modifier: Modifier = Modifier, + maxImages: Int = 5 ) { val context = LocalContext.current var tempImageUris by remember { mutableStateOf(imageUris) } - + var showImageSourceDialog by remember { mutableStateOf(false) } + var cameraImageUri by remember { mutableStateOf(null) } + // Image picker launcher - val imagePickerLauncher = rememberLauncherForActivityResult( - contract = ActivityResultContracts.GetMultipleContents() - ) { uris -> - if (uris.isNotEmpty()) { - val currentCount = tempImageUris.size - val remainingSlots = maxImages - currentCount - val urisToProcess = uris.take(remainingSlots) - - // Process images - val newImagePaths = mutableListOf() - urisToProcess.forEach { uri -> - val imagePath = ImageUtils.saveImageFromUri(context, uri) - if (imagePath != null) { - newImagePaths.add(imagePath) + val imagePickerLauncher = + rememberLauncherForActivityResult( + contract = ActivityResultContracts.GetMultipleContents() + ) { uris -> + if (uris.isNotEmpty()) { + val currentCount = tempImageUris.size + val remainingSlots = maxImages - currentCount + val urisToProcess = uris.take(remainingSlots) + + // Process images + val newImagePaths = mutableListOf() + urisToProcess.forEach { uri -> + val imagePath = ImageUtils.saveImageFromUri(context, uri) + if (imagePath != null) { + newImagePaths.add(imagePath) + } + } + + if (newImagePaths.isNotEmpty()) { + val updatedUris = tempImageUris + newImagePaths + tempImageUris = updatedUris + onImagesChanged(updatedUris) + } } } - - if (newImagePaths.isNotEmpty()) { - val updatedUris = tempImageUris + newImagePaths - tempImageUris = updatedUris - onImagesChanged(updatedUris) + + // Camera launcher + val cameraLauncher = + rememberLauncherForActivityResult(contract = ActivityResultContracts.TakePicture()) { + success -> + if (success) { + cameraImageUri?.let { uri -> + val imagePath = ImageUtils.saveImageFromUri(context, uri) + if (imagePath != null) { + val updatedUris = tempImageUris + imagePath + tempImageUris = updatedUris + onImagesChanged(updatedUris) + } + } + } } - } - } - + + // Camera permission launcher + val cameraPermissionLauncher = + rememberLauncherForActivityResult( + contract = ActivityResultContracts.RequestPermission() + ) { isGranted -> + if (isGranted) { + // Create image file for camera + val imageFile = createImageFile(context) + val uri = + FileProvider.getUriForFile( + context, + "${context.packageName}.fileprovider", + imageFile + ) + cameraImageUri = uri + cameraLauncher.launch(uri) + } + } + Column(modifier = modifier) { Row( - modifier = Modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.SpaceBetween, - verticalAlignment = Alignment.CenterVertically + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically ) { Text( - text = "Photos (${tempImageUris.size}/$maxImages)", - style = MaterialTheme.typography.titleMedium + text = "Photos (${tempImageUris.size}/$maxImages)", + style = MaterialTheme.typography.titleMedium ) - + if (tempImageUris.size < maxImages) { - TextButton( - onClick = { - imagePickerLauncher.launch("image/*") - } - ) { - Icon(Icons.Default.Add, contentDescription = null, modifier = Modifier.size(16.dp)) + TextButton(onClick = { showImageSourceDialog = true }) { + Icon( + Icons.Default.Add, + contentDescription = null, + modifier = Modifier.size(16.dp) + ) Spacer(modifier = Modifier.width(4.dp)) Text("Add Photos") } } } - + if (tempImageUris.isNotEmpty()) { Spacer(modifier = Modifier.height(8.dp)) - - LazyRow( - horizontalArrangement = Arrangement.spacedBy(8.dp) - ) { + + LazyRow(horizontalArrangement = Arrangement.spacedBy(8.dp)) { items(tempImageUris) { imagePath -> ImageItem( - imagePath = imagePath, - onRemove = { - val updatedUris = tempImageUris.filter { it != imagePath } - tempImageUris = updatedUris - onImagesChanged(updatedUris) - - // Delete the image file - ImageUtils.deleteImage(context, imagePath) - } + imagePath = imagePath, + onRemove = { + val updatedUris = tempImageUris.filter { it != imagePath } + tempImageUris = updatedUris + onImagesChanged(updatedUris) + + // Delete the image file + ImageUtils.deleteImage(context, imagePath) + } ) } } } else { Spacer(modifier = Modifier.height(8.dp)) Card( - modifier = Modifier - .fillMaxWidth() - .height(100.dp), - colors = CardDefaults.cardColors( - containerColor = MaterialTheme.colorScheme.surfaceVariant.copy(alpha = 0.3f) - ) + modifier = Modifier.fillMaxWidth().height(100.dp), + colors = + CardDefaults.cardColors( + containerColor = + MaterialTheme.colorScheme.surfaceVariant.copy( + alpha = 0.3f + ) + ) ) { - Box( - modifier = Modifier.fillMaxSize(), - contentAlignment = Alignment.Center - ) { - Column( - horizontalAlignment = Alignment.CenterHorizontally - ) { + Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { + Column(horizontalAlignment = Alignment.CenterHorizontally) { Icon( - Icons.Default.Add, - contentDescription = null, - tint = MaterialTheme.colorScheme.onSurfaceVariant + Icons.Default.Add, + contentDescription = null, + tint = MaterialTheme.colorScheme.onSurfaceVariant ) Spacer(modifier = Modifier.height(4.dp)) Text( - text = "Add photos of this problem", - style = MaterialTheme.typography.bodySmall, - color = MaterialTheme.colorScheme.onSurfaceVariant + text = "Add photos of this problem", + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurfaceVariant ) } } } } + + // Image Source Selection Dialog + if (showImageSourceDialog) { + AlertDialog( + onDismissRequest = { showImageSourceDialog = false }, + title = { Text("Add Photo") }, + text = { Text("Choose how you'd like to add a photo") }, + confirmButton = { + Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) { + TextButton( + onClick = { + showImageSourceDialog = false + imagePickerLauncher.launch("image/*") + } + ) { + Icon( + Icons.Default.PhotoLibrary, + contentDescription = null, + modifier = Modifier.size(16.dp) + ) + Spacer(modifier = Modifier.width(4.dp)) + Text("Gallery") + } + + TextButton( + onClick = { + showImageSourceDialog = false + when (ContextCompat.checkSelfPermission( + context, + Manifest.permission.CAMERA + ) + ) { + PackageManager.PERMISSION_GRANTED -> { + // Create image file for camera + val imageFile = createImageFile(context) + val uri = + FileProvider.getUriForFile( + context, + "${context.packageName}.fileprovider", + imageFile + ) + cameraImageUri = uri + cameraLauncher.launch(uri) + } + else -> { + cameraPermissionLauncher.launch( + Manifest.permission.CAMERA + ) + } + } + } + ) { + Icon( + Icons.Default.CameraAlt, + contentDescription = null, + modifier = Modifier.size(16.dp) + ) + Spacer(modifier = Modifier.width(4.dp)) + Text("Camera") + } + } + }, + dismissButton = { + TextButton(onClick = { showImageSourceDialog = false }) { Text("Cancel") } + } + ) + } } } +private fun createImageFile(context: android.content.Context): File { + val timeStamp = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(Date()) + val imageFileName = "JPEG_${timeStamp}_" + val storageDir = context.getExternalFilesDir(Environment.DIRECTORY_PICTURES) + return File.createTempFile(imageFileName, ".jpg", storageDir) +} + @Composable -private fun ImageItem( - imagePath: String, - onRemove: () -> Unit, - modifier: Modifier = Modifier -) { +private fun ImageItem(imagePath: String, onRemove: () -> Unit, modifier: Modifier = Modifier) { val context = LocalContext.current val imageFile = ImageUtils.getImageFile(context, imagePath) - - Box( - modifier = modifier.size(80.dp) - ) { + + Box(modifier = modifier.size(80.dp)) { AsyncImage( - model = imageFile, - contentDescription = "Problem photo", - modifier = Modifier - .fillMaxSize() - .clip(RoundedCornerShape(8.dp)), - contentScale = ContentScale.Crop + model = imageFile, + contentDescription = "Problem photo", + modifier = Modifier.fillMaxSize().clip(RoundedCornerShape(8.dp)), + contentScale = ContentScale.Crop ) - - IconButton( - onClick = onRemove, - modifier = Modifier - .align(Alignment.TopEnd) - .size(24.dp) - ) { + + IconButton(onClick = onRemove, modifier = Modifier.align(Alignment.TopEnd).size(24.dp)) { Card( - shape = RoundedCornerShape(12.dp), - colors = CardDefaults.cardColors( - containerColor = MaterialTheme.colorScheme.errorContainer - ) + shape = RoundedCornerShape(12.dp), + colors = + CardDefaults.cardColors( + containerColor = MaterialTheme.colorScheme.errorContainer + ) ) { Icon( - Icons.Default.Close, - contentDescription = "Remove photo", - modifier = Modifier - .fillMaxSize() - .padding(2.dp), - tint = MaterialTheme.colorScheme.onErrorContainer + Icons.Default.Close, + contentDescription = "Remove photo", + modifier = Modifier.fillMaxSize().padding(2.dp), + tint = MaterialTheme.colorScheme.onErrorContainer ) } } diff --git a/android/gradle/libs.versions.toml b/android/gradle/libs.versions.toml index 84d3273..b1cea28 100644 --- a/android/gradle/libs.versions.toml +++ b/android/gradle/libs.versions.toml @@ -11,8 +11,8 @@ androidxTestRunner = "1.7.0" androidxTestRules = "1.7.0" lifecycleRuntimeKtx = "2.9.4" activityCompose = "1.11.0" -composeBom = "2025.09.01" -room = "2.8.1" +composeBom = "2025.10.00" +room = "2.8.2" navigation = "2.9.5" viewmodel = "2.9.4" kotlinxSerialization = "1.9.0" diff --git a/ios/OpenClimb.xcodeproj/project.pbxproj b/ios/OpenClimb.xcodeproj/project.pbxproj index 30fa4de..a547356 100644 --- a/ios/OpenClimb.xcodeproj/project.pbxproj +++ b/ios/OpenClimb.xcodeproj/project.pbxproj @@ -465,7 +465,7 @@ CODE_SIGN_ENTITLEMENTS = OpenClimb/OpenClimb.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 16; + CURRENT_PROJECT_VERSION = 17; DEVELOPMENT_TEAM = 4BC9Y2LL4B; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; @@ -485,7 +485,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.2.5; + MARKETING_VERSION = 1.3.0; PRODUCT_BUNDLE_IDENTIFIER = com.atridad.OpenClimb; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -508,7 +508,7 @@ CODE_SIGN_ENTITLEMENTS = OpenClimb/OpenClimb.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 16; + CURRENT_PROJECT_VERSION = 17; DEVELOPMENT_TEAM = 4BC9Y2LL4B; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; @@ -528,7 +528,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.2.5; + MARKETING_VERSION = 1.3.0; PRODUCT_BUNDLE_IDENTIFIER = com.atridad.OpenClimb; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -592,7 +592,7 @@ ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; CODE_SIGN_ENTITLEMENTS = SessionStatusLiveExtension.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 16; + CURRENT_PROJECT_VERSION = 17; DEVELOPMENT_TEAM = 4BC9Y2LL4B; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = SessionStatusLive/Info.plist; @@ -603,7 +603,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.2.5; + MARKETING_VERSION = 1.3.0; PRODUCT_BUNDLE_IDENTIFIER = com.atridad.OpenClimb.SessionStatusLive; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -622,7 +622,7 @@ ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; CODE_SIGN_ENTITLEMENTS = SessionStatusLiveExtension.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 16; + CURRENT_PROJECT_VERSION = 17; DEVELOPMENT_TEAM = 4BC9Y2LL4B; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = SessionStatusLive/Info.plist; @@ -633,7 +633,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.2.5; + MARKETING_VERSION = 1.3.0; PRODUCT_BUNDLE_IDENTIFIER = com.atridad.OpenClimb.SessionStatusLive; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; diff --git a/ios/OpenClimb.xcodeproj/project.xcworkspace/xcuserdata/atridad.xcuserdatad/UserInterfaceState.xcuserstate b/ios/OpenClimb.xcodeproj/project.xcworkspace/xcuserdata/atridad.xcuserdatad/UserInterfaceState.xcuserstate index 1879d69ac55e1cb2a9802c33d5d4940214975f50..5c5c521ec67a9aa70a9ff1d6e8af6ac25646a5b5 100644 GIT binary patch literal 141374 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 L{{R0DRz3Q^jS+8= literal 135753 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 PkN5wU|G$5N{)Ybn;d)eq diff --git a/ios/OpenClimb/Components/CameraImagePicker.swift b/ios/OpenClimb/Components/CameraImagePicker.swift new file mode 100644 index 0000000..93008f7 --- /dev/null +++ b/ios/OpenClimb/Components/CameraImagePicker.swift @@ -0,0 +1,54 @@ +import SwiftUI +import UIKit + +struct CameraImagePicker: UIViewControllerRepresentable { + @Binding var isPresented: Bool + let onImageCaptured: (UIImage) -> Void + + func makeUIViewController(context: Context) -> UIImagePickerController { + let picker = UIImagePickerController() + picker.delegate = context.coordinator + picker.sourceType = .camera + picker.cameraCaptureMode = .photo + picker.cameraDevice = .rear + picker.allowsEditing = false + return picker + } + + func updateUIViewController(_ uiViewController: UIImagePickerController, context: Context) { + // Nothing here actually... Q_Q + } + + func makeCoordinator() -> Coordinator { + Coordinator(self) + } + + class Coordinator: NSObject, UIImagePickerControllerDelegate, UINavigationControllerDelegate { + let parent: CameraImagePicker + + init(_ parent: CameraImagePicker) { + self.parent = parent + } + + func imagePickerController( + _ picker: UIImagePickerController, + didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any] + ) { + if let image = info[.originalImage] as? UIImage { + parent.onImageCaptured(image) + } + parent.isPresented = false + } + + func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { + parent.isPresented = false + } + } +} + +// Extension to check camera availability +extension CameraImagePicker { + static var isCameraAvailable: Bool { + UIImagePickerController.isSourceTypeAvailable(.camera) + } +} diff --git a/ios/OpenClimb/Components/PhotoOptionSheet.swift b/ios/OpenClimb/Components/PhotoOptionSheet.swift new file mode 100644 index 0000000..d0bb26e --- /dev/null +++ b/ios/OpenClimb/Components/PhotoOptionSheet.swift @@ -0,0 +1,83 @@ +import PhotosUI +import SwiftUI + +struct PhotoOptionSheet: View { + @Binding var selectedPhotos: [PhotosPickerItem] + @Binding var imageData: [Data] + let maxImages: Int + let onCameraSelected: () -> Void + let onPhotoLibrarySelected: () -> Void + let onDismiss: () -> Void + + var body: some View { + NavigationView { + VStack(spacing: 20) { + Text("Add Photo") + .font(.title2) + .fontWeight(.semibold) + .padding(.top) + + Text("Choose how you'd like to add a photo") + .font(.subheadline) + .foregroundColor(.secondary) + + VStack(spacing: 16) { + Button(action: { + onPhotoLibrarySelected() + onDismiss() + }) { + HStack { + Image(systemName: "photo.on.rectangle") + .font(.title2) + .foregroundColor(.blue) + Text("Photo Library") + .font(.headline) + Spacer() + Image(systemName: "chevron.right") + .font(.caption) + .foregroundColor(.secondary) + } + .padding() + .background(.regularMaterial) + .cornerRadius(12) + } + .buttonStyle(PlainButtonStyle()) + + Button(action: { + onCameraSelected() + onDismiss() + }) { + HStack { + Image(systemName: "camera.fill") + .font(.title2) + .foregroundColor(.blue) + Text("Camera") + .font(.headline) + Spacer() + Image(systemName: "chevron.right") + .font(.caption) + .foregroundColor(.secondary) + } + .padding() + .background(.regularMaterial) + .cornerRadius(12) + } + .buttonStyle(PlainButtonStyle()) + } + .padding(.horizontal) + + Spacer() + } + .navigationBarTitleDisplayMode(.inline) + .toolbar { + ToolbarItem(placement: .navigationBarTrailing) { + Button("Cancel") { + onDismiss() + } + } + } + } + .presentationDetents([.height(300)]) + .interactiveDismissDisabled(false) + } +} diff --git a/ios/OpenClimb/Info.plist b/ios/OpenClimb/Info.plist index e65576e..ce92529 100644 --- a/ios/OpenClimb/Info.plist +++ b/ios/OpenClimb/Info.plist @@ -8,5 +8,7 @@ NSPhotoLibraryUsageDescription This app needs access to your photo library to add photos to climbing problems. + NSCameraUsageDescription + This app needs access to your camera to take photos of climbing problems. diff --git a/ios/OpenClimb/Models/ActivityAttributes.swift b/ios/OpenClimb/Models/ActivityAttributes.swift index afabbaa..f33612f 100644 --- a/ios/OpenClimb/Models/ActivityAttributes.swift +++ b/ios/OpenClimb/Models/ActivityAttributes.swift @@ -17,3 +17,4 @@ extension SessionActivityAttributes { SessionActivityAttributes(gymName: "Summit Climbing", startTime: Date()) } } + \ No newline at end of file diff --git a/ios/OpenClimb/Services/SyncService.swift b/ios/OpenClimb/Services/SyncService.swift index facff7b..27b45eb 100644 --- a/ios/OpenClimb/Services/SyncService.swift +++ b/ios/OpenClimb/Services/SyncService.swift @@ -401,31 +401,35 @@ class SyncService: ObservableObject { let imagePathMapping = try await syncImagesFromServer( backup: serverBackup, dataManager: dataManager) - // Merge data additively - never remove existing local data + // Merge deletion lists first to prevent resurrection of deleted items + let localDeletions = dataManager.getDeletedItems() + let allDeletions = localDeletions + serverBackup.deletedItems + let uniqueDeletions = Array(Set(allDeletions)) + print("Merging gyms...") let mergedGyms = mergeGyms( local: dataManager.gyms, server: serverBackup.gyms, - deletedItems: serverBackup.deletedItems) + deletedItems: uniqueDeletions) print("Merging problems...") let mergedProblems = try mergeProblems( local: dataManager.problems, server: serverBackup.problems, imagePathMapping: imagePathMapping, - deletedItems: serverBackup.deletedItems) + deletedItems: uniqueDeletions) print("Merging sessions...") let mergedSessions = try mergeSessions( local: dataManager.sessions, server: serverBackup.sessions, - deletedItems: serverBackup.deletedItems) + deletedItems: uniqueDeletions) print("Merging attempts...") let mergedAttempts = try mergeAttempts( local: dataManager.attempts, server: serverBackup.attempts, - deletedItems: serverBackup.deletedItems) + deletedItems: uniqueDeletions) // Update data manager with merged data dataManager.gyms = mergedGyms @@ -440,11 +444,6 @@ class SyncService: ObservableObject { dataManager.saveAttempts() dataManager.saveActiveSession() - // Merge deletion lists - let localDeletions = dataManager.getDeletedItems() - let allDeletions = localDeletions + serverBackup.deletedItems - let uniqueDeletions = Array(Set(allDeletions)) - // Update local deletions with merged list dataManager.clearDeletedItems() if let data = try? JSONEncoder().encode(uniqueDeletions) { diff --git a/ios/OpenClimb/Views/AddEdit/AddAttemptView.swift b/ios/OpenClimb/Views/AddEdit/AddAttemptView.swift index 36d7a0b..e44e39a 100644 --- a/ios/OpenClimb/Views/AddEdit/AddAttemptView.swift +++ b/ios/OpenClimb/Views/AddEdit/AddAttemptView.swift @@ -23,6 +23,22 @@ struct AddAttemptView: View { @State private var selectedPhotos: [PhotosPickerItem] = [] @State private var imageData: [Data] = [] + enum SheetType: Identifiable { + case photoOptions + case camera + + var id: Int { + switch self { + case .photoOptions: return 0 + case .camera: return 1 + } + } + } + + @State private var activeSheet: SheetType? + @State private var showPhotoPicker = false + @State private var isPhotoPickerActionPending = false + private var activeProblems: [Problem] { dataManager.activeProblems(forGym: gym.id) } @@ -78,6 +94,56 @@ struct AddAttemptView: View { .onChange(of: selectedDifficultySystem) { resetGradeIfNeeded() } + .onChange(of: selectedPhotos) { + Task { + await loadSelectedPhotos() + } + } + + .photosPicker( + isPresented: $showPhotoPicker, + selection: $selectedPhotos, + maxSelectionCount: 5 - imageData.count, + matching: .images + ) + .sheet( + item: $activeSheet, + onDismiss: { + if isPhotoPickerActionPending { + showPhotoPicker = true + isPhotoPickerActionPending = false + } + } + ) { sheetType in + switch sheetType { + case .photoOptions: + PhotoOptionSheet( + selectedPhotos: $selectedPhotos, + imageData: $imageData, + maxImages: 5, + onCameraSelected: { + activeSheet = .camera + }, + onPhotoLibrarySelected: { + isPhotoPickerActionPending = true + }, + onDismiss: { + activeSheet = nil + } + ) + case .camera: + CameraImagePicker( + isPresented: Binding( + get: { activeSheet == .camera }, + set: { if !$0 { activeSheet = nil } } + ) + ) { capturedImage in + if let jpegData = capturedImage.jpegData(compressionQuality: 0.8) { + imageData.append(jpegData) + } + } + } + } } @ViewBuilder @@ -216,11 +282,9 @@ struct AddAttemptView: View { } Section("Photos (Optional)") { - PhotosPicker( - selection: $selectedPhotos, - maxSelectionCount: 5, - matching: .images - ) { + Button(action: { + activeSheet = .photoOptions + }) { HStack { Image(systemName: "camera.fill") .foregroundColor(.blue) @@ -240,11 +304,7 @@ struct AddAttemptView: View { } .padding(.vertical, 4) } - .onChange(of: selectedPhotos) { _, _ in - Task { - await loadSelectedPhotos() - } - } + .disabled(imageData.count >= 5) if !imageData.isEmpty { ScrollView(.horizontal, showsIndicators: false) { @@ -378,6 +438,21 @@ struct AddAttemptView: View { } } + private func loadSelectedPhotos() async { + var newImageData: [Data] = [] + + for item in selectedPhotos { + if let data = try? await item.loadTransferable(type: Data.self) { + newImageData.append(data) + } + } + + await MainActor.run { + imageData.append(contentsOf: newImageData) + selectedPhotos.removeAll() + } + } + private func saveAttempt() { if showingCreateProblem { let difficulty = DifficultyGrade( @@ -436,19 +511,6 @@ struct AddAttemptView: View { dismiss() } - private func loadSelectedPhotos() async { - var newImageData: [Data] = [] - - for item in selectedPhotos { - if let data = try? await item.loadTransferable(type: Data.self) { - newImageData.append(data) - } - } - - await MainActor.run { - imageData = newImageData - } - } } struct ProblemSelectionRow: View { @@ -696,6 +758,22 @@ struct EditAttemptView: View { @State private var selectedPhotos: [PhotosPickerItem] = [] @State private var imageData: [Data] = [] + enum SheetType: Identifiable { + case photoOptions + case camera + + var id: Int { + switch self { + case .photoOptions: return 0 + case .camera: return 1 + } + } + } + + @State private var activeSheet: SheetType? + @State private var showPhotoPicker = false + @State private var isPhotoPickerActionPending = false + private var availableProblems: [Problem] { guard let session = dataManager.session(withId: attempt.sessionId) else { return [] @@ -772,6 +850,56 @@ struct EditAttemptView: View { .onChange(of: selectedDifficultySystem) { resetGradeIfNeeded() } + .onChange(of: selectedPhotos) { + Task { + await loadSelectedPhotos() + } + } + + .photosPicker( + isPresented: $showPhotoPicker, + selection: $selectedPhotos, + maxSelectionCount: 5 - imageData.count, + matching: .images + ) + .sheet( + item: $activeSheet, + onDismiss: { + if isPhotoPickerActionPending { + showPhotoPicker = true + isPhotoPickerActionPending = false + } + } + ) { sheetType in + switch sheetType { + case .photoOptions: + PhotoOptionSheet( + selectedPhotos: $selectedPhotos, + imageData: $imageData, + maxImages: 5, + onCameraSelected: { + activeSheet = .camera + }, + onPhotoLibrarySelected: { + isPhotoPickerActionPending = true + }, + onDismiss: { + activeSheet = nil + } + ) + case .camera: + CameraImagePicker( + isPresented: Binding( + get: { activeSheet == .camera }, + set: { if !$0 { activeSheet = nil } } + ) + ) { capturedImage in + if let jpegData = capturedImage.jpegData(compressionQuality: 0.8) { + imageData.append(jpegData) + } + } + } + } } @ViewBuilder @@ -910,11 +1038,9 @@ struct EditAttemptView: View { } Section("Photos (Optional)") { - PhotosPicker( - selection: $selectedPhotos, - maxSelectionCount: 5, - matching: .images - ) { + Button(action: { + activeSheet = .photoOptions + }) { HStack { Image(systemName: "camera.fill") .foregroundColor(.blue) @@ -934,11 +1060,7 @@ struct EditAttemptView: View { } .padding(.vertical, 4) } - .onChange(of: selectedPhotos) { _, _ in - Task { - await loadSelectedPhotos() - } - } + .disabled(imageData.count >= 5) if !imageData.isEmpty { ScrollView(.horizontal, showsIndicators: false) { @@ -1074,6 +1196,21 @@ struct EditAttemptView: View { } } + private func loadSelectedPhotos() async { + var newImageData: [Data] = [] + + for item in selectedPhotos { + if let data = try? await item.loadTransferable(type: Data.self) { + newImageData.append(data) + } + } + + await MainActor.run { + imageData.append(contentsOf: newImageData) + selectedPhotos.removeAll() + } + } + private func updateAttempt() { if showingCreateProblem { guard let gym = gym else { return } @@ -1131,19 +1268,6 @@ struct EditAttemptView: View { dismiss() } - private func loadSelectedPhotos() async { - var newImageData: [Data] = [] - - for item in selectedPhotos { - if let data = try? await item.loadTransferable(type: Data.self) { - newImageData.append(data) - } - } - - await MainActor.run { - imageData = newImageData - } - } } #Preview { diff --git a/ios/OpenClimb/Views/AddEdit/AddEditProblemView.swift b/ios/OpenClimb/Views/AddEdit/AddEditProblemView.swift index c075edc..b9cedd7 100644 --- a/ios/OpenClimb/Views/AddEdit/AddEditProblemView.swift +++ b/ios/OpenClimb/Views/AddEdit/AddEditProblemView.swift @@ -22,6 +22,21 @@ struct AddEditProblemView: View { @State private var selectedPhotos: [PhotosPickerItem] = [] @State private var imageData: [Data] = [] @State private var isEditing = false + enum SheetType: Identifiable { + case photoOptions + case camera + + var id: Int { + switch self { + case .photoOptions: return 0 + case .camera: return 1 + } + } + } + + @State private var activeSheet: SheetType? + @State private var showPhotoPicker = false + @State private var isPhotoPickerActionPending = false private var existingProblem: Problem? { guard let problemId = problemId else { return nil } @@ -87,6 +102,12 @@ struct AddEditProblemView: View { loadExistingProblem() setupInitialGym() } + .onChange(of: dataManager.gyms) { + // Ensure a gym is selected when gyms are loaded or changed + if selectedGym == nil && !dataManager.gyms.isEmpty { + selectedGym = dataManager.gyms.first + } + } .onChange(of: selectedGym) { updateAvailableOptions() } @@ -96,11 +117,56 @@ struct AddEditProblemView: View { .onChange(of: selectedDifficultySystem) { resetGradeIfNeeded() } + .sheet( + item: $activeSheet, + onDismiss: { + if isPhotoPickerActionPending { + showPhotoPicker = true + isPhotoPickerActionPending = false + } + } + ) { sheetType in + switch sheetType { + case .photoOptions: + PhotoOptionSheet( + selectedPhotos: $selectedPhotos, + imageData: $imageData, + maxImages: 5, + onCameraSelected: { + activeSheet = .camera + }, + onPhotoLibrarySelected: { + isPhotoPickerActionPending = true + }, + onDismiss: { + activeSheet = nil + } + ) + case .camera: + CameraImagePicker( + isPresented: Binding( + get: { activeSheet == .camera }, + set: { if !$0 { activeSheet = nil } } + ) + ) { capturedImage in + if let jpegData = capturedImage.jpegData(compressionQuality: 0.8) { + imageData.append(jpegData) + } + } + } + } + .photosPicker( + isPresented: $showPhotoPicker, + selection: $selectedPhotos, + maxSelectionCount: 5 - imageData.count, + matching: .images + ) .onChange(of: selectedPhotos) { Task { await loadSelectedPhotos() } } + } @ViewBuilder @@ -302,11 +368,9 @@ struct AddEditProblemView: View { @ViewBuilder private func PhotosSection() -> some View { Section("Photos (Optional)") { - PhotosPicker( - selection: $selectedPhotos, - maxSelectionCount: 5, - matching: .images - ) { + Button(action: { + activeSheet = .photoOptions + }) { HStack { Image(systemName: "camera.fill") .foregroundColor(.blue) @@ -326,6 +390,7 @@ struct AddEditProblemView: View { } .padding(.vertical, 4) } + .disabled(imageData.count >= 5) if !imageData.isEmpty { ScrollView(.horizontal, showsIndicators: false) { @@ -398,9 +463,14 @@ struct AddEditProblemView: View { } private func setupInitialGym() { - if let gymId = gymId, selectedGym == nil { + if let gymId = gymId { selectedGym = dataManager.gym(withId: gymId) } + + // Always ensure a gym is selected if available and none is currently selected + if selectedGym == nil && !dataManager.gyms.isEmpty { + selectedGym = dataManager.gyms.first + } } private func loadExistingProblem() { @@ -466,18 +536,14 @@ struct AddEditProblemView: View { private func loadSelectedPhotos() async { for item in selectedPhotos { if let data = try? await item.loadTransferable(type: Data.self) { - // Use ImageManager to save image - if let relativePath = ImageManager.shared.saveImageData(data) { - imagePaths.append(relativePath) - imageData.append(data) - } + imageData.append(data) } } selectedPhotos.removeAll() } private func saveProblem() { - guard let gym = selectedGym else { return } + guard let gym = selectedGym, canSave else { return } let trimmedName = name.trimmingCharacters(in: .whitespacesAndNewlines) let trimmedDescription = description.trimmingCharacters(in: .whitespacesAndNewlines) @@ -490,6 +556,14 @@ struct AddEditProblemView: View { let difficulty = DifficultyGrade(system: selectedDifficultySystem, grade: difficultyGrade) + // Save new image data and combine with existing paths + var allImagePaths = imagePaths + for data in imageData { + if let relativePath = ImageManager.shared.saveImageData(data) { + allImagePaths.append(relativePath) + } + } + if isEditing, let problem = existingProblem { let updatedProblem = problem.updated( name: trimmedName.isEmpty ? nil : trimmedName, @@ -499,7 +573,7 @@ struct AddEditProblemView: View { tags: trimmedTags, location: trimmedLocation.isEmpty ? nil : trimmedLocation, - imagePaths: imagePaths, + imagePaths: allImagePaths, isActive: isActive, dateSet: dateSet, notes: trimmedNotes.isEmpty ? nil : trimmedNotes @@ -515,7 +589,7 @@ struct AddEditProblemView: View { tags: trimmedTags, location: trimmedLocation.isEmpty ? nil : trimmedLocation, - imagePaths: imagePaths, + imagePaths: allImagePaths, dateSet: dateSet, notes: trimmedNotes.isEmpty ? nil : trimmedNotes ) diff --git a/sync/main.go b/sync/main.go index 4fe0ca3..9d46eb0 100644 --- a/sync/main.go +++ b/sync/main.go @@ -13,6 +13,8 @@ import ( "time" ) +const VERSION = "1.1.0" + func min(a, b int) int { if a < b { return a @@ -223,8 +225,9 @@ func (s *SyncServer) handleHealth(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusOK) json.NewEncoder(w).Encode(map[string]string{ - "status": "healthy", - "time": time.Now().UTC().Format(time.RFC3339), + "status": "healthy", + "version": VERSION, + "time": time.Now().UTC().Format(time.RFC3339), }) } @@ -355,7 +358,7 @@ func main() { http.HandleFunc("/images/upload", server.handleImageUpload) http.HandleFunc("/images/download", server.handleImageDownload) - fmt.Printf("OpenClimb sync server starting on port %s\n", port) + fmt.Printf("OpenClimb sync server v%s starting on port %s\n", VERSION, port) fmt.Printf("Data file: %s\n", dataFile) fmt.Printf("Images directory: %s\n", imagesDir) fmt.Printf("Health check available at /health\n") diff --git a/sync/version.md b/sync/version.md deleted file mode 100644 index 9084fa2..0000000 --- a/sync/version.md +++ /dev/null @@ -1 +0,0 @@ -1.1.0