• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef OHOS_MEDIA_CLOUD_SYNC_CLOUD_MEDIA_SYNC_CONST_H
17 #define OHOS_MEDIA_CLOUD_SYNC_CLOUD_MEDIA_SYNC_CONST_H
18 
19 #include <string>
20 #include <map>
21 
22 #include "media_column.h"
23 #include "photo_album_column.h"
24 
25 namespace OHOS::Media::CloudSync {
26 const std::string FILE_ATTRIBUTES = "attributes";
27 const std::string FILE_FIX_VERSION = "fix_version";
28 const std::string FILE_LOCAL_ID = "local_id";
29 constexpr int MILLISECOND_TO_SECOND = 1000;
30 constexpr int BATCH_LIMIT_SIZE = 500;
31 const std::string FILE_PROPERTIES = "properties";
32 const uint32_t NO_ORIENTATION = 0;
33 const std::string THUMB_SUFFIX = "THM";
34 const std::string FILE_THUMBNAIL = "thumbnail";
35 const std::string FILE_LCD = "lcdThumbnail";
36 const std::string FILE_RAW = "raw";
37 const std::string FILE_EDIT_DATA = "editData";
38 const std::string FILE_EDIT_DATA_CAMERA = "editDataCamera";
39 const std::string FILE_CONTENT = "content";
40 const std::string FILE_NAME = "fileName";
41 const std::string FILE_SIZE = "size";
42 const std::string FILE_ROTATION = "rotate";
43 const std::string FILE_TYPE = "fileType";
44 const std::string FILE_SOURCE_PATH = "sourcePath";
45 const std::string LCD_SUFFIX = "LCD";
46 const std::string THUMB_EX_SUFFIX = "THM_EX/THM";
47 const std::string LCD_EX_SUFFIX = "THM_EX/LCD";
48 const std::string TMP_SUFFIX = ".temp.download";
49 const std::string SCREENSHOT_ALBUM_PATH = "/storage/emulated/0/Pictures/Screenshots/";
50 const std::string DEFAULT_HIDE_ALBUM_CLOUDID = "default-album-4";
51 const std::string DEFAULT_SCREENSHOT_LPATH_EN = "/Pictures/Screenshots";
52 const std::string SCREEN_SHOT_AND_RECORDER_EN = ".Screenshots";
53 const std::string DEFAULT_SCREENSHOT_CLOUDID = "default-album-2";
54 const std::string DEFAULT_SCREENRECORDS_LPATH = "/Pictures/Screenrecords";
55 const std::string PHOTO_CLOUD_PATH_URI = "/storage/cloud/files/";
56 const std::string PHOTO_MEDIA_PATH_URI = "/storage/media/local/files/";
57 const std::string ALBUM_PATH = "localPath";
58 const std::string ALBUM_PROPERTIES = "properties";
59 const std::string ALBUM_NAME = "albumName";
60 
61 const int32_t ORIENTATION_NORMAL = 1;
62 const int32_t ORIENTATION_ROTATE_90 = 6;
63 const int32_t ORIENTATION_ROTATE_180 = 3;
64 const int32_t ORIENTATION_ROTATE_270 = 8;
65 
66 const std::string MEDIA_ALBUM_NAME_EN = "album_name_en";
67 const std::string MEDIA_DUAL_ALBUM_NAME = "dual_album_name";
68 const std::string MEDIA_ALBUM_PRIORITY = "priority";
69 
70 const int32_t ROTATE_ANGLE_0 = 0;
71 const int32_t ROTATE_ANGLE_90 = 90;
72 const int32_t ROTATE_ANGLE_180 = 180;
73 const int32_t ROTATE_ANGLE_270 = 270;
74 
75 const std::map<int32_t, int32_t> FILE_ROTATIONS = {
76     {ORIENTATION_NORMAL, ROTATE_ANGLE_0},
77     {ORIENTATION_ROTATE_90, ROTATE_ANGLE_90},
78     {ORIENTATION_ROTATE_180, ROTATE_ANGLE_180},
79     {ORIENTATION_ROTATE_270, ROTATE_ANGLE_270},
80 };
81 
82 /* hash*/
83 const int32_t HASH_VLAUE = 31;
84 
85 /* file type */
86 enum {
87     FILE_TYPE_IMAGE = 1,
88     FILE_TYPE_VIDEO = 4,
89     FILE_TYPE_LIVEPHOTO = 9,
90 };
91 
92 enum class DataType : int32_t {
93     INT,
94     LONG,
95     DOUBLE,
96     STRING,
97 };
98 
99 enum {
100     DEFAULT_VALUE = -1,
101     TRUE_VALUE = 1,
102     FALSE_VALUE = 0,
103     CACHE_VIDEO_NUM = 100,
104     // ROTATE_ANGLE_0 = 0,
105     TO_MILLISECONDS = 1000,
106     LIMIT_SIZE = 1000,
107 };
108 enum CloudOperationType {
109     /* upload */
110     FILE_CREATE,
111     FILE_DELETE,
112     FILE_METADATA_MODIFY,
113     FILE_DATA_MODIFY,
114     FILE_COPY,
115     /* download */
116     FILE_DOWNLOAD,
117     /*clean*/
118     FILE_CLEAN
119 };
120 
121 enum CloudAlbumOperationType {
122     /* upload */
123     PHOTO_ALBUM_CREATE,
124     PHOTO_ALBUM_METADATA_MODIF,
125     PHOTO_ALBUM_DELETE
126 };
127 
128 enum AlbumType : int32_t {
129     NORMAL,
130     SHARE,
131     SOURCE = 2048,
132 };
133 
134 enum LogicType : int32_t {
135     PHYSICAL,
136     LOGICAL,
137 };
138 
139 struct MediaAlbumPluginRowData {
140     std::string lpath;
141     std::string albumName;
142     std::string albumNameEn;
143     std::string bundleName;
144     std::string cloudId;
145     std::string dualAlbumName;
146     int32_t priority;
147 };
148 
149 const std::vector<std::string> QUERY_ALBUM_COLUMNS = {
150     PhotoAlbumColumns::ALBUM_ID,
151     PhotoAlbumColumns::ALBUM_TYPE,
152     PhotoAlbumColumns::ALBUM_NAME,
153     PhotoAlbumColumns::ALBUM_LPATH,
154     PhotoAlbumColumns::ALBUM_CLOUD_ID,
155     PhotoAlbumColumns::ALBUM_SUBTYPE,
156     PhotoAlbumColumns::ALBUM_DATE_ADDED,
157     PhotoAlbumColumns::ALBUM_DATE_MODIFIED,
158     PhotoAlbumColumns::ALBUM_BUNDLE_NAME,
159     PhotoAlbumColumns::ALBUM_LOCAL_LANGUAGE,
160     PhotoAlbumColumns::COVER_URI_SOURCE,
161     PhotoAlbumColumns::COVER_CLOUD_ID,
162 };
163 
164 const std::vector<std::string> MEDIA_CLOUD_SYNC_COLUMNS = {
165     PhotoColumn::MEDIA_FILE_PATH,
166     PhotoColumn::MEDIA_TITLE,
167     PhotoColumn::MEDIA_SIZE,
168     PhotoColumn::MEDIA_NAME,
169     PhotoColumn::MEDIA_TYPE,
170     PhotoColumn::MEDIA_MIME_TYPE,
171     PhotoColumn::MEDIA_DEVICE_NAME,
172     PhotoColumn::MEDIA_DATE_ADDED,
173     PhotoColumn::MEDIA_DATE_MODIFIED,
174     PhotoColumn::MEDIA_DATE_TAKEN,
175     PhotoColumn::MEDIA_DURATION,
176     PhotoColumn::MEDIA_IS_FAV,
177     PhotoColumn::MEDIA_DATE_TRASHED,
178     PhotoColumn::MEDIA_HIDDEN,
179     PhotoColumn::PHOTO_HIDDEN_TIME,
180     PhotoColumn::MEDIA_RELATIVE_PATH,
181     PhotoColumn::MEDIA_VIRTURL_PATH,
182     PhotoColumn::PHOTO_META_DATE_MODIFIED,
183     PhotoColumn::PHOTO_ORIENTATION,
184     PhotoColumn::PHOTO_LATITUDE,
185     PhotoColumn::PHOTO_LONGITUDE,
186     PhotoColumn::PHOTO_HEIGHT,
187     PhotoColumn::PHOTO_WIDTH,
188     PhotoColumn::PHOTO_SUBTYPE,
189     PhotoColumn::PHOTO_BURST_COVER_LEVEL,
190     PhotoColumn::PHOTO_BURST_KEY,
191     PhotoColumn::PHOTO_DATE_YEAR,
192     PhotoColumn::PHOTO_DATE_MONTH,
193     PhotoColumn::PHOTO_DATE_DAY,
194     PhotoColumn::PHOTO_USER_COMMENT,
195     PhotoColumn::PHOTO_THUMB_STATUS,
196     PhotoColumn::PHOTO_SYNC_STATUS,
197     PhotoColumn::PHOTO_SHOOTING_MODE,
198     PhotoColumn::PHOTO_SHOOTING_MODE_TAG,
199     PhotoColumn::PHOTO_DYNAMIC_RANGE_TYPE,
200     PhotoColumn::PHOTO_FRONT_CAMERA,
201     PhotoColumn::PHOTO_DETAIL_TIME,
202     PhotoColumn::PHOTO_EDIT_TIME,
203     PhotoColumn::PHOTO_ORIGINAL_SUBTYPE,
204     PhotoColumn::PHOTO_COVER_POSITION,
205     PhotoColumn::MOVING_PHOTO_EFFECT_MODE,
206     PhotoColumn::PHOTO_OWNER_ALBUM_ID,
207     PhotoColumn::PHOTO_ORIGINAL_ASSET_CLOUD_ID,
208     PhotoColumn::PHOTO_SOURCE_PATH,
209     PhotoColumn::SUPPORTED_WATERMARK_TYPE,
210     PhotoColumn::PHOTO_STRONG_ASSOCIATION,
211     /* keep cloud_id at the last, so RecordToValueBucket can skip it*/
212     MediaColumn::MEDIA_ID,
213     PhotoColumn::PHOTO_CLOUD_ID,
214 };
215 
216 const std::vector<std::string> ALBUM_LOCAL_QUERY_COLUMNS = {
217     Media::PhotoAlbumColumns::ALBUM_ID,
218     Media::PhotoAlbumColumns::ALBUM_NAME,
219     Media::PhotoAlbumColumns::ALBUM_TYPE,
220     Media::PhotoAlbumColumns::ALBUM_DIRTY,
221     Media::PhotoAlbumColumns::ALBUM_LPATH,
222     Media::PhotoAlbumColumns::ALBUM_CLOUD_ID,
223 };
224 
225 const std::vector<std::string> ON_UPLOAD_COLUMNS = {
226     Media::PhotoColumn::MEDIA_FILE_PATH,
227     Media::PhotoColumn::MEDIA_DATE_MODIFIED,
228     Media::PhotoColumn::PHOTO_META_DATE_MODIFIED,
229     Media::MediaColumn::MEDIA_ID,
230     Media::PhotoColumn::PHOTO_CLOUD_ID,
231     Media::PhotoColumn::PHOTO_DIRTY,
232 };
233 
234 enum CheckFlag : int32_t {
235     CHECKED,
236     NEED_CHECK,
237 };
238 
239 enum ErrorType {
240     TYPE_UNKNOWN = 0,
241     TYPE_NOT_NEED_RETRY,  // 不需要重试的错误类型
242     TYPE_NEED_UPLOAD,     // 需要重新上传
243     TYPE_MAX,
244 };
245 
246 enum ServerErrorCode {
247     ACCESS_DENIED = 403,            // 没有权限访问记录、数据库等
248     ATOMIC_ERROR = 400,             // 原子批处理操作失败
249     AUTHENTICATION_FAILED = 401,    // 身份验证失败
250     AUTHENTICATION_REQUIRED = 421,  // 没有验证身份,但请求需要身份验证
251     BAD_REQUEST = 400,              // 无效的请求
252     CONFLICT = 409,                 // recordChangeTag值过期
253     EXISTS = 409,                   // 创建的资源已存在
254     INTERNAL_ERROR = 500,           // 内部错误
255     NOT_FOUND = 404,                // 资源未找到
256     QUOTA_EXCEEDED = 413,  // 如果访问公共数据库,您超出了应用程序的配额。访问私有数据库时,超出用户的iCloud配额
257     THROTTLED = 429,       // 请求被停止了,稍后重试
258     TRY_AGAIN_LATER = 503,             // 内部错误,稍后重试
259     VALIDATING_REFERENCE_ERROR = 412,  // 请求违反了验证引用约束
260     ZONE_NOT_FOUND = 404,              // 没有找到请求中指定的区域
261     UID_EMPTY = 1003,                  // 云空间未登录,userid为空
262     RESPONSE_EMPTY = 1004,             // 服务端返回为空
263     RESPONSE_NOT_OK = 1005,            // 服务端返回结果错误
264     NO_NETWORK = 1006,                 // 云空间没有网络
265     GRS_NULL = 1007,                   // grs为空
266     NETWORK_ERROR = 1008,              // 云空间网络异常
267     ERROR_PARAM = 1009,                // 参数错误
268     GET_AT_FAIL = 1010,                // 获取AT失效
269     ASSET_NOT_EXIST = 1011,            // Asset不存在
270     DELETE_ASSET_FAIL = 1012,          // 删除Asset失败
271     SWITCH_OFF = 1013,                 // 同步开关关闭
272     RESOURCE_INVALID = 1014,           // 资源重复,需要调用接口重新生成recordid
273     ERROR_ANTI_DELETE = 1015,          // 防反删
274     NOT_SUPPORT_APP = 1016,            // 应用不支持同步
275     FILE_NOT_EXIST = 1017,             // 上传文件不存在
276     READ_FILE_ERROR = 1018,            // 读取文件失败
277     RESPONSE_TIME_OUT = 1019,          // 响应超时
278     REQUEST_INHIBITED = 1020,          // 不允许
279     INVALID_LOCK_PARAM = 1021,         // 锁参数不对
280     RENEW_RESOURCE = 1024,             // 需要重置id,并重新上传
281     ALBUM_NOT_EXIST = 1025,            // 相册不存在
282 
283     // networkkit 返回的错误
284     NET_KIT_HTTP_ERROR = 10001,          // networkkit http错误,例如 服务端主动关闭拒绝
285     NET_KIT_INTERNAL_ERROR = 10002,      // networkkit 内部错误
286     NET_KIT_INTERRUPTED_ERROR = 10003,   // networkkit 中断错误,业务取消了上传下载
287     NET_KIT_NETWORK_ERROR = 10004,       // networkkit 网络错误
288     NET_KIT_NETWORK_IO_ERROR = 10005,    // networkkit IO错误
289     NET_KIT_PARAMS_CHECK_ERROR = 10006,  // networkkit 参数错误
290     NET_KIT_UNKOWN_ERROR = 10007,        // networkkit 未知错误
291 };
292 
293 enum ErrorDetailCode {
294     LACK_OF_PARAM = 4001,                     // 缺少入参
295     PARAM_INVALID = 4002,                     // 参数校验失败
296     PARAM_VALUE_NOT_SUPPORT = 4003,           // 参数不支持
297     PARAM_EXPIRED = 4004,                     // 入参已失效
298     SITE_NOT_FOUND = 4005,                    // 站点信息未知
299     NON_SUPPORT_CHARACTER_INCLUDED = 4006,    // 包含有不支持的字符
300     ILLEGAL_CHARACTER_INCLUDED = 4007,        // 包含有非法的字符
301     PARAMETER_LENGTH_BEYOND_LIMIT = 4008,     // 参数长度超过限制
302     PARENTFOLDER_NOT_FOUND = 4009,            // 父目录不存在
303     TOKEN_CFG_INVALID = 4010,                 // token配置项无效
304     USER_NOT_AUTHORIZED = 4011,               // 用户没有授权
305     APP_NOT_AUTHORIZED = 4012,                // App没有授权
306     TICKET_INVALID = 4013,                    // ticket无效
307     GRANT_CANCEL = 4014,                      // 取消授权
308     LOGIN_FAILED = 4015,                      // 登陆失败
309     SESSION_TIMEOUT = 4016,                   // 会话过期
310     FORCE_RELOGIN = 4017,                     // 强制重新登陆账号
311     FLOW_ID_NOT_MATCH = 4020,                 // 越权
312     DATA_MIGRATING = 4031,                    // 数据割接未完成
313     SERVICE_NOT_SUPPORT = 4032,               // 服务未开放
314     AGREEMENT_NOT_SIGNED = 4033,              // 协议未签署
315     CROSS_SITE_NOT_SUPPORT = 4034,            // 跨站点功能限制
316     INSUFFICIENT_SCOPE = 4035,                // Scope校验失败
317     INSUFFICIENT_PERMISSION = 4036,           // 无此操作权限
318     OPERATION_NOT_COMPLETE = 4037,            // 由于错误无法完成操作
319     OUTER_SERVICE_ERROR = 4038,               // 外部服务错误且无法恢复
320     SPACE_FULL = 4039,                        // 用户空间不足
321     CONTENT_NOT_FIND = 4041,                  // 内容未发现
322     CONTENT_UNAVAILABLE = 4042,               // 内容解析失败
323     CHANNEL_NOT_FOUND = 4043,                 // 订阅未发现
324     THUMBNAIL_NOT_FOUND = 4044,               // 缩略图不存在
325     SHARE_LINK_NOT_FOUND = 4045,              // 分享链接不存在
326     TEMP_DATA_INVALID = 4046,                 // 临时数据无效
327     FILE_NOT_FOUND = 4047,                    // 实体数据不存在
328     APP_NOT_EXISTS = 4048,                    // APP不存在
329     CATEGORY_NOT_EXISTS = 4049,               // 分类不存在
330     SHARE_CONTENT_NOT_EXISTS = 4050,          // 分享内容不存在
331     THUMBNAIL_GENERATE_FAILED = 4051,         // 缩略图生成失败
332     VERSION_CONFLICT = 4090,                  // 版本冲突
333     LOCK_FAILED = 4091,                       // 获取锁失败
334     SILENCE_USER_FAILED = 4092,               // 沉默用户拒绝失败
335     FILE_USING_FORBIDDEN_OP = 4093,           // 文件正在使用禁止操作
336     LOCK_BY_DEL_DEVICE = 4094,                // 设备因按设备删除已锁定
337     EXPIRE_APP_CLEANUP = 4095,                // 超期模块清理中
338     CURSOR_EXPIRED = 4100,                    // 游标过期
339     TEMP_DATA_CLEARD = 4101,                  // 临时数据已经被清理
340     CLOUD_DATA_UPDATED = 4121,                // 云端数据已被更新
341     FORCE_UPDATE_CLIENT = 4161,               // 新商业模式下,老端不支持,强制更新
342     USER_REQUEST_TOO_MANY = 4291,             // 用户请求太频繁
343     APP_REQUEST_TOO_MANY = 4292,              // 应用请求太频繁
344     FLOW_CONTROL = 4293,                      // 用户请求流控
345     USER_REQUEST_ERROR_TOO_MANY = 4294,       // 用户请求错误次数超过限制
346     USERDATA_EXCEEDS_UPPER_THRESHOLD = 4296,  // 用户上传数据超过阈值
347     PARTIAL_FILE_NOT_SUPPORT_SHARE = 4905,    // 部分文件不支持分享
348     PARENTFOLDER_TRASHED = 4906,              // 父目录被删除到回收站
349     ACCOUNT_NAME_WRONG = 4907,                // 用户账号错误
350     CIPHER_INVALID = 4908,                    // 用户秘钥已经失效
351     DUPLICATED_ID = 4909,                     // id已存在
352     VUDID_IMEI_INVALID = 4910,                // VUDID转换IMEI失败
353     FILE_NOT_SUPPORT_SHARE = 4911,            // 所有文件不支持分享
354     EXTERNAL_LINK_NOT_AUTHORIZED = 4912,      // 外部链接没有授权
355     ORIGINAL_NOT_EXSIT = 4913,                // 源文件不存在
356     NO_CHECK_RESULT = 4914,                   // 无检查结果
357     CHECK_FAILED = 4915,                      // 检查失败
358     BUCKET_NOT_EXISTS = 4916,                 // 桶不存在
359     RECORD_DATA_LOST = 4917,                  // Record记录丢失
360     MODIFY_NORMAL_DATA = 4918,  // 数据零丢失补全修复时,校验失败,正在修复的记录为正常的记录
361     DIVIDE_NOT_SUPPORT = 4919,                           // 不支持差分
362     BUCKET_NOT_IN_SAME_REGION = 4920,                    // 桶不同源
363     FILE_REFERENCED = 4921,                              // File被引用,不能删除
364     SLICE_OBJECT_LOST = 4923,                            // 分片丢失
365     ABNORMAL_DOWNLOAD = 4931,                            // 用户异常下载
366     SAME_FILENAME_NOT_ALLOWED = 4932,                    // 禁止重复文件名
367     CANNOT_USE_SERVICE = 4933,                           // 无法为此用户提供服务
368     FILES_NUM_BEYOND_LIMIT = 4934,                       // 下载文件数超过限制
369     FILES_SIZE_BEYOND_LIMIT = 4935,                      // 下载文件大小超过限制
370     TIER_BEYOND_LIMIT = 4936,                            // 层级超过限制
371     HISTORYVERSIONS_BEYOND_LIMIT = 4937,                 // 历史版本数超过限制
372     COPY_FORBIDDEN = 4938,                               // 此文件禁止拷贝
373     USER_SUSPEND_SERVICE = 4939,                         // 用户停用服务
374     FILE_VERSION_CONFLICT = 4940,                        // 文件版本冲突
375     REAL_NAME_AUTHENTICATION_FAILED = 4941,              // 实名认证失败
376     SHARE_LINK_EXPIRED = 4942,                           // 分享链接已经过期
377     RECEIVER_BEYOND_LIMIT = 4943,                        // 分享人数达到上限
378     CONTENT_SHARE_NOT_ALLOWED = 4944,                    // 内容禁止分享
379     DATA_NUMBER_BEYOND_LIMIT = 4945,                     // 云端数据超过限制
380     FORBIDDEN_USER = 4946,                               // 禁止用户操作
381     PARAM_CAN_NOT_UPDATE = 4947,                         // 参数禁止更新
382     HORIZONTAL_PRIVILEGE_ESCALATION = 4948,              // 存在横向越权
383     OPERATION_FORBIDDEN_IN_RECYCLE = 4949,               // 禁止在回收站进行此操作
384     FILENAME_LENGTH_BEYOND_LIMIT = 4950,                 // 文件名超过上限
385     OPERATION_FORBIDDEN_DELETE_BACKUP_EXIST = 4951,      // 禁止删除操作,存在clearTime内的备份记录
386     TEMP_KEY_EXPIRED = 4952,                             // 临时秘钥已过期
387     USER_SHARE_NOT_ALLOWED = 4953,                       // 用户被封禁,禁止分享
388     USER_SHARE_PRIVILEGE_LIMITED = 4954,                 // 用户没有权益
389     CONTENT_COPYRIGHT_LIMIT = 4955,                      // 版权文件禁止下载
390     RISK_MANAGE_FAILED = 4956,                           // 风控失败
391     SHAREING_TIMES_EXCEEDS_LIMITS = 4957,                // 分享次数超出了限制
392     TASK_RUNNING = 4959,                                 // 任务正在执行
393     SERVER_VERSION_UNAVAILABLE = 4960,                   // 服务版本号不可用
394     APP_STATUS_ABNORMAL = 4961,                          // APP状态不正常
395     CATEGORY_STATUS_ABNORMAL = 4962,                     // 分类状态不正常
396     CATEGORY_APP_ASSOCIATIONS_EXISTS = 4963,             // 存在应用和分类关系
397     FUNCTION_NOT_SUPPORT = 4964,                         // 功能暂不支持
398     MEMBER_KINSHIP_EXISTS = 4965,                        // 成员关系已存在
399     MEMBER_NUMBER_LIMIT = 4966,                          // 成员人数已达上限
400     USER_IS_JOINED = 4967,                               // 用户已经加入群组
401     USER_BE_FROZEN = 4968,                               // 用户被冻结
402     INVITER_LINK_EXPIRED = 4969,                         // 邀请码或链接已过期
403     RISK_SCANNING = 4970,                                // 分享内容审核中禁止访问
404     ALBUM_APPLICATION_NUMBER_LIMIT = 4971,               // 共享相册申请加入次数超过上限
405     INVITE_CODE_ERROR = 4972,                            // 邀请码错误
406     INVITER_LINK_USED = 4973,                            // 邀请码或链接已使用过
407     APPLICANT_IS_EXIST = 4974,                           // 记录已存在
408     APPLICANT_NOT_FOUND = 4975,                          // 记录不存在
409     APPLICANT_IS_EXPIRED = 4976,                         // 记录已失效
410     DATA_CLEARED_FORBIDDEN = 4977,                       // 云侧数据清理禁止访问
411     APPEAL_ACCOUNT_FORBIDDEN = 4978,                     // 人工封禁不支持申诉
412     APPLICANT_IS_PROCESSED = 4979,                       // 申请已经处理过
413     RESOURCE_NOT_MATCH = 4980,                           // 备份记录资源归属不匹配
414     RISKFILE_FORBIDDEN_DOWN = 4981,                      // 文件违规禁止下载
415     CONTENT_IS_EXPIRED = 4982,                           // 内容已过期
416     BATCH_IS_EXPIRED = 4983,                             // 批次失效
417     USER_NOT_REALNAME = 4984,                            // 用户未实名认证
418     CONTENT_ALL_RISK = 4985,                             // 内容全部违规
419     BUSINESS_MODEL_CHANGE_DATA_UPLOAD_FORBIDDEN = 4988,  // 新商业模式下,基础用户不允许调用
420     CLOUD_DATA_CLEARING = 4989,                          // 用户数据清理中,禁止数据操作
421     USER_DATA_MAX_LIMIT = 4990,                          // 用户数据达到规格上限
422     PARNENT_NOT_EXIST = 4991,                            // 文件父目录不存在
423     SERVER_IS_BUSY = 5001,                               // 服务器资源不够
424     OUTER_SERVICE_UNAVAILABLE = 5002,                    // 外部服务不可用
425     OUTER_SERVICE_BUSY = 5003,                           // 外部服务忙
426     DATABASE_UNAVAILABLE = 5004,                         // 数据库操作失败
427     RESOURCE_LOCKED = 5005,                              // 资源被锁住,暂时禁止操作
428     SERVER_TEMP_ERROR = 5006,                            // 服务器临时错误
429     SERVER_UPDATING = 5007,                              // 服务器升级中
430     RESOURCE_TRASHING = 5008,                            // 资源GC中,暂时禁止操作
431     SERVICE_UNAVAILABLE = 5030,                          // 服务不可用
432     NSP_FLOW_CONTROL = 5031,                             // NSP_FLOW_CONTROL
433     TEMP_ERROR_RETRY = 5040,                             // 触发端侧重试错误码
434 };
435 
436 enum CloudSyncServiceErrCode {
437     E_OK = 0,
438     E_SEVICE_DIED,
439     E_INVAL_ARG,
440     E_BROKEN_IPC,
441     E_SA_LOAD_FAILED,
442     E_SERVICE_DESCRIPTOR_IS_EMPTY,
443     E_PERMISSION_DENIED,
444     E_PERMISSION_SYSTEM,
445     E_GET_PHYSICAL_PATH_FAILED,
446     E_GET_TOKEN_INFO_ERROR,
447     E_SYNCER_NUM_OUT_OF_RANGE,
448     E_SYNC_FAILED_BATTERY_LOW,
449     E_SYNC_FAILED_BATTERY_TOO_LOW,
450     E_SYNC_FAILED_NETWORK_NOT_AVAILABLE,
451     E_GET_NETWORK_MANAGER_FAILED,
452     E_DELETE_FAILED,
453     E_NO_SUCH_FILE,
454     E_RENAME_FAIL,
455     E_SYSTEM_LOAD_OVER,
456     E_EXCEED_MAX_SIZE,
457     E_ILLEGAL_URI,
458 
459     /* data syncer */
460     E_CLOUD_SDK,
461     E_RDB,
462     E_CONTEXT,
463     E_STOP,
464     E_PENDING,
465     E_SCHEDULE,
466     E_ASYNC_RUN,
467     E_PATH,
468     E_DATA,
469     E_NOTIFY,
470     E_UNKNOWN,
471     E_CLOUD_STORAGE_FULL,
472     E_LOCAL_STORAGE_FULL,
473     E_BUSINESS_MODE_CHANGED,
474     E_OSACCOUNT,
475     E_USER_LOCKED,
476     E_GET_SIZE_ERROR,
477 
478     E_IPC_READ_FAILED,
479     E_IPC_WRITE_FAILED,
480     E_SOFTBUS_SESSION_FAILED,
481     E_GET_DEVICE_ID,
482     E_GET_USER_ID,
483     E_NULLPTR,
484     /* session */
485     E_CREATE_SESSION,
486     E_OPEN_SESSION,
487     E_WAIT_SESSION_OPENED,
488     E_FILE_NOT_EXIST,
489     E_SEND_FILE,
490     E_MEMORY,
491 
492     /* eventhandler */
493     E_EVENT_HANDLER,
494     E_ZIP,
495 
496     /* download timeout */
497     E_TIMEOUT,
498 
499     E_SOURCE_BASIC = 10000,
500 
501     E_THM_SOURCE_BASIC = E_SOURCE_BASIC + 1000,
502     E_THM_SIZE_IS_ZERO = E_THM_SOURCE_BASIC + 201,
503     E_THM_IS_TOO_LARGE = E_THM_SIZE_IS_ZERO + 1,
504 
505     E_LCD_SOURCE_BASIC = E_SOURCE_BASIC + 2000,
506     E_LCD_SIZE_IS_ZERO = E_LCD_SOURCE_BASIC + 201,
507     E_LCD_IS_TOO_LARGE = E_LCD_SIZE_IS_ZERO + 1,
508 
509     E_CONTENT_SOURCE_BASIC = E_SOURCE_BASIC + 3000,
510     E_CONTENT_SIZE_IS_ZERO = E_CONTENT_SOURCE_BASIC + 201,
511     E_CONTENT_COVERT_LIVE_PHOTO = E_CONTENT_SIZE_IS_ZERO + 1,
512     E_CONTENT_RAW_SIZE_IS_ZERO = E_CONTENT_COVERT_LIVE_PHOTO + 1,
513 
514     E_FIELD_BASIC = 20000,
515 
516     E_DB_FIELD_BASIC = E_FIELD_BASIC + 1000,
517     E_DB_SIZE_IS_ZERO = E_DB_FIELD_BASIC + 1,
518     E_DB_ALBUM_NOT_FOUND = E_DB_SIZE_IS_ZERO + 1,
519     E_DB_ALBUM_ID_IS_EMPTY = E_DB_ALBUM_NOT_FOUND + 1,
520 
521     E_DK_FIELD_BASIC = E_FIELD_BASIC + 2000,
522     E_NO_ATTRIBUTES = E_DK_FIELD_BASIC + 1,
523 };
524 
525 enum AlbumSource {
526     ALBUM_FROM_LOCAL = 1,
527     ALBUM_FROM_CLOUD = 2,
528 };
529 
530 enum Clean {
531     NOT_NEED_CLEAN = 0,
532     NEED_CLEAN,
533 };
534 
535 enum ThmLcdState {
536     THM = 0b001,
537     LCD = 0b010,
538     THMLCD = 0b011,
539 };
540 
541 enum PhotoPosition {
542     POSITION_LOCAL = 1,
543     POSITION_CLOUD,
544     POSITION_BOTH,
545 };
546 
547 enum StatsIndex {
548     NEW_RECORDS_COUNT = 0,
549     MERGE_RECORDS_COUNT = 1,
550     META_MODIFY_RECORDS_COUNT = 2,
551     FILE_MODIFY_RECORDS_COUNT = 3,
552     DELETE_RECORDS_COUNT = 4,
553 };
554 
555 enum class MediaTableType : uint32_t {
556     TYPE_ASSET,
557     TYPE_ALBUM,
558 };
559 
560 static constexpr int STORAGE_MANAGER_MANAGER_ID = 5003;
561 static const std::string CLOUD_BASE_URI = "datashareproxy://com.huawei.hmos.clouddrive/";
562 static const std::string CLOUD_DATASHARE_URI = CLOUD_BASE_URI + "cloud_sp?Proxy=true";
563 static const std::string CLOUD_URI = CLOUD_DATASHARE_URI + "&key=useMobileNetworkData";
564 static const std::string CLOUD_AGING_URI = CLOUD_DATASHARE_URI + "&key=dataAgingPolicy";
565 static const std::string CLOUD_SYNC_URI = CLOUD_BASE_URI + "sync_module_data?Proxy=true";
566 static const std::string CLOUD_SYNC_SWITCH_URI = CLOUD_BASE_URI + "sync_switch&bundleName=com.huawei.hmos.photos";
567 static const std::string MOBILE_NETWORK_STATUS_ON = "1";
568 static const std::string SCREENRECORD_ALBUM_PATH = "/storage/emulated/0/Pictures/Screenrecords/";
569 static const std::string SOURCE_PATH_PERFIX = "/storage/emulated/0";
570 }  // namespace OHOS::Media::CloudSync
571 #endif  // OHOS_MEDIA_CLOUD_SYNC_CLOUD_MEDIA_SYNC_CONST_H