@glassly/engine 0.4.0-beta.1025 → 0.4.0-beta.1052
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/engine.d.ts +2 -1
- package/build/engine.d.ts.map +1 -1
- package/build/engine.js +6 -4
- package/build/engine.js.map +1 -1
- package/build/facades/glasses.js +1 -1
- package/build/facades/glasses.js.map +1 -1
- package/build/facades/providerKeys.d.ts +1 -1
- package/build/facades/providerKeys.js +1 -1
- package/build/facades/providerKeys.js.map +1 -1
- package/build/facades/reports.d.ts +15 -0
- package/build/facades/reports.d.ts.map +1 -1
- package/build/facades/reports.js +37 -0
- package/build/facades/reports.js.map +1 -1
- package/build/generated/releaseMetadata.js +3 -3
- package/build/generated/releaseMetadata.js.map +1 -1
- package/build/react/useMentraLiveOta.d.ts.map +1 -1
- package/build/react/useMentraLiveOta.js.map +1 -1
- package/build/runtime/config.d.ts.map +1 -1
- package/build/runtime/config.js.map +1 -1
- package/build/services/AiTierResolution.d.ts +1 -1
- package/build/services/AiTierResolution.d.ts.map +1 -1
- package/build/services/AiTierResolution.js.map +1 -1
- package/build/services/AutomaticReportResult.d.ts.map +1 -1
- package/build/services/AutomaticReportResult.js.map +1 -1
- package/build/services/CloudClientService.d.ts +7 -5
- package/build/services/CloudClientService.d.ts.map +1 -1
- package/build/services/CloudClientService.js +17 -14
- package/build/services/CloudClientService.js.map +1 -1
- package/build/services/DisplayProcessor.d.ts.map +1 -1
- package/build/services/DisplayProcessor.js +2 -1
- package/build/services/DisplayProcessor.js.map +1 -1
- package/build/services/GestureDotsService.js +1 -1
- package/build/services/GestureDotsService.js.map +1 -1
- package/build/services/HotspotOtaTransport.d.ts.map +1 -1
- package/build/services/HotspotOtaTransport.js +0 -1
- package/build/services/HotspotOtaTransport.js.map +1 -1
- package/build/services/LocalMiniappRuntime.d.ts +5 -2
- package/build/services/LocalMiniappRuntime.d.ts.map +1 -1
- package/build/services/LocalMiniappRuntime.js +54 -23
- package/build/services/LocalMiniappRuntime.js.map +1 -1
- package/build/services/LocalSttFallbackCoordinator.d.ts.map +1 -1
- package/build/services/LocalSttFallbackCoordinator.js.map +1 -1
- package/build/services/NativeNavigationService.d.ts.map +1 -1
- package/build/services/NativeNavigationService.js.map +1 -1
- package/build/services/NavigationHandlers.d.ts +1 -1
- package/build/services/NavigationHandlers.js +2 -2
- package/build/services/NavigationHandlers.js.map +1 -1
- package/build/services/NavigationService.d.ts +2 -2
- package/build/services/NavigationService.d.ts.map +1 -1
- package/build/services/NavigationService.js +11 -11
- package/build/services/NavigationService.js.map +1 -1
- package/build/services/PairingIdentity.d.ts.map +1 -1
- package/build/services/PairingIdentity.js.map +1 -1
- package/build/services/PhoneCalendarService.d.ts.map +1 -1
- package/build/services/PhoneCalendarService.js.map +1 -1
- package/build/services/PhoneNotificationsSync.d.ts.map +1 -1
- package/build/services/PhoneNotificationsSync.js +2 -1
- package/build/services/PhoneNotificationsSync.js.map +1 -1
- package/build/services/PhoneStreamCoordinator.d.ts.map +1 -1
- package/build/services/PhoneStreamCoordinator.js.map +1 -1
- package/build/services/ProviderKeyValidation.d.ts +1 -1
- package/build/services/ProviderKeyValidation.js +1 -1
- package/build/services/ProviderKeyValidation.js.map +1 -1
- package/build/services/STTModelManager.d.ts.map +1 -1
- package/build/services/STTModelManager.js +1 -6
- package/build/services/STTModelManager.js.map +1 -1
- package/build/services/SupportProfileSync.d.ts.map +1 -1
- package/build/services/SupportProfileSync.js +3 -0
- package/build/services/SupportProfileSync.js.map +1 -1
- package/build/services/TranscriptionRouting.d.ts +3 -0
- package/build/services/TranscriptionRouting.d.ts.map +1 -1
- package/build/services/TranscriptionRouting.js +14 -0
- package/build/services/TranscriptionRouting.js.map +1 -1
- package/build/services/UIRouter.d.ts.map +1 -1
- package/build/services/UIRouter.js.map +1 -1
- package/build/services/controllers.d.ts.map +1 -1
- package/build/services/controllers.js +1 -0
- package/build/services/controllers.js.map +1 -1
- package/build/services/effectiveCapabilities.js +3 -2
- package/build/services/effectiveCapabilities.js.map +1 -1
- package/build/services/gestureDotGlyphs.d.ts.map +1 -1
- package/build/services/gestureDotGlyphs.js.map +1 -1
- package/build/services/manifestActions.d.ts.map +1 -1
- package/build/services/manifestActions.js.map +1 -1
- package/build/services/notificationAppPayload.d.ts +14 -0
- package/build/services/notificationAppPayload.d.ts.map +1 -0
- package/build/services/notificationAppPayload.js +15 -0
- package/build/services/notificationAppPayload.js.map +1 -0
- package/build/services/settingsBridge.d.ts.map +1 -1
- package/build/services/settingsBridge.js.map +1 -1
- package/build/stores/appVisibility.d.ts.map +1 -1
- package/build/stores/appVisibility.js.map +1 -1
- package/build/stores/gallerySync.d.ts.map +1 -1
- package/build/stores/gallerySync.js.map +1 -1
- package/build/stores/glasses.d.ts.map +1 -1
- package/build/stores/glasses.js +1 -0
- package/build/stores/glasses.js.map +1 -1
- package/build/stores/settings.d.ts.map +1 -1
- package/build/stores/settings.js +5 -3
- package/build/stores/settings.js.map +1 -1
- package/build/types/capabilities/nimo.d.ts.map +1 -1
- package/build/types/capabilities/nimo.js +19 -7
- package/build/types/capabilities/nimo.js.map +1 -1
- package/build/types/enums.d.ts +2 -1
- package/build/types/enums.d.ts.map +1 -1
- package/build/types/enums.js +1 -0
- package/build/types/enums.js.map +1 -1
- package/build/utils/display/index.d.ts +1 -0
- package/build/utils/display/index.d.ts.map +1 -1
- package/build/utils/display/index.js +2 -2
- package/build/utils/display/index.js.map +1 -1
- package/build/utils/display/profiles/index.d.ts +1 -0
- package/build/utils/display/profiles/index.d.ts.map +1 -1
- package/build/utils/display/profiles/index.js +1 -0
- package/build/utils/display/profiles/index.js.map +1 -1
- package/build/utils/display/profiles/nimo.d.ts +2 -0
- package/build/utils/display/profiles/nimo.d.ts.map +1 -0
- package/build/utils/display/profiles/nimo.js +3 -0
- package/build/utils/display/profiles/nimo.js.map +1 -0
- package/build/utils/display/scene/svgPath.js.map +1 -1
- package/build/utils/memory/search.d.ts.map +1 -1
- package/build/utils/memory/search.js +17 -7
- package/build/utils/memory/search.js.map +1 -1
- package/package.json +7 -7
- package/src/engine.ts +9 -7
- package/src/facades/glasses.ts +1 -1
- package/src/facades/providerKeys.ts +1 -1
- package/src/facades/reports.ts +41 -0
- package/src/generated/releaseMetadata.ts +3 -3
- package/src/react/useMentraLiveOta.ts +1 -4
- package/src/runtime/config.ts +1 -6
- package/src/services/AiTierResolution.ts +1 -1
- package/src/services/AutomaticReportResult.ts +1 -3
- package/src/services/CloudClientService.ts +17 -11
- package/src/services/DisplayProcessor.ts +2 -0
- package/src/services/GestureDotsService.ts +1 -1
- package/src/services/HotspotOtaTransport.ts +1 -5
- package/src/services/LocalMiniappRuntime.ts +66 -24
- package/src/services/LocalSttFallbackCoordinator.ts +1 -5
- package/src/services/NativeNavigationService.ts +1 -2
- package/src/services/NavigationHandlers.ts +2 -2
- package/src/services/NavigationService.ts +12 -11
- package/src/services/PairingIdentity.ts +1 -3
- package/src/services/PhoneCalendarService.ts +1 -3
- package/src/services/PhoneNotificationsSync.ts +2 -1
- package/src/services/PhoneStreamCoordinator.ts +1 -2
- package/src/services/ProviderKeyValidation.ts +1 -1
- package/src/services/STTModelManager.ts +1 -6
- package/src/services/SupportProfileSync.ts +2 -0
- package/src/services/TranscriptionRouting.ts +18 -0
- package/src/services/UIRouter.ts +3 -9
- package/src/services/controllers.ts +1 -0
- package/src/services/effectiveCapabilities.ts +3 -2
- package/src/services/gestureDotGlyphs.ts +10 -5
- package/src/services/manifestActions.ts +2 -1
- package/src/services/notificationAppPayload.ts +15 -0
- package/src/services/settingsBridge.ts +1 -2
- package/src/stores/appVisibility.ts +2 -5
- package/src/stores/gallerySync.ts +1 -7
- package/src/stores/glasses.ts +1 -0
- package/src/stores/settings.ts +5 -3
- package/src/types/capabilities/nimo.ts +20 -7
- package/src/types/enums.ts +1 -0
- package/src/utils/display/index.ts +2 -2
- package/src/utils/display/profiles/index.ts +2 -0
- package/src/utils/display/profiles/nimo.ts +2 -0
- package/src/utils/display/scene/svgPath.ts +1 -1
- package/src/utils/memory/search.ts +17 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gallerySync.js","sourceRoot":"","sources":["../../src/stores/gallerySync.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Gallery Sync Store\n * Manages gallery sync state independently of UI lifecycle\n */\n\nimport {create} from \"zustand\"\nimport {subscribeWithSelector} from \"zustand/middleware\"\n\n// Relocated from the host @/types/asg so this store is self-contained inside\n// engine. The host barrel re-exports this (a shim), so its importers are unchanged.\nexport interface PhotoInfo {\n name: string\n url: string\n download: string\n size: number\n modified: string | number // Unix timestamp (milliseconds) - can be string or number from API\n mime_type?: string\n is_video?: boolean\n thumbnail_data?: string\n downloaded_at?: number\n // Video duration in milliseconds (from glasses sync response)\n duration?: number\n // New fields for filesystem storage\n filePath?: string\n thumbnailPath?: string\n // Glasses model that captured this media\n glassesModel?: string\n}\n\n// Sync state machine states\nexport type SyncState =\n | \"idle\"\n | \"requesting_hotspot\"\n | \"connecting_wifi\"\n | \"syncing\"\n | \"complete\"\n | \"error\"\n | \"cancelled\"\n\nexport interface HotspotInfo {\n ssid: string\n password: string\n ip: string\n}\n\nexport interface SyncQueue {\n files: PhotoInfo[]\n currentIndex: number\n startedAt: number\n hotspotInfo: HotspotInfo\n}\n\nexport interface GallerySyncInfo {\n // State machine\n syncState: SyncState\n syncStarting: boolean\n\n // Progress tracking\n currentFile: string | null\n currentFileProgress: number // 0-100\n completedFiles: number\n totalFiles: number\n failedFiles: string[]\n\n // Queue (persisted separately via localStorageService)\n queue: PhotoInfo[]\n queueIndex: number\n\n // Hotspot info\n hotspotInfo: HotspotInfo | null\n syncServiceOpenedHotspot: boolean\n\n // Gallery status from glasses\n glassesPhotoCount: number\n glassesVideoCount: number\n glassesTotalCount: number\n glassesHasContent: boolean\n\n // Error tracking\n lastError: string | null\n}\n\nexport interface GallerySyncState extends GallerySyncInfo {\n // State transitions\n setSyncState: (state: SyncState) => void\n setSyncStarting: (starting: boolean) => void\n setRequestingHotspot: () => void\n setConnectingWifi: () => void\n setSyncing: (files: PhotoInfo[]) => void\n setSyncComplete: () => void\n setSyncError: (error: string) => void\n setSyncCancelled: () => void\n\n // Progress updates\n setCurrentFile: (fileName: string | null, progress: number) => void\n onFileProgress: (fileName: string, progress: number) => void\n onFileComplete: (fileName: string) => void\n onFileFailed: (fileName: string, error?: string) => void\n onFileProcessing: (fileName: string) => void\n onFileProcessed: (fileName: string) => void\n updateFileInQueue: (fileName: string, updatedFile: PhotoInfo) => void\n removeFilesFromQueue: (fileNames: string[]) => void\n\n // Processing queue tracking\n processingFiles: Set<string>\n processedFiles: number\n\n // Hotspot management\n setHotspotInfo: (info: HotspotInfo | null) => void\n setSyncServiceOpenedHotspot: (opened: boolean) => void\n\n // Gallery status from glasses\n setGlassesGalleryStatus: (photos: number, videos: number, total: number, hasContent: boolean) => void\n clearGlassesGalleryStatus: () => void\n\n // Queue management (for resume)\n setQueue: (files: PhotoInfo[], startIndex?: number) => void\n advanceQueue: () => void\n clearQueue: () => void\n\n // Full reset\n reset: () => void\n}\n\nconst initialState: GallerySyncInfo & {processingFiles: Set<string>; processedFiles: number} = {\n syncState: \"idle\",\n syncStarting: false,\n currentFile: null,\n currentFileProgress: 0,\n completedFiles: 0,\n totalFiles: 0,\n failedFiles: [],\n queue: [],\n queueIndex: 0,\n hotspotInfo: null,\n syncServiceOpenedHotspot: false,\n glassesPhotoCount: 0,\n glassesVideoCount: 0,\n glassesTotalCount: 0,\n glassesHasContent: false,\n lastError: null,\n processingFiles: new Set<string>(),\n processedFiles: 0,\n}\n\nexport const useGallerySyncStore = create<GallerySyncState>()(\n subscribeWithSelector((set, get) => ({\n ...initialState,\n\n // State transitions\n setSyncState: (syncState: SyncState) => set({syncState}),\n setSyncStarting: (syncStarting: boolean) => set({syncStarting}),\n\n setRequestingHotspot: () =>\n set({\n syncState: \"requesting_hotspot\",\n lastError: null,\n failedFiles: [],\n }),\n\n setConnectingWifi: () =>\n set({\n syncState: \"connecting_wifi\",\n }),\n\n setSyncing: (files: PhotoInfo[]) =>\n set({\n syncState: \"syncing\",\n // C4: Strip thumbnail_data (base64) from store to prevent OOM\n queue: files.map(({thumbnail_data: _thumbnailData, ...rest}) => rest),\n queueIndex: 0,\n totalFiles: files.length,\n completedFiles: 0,\n currentFile: files.length > 0 ? files[0].name : null,\n currentFileProgress: 0,\n failedFiles: [],\n lastError: null,\n processedFiles: 0,\n processingFiles: new Set<string>(),\n }),\n\n setSyncComplete: () =>\n set({\n syncState: \"complete\",\n currentFile: null,\n currentFileProgress: 0,\n // Keep queue intact so photos remain visible after sync\n // Don't clear: queue: [], queueIndex: 0\n }),\n\n setSyncError: (error: string) =>\n set({\n syncState: \"error\",\n lastError: error,\n currentFile: null,\n currentFileProgress: 0,\n }),\n\n setSyncCancelled: () =>\n set({\n syncState: \"cancelled\",\n currentFile: null,\n currentFileProgress: 0,\n queue: [],\n queueIndex: 0,\n }),\n\n // Progress updates\n setCurrentFile: (fileName: string | null, progress: number) =>\n set({\n currentFile: fileName,\n currentFileProgress: Math.max(0, Math.min(100, progress)),\n }),\n\n onFileProgress: (fileName: string, progress: number) => {\n const state = get()\n const clampedProgress = Math.max(0, Math.min(100, progress))\n // Throttle: skip update if same file and same percentage (prevents Zustand flood)\n if (clampedProgress === state.currentFileProgress && fileName === state.currentFile) {\n return\n }\n set({\n currentFile: fileName,\n currentFileProgress: clampedProgress,\n })\n },\n\n onFileComplete: (_fileName: string) => {\n const state = get()\n const newCompletedFiles = state.completedFiles + 1\n const newQueueIndex = state.queueIndex + 1\n const nextFile = state.queue[newQueueIndex]\n\n set({\n completedFiles: newCompletedFiles,\n queueIndex: newQueueIndex,\n currentFile: nextFile?.name || null,\n currentFileProgress: 0,\n })\n },\n\n onFileFailed: (fileName: string, _error?: string) => {\n const state = get()\n const newQueueIndex = state.queueIndex + 1\n const nextFile = state.queue[newQueueIndex]\n\n set({\n failedFiles: [...state.failedFiles, fileName],\n queueIndex: newQueueIndex,\n currentFile: nextFile?.name || null,\n currentFileProgress: 0,\n })\n },\n\n onFileProcessing: (fileName: string) => {\n const state = get()\n const newSet = new Set(state.processingFiles)\n newSet.add(fileName)\n set({processingFiles: newSet})\n },\n\n onFileProcessed: (fileName: string) => {\n const state = get()\n const newSet = new Set(state.processingFiles)\n newSet.delete(fileName)\n set({processingFiles: newSet, processedFiles: state.processedFiles + 1})\n },\n\n updateFileInQueue: (fileName: string, updatedFile: PhotoInfo) => {\n const state = get()\n const updatedQueue = state.queue.map((file) => (file.name === fileName ? updatedFile : file))\n set({queue: updatedQueue})\n },\n\n removeFilesFromQueue: (fileNames: string[]) => {\n if (fileNames.length === 0) return\n\n const filesToRemove = new Set(fileNames)\n const state = get()\n const failedFilesSet = new Set(state.failedFiles)\n const filesBeforeQueueIndex = state.queue\n .slice(0, state.queueIndex)\n .filter((file) => filesToRemove.has(file.name))\n const removedBeforeQueueIndex = filesBeforeQueueIndex.length\n const removedCompletedBeforeQueueIndex = filesBeforeQueueIndex.filter(\n (file) => !failedFilesSet.has(file.name),\n ).length\n const filteredQueue = state.queue.filter((file) => !filesToRemove.has(file.name))\n const removedCount = state.queue.length - filteredQueue.length\n\n if (removedCount === 0) return\n\n const nextQueueIndex = state.queueIndex - removedBeforeQueueIndex\n const currentFileRemoved = state.currentFile !== null && filesToRemove.has(state.currentFile)\n\n set({\n queue: filteredQueue,\n totalFiles: state.totalFiles - removedCount,\n completedFiles: Math.max(0, state.completedFiles - removedCompletedBeforeQueueIndex),\n queueIndex: nextQueueIndex,\n failedFiles: state.failedFiles.filter((fileName) => !filesToRemove.has(fileName)),\n processingFiles: new Set(Array.from(state.processingFiles).filter((fileName) => !filesToRemove.has(fileName))),\n currentFile: currentFileRemoved ? filteredQueue[nextQueueIndex]?.name || null : state.currentFile,\n })\n },\n\n // Hotspot management\n setHotspotInfo: (info: HotspotInfo | null) => set({hotspotInfo: info}),\n\n setSyncServiceOpenedHotspot: (opened: boolean) => set({syncServiceOpenedHotspot: opened}),\n\n // Gallery status from glasses\n setGlassesGalleryStatus: (photos: number, videos: number, total: number, hasContent: boolean) => {\n const state = get()\n // Reset to idle if sync is in a terminal state and new content is available\n // This allows syncing again after taking new photos\n const shouldResetToIdle =\n hasContent && (state.syncState === \"complete\" || state.syncState === \"error\" || state.syncState === \"cancelled\")\n\n set({\n glassesPhotoCount: photos,\n glassesVideoCount: videos,\n glassesTotalCount: total,\n glassesHasContent: hasContent,\n ...(shouldResetToIdle ? {syncState: \"idle\" as SyncState} : {}),\n })\n },\n\n clearGlassesGalleryStatus: () =>\n set({\n glassesPhotoCount: 0,\n glassesVideoCount: 0,\n glassesTotalCount: 0,\n glassesHasContent: false,\n }),\n\n // Queue management\n setQueue: (files: PhotoInfo[], startIndex: number = 0) =>\n set({\n // C4: Strip thumbnail_data (base64) from store to prevent OOM\n queue: files.map(({thumbnail_data: _thumbnailData, ...rest}) => rest),\n queueIndex: startIndex,\n totalFiles: files.length,\n completedFiles: startIndex,\n }),\n\n advanceQueue: () => {\n const state = get()\n set({queueIndex: state.queueIndex + 1})\n },\n\n clearQueue: () =>\n set({\n queue: [],\n queueIndex: 0,\n totalFiles: 0,\n completedFiles: 0,\n }),\n\n // Full reset\n reset: () => set({...initialState, processingFiles: new Set<string>()}),\n })),\n)\n\n// Selector helpers for common subscriptions\nexport const selectSyncProgress = (state: GallerySyncState) => ({\n syncState: state.syncState,\n currentFile: state.currentFile,\n currentFileProgress: state.currentFileProgress,\n completedFiles: state.completedFiles,\n totalFiles: state.totalFiles,\n failedFiles: state.failedFiles,\n processingFiles: state.processingFiles,\n})\n\nexport const selectIssyncing = (state: GallerySyncState) =>\n state.syncState === \"syncing\" || state.syncState === \"requesting_hotspot\" || state.syncState === \"connecting_wifi\"\n\nexport const selectGlassesGalleryStatus = (state: GallerySyncState) => ({\n photos: state.glassesPhotoCount,\n videos: state.glassesVideoCount,\n total: state.glassesTotalCount,\n hasContent: state.glassesHasContent,\n})\n"]}
|
|
1
|
+
{"version":3,"file":"gallerySync.js","sourceRoot":"","sources":["../../src/stores/gallerySync.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Gallery Sync Store\n * Manages gallery sync state independently of UI lifecycle\n */\n\nimport {create} from \"zustand\"\nimport {subscribeWithSelector} from \"zustand/middleware\"\n\n// Relocated from the host @/types/asg so this store is self-contained inside\n// engine. The host barrel re-exports this (a shim), so its importers are unchanged.\nexport interface PhotoInfo {\n name: string\n url: string\n download: string\n size: number\n modified: string | number // Unix timestamp (milliseconds) - can be string or number from API\n mime_type?: string\n is_video?: boolean\n thumbnail_data?: string\n downloaded_at?: number\n // Video duration in milliseconds (from glasses sync response)\n duration?: number\n // New fields for filesystem storage\n filePath?: string\n thumbnailPath?: string\n // Glasses model that captured this media\n glassesModel?: string\n}\n\n// Sync state machine states\nexport type SyncState =\n \"idle\" | \"requesting_hotspot\" | \"connecting_wifi\" | \"syncing\" | \"complete\" | \"error\" | \"cancelled\"\n\nexport interface HotspotInfo {\n ssid: string\n password: string\n ip: string\n}\n\nexport interface SyncQueue {\n files: PhotoInfo[]\n currentIndex: number\n startedAt: number\n hotspotInfo: HotspotInfo\n}\n\nexport interface GallerySyncInfo {\n // State machine\n syncState: SyncState\n syncStarting: boolean\n\n // Progress tracking\n currentFile: string | null\n currentFileProgress: number // 0-100\n completedFiles: number\n totalFiles: number\n failedFiles: string[]\n\n // Queue (persisted separately via localStorageService)\n queue: PhotoInfo[]\n queueIndex: number\n\n // Hotspot info\n hotspotInfo: HotspotInfo | null\n syncServiceOpenedHotspot: boolean\n\n // Gallery status from glasses\n glassesPhotoCount: number\n glassesVideoCount: number\n glassesTotalCount: number\n glassesHasContent: boolean\n\n // Error tracking\n lastError: string | null\n}\n\nexport interface GallerySyncState extends GallerySyncInfo {\n // State transitions\n setSyncState: (state: SyncState) => void\n setSyncStarting: (starting: boolean) => void\n setRequestingHotspot: () => void\n setConnectingWifi: () => void\n setSyncing: (files: PhotoInfo[]) => void\n setSyncComplete: () => void\n setSyncError: (error: string) => void\n setSyncCancelled: () => void\n\n // Progress updates\n setCurrentFile: (fileName: string | null, progress: number) => void\n onFileProgress: (fileName: string, progress: number) => void\n onFileComplete: (fileName: string) => void\n onFileFailed: (fileName: string, error?: string) => void\n onFileProcessing: (fileName: string) => void\n onFileProcessed: (fileName: string) => void\n updateFileInQueue: (fileName: string, updatedFile: PhotoInfo) => void\n removeFilesFromQueue: (fileNames: string[]) => void\n\n // Processing queue tracking\n processingFiles: Set<string>\n processedFiles: number\n\n // Hotspot management\n setHotspotInfo: (info: HotspotInfo | null) => void\n setSyncServiceOpenedHotspot: (opened: boolean) => void\n\n // Gallery status from glasses\n setGlassesGalleryStatus: (photos: number, videos: number, total: number, hasContent: boolean) => void\n clearGlassesGalleryStatus: () => void\n\n // Queue management (for resume)\n setQueue: (files: PhotoInfo[], startIndex?: number) => void\n advanceQueue: () => void\n clearQueue: () => void\n\n // Full reset\n reset: () => void\n}\n\nconst initialState: GallerySyncInfo & {processingFiles: Set<string>; processedFiles: number} = {\n syncState: \"idle\",\n syncStarting: false,\n currentFile: null,\n currentFileProgress: 0,\n completedFiles: 0,\n totalFiles: 0,\n failedFiles: [],\n queue: [],\n queueIndex: 0,\n hotspotInfo: null,\n syncServiceOpenedHotspot: false,\n glassesPhotoCount: 0,\n glassesVideoCount: 0,\n glassesTotalCount: 0,\n glassesHasContent: false,\n lastError: null,\n processingFiles: new Set<string>(),\n processedFiles: 0,\n}\n\nexport const useGallerySyncStore = create<GallerySyncState>()(\n subscribeWithSelector((set, get) => ({\n ...initialState,\n\n // State transitions\n setSyncState: (syncState: SyncState) => set({syncState}),\n setSyncStarting: (syncStarting: boolean) => set({syncStarting}),\n\n setRequestingHotspot: () =>\n set({\n syncState: \"requesting_hotspot\",\n lastError: null,\n failedFiles: [],\n }),\n\n setConnectingWifi: () =>\n set({\n syncState: \"connecting_wifi\",\n }),\n\n setSyncing: (files: PhotoInfo[]) =>\n set({\n syncState: \"syncing\",\n // C4: Strip thumbnail_data (base64) from store to prevent OOM\n queue: files.map(({thumbnail_data: _thumbnailData, ...rest}) => rest),\n queueIndex: 0,\n totalFiles: files.length,\n completedFiles: 0,\n currentFile: files.length > 0 ? files[0].name : null,\n currentFileProgress: 0,\n failedFiles: [],\n lastError: null,\n processedFiles: 0,\n processingFiles: new Set<string>(),\n }),\n\n setSyncComplete: () =>\n set({\n syncState: \"complete\",\n currentFile: null,\n currentFileProgress: 0,\n // Keep queue intact so photos remain visible after sync\n // Don't clear: queue: [], queueIndex: 0\n }),\n\n setSyncError: (error: string) =>\n set({\n syncState: \"error\",\n lastError: error,\n currentFile: null,\n currentFileProgress: 0,\n }),\n\n setSyncCancelled: () =>\n set({\n syncState: \"cancelled\",\n currentFile: null,\n currentFileProgress: 0,\n queue: [],\n queueIndex: 0,\n }),\n\n // Progress updates\n setCurrentFile: (fileName: string | null, progress: number) =>\n set({\n currentFile: fileName,\n currentFileProgress: Math.max(0, Math.min(100, progress)),\n }),\n\n onFileProgress: (fileName: string, progress: number) => {\n const state = get()\n const clampedProgress = Math.max(0, Math.min(100, progress))\n // Throttle: skip update if same file and same percentage (prevents Zustand flood)\n if (clampedProgress === state.currentFileProgress && fileName === state.currentFile) {\n return\n }\n set({\n currentFile: fileName,\n currentFileProgress: clampedProgress,\n })\n },\n\n onFileComplete: (_fileName: string) => {\n const state = get()\n const newCompletedFiles = state.completedFiles + 1\n const newQueueIndex = state.queueIndex + 1\n const nextFile = state.queue[newQueueIndex]\n\n set({\n completedFiles: newCompletedFiles,\n queueIndex: newQueueIndex,\n currentFile: nextFile?.name || null,\n currentFileProgress: 0,\n })\n },\n\n onFileFailed: (fileName: string, _error?: string) => {\n const state = get()\n const newQueueIndex = state.queueIndex + 1\n const nextFile = state.queue[newQueueIndex]\n\n set({\n failedFiles: [...state.failedFiles, fileName],\n queueIndex: newQueueIndex,\n currentFile: nextFile?.name || null,\n currentFileProgress: 0,\n })\n },\n\n onFileProcessing: (fileName: string) => {\n const state = get()\n const newSet = new Set(state.processingFiles)\n newSet.add(fileName)\n set({processingFiles: newSet})\n },\n\n onFileProcessed: (fileName: string) => {\n const state = get()\n const newSet = new Set(state.processingFiles)\n newSet.delete(fileName)\n set({processingFiles: newSet, processedFiles: state.processedFiles + 1})\n },\n\n updateFileInQueue: (fileName: string, updatedFile: PhotoInfo) => {\n const state = get()\n const updatedQueue = state.queue.map((file) => (file.name === fileName ? updatedFile : file))\n set({queue: updatedQueue})\n },\n\n removeFilesFromQueue: (fileNames: string[]) => {\n if (fileNames.length === 0) return\n\n const filesToRemove = new Set(fileNames)\n const state = get()\n const failedFilesSet = new Set(state.failedFiles)\n const filesBeforeQueueIndex = state.queue\n .slice(0, state.queueIndex)\n .filter((file) => filesToRemove.has(file.name))\n const removedBeforeQueueIndex = filesBeforeQueueIndex.length\n const removedCompletedBeforeQueueIndex = filesBeforeQueueIndex.filter(\n (file) => !failedFilesSet.has(file.name),\n ).length\n const filteredQueue = state.queue.filter((file) => !filesToRemove.has(file.name))\n const removedCount = state.queue.length - filteredQueue.length\n\n if (removedCount === 0) return\n\n const nextQueueIndex = state.queueIndex - removedBeforeQueueIndex\n const currentFileRemoved = state.currentFile !== null && filesToRemove.has(state.currentFile)\n\n set({\n queue: filteredQueue,\n totalFiles: state.totalFiles - removedCount,\n completedFiles: Math.max(0, state.completedFiles - removedCompletedBeforeQueueIndex),\n queueIndex: nextQueueIndex,\n failedFiles: state.failedFiles.filter((fileName) => !filesToRemove.has(fileName)),\n processingFiles: new Set(Array.from(state.processingFiles).filter((fileName) => !filesToRemove.has(fileName))),\n currentFile: currentFileRemoved ? filteredQueue[nextQueueIndex]?.name || null : state.currentFile,\n })\n },\n\n // Hotspot management\n setHotspotInfo: (info: HotspotInfo | null) => set({hotspotInfo: info}),\n\n setSyncServiceOpenedHotspot: (opened: boolean) => set({syncServiceOpenedHotspot: opened}),\n\n // Gallery status from glasses\n setGlassesGalleryStatus: (photos: number, videos: number, total: number, hasContent: boolean) => {\n const state = get()\n // Reset to idle if sync is in a terminal state and new content is available\n // This allows syncing again after taking new photos\n const shouldResetToIdle =\n hasContent && (state.syncState === \"complete\" || state.syncState === \"error\" || state.syncState === \"cancelled\")\n\n set({\n glassesPhotoCount: photos,\n glassesVideoCount: videos,\n glassesTotalCount: total,\n glassesHasContent: hasContent,\n ...(shouldResetToIdle ? {syncState: \"idle\" as SyncState} : {}),\n })\n },\n\n clearGlassesGalleryStatus: () =>\n set({\n glassesPhotoCount: 0,\n glassesVideoCount: 0,\n glassesTotalCount: 0,\n glassesHasContent: false,\n }),\n\n // Queue management\n setQueue: (files: PhotoInfo[], startIndex: number = 0) =>\n set({\n // C4: Strip thumbnail_data (base64) from store to prevent OOM\n queue: files.map(({thumbnail_data: _thumbnailData, ...rest}) => rest),\n queueIndex: startIndex,\n totalFiles: files.length,\n completedFiles: startIndex,\n }),\n\n advanceQueue: () => {\n const state = get()\n set({queueIndex: state.queueIndex + 1})\n },\n\n clearQueue: () =>\n set({\n queue: [],\n queueIndex: 0,\n totalFiles: 0,\n completedFiles: 0,\n }),\n\n // Full reset\n reset: () => set({...initialState, processingFiles: new Set<string>()}),\n })),\n)\n\n// Selector helpers for common subscriptions\nexport const selectSyncProgress = (state: GallerySyncState) => ({\n syncState: state.syncState,\n currentFile: state.currentFile,\n currentFileProgress: state.currentFileProgress,\n completedFiles: state.completedFiles,\n totalFiles: state.totalFiles,\n failedFiles: state.failedFiles,\n processingFiles: state.processingFiles,\n})\n\nexport const selectIssyncing = (state: GallerySyncState) =>\n state.syncState === \"syncing\" || state.syncState === \"requesting_hotspot\" || state.syncState === \"connecting_wifi\"\n\nexport const selectGlassesGalleryStatus = (state: GallerySyncState) => ({\n photos: state.glassesPhotoCount,\n videos: state.glassesVideoCount,\n total: state.glassesTotalCount,\n hasContent: state.glassesHasContent,\n})\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glasses.d.ts","sourceRoot":"","sources":["../../src/stores/glasses.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EAEvB,WAAW,EACX,SAAS,EACT,aAAa,EACb,mBAAmB,EAEpB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAC,kBAAkB,EAAE,sBAAsB,EAAE,cAAc,EAAC,MAAM,8BAA8B,CAAA;AAQvG,OAAO,EAAC,kBAAkB,EAAE,sBAAsB,EAAE,cAAc,EAAC,CAAA;AAEnE,eAAO,MAAM,sBAAsB,GAAI,OAAO;IAAC,UAAU,EAAE,uBAAuB,CAAA;CAAC,YAC7C,CAAA;AAEtC,eAAO,MAAM,kBAAkB,GAAI,OAAO;IAAC,UAAU,EAAE,uBAAuB,CAAA;CAAC,YAAqC,CAAA;AAEpH,KAAK,mBAAmB,GAAG,mBAAmB,GAAG;IAC/C,kBAAkB,EAAE,aAAa,GAAG,IAAI,CAAA;IACxC,WAAW,EAAE,WAAW,GAAG,IAAI,CAAA;IAC/B,aAAa,EAAE,OAAO,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,MAAM,WAAW,YAAa,SAAQ,mBAAmB;IACvD,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,OAAO,CAAA;IACxB,cAAc,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAA;IACjD,cAAc,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,KAAK,IAAI,CAAA;IAClH,WAAW,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACvD,cAAc,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAEtF,SAAS,EAAE,SAAS,GAAG,IAAI,CAAA;IAC3B,YAAY,EAAE,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,KAAK,IAAI,CAAA;IAChD,qBAAqB,EAAE,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,KAAK,IAAI,CAAA;IAC3D,cAAc,EAAE,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAA;IACtD,gBAAgB,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAA;IAC/C,wBAAwB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;IACpD,aAAa,EAAE,MAAM,IAAI,CAAA;IACzB,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,qBAAqB,EAAE,OAAO,CAAA;CAC/B;AAED,KAAK,gBAAgB,GAAG;IACtB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,KAAK,mBAAmB,GAAG;IACzB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,KAAK,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC,GAAG,gBAAgB,GAAG,mBAAmB,CAAA;AA2B9F,eAAO,MAAM,oBAAoB,GAAI,OAAO,mBAAmB;;;;;;;;;;CAgB9D,CAAA;
|
|
1
|
+
{"version":3,"file":"glasses.d.ts","sourceRoot":"","sources":["../../src/stores/glasses.ts"],"names":[],"mappings":"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"}
|
package/build/stores/glasses.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glasses.js","sourceRoot":"","sources":["../../src/stores/glasses.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n GlassesConnectionStatus,\n HotspotStatus,\n OtaProgress,\n OtaStatus,\n OtaUpdateInfo,\n PublicGlassesStatus,\n WifiStatus,\n} from \"@glassly/bluetooth-sdk\"\nimport {isGlassesConnected, isGlassesLinkLayerBusy, isGlassesReady} from \"../services/GlassesReadiness\"\nimport {create} from \"zustand\"\nimport {subscribeWithSelector} from \"zustand/middleware\"\n\nimport {BgTimer} from \"../utils/timers\"\n\n// Re-export the connection predicates (single source of truth lives in\n// GlassesReadiness) so importers of this store keep getting them.\nexport {isGlassesConnected, isGlassesLinkLayerBusy, isGlassesReady}\n\nexport const selectGlassesConnected = (state: {connection: GlassesConnectionStatus}) =>\n isGlassesConnected(state.connection)\n\nexport const selectGlassesReady = (state: {connection: GlassesConnectionStatus}) => isGlassesReady(state.connection)\n\ntype EngineGlassesStatus = PublicGlassesStatus & {\n otaUpdateAvailable: OtaUpdateInfo | null\n otaProgress: OtaProgress | null\n otaInProgress: boolean\n otaVersionUrl: string\n}\n\nexport interface GlassesState extends EngineGlassesStatus {\n systemTimeMs: number\n wifiStatusKnown: boolean\n setGlassesInfo: (info: GlassesInfoUpdate) => void\n setBatteryInfo: (batteryLevel: number, charging: boolean, caseBatteryLevel: number, caseCharging: boolean) => void\n setWifiInfo: (connected: boolean, ssid: string) => void\n setHotspotInfo: (enabled: boolean, ssid: string, password: string, ip: string) => void\n // OTA methods\n otaStatus: OtaStatus | null\n setOtaStatus: (status: OtaStatus | null) => void\n setOtaUpdateAvailable: (info: OtaUpdateInfo | null) => void\n setOtaProgress: (progress: OtaProgress | null) => void\n setOtaInProgress: (inProgress: boolean) => void\n setMtkUpdatedThisSession: (updated: boolean) => void\n clearOtaState: () => void\n reset: () => void\n mtkUpdatedThisSession: boolean\n}\n\ntype LegacyWifiFields = {\n wifiConnected?: boolean\n wifiSsid?: string\n wifiLocalIp?: string\n}\n\ntype LegacyHotspotFields = {\n hotspotEnabled?: boolean\n hotspotSsid?: string\n hotspotPassword?: string\n hotspotGatewayIp?: string\n hotspotLocalIp?: string\n}\n\ntype GlassesInfoUpdate = Partial<EngineGlassesStatus> & LegacyWifiFields & LegacyHotspotFields\n\nfunction wifiFromLegacyFields(info: LegacyWifiFields): WifiStatus | null {\n if (info.wifiConnected === true) {\n const ssid = info.wifiSsid?.trim()\n const localIp = info.wifiLocalIp?.trim()\n return ssid ? {state: \"connected\", ssid, ...(localIp ? {localIp} : {})} : null\n }\n if (info.wifiConnected === false) {\n return {state: \"disconnected\"}\n }\n return null\n}\n\nfunction hotspotFromLegacyFields(info: LegacyHotspotFields): HotspotStatus | null {\n if (info.hotspotEnabled === true) {\n const ssid = info.hotspotSsid?.trim()\n const password = info.hotspotPassword?.trim()\n const localIp = (info.hotspotGatewayIp ?? info.hotspotLocalIp)?.trim()\n return ssid && password && localIp ? {state: \"enabled\", ssid, password, localIp} : null\n }\n if (info.hotspotEnabled === false) {\n return {state: \"disabled\"}\n }\n return null\n}\n\nexport const getGlasesInfoPartial = (state: EngineGlassesStatus) => {\n const wifi = state.wifi\n const connected = isGlassesConnected(state.connection)\n return {\n batteryLevel: state.batteryLevel,\n charging: state.charging,\n caseBatteryLevel: state.caseBatteryLevel,\n caseCharging: state.caseCharging,\n connected,\n wifiConnected: wifi.state === \"connected\",\n wifiSsid: wifi.state === \"connected\" ? wifi.ssid : \"\",\n deviceModel: state.deviceModel,\n // Cloud GlassesInfo uses modelName, map from deviceModel so the cloud\n // knows which device is connected when it receives connection state updates\n modelName: state.deviceModel || null,\n }\n}\n\ninterface GlassesStore extends EngineGlassesStatus {\n systemTimeMs: number\n mtkUpdatedThisSession: boolean\n wifiStatusKnown: boolean\n otaStatus: OtaStatus | null\n}\n\nconst initialState: GlassesStore = {\n // state:\n connection: {state: \"disconnected\"},\n micEnabled: false,\n bluetoothClassicConnected: false,\n signalStrength: -1,\n signalStrengthUpdatedAt: 0,\n voiceActivityDetectionEnabled: true,\n // device info\n deviceModel: \"\",\n androidVersion: \"\",\n firmwareVersion: \"\",\n bluetoothMacAddress: \"\",\n wifiMacAddress: \"\",\n leftMacAddress: \"\",\n rightMacAddress: \"\",\n buildNumber: \"\",\n systemTimeMs: 0,\n otaVersionUrl: \"\",\n appVersion: \"\",\n bluetoothName: \"\",\n serialNumber: \"\",\n style: \"\",\n color: \"\",\n mtkFirmwareVersion: \"\",\n besFirmwareVersion: \"\",\n hotspotOtaVersion: 0,\n sceneCanvasWidth: 0,\n sceneCanvasHeight: 0,\n sceneVector: false,\n sceneSettle: false,\n volumeGate: false,\n firmwareUpdateAvailable: false,\n // wifi info\n wifi: {state: \"disconnected\"},\n wifiStatusKnown: false,\n // battery info\n batteryLevel: -1,\n charging: false,\n ringConnected: false,\n ringBatteryLevel: -1,\n ringCharging: false,\n caseBatteryLevel: -1,\n caseCharging: false,\n caseOpen: false,\n caseRemoved: true,\n // hotspot info\n hotspot: {state: \"disabled\"},\n // OTA update info\n otaStatus: null,\n otaUpdateAvailable: null,\n otaProgress: null,\n otaInProgress: false,\n mtkUpdatedThisSession: false,\n // controller drivers by registry id:\n controllers: {},\n // iOS ANCS consent (G2 consumes notifications on-firmware):\n ancsAuthorized: false,\n // G2 Glassly CFW keyboard bridge (revision 39+):\n keyboardBridge: false,\n keyboardConnected: false,\n keyboardName: \"\",\n keyboardSaved: false,\n keyboardState: \"idle\",\n keyboardError: \"\",\n}\n\nexport const useGlassesStore = create<GlassesState>()(\n subscribeWithSelector((set) => ({\n ...initialState,\n\n setGlassesInfo: (info) =>\n set((state) => {\n const {\n wifiConnected,\n wifiSsid,\n wifiLocalIp,\n hotspotEnabled,\n hotspotSsid,\n hotspotPassword,\n hotspotGatewayIp,\n hotspotLocalIp,\n wifi,\n hotspot,\n ...sdkInfo\n } = info\n const wifiUpdate = wifi ?? wifiFromLegacyFields({wifiConnected, wifiSsid, wifiLocalIp})\n const hotspotUpdate =\n hotspot ??\n hotspotFromLegacyFields({hotspotEnabled, hotspotSsid, hotspotPassword, hotspotGatewayIp, hotspotLocalIp})\n const hasWifiInfoUpdate =\n Object.prototype.hasOwnProperty.call(info, \"wifi\") ||\n Object.prototype.hasOwnProperty.call(info, \"wifiConnected\") ||\n Object.prototype.hasOwnProperty.call(info, \"wifiSsid\") ||\n Object.prototype.hasOwnProperty.call(info, \"wifiLocalIp\")\n const next = {\n ...state,\n ...sdkInfo,\n ...(wifiUpdate ? {wifi: wifiUpdate} : {}),\n ...(hotspotUpdate ? {hotspot: hotspotUpdate} : {}),\n ...(hasWifiInfoUpdate ? {wifiStatusKnown: true} : {}),\n }\n if (!isGlassesConnected(next.connection)) {\n next.wifiStatusKnown = false\n next.hotspotOtaVersion = 0\n }\n return next\n }),\n\n setBatteryInfo: (batteryLevel, charging, caseBatteryLevel, caseCharging) =>\n set({\n batteryLevel,\n charging,\n caseBatteryLevel,\n caseCharging,\n }),\n\n setWifiInfo: (connected, ssid) =>\n set(() => {\n const trimmedSsid = ssid.trim()\n if (connected && !trimmedSsid) {\n return {}\n }\n const wifi: WifiStatus = connected ? {state: \"connected\", ssid: trimmedSsid} : {state: \"disconnected\"}\n return {\n wifi,\n wifiStatusKnown: true,\n }\n }),\n\n setHotspotInfo: (enabled: boolean, ssid: string, password: string, ip: string) =>\n set(() => {\n const hotspot = hotspotFromLegacyFields({\n hotspotEnabled: enabled,\n hotspotSsid: ssid,\n hotspotPassword: password,\n hotspotGatewayIp: ip,\n })\n return hotspot ? {hotspot} : {}\n }),\n\n // OTA methods\n setOtaStatus: (status: OtaStatus | null) => set({otaStatus: status}),\n\n setOtaUpdateAvailable: (info: OtaUpdateInfo | null) => set({otaUpdateAvailable: info}),\n\n setOtaProgress: (progress: OtaProgress | null) =>\n set((state) => {\n const otaInProgress = progress !== null && progress.status !== \"FINISHED\" && progress.status !== \"FAILED\"\n console.log(\"🔍 GLASSES STORE: setOtaProgress called with:\", JSON.stringify(progress))\n console.log(\"🔍 GLASSES STORE: otaInProgress =\", otaInProgress)\n\n // Never allow progress to regress within the same stage+currentUpdate — except a new\n // work wave (STARTED) or the step after FINISHED (multi-hop APK: 27→31→36 re-downloads from 0).\n const prev = state.otaProgress\n const sameWave =\n progress &&\n prev &&\n progress.stage === prev.stage &&\n progress.currentUpdate === prev.currentUpdate &&\n progress.progress < prev.progress\n if (sameWave) {\n const nextIsNewWave = progress.status === \"STARTED\" || prev.status === \"FINISHED\"\n if (!nextIsNewWave) {\n return {otaProgress: {...progress, progress: prev.progress}, otaInProgress}\n }\n }\n\n return {otaProgress: progress, otaInProgress}\n }),\n\n setOtaInProgress: (inProgress: boolean) => set({otaInProgress: inProgress}),\n\n setMtkUpdatedThisSession: (updated: boolean) => set({mtkUpdatedThisSession: updated}),\n\n clearOtaState: () =>\n set({\n otaUpdateAvailable: null,\n otaProgress: null,\n otaInProgress: false,\n // Note: mtkUpdatedThisSession is NOT cleared here - it stays true until glasses disconnect/reboot\n }),\n\n reset: () => set(initialState),\n })),\n)\n\nexport function getGlassesSystemTimeMs(): number {\n return useGlassesStore.getState().systemTimeMs ?? 0\n}\n\nexport const waitForGlassesState = <K extends keyof GlassesState>(\n key: K,\n predicate: (value: GlassesState[K]) => boolean,\n timeoutMs = 1000,\n): Promise<boolean> => {\n return new Promise((resolve) => {\n const state = useGlassesStore.getState()\n if (predicate(state[key])) {\n resolve(true)\n return\n }\n\n const unsubscribe = useGlassesStore.subscribe(\n (s) => s[key],\n (value) => {\n if (predicate(value)) {\n unsubscribe()\n resolve(true)\n }\n },\n )\n\n BgTimer.setTimeout(() => {\n unsubscribe()\n resolve(predicate(useGlassesStore.getState()[key]))\n }, timeoutMs)\n })\n}\n"]}
|
|
1
|
+
{"version":3,"file":"glasses.js","sourceRoot":"","sources":["../../src/stores/glasses.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n GlassesConnectionStatus,\n HotspotStatus,\n OtaProgress,\n OtaStatus,\n OtaUpdateInfo,\n PublicGlassesStatus,\n WifiStatus,\n} from \"@glassly/bluetooth-sdk\"\nimport {isGlassesConnected, isGlassesLinkLayerBusy, isGlassesReady} from \"../services/GlassesReadiness\"\nimport {create} from \"zustand\"\nimport {subscribeWithSelector} from \"zustand/middleware\"\n\nimport {BgTimer} from \"../utils/timers\"\n\n// Re-export the connection predicates (single source of truth lives in\n// GlassesReadiness) so importers of this store keep getting them.\nexport {isGlassesConnected, isGlassesLinkLayerBusy, isGlassesReady}\n\nexport const selectGlassesConnected = (state: {connection: GlassesConnectionStatus}) =>\n isGlassesConnected(state.connection)\n\nexport const selectGlassesReady = (state: {connection: GlassesConnectionStatus}) => isGlassesReady(state.connection)\n\ntype EngineGlassesStatus = PublicGlassesStatus & {\n otaUpdateAvailable: OtaUpdateInfo | null\n otaProgress: OtaProgress | null\n otaInProgress: boolean\n otaVersionUrl: string\n}\n\nexport interface GlassesState extends EngineGlassesStatus {\n systemTimeMs: number\n wifiStatusKnown: boolean\n setGlassesInfo: (info: GlassesInfoUpdate) => void\n setBatteryInfo: (batteryLevel: number, charging: boolean, caseBatteryLevel: number, caseCharging: boolean) => void\n setWifiInfo: (connected: boolean, ssid: string) => void\n setHotspotInfo: (enabled: boolean, ssid: string, password: string, ip: string) => void\n // OTA methods\n otaStatus: OtaStatus | null\n setOtaStatus: (status: OtaStatus | null) => void\n setOtaUpdateAvailable: (info: OtaUpdateInfo | null) => void\n setOtaProgress: (progress: OtaProgress | null) => void\n setOtaInProgress: (inProgress: boolean) => void\n setMtkUpdatedThisSession: (updated: boolean) => void\n clearOtaState: () => void\n reset: () => void\n mtkUpdatedThisSession: boolean\n}\n\ntype LegacyWifiFields = {\n wifiConnected?: boolean\n wifiSsid?: string\n wifiLocalIp?: string\n}\n\ntype LegacyHotspotFields = {\n hotspotEnabled?: boolean\n hotspotSsid?: string\n hotspotPassword?: string\n hotspotGatewayIp?: string\n hotspotLocalIp?: string\n}\n\ntype GlassesInfoUpdate = Partial<EngineGlassesStatus> & LegacyWifiFields & LegacyHotspotFields\n\nfunction wifiFromLegacyFields(info: LegacyWifiFields): WifiStatus | null {\n if (info.wifiConnected === true) {\n const ssid = info.wifiSsid?.trim()\n const localIp = info.wifiLocalIp?.trim()\n return ssid ? {state: \"connected\", ssid, ...(localIp ? {localIp} : {})} : null\n }\n if (info.wifiConnected === false) {\n return {state: \"disconnected\"}\n }\n return null\n}\n\nfunction hotspotFromLegacyFields(info: LegacyHotspotFields): HotspotStatus | null {\n if (info.hotspotEnabled === true) {\n const ssid = info.hotspotSsid?.trim()\n const password = info.hotspotPassword?.trim()\n const localIp = (info.hotspotGatewayIp ?? info.hotspotLocalIp)?.trim()\n return ssid && password && localIp ? {state: \"enabled\", ssid, password, localIp} : null\n }\n if (info.hotspotEnabled === false) {\n return {state: \"disabled\"}\n }\n return null\n}\n\nexport const getGlasesInfoPartial = (state: EngineGlassesStatus) => {\n const wifi = state.wifi\n const connected = isGlassesConnected(state.connection)\n return {\n batteryLevel: state.batteryLevel,\n charging: state.charging,\n caseBatteryLevel: state.caseBatteryLevel,\n caseCharging: state.caseCharging,\n connected,\n wifiConnected: wifi.state === \"connected\",\n wifiSsid: wifi.state === \"connected\" ? wifi.ssid : \"\",\n deviceModel: state.deviceModel,\n // Cloud GlassesInfo uses modelName, map from deviceModel so the cloud\n // knows which device is connected when it receives connection state updates\n modelName: state.deviceModel || null,\n }\n}\n\ninterface GlassesStore extends EngineGlassesStatus {\n systemTimeMs: number\n mtkUpdatedThisSession: boolean\n wifiStatusKnown: boolean\n otaStatus: OtaStatus | null\n}\n\nconst initialState: GlassesStore = {\n // state:\n connection: {state: \"disconnected\"},\n micEnabled: false,\n bluetoothClassicConnected: false,\n signalStrength: -1,\n signalStrengthUpdatedAt: 0,\n voiceActivityDetectionEnabled: true,\n // device info\n deviceModel: \"\",\n androidVersion: \"\",\n firmwareVersion: \"\",\n bluetoothMacAddress: \"\",\n wifiMacAddress: \"\",\n leftMacAddress: \"\",\n rightMacAddress: \"\",\n buildNumber: \"\",\n systemTimeMs: 0,\n otaVersionUrl: \"\",\n appVersion: \"\",\n bluetoothName: \"\",\n serialNumber: \"\",\n style: \"\",\n color: \"\",\n mtkFirmwareVersion: \"\",\n besFirmwareVersion: \"\",\n hotspotOtaVersion: 0,\n sceneCanvasWidth: 0,\n sceneCanvasHeight: 0,\n sceneVector: false,\n sceneStereo: false,\n sceneSettle: false,\n volumeGate: false,\n firmwareUpdateAvailable: false,\n // wifi info\n wifi: {state: \"disconnected\"},\n wifiStatusKnown: false,\n // battery info\n batteryLevel: -1,\n charging: false,\n ringConnected: false,\n ringBatteryLevel: -1,\n ringCharging: false,\n caseBatteryLevel: -1,\n caseCharging: false,\n caseOpen: false,\n caseRemoved: true,\n // hotspot info\n hotspot: {state: \"disabled\"},\n // OTA update info\n otaStatus: null,\n otaUpdateAvailable: null,\n otaProgress: null,\n otaInProgress: false,\n mtkUpdatedThisSession: false,\n // controller drivers by registry id:\n controllers: {},\n // iOS ANCS consent (G2 consumes notifications on-firmware):\n ancsAuthorized: false,\n // G2 Glassly CFW keyboard bridge (revision 39+):\n keyboardBridge: false,\n keyboardConnected: false,\n keyboardName: \"\",\n keyboardSaved: false,\n keyboardState: \"idle\",\n keyboardError: \"\",\n}\n\nexport const useGlassesStore = create<GlassesState>()(\n subscribeWithSelector((set) => ({\n ...initialState,\n\n setGlassesInfo: (info) =>\n set((state) => {\n const {\n wifiConnected,\n wifiSsid,\n wifiLocalIp,\n hotspotEnabled,\n hotspotSsid,\n hotspotPassword,\n hotspotGatewayIp,\n hotspotLocalIp,\n wifi,\n hotspot,\n ...sdkInfo\n } = info\n const wifiUpdate = wifi ?? wifiFromLegacyFields({wifiConnected, wifiSsid, wifiLocalIp})\n const hotspotUpdate =\n hotspot ??\n hotspotFromLegacyFields({hotspotEnabled, hotspotSsid, hotspotPassword, hotspotGatewayIp, hotspotLocalIp})\n const hasWifiInfoUpdate =\n Object.prototype.hasOwnProperty.call(info, \"wifi\") ||\n Object.prototype.hasOwnProperty.call(info, \"wifiConnected\") ||\n Object.prototype.hasOwnProperty.call(info, \"wifiSsid\") ||\n Object.prototype.hasOwnProperty.call(info, \"wifiLocalIp\")\n const next = {\n ...state,\n ...sdkInfo,\n ...(wifiUpdate ? {wifi: wifiUpdate} : {}),\n ...(hotspotUpdate ? {hotspot: hotspotUpdate} : {}),\n ...(hasWifiInfoUpdate ? {wifiStatusKnown: true} : {}),\n }\n if (!isGlassesConnected(next.connection)) {\n next.wifiStatusKnown = false\n next.hotspotOtaVersion = 0\n }\n return next\n }),\n\n setBatteryInfo: (batteryLevel, charging, caseBatteryLevel, caseCharging) =>\n set({\n batteryLevel,\n charging,\n caseBatteryLevel,\n caseCharging,\n }),\n\n setWifiInfo: (connected, ssid) =>\n set(() => {\n const trimmedSsid = ssid.trim()\n if (connected && !trimmedSsid) {\n return {}\n }\n const wifi: WifiStatus = connected ? {state: \"connected\", ssid: trimmedSsid} : {state: \"disconnected\"}\n return {\n wifi,\n wifiStatusKnown: true,\n }\n }),\n\n setHotspotInfo: (enabled: boolean, ssid: string, password: string, ip: string) =>\n set(() => {\n const hotspot = hotspotFromLegacyFields({\n hotspotEnabled: enabled,\n hotspotSsid: ssid,\n hotspotPassword: password,\n hotspotGatewayIp: ip,\n })\n return hotspot ? {hotspot} : {}\n }),\n\n // OTA methods\n setOtaStatus: (status: OtaStatus | null) => set({otaStatus: status}),\n\n setOtaUpdateAvailable: (info: OtaUpdateInfo | null) => set({otaUpdateAvailable: info}),\n\n setOtaProgress: (progress: OtaProgress | null) =>\n set((state) => {\n const otaInProgress = progress !== null && progress.status !== \"FINISHED\" && progress.status !== \"FAILED\"\n console.log(\"🔍 GLASSES STORE: setOtaProgress called with:\", JSON.stringify(progress))\n console.log(\"🔍 GLASSES STORE: otaInProgress =\", otaInProgress)\n\n // Never allow progress to regress within the same stage+currentUpdate — except a new\n // work wave (STARTED) or the step after FINISHED (multi-hop APK: 27→31→36 re-downloads from 0).\n const prev = state.otaProgress\n const sameWave =\n progress &&\n prev &&\n progress.stage === prev.stage &&\n progress.currentUpdate === prev.currentUpdate &&\n progress.progress < prev.progress\n if (sameWave) {\n const nextIsNewWave = progress.status === \"STARTED\" || prev.status === \"FINISHED\"\n if (!nextIsNewWave) {\n return {otaProgress: {...progress, progress: prev.progress}, otaInProgress}\n }\n }\n\n return {otaProgress: progress, otaInProgress}\n }),\n\n setOtaInProgress: (inProgress: boolean) => set({otaInProgress: inProgress}),\n\n setMtkUpdatedThisSession: (updated: boolean) => set({mtkUpdatedThisSession: updated}),\n\n clearOtaState: () =>\n set({\n otaUpdateAvailable: null,\n otaProgress: null,\n otaInProgress: false,\n // Note: mtkUpdatedThisSession is NOT cleared here - it stays true until glasses disconnect/reboot\n }),\n\n reset: () => set(initialState),\n })),\n)\n\nexport function getGlassesSystemTimeMs(): number {\n return useGlassesStore.getState().systemTimeMs ?? 0\n}\n\nexport const waitForGlassesState = <K extends keyof GlassesState>(\n key: K,\n predicate: (value: GlassesState[K]) => boolean,\n timeoutMs = 1000,\n): Promise<boolean> => {\n return new Promise((resolve) => {\n const state = useGlassesStore.getState()\n if (predicate(state[key])) {\n resolve(true)\n return\n }\n\n const unsubscribe = useGlassesStore.subscribe(\n (s) => s[key],\n (value) => {\n if (predicate(value)) {\n unsubscribe()\n resolve(true)\n }\n },\n )\n\n BgTimer.setTimeout(() => {\n unsubscribe()\n resolve(predicate(useGlassesStore.getState()[key]))\n }, timeoutMs)\n })\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/stores/settings.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAwB,MAAM,aAAa,CAAA;AAS9D,OAAO,EAAC,wBAAwB,EAAE,gCAAgC,EAAC,MAAM,wBAAwB,CAAA;AAEjG,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAA;IACX,YAAY,EAAE,MAAM,GAAG,CAAA;IACvB,QAAQ,EAAE,OAAO,CAAA;IACjB,YAAY,EAAE,OAAO,CAAA;IAGrB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;IAEjC,QAAQ,CAAC,EAAE,MAAM,GAAG,CAAA;IAEpB,OAAO,EAAE,OAAO,CAAA;IAQhB,mBAAmB,CAAC,EAAE,IAAI,CAAA;IAC1B;;;;;;;;;;;;;;;OAeG;IACH,qBAAqB,CAAC,EAAE,IAAI,CAAA;CAC7B;AAKD,eAAO,MAAM,uBAAuB,IAAI,CAAA;AAExC,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/stores/settings.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAwB,MAAM,aAAa,CAAA;AAS9D,OAAO,EAAC,wBAAwB,EAAE,gCAAgC,EAAC,MAAM,wBAAwB,CAAA;AAEjG,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAA;IACX,YAAY,EAAE,MAAM,GAAG,CAAA;IACvB,QAAQ,EAAE,OAAO,CAAA;IACjB,YAAY,EAAE,OAAO,CAAA;IAGrB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;IAEjC,QAAQ,CAAC,EAAE,MAAM,GAAG,CAAA;IAEpB,OAAO,EAAE,OAAO,CAAA;IAQhB,mBAAmB,CAAC,EAAE,IAAI,CAAA;IAC1B;;;;;;;;;;;;;;;OAeG;IACH,qBAAqB,CAAC,EAAE,IAAI,CAAA;CAC7B;AAKD,eAAO,MAAM,uBAAuB,IAAI,CAAA;AAExC,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAkqCnC,CAAA;AAEV,eAAO,MAAM,eAAe,EAAE,MAAM,EAAuD,CAAA;AAI3F,eAAO,MAAM,sBAAsB,EAAE,MAAM,EA6D1C,CAAA;AAeD,eAAO,MAAM,qBAAqB,EAAE,MAAM,EAEV,CAAA;AAIhC,MAAM,WAAW,aAAa;IAE5B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAE7B,aAAa,EAAE,OAAO,CAAA;IAEtB,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,CAAC,EAAE,OAAO,KAAK,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IACzF,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IAC3E,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,GAAG,CAAA;IAEhC,eAAe,EAAE,MAAM,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IAE/C,oBAAoB,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC/C,uBAAuB,EAAE,MAAM,IAAI,CAAA;CACpC;AAuBD,eAAO,MAAM,gBAAgB;;;;;;;;EAsX5B,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,CAAC,GAAG,GAAG,EAAE,KAAK,MAAM,KAAG,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAI3F,CAAA"}
|
package/build/stores/settings.js
CHANGED
|
@@ -91,7 +91,7 @@ export const SETTINGS = {
|
|
|
91
91
|
},
|
|
92
92
|
memomind_accessory_picker: {
|
|
93
93
|
key: "memomind_accessory_picker",
|
|
94
|
-
defaultValue: () =>
|
|
94
|
+
defaultValue: () => true,
|
|
95
95
|
writable: true,
|
|
96
96
|
saveOnServer: false,
|
|
97
97
|
persist: true,
|
|
@@ -290,7 +290,7 @@ export const SETTINGS = {
|
|
|
290
290
|
saveOnServer: false,
|
|
291
291
|
persist: true,
|
|
292
292
|
},
|
|
293
|
-
// User-supplied AI/voice provider keys (Settings > API Keys). Not consumed
|
|
293
|
+
// User-supplied AI/voice provider keys (Settings > Privacy > API Keys). Not consumed
|
|
294
294
|
// by the app itself — they exist so miniapps declaring the API_KEYS manifest
|
|
295
295
|
// permission can read them via session.keys.get() (see
|
|
296
296
|
// MINIAPP_READABLE_API_KEYS in LocalMiniappRuntime; mapbox is also readable
|
|
@@ -718,12 +718,14 @@ export const SETTINGS = {
|
|
|
718
718
|
saveOnServer: true,
|
|
719
719
|
persist: true,
|
|
720
720
|
},
|
|
721
|
+
// Session-only: Position settings holds it on for stock G1, and a persisted
|
|
722
|
+
// true (app killed on that screen) blanks every glasses' display at boot.
|
|
721
723
|
screen_disabled: {
|
|
722
724
|
key: "screen_disabled",
|
|
723
725
|
defaultValue: () => false,
|
|
724
726
|
writable: true,
|
|
725
727
|
saveOnServer: false,
|
|
726
|
-
persist:
|
|
728
|
+
persist: false,
|
|
727
729
|
},
|
|
728
730
|
// glasses settings:
|
|
729
731
|
contextual_dashboard: {
|