UNPKG

@react-native-ohos/camera-roll

Version:
123 lines (113 loc) 3.71 kB
/** * MIT License * * Copyright (C) 2025 Huawei Device Co., Ltd. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ /* eslint-disable @typescript-eslint/ban-types */ // we use Object type because methods on the native side use NSDictionary and ReadableMap // and we want to stay compatible with those import {TurboModuleRegistry, TurboModule} from 'react-native'; import type {Double} from 'react-native/Libraries/Types/CodegenTypes'; export type PhotoThumbnail = { thumbnailBase64: string; }; export type AlbumType = 'All' | 'Album' | 'SmartAlbum'; export type AlbumSubType = | 'AlbumRegular' | 'AlbumSyncedEvent' | 'AlbumSyncedFaces' | 'AlbumSyncedAlbum' | 'AlbumImported' | 'AlbumMyPhotoStream' | 'AlbumCloudShared' | 'Unknown'; type Album = { id: string; title: string; count: number; type: AlbumType; subtype?: AlbumSubType; }; type SubTypes = | 'PhotoPanorama' | 'PhotoHDR' | 'PhotoScreenshot' | 'PhotoLive' | 'PhotoDepthEffect' | 'VideoStreamed' | 'VideoHighFrameRate' | 'VideoTimelapse'; type SourceType = 'UserLibrary' | 'CloudShared'; type PhotoIdentifier = { node: { id: string; type: string; subTypes: SubTypes; sourceType: SourceType; group_name: string[]; image: { filename: string | null; filepath: string | null; extension: string | null; uri: string; height: number; width: number; fileSize: number | null; playableDuration: number; orientation: number | null; }; timestamp: number; modificationTimestamp: number; location: { latitude?: number; longitude?: number; altitude?: number; heading?: number; speed?: number; } | null; }; }; type PhotoIdentifiersPage = { edges: Array<PhotoIdentifier>; page_info: { has_next_page: boolean; start_cursor?: string; end_cursor?: string; }; limited?: boolean; }; export interface Spec extends TurboModule { saveToCameraRoll(uri: string, options: Object): Promise<PhotoIdentifier>; getPhotos(params: Object): Promise<PhotoIdentifiersPage>; getAlbums(params: Object): Promise<Album[]>; deletePhotos(photoUris: Array<string>): Promise<void>; getPhotoByInternalID( internalID: string, options: Object, ): Promise<PhotoIdentifier>; getPhotoThumbnail( internalID: string, options: Object, ): Promise<PhotoThumbnail>; addListener(eventName: string): void; removeListeners(count: Double): void; } export default TurboModuleRegistry.getEnforcing<Spec>('RNCCameraRoll');