• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023-2023 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 UNIFIED_META_H
17 #define UNIFIED_META_H
18 
19 #include <array>
20 #include <cstdint>
21 #include <map>
22 #include <memory>
23 #include <string>
24 #include <unordered_map>
25 #include <variant>
26 #include <vector>
27 #include "visibility.h"
28 #include "pixel_map.h"
29 #include "string_ex.h"
30 #include "want.h"
31 
32 namespace OHOS {
33 namespace UDMF {
34 constexpr const char* UNIFORM_DATA_TYPE = "uniformDataType";
35 constexpr const char* CONTENT = "textContent";
36 constexpr const char* ABSTRACT = "abstract";
37 constexpr const char* URL = "url";
38 constexpr const char* DESCRIPTION = "description";
39 constexpr const char* HTML_CONTENT = "htmlContent";
40 constexpr const char* PLAIN_CONTENT = "plainContent";
41 constexpr const char* APP_ID = "appId";
42 constexpr const char* APP_NAME = "appName";
43 constexpr const char* APP_ICON_ID = "appIconId";
44 constexpr const char* APP_LABEL_ID = "appLabelId";
45 constexpr const char* BUNDLE_NAME = "bundleName";
46 constexpr const char* ABILITY_NAME = "abilityName";
47 constexpr const char* FILE_URI_PARAM = "oriUri";
48 constexpr const char* FILE_TYPE = "fileType";
49 constexpr const char* PIXEL_MAP = "pixelMap";
50 constexpr const char* ARRAY_BUFFER = "arrayBuffer";
51 constexpr const char* ARRAY_BUFFER_LENGTH = "arrayBufferLen";
52 constexpr static const char *FORMID = "formId";
53 constexpr static const char *FORMNAME = "formName";
54 constexpr static const char *MODULE = "module";
55 constexpr static const char *BUNDLENAME = "bundleName";
56 constexpr static const char *ABILITYNAME = "abilityName";
57 constexpr static const char *ORI_URI = "oriUri";
58 constexpr static const char *REMOTE_URI = "remoteUri";
59 constexpr static const char *APPLICATION_DEFINED_TYPE = "applicationDefinedType";
60 constexpr static const char *RAW_DATA = "rawData";
61 
62 enum UDType : int32_t {
63     ENTITY = 0,
64     OBJECT,
65     COMPOSITE_OBJECT,
66     TEXT,
67     PLAIN_TEXT,
68     HTML,
69     HYPERLINK,
70     XML,
71     SOURCE_CODE,
72     SCRIPT,
73     SHELL_SCRIPT,
74     CSH_SCRIPT,
75     PERL_SCRIPT,
76     PHP_SCRIPT,
77     PYTHON_SCRIPT,
78     RUBY_SCRIPT,
79     TYPE_SCRIPT,
80     JAVA_SCRIPT,
81     C_HEADER,
82     C_SOURCE,
83     C_PLUS_PLUS_HEADER,
84     C_PLUS_PLUS_SOURCE,
85     JAVA_SOURCE,
86     EBOOK,
87     EPUB,
88     AZW,
89     AZW3,
90     KFX,
91     MOBI,
92     MEDIA,
93     IMAGE,
94     JPEG,
95     PNG,
96     RAW_IMAGE,
97     TIFF,
98     BMP,
99     ICO,
100     PHOTOSHOP_IMAGE,
101     AI_IMAGE,
102     WORD_DOC,
103     EXCEL,
104     PPT,
105     PDF,
106     POSTSCRIPT,
107     ENCAPSULATED_POSTSCRIPT,
108     VIDEO,
109     AVI,
110     MPEG,
111     MPEG4,
112     VIDEO_3GPP,
113     VIDEO_3GPP2,
114     WINDOWS_MEDIA_WM,
115     WINDOWS_MEDIA_WMV,
116     WINDOWS_MEDIA_WMP,
117     AUDIO,
118     AAC,
119     AIFF,
120     ALAC,
121     FLAC,
122     MP3,
123     OGG,
124     PCM,
125     WINDOWS_MEDIA_WMA,
126     WAVEFORM_AUDIO,
127     WINDOWS_MEDIA_WMX,
128     WINDOWS_MEDIA_WVX,
129     WINDOWS_MEDIA_WAX,
130     FILE,
131     DIRECTORY,
132     FOLDER,
133     SYMLINK,
134     ARCHIVE,
135     BZ2_ARCHIVE,
136     DISK_IMAGE,
137     TAR_ARCHIVE,
138     ZIP_ARCHIVE,
139     JAVA_ARCHIVE,
140     GNU_TAR_ARCHIVE,
141     GNU_ZIP_ARCHIVE,
142     GNU_ZIP_TAR_ARCHIVE,
143     CALENDAR,
144     CONTACT,
145     DATABASE,
146     MESSAGE,
147     VCARD,
148     NAVIGATION,
149     LOCATION,
150     SYSTEM_DEFINED_FORM,
151     SYSTEM_DEFINED_RECORD,
152     SYSTEM_DEFINED_APP_ITEM,
153     SYSTEM_DEFINED_PIXEL_MAP,
154     OPENHARMONY_ATOMIC_SERVICE,
155     APPLICATION_DEFINED_RECORD,
156     OPENHARMONY_PACKAGE,
157     OPENHARMONY_HAP,
158     SMIL,
159     MARKDOWN,
160     FAX,
161     JFX_FAX,
162     EFX_FAX,
163     XBITMAP_IMAGE,
164     TGA_IMAGE,
165     SGI_IMAGE,
166     OPENEXR_IMAGE,
167     FLASHPIX_IMAGE,
168     REALMEDIA,
169     AU_AUDIO,
170     AIFC_AUDIO,
171     SD2_AUDIO,
172     REALAUDIO,
173     OPENXML,
174     WORDPROCESSINGML_DOCUMENT,
175     SPREADSHEETML_SHEET,
176     PRESENTATIONML_PRESENTATION,
177     OPENDOCUMENT,
178     OPENDOCUMENT_TEXT,
179     OPENDOCUMENT_SPREADSHEET,
180     OPENDOCUMENT_PRESENTATION,
181     OPENDOCUMENT_GRAPHICS,
182     OPENDOCUMENT_FORMULA,
183     STUFFIT_ARCHIVE,
184     VCS,
185     ICS,
186     EXECUTABLE,
187     PORTABLE_EXECUTABLE,
188     SUN_JAVA_CLASS,
189     FONT,
190     TRUETYPE_FONT,
191     TRUETYPE_COLLECTION_FONT,
192     OPENTYPE_FONT,
193     POSTSCRIPT_FONT,
194     POSTSCRIPT_PFB_FONT,
195     POSTSCRIPT_PFA_FONT,
196     OPENHARMONY_HDOC,
197     OPENHARMONY_HINOTE,
198     OPENHARMONY_STYLED_STRING,
199     OPENHARMONY_WANT,
200     OFD,
201     OPG,
202     TEX,
203     CSS,
204     VOB,
205     DIF_VIDEO,
206     DV_VIDEO,
207     FLC_ANIMATION,
208     MNG,
209     MPEGURL_VIDEO,
210     TS,
211     AMR,
212     AMR_WB,
213     GMS,
214     IMY,
215     KAR,
216     MPEGURL_AUDIO,
217     MPEG_4_AUDIO,
218     MIDI_AUDIO,
219     MP2,
220     MPEG_AUDIO,
221     MXMF,
222     OTA,
223     PLS,
224     RTTTL,
225     PSID,
226     ULAW_AUDIO,
227     XMF,
228     GIF,
229     DJVU_IMAGE,
230     JNG_IMAGE,
231     PCX_IMAGE,
232     PBM_IMAGE,
233     PGM_IMAGE,
234     PNM_IMAGE,
235     PPM_IMAGE,
236     RGB_IMAGE,
237     SVG_IMAGE,
238     WBMP_IMAGE,
239     XPIXMP_IMAGE,
240     XWINDOWDUMP_IMAGE,
241     HEIF,
242     HEIC,
243     VIRTUAL_CD,
244     BOO_SOURCE,
245     D_SOURCE,
246     HTML_COMPONENT,
247     PASCAL_SOURCE,
248     HASKELL_SCRIPT,
249     LITERATE_HASKELL_SCRIPT,
250     TCL_SCRIPT,
251     ASC_TEXT,
252     PORTABLE_OBJECT,
253     RICH_TEXT,
254     DELIMITED_VALUES_TEXT,
255     COMMA_SEPARATED_VALUES_TEXT,
256     DIFF,
257     SETEXT,
258     GCD,
259     TAB_SEPARATED_VALUES_TEXT,
260     P7R,
261     PEM,
262     CHESS_PGN,
263     LHA_ARCHIVE,
264     LZH_ARCHIVE,
265     LZX_ARCHIVE,
266     TAZ_ARCHIVE,
267     SHAR_ARCHIVE,
268     CPIO_ARCHIVE,
269     WEB_ARCHIVE,
270     USTAR,
271     MATHML,
272     XHTML,
273     RSS,
274     RDF,
275     IGES,
276     CAD,
277     OCTET_STREAM,
278     ISO,
279     MESH_MODEL,
280     CERTIFICATE,
281     C_OBJECT,
282     DVI,
283     CER_CERTIFICATE,
284     CRT_CERTIFICATE,
285     CRL_CERTIFICATE,
286     PRN,
287     OPENDOCUMENT_CHART,
288     OPENDOCUMENT_TEXT_MASTER,
289     OPENDOCUMENT_TEXT_WEB,
290     OPENDOCUMENT_DATABASE,
291     OPENDOCUMENT_IMAGE,
292     OPENDOCUMENT_FORMULA_TEMPLATE,
293     OPENDOCUMENT_CHART_TEMPLATE,
294     OPENDOCUMENT_PRESENTATION_TEMPLATE,
295     OPENDOCUMENT_IMAGE_TEMPLATE,
296     OPENDOCUMENT_GRAPHICS_TEMPLATE,
297     OPENDOCUMENT_SPREADSHEET_TEMPLATE,
298     OPENDOCUMENT_TEXT_TEMPLATE,
299     WORD_DOT,
300     POWERPOINT_PPS,
301     POWERPOINT_POT,
302     EXCEL_XLT,
303     VISIO_VSD,
304     DRAWINGML_VISIO,
305     DRAWINGML_TEMPLATE,
306     DRAWINGML_VISIO_MACROENABLED,
307     DRAWINGML_TEMPLATE_MACROENABLED,
308     WORDPROCESSINGML_TEMPLATE,
309     PRESENTATIONML_TEMPLATE,
310     PRESENTATIONML_SLIDESHOW,
311     SPREADSHEETML_TEMPLATE,
312     WORDPROCESSINGML_DOCUMENT_MACROENABLED,
313     WORDPROCESSINGML_TEMPLATE_MACROENABLED,
314     SPREADSHEETML_TEMPLATE_MACROENABLED,
315     SPREADSHEETML_ADDIN_MACROENABLED,
316     SPREADSHEETML_BINARY_MACROENABLED,
317     SPREADSHEETML_SHEET_MACROENABLED,
318     PRESENTATIONALML_ADDIN_MACROENABLED,
319     PRESENTATIONALML_PRESENTATION_MACROENABLED,
320     PRESENTATIONALML_SLIDESHOW_MACROENABLED,
321     PRESENTATIONALML_TEMPLATE_MACROENABLED,
322     OPENOFFICE,
323     OPENOFFICE_CALC,
324     OPENOFFICE_DRAW,
325     OPENOFFICE_WRITER_GLOBAL,
326     OPENOFFICE_IMPRESS,
327     OPENOFFICE_MATH,
328     OPENOFFICE_WRITER,
329     OPENOFFICE_CALC_TEMPLATE,
330     OPENOFFICE_DRAW_TEMPLATE,
331     OPENOFFICE_IMPRESS_TEMPLATE,
332     OPENOFFICE_WRITER_TEMPLATE,
333     STAROFFICE,
334     STAROFFICE_DRAW,
335     STAROFFICE_CALC,
336     STAROFFICE_IMPRESS,
337     STAROFFICE_WRITER,
338     STAROFFICE_CHART,
339     STAROFFICE_MAIL,
340     STAROFFICE_WRITER_GLOBAL,
341     STAROFFICE_MATH,
342     STAROFFICE_TEMPLATE,
343     TUG_BIB,
344     TUG_CLS,
345     TUG_STY,
346     TUG_TEX,
347     LATEX,
348     ADVANCED_SYSTEMS_FORMAT,
349     ADVANCED_STREAM_REDIRECTOR,
350     MATROSKA_VIDEO,
351     MATROSKA_AUDIO,
352     SGI_MOVIE,
353     APPLE_M4V,
354     WEBM,
355     QUICKTIME_MOVIE,
356     CORELDRAW_CDR,
357     CORELDRAW_CDT,
358     CORELDRAW_CPT,
359     CORELDRAW_PAT,
360     MICROSOFT_CUR,
361     SUN_RASTER,
362     GOOGLE_WEBP,
363     KOAN_AUDIO,
364     QT_MOC,
365     GHOSTSCRIPT_FONT,
366     X_PCF_FONT,
367     WINDOWS_MEDIA_WMD,
368     WINDOWS_MEDIA_WMZ,
369     WINDOWS_INSTALLER,
370     PUBLISHER_PUB,
371     WINDOWS_MEDIA_PLAYLIST,
372     ACCESS_MDB,
373     STEREOLITHOGRAPHY,
374     APPLE_MEDIA_PLAYLIST,
375     ABISOURCE_WORD,
376     ADOBE_FRAMEMAKER,
377     WOLFRAM_CDF,
378     CINDERELLA_CDY,
379     ADOBE_DCR,
380     ADOBE_DIR,
381     ADOBE_DXR,
382     GNUMERIC_SPREADSHEET,
383     HDFGROUP_HDF,
384     BINHEX_ARCHIVE,
385     MICROSOFT_HTA,
386     INTERNET_INS,
387     INTERNET_ISP,
388     TROFF,
389     ADOBE_MIF,
390     FREEMIND,
391     YAMAHA_SMAF,
392     MATHEMATICA_NOTEBOOK,
393     XIPH_OGG,
394     PROXY_AUTOCONFIG,
395     PKCS_12,
396     PGP_SIGNATURE,
397     QUICKTIME_LINK,
398     RAR_ARCHIVE,
399     SEVEN_ZIP_ARCHIVE,
400     RED_BEAN_SGF,
401     SIT_ARCHIVE,
402     FUTURESPLASH,
403     FLASH,
404     TEXINFO,
405     TORRENT,
406     DOOM,
407     APPLE_WEBARCHIVE,
408     ANDROID_WEBARCHIVE,
409     GIMP_XCF,
410     EDRWMAX,
411     EDRWMIND,
412     CNKI_CAJ,
413     DBASE_DBF,
414     AUTODESK_DWG,
415     AUTODESK_DXF,
416     AUTODESK_DWS,
417     AUTODESK_DWT,
418     AUTODESK_DWF,
419     AUTODESK_DWFX,
420     AUTODESK_SHP,
421     AUTODESK_SHX,
422     AUTODESK_SLIDE_LIB,
423     AUTODESK_LINE,
424     AUTODESK_PLOTTER,
425     HP_GRAPHICS_LANG,
426     MICROSOFT_METAFILE,
427     ACIS_SAT,
428     AVIF_IMAGE,
429     MICROSOFT_DDS,
430     IFF_ILBM,
431     CR2_RAW_IMAGE,
432     CR3_RAW_IMAGE,
433     CRW_RAW_IMAGE,
434     DNG_RAW_IMAGE,
435     ARW_RAW_IMAGE,
436     NEF_RAW_IMAGE,
437     MINDMANAGER_MMAP,
438     MICROSOFT_EMAIL,
439     MICROSOFT_MESSAGE,
440     MICROSOFT_PST,
441     KINGSOFT_OFFICE,
442     KINGSOFT_WRITER_WPS,
443     KINGSOFT_WRITER_WPT,
444     KINGSOFT_PRESENTATION_DPS,
445     KINGSOFT_PRESENTATION_TEMPLATE,
446     KINGSOFT_SPREADSHEETS_ET,
447     KINGSOFT_SPREADSHEETS_TEMPLATE,
448     MICROSOFT_INI,
449     JSON,
450     YAML,
451     LOG,
452     URI,
453     FILE_URI,
454     TEXT_LST,
455     ANDROID_APK,
456     BZ_ARCHIVE,
457     TBZ_ARCHIVE,
458     TBZ2_ARCHIVE,
459     XZ_ARCHIVE,
460     TXZ_ARCHIVE,
461     XAR_ARCHIVE,
462     CAB_ARCHIVE,
463     RPM_ARCHIVE,
464     TPZ_ARCHIVE,
465     LZA_ARCHIVE,
466     ARJ_ARCHIVE,
467     ZIPX_ARCHIVE,
468     LZMA_ARCHIVE,
469     LZMA86_ARCHIVE,
470     XPI_ARCHIVE,
471     HFS_DISK_IMAGE,
472     IMG_DISK_IMAGE,
473     ISZ_DISK_IMAGE,
474     WIM_DISK_IMAGE,
475     SWM_DISK_IMAGE,
476     KINGSOFT_SPREADSHEETS_ETX,
477     KINGSOFT_SPREADSHEETS_ETTX,
478     EXCEL_DIF,
479     OPENHARMONY_APP,
480     HMOS_WIFI,
481     TEL,
482     ETS,
483     JSON5,
484     APE_AUDIO,
485     OPUS_AUDIO,
486     CONF,
487     MICROSOFT_DOS_BATCH,
488     MICROSOFT_VBSCRIPT,
489     ION,
490     MICROSOFT_REGISTRY,
491     MICROSOFT_CATALOG,
492     MICROSOFT_POWERSHELL_SCRIPT,
493     W3_WOFF,
494     SQLITE_DATABASE,
495     MICROSOFT_SYS,
496     MICROSOFT_INF,
497     MICROSOFT_PDB,
498     MICROSOFT_TLB,
499     MICROSOFT_SCCD,
500     ADOBE_F4V,
501     MP2T,
502     YOUTUBE_VIDEO,
503     WEBEX_VIDEO,
504     MPEG2,
505     MPEG1,
506     REALMEDIA_VBR,
507     REAL_REALVIDEO,
508     DIVX_VIDEO,
509     CSIRO_ANNODEX,
510     OGV,
511     LSF_VIDEO,
512     H264_VIDEO,
513     JPEG2000,
514     RAF_RAW_IMAGE,
515     NRW_RAW_IMAGE,
516     RW2_RAW_IMAGE,
517     PEF_RAW_IMAGE,
518     SRW_RAW_IMAGE,
519     ERF_RAW_IMAGE,
520     ORF_RAW_IMAGE,
521     IEF_IMAGE,
522     ART_IMAGE,
523     CONTENT_FORM,
524     M4P_AUDIO,
525     AC3_AUDIO,
526     UD_BUTT
527 };
528 
529 struct UtdType {
530     int32_t UtdEnum;
531     const char *UtdEnumName;
532     const char *UtdId;
533 };
534 
535 namespace UtdUtils {
536     bool API_EXPORT IsValidUtdId(const std::string &utdId);
537     int32_t API_EXPORT GetUtdEnumFromUtdId(const std::string &utdId);
538     std::string API_EXPORT GetUtdIdFromUtdEnum(int32_t utdType);
539     std::vector<UtdType> API_EXPORT GetUtdTypes();
540 } // namespace UtdUtils
541 
542 /*
543  * UnifiedData variant definitions.
544  */
545 using UDVariant = std::variant<int32_t, int64_t, bool, double, std::string, std::vector<uint8_t>>;
546 using UDDetails = std::map<std::string, UDVariant>;
547 /*
548  * UnifiedData Intention.
549  */
550 enum Intention : int32_t {
551     UD_INTENTION_BASE = 0,
552     UD_INTENTION_DRAG,
553     UD_INTENTION_DATA_HUB,
554     UD_INTENTION_BUTT,
555 };
556 
557 static const std::unordered_map<int32_t, std::string> UD_INTENTION_MAP {
558     { UD_INTENTION_DRAG, "drag" },
559     { UD_INTENTION_DATA_HUB, "DataHub" },
560 };
561 
562 static const std::unordered_map<int32_t, std::string> UD_SYSTEM_INTENTION_MAP {
563     { UD_INTENTION_DRAG, "Drag" },
564 };
565 
566 static const std::unordered_map<int32_t, std::string> JS_UD_INTENTION_NAME_MAP {
567     { UD_INTENTION_DATA_HUB, "DATA_HUB" },
568     { UD_INTENTION_DRAG, "DRAG" },
569 };
570 
571 enum ShareOptions : int32_t {
572     IN_APP,
573     CROSS_APP,
574     CROSS_DEVICE,
575     SHARE_OPTIONS_BUTT,
576 };
577 
578 struct AppShareOption {
579     int32_t enumNum;
580     const char *enumStr;
581 };
582 
583 namespace ShareOptionsUtil {
584     bool API_EXPORT IsValid(int32_t shareOption);
585     int32_t API_EXPORT GetEnumNum(const std::string &shareOption);
586     std::string API_EXPORT GetEnumStr(int32_t shareOption);
587 } // namespace ShareOptionsUtil
588 
589 class API_EXPORT UnifiedDataUtils {
590 public:
591     static bool IsValidType(int32_t value);
592     static bool IsValidIntention(int32_t value);
593     static size_t GetVariantSize(UDVariant &variant);
594     static size_t GetDetailsSize(UDDetails &details);
595     static bool IsPersist(const Intention &intention);
596     static bool IsPersist(const std::string &intention);
597     static Intention GetIntentionByString(const std::string &intention);
598     static bool IsValidOptions(const std::string &key, std::string &intention);
599 };
600 
601 struct Object;
602 using ValueType = std::variant<std::monostate, int32_t, int64_t, double, bool, std::string, std::vector<uint8_t>,
603     std::shared_ptr<OHOS::AAFwk::Want>, std::shared_ptr<OHOS::Media::PixelMap>, std::shared_ptr<Object>, nullptr_t>;
604 
605 struct API_EXPORT Object {
606     template<typename T>
GetValueObject607     bool GetValue(const std::string &key, T &value)
608     {
609         auto it = value_.find(key);
610         if (it != value_.end() && std::holds_alternative<T>(it->second)) {
611             value = std::get<T>(it->second);
612             return true;
613         }
614         return false;
615     }
616 
617     std::map<std::string, ValueType> value_;
618 };
619 
620 namespace ObjectUtils {
621     std::shared_ptr<Object> ConvertToObject(UDDetails &details);
622     UDDetails ConvertToUDDetails(std::shared_ptr<Object> object);
623 
624     template<typename T, typename... Types>
ConvertVariant(T && input,std::variant<Types...> & output)625     bool ConvertVariant(T &&input, std::variant<Types...> &output)
626     {
627         bool converted = false;
628         std::visit(
629             [&output, &converted](auto &&val) {
630               using BasicType = std::decay_t<decltype(val)>;
631               if constexpr ((std::is_same_v<BasicType, Types> || ...)) {
632                 output = std::variant<Types...>(std::move(val));
633                 converted = true;
634               }
635             },
636             input);
637         return converted;
638     }
639 } // namespace ObjectUtils
640 } // namespace UDMF
641 } // namespace OHOS
642 #endif // UNIFIED_META_H
643