/*
* Copyright (C) 2021-2023 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#define MLOG_TAG "MediaLibraryNapi"
#define ABILITY_WANT_PARAMS_UIEXTENSIONTARGETTYPE "ability.want.params.uiExtensionTargetType"
#include "media_library_napi.h"
#include <fcntl.h>
#include <functional>
#include <sys/sendfile.h>
#include "ability_context.h"
#include "context.h"
#include "directory_ex.h"
#include "file_ex.h"
#include "hitrace_meter.h"
#include "location_column.h"
#include "media_change_request_napi.h"
#include "media_column.h"
#include "media_file_uri.h"
#include "media_file_utils.h"
#include "medialibrary_client_errno.h"
#include "medialibrary_data_manager.h"
#include "medialibrary_db_const.h"
#include "medialibrary_errno.h"
#include "medialibrary_napi_log.h"
#include "medialibrary_peer_info.h"
#include "medialibrary_tracer.h"
#include "modal_ui_callback.h"
#include "modal_ui_extension_config.h"
#include "napi_base_context.h"
#include "napi_common_want.h"
#include "photo_album_column.h"
#include "photo_album_napi.h"
#include "result_set_utils.h"
#include "smart_album_napi.h"
#include "string_ex.h"
#include "string_wrapper.h"
#include "userfile_client.h"
#include "uv.h"
#include "form_map.h"
#include "ui_content.h"
#include "ui_extension_context.h"
#include "want.h"
#include "js_native_api.h"
#include "js_native_api_types.h"
#include "delete_callback.h"
using namespace std;
using namespace OHOS::AppExecFwk;
using namespace OHOS::NativeRdb;
using namespace OHOS::DataShare;
namespace OHOS {
namespace Media {
using ChangeType = AAFwk::ChangeInfo::ChangeType;
thread_local unique_ptr<ChangeListenerNapi> g_listObj = nullptr;
const int32_t SECOND_ENUM = 2;
const int32_t THIRD_ENUM = 3;
const int32_t FORMID_MAX_LEN = 19;
const int32_t SLEEP_TIME = 100;
const int64_t MAX_INT64 = 9223372036854775807;
const string DATE_FUNCTION = "DATE(";
mutex MediaLibraryNapi::sUserFileClientMutex_;
mutex MediaLibraryNapi::sOnOffMutex_;
string ChangeListenerNapi::trashAlbumUri_;
static map<string, ListenerType> ListenerTypeMaps = {
{"audioChange", AUDIO_LISTENER},
{"videoChange", VIDEO_LISTENER},
{"imageChange", IMAGE_LISTENER},
{"fileChange", FILE_LISTENER},
{"albumChange", ALBUM_LISTENER},
{"deviceChange", DEVICE_LISTENER},
{"remoteFileChange", REMOTEFILE_LISTENER}
};
const std::string SUBTYPE = "subType";
const std::string PAH_SUBTYPE = "subtype";
const std::string CAMERA_SHOT_KEY = "cameraShotKey";
const std::map<std::string, std::string> PHOTO_CREATE_OPTIONS_PARAM = {
{ SUBTYPE, PhotoColumn::PHOTO_SUBTYPE },
{ CAMERA_SHOT_KEY, PhotoColumn::CAMERA_SHOT_KEY },
{ PAH_SUBTYPE, PhotoColumn::PHOTO_SUBTYPE }
};
const std::string TITLE = "title";
const std::map<std::string, std::string> CREATE_OPTIONS_PARAM = {
{ TITLE, MediaColumn::MEDIA_TITLE }
};
thread_local napi_ref MediaLibraryNapi::sConstructor_ = nullptr;
thread_local napi_ref MediaLibraryNapi::sMediaTypeEnumRef_ = nullptr;
thread_local napi_ref MediaLibraryNapi::sDirectoryEnumRef_ = nullptr;
thread_local napi_ref MediaLibraryNapi::sVirtualAlbumTypeEnumRef_ = nullptr;
thread_local napi_ref MediaLibraryNapi::sFileKeyEnumRef_ = nullptr;
thread_local napi_ref MediaLibraryNapi::sPrivateAlbumEnumRef_ = nullptr;
thread_local napi_ref MediaLibraryNapi::sDeliveryModeEnumRef_ = nullptr;
thread_local napi_ref MediaLibraryNapi::sSourceModeEnumRef_ = nullptr;
thread_local napi_ref MediaLibraryNapi::sPositionTypeEnumRef_ = nullptr;
thread_local napi_ref MediaLibraryNapi::sPhotoSubType_ = nullptr;
thread_local napi_ref MediaLibraryNapi::sHiddenPhotosDisplayModeEnumRef_ = nullptr;
using CompleteCallback = napi_async_complete_callback;
using Context = MediaLibraryAsyncContext* ;
thread_local napi_ref MediaLibraryNapi::userFileMgrConstructor_ = nullptr;
thread_local napi_ref MediaLibraryNapi::photoAccessHelperConstructor_ = nullptr;
thread_local napi_ref MediaLibraryNapi::sUserFileMgrFileKeyEnumRef_ = nullptr;
thread_local napi_ref MediaLibraryNapi::sAudioKeyEnumRef_ = nullptr;
thread_local napi_ref MediaLibraryNapi::sImageVideoKeyEnumRef_ = nullptr;
thread_local napi_ref MediaLibraryNapi::sPhotoKeysEnumRef_ = nullptr;
thread_local napi_ref MediaLibraryNapi::sAlbumKeyEnumRef_ = nullptr;
thread_local napi_ref MediaLibraryNapi::sAlbumType_ = nullptr;
thread_local napi_ref MediaLibraryNapi::sAlbumSubType_ = nullptr;
thread_local napi_ref MediaLibraryNapi::sNotifyType_ = nullptr;
thread_local napi_ref MediaLibraryNapi::sDefaultChangeUriRef_ = nullptr;
thread_local napi_ref MediaLibraryNapi::sAnalysisType_ = nullptr;
thread_local napi_ref MediaLibraryNapi::sRequestPhotoTypeEnumRef_ = nullptr;
thread_local napi_ref MediaLibraryNapi::sResourceTypeEnumRef_ = nullptr;
constexpr int32_t DEFAULT_REFCOUNT = 1;
constexpr int32_t DEFAULT_ALBUM_COUNT = 1;
MediaLibraryNapi::MediaLibraryNapi()
: env_(nullptr) {}
MediaLibraryNapi::~MediaLibraryNapi() = default;
void MediaLibraryNapi::MediaLibraryNapiDestructor(napi_env env, void *nativeObject, void *finalize_hint)
{
MediaLibraryNapi *mediaLibrary = reinterpret_cast<MediaLibraryNapi*>(nativeObject);
if (mediaLibrary != nullptr) {
delete mediaLibrary;
mediaLibrary = nullptr;
}
}
napi_value MediaLibraryNapi::Init(napi_env env, napi_value exports)
{
napi_property_descriptor media_library_properties[] = {
DECLARE_NAPI_FUNCTION("getPublicDirectory", JSGetPublicDirectory),
DECLARE_NAPI_FUNCTION("getFileAssets", JSGetFileAssets),
DECLARE_NAPI_FUNCTION("getAlbums", JSGetAlbums),
DECLARE_NAPI_FUNCTION("createAsset", JSCreateAsset),
DECLARE_NAPI_FUNCTION("deleteAsset", JSDeleteAsset),
DECLARE_NAPI_FUNCTION("on", JSOnCallback),
DECLARE_NAPI_FUNCTION("off", JSOffCallback),
DECLARE_NAPI_FUNCTION("release", JSRelease),
DECLARE_NAPI_FUNCTION("getSmartAlbum", JSGetSmartAlbums),
DECLARE_NAPI_FUNCTION("getPrivateAlbum", JSGetPrivateAlbum),
DECLARE_NAPI_FUNCTION("createSmartAlbum", JSCreateSmartAlbum),
DECLARE_NAPI_FUNCTION("deleteSmartAlbum", JSDeleteSmartAlbum),
DECLARE_NAPI_FUNCTION("getActivePeers", JSGetActivePeers),
DECLARE_NAPI_FUNCTION("getAllPeers", JSGetAllPeers),
DECLARE_NAPI_FUNCTION("storeMediaAsset", JSStoreMediaAsset),
DECLARE_NAPI_FUNCTION("startImagePreview", JSStartImagePreview),
};
napi_property_descriptor static_prop[] = {
DECLARE_NAPI_STATIC_FUNCTION("getMediaLibrary", GetMediaLibraryNewInstance),
DECLARE_NAPI_STATIC_FUNCTION("getMediaLibraryAsync", GetMediaLibraryNewInstanceAsync),
DECLARE_NAPI_PROPERTY("MediaType", CreateMediaTypeEnum(env)),
DECLARE_NAPI_PROPERTY("FileKey", CreateFileKeyEnum(env)),
DECLARE_NAPI_PROPERTY("DirectoryType", CreateDirectoryTypeEnum(env)),
DECLARE_NAPI_PROPERTY("PrivateAlbumType", CreatePrivateAlbumTypeEnum(env)),
};
napi_value ctorObj;
napi_status status = napi_define_class(env, MEDIA_LIB_NAPI_CLASS_NAME.c_str(), NAPI_AUTO_LENGTH,
MediaLibraryNapiConstructor, nullptr,
sizeof(media_library_properties) / sizeof(media_library_properties[PARAM0]),
media_library_properties, &ctorObj);
if (status == napi_ok) {
int32_t refCount = 1;
if (napi_create_reference(env, ctorObj, refCount, &sConstructor_) == napi_ok) {
status = napi_set_named_property(env, exports, MEDIA_LIB_NAPI_CLASS_NAME.c_str(), ctorObj);
if (stat
没有合适的资源?快使用搜索试试~ 我知道了~
multimedia-media-library- 媒体库功能实现
共681个文件
h:274个
cpp:271个
gn:61个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 180 浏览量
2024-01-19
10:25:06
上传
评论
收藏 3.43MB ZIP 举报
温馨提示
medialibrary_standard 仓库提供了一系列易用的接口用于获取媒体文件元数据信息。 MediaLibrary接口暂不对外部应用开放, 仅内部使用。支持查询音频、视频和图片文件元数据信息。查询图片和视频相册。媒体文件操作如创建、重命名、拷贝和删除。相册操作如创建、重命名和删除
资源推荐
资源详情
资源评论
收起资源包目录
multimedia-media-library- 媒体库功能实现 (681个子文件)
media_library_napi.cpp 267KB
file_asset_napi.cpp 183KB
medialibrary_photo_operations_test.cpp 112KB
mtp_native_test.cpp 103KB
medialibrary_vision_test.cpp 100KB
medialibrary_rdbstore.cpp 81KB
medialibrary_fileext_test.cpp 80KB
medialibrary_asset_operations.cpp 73KB
media_file_extention_utils.cpp 72KB
medialibrary_audio_operations_test.cpp 68KB
medialibrary_album_operations.cpp 68KB
thumbnail_utils.cpp 66KB
media_asset_change_request_napi.cpp 66KB
medialibrary_object_utils.cpp 63KB
mtp_payload_data_test.cpp 63KB
medialibrary_photo_operations.cpp 62KB
medialibrary_napi_utils.cpp 61KB
medialibrary_datamanager_test.cpp 58KB
smart_album_napi.cpp 55KB
media_album_change_request_napi.cpp 53KB
photo_album_napi.cpp 50KB
mtp_packet_tools.cpp 47KB
medialibrary_data_manager.cpp 46KB
media_scanner_db.cpp 42KB
media_space_statistics_test.cpp 40KB
medialibrary_mtp_unit_test.cpp 40KB
media_file_utils.cpp 39KB
fetch_file_result_napi.cpp 39KB
album_napi.cpp 38KB
album_count_cover_test.cpp 38KB
mtp_medialibrary_manager.cpp 31KB
media_scanner.cpp 30KB
mtp_operation_utils.cpp 29KB
medialibrary_smartalbum_map_operations.cpp 29KB
mtp_test.cpp 27KB
medialibrary_rdb_utils.cpp 27KB
medialibrary_object_test.cpp 26KB
mock_mtp_operation_utils.cpp 25KB
media_datashare_ext_ability.cpp 25KB
medialibrary_utils_test.cpp 24KB
property.cpp 24KB
media_asset_manager_napi.cpp 24KB
medialibrary_queryperf_test.cpp 24KB
media_file_utils_test.cpp 23KB
photo_album_test.cpp 23KB
medialibrary_multistages_capture_test.cpp 23KB
medialibrary_command.cpp 22KB
media_library_manager.cpp 22KB
mtp_data_utils.cpp 22KB
medialibrary_album_source_test.cpp 21KB
ithumbnail_helper.cpp 21KB
fetch_result.cpp 20KB
thumbnail_manager.cpp 19KB
thumbnail_service.cpp 19KB
media_file_uri_test.cpp 18KB
medialibrary_file_operations.cpp 18KB
medialibrary_sync_operation.cpp 17KB
media_column.cpp 17KB
create_delete_directory_test.cpp 17KB
fetch_result_test.cpp 17KB
medialibrary_device.cpp 16KB
userfile_client_ex.cpp 16KB
photo_album_column.cpp 16KB
medialibrary_rdb_test.cpp 16KB
medialibrary_notify.cpp 15KB
medialibrary_audio_operations.cpp 15KB
media_file_uri.cpp 15KB
upgrade_restore.cpp 15KB
multistages_capture_manager.cpp 15KB
medialibrary_backup_test.cpp 14KB
notify_test.cpp 13KB
media_assets_change_request_napi.cpp 13KB
media_library_manager_test.cpp 13KB
file_asset.cpp 13KB
medialibrary_formmap_operations.cpp 12KB
photo_map_operations.cpp 12KB
medialibrary_device_operations.cpp 12KB
base_restore.cpp 12KB
mtp_operation.cpp 12KB
medialibrary_scanner_db_test.cpp 12KB
metadata.cpp 12KB
medialibrary_location_test.cpp 12KB
mtp_set_object_prop_test.cpp 11KB
medialibrary_mimetype_test.cpp 11KB
medialibrary_uripermission_operations.cpp 11KB
medialibrary_smartalbum_map_operations_test.cpp 11KB
metadata_extractor.cpp 11KB
medialibrary_unittest_utils.cpp 11KB
medialibrary_formmap_operations_test.cpp 11KB
medialibrary_common_utils.cpp 10KB
post_event_utils.cpp 10KB
command_line.cpp 10KB
media_privacy_manager.cpp 10KB
media_asset_edit_data_napi.cpp 10KB
shooting_mode_album_test.cpp 9KB
medialibrary_file_opertions_test.cpp 9KB
medialibrary_device_test.cpp 9KB
media_scanner_napi.cpp 9KB
thumbnail_aging_helper.cpp 9KB
mediascanner_unit_test.cpp 9KB
共 681 条
- 1
- 2
- 3
- 4
- 5
- 6
- 7
资源评论
Java程序员-张凯
- 粉丝: 1w+
- 资源: 6651
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功