From 91afed19e5ccb455dd4c999b89efe7afc84ae9b4 Mon Sep 17 00:00:00 2001 From: jlayi <1241255445@qq.com> Date: Thu, 17 Oct 2024 13:44:22 +0800 Subject: [PATCH] 1.0.0 --- .gitignore | 15 + AppScope/app.json5 | 9 + AppScope/resources/base/element/string.json | 8 + AppScope/resources/base/media/app_icon.png | Bin 0 -> 12024 bytes CHANGELOG.md | 3 + README.md | 50 ++ build-profile.json5 | 44 + entry/.gitignore | 8 + entry/build-profile.json5 | 25 + entry/hvigorfile.ts | 6 + entry/obfuscation-rules.txt | 18 + entry/oh-package.json5 | 14 + .../src/main/ets/ability/PLVAbilityStage.ets | 4 + .../src/main/ets/ability/PLVEntryAbility.ets | 44 + entry/src/main/ets/pages/PLVLoginPage.ets | 193 +++++ .../ets/startup/PLVMediaPlayerStartUp.ets | 91 ++ entry/src/main/module.json5 | 44 + .../main/resources/base/element/color.json | 8 + .../main/resources/base/element/string.json | 16 + .../main/resources/base/media/background.png | Bin 0 -> 57364 bytes .../main/resources/base/media/foreground.png | Bin 0 -> 26009 bytes .../resources/base/media/layered_image.json | 7 + .../main/resources/base/media/startIcon.png | Bin 0 -> 12024 bytes .../resources/base/profile/main_pages.json | 5 + .../main/resources/en_US/element/string.json | 16 + .../main/resources/zh_CN/element/string.json | 16 + hvigor/hvigor-config.json5 | 21 + hvigorfile.ts | 6 + oh-package.json5 | 16 + ...71\347\233\256\344\273\213\347\273\215.md" | 17 + ...53\351\200\237\351\233\206\346\210\220.md" | 97 +++ .../docs/3-SDK\345\205\245\345\217\243.md" | 65 ++ ...06\351\242\221\346\222\255\346\224\276.md" | 92 ++ ...5-\350\201\212\345\244\251\345\256\244.md" | 74 ++ "publish/docs/6-\344\272\222\345\212\250.md" | 46 + "publish/docs/7-\345\225\206\345\223\201.md" | 43 + "publish/docs/8-\346\211\223\350\265\217.md" | 39 + ...37\350\203\275\347\211\271\346\200\247.md" | 40 + scenes_live/.gitignore | 8 + scenes_live/Index.ets | 5 + scenes_live/build-profile.json5 | 28 + scenes_live/hvigorfile.ts | 6 + scenes_live/obfuscation-rules.txt | 21 + scenes_live/oh-package.json5 | 13 + .../src/main/ets/common/PLVLIEventHub.ets | 15 + .../src/main/ets/common/PLVLIFaceManager.ets | 59 ++ .../main/ets/components/PLVLIDetailLayout.ets | 133 +++ .../ets/components/PLVLILiveHomeLayout.ets | 327 ++++++++ .../components/PLVLIPlaybackHomeLayout.ets | 125 +++ .../main/ets/components/PLVLIWatchLayout.ets | 214 +++++ .../chatroom/PLVLIChatInputEntryView.ets | 60 ++ .../chatroom/PLVLIChatInputView.ets | 217 +++++ .../components/chatroom/PLVLIChatListItem.ets | 789 ++++++++++++++++++ .../chatroom/PLVLIChatListLayout.ets | 473 +++++++++++ .../PLVLIChatOverLengthMessageDialog.ets | 85 ++ .../chatroom/PLVLIChatPlaybackLayout.ets | 141 ++++ .../components/chatroom/PLVLIGreetingView.ets | 93 +++ .../components/chatroom/PLVLILikeIconView.ets | 136 +++ .../components/chatroom/PLVLIRedpackView.ets | 162 ++++ .../components/chatroom/PLVLIToTopView.ets | 103 +++ .../interact/PLVLIInteractWebView.ets | 136 +++ .../PLVCardLookTimeLocalRepository.ets | 20 + .../cardpush/PLVLICardPushDetailPage.ets | 44 + .../interact/cardpush/PLVLICardPushView.ets | 234 ++++++ .../entrance/PLVLIInteractEntranceView.ets | 58 ++ .../interact/lottery/PLVLILotteryView.ets | 262 ++++++ .../components/liveroom/PLVLIBulletinView.ets | 61 ++ .../liveroom/PLVLILanguageSwitchDialog.ets | 90 ++ .../ets/components/liveroom/PLVLIMoreView.ets | 120 +++ .../liveroom/PLVLIWatchInfoView.ets | 78 ++ .../components/player/PLVLIPlayerLayout.ets | 157 ++++ .../product/PLVLIProductDetailPage.ets | 44 + .../components/product/PLVLIProductView.ets | 251 ++++++ .../product/PLVLIProductWebView.ets | 106 +++ .../ets/components/reward/PLVLIRewardView.ets | 249 ++++++ .../src/main/ets/pages/PLVLIWatchPage.ets | 51 ++ scenes_live/src/main/module.json5 | 14 + .../main/resources/base/element/color.json | 8 + .../main/resources/base/element/string.json | 248 ++++++ .../resources/base/media/plvli_chat_msg.png | Bin 0 -> 742 bytes .../base/media/plvli_chat_quiz_default.png | Bin 0 -> 867 bytes .../base/media/plvli_chat_quiz_selected.png | Bin 0 -> 952 bytes .../plvli_chat_quote_message_close_icon.png | Bin 0 -> 1359 bytes .../base/media/plvli_chatroom_btn_like.png | Bin 0 -> 3525 bytes .../base/media/plvli_chatroom_btn_like_1.png | Bin 0 -> 2279 bytes .../base/media/plvli_chatroom_btn_like_10.png | Bin 0 -> 2358 bytes .../base/media/plvli_chatroom_btn_like_2.png | Bin 0 -> 2572 bytes .../base/media/plvli_chatroom_btn_like_3.png | Bin 0 -> 2554 bytes .../base/media/plvli_chatroom_btn_like_4.png | Bin 0 -> 2594 bytes .../base/media/plvli_chatroom_btn_like_5.png | Bin 0 -> 2787 bytes .../base/media/plvli_chatroom_btn_like_6.png | Bin 0 -> 2345 bytes .../base/media/plvli_chatroom_btn_like_7.png | Bin 0 -> 2225 bytes .../base/media/plvli_chatroom_btn_like_8.png | Bin 0 -> 2286 bytes .../base/media/plvli_chatroom_btn_like_9.png | Bin 0 -> 2293 bytes .../plvli_chatroom_file_share_doc_icon.png | Bin 0 -> 1379 bytes .../plvli_chatroom_file_share_pdf_icon.png | Bin 0 -> 1449 bytes .../plvli_chatroom_file_share_ppt_icon.png | Bin 0 -> 833 bytes .../plvli_chatroom_file_share_xls_icon.png | Bin 0 -> 1153 bytes .../media/plvli_chatroom_red_pack_icon.png | Bin 0 -> 3764 bytes .../main/resources/base/media/plvli_close.png | Bin 0 -> 1071 bytes .../base/media/plvli_detail_gonggao.png | Bin 0 -> 1467 bytes .../resources/base/media/plvli_face_101.png | Bin 0 -> 6333 bytes .../resources/base/media/plvli_face_102.png | Bin 0 -> 6158 bytes .../resources/base/media/plvli_face_103.png | Bin 0 -> 6824 bytes .../resources/base/media/plvli_face_104.png | Bin 0 -> 6740 bytes .../resources/base/media/plvli_face_105.png | Bin 0 -> 6816 bytes .../resources/base/media/plvli_face_106.png | Bin 0 -> 6999 bytes .../resources/base/media/plvli_face_107.png | Bin 0 -> 6251 bytes .../resources/base/media/plvli_face_108.png | Bin 0 -> 6180 bytes .../resources/base/media/plvli_face_109.png | Bin 0 -> 6449 bytes .../resources/base/media/plvli_face_110.png | Bin 0 -> 6525 bytes .../resources/base/media/plvli_face_111.png | Bin 0 -> 7085 bytes .../resources/base/media/plvli_face_112.png | Bin 0 -> 6744 bytes .../resources/base/media/plvli_face_113.png | Bin 0 -> 5321 bytes .../resources/base/media/plvli_face_114.png | Bin 0 -> 6714 bytes .../resources/base/media/plvli_face_115.png | Bin 0 -> 6710 bytes .../resources/base/media/plvli_face_116.png | Bin 0 -> 6336 bytes .../resources/base/media/plvli_face_117.png | Bin 0 -> 6905 bytes .../resources/base/media/plvli_face_118.png | Bin 0 -> 6957 bytes .../resources/base/media/plvli_face_119.png | Bin 0 -> 6773 bytes .../resources/base/media/plvli_face_120.png | Bin 0 -> 6463 bytes .../resources/base/media/plvli_face_121.png | Bin 0 -> 6955 bytes .../resources/base/media/plvli_face_122.png | Bin 0 -> 7042 bytes .../resources/base/media/plvli_face_123.png | Bin 0 -> 6500 bytes .../resources/base/media/plvli_face_124.png | Bin 0 -> 4149 bytes .../resources/base/media/plvli_face_125.png | Bin 0 -> 3879 bytes .../resources/base/media/plvli_face_126.png | Bin 0 -> 3476 bytes .../resources/base/media/plvli_face_127.png | Bin 0 -> 5039 bytes .../resources/base/media/plvli_face_128.png | Bin 0 -> 7782 bytes .../resources/base/media/plvli_face_129.png | Bin 0 -> 7182 bytes .../resources/base/media/plvli_face_130.png | Bin 0 -> 6106 bytes .../resources/base/media/plvli_face_131.png | Bin 0 -> 4019 bytes .../resources/base/media/plvli_face_132.png | Bin 0 -> 4686 bytes .../resources/base/media/plvli_face_133.png | Bin 0 -> 4969 bytes .../resources/base/media/plvli_face_134.png | Bin 0 -> 4454 bytes .../resources/base/media/plvli_face_135.png | Bin 0 -> 8293 bytes .../resources/base/media/plvli_face_136.png | Bin 0 -> 6063 bytes .../resources/base/media/plvli_face_137.png | Bin 0 -> 4159 bytes .../resources/base/media/plvli_face_138.png | Bin 0 -> 3644 bytes .../resources/base/media/plvli_gonggao.png | Bin 0 -> 366 bytes .../resources/base/media/plvli_greet_bg.png | Bin 0 -> 8302 bytes .../resources/base/media/plvli_img_site.png | Bin 0 -> 881 bytes .../main/resources/base/media/plvli_intro.png | Bin 0 -> 1353 bytes .../media/plvli_live_more_language_switch.png | Bin 0 -> 852 bytes .../main/resources/base/media/plvli_more.png | Bin 0 -> 1010 bytes .../plvli_player_no_live_placeholder.png | Bin 0 -> 18890 bytes .../base/media/plvli_player_to_play_icon.png | Bin 0 -> 6501 bytes .../base/media/plvli_popup_close.png | Bin 0 -> 276 bytes .../base/media/plvli_product_enter.png | Bin 0 -> 2347 bytes .../media/plvli_product_enter_disabled.png | Bin 0 -> 836 bytes .../media/plvli_product_hot_effect_icon.png | Bin 0 -> 663 bytes .../base/media/plvli_product_push_close.png | Bin 0 -> 204 bytes .../base/media/plvli_questionnaire.png | Bin 0 -> 374 bytes .../resources/base/media/plvli_reward.png | Bin 0 -> 1173 bytes .../base/media/plvli_shopping_trolley.png | Bin 0 -> 3479 bytes .../main/resources/base/media/plvli_watch.png | Bin 0 -> 404 bytes .../resources/base/profile/main_pages.json | 6 + .../main/resources/en_US/element/string.json | 248 ++++++ .../media/plvli_interact_giftbox_gain.png | Bin 0 -> 6511 bytes .../en_US/media/plvli_interact_lottery.png | Bin 0 -> 7083 bytes .../media/plvli_interact_redpack_gain.png | Bin 0 -> 7880 bytes .../media/plvli_red_pack_password_icon.png | Bin 0 -> 15361 bytes .../main/resources/zh_CN/element/string.json | 248 ++++++ .../zh_CN/media/plvli_chat_quiz_default.png | Bin 0 -> 790 bytes .../zh_CN/media/plvli_chat_quiz_selected.png | Bin 0 -> 741 bytes .../media/plvli_interact_giftbox_gain.png | Bin 0 -> 3395 bytes .../zh_CN/media/plvli_interact_lottery.png | Bin 0 -> 6654 bytes .../media/plvli_interact_redpack_gain.png | Bin 0 -> 4012 bytes .../media/plvli_red_pack_password_icon.png | Bin 0 -> 12506 bytes 169 files changed, 7146 insertions(+) create mode 100644 .gitignore create mode 100644 AppScope/app.json5 create mode 100644 AppScope/resources/base/element/string.json create mode 100644 AppScope/resources/base/media/app_icon.png create mode 100644 CHANGELOG.md create mode 100644 README.md create mode 100644 build-profile.json5 create mode 100644 entry/.gitignore create mode 100644 entry/build-profile.json5 create mode 100644 entry/hvigorfile.ts create mode 100644 entry/obfuscation-rules.txt create mode 100644 entry/oh-package.json5 create mode 100644 entry/src/main/ets/ability/PLVAbilityStage.ets create mode 100644 entry/src/main/ets/ability/PLVEntryAbility.ets create mode 100644 entry/src/main/ets/pages/PLVLoginPage.ets create mode 100644 entry/src/main/ets/startup/PLVMediaPlayerStartUp.ets create mode 100644 entry/src/main/module.json5 create mode 100644 entry/src/main/resources/base/element/color.json create mode 100644 entry/src/main/resources/base/element/string.json create mode 100644 entry/src/main/resources/base/media/background.png create mode 100644 entry/src/main/resources/base/media/foreground.png create mode 100644 entry/src/main/resources/base/media/layered_image.json create mode 100644 entry/src/main/resources/base/media/startIcon.png create mode 100644 entry/src/main/resources/base/profile/main_pages.json create mode 100644 entry/src/main/resources/en_US/element/string.json create mode 100644 entry/src/main/resources/zh_CN/element/string.json create mode 100644 hvigor/hvigor-config.json5 create mode 100644 hvigorfile.ts create mode 100644 oh-package.json5 create mode 100644 "publish/docs/1-\351\241\271\347\233\256\344\273\213\347\273\215.md" create mode 100644 "publish/docs/2-\345\277\253\351\200\237\351\233\206\346\210\220.md" create mode 100644 "publish/docs/3-SDK\345\205\245\345\217\243.md" create mode 100644 "publish/docs/4-\350\247\206\351\242\221\346\222\255\346\224\276.md" create mode 100644 "publish/docs/5-\350\201\212\345\244\251\345\256\244.md" create mode 100644 "publish/docs/6-\344\272\222\345\212\250.md" create mode 100644 "publish/docs/7-\345\225\206\345\223\201.md" create mode 100644 "publish/docs/8-\346\211\223\350\265\217.md" create mode 100644 "publish/docs/\346\224\257\346\214\201\347\232\204\345\212\237\350\203\275\347\211\271\346\200\247.md" create mode 100644 scenes_live/.gitignore create mode 100644 scenes_live/Index.ets create mode 100644 scenes_live/build-profile.json5 create mode 100644 scenes_live/hvigorfile.ts create mode 100644 scenes_live/obfuscation-rules.txt create mode 100644 scenes_live/oh-package.json5 create mode 100644 scenes_live/src/main/ets/common/PLVLIEventHub.ets create mode 100644 scenes_live/src/main/ets/common/PLVLIFaceManager.ets create mode 100644 scenes_live/src/main/ets/components/PLVLIDetailLayout.ets create mode 100644 scenes_live/src/main/ets/components/PLVLILiveHomeLayout.ets create mode 100644 scenes_live/src/main/ets/components/PLVLIPlaybackHomeLayout.ets create mode 100644 scenes_live/src/main/ets/components/PLVLIWatchLayout.ets create mode 100644 scenes_live/src/main/ets/components/chatroom/PLVLIChatInputEntryView.ets create mode 100644 scenes_live/src/main/ets/components/chatroom/PLVLIChatInputView.ets create mode 100644 scenes_live/src/main/ets/components/chatroom/PLVLIChatListItem.ets create mode 100644 scenes_live/src/main/ets/components/chatroom/PLVLIChatListLayout.ets create mode 100644 scenes_live/src/main/ets/components/chatroom/PLVLIChatOverLengthMessageDialog.ets create mode 100644 scenes_live/src/main/ets/components/chatroom/PLVLIChatPlaybackLayout.ets create mode 100644 scenes_live/src/main/ets/components/chatroom/PLVLIGreetingView.ets create mode 100644 scenes_live/src/main/ets/components/chatroom/PLVLILikeIconView.ets create mode 100644 scenes_live/src/main/ets/components/chatroom/PLVLIRedpackView.ets create mode 100644 scenes_live/src/main/ets/components/chatroom/PLVLIToTopView.ets create mode 100644 scenes_live/src/main/ets/components/interact/PLVLIInteractWebView.ets create mode 100644 scenes_live/src/main/ets/components/interact/cardpush/PLVCardLookTimeLocalRepository.ets create mode 100644 scenes_live/src/main/ets/components/interact/cardpush/PLVLICardPushDetailPage.ets create mode 100644 scenes_live/src/main/ets/components/interact/cardpush/PLVLICardPushView.ets create mode 100644 scenes_live/src/main/ets/components/interact/entrance/PLVLIInteractEntranceView.ets create mode 100644 scenes_live/src/main/ets/components/interact/lottery/PLVLILotteryView.ets create mode 100644 scenes_live/src/main/ets/components/liveroom/PLVLIBulletinView.ets create mode 100644 scenes_live/src/main/ets/components/liveroom/PLVLILanguageSwitchDialog.ets create mode 100644 scenes_live/src/main/ets/components/liveroom/PLVLIMoreView.ets create mode 100644 scenes_live/src/main/ets/components/liveroom/PLVLIWatchInfoView.ets create mode 100644 scenes_live/src/main/ets/components/player/PLVLIPlayerLayout.ets create mode 100644 scenes_live/src/main/ets/components/product/PLVLIProductDetailPage.ets create mode 100644 scenes_live/src/main/ets/components/product/PLVLIProductView.ets create mode 100644 scenes_live/src/main/ets/components/product/PLVLIProductWebView.ets create mode 100644 scenes_live/src/main/ets/components/reward/PLVLIRewardView.ets create mode 100644 scenes_live/src/main/ets/pages/PLVLIWatchPage.ets create mode 100644 scenes_live/src/main/module.json5 create mode 100644 scenes_live/src/main/resources/base/element/color.json create mode 100644 scenes_live/src/main/resources/base/element/string.json create mode 100644 scenes_live/src/main/resources/base/media/plvli_chat_msg.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_chat_quiz_default.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_chat_quiz_selected.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_chat_quote_message_close_icon.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_chatroom_btn_like.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_chatroom_btn_like_1.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_chatroom_btn_like_10.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_chatroom_btn_like_2.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_chatroom_btn_like_3.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_chatroom_btn_like_4.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_chatroom_btn_like_5.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_chatroom_btn_like_6.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_chatroom_btn_like_7.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_chatroom_btn_like_8.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_chatroom_btn_like_9.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_chatroom_file_share_doc_icon.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_chatroom_file_share_pdf_icon.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_chatroom_file_share_ppt_icon.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_chatroom_file_share_xls_icon.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_chatroom_red_pack_icon.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_close.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_detail_gonggao.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_face_101.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_face_102.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_face_103.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_face_104.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_face_105.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_face_106.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_face_107.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_face_108.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_face_109.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_face_110.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_face_111.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_face_112.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_face_113.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_face_114.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_face_115.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_face_116.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_face_117.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_face_118.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_face_119.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_face_120.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_face_121.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_face_122.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_face_123.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_face_124.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_face_125.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_face_126.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_face_127.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_face_128.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_face_129.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_face_130.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_face_131.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_face_132.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_face_133.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_face_134.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_face_135.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_face_136.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_face_137.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_face_138.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_gonggao.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_greet_bg.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_img_site.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_intro.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_live_more_language_switch.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_more.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_player_no_live_placeholder.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_player_to_play_icon.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_popup_close.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_product_enter.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_product_enter_disabled.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_product_hot_effect_icon.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_product_push_close.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_questionnaire.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_reward.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_shopping_trolley.png create mode 100644 scenes_live/src/main/resources/base/media/plvli_watch.png create mode 100644 scenes_live/src/main/resources/base/profile/main_pages.json create mode 100644 scenes_live/src/main/resources/en_US/element/string.json create mode 100644 scenes_live/src/main/resources/en_US/media/plvli_interact_giftbox_gain.png create mode 100644 scenes_live/src/main/resources/en_US/media/plvli_interact_lottery.png create mode 100644 scenes_live/src/main/resources/en_US/media/plvli_interact_redpack_gain.png create mode 100644 scenes_live/src/main/resources/en_US/media/plvli_red_pack_password_icon.png create mode 100644 scenes_live/src/main/resources/zh_CN/element/string.json create mode 100644 scenes_live/src/main/resources/zh_CN/media/plvli_chat_quiz_default.png create mode 100644 scenes_live/src/main/resources/zh_CN/media/plvli_chat_quiz_selected.png create mode 100644 scenes_live/src/main/resources/zh_CN/media/plvli_interact_giftbox_gain.png create mode 100644 scenes_live/src/main/resources/zh_CN/media/plvli_interact_lottery.png create mode 100644 scenes_live/src/main/resources/zh_CN/media/plvli_interact_redpack_gain.png create mode 100644 scenes_live/src/main/resources/zh_CN/media/plvli_red_pack_password_icon.png diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..702c3ed --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +/node_modules +/oh_modules +/local.properties +/.idea +**/build +/.hvigor +.cxx +/.clangd +/.clang-format +/.clang-tidy +**/.test +/.appanalyzer +/oh-package-lock.json5 +BuildProfile.ets +/docs \ No newline at end of file diff --git a/AppScope/app.json5 b/AppScope/app.json5 new file mode 100644 index 0000000..ebeb88d --- /dev/null +++ b/AppScope/app.json5 @@ -0,0 +1,9 @@ +{ + "app": { + "bundleName": "net.plv.livescenes.demo", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/AppScope/resources/base/element/string.json b/AppScope/resources/base/element/string.json new file mode 100644 index 0000000..ad4a2a8 --- /dev/null +++ b/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "POLYV多场景" + } + ] +} diff --git a/AppScope/resources/base/media/app_icon.png b/AppScope/resources/base/media/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..805d3e1ac1477889de120e4ad64deb7abf7893cb GIT binary patch literal 12024 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 + + +- [1 简介](#1-%E7%AE%80%E4%BB%8B) +- [2 下载安装](#2-%E4%B8%8B%E8%BD%BD%E5%AE%89%E8%A3%85) +- [3 文档](#3-%E6%96%87%E6%A1%A3) + - [3.1 集成文档](#31-%E9%9B%86%E6%88%90%E6%96%87%E6%A1%A3) + - [3.2 接口文档](#32-%E6%8E%A5%E5%8F%A3%E6%96%87%E6%A1%A3) + - [3.3 版本更新记录](#33-%E7%89%88%E6%9C%AC%E6%9B%B4%E6%96%B0%E8%AE%B0%E5%BD%95) + + + +### 1 简介 +此项目是保利威鸿蒙多场景 Demo。 + +此项目支持视频播放、在线聊天、打赏、商品、互动等功能(具体见[多场景支持的功能特性](https://github.com/polyv/polyv-harmony-livescenes-sdk-demo/blob/master/docs/public/支持的功能特性.md)) + +多场景项目的文件目录结构如下: + +``` +|-- entry +| |-- ability +| | `-- PLVEntryAbility (SDK初始化) +| |-- pages +| | `-- PLVLoginPage (登录页) +| `-- startup (播放器初始化) +`-- scenes_live (直播带货场景模块) + |-- pages (观看页) + `-- components (功能组件) +``` + +### 2 下载安装 + +```shell +ohpm install @polyvharmony/live-scenes-sdk +``` + +### 3 文档 +#### 3.1 集成文档 +[集成文档](https://github.com/polyv/polyv-harmony-livescenes-sdk-demo/tree/master/publish/docs) +#### 3.2 接口文档 +[v1.0.0 接口文档](https://repo.polyv.net/harmony/documents/livescenes_sdk/1.0.0/index.html) +#### 3.3 版本更新记录 +[全版本更新记录](https://github.com/polyv/polyv-harmony-livescenes-sdk-demo/blob/master/CHANGELOG.md) diff --git a/build-profile.json5 b/build-profile.json5 new file mode 100644 index 0000000..9b97094 --- /dev/null +++ b/build-profile.json5 @@ -0,0 +1,44 @@ +{ + "app": { + "signingConfigs": [], + "products": [ + { + "name": "default", + "signingConfig": "default", + "compatibleSdkVersion": "5.0.0(12)", + "runtimeOS": "HarmonyOS", + "buildOption": { + "strictMode": { + "useNormalizedOHMUrl": true + } + } + } + ], + "buildModeSet": [ + { + "name": "debug" + }, + { + "name": "release" + } + ] + }, + "modules": [ + { + "name": "entry", + "srcPath": "./entry", + "targets": [ + { + "name": "default", + "applyToProducts": [ + "default" + ] + } + ] + }, + { + "name": "scenes_live", + "srcPath": "./scenes_live" + } + ] +} \ No newline at end of file diff --git a/entry/.gitignore b/entry/.gitignore new file mode 100644 index 0000000..745cc01 --- /dev/null +++ b/entry/.gitignore @@ -0,0 +1,8 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test +/oh-package-lock.json5 +BuildProfile.ets \ No newline at end of file diff --git a/entry/build-profile.json5 b/entry/build-profile.json5 new file mode 100644 index 0000000..808380f --- /dev/null +++ b/entry/build-profile.json5 @@ -0,0 +1,25 @@ +{ + "apiType": "stageMode", + "buildOption": { + }, + "buildOptionSet": [ + { + "name": "release", + "arkOptions": { + "obfuscation": { + "ruleOptions": { + "enable": true, + "files": [ + "./obfuscation-rules.txt" + ] + } + } + } + }, + ], + "targets": [ + { + "name": "default" + } + ] +} \ No newline at end of file diff --git a/entry/hvigorfile.ts b/entry/hvigorfile.ts new file mode 100644 index 0000000..c6edcd9 --- /dev/null +++ b/entry/hvigorfile.ts @@ -0,0 +1,6 @@ +import { hapTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: hapTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/entry/obfuscation-rules.txt b/entry/obfuscation-rules.txt new file mode 100644 index 0000000..985b2ae --- /dev/null +++ b/entry/obfuscation-rules.txt @@ -0,0 +1,18 @@ +# Define project specific obfuscation rules here. +# You can include the obfuscation configuration files in the current module's build-profile.json5. +# +# For more details, see +# https://gitee.com/openharmony/arkcompiler_ets_frontend/blob/master/arkguard/README.md + +# Obfuscation options: +# -disable-obfuscation: disable all obfuscations +# -enable-property-obfuscation: obfuscate the property names +# -enable-toplevel-obfuscation: obfuscate the names in the global scope +# -compact: remove unnecessary blank spaces and all line feeds +# -remove-log: remove all console.* statements +# -print-namecache: print the name cache that contains the mapping from the old names to new names +# -apply-namecache: reuse the given cache file + +# Keep options: +# -keep-property-name: specifies property names that you want to keep +# -keep-global-name: specifies names that you want to keep in the global scope \ No newline at end of file diff --git a/entry/oh-package.json5 b/entry/oh-package.json5 new file mode 100644 index 0000000..4502779 --- /dev/null +++ b/entry/oh-package.json5 @@ -0,0 +1,14 @@ +{ + "name": "entry", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "", + "author": "", + "license": "MIT", + "dependencies": { + "scenes_live": "file:../scenes_live", + "@polyvharmony/media-player-sdk": "2.2.0", + "@polyvharmony/media-player-core-ijk": "2.2.0" + } +} + diff --git a/entry/src/main/ets/ability/PLVAbilityStage.ets b/entry/src/main/ets/ability/PLVAbilityStage.ets new file mode 100644 index 0000000..b9e2581 --- /dev/null +++ b/entry/src/main/ets/ability/PLVAbilityStage.ets @@ -0,0 +1,4 @@ +import AbilityStage from '@ohos.app.ability.AbilityStage'; + +export default class PLVAbilityStage extends AbilityStage { +} \ No newline at end of file diff --git a/entry/src/main/ets/ability/PLVEntryAbility.ets b/entry/src/main/ets/ability/PLVEntryAbility.ets new file mode 100644 index 0000000..0f11fb2 --- /dev/null +++ b/entry/src/main/ets/ability/PLVEntryAbility.ets @@ -0,0 +1,44 @@ +import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit'; +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { window } from '@kit.ArkUI'; +import { PLVLiveSceneSDK } from 'scenes_live'; +import { PLVMediaPlayerStartUp } from '../startup/PLVMediaPlayerStartUp'; + +export default class PLVEntryAbility extends UIAbility { + onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); + } + + onDestroy(): void { + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy'); + } + + onWindowStageCreate(windowStage: window.WindowStage): void { + // Main window is created, set main page for this ability + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); + PLVLiveSceneSDK.init(this.context, windowStage) + PLVMediaPlayerStartUp.start(this.context.getApplicationContext()) + windowStage.loadContent('pages/PLVLoginPage', (err) => { + if (err.code) { + hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); + return; + } + hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.'); + }); + } + + onWindowStageDestroy(): void { + // Main window is destroyed, release UI related resources + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy'); + } + + onForeground(): void { + // Ability has brought to foreground + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground'); + } + + onBackground(): void { + // Ability has back to background + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground'); + } +} diff --git a/entry/src/main/ets/pages/PLVLoginPage.ets b/entry/src/main/ets/pages/PLVLoginPage.ets new file mode 100644 index 0000000..bdb3698 --- /dev/null +++ b/entry/src/main/ets/pages/PLVLoginPage.ets @@ -0,0 +1,193 @@ +import { PLVCommonConstants, PLVLiveChannelType, PLVLiveSceneSDK, PLVLogger, PLVTextUtils, PLVToastUtils, PLVUserConstants, PLVUtils, pushToWatchPage } from 'scenes_live'; + +const TAG = '[PLVLoginPage]' + +@Entry +@Component +struct PLVLoginPage { + // live data + @State @Watch('onDataChanged') liveUserId: string = '' + @State @Watch('onDataChanged') liveChannelId: string = '' + @State @Watch('onDataChanged') liveAppId: string = '' + @State @Watch('onDataChanged') liveAppSecret: string = '' + // playback data + @State @Watch('onDataChanged') playbackUserId: string = '' + @State @Watch('onDataChanged') playbackChannelId: string = '' + @State @Watch('onDataChanged') playbackAppId: string = '' + @State @Watch('onDataChanged') playbackAppSecret: string = '' + @State playbackVid: string = '' + @State isOnVodList: boolean = false + // common data + @State @Watch('onDataChanged') tabSelIndex: number = 0 + @State loginButtonEnabled: boolean = PLVTextUtils.checkValidDataLength(this.liveUserId, this.liveChannelId, this.liveAppId, this.liveAppSecret) + @State loadingVisibility: Visibility = Visibility.None + viewerId?: string + viewerName?: string + viewerAvatar?: string + + override async aboutToAppear(): Promise { + // todo 请务必在这里替换为你的学员(用户)ID,设置学员(用户)ID的意义详细可以查看:https://github.com/polyv/polyv-android-cloudClass-sdk-demo/wiki/6-设置学员唯一标识的意义 + this.viewerId = PLVUtils.getDeviceId() + // todo 请务必在这里替换为你的学员(用户)昵称 + this.viewerName = '观众' + this.viewerId?.substring(0, 6) + // todo 在这里可替换为你的学员(用户)头像地址 + this.viewerAvatar = PLVUserConstants.STUDENT_AVATAR_URL + } + + build() { + Stack() { + Column() { + Text('直播带货') + .fontSize(30) + .fontColor(Color.Gray) + .margin({ top: 30 }) + Tabs({ barPosition: BarPosition.Start }) { + TabContent() { + Column({ space: 36 }) { + TextInput({ placeholder: '用户Id', text: $$this.liveUserId }) + .showUnderline(true) + TextInput({ placeholder: '频道Id', text: $$this.liveChannelId }) + .showUnderline(true) + TextInput({ placeholder: 'AppId', text: $$this.liveAppId }) + .showUnderline(true) + TextInput({ placeholder: 'AppSecret', text: $$this.liveAppSecret }) + .showUnderline(true) + } + } + .tabBar('直播') + + TabContent() { + Column({ space: 15 }) { + TextInput({ placeholder: '用户Id', text: $$this.playbackUserId }) + .showUnderline(true) + TextInput({ placeholder: '频道Id', text: $$this.playbackChannelId }) + .showUnderline(true) + TextInput({ placeholder: 'AppId', text: $$this.playbackAppId }) + .showUnderline(true) + TextInput({ placeholder: 'AppSecret', text: $$this.playbackAppSecret }) + .showUnderline(true) + TextInput({ placeholder: '视频Id', text: $$this.playbackVid }) + .showUnderline(true) + Row() { + Text('点播列表') + .margin({ left: 10, right: 6 }) + Toggle({ type: ToggleType.Switch, isOn: $$this.isOnVodList }) + }.width(PLVCommonConstants.FULL_PERCENT) + } + } + .tabBar('回放') + } + .onChange((index) => { + this.tabSelIndex = index + }) + .margin({ top: 30 }) + .height(424) + + Button('登录') + .width(PLVCommonConstants.FULL_PERCENT) + .height(48) + .enabled(this.loginButtonEnabled) + .onClick(() => { + this.loadingVisibility = Visibility.Visible + if (this.tabSelIndex == 0) { + this.loginLive() + } else { + this.loginPlayback() + } + }) + Text('2013 – 2024 易方信息科技股份有限公司 版权所有') + .fontSize(14) + .fontColor(Color.Gray) + .align(Alignment.Bottom) + .margin({ bottom: 16 }) + .layoutWeight(1) + } + .width(PLVCommonConstants.FULL_PERCENT) + .height(PLVCommonConstants.FULL_PERCENT) + .padding(18) + .alignItems(HorizontalAlign.Center) + + Stack() { + Stack() { + } + .backgroundColor(Color.Gray) + .opacity(0.5) + .width(PLVCommonConstants.FULL_PERCENT) + .height(PLVCommonConstants.FULL_PERCENT) + + Row() { + LoadingProgress() + .width(36) + .height(36) + Text('正在登录中,请稍等...') + .fontSize(16) + } + .padding(12) + .border({ radius: 4 }) + .backgroundColor(Color.White) + } + .visibility(this.loadingVisibility) + .width(PLVCommonConstants.FULL_PERCENT) + .height(PLVCommonConstants.FULL_PERCENT) + } + } + + onDataChanged(propName: string): void { + this.loginButtonEnabled = this.tabSelIndex == 0 + ? PLVTextUtils.checkValidDataLength(this.liveUserId, this.liveChannelId, this.liveAppId, this.liveAppSecret) + : PLVTextUtils.checkValidDataLength(this.playbackUserId, this.playbackChannelId, this.playbackAppId, this.playbackAppSecret) + } + + createSDK(): PLVLiveSceneSDK { + const sdk: PLVLiveSceneSDK = PLVLiveSceneSDK.create() + sdk.channelData.viewerId = this.viewerId + sdk.channelData.viewerName = this.viewerName + sdk.channelData.viewerAvatar = this.viewerAvatar + return sdk + } + + loginLive() { + const sdk = this.createSDK() + sdk.loginManager.loginLive(this.liveUserId, this.liveChannelId, this.liveAppId, this.liveAppSecret) + .then((channelData) => { + if (PLVLiveChannelType.ALONE != channelData.channelType) { + PLVLogger.error(TAG, `loginLive error while channelType=${channelData.channelType}`) + PLVToastUtils.shortShow('直播带货场景仅支持纯视频频道类型') + this.loadingVisibility = Visibility.None + sdk.destroy() + return + } + PLVLogger.info(TAG, `loginLive success`) + this.loadingVisibility = Visibility.None + pushToWatchPage(sdk.uniqueId) + }) + .catch((err: Error) => { + this.loadingVisibility = Visibility.None + PLVToastUtils.shortShow(`loginLive error: ${err.message}`) + sdk.destroy() + }) + } + + loginPlayback() { + const sdk = this.createSDK() + sdk.loginManager.loginPlayback(this.playbackUserId, this.playbackChannelId, this.playbackAppId, this.playbackAppSecret, this.playbackVid) + .then((channelData) => { + if (PLVLiveChannelType.ALONE != channelData.channelType) { + PLVLogger.error(TAG, `loginPlayback error while channelType=${channelData.channelType}`) + PLVToastUtils.shortShow('直播带货场景仅支持纯视频频道类型') + this.loadingVisibility = Visibility.None + sdk.destroy() + return + } + PLVLogger.info(TAG, `loginPlayback success`) + this.loadingVisibility = Visibility.None + sdk.channelData.setupPlaybackListType(this.isOnVodList) + pushToWatchPage(sdk.uniqueId) + }) + .catch((err: Error) => { + PLVToastUtils.shortShow(`loginPlayback error: ${err.message}`) + this.loadingVisibility = Visibility.None + sdk.destroy() + }) + } +} \ No newline at end of file diff --git a/entry/src/main/ets/startup/PLVMediaPlayerStartUp.ets b/entry/src/main/ets/startup/PLVMediaPlayerStartUp.ets new file mode 100644 index 0000000..2a56abd --- /dev/null +++ b/entry/src/main/ets/startup/PLVMediaPlayerStartUp.ets @@ -0,0 +1,91 @@ +import { + IPLVKVStore, + Logger, + PLVKVStore, + PLVMediaPlayerAppContext, + PLVMediaPlayerFactory, + PLVMediaPlayerLogger, + safe +} from '@polyvharmony/media-player-sdk'; +import { PLVMediaPlayerCoreIjkProvider } from '@polyvharmony/media-player-core-ijk'; +import { Context } from '@ohos.abilityAccessCtrl'; +import distributedKVStore from '@ohos.data.distributedKVStore'; +import { PLVLogger } from 'scenes_live'; + +export class PLVMediaPlayerStartUp { + private static isInit = false + + static start(context: Context) { + if (PLVMediaPlayerStartUp.isInit) { + return + } + PLVMediaPlayerStartUp.isInit = true + + PLVMediaPlayerAppContext.getInstance().setupAppContext(context) + PLVMediaPlayerLogger.loggerImpl = new PLVLoggerImpl() + PLVKVStore.setupImplement(new PLVKVStoreOhosImpl(context)) + PLVMediaPlayerFactory.getInstance().register(PLVMediaPlayerCoreIjkProvider.getInstance()) + } +} + +class PLVLoggerImpl implements Logger { + debug(tag: string, message: string) { + PLVLogger.debug(tag, message) + } + + info(tag: string, message: string) { + PLVLogger.info(tag, message) + } + + warn(tag: string, message: string) { + PLVLogger.warn(tag, message) + } + + error(tag: string, message: string) { + PLVLogger.error(tag, message) + } +} + +class PLVKVStoreOhosImpl implements IPLVKVStore { + private static readonly kvStoreId = "PLVKVStoreOhosImpl" + + constructor(context: Context) { + this.kvStoreManager = distributedKVStore.createKVManager({ + context: context, + bundleName: context.applicationInfo.name + }) + this.ensureKvStore() + } + + private kvStoreManager: distributedKVStore.KVManager | undefined = undefined; + private kvStore: distributedKVStore.DeviceKVStore | undefined = undefined; + + async getValue(key: string): Promise { + if (!this.kvStore) { + await this.ensureKvStore() + } + + const result = await safe(this.kvStore?.get(key)) + if (result.success) { + return result.data as string + } else { + return undefined + } + } + + async setValue(key: string, value: string): Promise { + await this.ensureKvStore() + this.kvStore?.put(key, value) + } + + async delete(key: string): Promise { + await this.ensureKvStore() + this.kvStore?.delete(key) + } + + private async ensureKvStore() { + this.kvStore = await this.kvStoreManager?.getKVStore(PLVKVStoreOhosImpl.kvStoreId, { + securityLevel: distributedKVStore.SecurityLevel.S1 + }) as distributedKVStore.DeviceKVStore + } +} \ No newline at end of file diff --git a/entry/src/main/module.json5 b/entry/src/main/module.json5 new file mode 100644 index 0000000..59ce135 --- /dev/null +++ b/entry/src/main/module.json5 @@ -0,0 +1,44 @@ +{ + "module": { + "name": "entry", + "type": "entry", + "srcEntry": "./ets/ability/PLVAbilityStage.ets", + "description": "$string:module_desc", + "mainElement": "PLVEntryAbility", + "deviceTypes": [ + "phone", + "tablet", + "2in1" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "abilities": [ + { + "name": "PLVEntryAbility", + "srcEntry": "./ets/ability/PLVEntryAbility.ets", + "description": "$string:EntryAbility_desc", + "icon": "$media:layered_image", + "label": "$string:EntryAbility_label", + "startWindowIcon": "$media:startIcon", + "startWindowBackground": "$color:start_window_background", + "exported": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ] + } + ], + "requestPermissions": [ + { + "name": "ohos.permission.INTERNET" + } + ] + } +} \ No newline at end of file diff --git a/entry/src/main/resources/base/element/color.json b/entry/src/main/resources/base/element/color.json new file mode 100644 index 0000000..3c71296 --- /dev/null +++ b/entry/src/main/resources/base/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#FFFFFF" + } + ] +} \ No newline at end of file diff --git a/entry/src/main/resources/base/element/string.json b/entry/src/main/resources/base/element/string.json new file mode 100644 index 0000000..b459da4 --- /dev/null +++ b/entry/src/main/resources/base/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "POLYV多场景" + } + ] +} \ No newline at end of file diff --git a/entry/src/main/resources/base/media/background.png b/entry/src/main/resources/base/media/background.png new file mode 100644 index 0000000000000000000000000000000000000000..f939c9fa8cc8914832e602198745f592a0dfa34d GIT binary patch literal 57364 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 A4*&oF literal 0 HcmV?d00001 diff --git a/entry/src/main/resources/base/media/foreground.png b/entry/src/main/resources/base/media/foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..bbca4bcbbb08133effa677b7991b236dc77acafb GIT binary patch literal 26009 zcmY(p19&A()GoSXb7Jn;wrx9^*tRFOolI=oHYT|78AG50(e=e>LWT{=aAtU>?~2rT-K2YOreh?qD1wwVVL}xF7#D5I{y2*0(k- zOI1x5O*vU^V|!bALlb)=Q+f|uhySDiydK=&q^+roA<)Ct#?G1BgOB)s5ZvGNe{2R~ z;Qv5etoevF+ufBETRY4(3D**X93u)YIi`0p16CVEDO|D*d`l=nX_w}O+U>9^(o z^z$?E{txp1$NS%Qcp3gP{{M02e?|H~-0x8NVR;$;PulolvGsPL002RNl&FxZ2gs!l zl)vgy`TN*;5a-8_7%4_i z@?p&+%>pA3baape-9CDt>6?7}*Y@>f)>dbuyV=#`rX|mD--YdQ&TZ%ROZK&Qsa9ft zGsDSezU_wo%nsSH#BWJ72HiPF%ku|2hW!`G753gY43xKv1otR+^xyvuQW2(o zXG5F6gJ9Sm$2jFey&t6uv#5IJ(rU-@H)#v*t?|A*^B!QRo43;0(!oT&dP>OtZOhY& z?Wxw#M4MS(AXK#X+TzQsfobTSub77kNNpjPaoeI#2**;s?~Y@Qcu1me_4ep7_iI

eU}lo8nAOKs<{+AkUf{d<-~W8yern| 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%0D&#G7sS7F8*Lx?3gIDLSR%De^)M#X>hWf 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 b|BU&Z#9c}E_?qnB&q)+tsmWGJn}z%je{ICs literal 0 HcmV?d00001 diff --git a/entry/src/main/resources/base/media/layered_image.json b/entry/src/main/resources/base/media/layered_image.json new file mode 100644 index 0000000..2fc00e9 --- /dev/null +++ b/entry/src/main/resources/base/media/layered_image.json @@ -0,0 +1,7 @@ +{ + "layered-image": + { + "background" : "$media:foreground", + "foreground" : "$media:foreground" + } +} \ No newline at end of file diff --git a/entry/src/main/resources/base/media/startIcon.png b/entry/src/main/resources/base/media/startIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..805d3e1ac1477889de120e4ad64deb7abf7893cb GIT binary patch literal 12024 zcmZ{K1yCJ9)-Dbgxxj_s?(T$(ySqzpcXxMpcemgk+}#2sSVC}@;BGJ3-T&WxTkp+O zSD!xT`;K(?%v8-xl#+rZ3L+jN1Ox<%w3L|2pFZ(#Lx6*TfJ_u#VEQwFu@IIQhJa{H zKzcEP{WA_V(~>rqmxrMHBO^e-LV_Tm|45L3P6$Xmh`)$G5`+vS{{PAVMIRh0y<&|I(&mEn@z307ofp7YGO>jK2*M zB0Coc0s?B%N=?gEOJ0u0#KDfq$kf5ujLFl^@h=O4&y(kmXlLeXMB-^@YwyD2$xrqV z1kWG&ubP>RB3lUcgD zI`S|xdw6&-d9X7%I9o8Ya&vPtv#>F|G@vPjz`JL)67;&%*xKp-sNvCY+x`S^Z(QG z-%L>lTL))VMgEdfM6 z=KtNN0*KzSAZG{&dJbtZVKq<4Ge1DC+DPkt$Cs`OpO0eNFkG2N$}q}~%M{6x#R7Y{ ze%2fUaa5LK*K!f*zA{Su^Rf55zFpo#>k(snUs``4H8k*7Ufw9%xrifpF&7Zdpif-LAEhNzss*ZXbI``#U& zyIk+Xf8J|-!@B1(%`d7FqvW`oT|%>W9-Yi@*Vd%QXNHhKv&|t*xoZrVz864i3|DRV zkcPls>x|0?s1-Dj+umYiO$JrTdt;#HUs4g--HNwH|2Wsxp|06BA5WAMtniKIiW~C( z#f0f;^4nI`&SK%09Vo>Kmvx?a2gk~)-O64KuC{Ta7-hJLzu7Z}`a50&oGP;$Zy<+t1^|TD$IQ?%tc2>XgmcI>x{-Nu z4mnASh82}jN{X1=I`ERB;1*a&Nd@Q1L#N?0BPWt~>0?f_4#ggrABYSO<5Ol%(%idrO|n;d zmlJb9^9SVLuvYqxjdoe4y{!}!ME7g^vQ_8vkR=F^NsZ(`J1>+HTNa}}xNugJHZnuS zWl9YZ)^0T^Q6P;P`qyOQGc*TMfy18T*J?(OM+1 z?Uh2WIbTKxa+HJw+?v({H7*vz_MPtxUSyWtsFGDc$~8pLSr2$HH6YYRE!#DTv+FRA={!XE81*8iTbH5j#*DBogl% z%Ktzb^8<#Q%?m@_Q>};e%u{lbd!V~V9yowtUeS}E7u3XOAr_g{8}`(uI+jmFyWGOa z@U@RPwQDJ8r|7jCb{Kyx3R5>+_)Pd&qWS5EUshLos$4C58Pz2aO-5~?#2{gy-Nr)6 z^vFtpBsVfJzTo$yhWkR(EQNlFcV?2v5$O9luW*rS!MNi5oYR>m8R$*l?-DVRe_rJG zS>)k^eY{PL(sI_5ICq`9m`Gt$n8ctpMW%J4nfB&*K0KKSe`JZpGAFNkc)cCMBTydJIeKwwLo*Qp*C{Y)yx{v zdQ{{q{%=~@c_EA(OXu+PFo5`wwbqJ%3OZ|DOO4|(08jF`LjbR?YNlMaZvBGrd_m1A z8O^#KKQ$^ftZcX@EZx%x4^de86Y{UaVl}P%i!Q0_wWs#u8k+Cz4cC111m5it>H2m$Ccz zjv&lv+MnTY%3}~Eh%4)G_-hO`H-sgYl_ktazc;Qq$)y25rQ4{Wj=fm~Sl+ddqZRVn zSf?TTagrDaDf;iiI5_2fs*yV2KU3sQl@W=A{&NTTjPdoX*7|ZgApa;;{ZJl{WdYnW zPfjG~CW|iSbLg0$qT1M*2vRxzPB5KB=5F}Q*?+A!-sC<1W19#&aq72kr5(melI<|%RBQxgbwlTja#$Gg17JDwp@VVM<3)tD zdv`;TTfpblzJ31!AyT$0%vf*~4tz*xL@%y5!xLs6(rbdBoR?*FT#+d zAteK~z*1Jal^f4dowV7YbKy4eN3TKa${dAFl6$;U`A7`=$(T#&O z`zA>p?^!a>5h3HI5pMRibNongcQMA|k$22W??E*W=M!11@QK_=S%R(w5_KwNXX;?H}eZP8;(QOE}or-s?;ixO0X?F~Ed8sL|ye4+k)b2?LfNVj;rbLDZRI;XmE+aEf9yz3NPls?wt z>%2*TKxq-rqtR`^v-ERltTcK2{!~P1#sQ^7_{3RYyzfZKnX{$n+Il36GB{A_S74gB z&a5dW?60Ec4Q^VK1fz;rKON?xRjx1Jy-+fqFa9Cl%zF(X zb$=3-4RUe@C8F&&&T{hgMv&`SCoUNvBvr*`Z3y?{sIRw`bFcrB7Ea2OX#puH?S`RKFTJS~cj z#8;AVc7CsaBr`s3tJR$X95tS>8!)&6e`Yh)64in&*IqYs?}TT$XFH9)9^Flk9g956 zgAfg%x73>6er0I}`0Wp7P3#S-&H-3FM zS{&5A;QS=Qwl}X})zFBHvcOowiq?)HlEdv{M=vExg7z^_JDtD4d5t)5LJ4>bW}5oY z!)TUQK$_NgQ2Zt`9QMaB|t({gX1WZG(6v5E;+lE`)VyG zPaOH2a>;9}oe>KKX;oQqRKAmXqGQ{u4QN5)o?ahH1diumy|fvXSrcY2Y9Ub0i9&u_ zd!>FfL#D=Lo*MTZQ_rB;+EyAGH}012q0r0)BO~d`Z&oT>MeZ>4XZd7bX)3L);{O;@RNhQ;PVQAjpN$kGxGT&yQqdxluycOayqtg>7&xPuf zt8a2vDj$Es_h}MsVCcq^FTrgUbQfz06;8d|%IMrJRwu;`SuN8=9MjIMXE;hlZD{&= zW2MFPC`x_TE}lcliwJ7SRl*D!KUO38Oso$EiVfUGeIcZ;L%0@9A!JAr1vvP$sfO`1 z&ojDgpa62b9fSs8puUaMlFN16P7lh{q%sT$>L=;SkSZ2W`(entjI-`~y#k^8iTbCgWXs1vEEYfqR0^9rA{rZs4Id}-?@7FfB}x$11R#xJCdok0C&+vsj84)vvbc(Sm3hG$$*Q)hNG zOQ)CZfbF2vwB5YWy_szf$#ieM9=c=#g7NUy_uH9=p47Qh!>cRU+^xh^R;pn=!63Cz z(qo2)Ha&Fhcfc=&NMBsu6bHfYlI@1MuS}-2qOr?ln&26^hRq2TbITvA~l2a1Abu9)b=I zc`YC3y{@lmEZQt&$~5NVti*v}UxmQauz07m+}7bm7MHuP$|#zdi@nzLf%15yu_cph zkWJ+RLiMF%GTu^&N>$US^p}qjB%{}d-M>CZ8YkrE2_e^>Jesf6d-r|(M+s)(9haH~RNlMYarys$%xx5xMsh@B_ ztn`#j(GKJouPgu1c!%q;Oiez)M-_p#eH9CZ4%(e3A(t_B8Y+t1!+W9#Yn`}E+dG%T zE2SL8F;!$CW9?o)V&HszXpyDRic|Ip3jsYqV7c1gzm*?d4+=VlfdMUB&>v9-$KRk* zzF~ck5{5jjN-w{7`6yoB8P)53&m=wO}6DCzNl(4mbq?9iH77&SEKFlNWzd}Xiy0d zpK9n5h#Eh8@W7>P8l?>@&sz{>F_aO`%b|(mDy)P45$8(Z^YHYwy zykIswenwg==xmqYY?kxH0vRD{oh()G>`69P?I}{LO}N#=rYSmt+%WIl3E-e-erJ97 zP^S47Hn8g2WS*8SRPzcw!1)eKrt6~8`f|C=A+6YFkfsc&%#H^OI6 zSgW@$rcEMepLLTgJ0&(SLm1CBg~qhOF0%bCB~gt$;uXD|%REP_z&uBH*knC1O-L?@ zs*4Y0<{_Zgc`C@>3+vm`kjX1CvjTCd*eT_y5FcSWW}Z0N_=^vQ^Y49a1s;_b&UR^x zu_!PqtTo(0>=+!7>-Pq9lC8jG?!fbiiw4j*rAS1ot`Hzi7rz;v-bykZFKc5~>CCmJ z=boLT+n4=2{OKUoOaiz)M#WKI5`p84=3T~<*o^V@dl1KkJL4|8hrs!$JT?&gZb=M0 zyEgw3vmH7Ag^1mGPC`lp(VUvVMKPzPu&aWF3X<0m2;gQ=&rrC=ROq(P!8gqU%VureVKa9O%lSGWA_6LgR#d39s8EXa60rB$RqxY{+Mm$-{yE#dtwrXNpFC(K&H=h&t%tNm zj<+2)n&l%_%v;FUh=fgBq1hk!&pJ6Q<~v3?S%JZRqotK_Z#_HJdmHA_FPn`(FRV^X z)aD5SUe(DkzbPG_kK}ZrN@8hn@{Bs<6Z;MPk|#!p54J=8<)5&BzJK-kWqKf*Qt)0z zw>O7dKZU3bNCn^nx3L|2$&nJl$1h0?Yof)cDdinRf*mr4L5(z_&6`=rF7uCsFpok7 zL~E)oncZxW0Out-vaBfc(zmdhfxIRpUA7GGHsg<;uw)(0%%>SymLFB%}qtc z6+H}IJtO318V=MXjkdUsj-b{~ZopW4=M!~esEIr(s0J}qXgMP|9C_ZhNC9Xvq+fz< zRzl^;;D8{{HcC3f+h@7u%gymPaAh?Tj6tw|ERh+JFnhUofA=Jc_!;)MaTUQ`OnCTe zn}+C?l(KiW2CnVU3fB+oliEi}MMtyNp9@ z?$=4L8^9BuyybEeyUE`Bj%xD0>CePC6=IZ))VEf8p7aouHz!H_so5| z_6~3B9D_olGFS~1&ZqpqV1U?{JENa0VkZobB+^ia&Nh_ai3&ur^?az5hK2EC`@3Q{ zM$P4(k&p}Tbykq#Vbx5awm&1LeP+3HV0dt!zH$gLX*Bl?T@4gXH5j;!%hT{s3_r%7 zh-$a3#U3_AgO3~iB6X(EDAC~hGG0#hXZz%w3kN?ceD&avoh zL7QOcXLL?mCh{0jFn>W0{2tY$9;H@1U9OOovch{%DW3N)Ptmh+ywHGV|1m_w&A*bWpT&CS(xq$dx0Mkytq#c(M9W!2wnNk3~CLnO57 zAfp3Od=xoUnm&lbfYPAog~CRIDo!OYg*XAg8`|!Y0G9dMgz8&HuTICgLJ}Nx*g|>#<4imRsr{<4Fh%Luv(E-;F`$=nH zw|VDJZ~Z7*U!>`4pD>P8&?6qc7{HRw5bAZ+^9S_%6327$OBMG$?w! zVT6IgEh?Aoxt{*<WN;@LiIYD6-aFfpfg>;dR~!}sSV6j>$p_|An!B}_!k z$09bw|F$91A3!Cw!JMu8al2AwhuDocf0|{lNTIP#UPs>OncNPUgVAmNG8thQb?5ix z1|}e)UiBd9IMMGSo8F1zSXb+YLKgiaC88M!o@gTuCXamNuCb@OfPtBJ9RBcaIG<-ANAJyiN*{f5OKnPBap;np2 zCu-pUe(Ul6MfbJaXp8as(j)~h?&RQe`)Izo46Z3^;%&admVMwOM7u&*ndsz>A}^M@ zGo3HC?;@fkRgU_)HRm!SZeSy^-1ufGNdI~Bjnw8U4T4(!tKS8b@_j5OGk92O(Unj~>BP*?daF}Z z;zW8Cem^5NU^V5C81n*fGB(c3ZqCx3j8=yG_^`9hjOx#sW5B& z5xD+S(ztyl%C-_MWl5P-{gt($GD$GN^TC$OLqw7%mM2-I-9#0K!J5lN={V5~tMzNr z57Id&sMf~M!@pUeW58((rWJwGL`vNd`AXfw`=s^5B$EWn`v6X+o39uSGsRN8u6dQl zHA8={s4S>W*b$6Plo9gW>loIgBKwPAi)ftnV*`mF@GJAUAsySYdhYEDY&Iu`MRQ*2 z-^w_zCwOJxt=qe<=?@Ry;5@!$y2|J(GH?RZZk~8y3$40(;BIzyQuz}%GpUF6I@Pu5 zwL0X9ZaqM17tFy>yXe!qH2I|GvF~Z`3{y7@0FO5D21gC$%$UM6!zjeAu*mApSq`#+ zW_h=M0!zFxg-k!*gP9WDC7Aya4PteUcEiX}nV? ze))%nXQeh4nIfWxk^0mI7|g(jqT6^@yf>vz>M)r^N6IK+F~}XKrw0 zP&bpRM}j`Z-aY~|`X(ga7%RbMKjK*QiUsefZ0D+Q+V6bBGI%2NjYzx?)FLwELapXM zxLr|$nVRZqGF&8c7LX;1jXYtW;9+I9+tN(H8c*3PGUIBt=A}reoNcnA@H{=APzvnp z^Nv!68tIdBAVOGR-q+80Oy?`o2_QVo8(#x2F*AwI%)gMG#q+Htj9}m(b5VenCdZ0J zCg*`M<|IV-_dwqh0mo9wS;3`>wh^W=suNYshqRyXQ7f}!&B!WIJR@R}&%e1Boj2E& zk%HVEXTti<63s4L!9?|^5kD_dCQe?MXbN2XA^BLT0sFQXj%=5m=^tk$L#EnpqdJzlH>C+E}=wvJi zML9_cSf-UfSdh-OB*a;MvBcB!^XgYrKq&T<@Ux6}eW|*G! ziRxa=X3gf_lKpl_E)SGkK2wP%FVs!4KnSeccCrXTnKQ>!o{;N-q%POHH)cg527S#VrRL!{N8iP0-91K{FyZjGd{ zN=|ekE$;cKBc>;q7*vVqf+qWtl?!R$jKfqX%Jg=gWgb~Dp$%c`!fy$FsA?MZq_9>p zZzY2s^7K}{J?{hdObZC2LaYI5$$;33v|SzwFbLU=1Ze!cY_e$K1v|SEKZ+}8(qDsl z5+aQqty1XmhCMA*qojeU_oLT0SraH32Cw{BM!#B_LH{o;(Pu$F^d z*Tjo&@ldom_=SbK#a1FM*FTeMtA(+a;pc>?gz=j@7)p{-N7K`E^~9gsL|h0sP?^A! z#GcEq(0eZz6Bj1OkFZ#qx?7B=jFy;by9Zx*6*2JV2J?Y<7$L#8CMa|TC6)~;MXbb~ z-Rwq5RUuo2vgC3Gb+pMMdI)8Y(N#DgYcGynk#0kAHPMvdsp**q=i)O)51o9u9-^W4 zQBw;b&I~je7E)b?J4uwVSeCmh6=?)Vj>!6B8er$IVh(mdy6L2#JlvJv!U{43)s@r1EksUgIVE22qv#?+32 z0DiA4XQZ{g*T=KM>4ERiMtEe%<@1IE$YREgitESzEwZ< z+ZLD)Uie9#cLJ%>Gf?bELVCE4lAO(}1Y}D1l?D{I4;z?S0>mQUn2|pa-XmF_C=N!Q zvqZKVr&@s`zQJS6i%5u6kb$R4ZW>o)*?wwE_Ulb9-a3DCO|TWi9xKZaLhjMwW3q7s zoWdfnp1<<;R6}xLixpfw6URJPW4~N^ly+c?5nR*2sU;gCue_VfhYN!ZNlphuubU*J z;C_$2#~csJDBCL#5kd59NuCT|X~=f1-7<4p?`I=6E?G70l?=6sXm;3IMZD}I)$EhY zKM$L>aj5uFGb;smBZXyIARV_-`Dn2r4;{^KH=o1q4qLo7F;kp~ZT5FG1Wil!%nH>Y zA8(ihPWT*-hOaGBxfo)*{*o(*#a-u*UHC9^QG?bc^x){DW$#}u>mN2`i8|nn_{}(b zB-j|4DmZ7)CYTNPT0vnY%Kn&}W#-oL%M0onG1P=8bq2xyPk7{6Pv|}FEV3Row!1Qp z=gq;>m_!n4<1l~1Te6nj4j(*c5}*p+fE$VsQt5zCf%xvM-9tR-lGwCJ$|6q26k*wE z2JHw{AniLL7Hr?fcPjRK4l{BEg*Q%2S3qQJVCpJ9Ie$L86h1-E8e3u+@I*+oo*fM^ zGX&E!?aW5qVfqvAKfEQKQKn}G%Kes$mneePR#9XybJb( zno+66GQE2JUT(?nsH=EO3KM>9MoaE9D3-T33M7I3@ET2-l> z`7HT!CQsq4DzYPmBw(_oIcQe!Q+xi)Iz94m)~9Sgz6j2G+)SZTP)+y{zxD#uf<_un zwX{W8vXdI@F+SgQo06gKvE6eCK2fkv5ipIG-@l}Pefonb*@CQ+JKT2XG97~+U)U}C z2p^4aT}iEoWoiS?6b##<3tss>^D7 zB7z$5Va_uN$fMfkGJx#mt1+gI%=MU6knS(&uZJu(SmPcmD!i0W>EjQxunrvcP z1;h^8kpfi(x@v(_35q~`@i3%4b&W78)QK zy`qE?IR>)D4cLMgX*IkX4J~qyGFyC}*6?s4;kFOG=A=o)<;EZ2+7>e3R2hPvbzW55 zjIwYd%=Qnx9NCm=MrFkhdq;&vwo{OH4*B3Xp{>Z&>XZ?8hrrq9f3D9|C`wIH*W&hc zK0EmiNLR*CC)Z1#xS*TRthSPQgtYCd12Nq>r*R<)CD>$ICFGsM?|-Hm6IlyZ>1PTx zkexDH8umeVHMF{7@4c8v7!sDCiSgvHLMz#$;;*t&+^> zeC3~6bsbH!d8C=ch%ITXXGts{hUmVd*s*jrnwbsbw5|pcom|#cV1n}W_H=-Vn1kRJ zn!+;S{JBv=KO4sv_U$c-PQ)7<#0Dsr1J|KMgka5npQ+LfD3ei|d zDcCI&;f(VrO5Ak?R{Gi|Iz^k#A=M7xpfUqh2Q=~m)SX1RmXse-7_dT&ICfYXS6t_j z8h!atq~u8x;7obQY|V81xR_2VvJ1N0Eai}rts{N%0O549h{@{w3J4qJ`uG6Cm|Uc< zHSx^OKgv*8NkwVQHwC|66l|s%-kJD&U4B{=nHv4pka1?S;`gjc!(lNHvK(ci$L2pD#?`Q8dgEe6q)20VL(CZ@;7?w794c?%GXv=tmT1Gt+>873C=d6QExNqo6jK* zO`XaMY3Qp(7hnJ=c5h__yrmfIpPna&9ek&fLUngYRRS6sND_6xcDV)AXjMOEQTrRi zLOEApdQja>lYE@aGH7OZUPW2y16l&l#WZ za8>}*=dqrctYWaD$?F%Bmo?`d6C_R_RhCyIRMr8?i+?cjRV2|zhd6^Z9x{+?UtDB~ zV`>7HDza*jez{N`D8iC%Gzt(0luG=Wf0A6#ji1cfu*GfIB0DG*J0+Pa!}Zpv>OKHI zU1HyAqwkq zV9xNh>ok@cD<5c=ZyI{hEGh1ou4g69Mk`>J$Z0dz)cU5Hu!$kLbHwYek)rm41 z5ri9A?^)Q*BiVb+S2B6e0^C6%5B}WQX_-6uPE;%;5NjeS%-+9^-MRad-ta;%p}z9Y z>$%J9PMD|&IyQnjK0xAVsN;*LV~Z{{)zn;%&za>T?HU^DDjmjMo#-#xm) z1; ztBlB + + +- [1 账号准备](#1-%E8%B4%A6%E5%8F%B7%E5%87%86%E5%A4%87) +- [2 环境要求](#2-%E7%8E%AF%E5%A2%83%E8%A6%81%E6%B1%82) +- [3 集成多场景项目](#3-%E9%9B%86%E6%88%90%E5%A4%9A%E5%9C%BA%E6%99%AF%E9%A1%B9%E7%9B%AE) + - [3.1 导入直播观看模块](#31-%E5%AF%BC%E5%85%A5%E7%9B%B4%E6%92%AD%E8%A7%82%E7%9C%8B%E6%A8%A1%E5%9D%97) + - [3.2 配置播放器 SDK](#32-%E9%85%8D%E7%BD%AE%E6%92%AD%E6%94%BE%E5%99%A8-SDK) + - [3.3 初始化多场景 SDK](#33-%E5%88%9D%E5%A7%8B%E5%8C%96%E5%A4%9A%E5%9C%BA%E6%99%AF-SDK) + - [3.4 跳转直播观看页面](#34-%E8%B7%B3%E8%BD%AC%E7%9B%B4%E6%92%AD%E8%A7%82%E7%9C%8B%E9%A1%B5%E9%9D%A2) + - [3.5 参数修改](#35-%E5%8F%82%E6%95%B0%E4%BF%AE%E6%94%B9) + + + +### 1 账号准备 + +在集成多场景 SDK 项目之前,请先在[Polyv 官网](http://www.polyv.net/)注册账号,并开通云直播服务。 + +Demo 中登录直播需要账号直播系统中的`appId`(应用ID),`appSecret`(应用密匙),`userId`(账号ID),`channelId`(频道号),登录回放再额外需要频道号对应回放列表里的`vid`(回放视频id)。您可以登录直播后台,在[开发者信息](https://console.polyv.net/live/#/develop/app-id)中获取参数。 + +### 2 环境要求 + +| 名称 | 要求 | +|----------------------|---------------| +| compatibleSdkVersion | \>= 5.0.0(12) | +| abiFilters | 仅支持 arm64-v8a | + +### 3 集成多场景项目 + +#### 3.1 导入直播观看模块 + +拷贝 demo 项目中的`scenes_live`模块到您项目的根目录下,并修改项目的`build-profile.json5`文件,添加对 scenes_live 模块的引用: + +```json5 +{ + "name": "scenes_live", + "srcPath": "./scenes_live" +} +``` + +#### 3.2 配置播放器 SDK + +多场景 SDK 的视频播放功能依赖于播放器 SDK,因此在初始化多场景 SDK 之前,需要修改模块的`oh-package.json5`文件,添加播放器 SDK 的依赖: + +```json5 +{ + "dependencies": { + // 播放器 SDK 对外接口依赖 + "@polyvharmony/media-player-sdk": "version", + // 播放器内核依赖 + "@polyvharmony/media-player-core-ijk": "version" + } +} +``` + +播放器 SDK 的播放内核、日志打印、数据存储等组件均需要在播放视频前完成配置,您可以参考 demo 项目中的`PLVMediaPlayerStartUp`类,完成播放器 SDK 的初始化配置。 + +```ts +// 配置全局 AppContext +PLVMediaPlayerAppContext.getInstance().setupAppContext(context) +// 配置日志 +PLVMediaPlayerLogger.loggerImpl = new HiLogImpl() +// 配置数据存储 +PLVKVStore.setupImplement(new PLVKVStoreOhosImpl(context)) +// 配置播放内核 +PLVMediaPlayerFactory.getInstance().register(PLVMediaPlayerCoreIjkProvider.getInstance()) +``` + +#### 3.3 初始化多场景 SDK + +多场景 SDK 需在模块 Ability 的 onWindowStageCreate 方法中进行初始化,您可以参考 demo 项目中的`PLVEntryAbility`类: + +```ts +PLVLiveSceneSDK.init(context, windowStage) +``` + +#### 3.4 跳转直播观看页面 + +demo 模块提供了 2 个页面,分别是: +1. `PLVLoginPage`是项目演示的登录页面,演示了如何跳转到直播观看页面 +2. `PLVLIWatchPage`是直播观看页面,支持播放直播和回放视频,同时也支持聊天室、互动等功能 + +您可以根据项目实际需要,在您项目的任意页面跳转到直播观看页面。 + +#### 3.5 参数修改 + +为了在 demo 项目播放您账号下的视频,您需要对项目中登录所需的参数进行配置。 + +demo 项目中,登录参数在 pages 文件夹下的`PLVLoginPage`类中配置: +- liveUserId/playbackUserId:账号Id +- liveChannelId/playbackChannelId:频道Id +- liveAppId/playbackAppId:应用Id +- liveAppSecret/playbackAppSecret:应用密钥 +- playbackVid:回放视频Id +- viewerId:学员(用户)Id +- viewerName:学员(用户)昵称 +- viewerAvatar:学员(用户)头像地址 \ No newline at end of file diff --git "a/publish/docs/3-SDK\345\205\245\345\217\243.md" "b/publish/docs/3-SDK\345\205\245\345\217\243.md" new file mode 100644 index 0000000..9ad0ece --- /dev/null +++ "b/publish/docs/3-SDK\345\205\245\345\217\243.md" @@ -0,0 +1,65 @@ + + + +- [1.PLVLiveScenesSDK](#1PLVLiveScenesSDK) +- [2.SDK 初始化](#SDK-%E5%88%9D%E5%A7%8B%E5%8C%96) +- [3.SDK 对象创建](#3SDK-%E5%AF%B9%E8%B1%A1%E5%88%9B%E5%BB%BA) +- [4.登录直播页面](#4%E7%99%BB%E5%BD%95%E7%9B%B4%E6%92%AD%E9%A1%B5%E9%9D%A2) +- [5.直播页面数据初始化](#5%E7%9B%B4%E6%92%AD%E9%A1%B5%E9%9D%A2%E6%95%B0%E6%8D%AE%E5%88%9D%E5%A7%8B%E5%8C%96) +- [6.SDK 对象销毁](#6SDK-%E5%AF%B9%E8%B1%A1%E9%94%80%E6%AF%81) + + + +### 1.PLVLiveScenesSDK + +`PLVLiveScenesSDK`类是多场景 SDK 的入口,该类提供了 SDK 初始化、直播页面数据初始化,以及各功能模块的统一入口和生命周期管理。 + +### 2.SDK 初始化 + +您可以使用`PLVLiveScenesSDK`的`init`静态方法对 SDK 进行初始化,详细使用代码可以参考 demo 项目的`PLVEntryAbility`类: + +```ts +PLVLiveSceneSDK.init(context, windowStage) +``` + +### 3.SDK 对象创建 + +在每次进入一个新的直播页面前,需要先创建一个新的 SDK 对象,该对象内部会生成一个 sdkId 与该直播页面相关联,之后也能在该直播页面使用 sdkId 去获取 SDK 对象,详细使用代码可以参考 demo 项目的`PLVLoginPage`类: + +```ts +// 创建 SDK 对象 +const sdk: PLVLiveSceneSDK = PLVLiveSceneSDK.create() +// 获取 SDK 对象 +PLVLiveSceneSDK.get(sdk.uniqueId) +``` + +### 4.登录直播页面 + +在进入直播页面之前,需要先进行登录验证,可以使用 SDK 对象的`loginManager`进行直播或者回放的登录,详细使用代码可以参考 demo 项目的`PLVLoginPage`类: + +```ts +// 登录直播 +sdk.loginManager.loginLive(userId?: string, channelId?: string, appId?: string, appSecret?: string) +// 登录回放 +sdk.loginManager.loginPlayback(userId?: string, channelId?: string, appId?: string, appSecret?: string, videoId?: string) +``` + +因为每次登录意味着要进入一个新的直播页面,因此在登录前需要创建一个新的 SDK 对象,如果登录失败时则需要调用该 SDK 对象`destroy`方法进行销毁。登录成功后,把 SDK 对象的`uniqueId`传递给直播页面,后续就能在直播页面使用`PLVLiveSceneSDK`的`get`方法获取到 SDK 对象了。 + +### 5.直播页面数据初始化 + +在进入直播页面后,需要对直播页面的数据进行初始化,在调用 SDK 对象的`initData`方法后,SDK 内部会进行本地资源的初始化,以及网络资源的请求,详细使用代码可以参考 demo项目的`PLVLIWatchLayout`类: + +```ts +// 初始化sdk数据,如果当前模块(scenes_live模块)为har类型,传getContext();如果为hsp类型,则需要传getContext().createModuleContext('模块名') +// 因sdk内部需要读取rawfile,因此这里需要传入模块的context +sdk.initData(getContext() as common.UIAbilityContext) +``` + +### 6.SDK 对象销毁 + +除了登录失败需要销毁 SDK 对象外,在退出直播页面的时候,也需要对 SDK 对象进行销毁以释放资源,详细使用代码可以参考 demo项目的`PLVLIWatchLayout`类: + +```ts +sdk.destroy() +``` \ No newline at end of file diff --git "a/publish/docs/4-\350\247\206\351\242\221\346\222\255\346\224\276.md" "b/publish/docs/4-\350\247\206\351\242\221\346\222\255\346\224\276.md" new file mode 100644 index 0000000..99a42bc --- /dev/null +++ "b/publish/docs/4-\350\247\206\351\242\221\346\222\255\346\224\276.md" @@ -0,0 +1,92 @@ + + + +- [1.播放器](#1%E6%92%AD%E6%94%BE%E5%99%A8) +- [2.设置渲染画面](#2%E8%AE%BE%E7%BD%AE%E6%B8%B2%E6%9F%93%E7%94%BB%E9%9D%A2) +- [3.播放参数配置](#3%E6%92%AD%E6%94%BE%E5%8F%82%E6%95%B0%E9%85%8D%E7%BD%AE) +- [4.播放控制](#4%E6%92%AD%E6%94%BE%E6%8E%A7%E5%88%B6) +- [5.回调](#5%E5%9B%9E%E8%B0%83) + + + +### 1.播放器 + +播放器管理器的对外核心类为`PLVPlayerManager`,可以通过 SDK 对象的`playerManager`属性对其进行访问,`playerManager`内部的`mainMediaPlayer`为视频播放的播放器。 + +### 2.设置渲染画面 + +播放器通过`surface`类型的 XComponent 组件进行渲染,libraryname 为`plvplayer_xcomponent`,您可以通过`startMainMediaPlayerWithComponent`方法将渲染画面设置给播放器: + +```ts +XComponent({ + id: `plvli_video_xcomponent`, + type: "surface", + libraryname: "plvplayer_xcomponent" +}) { +} +.onLoad((component) => { + // 设置渲染画面并开始播放 + this.sdk.playerManager.startMainMediaPlayerWithComponent(component!) +}) +``` + +### 3.播放参数配置 + +通过调用`mainMediaPlayer`的`setPlayerOption()`方法设置播放参数 + +```ts +/** + * 设置播放参数 + */ +setPlayerOption(options: PLVMediaPlayerOption[]) +``` + +`PLVMediaPlayerOptionEnum`类中提供了一些常用的播放参数,您可以直接引用其中的常量,例如: + +```ts +// 开启精准seek的参数 +PLVMediaPlayerOptionEnum.ENABLE_ACCURATE_SEEK.value("1") +``` +对于重复设置的参数,新设置的参数会覆盖旧的参数;如果想要清空参数,可以在 value 字段中传入空字符串 + +### 4.播放控制 + +播放器`mainMediaPlayer`提供了一系列的播放控制接口,例如: + +```ts +/** + * 开始播放 + */ +start(): void; + +/** + * 暂停播放 + */ +pause(): void;` + +/** + * 跳转播放进度到指定位置 + * @param position 指定位置,单位:毫秒 + */ +seek(position: number): void; +``` + +更多控制操作可以参考`IPLVMediaPlayer`以及它的父接口`IPLVMediaPlayerControl` + +### 5.回调 + +播放器的状态、事件回调可以通过回调注册中心进行监听,包括: + +- IPLVMediaPlayerBusinessListenerRegistry:播放器业务回调注册中心 +- IPLVMediaPlayerEventListenerRegistry:播放器事件回调注册中心 +- IPLVMediaPlayerStateListenerRegistry:播放器状态回调注册中心 + +以监听播放/暂停状态为例,可以通过以下方式进行监听: + +```ts +const playingState: MutableState = player.getStateListenerRegistry().playingState; +const observer = playingState.observe((state: PLVMediaPlayerPlayingState) => { + // 处理逻辑 + const isPlaying = state === PLVMediaPlayerPlayingState.PLAYING; +}); +``` \ No newline at end of file diff --git "a/publish/docs/5-\350\201\212\345\244\251\345\256\244.md" "b/publish/docs/5-\350\201\212\345\244\251\345\256\244.md" new file mode 100644 index 0000000..d5c3c5c --- /dev/null +++ "b/publish/docs/5-\350\201\212\345\244\251\345\256\244.md" @@ -0,0 +1,74 @@ + + + +- [1.聊天室](#1%E8%81%8A%E5%A4%A9%E5%AE%A4) +- [2.登录](#2%E7%99%BB%E5%BD%95) +- [3.回调](#3%E5%9B%9E%E8%B0%83) +- [4.发言](#4%E5%8F%91%E8%A8%80) +- [5.提问](#5%E6%8F%90%E9%97%AE) + + + +### 1.聊天室 + +聊天室管理器的对外核心类为`PLVChatroomManager`,可以通过 SDK 对象的`chatroomManager`属性对其进行访问。 + +### 2.登录 + +聊天室的消息收发依赖于 socket,因此需要先进行 socket 的登录,后续才能正常使用聊天室。socket 管理器的对外核心类为`PLVSocketManager`,可以通过 SDK 对象的`socketManager`属性对其进行访问: + +```ts +// 监听socket连接状态 +sdk.socketManager.onStatus() +// socket登录 +sdk.socketManager.login() +``` + +详细使用代码可以参考 demo 项目的`PLVLIWatchLayout`类。 + +### 3.回调 + +聊天室的 socket通道消息、业务事件消息通过回调注册进行监听,包括: + +- onData:socket通道消息回调注册 +- eventNotify.on:业务事件消息回调注册 + +以监听 socket通道的公告/移除公告消息为例,可以通过以下方式进行监听: + +```ts +sdk.chatroomManager.onData(PLVSocketOnEvent.MESSAGE, (data: string, event: string) => { + switch (event) { + // 公告 + case PLVBulletinEvent.EVENT: + break; + // 移除公告 + case PLVRemoveBulletinEvent.EVENT: + break; + default: + break; + } +}, this) +``` + +详细使用代码可以参考 demo 项目的`PLVLIWatchLayout`、`PLVLIChatListLayout`类。 + +### 4.发言 + +可以使用聊天室的`speak`方法进行发言: + +```ts +// messsage:要发言的消息,replay:携带的回复消息,非回复时为undefined +sdk.chatroomManager.speak(message, replay) +``` + +详细使用代码可以参考 demo 项目的`PLVLIChatInputView`类。 + +### 5.提问 + +可以使用聊天室的`quiz`方法进行提问: + +```ts +sdk.chatroomManager.quiz(message) +``` + +详细使用代码可以参考 demo 项目的`PLVLIChatInputView`类。 \ No newline at end of file diff --git "a/publish/docs/6-\344\272\222\345\212\250.md" "b/publish/docs/6-\344\272\222\345\212\250.md" new file mode 100644 index 0000000..12b129e --- /dev/null +++ "b/publish/docs/6-\344\272\222\345\212\250.md" @@ -0,0 +1,46 @@ + + + +- [1.互动](#1%E4%BA%92%E5%8A%A8) +- [2.互动页](#2%E4%BA%92%E5%8A%A8%E9%A1%B5) +- [3.回调](#3%E5%9B%9E%E8%B0%83) + + + +### 1.互动 + +互动管理器的对外核心类为`PLVInteractManager`,可以通过 SDK 对象的`interactManager`属性对其进行访问。 + +### 2.互动页 + +互动页是一个 Web 组件,其对外核心类为`PLVInteractWeb`,只需要把该组件嵌入到布局中即可完成互动页的集成。 + +```ts +PLVInteractWeb({ + interactManager: this.interactManager, // 互动管理器 + interactCallback: this.interactCallback, // 互动回调 + controller: this.controller, // web组件控制器 + redpackManager: this.redpackManager // 红包管理器 +}) +``` + +详细使用代码可以参考 demo 项目的`PLVLIInteractWebView`类。 + +### 3.回调 + +互动的业务事件消息通过`interactCallback`注册进行监听,包括: + +- processWebViewVisibility:web组件可见性回调注册 +- processOpenLinkEvent:互动内部打开链接回调注册 +- processClickProductEvent:点击商品回调注册 + +以监听 web组件可见性消息为例,可以通过以下方式进行监听: + +```ts +interactCallback.processWebViewVisibility = (show) => { + // 处理逻辑 + this.viewController.isShow = show +} +``` + +详细使用代码可以参考 demo 项目的`PLVLIInteractWebView`类。 \ No newline at end of file diff --git "a/publish/docs/7-\345\225\206\345\223\201.md" "b/publish/docs/7-\345\225\206\345\223\201.md" new file mode 100644 index 0000000..d08d443 --- /dev/null +++ "b/publish/docs/7-\345\225\206\345\223\201.md" @@ -0,0 +1,43 @@ + + + +- [1.商品](#1%E5%95%86%E5%93%81) +- [2.商品页](#2%E5%95%86%E5%93%81%E9%A1%B5) +- [3.回调](#3%E5%9B%9E%E8%B0%83) + + + +### 1.商品 + +商品管理器的对外核心类为`PLVProductManager`,可以通过 SDK 对象的`productManager`属性对其进行访问。 + +### 2.商品页 + +商品页是一个 Web 组件,其对外核心类为`PLVProductWeb`,只需要把该组件嵌入到布局中即可完成商品页的集成。 + +```ts +PLVProductWeb({ + controller: this.productController, // web组件控制器 + interactManager: this.interactManager // 互动管理器 +}) +``` + +详细使用代码可以参考 demo 项目的`PLVLIProductWebView`类。 + +### 3.回调 + +商品的业务事件消息通过回调注册进行监听,包括: + +- productManager.eventNotify.on:商品数据回调注册 +- productController.eventNotify.on:商品点击回调注册 + +以监听商品数据为例,可以通过以下方式进行监听: + +```ts +sdk.productManager.eventNotify.on('product_data', (value: PLVProductDataBean) => { + // 处理逻辑 + this.productDataBean = value +}, this) +``` + +详细使用代码可以参考 demo 项目的`PLVLILiveHomeLayout`类。 \ No newline at end of file diff --git "a/publish/docs/8-\346\211\223\350\265\217.md" "b/publish/docs/8-\346\211\223\350\265\217.md" new file mode 100644 index 0000000..559f60c --- /dev/null +++ "b/publish/docs/8-\346\211\223\350\265\217.md" @@ -0,0 +1,39 @@ + + + +- [1.打赏](#1%E4%BA%92%E5%8A%A8) +- [2.回调](#2%E5%9B%9E%E8%B0%83) +- [3.礼物打赏](#3%E7%A4%BC%E7%89%A9%E6%89%93%E8%B5%8F) + + + +### 1.打赏 + +打赏管理器的对外核心类为`PLVRewardManager`,可以通过 SDK 对象的`rewardManager`属性对其进行访问。 + +### 2.回调 + +打赏的配置在 SDK 进行直播页面数据初始化时会进行请求,这里我们通过注册进行监听,包括: + +- rewardManager.eventNotify.on:打赏配置回调 + +以监听打赏配置为例,可以通过以下方式进行监听: + +```ts +sdk.rewardManager.eventNotify.on('reward_setting', (value: PLVRewardSettingVO) => { + // 处理逻辑 +}, this) +``` + +详细使用代码可以参考 demo 项目的`PLVLILiveHomeLayout`类。 + +### 3.礼物打赏 + +当前 SDK 暂只支持礼物打赏(包含现金支付(仅免费)、积分支付类型),分别对应`makeGiftCashReward`、`makePointReward`方法: + +```ts +rewardManager.makeGiftCashReward(goodId, goodNum) +rewardManager.makePointReward(goodId, goodNum) +``` + +详细使用代码可以参考 demo 项目的`PLVLIRewardView`类。 \ No newline at end of file diff --git "a/publish/docs/\346\224\257\346\214\201\347\232\204\345\212\237\350\203\275\347\211\271\346\200\247.md" "b/publish/docs/\346\224\257\346\214\201\347\232\204\345\212\237\350\203\275\347\211\271\346\200\247.md" new file mode 100644 index 0000000..9ef6bd2 --- /dev/null +++ "b/publish/docs/\346\224\257\346\214\201\347\232\204\345\212\237\350\203\275\347\211\271\346\200\247.md" @@ -0,0 +1,40 @@ +## 功能特性 + +目前多场景项目支持的功能包括: + +- 直播播放器 + - 切换线路 + - 切换码率 + - 切换音视频模式 +- 回放播放器 + - 自动续播 + - 倍速播放 + - 循环播放 +- 聊天室 + - 公聊 + - 提问 + - 点赞 + - 回复 + - 欢迎语 + - 聊天回放 +- 商品 + - 商品卡片 + - 商品列表 + - 商品详情 +- 互动 + - 公告 + - 签到 + - 抽奖 + - 答题卡 + - 问卷 + - 口令红包 + - 卡片推送 +- 打赏 + - 免费打赏 + - 积分打赏 +- 直播间 + - 直播介绍 + - 在线人数 +- 多语言 + - 简体中文 + - 英文 diff --git a/scenes_live/.gitignore b/scenes_live/.gitignore new file mode 100644 index 0000000..745cc01 --- /dev/null +++ b/scenes_live/.gitignore @@ -0,0 +1,8 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test +/oh-package-lock.json5 +BuildProfile.ets \ No newline at end of file diff --git a/scenes_live/Index.ets b/scenes_live/Index.ets new file mode 100644 index 0000000..c38a23b --- /dev/null +++ b/scenes_live/Index.ets @@ -0,0 +1,5 @@ +// pages +export { pushToWatchPage } from './src/main/ets/pages/PLVLIWatchPage' + +// sdk +export * from '@polyvharmony/live-scenes-sdk' \ No newline at end of file diff --git a/scenes_live/build-profile.json5 b/scenes_live/build-profile.json5 new file mode 100644 index 0000000..e8a3c1d --- /dev/null +++ b/scenes_live/build-profile.json5 @@ -0,0 +1,28 @@ +{ + "apiType": "stageMode", + "buildOption": { + }, + "buildOptionSet": [ + { + "name": "release", + "arkOptions": { + "obfuscation": { + "ruleOptions": { + "enable": true, + "files": [ + "./obfuscation-rules.txt" + ] + }, + "consumerFiles": [ + "./obfuscation-rules.txt" + ] + } + }, + }, + ], + "targets": [ + { + "name": "default" + } + ] +} \ No newline at end of file diff --git a/scenes_live/hvigorfile.ts b/scenes_live/hvigorfile.ts new file mode 100644 index 0000000..4218707 --- /dev/null +++ b/scenes_live/hvigorfile.ts @@ -0,0 +1,6 @@ +import { harTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: harTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/scenes_live/obfuscation-rules.txt b/scenes_live/obfuscation-rules.txt new file mode 100644 index 0000000..e978fdb --- /dev/null +++ b/scenes_live/obfuscation-rules.txt @@ -0,0 +1,21 @@ +# Define project specific obfuscation rules here. +# You can include the obfuscation configuration files in the current module's build-profile.json5. +# +# For more details, see +# https://gitee.com/openharmony/arkcompiler_ets_frontend/blob/master/arkguard/README.md + +# Obfuscation options: +# -disable-obfuscation: disable all obfuscations +# -enable-property-obfuscation: obfuscate the property names +# -enable-toplevel-obfuscation: obfuscate the names in the global scope +# -compact: remove unnecessary blank spaces and all line feeds +# -remove-log: remove all console.* statements +# -print-namecache: print the name cache that contains the mapping from the old names to new names +# -apply-namecache: reuse the given cache file + +# Keep options: +# -keep-property-name: specifies property names that you want to keep +# -keep-global-name: specifies names that you want to keep in the global scope + +-keep-global-name +* \ No newline at end of file diff --git a/scenes_live/oh-package.json5 b/scenes_live/oh-package.json5 new file mode 100644 index 0000000..dafeadf --- /dev/null +++ b/scenes_live/oh-package.json5 @@ -0,0 +1,13 @@ +{ + "name": "scenes_live", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "Index.ets", + "author": "", + "license": "MIT", + "packageType": "InterfaceHar", + "dependencies": { + "@polyvharmony/live-scenes-sdk": "1.0.0", + "@polyvharmony/media-player-sdk": "2.2.0" + } +} \ No newline at end of file diff --git a/scenes_live/src/main/ets/common/PLVLIEventHub.ets b/scenes_live/src/main/ets/common/PLVLIEventHub.ets new file mode 100644 index 0000000..0284966 --- /dev/null +++ b/scenes_live/src/main/ets/common/PLVLIEventHub.ets @@ -0,0 +1,15 @@ +export type EventType = 'plvli_chat_reply' + +export class PLVLIEventHub { + static on(event: EventType, callback: Function) { + getContext().eventHub.on(event, callback) + } + + static off(event: EventType, callback?: Function) { + getContext().eventHub.off(event, callback) + } + + static emit(event: EventType, ...args: Object[]) { + getContext().eventHub.emit(event, ...args) + } +} \ No newline at end of file diff --git a/scenes_live/src/main/ets/common/PLVLIFaceManager.ets b/scenes_live/src/main/ets/common/PLVLIFaceManager.ets new file mode 100644 index 0000000..bea2cc9 --- /dev/null +++ b/scenes_live/src/main/ets/common/PLVLIFaceManager.ets @@ -0,0 +1,59 @@ +import { HashMap } from '@kit.ArkTS'; + +class PLVLIFaceManager { + private faceMap: HashMap = new HashMap() + + constructor() { + this.initFaceMap() + } + + private initFaceMap() { + this.faceMap.set('[呲牙]', $r('app.media.plvli_face_101')); + this.faceMap.set('[大笑]', $r('app.media.plvli_face_102')); + this.faceMap.set('[可爱]', $r('app.media.plvli_face_103')); + this.faceMap.set('[害羞]', $r('app.media.plvli_face_104')); + this.faceMap.set('[偷笑]', $r('app.media.plvli_face_105')); + this.faceMap.set('[再见]', $r('app.media.plvli_face_106')); + this.faceMap.set('[惊讶]', $r('app.media.plvli_face_107')); + this.faceMap.set('[哭笑]', $r('app.media.plvli_face_108')); + this.faceMap.set('[酷]', $r('app.media.plvli_face_109')); + this.faceMap.set('[奸笑]', $r('app.media.plvli_face_110')); + this.faceMap.set('[鼓掌]', $r('app.media.plvli_face_111')); + this.faceMap.set('[大哭]', $r('app.media.plvli_face_112')); + this.faceMap.set('[敲打]', $r('app.media.plvli_face_113')); + this.faceMap.set('[吃瓜]', $r('app.media.plvli_face_114')); + this.faceMap.set('[让我看看]', $r('app.media.plvli_face_115')); + this.faceMap.set('[按脸哭]', $r('app.media.plvli_face_116')); + this.faceMap.set('[打哈欠]', $r('app.media.plvli_face_117')); + this.faceMap.set('[愤怒]', $r('app.media.plvli_face_118')); + this.faceMap.set('[难过]', $r('app.media.plvli_face_119')); + this.faceMap.set('[ok]', $r('app.media.plvli_face_120')); + this.faceMap.set('[爱心]', $r('app.media.plvli_face_121')); + this.faceMap.set('[加1]', $r('app.media.plvli_face_122')); + this.faceMap.set('[心碎]', $r('app.media.plvli_face_123')); + this.faceMap.set('[正确]', $r('app.media.plvli_face_124')); + this.faceMap.set('[错误]', $r('app.media.plvli_face_125')); + this.faceMap.set('[满分]', $r('app.media.plvli_face_126')); + this.faceMap.set('[笔记]', $r('app.media.plvli_face_127')); + this.faceMap.set('[胜利]', $r('app.media.plvli_face_128')); + this.faceMap.set('[比心]', $r('app.media.plvli_face_129')); + this.faceMap.set('[赞]', $r('app.media.plvli_face_130')); + this.faceMap.set('[蛋糕]', $r('app.media.plvli_face_131')); + this.faceMap.set('[礼物]', $r('app.media.plvli_face_132')); + this.faceMap.set('[红包]', $r('app.media.plvli_face_133')); + this.faceMap.set('[奶茶]', $r('app.media.plvli_face_134')); + this.faceMap.set('[时钟]', $r('app.media.plvli_face_135')); + this.faceMap.set('[晚安]', $r('app.media.plvli_face_136')); + this.faceMap.set('[拍手]', $r('app.media.plvli_face_137')); + this.faceMap.set('[鲜花]', $r('app.media.plvli_face_138')); + } + + getFace(faceKey: string): Resource | string { + if (this.faceMap.hasKey(faceKey)) { + return this.faceMap.get(faceKey) + } + return faceKey + } +} + +export default new PLVLIFaceManager() \ No newline at end of file diff --git a/scenes_live/src/main/ets/components/PLVLIDetailLayout.ets b/scenes_live/src/main/ets/components/PLVLIDetailLayout.ets new file mode 100644 index 0000000..9ace8d5 --- /dev/null +++ b/scenes_live/src/main/ets/components/PLVLIDetailLayout.ets @@ -0,0 +1,133 @@ +import { IPLVBackwardInterface, PLVCallback, PLVChannelData, PLVCommonConstants, PLVDeviceUtils, PLVSimpleWeb, PLVWebController, PLVWebUtils } from '@polyvharmony/live-scenes-sdk' + +const TAG = '[PLVLIDetailLayout]' + +@Preview +@Component +export struct PLVLIDetailLayout { + @LocalStorageLink('channelData') channelData?: PLVChannelData = undefined + @Link layoutController: PLVDetailLayoutController + @Link @Watch('onBulletinSrc') bulletinSrc: string | undefined + @State introSrc: string | undefined = this.channelData?.getMenuDescContent() + + aboutToAppear(): void { + this.initData() + } + + build() { + Column() { + Scroll() { + Column() { + Blank(60) + if (this.bulletinSrc) { + Column() { + Text() { + ImageSpan($r('app.media.plvli_detail_gonggao')) + .width(16) + .height(16) + .margin({ right: 8 }) + .verticalAlign(ImageSpanAlignment.CENTER) + Span($r('app.string.plvli_live_bulletin')) + .fontSize(16) + } + .width(PLVCommonConstants.FULL_PERCENT) + .textAlign(TextAlign.Start) + + PLVSimpleWeb({ controller: this.layoutController.bulletinWebController, src: '' }) + .height(216) + .margin({ top: 16 }) + } + .backgroundColor('#CCF3F3F3') + .borderRadius(10) + .padding(16) + } + + Column() { + Text() { + ImageSpan($r('app.media.plvli_intro')) + .width(16) + .height(16) + .margin({ right: 8 }) + .verticalAlign(ImageSpanAlignment.CENTER) + Span($r('app.string.plvli_live_intro')) + .fontSize(16) + } + .width(PLVCommonConstants.FULL_PERCENT) + .textAlign(TextAlign.Start) + + if (this.introSrc) { + PLVSimpleWeb({ controller: this.layoutController.introWebController, src: '' }) + .margin({ top: 16 }) + } else { + Text($r('app.string.plvli_live_no_intro')) + .width(PLVCommonConstants.FULL_PERCENT) + .layoutWeight(1) + .offset({ y: -8 }) + .textAlign(TextAlign.Center) + .fontSize(14) + } + } + .constraintSize({ minHeight: 216, maxHeight: 400 }) + .margin({ top: 8 }) + .backgroundColor('#CCF3F3F3') + .borderRadius(10) + .padding(16) + } + .width(PLVCommonConstants.FULL_PERCENT) + } + .scrollable(ScrollDirection.Vertical) + .scrollBar(BarState.Off) + .width(PLVCommonConstants.FULL_PERCENT) + .height(400) + } + .padding({ + left: 16, + right: 16, + top: 6, + bottom: 6 + PLVDeviceUtils.getNavigationIndicatorHeight() + }) + .justifyContent(FlexAlign.End) + .width(PLVCommonConstants.FULL_PERCENT) + .height(PLVCommonConstants.FULL_PERCENT) + } + + initData() { + this.layoutController.introSrc = this.introSrc + this.layoutController.bulletinSrc = this.bulletinSrc + } + + onBulletinSrc() { + this.layoutController.bulletinSrc = this.bulletinSrc + } +} + +export class PLVDetailLayoutController implements IPLVBackwardInterface { + bulletinSrc: string | undefined + introSrc: string | undefined + isLayoutShow?: boolean + introWebController = new PLVWebController() + .nestedScrollOptions({ + scrollForward: NestedScrollMode.PARALLEL, + scrollBackward: NestedScrollMode.SELF_FIRST + }) + .onControllerAttached(() => { + this.introWebController.loadHtmlData(PLVWebUtils.toWebViewContent(this.introSrc)) + }) + bulletinWebController = new PLVWebController() + .onControllerAttached(() => { + this.bulletinWebController.loadHtmlData(PLVWebUtils.toWebViewContent(this.bulletinSrc)) + }) + accessBackward: PLVCallback = () => { + if (this.isLayoutShow && (this.bulletinWebController.accessBackward() || this.introWebController.accessBackward())) { + return true + } + return false + } + backward: PLVCallback = () => { + if (this.bulletinWebController.accessBackward()) { + this.bulletinWebController.backward() + } else if (this.introWebController.accessBackward()) { + this.introWebController.backward() + } + } +} \ No newline at end of file diff --git a/scenes_live/src/main/ets/components/PLVLILiveHomeLayout.ets b/scenes_live/src/main/ets/components/PLVLILiveHomeLayout.ets new file mode 100644 index 0000000..ac0db31 --- /dev/null +++ b/scenes_live/src/main/ets/components/PLVLILiveHomeLayout.ets @@ -0,0 +1,327 @@ +import { + ChannelMenusBean, + GiftDetailDataBean, + IPLVBackwardInterface, + PLVBaseIdEvent, + PLVCallback, + PLVChannelData, + PLVChatQuoteDataBean, + PLVCommonConstants, + PLVDeviceUtils, + PLVLazyDataSource, + PLVLiveSceneSDK, + PLVProductDataBean, + PLVRewardSettingVO, + PLVToastUtils +} from '@polyvharmony/live-scenes-sdk' +import { PLVLIWatchInfoView } from './liveroom/PLVLIWatchInfoView' +import { PLVLIChatInputEntryView } from './chatroom/PLVLIChatInputEntryView' +import { PLVLIChatInputView } from './chatroom/PLVLIChatInputView' +import { PLVLIChatListLayout } from './chatroom/PLVLIChatListLayout' +import { PLVLIBulletinView } from './liveroom/PLVLIBulletinView' +import { PLVLIMoreView } from './liveroom/PLVLIMoreView' +import { PLVLILikeIconView } from './chatroom/PLVLILikeIconView' +import { PLVLIGreetingView } from './chatroom/PLVLIGreetingView' +import { PLVLIRewardView } from './reward/PLVLIRewardView' +import { PLVLIProductView } from './product/PLVLIProductView' +import { PLVLIProductWebView, PLVProductWebViewController } from './product/PLVLIProductWebView' +import { PLVInteractWebViewController, PLVLIInteractWebView } from './interact/PLVLIInteractWebView' +import { PLVLIInteractEntranceView } from './interact/entrance/PLVLIInteractEntranceView' +import { PLVLICardPushView } from './interact/cardpush/PLVLICardPushView' +import { PLVLILotteryView } from './interact/lottery/PLVLILotteryView' +import { PLVLIRedpackView } from './chatroom/PLVLIRedpackView' +import { PLVLIEventHub } from '../common/PLVLIEventHub' +import { PLVLIToTopView } from './chatroom/PLVLIToTopView' + +const TAG = '[PLVLILiveHomeLayout]' + +@Preview +@Component +export struct PLVLILiveHomeLayout { + @LocalStorageLink('sdk') sdk?: PLVLiveSceneSDK = undefined + @LocalStorageLink('channelData') channelData?: PLVChannelData = undefined + @Link layoutController: PLVLiveHomeLayoutController + @Link bulletinSrc: string | undefined + chatListScroller: ListScroller = new ListScroller() + // 全部消息的数据列表 + @State fullChatListData: PLVLazyDataSource = new PLVLazyDataSource() + quizListScroller: ListScroller = new ListScroller() + @State quizListData: PLVLazyDataSource = new PLVLazyDataSource() + @State quizMenu: ChannelMenusBean | undefined = this.channelData?.getMenuQuizBean() + @State isQuizSelected: boolean = false + @State isShowChatInputLayout: boolean = false + @State isCloseRoom: boolean = false + @State isFocusModeOpen: boolean = false + @State reply?: PLVChatQuoteDataBean = undefined + @State rewardDataBeans?: GiftDetailDataBean[] = undefined + @State rewardType?: string = undefined + @State productDataBean?: PLVProductDataBean = this.sdk?.productManager.getData() + @State productWebViewController: PLVProductWebViewController = new PLVProductWebViewController() + @State interactWebViewController: PLVInteractWebViewController = new PLVInteractWebViewController() + + aboutToAppear(): void { + this.initData() + this.onProductData() + this.onRewardData() + this.onChatData() + this.onReplyData() + this.onDelayRedpackData() + } + + aboutToDisappear(): void { + this.offReplyData() + } + + build() { + RelativeContainer() { + // + PLVLIWatchInfoView() + .alignRules({ + top: { anchor: PLVCommonConstants.CONTAINER, align: VerticalAlign.Top }, + left: { anchor: PLVCommonConstants.CONTAINER, align: HorizontalAlign.Start } + }) + .margin({ left: 16 }) + .id('watchInfoView') + // + // + PLVLIBulletinView({ bulletinSrc: this.bulletinSrc }) + .alignRules({ + top: { anchor: 'watchInfoView', align: VerticalAlign.Bottom }, + left: { anchor: PLVCommonConstants.CONTAINER, align: HorizontalAlign.Start } + }) + .margin({ left: 16, top: 16, right: 16 }) + .id('bulletinView') + // + // + PLVLIInteractEntranceView() + .alignRules({ + top: { anchor: 'bulletinView', align: VerticalAlign.Bottom }, + left: { anchor: PLVCommonConstants.CONTAINER, align: HorizontalAlign.Start } + }) + .margin({ left: 16, top: 8 }) + .id('interactEntranceView') + // + // + PLVLIToTopView() + .alignRules({ + top: { anchor: 'interactEntranceView', align: VerticalAlign.Bottom }, + middle: { anchor: PLVCommonConstants.CONTAINER, align: HorizontalAlign.Center } + }) + .margin({ top: 8 }) + .id('toTopView') + // + // + PLVLIGreetingView() + .alignRules({ + bottom: { anchor: 'chatListLayout', align: VerticalAlign.Top }, + left: { anchor: PLVCommonConstants.CONTAINER, align: HorizontalAlign.Start } + }) + .id('greetingView') + // + // + PLVLIChatListLayout({ + isQuizSelected: this.isQuizSelected, + isFocusModeOpen: this.isFocusModeOpen, + quizMenu: this.quizMenu, + fullChatListData: this.fullChatListData, + chatListScroller: this.chatListScroller, + quizListData: this.quizListData, + quizListScroller: this.quizListScroller + }) + .alignRules({ + bottom: { anchor: 'chatInputEntryView', align: VerticalAlign.Top }, + left: { anchor: PLVCommonConstants.CONTAINER, align: HorizontalAlign.Start } + }) + .id('chatListLayout') + // + // + PLVLIChatInputEntryView({ + isQuizSelected: this.isQuizSelected, + isShowChatInputLayout: this.isShowChatInputLayout, + quizMenu: this.quizMenu, + isCloseRoom: this.isCloseRoom, + isFocusModeOpen: this.isFocusModeOpen + }) + .alignRules({ + left: { anchor: PLVCommonConstants.CONTAINER, align: HorizontalAlign.Start }, + bottom: { anchor: PLVCommonConstants.CONTAINER, align: VerticalAlign.Bottom } + }) + .margin({ left: 16 }) + .id('chatInputEntryView') + // + // + PLVLILikeIconView() + .alignRules({ + right: { anchor: PLVCommonConstants.CONTAINER, align: HorizontalAlign.End }, + bottom: { anchor: 'moreView', align: VerticalAlign.Top } + }) + .margin({ right: 16, bottom: 10 }) + .id('likeIconView') + // + // + Row() { + if (this.productDataBean?.isOpenProduct) { + PLVLIProductView({ + productDataBean: this.productDataBean, + productWebViewController: this.productWebViewController + }) + .margin({ right: 12 }) + .id('productView') + } + if (this.rewardDataBeans) { + PLVLIRewardView({ + rewardDataBeans: this.rewardDataBeans, + rewardType: this.rewardType + }) + .margin({ right: 12 }) + .id('rewardView') + } + } + .alignRules({ + right: { anchor: 'moreView', align: HorizontalAlign.Start }, + bottom: { anchor: PLVCommonConstants.CONTAINER, align: VerticalAlign.Bottom } + }) + .id('rightBottomRow') + + // + // + PLVLIMoreView() + .alignRules({ + right: { anchor: PLVCommonConstants.CONTAINER, align: HorizontalAlign.End }, + bottom: { anchor: PLVCommonConstants.CONTAINER, align: VerticalAlign.Bottom } + }) + .margin({ right: 16 }) + .id('moreView') + // + // + if (this.isShowChatInputLayout) { + PLVLIChatInputView({ + isQuizSelected: this.isQuizSelected, + isShowChatInputLayout: this.isShowChatInputLayout, + fullChatListData: this.fullChatListData, + chatListScroller: this.chatListScroller, + quizListData: this.quizListData, + quizListScroller: this.quizListScroller, + isCloseRoom: this.isCloseRoom, + isFocusModeOpen: this.isFocusModeOpen, + quizMenu: this.quizMenu, + reply: this.reply + }) + .id('chatInputView') + } + // + // + PLVLIProductWebView({ + viewController: this.productWebViewController + }) + .zIndex(99) + .id('productWebView') + // + // + + Column({ space: 10 }) { + PLVLIRedpackView() + PLVLICardPushView() + PLVLILotteryView() + } + .alignItems(HorizontalAlign.End) + .alignRules({ + right: { anchor: PLVCommonConstants.CONTAINER, align: HorizontalAlign.End }, + bottom: { anchor: "moreView", align: VerticalAlign.Top } + }) + .margin({ + bottom: 72, + right: 15 + }) + + // + + // + PLVLIInteractWebView({ + viewController: this.interactWebViewController + }) + .zIndex(100) + .hitTestBehavior(this.interactWebViewController.isShow ? HitTestMode.Default : HitTestMode.Transparent) + .id('interactWebView') + // + + } + .padding({ top: 6, bottom: 6 + PLVDeviceUtils.getNavigationIndicatorHeight() }) + .width(PLVCommonConstants.FULL_PERCENT) + .height(PLVCommonConstants.FULL_PERCENT) + } + + initData() { + this.layoutController.productWebViewController = this.productWebViewController + this.layoutController.interactWebViewController = this.interactWebViewController + } + + onProductData() { + this.sdk?.productManager.eventNotify.on('product_data', (value: PLVProductDataBean) => { + this.productDataBean = value + }, this) + } + + onRewardData() { + this.sdk?.rewardManager.eventNotify.on('reward_setting', (value: PLVRewardSettingVO) => { + // 暂只支持礼物打赏(包含现金支付(仅免费)、积分支付类型) + if (value.getDonateGiftEnabled()) { + this.rewardType = value.giftDonate?.payWay + if ('POINT' === value.giftDonate?.payWay) { + this.rewardDataBeans = value.giftDonate.enabledPointPays + } else if ('CASH' === value.giftDonate?.payWay) { + this.rewardDataBeans = value.giftDonate.enabledCashPays + } + } + }, this) + } + + onChatData() { + this.sdk?.chatroomManager.eventNotify.on('close_room', (value: boolean) => { + this.isCloseRoom = value + if (this.isCloseRoom && !this.isQuizSelected) { + this.isShowChatInputLayout = false + } + PLVToastUtils.shortShow(value ? $r('app.string.plvli_chat_toast_chatroom_close') : $r('app.string.plvli_chat_toast_chatroom_open')) + }, this) + this.sdk?.chatroomManager.eventNotify.on('focus_mode_open', (value: boolean) => { + this.isFocusModeOpen = value + if (this.isFocusModeOpen && !this.isQuizSelected) { + this.isShowChatInputLayout = false + } + }, this) + } + + onReplyData() { + PLVLIEventHub.on('plvli_chat_reply', (reply: PLVChatQuoteDataBean) => { + this.reply = reply + this.isShowChatInputLayout = true + }) + } + + offReplyData() { + PLVLIEventHub.off('plvli_chat_reply') + } + + onDelayRedpackData() { + this.sdk?.redpackManager.updateDelayRedpackStatus(this.sdk.channelData.loginChannelId) + } +} + +export class PLVLiveHomeLayoutController implements IPLVBackwardInterface { + productWebViewController?: PLVProductWebViewController + interactWebViewController?: PLVInteractWebViewController + accessBackward: PLVCallback = () => { + return this.productWebViewController?.accessBackward() || this.interactWebViewController?.accessBackward() || false + } + backward: PLVCallback = () => { + if (this.productWebViewController?.accessBackward()) { + this.productWebViewController.backward() + } + if (this.interactWebViewController?.accessBackward()) { + this.interactWebViewController.isShow = false + this.interactWebViewController.isShowInnerWeb = false + + } + } +} \ No newline at end of file diff --git a/scenes_live/src/main/ets/components/PLVLIPlaybackHomeLayout.ets b/scenes_live/src/main/ets/components/PLVLIPlaybackHomeLayout.ets new file mode 100644 index 0000000..1c8e5c3 --- /dev/null +++ b/scenes_live/src/main/ets/components/PLVLIPlaybackHomeLayout.ets @@ -0,0 +1,125 @@ +import { IPLVBackwardInterface, PLVCallback, PLVChannelData, PLVCommonConstants, PLVDeviceUtils, PLVLiveSceneSDK, PLVProductDataBean } from '@polyvharmony/live-scenes-sdk' +import { PLVLIChatPlaybackLayout } from './chatroom/PLVLIChatPlaybackLayout' +import { PLVLIToTopView } from './chatroom/PLVLIToTopView' +import { PLVLIBulletinView } from './liveroom/PLVLIBulletinView' +import { PLVLIMoreView } from './liveroom/PLVLIMoreView' +import { PLVLIWatchInfoView } from './liveroom/PLVLIWatchInfoView' +import { PLVLIProductView } from './product/PLVLIProductView' +import { PLVLIProductWebView, PLVProductWebViewController } from './product/PLVLIProductWebView' + +const TAG = '[PLVLIPlaybackHomeLayout]' + +@Preview +@Component +export struct PLVLIPlaybackHomeLayout { + @LocalStorageLink('sdk') sdk?: PLVLiveSceneSDK = undefined + @LocalStorageLink('channelData') channelData?: PLVChannelData = undefined + @Link layoutController: PLVPlaybackHomeLayoutController + @Link bulletinSrc: string | undefined + @State productDataBean?: PLVProductDataBean = this.sdk?.productManager.getData() + @State productWebViewController: PLVProductWebViewController = new PLVProductWebViewController() + + aboutToAppear(): void { + this.initData() + this.onProductData() + } + + build() { + RelativeContainer() { + // + PLVLIWatchInfoView() + .alignRules({ + top: { anchor: PLVCommonConstants.CONTAINER, align: VerticalAlign.Top }, + left: { anchor: PLVCommonConstants.CONTAINER, align: HorizontalAlign.Start } + }) + .margin({ left: 16 }) + .id('watchInfoView') + // + // + PLVLIBulletinView({ bulletinSrc: this.bulletinSrc }) + .alignRules({ + top: { anchor: 'watchInfoView', align: VerticalAlign.Bottom }, + left: { anchor: PLVCommonConstants.CONTAINER, align: HorizontalAlign.Start } + }) + .margin({ left: 16, top: 16, right: 16 }) + .id('bulletinView') + // + // + PLVLIToTopView() + .alignRules({ + top: { anchor: 'bulletinView', align: VerticalAlign.Bottom }, + middle: { anchor: PLVCommonConstants.CONTAINER, align: HorizontalAlign.Center } + }) + .margin({ top: 8 }) + .id('toTopView') + // + // + PLVLIChatPlaybackLayout() + .alignRules({ + bottom: { anchor: PLVCommonConstants.CONTAINER, align: VerticalAlign.Bottom }, + left: { anchor: PLVCommonConstants.CONTAINER, align: HorizontalAlign.Start } + }) + .margin({ bottom: 128 }) + .id('chatListLayout') + // + // + Row() { + if (this.productDataBean?.isOpenProduct) { + PLVLIProductView({ + productDataBean: this.productDataBean, + productWebViewController: this.productWebViewController + }) + .margin({ right: 12 }) + .id('productView') + } + } + .alignRules({ + right: { anchor: 'moreView', align: HorizontalAlign.Start }, + bottom: { anchor: PLVCommonConstants.CONTAINER, align: VerticalAlign.Bottom } + }) + .id('rightBottomRow') + // + // + PLVLIMoreView() + .alignRules({ + right: { anchor: PLVCommonConstants.CONTAINER, align: HorizontalAlign.End }, + bottom: { anchor: PLVCommonConstants.CONTAINER, align: VerticalAlign.Bottom } + }) + .margin({ right: 16 }) + .id('moreView') + // + // + PLVLIProductWebView({ + viewController: this.productWebViewController + }) + .zIndex(99) + .id('productWebView') + // + } + .padding({ top: 6, bottom: 6 + PLVDeviceUtils.getNavigationIndicatorHeight() }) + .width(PLVCommonConstants.FULL_PERCENT) + .height(PLVCommonConstants.FULL_PERCENT) + } + + initData() { + this.layoutController.productWebViewController = this.productWebViewController + } + + onProductData() { + this.sdk?.productManager.eventNotify.on('product_data', (value: PLVProductDataBean) => { + this.productDataBean = value + }, this) + } +} + +export class PLVPlaybackHomeLayoutController implements IPLVBackwardInterface { + productWebViewController?: PLVProductWebViewController + accessBackward: PLVCallback = () => { + return this.productWebViewController?.accessBackward() || false + } + backward: PLVCallback = () => { + if (this.productWebViewController?.accessBackward()) { + this.productWebViewController.backward() + } + } +} \ No newline at end of file diff --git a/scenes_live/src/main/ets/components/PLVLIWatchLayout.ets b/scenes_live/src/main/ets/components/PLVLIWatchLayout.ets new file mode 100644 index 0000000..cbaf65b --- /dev/null +++ b/scenes_live/src/main/ets/components/PLVLIWatchLayout.ets @@ -0,0 +1,214 @@ +import { + IPLVBackwardInterface, + PLVBulletinEvent, + PLVCallback, + PLVChannelData, + PLVCommonConstants, + PLVDeviceUtils, + PLVJSONUtils, + PLVLiveSceneSDK, + PLVLoginType, + PLVRemoveBulletinEvent, + PLVSocketOnEvent, + PLVSocketStatus, + PLVSocketStatusSup, + PLVToastUtils, + PLVUtils +} from '@polyvharmony/live-scenes-sdk' +import { router } from '@kit.ArkUI' +import { PLVDetailLayoutController, PLVLIDetailLayout } from '../components/PLVLIDetailLayout' +import { PLVLILiveHomeLayout, PLVLiveHomeLayoutController } from '../components/PLVLILiveHomeLayout' +import { PLVLIPlaybackHomeLayout, PLVPlaybackHomeLayoutController } from '../components/PLVLIPlaybackHomeLayout' +import { PLVLIPlayerLayout } from './player/PLVLIPlayerLayout' +import { common } from '@kit.AbilityKit' + +const TAG = '[PLVLIWatchLayout]' + +@Preview +@Component +export struct PLVLIWatchLayout { + @Link layoutController: PLVWatchLayoutController + @State bulletinSrc: string | undefined = '' + @State liveHomeLayoutController: PLVLiveHomeLayoutController = new PLVLiveHomeLayoutController() + @State playbackHomeLayoutController: PLVPlaybackHomeLayoutController = new PLVPlaybackHomeLayoutController() + @State detailLayoutController: PLVDetailLayoutController = new PLVDetailLayoutController() + @LocalStorageLink('sdk') sdk?: PLVLiveSceneSDK = undefined + @LocalStorageLink('channelData') channelData?: PLVChannelData = undefined + + override aboutToAppear(): void { + this.initData() + this.onChatData() + this.loginSocket() + } + + override aboutToDisappear(): void { + this.sdk?.destroy() + } + + build() { + Stack() { + // player layout + Stack() { + PLVLIPlayerLayout() + } + .width(PLVCommonConstants.FULL_PERCENT) + .height(PLVCommonConstants.FULL_PERCENT) + .backgroundColor(Color.Gray) + + // tabs layout + Tabs({ index: 1 }) { + TabContent() { + PLVLIDetailLayout({ layoutController: this.detailLayoutController, bulletinSrc: this.bulletinSrc }) + } + + TabContent() { + if (PLVLoginType.LIVE == this.channelData?.loginType) { + PLVLILiveHomeLayout({ layoutController: this.liveHomeLayoutController, bulletinSrc: this.bulletinSrc}) + } else { + PLVLIPlaybackHomeLayout({ layoutController: this.playbackHomeLayoutController, bulletinSrc: this.bulletinSrc }) + } + } + + TabContent() { + } + } + .onChange((index) => { + this.detailLayoutController.isLayoutShow = index == 0 + }) + .barHeight(0) + .padding({ top: PLVDeviceUtils.getStatusBarHeight() }) + .width(PLVCommonConstants.FULL_PERCENT) + .height(PLVCommonConstants.FULL_PERCENT) + .hitTestBehavior(HitTestMode.Transparent) + .gesture(SwipeGesture()) + + // close widget + Stack({ alignContent: Alignment.TopEnd }) { + Image($r('app.media.plvli_close')) + .width(48) + .height(48) + .padding(8) + .margin({ right: 8 }) + .draggable(false) + .onClick(() => { + router.back() + }) + } + .padding({ top: PLVDeviceUtils.getStatusBarHeight() }) + .hitTestBehavior(HitTestMode.None) + .width(PLVCommonConstants.FULL_PERCENT) + .height(PLVCommonConstants.FULL_PERCENT) + } + .width(PLVCommonConstants.FULL_PERCENT) + .height(PLVCommonConstants.FULL_PERCENT) + } + + initData() { + this.layoutController.detailLayoutController = this.detailLayoutController + this.layoutController.liveHomeLayoutController = this.liveHomeLayoutController + this.layoutController.playbackHomeLayoutController = this.playbackHomeLayoutController + // 初始化sdk数据,如果当前模块为har类型,传getContext();如果为hsp类型,则需要传getContext().createModuleContext('模块名') + // 因sdk内部需要读取rawfile,因此这里需要传入模块的context + this.sdk?.initData(getContext() as common.UIAbilityContext) + } + + onChatData() { + this.sdk?.chatroomManager.onData(PLVSocketOnEvent.MESSAGE, (data: string, event: string) => { + switch (event) { + // 公告 + case PLVBulletinEvent.EVENT: + const bulletinEvent = PLVJSONUtils.json2Bean(PLVBulletinEvent, data) + this.bulletinSrc = PLVUtils.undefinedToValue(bulletinEvent?.content, (value) => { + this.bulletinSrc = value + }) + break; + // 移除公告 + case PLVRemoveBulletinEvent.EVENT: + this.bulletinSrc = undefined + break; + default: + break; + } + }, this) + this.sdk?.chatroomManager.eventNotify.on('restrict_max_viewer', () => { + PLVToastUtils.longShow($r('app.string.plvli_chat_restrict_max_viewer_hint')) + router.back() + }, this) + } + + loginSocket() { + this.sdk?.socketManager.onStatus((status: PLVSocketStatusSup) => { + switch (status.socketStatus) { + case PLVSocketStatus.LOGGING: + PLVToastUtils.shortShow($r('app.string.plvli_chat_toast_logging')) + break; + case PLVSocketStatus.LOGIN_SUCCESS: + PLVToastUtils.shortShow($r('app.string.plvli_chat_toast_login_success')) + break; + case PLVSocketStatus.RECONNECTING: + PLVToastUtils.shortShow($r('app.string.plvli_chat_toast_reconnecting')) + break; + case PLVSocketStatus.RECONNECT_SUCCESS: + PLVToastUtils.shortShow($r('app.string.plvli_chat_toast_reconnect_success')) + break; + case PLVSocketStatus.LOGIN_FAIL: + getContext().resourceManager.getStringValue($r('app.string.plvli_chat_toast_login_failed')) + .then((value) => { + PLVToastUtils.shortShow(`${value}: message=${status.error?.message}`) + }) + break; + case PLVSocketStatus.BE_KICKED_OUT: + PLVToastUtils.longShow($r('app.string.plvli_chat_toast_been_kicked')) + router.back() + break + case PLVSocketStatus.LOGIN_REFUSE: + this.showExitDialog($r('app.string.plvli_chat_toast_been_kicked')) + break + case PLVSocketStatus.LOGIN_ELSEWHERE: + PLVToastUtils.longShow($r('app.string.plvli_chat_toast_account_login_elsewhere')) + setTimeout(() => { + router.back() + }, 3000) + break + default: + break; + } + }, this) + this.sdk?.socketManager.login() + } + + showExitDialog(message: Resource) { + AlertDialog.show({ + title: $r('app.string.plvli_common_dialog_tip_warm'), + message: message, + autoCancel: false, + alignment: DialogAlignment.Center, + onWillDismiss: () => { + }, + confirm: { + value: $r('app.string.plvli_common_dialog_confirm'), + action: () => { + router.back() + } + } + }) + } +} + +export class PLVWatchLayoutController implements IPLVBackwardInterface { + detailLayoutController?: PLVDetailLayoutController + liveHomeLayoutController?: PLVLiveHomeLayoutController + playbackHomeLayoutController?: PLVPlaybackHomeLayoutController + accessBackward: PLVCallback = () => { + return this.detailLayoutController?.accessBackward() || this.liveHomeLayoutController?.accessBackward() || this.playbackHomeLayoutController?.accessBackward() || false + } + backward: PLVCallback = () => { + if (this.detailLayoutController?.accessBackward()) { + this.detailLayoutController.backward() + } else if (this.liveHomeLayoutController?.accessBackward()) { + this.liveHomeLayoutController.backward() + } else if (this.playbackHomeLayoutController?.accessBackward()) { + this.playbackHomeLayoutController.backward() + } + } +} \ No newline at end of file diff --git a/scenes_live/src/main/ets/components/chatroom/PLVLIChatInputEntryView.ets b/scenes_live/src/main/ets/components/chatroom/PLVLIChatInputEntryView.ets new file mode 100644 index 0000000..fee0705 --- /dev/null +++ b/scenes_live/src/main/ets/components/chatroom/PLVLIChatInputEntryView.ets @@ -0,0 +1,60 @@ +import { ChannelMenusBean, PLVCommonConstants } from '@polyvharmony/live-scenes-sdk' + +@Preview +@Component +export struct PLVLIChatInputEntryView { + @Link isQuizSelected: boolean + @Link isShowChatInputLayout: boolean + @Link quizMenu: ChannelMenusBean | undefined + @Link isCloseRoom: boolean + @Link isFocusModeOpen: boolean + + build() { + Row() { + Text() { + ImageSpan($r('app.media.plvli_chat_msg')) + .width(14) + .height(14) + .margin({ right: 6, left: 8 }) + .verticalAlign(ImageSpanAlignment.CENTER) + Span(this.inputEntryText()) + .fontSize(14) + .fontColor('#99ffffff') + .width(PLVCommonConstants.FULL_PERCENT) + } + .layoutWeight(1) + .textOverflow({ overflow: TextOverflow.Ellipsis }) + .maxLines(1) + + if (this.quizMenu) { + Image(this.isQuizSelected ? $r('app.media.plvli_chat_quiz_selected') : $r('app.media.plvli_chat_quiz_default')) + .width(26) + .height(26) + .padding(4) + .margin({ right: 4 }) + .draggable(false) + .onClick(() => { + this.isQuizSelected = !this.isQuizSelected + }) + } + } + .onClick(() => { + if ((!this.isCloseRoom && !this.isFocusModeOpen) || this.isQuizSelected) { + this.isShowChatInputLayout = true + } + }) + .backgroundColor('#73000000') + .alignItems(VerticalAlign.Center) + .justifyContent(FlexAlign.End) + .borderRadius(100) + .height(32) + .constraintSize({ minWidth: 150, maxWidth: 180 }) + } + + inputEntryText() { + return this.isQuizSelected ? $r('app.string.plvli_chat_input_tips_quiz') : + this.isCloseRoom ? $r('app.string.plvli_chat_input_tips_chatroom_close') : + this.isFocusModeOpen ? $r('app.string.plvli_chat_input_tips_focus') : + $r('app.string.plvli_chat_input_tips_chat') + } +} \ No newline at end of file diff --git a/scenes_live/src/main/ets/components/chatroom/PLVLIChatInputView.ets b/scenes_live/src/main/ets/components/chatroom/PLVLIChatInputView.ets new file mode 100644 index 0000000..622bafe --- /dev/null +++ b/scenes_live/src/main/ets/components/chatroom/PLVLIChatInputView.ets @@ -0,0 +1,217 @@ +import { + ChannelMenusBean, + PLVBaseIdEvent, + PLVChatQuoteDataBean, + PLVChatroomError, + PLVChatroomErrorCode, + PLVCommonConstants, + PLVDeviceUtils, + PLVLazyDataSource, + PLVLiveSceneSDK, + PLVLocalQuizEvent, + PLVLocalSpeakEvent, + PLVLogger, + PLVToastUtils +} from '@polyvharmony/live-scenes-sdk' + +const TAG = '[PLVLIChatInputView]' + +@Preview +@Component +export struct PLVLIChatInputView { + @LocalStorageLink('sdk') sdk?: PLVLiveSceneSDK = undefined + chatListScroller: ListScroller = new ListScroller() + @Link fullChatListData: PLVLazyDataSource + quizListScroller: ListScroller = new ListScroller() + @Link quizListData: PLVLazyDataSource + @Link @Watch('onInputStatusChanged') isQuizSelected: boolean + @Link isShowChatInputLayout: boolean + @Link @Watch('onInputStatusChanged') isCloseRoom: boolean + @Link @Watch('onInputStatusChanged') isFocusModeOpen: boolean + @Link quizMenu: ChannelMenusBean | undefined + @Link reply: PLVChatQuoteDataBean | undefined + @LocalStorageLink('chatInputText') @Watch('onChatInputTextChanged') chatInputText: string = '' + tempChatInputText: string = '' + @State offsetY: number = 6 + PLVDeviceUtils.getNavigationIndicatorHeight() + + build() { + Column() { + if (this.reply && !this.isQuizSelected) { + Row() { + Text(this.replyText()) + .fontSize(12) + .fontColor('#F0F1F5') + .wordBreak(WordBreak.BREAK_ALL) + .textOverflow({ overflow: TextOverflow.Ellipsis }) + .maxLines(1) + .constraintSize({ maxWidth: '85%' }) + .padding({ left: 16, right: 10 }) + Blank() + Image($r('app.media.plvli_chat_quote_message_close_icon')) + .width(32) + .height(32) + .padding(6) + .margin({ right: 4 }) + .draggable(false) + .onClick(() => { + this.reply = undefined + }) + } + .onTouch((event) => { + event.stopPropagation() + }) + .translate({ y: this.offsetY }) + .width(PLVCommonConstants.FULL_PERCENT) + .alignItems(VerticalAlign.Center) + .height(48) + .backgroundColor('#66000000') + .backdropBlur(8) + } + + Row() { + if (this.quizMenu) { + Image(this.isQuizSelected ? $r('app.media.plvli_chat_quiz_selected') : $r('app.media.plvli_chat_quiz_default')) + .width(36) + .height(36) + .padding(4) + .margin({ right: 4 }) + .draggable(false) + .onClick(() => { + this.isQuizSelected = !this.isQuizSelected + }) + } + TextInput({ placeholder: this.inputPlaceText(), text: $$this.chatInputText }) + .height(38) + .layoutWeight(1) + .enterKeyType(EnterKeyType.Send) + .onSubmit((key, event) => { + event.keepEditableState() + if (this.isQuizSelected) { + this.quiz() + } else { + this.speak() + } + }) + .onAppear(() => { + focusControl.requestFocus('chatTextInput') + }) + .fontSize(14) + .enabled((!this.isCloseRoom && !this.isFocusModeOpen) || this.isQuizSelected) + .padding({ left: 16, right: 16 }) + .placeholderColor('#33ffffff') + .fontColor('#ffffff') + .maxLength(200) + .maxLines(1) + .backgroundColor('#373635') + .borderRadius(18) + .id('chatTextInput') + Text($r('app.string.plvli_chat_send')) + .padding(8) + .margin({ left: 6 }) + .fontSize(14) + .fontColor(this.chatInputText ? '#FFA611' : '#66F0F1F5') + .enabled(this.chatInputText ? true : false) + .onClick(() => { + if (this.isQuizSelected) { + this.quiz() + } else { + this.speak() + } + }) + } + .onTouch((event) => { + event.stopPropagation() + }) + .translate({ y: this.offsetY }) + .width(PLVCommonConstants.FULL_PERCENT) + .height(68) + .alignItems(VerticalAlign.Center) + .padding({ left: 8, right: 8 }) + .backgroundColor('#262523') + } + .onTouch(() => { + this.isShowChatInputLayout = false + }) + .justifyContent(FlexAlign.End) + .width(PLVCommonConstants.FULL_PERCENT) + .height(PLVCommonConstants.FULL_PERCENT) + } + + private speak() { + if (this.chatInputText.trim().length == 0) { + PLVToastUtils.shortShow($r('app.string.plvli_chat_toast_send_text_empty')) + return + } + const handleSendSuccess = (event: PLVLocalSpeakEvent) => { + this.fullChatListData.pushData(event) + this.chatListScroller.scrollEdge(Edge.Bottom) + this.isShowChatInputLayout = false + this.chatInputText = '' + this.reply = undefined + } + this.sdk?.chatroomManager.speak(this.chatInputText, this.reply) + .then((speakEvent) => { + handleSendSuccess(speakEvent) + }) + .catch((err: PLVChatroomError) => { + PLVLogger.printError(TAG, `speak fail`, err as Error) + if (PLVChatroomErrorCode.USER_IS_BANNED == err.code) { + // 被禁言也认为发言成功,并添加到聊天列表中,但不会广播给其他用户 + handleSendSuccess(err.data as PLVLocalSpeakEvent) + } else { + PLVToastUtils.shortShow(`speak fail: ${err.message}`) + } + }) + } + + private quiz() { + if (this.chatInputText.trim().length == 0) { + PLVToastUtils.shortShow($r('app.string.plvli_chat_toast_send_text_empty')) + return + } + const handleSendSuccess = (event: PLVLocalQuizEvent) => { + this.quizListData.pushData(event) + this.quizListScroller.scrollEdge(Edge.Bottom) + this.isShowChatInputLayout = false + this.chatInputText = '' + } + this.sdk?.chatroomManager.quiz(this.chatInputText) + .then((event) => { + handleSendSuccess(event) + }) + .catch((err: PLVChatroomError) => { + PLVLogger.printError(TAG, `quiz fail`, err as Error) + PLVToastUtils.shortShow(`quiz fail: ${err.message}`) + }) + } + + replyText() { + let content = this.reply?.content + if (this.reply?.isChatImgEvent()) { + content = '[图片]' + } else if (this.reply?.isFileShareEvent()) { + content = this.reply?.fileData?.name + } + return `${this.reply?.nick}: ${content}` + } + + inputPlaceText() { + return this.isQuizSelected ? $r('app.string.plvli_chat_input_tips_quiz') : + this.isCloseRoom ? $r('app.string.plvli_chat_input_tips_chatroom_close') : + this.isFocusModeOpen ? $r('app.string.plvli_chat_input_tips_focus') : + $r('app.string.plvli_chat_input_tips_chat') + } + + onInputStatusChanged(propName: string) { + if ((this.isCloseRoom || this.isFocusModeOpen) && !this.isQuizSelected) { + this.tempChatInputText = this.chatInputText + } + this.chatInputText = ((!this.isCloseRoom && !this.isFocusModeOpen) || this.isQuizSelected) ? this.tempChatInputText : '' + } + + onChatInputTextChanged() { + if ((!this.isCloseRoom && !this.isFocusModeOpen) || this.isQuizSelected) { + this.tempChatInputText = this.chatInputText + } + } +} \ No newline at end of file diff --git a/scenes_live/src/main/ets/components/chatroom/PLVLIChatListItem.ets b/scenes_live/src/main/ets/components/chatroom/PLVLIChatListItem.ets new file mode 100644 index 0000000..025ee50 --- /dev/null +++ b/scenes_live/src/main/ets/components/chatroom/PLVLIChatListItem.ets @@ -0,0 +1,789 @@ +import { + IPLVCanOverLenEvent, + PLVBaseIdEvent, + PLVCallback, + PLVChannelData, + PLVChatImgEvent, + PLVChatPlaybackDataVO, + PLVChatQuoteDataBean, + PLVCommonConstants, + PLVEmotionEvent, + PLVHistoryChatImgEvent, + PLVHistoryFileShareEvent, + PLVHistoryRedPaperEvent, + PLVHistorySpeakEvent, + PLVImageBean, + PLVLiveSceneSDK, + PLVLocalQuizEvent, + PLVLocalQuizPromptEvent, + PLVLocalSpeakEvent, + PLVLogger, + PLVPPTShareFileDataBean, + PLVRedPaperEvent, + PLVRedPaperReceiveType, + PLVRewardEvent, + PLVSocketUserBean, + PLVSpeakEvent, + PLVTAnswerEvent, + PLVToastUtils, + PLVUserType, + PLVUtils, + PLVWebUtils, + RedPaperReceiveTypeEvent +} from '@polyvharmony/live-scenes-sdk' +import { PLVLIEventHub } from '../../common/PLVLIEventHub' +import PLVLIFaceManager from '../../common/PLVLIFaceManager' +import { PLVLIChatOverLengthMessageDialog } from './PLVLIChatOverLengthMessageDialog' + +const TAG = '[PLVLIChatListItem]' + +@Preview +@Component +export struct PLVLIChatListItem { + @ObjectLink itemData: PLVBaseIdEvent + + build() { + if (this.itemData instanceof PLVSpeakEvent) { // 在线发言/在线文件分享 + PLVChatSpeakView({ itemData: this.itemData }) + } else if (this.itemData instanceof PLVChatImgEvent) { // 在线图片 + PLVChatImgView({ itemData: this.itemData }) + } else if (this.itemData instanceof PLVLocalSpeakEvent) { // 本地发言 + PLVChatLocalSpeakView({ itemData: this.itemData }) + } else if (this.itemData instanceof PLVLocalQuizEvent) { // 本地提问 + PLVChatLocalQuizView({ itemData: this.itemData }) + } else if (this.itemData instanceof PLVTAnswerEvent) { // 在线回答/历史提问和回答 + PLVChatTAnswerView({ itemData: this.itemData }) + } else if (this.itemData instanceof PLVLocalQuizPromptEvent) { // 本地提问提示语 + PLVChatLocalQuizPromptView({ itemData: this.itemData }) + } else if (this.itemData instanceof PLVHistorySpeakEvent) { // 历史发言 + PLVChatHistorySpeakView({ itemData: this.itemData }) + } else if (this.itemData instanceof PLVHistoryChatImgEvent) { // 历史图片/历史个性表情 + PLVChatHistoryChatImgView({ itemData: this.itemData }) + } else if (this.itemData instanceof PLVRewardEvent) { // 在线打赏/历史打赏 + PLVChatRewardView({ itemData: this.itemData }) + } else if (this.itemData instanceof PLVEmotionEvent) { // 在线个性表情 + PLVChatEmotionView({ itemData: this.itemData }) + } else if (this.itemData instanceof PLVHistoryFileShareEvent) { // 历史文件分享 + PLVChatHistoryFileShareView({ itemData: this.itemData }) + } else if (this.itemData instanceof PLVRedPaperEvent + || this.itemData instanceof PLVHistoryRedPaperEvent) { // 在线口令红包/历史口令红包 + PLVChatRedPaperView({ itemData: this.itemData }) + } else if (this.itemData instanceof PLVChatPlaybackDataVO) { // 聊天回放消息 + PLVChatPlaybackView({ itemData: this.itemData }) + } + } +} + +@Component +export struct PLVChatSpeakView { + @LocalStorageLink('sdk') sdk?: PLVLiveSceneSDK = undefined + @ObjectLink itemData: PLVSpeakEvent + @State nick: string | Resource | undefined = undefined + @State actor: string | undefined = undefined + @State userType: string | undefined = undefined + @State fullMessage: string | undefined = undefined + moreDialogController?: CustomDialogController = new CustomDialogController({ + builder: PLVLIChatOverLengthMessageDialog({ + nick: this.nick, + actor: this.actor, + userType: this.userType, + fullMessage: this.fullMessage + }), + alignment: DialogAlignment.Bottom, + customStyle: true + }) + + aboutToAppear(): void { + this.nick = generateNickByUser(this.itemData.user) + this.actor = this.itemData.user?.getActor() + this.userType = this.itemData.user?.userType + } + + build() { + messageView( + this.itemData.isFileShareEvent() ? this.itemData.fileData?.name : this.itemData.values?.[0], + this.actor, + this.userType, + this.nick, + this.itemData.isFileShareEvent() ? toImageBeanForFileShare(this.itemData.fileData) : undefined, + this.itemData.quote, + this.sdk?.chatroomManager.quoteReplyEnabled ? this.itemData._replyQuoteBean.get() : undefined, + this.itemData.parsedData, + this.itemData.isFileShareEvent() ? this.itemData.fileData?.url : undefined, + this.itemData._isOverLengthFoldingMessage.get(), + overLengthCopyClick(this.itemData.values?.[0], this.itemData, this.sdk), + overLengthMoreClick(this.itemData.values?.[0], this.itemData, this.sdk, (fullMessage: string) => { + this.fullMessage = fullMessage + this.moreDialogController?.open() + }) + ) + } +} + +@Component +export struct PLVChatImgView { + @LocalStorageLink('sdk') sdk?: PLVLiveSceneSDK = undefined + @ObjectLink itemData: PLVChatImgEvent + + build() { + messageView( + undefined, + this.itemData.user?.getActor(), + this.itemData.user?.userType, + generateNickByUser(this.itemData.user), + PLVImageBean.toImageBeanForChatImg(this.itemData.values?.[0]), + undefined, + this.sdk?.chatroomManager.quoteReplyEnabled ? this.itemData._replyQuoteBean.get() : undefined + ) + } +} + +@Component +export struct PLVChatLocalSpeakView { + @LocalStorageLink('sdk') sdk?: PLVLiveSceneSDK = undefined + @LocalStorageLink('channelData') channelData?: PLVChannelData = undefined + @ObjectLink itemData: PLVLocalSpeakEvent + @State nick: string | Resource | undefined = undefined + @State actor: string | undefined = undefined + @State userType: string | undefined = undefined + @State fullMessage: string | undefined = undefined + moreDialogController?: CustomDialogController = new CustomDialogController({ + builder: PLVLIChatOverLengthMessageDialog({ + nick: this.nick, + actor: this.actor, + userType: this.userType, + fullMessage: this.fullMessage + }), + alignment: DialogAlignment.Bottom, + customStyle: true + }) + + aboutToAppear(): void { + this.nick = generateNickByChannelData(this.channelData) + this.actor = this.channelData?.viewerActor + this.userType = this.channelData?.viewerType + } + + build() { + messageView( + this.itemData.speakMessage, + this.actor, + this.userType, + this.nick, + undefined, + this.itemData.quote, + this.sdk?.chatroomManager.quoteReplyEnabled ? this.itemData._replyQuoteBean.get() : undefined, + this.itemData.parsedData, + undefined, + this.itemData._isOverLengthFoldingMessage.get(), + overLengthCopyClick(this.itemData.speakMessage, undefined, this.sdk), + overLengthMoreClick(this.itemData.speakMessage, undefined, this.sdk, (fullMessage: string) => { + this.fullMessage = fullMessage + this.moreDialogController?.open() + }) + ) + } +} + +@Component +export struct PLVChatLocalQuizView { + @LocalStorageLink('channelData') channelData?: PLVChannelData = undefined + @ObjectLink itemData: PLVLocalQuizEvent + + build() { + messageView( + this.itemData.quizMessage, + this.channelData?.viewerActor, + this.channelData?.viewerType, + generateNickByChannelData(this.channelData), + undefined, + undefined, + undefined, + this.itemData.parsedData + ) + } +} + +@Component +export struct PLVChatTAnswerView { + @LocalStorageLink('channelData') channelData?: PLVChannelData = undefined + @ObjectLink itemData: PLVTAnswerEvent + + build() { + messageView( + this.itemData.isImgType() ? undefined : this.itemData.content, + this.itemData.user?.getActor(), + this.itemData.user?.userType, + generateNick(this.itemData.user, this.channelData), + this.itemData.isImgType() ? this.itemData.image : undefined, + undefined, + undefined, + this.itemData.parsedData + ) + } +} + +@Component +export struct PLVChatLocalQuizPromptView { + @ObjectLink itemData: PLVLocalQuizPromptEvent + + build() { + promptView(this.itemData.prompt) + } +} + +@Component +export struct PLVChatHistorySpeakView { + @LocalStorageLink('sdk') sdk?: PLVLiveSceneSDK = undefined + @LocalStorageLink('channelData') channelData?: PLVChannelData = undefined + @ObjectLink itemData: PLVHistorySpeakEvent + @State nick: string | Resource | undefined = undefined + @State actor: string | undefined = undefined + @State userType: string | undefined = undefined + @State fullMessage: string | undefined = undefined + moreDialogController?: CustomDialogController = new CustomDialogController({ + builder: PLVLIChatOverLengthMessageDialog({ + nick: this.nick, + actor: this.actor, + userType: this.userType, + fullMessage: this.fullMessage + }), + alignment: DialogAlignment.Bottom, + customStyle: true + }) + + aboutToAppear(): void { + this.nick = generateNick(this.itemData.user, this.channelData) + this.actor = this.itemData.user?.getActor() + this.userType = this.itemData.user?.userType + } + + build() { + messageView( + this.itemData.content, + this.actor, + this.userType, + this.nick, + undefined, + this.itemData.quote, + this.sdk?.chatroomManager.quoteReplyEnabled ? this.itemData._replyQuoteBean.get() : undefined, + this.itemData.parsedData, + undefined, + this.itemData._isOverLengthFoldingMessage.get(), + overLengthCopyClick(this.itemData.content, this.itemData, this.sdk), + overLengthMoreClick(this.itemData.content, this.itemData, this.sdk, (fullMessage: string) => { + this.fullMessage = fullMessage + this.moreDialogController?.open() + }) + ) + } +} + +@Component +export struct PLVChatHistoryChatImgView { + @LocalStorageLink('sdk') sdk?: PLVLiveSceneSDK = undefined + @LocalStorageLink('channelData') channelData?: PLVChannelData = undefined + @ObjectLink itemData: PLVHistoryChatImgEvent + + build() { + messageView( + undefined, + this.itemData.user?.getActor(), + this.itemData.user?.userType, + generateNick(this.itemData.user, this.channelData), + PLVImageBean.toImageBeanForChatImg(this.itemData.content), + undefined, + this.sdk?.chatroomManager.quoteReplyEnabled ? this.itemData._replyQuoteBean.get() : undefined + ) + } +} + +@Component +export struct PLVChatRewardView { + @ObjectLink itemData: PLVRewardEvent + + build() { + rewardView(this.itemData) + } +} + +@Component +export struct PLVChatEmotionView { + @LocalStorageLink('sdk') sdk?: PLVLiveSceneSDK = undefined + @LocalStorageLink('channelData') channelData?: PLVChannelData = undefined + @ObjectLink itemData: PLVEmotionEvent + + build() { + messageView( + undefined, + this.itemData.user?.getActor(), + this.itemData.user?.userType, + generateNickByUser(this.itemData.user), + PLVImageBean.toImageBeanForEmotion(this.itemData, this.sdk?.chatroomManager.emotions), + undefined, + this.sdk?.chatroomManager.quoteReplyEnabled ? this.itemData._replyQuoteBean.get(this.sdk?.chatroomManager.emotions) : undefined + ) + } +} + +@Component +export struct PLVChatHistoryFileShareView { + @LocalStorageLink('sdk') sdk?: PLVLiveSceneSDK = undefined + @ObjectLink itemData: PLVHistoryFileShareEvent + + build() { + messageView( + this.itemData.fileData?.name, + this.itemData.user?.getActor(), + this.itemData.user?.userType, + generateNickByUser(this.itemData.user), + toImageBeanForFileShare(this.itemData.fileData), + undefined, + this.sdk?.chatroomManager.quoteReplyEnabled ? this.itemData._replyQuoteBean.get() : undefined, + undefined, + this.itemData.fileData?.url + ) + } +} + +@Component +export struct PLVChatRedPaperView { + @ObjectLink itemData: PLVRedPaperEvent + @LocalStorageLink('sdk') sdk?: PLVLiveSceneSDK = undefined + + aboutToAppear(): void { + this.sdk?.redpackManager.geLocalCachedReceiveStatus(this.itemData.redpackId) + .then((value) => { + this.itemData.receiveType = PLVRedPaperReceiveType.getValue(value as RedPaperReceiveTypeEvent) + this.sdk?.redpackManager.cacheRedPaper(this.itemData) + }) + } + + build() { + redPaperView( + this.itemData, + () => { + this.sdk?.interactManager?.receiveRedPaper(this.itemData) + } + ) + } +} + +@Component +export struct PLVChatPlaybackView { + @LocalStorageLink('sdk') sdk?: PLVLiveSceneSDK = undefined + @LocalStorageLink('channelData') channelData?: PLVChannelData = undefined + @Link itemData: PLVChatPlaybackDataVO + + build() { + messageView( + this.itemData.isImgMsgType() ? undefined : this.itemData.content, + this.itemData.actor, + this.itemData.userType, + generateNick(this.itemData.user, this.channelData), + this.itemData.isImgMsgType() ? PLVImageBean.toImageBeanForChatImg(this.itemData.chatImgContent) : undefined, + this.itemData.chatQuote, + undefined, + this.itemData.parsedData + ) + } +} + +/** + * 聊天消息View + * @param speakMsg 发言内容/提问内容/回答内容/文件分享的文件名 + * @param actor 用户头衔 + * @param userType 用户类型 + * @param nick 用户昵称 + * @param imgBean 图片/个性表情/文件分享的图片 + * @param quote 消息是否包含回复内容 + * @param reply 消息是否可以被回复的内容 + * @param parsedData 将speakMsg按表情文本解析后的数据 + * @param fileUrl 文件分享的url + * @param isOverLengthFoldingMessage 是否超长消息 + * @param overLengthCopyClick 超长消息复制点击回调 + * @param overLengthMoreClick 超长消息更多点击回调 + */ +@Builder +function messageView( + speakMsg?: string, + actor?: string, + userType?: string, + nick?: string | Resource, + imgBean?: PLVImageBean, + quote?: PLVChatQuoteDataBean, + reply?: PLVChatQuoteDataBean, + parsedData?: string[], + fileUrl?: string, + isOverLengthFoldingMessage?: boolean, + overLengthCopyClick?: PLVCallback, + overLengthMoreClick?: PLVCallback +) { + Column() { + ColumnSplit() { + Row() { + Text() { + if (actor && PLVSocketUserBean.isSpecialType(userType)) { + Span(` ${actor} `) + .fontColor('#ffffff') + .textBackgroundStyle({ color: getActorBgByUserType(userType), radius: 6 }) + .fontSize(10) + } + Span(nick) + .fontColor('#FFD16B') + .fontSize(12) + if (parsedData) { + ForEach(parsedData, (data: string) => { + if (typeof PLVLIFaceManager.getFace(data) === 'string') { + Span(PLVLIFaceManager.getFace(data)) + .fontColor('#ffffff') + .fontSize(12) + } else { + ImageSpan(PLVLIFaceManager.getFace(data)) + .width(18) + .height(18) + .verticalAlign(ImageSpanAlignment.CENTER) + } + }) + } else if (speakMsg) { + Span(speakMsg) + .fontColor('#ffffff') + .fontSize(12) + } + } + .maxLines(speakMsg && isOverLengthFoldingMessage ? 5 : Infinity) + .constraintSize({ maxWidth: imgBean ? 166 : Infinity }) + + imageView(imgBean, fileUrl ? 8 : 0) + } + .alignItems(VerticalAlign.Top) + .justifyContent(FlexAlign.Start) + + if (speakMsg && isOverLengthFoldingMessage) { + Row() { + Text($r('app.string.plvli_chat_copy')) + .height(PLVCommonConstants.FULL_PERCENT) + .textAlign(TextAlign.Center) + .fontColor('#CCFFFEFC') + .margin({ left: 8, right: 8 }) + .fontSize(14) + .layoutWeight(1) + .onClick(() => { + overLengthCopyClick?.() + }) + Divider() + .color('#4DD8D8D8') + .height(15) + .strokeWidth(1) + .vertical(true) + Text($r('app.string.plvli_chat_more')) + .height(PLVCommonConstants.FULL_PERCENT) + .textAlign(TextAlign.Center) + .fontColor('#CCFFFEFC') + .margin({ left: 8, right: 8 }) + .fontSize(14) + .layoutWeight(1) + .onClick(() => { + overLengthMoreClick?.() + }) + } + .height(28) + .alignItems(VerticalAlign.Center) + .justifyContent(FlexAlign.Start) + } + + if (quote) { + Row() { + Text() { + Span(quote.nick + ': ') + .fontColor('#CCCCCCCC') + .fontSize(12) + if (quote.isTextEvent()) { + if (quote.parsedData) { + ForEach(quote.parsedData, (data: string) => { + if (typeof PLVLIFaceManager.getFace(data) === 'string') { + Span(PLVLIFaceManager.getFace(data)) + .fontColor('#CCCCCCCC') + .fontSize(12) + } else { + ImageSpan(PLVLIFaceManager.getFace(data)) + .width(18) + .height(18) + .verticalAlign(ImageSpanAlignment.CENTER) + } + }) + } else { + Span(quote.content) + .fontColor('#CCCCCCCC') + .fontSize(12) + } + } else if (quote.isFileShareEvent()) { + Span(quote.fileData?.name) + .fontColor('#CCCCCCCC') + .fontSize(12) + } + } + .maxLines(2) + .textOverflow({ overflow: TextOverflow.Ellipsis }) + .constraintSize({ maxWidth: !quote.isTextEvent() ? 166 : Infinity }) + + if (quote.isChatImgEvent()) { + imageView(quote.image) + } else if (quote.isFileShareEvent()) { + imageView(toImageBeanForFileShare(quote.fileData), 8) + } + } + .alignItems(VerticalAlign.Top) + .justifyContent(FlexAlign.Start) + } + } + .hitTestBehavior(HitTestMode.None) + .divider({ startMargin: 4, endMargin: 4 }) + } + .padding({ + left: 8, + right: 8, + top: 4, + bottom: 4 + }) + .alignItems(HorizontalAlign.Start) + .justifyContent(FlexAlign.Start) + .constraintSize({ minHeight: 20 }) + .backgroundColor('#A8333333') + .borderRadius(6) + .bindContextMenu(((speakMsg && !isOverLengthFoldingMessage) || reply) ? menuView(speakMsg, reply, isOverLengthFoldingMessage) : undefined, ResponseType.LongPress, { + backgroundBlurStyle: BlurStyle.NONE, + backgroundColor: '#BF1B202D' + }) + .onClick(() => { + if (fileUrl) { + PLVWebUtils.openWebLink(fileUrl) + } + }) +} + +@Builder +function menuView(speakMsg?: string, reply?: PLVChatQuoteDataBean, isOverLengthFoldingMessage?: boolean) { + Column() { + ColumnSplit() { + if (speakMsg && !isOverLengthFoldingMessage) { + Button($r('app.string.plvli_chat_copy')) + .backgroundColor(Color.Transparent) + .fontColor('#F0F1F5') + .fontSize(12) + .onClick(() => { + PLVUtils.copyText(speakMsg).then(() => { + PLVToastUtils.shortShow($r('app.string.plvli_chat_copy_success')) + }) + }) + } + if (reply) { + Button($r('app.string.plvli_chat_answer')) + .backgroundColor(Color.Transparent) + .fontColor('#F0F1F5') + .fontSize(12) + .onClick(() => { + PLVLIEventHub.emit(`plvli_chat_reply`, reply) + }) + } + } + .divider({ startMargin: 2, endMargin: 2 }) + } + .alignItems(HorizontalAlign.Center) + .justifyContent(FlexAlign.Start) +} + +@Builder +function imageView(imgBean?: PLVImageBean, marginLeft?: number) { + if (imgBean) { + Image(imgBean.url) + .alt($r('app.media.plvli_img_site')) + .width(adjustChatImgWH(imgBean.width, imgBean.height, 64, 36)[0]) + .height(adjustChatImgWH(imgBean.width, imgBean.height, 64, 36)[1]) + .margin({ left: marginLeft ? marginLeft : 0 }) + .objectFit(ImageFit.Auto) + .autoResize(true) + .borderRadius(6) + .draggable(false) + .onError((err) => { + PLVLogger.printError(TAG, `chat image url=${imgBean.url} load error`, new Error(err.message)) + }) + } +} + +@Builder +function promptView(prompt?: string | Resource) { + Text(prompt) + .fontColor('#FFD16B') + .fontSize(12) + .constraintSize({ minHeight: 20 }) + .padding({ + left: 8, + right: 8, + top: 4, + bottom: 4 + }) + .backgroundColor('#A8333333') + .borderRadius(6) +} + +@Builder +function rewardView(rewardEvent: PLVRewardEvent) { + Text() { + Span(rewardEvent.content?.unick + ' ') + .fontSize(12) + .fontColor('#ffffff') + Span($r('app.string.plvli_reward_give', ' ')) + .fontSize(12) + .fontColor('#ffffff') + ImageSpan(rewardEvent.content?.getGimg()) + .width(20) + .height(20) + .verticalAlign(ImageSpanAlignment.CENTER) + if (rewardEvent.content?.goodNum && rewardEvent.content.goodNum > 1) { + Span(' x' + rewardEvent.content.goodNum) + .fontSize(12) + .fontColor('#ffffff') + } + } + .constraintSize({ minHeight: 20 }) + .padding({ + left: 8, + right: 8, + top: 4, + bottom: 4 + }) + .backgroundColor('#A8333333') + .borderRadius(6) +} + +@Builder +function redPaperView(redPaperEvent: PLVRedPaperEvent, getRedPaperClick?: PLVCallback) { + Text() { + ImageSpan($r('app.media.plvli_chatroom_red_pack_icon')) + .width(20) + .height(20) + .verticalAlign(ImageSpanAlignment.CENTER) + Span($r('app.string.plvli_red_paper_send_msg', redPaperEvent.user?.nick)) + .fontSize(12) + .fontColor('#FFFFFFFF') + Span(redPaperEvent.getTypeName()) + .fontSize(12) + .fontColor('#FFFFFFFF') + Span($r('app.string.plvli_red_paper_dot')) + .fontSize(12) + .fontColor('#FFFFFFFF') + Span($r('app.string.plv_red_paper_get')) + .fontSize(12) + .fontColor('#FF5459') + .onClick((event) => { + getRedPaperClick?.() + }) + } + .constraintSize({ minHeight: 20 }) + .padding({ + left: 8, + right: 8, + top: 4, + bottom: 4 + }) + .backgroundColor('#A8333333') + .borderRadius(6) +} + +function generateNick(user?: PLVSocketUserBean, channelData?: PLVChannelData) { + return channelData?.viewerId == user?.userId ? generateNickByChannelData(channelData) : generateNickByUser(user) +} + +function generateNickByUser(user?: PLVSocketUserBean) { + return (user?.getActor() && PLVSocketUserBean.isSpecialType(user?.userType) ? ' ' : '') + `${user?.nick}: ` +} + +function generateNickByChannelData(channelData?: PLVChannelData) { + return $r('app.string.plvli_chat_me', (channelData?.viewerActor && PLVSocketUserBean.isSpecialType(channelData?.viewerType) ? ' ' : '') + channelData?.viewerName, ': ') +} + +export function getActorBgByUserType(userType?: string) { + if (PLVUserType.USERTYPE_TEACHER == userType) { + return '#F09343' + } else if (PLVUserType.USERTYPE_ASSISTANT == userType) { + return '#598FE5' + } else if (PLVUserType.USERTYPE_GUEST == userType) { + return '#EB6165' + } else if (PLVUserType.USERTYPE_MANAGER == userType) { + return '#33BBC5' + } + return '' +} + +function adjustChatImgWH(widthVp: number, heightVp: number, maxVp: number, minVp: number) { + const percentage = widthVp / heightVp + if (percentage == 1) { // 方图 + if (widthVp < minVp) { + widthVp = heightVp = minVp + } else if (widthVp > maxVp) { + widthVp = heightVp = maxVp + } + } else if (percentage < 1) { // 竖图 + heightVp = maxVp + widthVp = Math.max(minVp, heightVp * percentage) + } else { // 横图 + widthVp = maxVp + heightVp = Math.max(minVp, widthVp / percentage) + } + return [widthVp, heightVp] +} + +function toImageBeanForFileShare(fileShareBean?: PLVPPTShareFileDataBean): PLVImageBean { + const imageBean = PLVImageBean.toImageBeanForFileShare(fileShareBean) + imageBean.width = 120 + imageBean.height = 144 + switch (fileShareBean?.suffix) { + case "ppt": + case "pptx": + imageBean.url = $r('app.media.plvli_chatroom_file_share_ppt_icon') + break + case "doc": + case "docx": + imageBean.url = $r('app.media.plvli_chatroom_file_share_doc_icon') + break + case "xls": + case "xlsx": + imageBean.url = $r('app.media.plvli_chatroom_file_share_xls_icon') + break + case "pdf": + imageBean.url = $r('app.media.plvli_chatroom_file_share_pdf_icon') + break + default: + break + } + return imageBean +} + +function overLengthCopyClick(message?: string, overLenEvent?: IPLVCanOverLenEvent, sdk?: PLVLiveSceneSDK) { + return () => { + if (overLenEvent?.overLen) { + overLenEvent._overLengthFullMessage.get((fullMessage) => { + PLVUtils.copyText(fullMessage).then(() => { + PLVToastUtils.shortShow($r('app.string.plvli_chat_copy_success')) + }) + }, sdk?.chatroomManager) + } else { + PLVUtils.copyText(message || '').then(() => { + PLVToastUtils.shortShow($r('app.string.plvli_chat_copy_success')) + }) + } + } +} + +function overLengthMoreClick(message?: string, overLenEvent?: IPLVCanOverLenEvent, sdk?: PLVLiveSceneSDK, fullMessageCallback?: PLVCallback) { + return () => { + if (overLenEvent?.overLen) { + overLenEvent._overLengthFullMessage.get((fullMessage) => { + fullMessageCallback?.(fullMessage) + }, sdk?.chatroomManager) + } else { + fullMessageCallback?.(message || '') + } + } +} \ No newline at end of file diff --git a/scenes_live/src/main/ets/components/chatroom/PLVLIChatListLayout.ets b/scenes_live/src/main/ets/components/chatroom/PLVLIChatListLayout.ets new file mode 100644 index 0000000..adf411c --- /dev/null +++ b/scenes_live/src/main/ets/components/chatroom/PLVLIChatListLayout.ets @@ -0,0 +1,473 @@ +import { + ChannelMenusBean, + PLVBaseIdEvent, + PLVBaseIdUserEvent, + PLVChannelData, + PLVChatImgEvent, + PLVCommonConstants, + PLVEmotionEvent, + PLVHistoryRedPaperEvent, + PLVJSONUtils, + PLVLazyDataSource, + PLVLiveSceneSDK, + PLVLocalQuizPromptEvent, + PLVRedPaperEvent, + PLVRedPaperForDelayEvent, + PLVRedPaperReceiveType, + PLVRedPaperResultEvent, + PLVRemoveContentEvent, + PLVRemoveHistoryEvent, + PLVRewardEvent, + PLVSimpleBuffer, + PLVSocketEvent, + PLVSocketOnEvent, + PLVSocketUserBean, + PLVSpeakEvent, + PLVTAnswerEvent, + PLVToastUtils, + RedPaperReceiveTypeEvent +} from '@polyvharmony/live-scenes-sdk' +import { PLVLIChatListItem } from './PLVLIChatListItem' + +const TAG = '[PLVLIChatListLayout]' + +@Preview +@Component +export struct PLVLIChatListLayout { + @LocalStorageLink('sdk') sdk?: PLVLiveSceneSDK = undefined + @LocalStorageLink('channelData') channelData?: PLVChannelData = undefined + @Link isQuizSelected: boolean + @Link @Watch('onFocusModeChanged') isFocusModeOpen: boolean + // 聊天 + chatListScroller: ListScroller = new ListScroller() + // 当前显示的数据列表 + @State chatListData: PLVLazyDataSource = new PLVLazyDataSource() + // 全部消息的数据列表 + @Link fullChatListData: PLVLazyDataSource + // 专注模式的数据列表(仅包括讲师类型、嘉宾类型、助教类型、管理员类型的信息) + @State focusModeChatListData: PLVLazyDataSource = new PLVLazyDataSource() + @State isChatListRefreshing: boolean = true + @State isChatListCanRefreshing: boolean = true + @State isShowChatNewMessageTips: boolean = false + getChatHistorySize: number = 10 + oldestChatHistoryTimestamp?: number + oldestChatHistoryTimestampCount?: number + socketMessageBuffer: PLVSimpleBuffer> = new PLVSimpleBuffer() + // 提问 + quizListScroller: ListScroller = new ListScroller() + @Link quizListData: PLVLazyDataSource + @Link quizMenu: ChannelMenusBean | undefined + @State isQuizListRefreshing: boolean = true + @State isQuizListCanRefreshing: boolean = true + @State isShowQuizNewMessageTips: boolean = false + getQuizHistoryPage: number = 1 + getQuizHistorySize: number = 10 + + aboutToAppear(): void { + this.initData() + this.onChatData() + } + + aboutToDisappear(): void { + this.socketMessageBuffer.release() + } + + build() { + Swiper() { + Stack({ alignContent: Alignment.BottomStart }) { + Refresh({ refreshing: $$this.isChatListRefreshing }) { + List({ space: 4, scroller: this.chatListScroller }) { + LazyForEach(this.chatListData, (item: PLVBaseIdEvent) => { + ListItem() { + PLVLIChatListItem({ itemData: item }) + } + }, (item: PLVBaseIdEvent) => item.getUniqueId()) + } + .onScrollIndex((start, end) => { + if (end == this.chatListData.totalCount() - 1) { + this.isShowChatNewMessageTips = false + } + }) + .scrollBar(BarState.Off) + .edgeEffect(EdgeEffect.Fade) + .cachedCount(5) + .width(PLVCommonConstants.FULL_PERCENT) + .height(PLVCommonConstants.FULL_PERCENT) + } + .onRefreshing(() => { + if (!this.isChatListCanRefreshing) { + this.isChatListRefreshing = false + return + } + this.getChatHistoryList() + }) + + if (this.isShowChatNewMessageTips) { + this.newMessageTips(() => { + this.isShowChatNewMessageTips = false + this.chatListScroller.scrollEdge(Edge.Bottom) + }) + } + } + .margin({ bottom: 20, left: 24 }) + .width(PLVCommonConstants.FULL_PERCENT) + .height(PLVCommonConstants.FULL_PERCENT) + + if (this.quizMenu) { + Stack({ alignContent: Alignment.BottomStart }) { + Column() { + Text($r('app.string.plvli_chat_quiz_channel')) + .height(28) + .fontSize(14) + .fontColor('#ffffff') + .padding({ left: 10, right: 10 }) + .backgroundColor('#a6333333') + .borderRadius(14) + .margin({ bottom: 6 }) + + Refresh({ refreshing: $$this.isQuizListRefreshing }) { + List({ space: 4, scroller: this.quizListScroller }) { + LazyForEach(this.quizListData, (item: PLVBaseIdEvent) => { + ListItem() { + PLVLIChatListItem({ itemData: item }) + } + }, (item: PLVBaseIdEvent) => item.getUniqueId()) + } + .onScrollIndex((start, end) => { + if (end == this.quizListData.totalCount() - 1) { + this.isShowQuizNewMessageTips = false + } + }) + .scrollBar(BarState.Off) + .edgeEffect(EdgeEffect.Fade) + .cachedCount(5) + .width(PLVCommonConstants.FULL_PERCENT) + .height(PLVCommonConstants.FULL_PERCENT) + } + .onRefreshing(() => { + if (!this.isQuizListCanRefreshing) { + this.isQuizListRefreshing = false + return + } + this.getQuizHistoryList() + }) + .height(0) + .layoutWeight(1) + } + .alignItems(HorizontalAlign.Start) + + if (this.isShowQuizNewMessageTips) { + this.newMessageTips(() => { + this.isShowQuizNewMessageTips = false + this.quizListScroller.scrollEdge(Edge.Bottom) + }) + } + } + .margin({ bottom: 20, left: 24 }) + .width(PLVCommonConstants.FULL_PERCENT) + .height(PLVCommonConstants.FULL_PERCENT) + } + } + .width(268) + .height(172) + .loop(false) + .autoPlay(false) + .nestedScroll(SwiperNestedScrollMode.SELF_FIRST) + .translate({ x: -8, y: 8 }) + .index(this.isQuizSelected ? 1 : 0) + .onChange((index) => { + this.isQuizSelected = index == 1 + }) + .indicator( + this.quizMenu ? Indicator.dot() + .left(0) + .bottom(0) + .itemWidth(38) + .itemHeight(3) + .selectedItemWidth(38) + .selectedItemHeight(3) + .color('#80ffffff') + .selectedColor(Color.White) : false + ) + } + + @Builder + newMessageTips(onClick?: () => void) { + Text($r("app.string.plvli_chat_view_new_msg")) + .backgroundColor('#ffffff') + .borderRadius(10) + .padding({ + left: 8, + right: 8, + top: 4, + bottom: 4 + }) + .fontColor('#FFA611') + .fontSize(14) + .onClick(onClick) + } + + initData() { + this.chatListData.bindSource(this.fullChatListData) + } + + onChatData() { + this.socketMessageBuffer.observe((dataArr) => { + let pushChatListDataArr: PLVBaseIdEvent[] = [] + dataArr.forEach((value) => { + const data = value.message! + const event = value.eventName! + + let pushChatListData: PLVBaseIdEvent | undefined = undefined + let pushQuizListData: PLVBaseIdEvent | undefined = undefined + switch (event) { + // 发言 + case PLVSpeakEvent.EVENT: { + const speakEvent = PLVJSONUtils.toFillData(PLVSpeakEvent, data) + if (speakEvent) { + // 过滤聊天室广播的自己的发言消息 + if (this.channelData?.viewerId != speakEvent.user?.userId) { + pushChatListData = speakEvent + } + } + break + } + // 图片 + case PLVChatImgEvent.EVENT: { + const chatImgEvent = PLVJSONUtils.toFillData(PLVChatImgEvent, data) + if (chatImgEvent) { + // 过滤聊天室广播的自己的图片消息 + if (this.channelData?.viewerId != chatImgEvent.user?.userId) { + pushChatListData = chatImgEvent + } + } + break + } + // 打赏 + case PLVRewardEvent.EVENT: { + const rewardEvent = PLVJSONUtils.toFillData(PLVRewardEvent, data) + if (rewardEvent) { + pushChatListData = rewardEvent + } + break + } + // 口令红包 + case PLVRedPaperEvent.EVENT: { + const redPaperEvent = PLVJSONUtils.toFillData(PLVRedPaperEvent, data) + if (redPaperEvent && redPaperEvent.isSupportType()) { + pushChatListData = redPaperEvent + } + break + } + case PLVRedPaperResultEvent.EVENT: { + const redPaperResult = PLVJSONUtils.json2Bean(PLVRedPaperResultEvent, data) + if (redPaperResult) { + this.sdk?.redpackManager.onRedPaperResultEvent(redPaperResult) + } + break + } + // 延迟红包 + case PLVRedPaperForDelayEvent.EVENT: { + const redPaperForDelayEvent = PLVJSONUtils.json2Bean(PLVRedPaperForDelayEvent, data) + if (redPaperForDelayEvent) { + this.sdk?.redpackManager.notifyPostValue(redPaperForDelayEvent) + } + break + } + // 回答 + case PLVTAnswerEvent.EVENT: { + const tAnswerEvent = PLVJSONUtils.toFillData(PLVTAnswerEvent, data) + if (tAnswerEvent) { + // 只取回答自己的消息 + if (this.channelData?.viewerId == tAnswerEvent.s_userId) { + pushQuizListData = tAnswerEvent + } + } + break + } + // 删除某条消息 + case PLVRemoveContentEvent.EVENT: { + const removeContentEvent = PLVJSONUtils.json2Bean(PLVRemoveContentEvent, data) + if (removeContentEvent?.id) { + this.deleteDataToChatList(removeContentEvent.id) + } + break + } + // 清空所有消息 + case PLVRemoveHistoryEvent.EVENT: { + this.clearDataToChatList() + break + } + default: + break; + } + if (pushChatListData) { + pushChatListDataArr.push(pushChatListData) + } + if (pushQuizListData) { + this.pushDataToQuizList(pushQuizListData) + } + }) + if (pushChatListDataArr.length > 0) { + this.pushDataToChatList(...pushChatListDataArr) + } + }) + this.sdk?.chatroomManager.onData(PLVSocketOnEvent.MESSAGE, (data: string, event: string) => { + // 缓冲500ms再更新一次数据,避免聊天信息刷得太频繁导致UI卡顿 + this.socketMessageBuffer.push({ message: data, eventName: event } as PLVSocketEvent) + }, this) + this.sdk?.chatroomManager.onData(PLVSocketOnEvent.EMOTION, (data: string) => { + // 个性表情 + const emotionEvent = PLVJSONUtils.toFillData(PLVEmotionEvent, data) + if (emotionEvent) { + this.pushDataToChatList(emotionEvent) + } + }, this) + } + + getQuizHistoryList() { + this.sdk?.chatroomManager.getQuizHistoryList(this.getQuizHistoryPage, this.getQuizHistorySize) + .then((value) => { + if (this.getQuizHistoryPage == 1 && value.list?.length == 0) { + // 没有提问历史记录时,添加一条提问提示语 + const quizPromptEvent = new PLVLocalQuizPromptEvent() + quizPromptEvent.prompt = this.quizMenu?.content || $r('app.string.plvli_chat_quiz_default_tips') + this.addDataToQuizList(quizPromptEvent) + } + if (value.list) { + value.list.forEach((data, index) => { + this.addDataToQuizList(data) + }) + if (this.getQuizHistoryPage == 1) { + this.quizListScroller.scrollEdge(Edge.Bottom) + } + this.getQuizHistoryPage++ + this.isQuizListRefreshing = false + if (value.list.length < this.getQuizHistorySize) { + this.isQuizListCanRefreshing = false + } + } + }) + .catch((err: Error) => { + this.isQuizListRefreshing = false + PLVToastUtils.shortShow($r('app.string.plvli_chat_toast_history_load_failed', `: ${err.message}`)) + }) + } + + getChatHistoryList() { + this.sdk?.chatroomManager.getChatHistoryList(this.getChatHistorySize, this.oldestChatHistoryTimestamp, this.oldestChatHistoryTimestampCount) + .then((values) => { + const oldChatHistoryTimestamp = this.oldestChatHistoryTimestamp + values.forEach((value, index) => { + this.sdk?.chatroomManager.parseChatHistoryData(value, (data) => { + const messageTimestamp = data['time'] as number + if (!this.oldestChatHistoryTimestamp || messageTimestamp < this.oldestChatHistoryTimestamp) { + this.oldestChatHistoryTimestamp = messageTimestamp + this.oldestChatHistoryTimestampCount = 1 + } else if (this.oldestChatHistoryTimestamp == messageTimestamp && this.oldestChatHistoryTimestampCount) { + this.oldestChatHistoryTimestampCount++ + } + const baseIdEvent = data['data'] as PLVBaseIdEvent + if (baseIdEvent) { + this.addDataToChatList(baseIdEvent) + } + if (baseIdEvent instanceof PLVHistoryRedPaperEvent) { + const historyRedPagerEvent = baseIdEvent as PLVHistoryRedPaperEvent + const type = this.sdk?.redpackManager.geLocalCachedReceiveStatus(historyRedPagerEvent.redpackId) + .then((value) => { + historyRedPagerEvent.receiveType = PLVRedPaperReceiveType.getValue(value as RedPaperReceiveTypeEvent) + }) + + this.sdk?.redpackManager.cacheRedPaper((baseIdEvent as PLVHistoryRedPaperEvent)) + } + }) + }) + if (!oldChatHistoryTimestamp) { + this.chatListScroller.scrollEdge(Edge.Bottom) + } + this.isChatListRefreshing = false + if (values.length < this.getChatHistorySize) { + this.isChatListCanRefreshing = false + } + }) + .catch((err: Error) => { + this.isChatListRefreshing = false + PLVToastUtils.shortShow($r('app.string.plvli_chat_toast_history_load_failed', `: ${err.message}`)) + }) + } + + clearDataToChatList() { + this.fullChatListData.clearData() + this.focusModeChatListData.clearData() + } + + deleteDataToChatList(id: string) { + this.fullChatListData.dataArray.some((value, index) => { + if (id === value.getUniqueId()) { + this.fullChatListData.deleteData(index) + return true + } + return false + }) + this.focusModeChatListData.dataArray.some((value, index) => { + if (id === value.getUniqueId()) { + this.focusModeChatListData.deleteData(index) + return true + } + return false + }) + } + + addDataToChatList(data: PLVBaseIdEvent) { + this.fullChatListData.addData(0, data) + if (data instanceof PLVBaseIdUserEvent) { + const isSpecialType = PLVSocketUserBean.isSpecialType((data as PLVBaseIdUserEvent).user?.userType) + if (isSpecialType) { + this.focusModeChatListData.addData(0, data) + } + } + } + + pushDataToChatList(...data: PLVBaseIdEvent[]) { + this.fullChatListData.pushData(...data) + const specialTypeData: PLVBaseIdEvent[] = [] + data.forEach((value) => { + if (value instanceof PLVBaseIdUserEvent) { + const isSpecialType = PLVSocketUserBean.isSpecialType((value as PLVBaseIdUserEvent).user?.userType) + if (isSpecialType) { + specialTypeData.push(value) + } + } + }) + this.focusModeChatListData.pushData(...specialTypeData) + if (this.chatListScroller.isAtEnd()) { + this.chatListScroller.scrollEdge(Edge.Bottom) + } else { + this.isShowChatNewMessageTips = true + } + } + + addDataToQuizList(data: PLVBaseIdEvent) { + this.quizListData.addData(0, data) + } + + pushDataToQuizList(data: PLVBaseIdEvent) { + this.quizListData.pushData(data) + if (this.quizListScroller.isAtEnd()) { + this.quizListScroller.scrollEdge(Edge.Bottom) + } else { + this.isShowQuizNewMessageTips = true + } + } + + onFocusModeChanged() { + this.chatListData.unbindSource() + if (this.isFocusModeOpen) { + this.chatListData.bindSource(this.focusModeChatListData) + this.focusModeChatListData.reloadData() + } else { + this.chatListData.bindSource(this.fullChatListData) + this.fullChatListData.reloadData() + } + } +} \ No newline at end of file diff --git a/scenes_live/src/main/ets/components/chatroom/PLVLIChatOverLengthMessageDialog.ets b/scenes_live/src/main/ets/components/chatroom/PLVLIChatOverLengthMessageDialog.ets new file mode 100644 index 0000000..9942c63 --- /dev/null +++ b/scenes_live/src/main/ets/components/chatroom/PLVLIChatOverLengthMessageDialog.ets @@ -0,0 +1,85 @@ +import { PLVCommonConstants, PLVDeviceUtils, PLVSocketUserBean, PLVTextUtils, PLVToastUtils, PLVUtils } from '@polyvharmony/live-scenes-sdk' +import PLVLIFaceManager from '../../common/PLVLIFaceManager' +import { getActorBgByUserType } from './PLVLIChatListItem' + +@Preview +@CustomDialog +export struct PLVLIChatOverLengthMessageDialog { + controller?: CustomDialogController + scroller: Scroller = new Scroller() + @Link nick: string | Resource | undefined + @Link actor: string | undefined + @Link userType: string | undefined + @Link fullMessage: string + + build() { + Stack() { + Column() { + Text($r('app.string.plvli_chat_full_text')) + .width(PLVCommonConstants.FULL_PERCENT) + .textAlign(TextAlign.Start) + .fontSize(18) + .fontColor('#F0F1F5') + Scroll(this.scroller) { + Text() { + if (this.actor && PLVSocketUserBean.isSpecialType(this.userType)) { + Span(` ${this.actor} `) + .fontColor('#ffffff') + .textBackgroundStyle({ color: getActorBgByUserType(this.userType), radius: 6 }) + .fontSize(12) + } + Span(this.nick) + .fontColor('#FFD16B') + .fontSize(14) + ForEach(PLVTextUtils.parseString(this.fullMessage), (data: string) => { + if (typeof PLVLIFaceManager.getFace(data) === 'string') { + Span(PLVLIFaceManager.getFace(data)) + .fontColor('#ffffff') + .fontSize(14) + } else { + ImageSpan(PLVLIFaceManager.getFace(data)) + .width(21) + .height(21) + .verticalAlign(ImageSpanAlignment.CENTER) + } + }) + } + } + .align(Alignment.TopStart) + .scrollBar(BarState.Off) + .margin({ top: 24, bottom: 24 }) + .height(0) + .layoutWeight(1) + + Button($r('app.string.plvli_chat_copy')) + .width(88) + .height(28) + .fontSize(12) + .fontColor('#FFFFFF') + .onClick(() => { + PLVUtils.copyText(this.fullMessage).then(() => { + PLVToastUtils.shortShow($r('app.string.plvli_chat_copy_success')) + }) + }) + } + .padding({ + left: 24, + right: 24, + top: 24, + bottom: PLVDeviceUtils.getNavigationIndicatorHeight() + 24 + }) + .width(PLVCommonConstants.FULL_PERCENT) + .height(PLVCommonConstants.FULL_PERCENT) + } + .borderRadius({ + topLeft: 12, + topRight: 12, + bottomLeft: 0, + bottomRight: 0 + }) + .width(PLVCommonConstants.FULL_PERCENT) + .height('65%') + .backgroundColor('#464646') + .backdropBlur(8) + } +} \ No newline at end of file diff --git a/scenes_live/src/main/ets/components/chatroom/PLVLIChatPlaybackLayout.ets b/scenes_live/src/main/ets/components/chatroom/PLVLIChatPlaybackLayout.ets new file mode 100644 index 0000000..12b818a --- /dev/null +++ b/scenes_live/src/main/ets/components/chatroom/PLVLIChatPlaybackLayout.ets @@ -0,0 +1,141 @@ +import { IPLVIdEvent, PLVChannelData, PLVChatPlaybackDataVO, PLVCommonConstants, PLVLazyDataSource, PLVLiveSceneSDK, PLVLogger } from '@polyvharmony/live-scenes-sdk' +import { MutableObserver, PLVMediaPlayerState } from '@polyvharmony/media-player-sdk' +import { PLVLIChatListItem } from './PLVLIChatListItem' + +const TAG = '[PLVLIChatPlaybackLayout]' + +@Preview +@Component +export struct PLVLIChatPlaybackLayout { + @LocalStorageLink('sdk') sdk?: PLVLiveSceneSDK = undefined + @LocalStorageLink('channelData') channelData?: PLVChannelData = undefined + @State isChatPlaybackEnabled: boolean = true + @State chatPlaybackTipsVisible: boolean = true + // 聊天 + chatListScroller: ListScroller = new ListScroller() + // 当前显示的数据列表 + @State chatListData: PLVLazyDataSource = new PLVLazyDataSource() + @State isShowChatNewMessageTips: boolean = false + private observers: MutableObserver[] = [] + + aboutToAppear(): void { + this.initData() + this.onPlayerData() + this.onChatPlaybackData() + } + + aboutToDisappear(): void { + MutableObserver.disposeAll(this.observers) + this.observers = [] + } + + build() { + Column() { + Text($r('app.string.plvli_chat_playback_tips')) + .fontSize(12) + .backgroundColor('#E6FFFFFF') + .borderRadius(4) + .padding(8) + .textAlign(TextAlign.Center) + .margin({ bottom: 12 }) + .fontColor('#FF333333') + .constraintSize({ minWidth: 258 }) + .visibility(this.chatPlaybackTipsVisible ? Visibility.Visible : Visibility.Hidden) + .onAppear(() => { + setTimeout(() => { + this.chatPlaybackTipsVisible = false + }, 5000) + }) + Stack({ alignContent: Alignment.BottomStart }) { + List({ space: 4, scroller: this.chatListScroller }) { + LazyForEach(this.chatListData, (item: IPLVIdEvent) => { + ListItem() { + PLVLIChatListItem({ itemData: item }) + } + }, (item: IPLVIdEvent) => item.getUniqueId()) + } + .onScrollIndex((start, end) => { + if (end == this.chatListData.totalCount() - 1) { + this.isShowChatNewMessageTips = false + } + }) + .scrollBar(BarState.Off) + .edgeEffect(EdgeEffect.Fade) + .cachedCount(5) + .width(PLVCommonConstants.FULL_PERCENT) + .height(PLVCommonConstants.FULL_PERCENT) + + if (this.isShowChatNewMessageTips) { + this.newMessageTips(() => { + this.isShowChatNewMessageTips = false + this.chatListScroller.scrollEdge(Edge.Bottom) + }) + } + } + .margin({ left: 16 }) + .width(244) + .height(152) + } + .visibility(this.isChatPlaybackEnabled ? Visibility.Visible : Visibility.None) + } + + @Builder + newMessageTips(onClick?: () => void) { + Text($r("app.string.plvli_chat_view_new_msg")) + .backgroundColor('#ffffff') + .borderRadius(10) + .padding({ + left: 8, + right: 8, + top: 4, + bottom: 4 + }) + .fontColor('#FFA611') + .fontSize(14) + .onClick(onClick) + } + + initData() { + this.isChatPlaybackEnabled = this.channelData?.liveDetail?.isChatPlaybackEnabled() ?? false + } + + onPlayerData() { + this.sdk?.playerManager.mainMediaPlayer.getStateListenerRegistry() + .playerState + .observe((value) => { + if (value === PLVMediaPlayerState.STATE_PREPARED) { + const playbackVideoData = this.sdk?.playerManager.mainMediaPlayer.getBusinessListenerRegistry().playbackVideoData.value + const sessionId = playbackVideoData?.channelSessionId ?? '' + const fileId = playbackVideoData?.fileId ?? '' + this.sdk?.chatPlaybackManager.start(sessionId, fileId) + } + PLVLogger.info(TAG, `onPlayerData, playerState=${value}`) + }) + .pushTo(this.observers) + } + + onChatPlaybackData() { + this.sdk?.chatPlaybackManager.setupPlayTimeCallback(() => { + return this.sdk?.playerManager.mainMediaPlayer.getCurrentPosition() ?? 0 + }) + this.sdk?.chatPlaybackManager.eventNotify.on('insert_data', (...dataList: PLVChatPlaybackDataVO[]) => { + this.pushDataToChatList(...dataList) + }, this) + this.sdk?.chatPlaybackManager.eventNotify.on('clear_data', () => { + this.clearDataToChatList() + }, this) + } + + pushDataToChatList(...data: IPLVIdEvent[]) { + this.chatListData.pushData(...data) + if (this.chatListScroller.isAtEnd()) { + this.chatListScroller.scrollEdge(Edge.Bottom) + } else { + this.isShowChatNewMessageTips = true + } + } + + clearDataToChatList() { + this.chatListData.clearData() + } +} \ No newline at end of file diff --git a/scenes_live/src/main/ets/components/chatroom/PLVLIGreetingView.ets b/scenes_live/src/main/ets/components/chatroom/PLVLIGreetingView.ets new file mode 100644 index 0000000..e095be8 --- /dev/null +++ b/scenes_live/src/main/ets/components/chatroom/PLVLIGreetingView.ets @@ -0,0 +1,93 @@ +import { PLVCommonConstants, PLVJSONUtils, PLVLiveSceneSDK, PLVLoginEvent, PLVSocketOnEvent } from '@polyvharmony/live-scenes-sdk' + +const TAG = '[PLVLIGreetingView]' + +@Preview +@Component +export struct PLVLIGreetingView { + @LocalStorageLink('sdk') sdk?: PLVLiveSceneSDK = undefined + @State welcomeTips?: string | Resource = undefined + @State layoutWidthTranslateX: number = 0 + appearTimerId?: number + loginListSize: number = 0 + loginNickList: string[] = [] + + aboutToAppear(): void { + this.onChatData() + } + + build() { + if (this.welcomeTips) { + Text(this.welcomeTips) + .translate({ x: 268 * this.layoutWidthTranslateX - 268 }) + .width(268) + .height(22) + .onAppear(() => { + animateTo({ duration: 500, curve: Curve.Linear }, () => { + this.layoutWidthTranslateX = 1 + }) + this.appearTimerId = setTimeout(() => { + animateTo({ + duration: 250, curve: Curve.Linear, onFinish: () => { + this.welcomeTips = undefined + } + }, () => { + this.layoutWidthTranslateX = 0 + }) + }, 2500) + }) + .onDisAppear(() => { + this.layoutWidthTranslateX = 0 + clearTimeout(this.appearTimerId) + setTimeout(() => { + this.buildNextWelcomeTips() + }, PLVCommonConstants.DELAY_TIME_S) + }) + .textOverflow({ overflow: TextOverflow.Ellipsis }) + .maxLines(1) + .fontSize(14) + .padding({ left: 16, right: 3 }) + .fontColor('#ffffff') + .backgroundImage($r('app.media.plvli_greet_bg')) + .backgroundImageSize(ImageSize.Cover) + } + } + + onChatData() { + this.sdk?.chatroomManager.onData(PLVSocketOnEvent.MESSAGE, (data: string, event: string) => { + switch (event) { + // 登录 + case PLVLoginEvent.EVENT: + const loginEvent = PLVJSONUtils.toFillData(PLVLoginEvent, data) + if (loginEvent) { + this.buildWelcomeTips(loginEvent) + } + break; + default: + break; + } + }, this) + } + + buildWelcomeTips(loginEvent: PLVLoginEvent) { + this.loginListSize++ + if (this.loginNickList.length < 100) { + this.loginNickList.push(loginEvent.user?.nick || '') + } + this.buildNextWelcomeTips() + } + + buildNextWelcomeTips() { + if (this.welcomeTips === undefined) { + if (this.loginListSize >= 10) { + this.loginNickList.length = 2 + this.welcomeTips = $r('app.string.plvli_chat_welcome_join_multi', this.loginNickList.join('、'), this.loginListSize + '') + this.loginNickList.length = 0 + this.loginListSize = 0 + } else if (this.loginNickList.length >= 1) { + this.welcomeTips = $r('app.string.plvli_chat_welcome_join', this.loginNickList.shift()) + this.loginListSize-- + } + } + } +} \ No newline at end of file diff --git a/scenes_live/src/main/ets/components/chatroom/PLVLILikeIconView.ets b/scenes_live/src/main/ets/components/chatroom/PLVLILikeIconView.ets new file mode 100644 index 0000000..f6d3994 --- /dev/null +++ b/scenes_live/src/main/ets/components/chatroom/PLVLILikeIconView.ets @@ -0,0 +1,136 @@ +import { curves } from '@kit.ArkUI' +import { util } from '@kit.ArkTS' +import { PLVChatroomManager, PLVLiveSceneSDK, PLVTextUtils, PLVUtils } from '@polyvharmony/live-scenes-sdk' + +const TAG = '[PLVLILikeIconView]' + +@Preview +@Component +export struct PLVLILikeIconView { + @LocalStorageLink('sdk') sdk?: PLVLiveSceneSDK = undefined + @State chatroomManager: PLVChatroomManager | undefined = this.sdk?.chatroomManager + @State iconScale: number = 1 + @State likeIconAnimationParams: LikeIconAnimationParam[] = [] + + aboutToAppear(): void { + this.onChatData() + } + + build() { + Stack() { + Column() { + Image($r('app.media.plvli_chatroom_btn_like')) + .width(34) + .height(34) + .scale({ x: this.iconScale, y: this.iconScale }) + .draggable(false) + .onClick(() => { + this.iconScale = 1.2 + this.chatroomManager?.likes(1) + }) + .animation({ + duration: 60, + curve: Curve.Sharp, + iterations: 2, + playMode: PlayMode.Alternate, + onFinish: () => { + this.iconScale = 1 + } + }) + + Text(PLVTextUtils.toWString(this.chatroomManager?.likesCount)) + .textOverflow({ overflow: TextOverflow.Ellipsis }) + .maxLines(1) + .width(68) + .fontSize(12) + .margin({ top: 2 }) + .textAlign(TextAlign.Center) + .fontColor('#ffffff') + } + .alignItems(HorizontalAlign.Center) + .zIndex(99) + + ForEach(this.likeIconAnimationParams, (data: LikeIconAnimationParam, index) => { + LikeIconAnimationView({ data: data, likeIconAnimationParams: this.likeIconAnimationParams }) + .zIndex(-99) + }, (data: LikeIconAnimationParam, index) => data.id) + } + .width(34) + } + + onChatData() { + this.chatroomManager?.eventNotify.on('likes_count', async (arg: number) => { + const addedCount = arg - this.chatroomManager!.likesCount + this.chatroomManager!.likesCount = arg + // 每次最多添加5个点赞动画 + for (let i = 0; i < Math.min(5, addedCount); i++) { + this.likeIconAnimationParams.push(new LikeIconAnimationParam()) + if (i < (Math.min(5, addedCount) - 1)) { + await PLVUtils.delay(200) + } + } + }, this) + } +} + +@Preview +@Component +export struct LikeIconAnimationView { + @ObjectLink data: LikeIconAnimationParam + @Link likeIconAnimationParams: LikeIconAnimationParam[] + + build() { + Image(this.data.icon) + .width(this.data.width) + .height(this.data.height) + .opacity(this.data.opacity) + .rotate({ z: 1, angle: this.data.rotateZ }) + .scale({ x: this.data.scale, y: this.data.scale }) + .translate({ x: this.data.translateX, y: this.data.translateY }) + .draggable(false) + .onAppear(() => { + this.data.start() + }) + .animation({ + duration: 1200, + curve: curves.cubicBezierCurve(0.0, 0.0, 1.0, 1.0), + onFinish: () => { + this.likeIconAnimationParams.shift() + } + }) + } +} + +@Observed +export class LikeIconAnimationParam { + static readonly LIKE_ICON: Resource[] = [ + $r('app.media.plvli_chatroom_btn_like_1'), + $r('app.media.plvli_chatroom_btn_like_2'), + $r('app.media.plvli_chatroom_btn_like_3'), + $r('app.media.plvli_chatroom_btn_like_4'), + $r('app.media.plvli_chatroom_btn_like_5'), + $r('app.media.plvli_chatroom_btn_like_6'), + $r('app.media.plvli_chatroom_btn_like_7'), + $r('app.media.plvli_chatroom_btn_like_8'), + $r('app.media.plvli_chatroom_btn_like_9'), + $r('app.media.plvli_chatroom_btn_like_10'), + ] + id: string = util.generateRandomUUID(true) + icon: Resource = LikeIconAnimationParam.LIKE_ICON[Math.floor(Math.random() * LikeIconAnimationParam.LIKE_ICON.length)] + width: number = 34 + height: number = 34 + scale: number = 0.3 + translateX: number = 0 + translateY: number = 0 + rotateZ: number = 0 + opacity: number = 1 + + start() { + this.scale = 1.2 + this.translateX = -(40 + Math.floor(Math.random() * 21)) + this.translateY = -160 + this.rotateZ = Math.floor(Math.random() * 61) + this.opacity = 0.3 + return this + } +} \ No newline at end of file diff --git a/scenes_live/src/main/ets/components/chatroom/PLVLIRedpackView.ets b/scenes_live/src/main/ets/components/chatroom/PLVLIRedpackView.ets new file mode 100644 index 0000000..63b80be --- /dev/null +++ b/scenes_live/src/main/ets/components/chatroom/PLVLIRedpackView.ets @@ -0,0 +1,162 @@ +import { PLVCommonConstants, PLVDelayRedpackVO, PLVLiveSceneSDK, PLVTimeUtils } from '@polyvharmony/live-scenes-sdk' + +@Component +@Preview +export struct PLVLIRedpackView { + + // + @LocalStorageLink('sdk') sdk?: PLVLiveSceneSDK = undefined + + @State isShow: boolean = false + @State redpackTipsShow: boolean = false + @State colors: Array<[ResourceColor, number]> = [["#FF9D4D", 0.0], ["#F65F49", 0.5]] + @State tipsWidth: number = 0 + @State redpackWidth: number = 0 + @State redpackHeight: number = 0 + + @State redpackCdHeight: number = 0 + @State cdText: string | Resource = "" + + tipsCountDownTaskId?: number + cdCountDownTaskId?: number + // + + // + + aboutToAppear(): void { + this.observer() + } + + build() { + if (this.isShow) { + RelativeContainer() { + Column() { + Image($r('app.media.plvli_red_pack_password_icon')) + .onAreaChange((oldValue: Area, newValue: Area) => { + this.redpackWidth = newValue.width as number + this.redpackHeight = newValue.height as number + }) + .width(48) + .height(48) + + Column() { + Text(this.cdText) + .fontSize(12) + .fontColor("#FFFFFF") + } + .onAreaChange((oldValue: Area, newValue: Area) => { + this.redpackCdHeight = newValue.height as number + }) + .padding({ + left: 3, + right: 3, + top: 1, + bottom: 1 + }) + .borderRadius(8) + .justifyContent(FlexAlign.Center) + .backgroundColor("#CC202127") + } + .alignRules({ + top: { anchor: PLVCommonConstants.CONTAINER, align: VerticalAlign.Top }, + right: { anchor: PLVCommonConstants.CONTAINER, align: HorizontalAlign.End } + }) + .onClick((event) => { + this.showRedpackTips() + }) + .id("redpack_img") + + if (this.redpackTipsShow) { + Row() { + Text($r('app.string.plv_red_paper_red_pack_hint')) + .fontSize(13) + .fontColor("#FFFFFF") + } + .borderRadius(4) + .padding({ + left: 4, + right: 4, + top: 3, + bottom: 3 + }) + .linearGradient({ + direction: GradientDirection.Right, + colors: this.colors + }) + .alignRules({ + right: { anchor: "redpack_img", align: HorizontalAlign.Start }, + top: { anchor: "redpack_img", align: VerticalAlign.Center } + }) + .onAreaChange((oldValue: Area, newValue: Area) => { + this.tipsWidth = newValue.width as number + }) + .offset({ x: -10, y: -10 }) + .id("redpack_tips_tv") + + Polygon({ width: 10, height: 10 }) + .points([[0, 0], [0, 8], [4, 4]]) + .fill("#F65F49") + .alignRules({ + left: { anchor: "redpack_tips_tv", align: HorizontalAlign.End }, + top: { anchor: "redpack_tips_tv", align: VerticalAlign.Center } + }) + .offset({ y: -15, x: -10 }) + } + + } + .height(this.redpackHeight + this.redpackCdHeight) + .width(this.redpackWidth + this.tipsWidth) + + } + } + // + + // + observer() { + this.sdk?.redpackManager.eventDataNotify.on('redpack_data', (delayRedpack: PLVDelayRedpackVO) => { + if (delayRedpack.redpackSendTime === 0) { + return + } + // 倒数时间处理 + const cdTime = delayRedpack.redpackSendTime ?? 0 + if (cdTime <= Date.now()) { + this.stop() + return + } + + this.start(cdTime - Date.now()) + }) + } + + // + + // + + private showRedpackTips() { + clearTimeout(this.tipsCountDownTaskId) + this.redpackTipsShow = true + this.tipsCountDownTaskId = setTimeout(() => { + this.redpackTipsShow = false + }, 3000) + } + + private start(delay: number) { + this.stop() + this.cdCountDownTaskId = setInterval(() => { + delay -= 1000 + this.isShow = true + this.cdText = PLVTimeUtils.generateTime(delay, false) + if (delay <= 0) { + this.isShow = false + clearInterval(this.cdCountDownTaskId) + } + }, 1000) + } + + private stop() { + clearInterval(this.cdCountDownTaskId) + this.isShow = false + } + // + +} \ No newline at end of file diff --git a/scenes_live/src/main/ets/components/chatroom/PLVLIToTopView.ets b/scenes_live/src/main/ets/components/chatroom/PLVLIToTopView.ets new file mode 100644 index 0000000..043af3a --- /dev/null +++ b/scenes_live/src/main/ets/components/chatroom/PLVLIToTopView.ets @@ -0,0 +1,103 @@ +import { PLVChannelData, PLVCommonConstants, PLVLiveSceneSDK, PLVLogger, PLVLoginType, PLVStateData, PLVTextUtils, PLVToTopEvent } from '@polyvharmony/live-scenes-sdk' +import { MutableObserver, PLVLiveStatusEnum } from '@polyvharmony/media-player-sdk' +import PLVLIFaceManager from '../../common/PLVLIFaceManager' + +@Preview +@Component +export struct PLVLIToTopView { + @LocalStorageLink('sdk') sdk?: PLVLiveSceneSDK = undefined + @LocalStorageLink('channelData') channelData?: PLVChannelData = undefined + @State @Watch('onNoLiveChanged') isNoLive: boolean = true + @State toTopData?: PLVStateData = undefined + private observers: MutableObserver[] = [] + + aboutToAppear(): void { + if (this.channelData?.loginType == PLVLoginType.LIVE) { + this.onPlayerData() + this.onChatData() + } else { + this.isNoLive = false + this.onChatPlaybackData() + } + } + + aboutToDisappear(): void { + MutableObserver.disposeAll(this.observers) + this.observers = [] + } + + build() { + if (this.toTopData?.data && !this.isNoLive) { + Row() { + Text() { + Span(this.toTopData?.data.nick + ': ') + .fontColor('#FFD16B') + ForEach(PLVTextUtils.parseString(this.toTopData?.data.content), (data: string) => { + if (typeof PLVLIFaceManager.getFace(data) === 'string') { + Span(PLVLIFaceManager.getFace(data)) + } else { + ImageSpan(PLVLIFaceManager.getFace(data)) + .width(21) + .height(21) + .verticalAlign(ImageSpanAlignment.CENTER) + } + }) + } + .width(0) + .layoutWeight(1) + .padding({ right: 6 }) + .height(PLVCommonConstants.FULL_PERCENT) + .fontColor('#FFFFFFFF') + .fontSize(14) + .maxLines(2) + .textOverflow({ overflow: TextOverflow.Ellipsis }) + + Image($r('app.media.plvli_popup_close')) + .draggable(false) + .padding(10) + .width(32) + .height(32) + .onClick(() => { + this.toTopData = undefined + }) + } + .alignItems(VerticalAlign.Center) + .padding({ + left: 12, + right: 12 + }) + .width(320) + .height(60) + .borderRadius(8) + .backgroundColor('#A8333333') + .backdropBlur(8) + } + } + + onPlayerData() { + this.sdk?.playerManager.mainMediaPlayer.getBusinessListenerRegistry() + .liveStatus + .observe((liveStatus) => { + this.isNoLive = liveStatus === PLVLiveStatusEnum.NO_LIVE + }) + .pushTo(this.observers) + } + + onChatData() { + this.sdk?.chatroomManager.eventNotify.on('to_top', (data: PLVStateData) => { + this.toTopData = data + }, this) + } + + onChatPlaybackData() { + this.sdk?.chatPlaybackManager.eventNotify.on('to_top', (data: PLVStateData) => { + this.toTopData = data + }, this) + } + + onNoLiveChanged() { + if (this.isNoLive) { + this.toTopData = undefined + } + } +} \ No newline at end of file diff --git a/scenes_live/src/main/ets/components/interact/PLVLIInteractWebView.ets b/scenes_live/src/main/ets/components/interact/PLVLIInteractWebView.ets new file mode 100644 index 0000000..7035698 --- /dev/null +++ b/scenes_live/src/main/ets/components/interact/PLVLIInteractWebView.ets @@ -0,0 +1,136 @@ +import { + IPLVBackwardInterface, + PLVCallback, + PLVCommonConstants, + PLVInteractCallback, + PLVInteractManager, + PLVInteractWeb, + PLVLiveSceneSDK, + PLVRedpackManager, + PLVSimpleWeb, + PLVSocketWebController, + PLVToastUtils, + PLVWebController +} from '@polyvharmony/live-scenes-sdk' +import { pushToCardPushDetailPage } from './cardpush/PLVLICardPushDetailPage'; +import { pushToProductDetailPage } from '../product/PLVLIProductDetailPage'; + + +const TAG = "[PLVInteractWeb]" + +@Component +export struct PLVLIInteractWebView { + // + @LocalStorageLink('sdk') sdk?: PLVLiveSceneSDK = undefined + @State interactManager?: PLVInteractManager = this.sdk?.interactManager + @State interactCallback: PLVInteractCallback = new PLVInteractCallback() + redpackManager?: PLVRedpackManager = this.sdk?.redpackManager + @ObjectLink viewController: PLVInteractWebViewController + @State controller?: PLVSocketWebController = this.sdk?.webControllerManager.create() + @State innerController?:PLVWebController = new PLVWebController() + @State isShowInnerWeb: boolean = false + // 内部webview点击时拦截 + touchInnerWeb: boolean = false + // 内部webview事件处理逻辑回调 + // + + // + aboutToAppear(): void { + this.config() + } + + build() { + Column(){ + Stack({ alignContent: Alignment.Bottom}){ + PLVInteractWeb({ + interactManager: this.interactManager, + interactCallback: this.interactCallback, + controller: this.controller, + redpackManager: this.redpackManager + }) + .width(PLVCommonConstants.FULL_PERCENT) + .height(PLVCommonConstants.FULL_PERCENT) + .visibility(this.viewController.isShow ? Visibility.Visible : Visibility.Hidden) + + if (this.viewController.isShowInnerWeb) { + PLVSimpleWeb({ + controller: this.innerController, + src: "" + }) + .width(PLVCommonConstants.FULL_PERCENT) + .height('70%') + .align(Alignment.BottomEnd) + .onClick((event) => { + this.touchInnerWeb = true + }) + .hitTestBehavior(HitTestMode.Transparent) + } + } + .width(PLVCommonConstants.FULL_PERCENT) + .height(PLVCommonConstants.FULL_PERCENT) + .onClick((event) => { + if (this.touchInnerWeb) { + this.touchInnerWeb = false + return + } + if (this.viewController.isShowInnerWeb && !this.touchInnerWeb) { + this.viewController.isShowInnerWeb = false + } + }) + .visibility(this.viewController.isShow || this.viewController.isShowInnerWeb ? Visibility.Visible : Visibility.Hidden) + } + } + + // + + // + + config() { + this.interactCallback.processWebViewVisibility = (show) => { + this.viewController.isShow = show + } + + this.interactCallback.processOpenLinkEvent = (isInsideOpen, isOutsideOpen, url) => { + if (isInsideOpen) { + this.viewController.isShowInnerWeb = true + + this.innerController?.addOnControllerAttached(() => { + this.innerController?.loadUrlCatch(url) + }) + } + if (isOutsideOpen) { + pushToCardPushDetailPage(url) + } + } + + this.interactCallback.processClickProductEvent = (productLink) => { + if (!productLink) { + PLVToastUtils.longShow($r('app.string.plvli_commodity_toast_empty_link')) + return + } + pushToProductDetailPage(productLink) + } + } + + // +} + + +// +@Observed +export class PLVInteractWebViewController implements IPLVBackwardInterface { + isShow: boolean = false + isShowInnerWeb: boolean = false + accessBackward: PLVCallback = () => { + return this.isShow || this.isShowInnerWeb + } + backward: PLVCallback = () => { + if (this.isShowInnerWeb) { + this.isShowInnerWeb = false + } + if (this.isShow) { + this.isShow = false + } + } +} +// diff --git a/scenes_live/src/main/ets/components/interact/cardpush/PLVCardLookTimeLocalRepository.ets b/scenes_live/src/main/ets/components/interact/cardpush/PLVCardLookTimeLocalRepository.ets new file mode 100644 index 0000000..cdc9a65 --- /dev/null +++ b/scenes_live/src/main/ets/components/interact/cardpush/PLVCardLookTimeLocalRepository.ets @@ -0,0 +1,20 @@ +import { PLVBaseModule, PLVPreferencesUtils } from '@polyvharmony/live-scenes-sdk' + +const PREFERENCE_NAME = "plv_card_look_time_local_cache" + +export class PLVCardLookTimeLocalRepository { + // + static saveCache(channelId: string, id: string, lookTime: number) { + PLVPreferencesUtils.put(`${channelId}_${id}`, lookTime, PREFERENCE_NAME) + } + + static getCache(channelId: string, id: string): Promise { + return PLVPreferencesUtils.getNumber(`${channelId}_${id}`, PREFERENCE_NAME) + } + + static hasSaveCache(channelId: string, id: string) { + PLVPreferencesUtils.has(`${channelId}_${id}`, PREFERENCE_NAME) + } + // + +} \ No newline at end of file diff --git a/scenes_live/src/main/ets/components/interact/cardpush/PLVLICardPushDetailPage.ets b/scenes_live/src/main/ets/components/interact/cardpush/PLVLICardPushDetailPage.ets new file mode 100644 index 0000000..d934a1b --- /dev/null +++ b/scenes_live/src/main/ets/components/interact/cardpush/PLVLICardPushDetailPage.ets @@ -0,0 +1,44 @@ +import { router } from '@kit.ArkUI' +import { PLVDeviceUtils, PLVJSONObject, PLVSimpleWeb, PLVWebController } from '@polyvharmony/live-scenes-sdk' + +const ROUTE_NAME = 'PLVLICardPushDetailPage' + +export function pushToCardPushDetailPage(url: string) { + router.pushNamedRoute({ + name: ROUTE_NAME, + params: { + url: url + } + }) +} + +@Preview +@Component +@Entry({ + routeName: ROUTE_NAME +}) +struct PLVLICardPushDetailPage { + cardpushDetailUrl?: string = (router.getParams() as PLVJSONObject)['url'] as string + controller: PLVWebController = new PLVWebController() + + aboutToAppear(): void { + } + + onBackPress(): boolean | void { + if (this.controller.accessBackward()) { + this.controller.backward() + return true + } + } + + build() { + Stack() { + PLVSimpleWeb({ + controller: this.controller, + src: this.cardpushDetailUrl, + showLoading: true + }) + } + .margin({ top: PLVDeviceUtils.getStatusBarHeight(), bottom: PLVDeviceUtils.getNavigationIndicatorHeight() }) + } +} \ No newline at end of file diff --git a/scenes_live/src/main/ets/components/interact/cardpush/PLVLICardPushView.ets b/scenes_live/src/main/ets/components/interact/cardpush/PLVLICardPushView.ets new file mode 100644 index 0000000..b327ed6 --- /dev/null +++ b/scenes_live/src/main/ets/components/interact/cardpush/PLVLICardPushView.ets @@ -0,0 +1,234 @@ +import { + PLVCardPushVO, + PLVCommonConstants, + PLVLiveSceneSDK, + PLVLogger, + PLVNewsPushEvent, + PLVShowPushCardEvent, + PLVSocketPushCardEvent, + PLVTextUtils, + PLVTimeUtils +} from '@polyvharmony/live-scenes-sdk' +import { PLVCardLookTimeLocalRepository } from './PLVCardLookTimeLocalRepository' + +@Component +@Preview +export struct PLVLICardPushView { + // + + @LocalStorageLink('sdk') sdk?: PLVLiveSceneSDK = undefined + @State cardPushInfo: PLVCardPushVO = new PLVCardPushVO() + @State cardImage: Resource | string = "" + @State cardShow: boolean = false + @State cardCdShow: boolean = false + @State cardTipsShow: boolean = false + @State colors: Array<[ResourceColor, number]> = [["#FF9D4D", 0.0], ["#F65F49", 0.5]] + @State tipsText: string | Resource = "" + @State cdText: string = "" + + @State cardWidth: number = 0 + @State cardHeight: number = 0 + @State cdTextHeight: number = 0 + @State tipsWidth: number = 0 + + private canSendCardPushEvent = false + private countDownTaskId?: number + private showPushCardEvent?: PLVShowPushCardEvent + // + + // + + aboutToAppear(): void { + this.observer() + } + // + + // + build() { + RelativeContainer() { + Column() { + if (this.cardShow) { + Image(this.cardImage) + .width(34) + .height(34) + .onAreaChange((oldValue: Area, newValue: Area) => { + this.cardWidth = newValue.width as number + this.cardHeight = newValue.height as number + }) + .onClick((event) => { + if (this.showPushCardEvent != undefined && this.canSendCardPushEvent) { + this.sdk?.interactManager.showCardPush(this.showPushCardEvent) + } + if (this.cardCdShow) { + this.cardTipsShow = true + setTimeout(() => { + this.cardTipsShow = false + }, 3000) + } + }) + } + } + .alignRules({ + top: { anchor: PLVCommonConstants.CONTAINER, align: VerticalAlign.Top }, + right: { anchor: PLVCommonConstants.CONTAINER, align: HorizontalAlign.End } + }) + .width(34) + .height(34) + .id("cardpush_img") + + if (this.cardCdShow) { + Row() { + Text(this.cdText) + .fontColor("#ADADC0") + .fontSize(10) + } + .onAreaChange((oldValue: Area, newValue: Area) => { + this.cdTextHeight = newValue.height as number + }) + .alignRules({ + top: {anchor: "cardpush_img", align: VerticalAlign.Bottom}, + right: { anchor: PLVCommonConstants.CONTAINER, align: HorizontalAlign.End } + }) + .id("cardpush_cd_tv") + } + + if (this.cardTipsShow) { + Row() { + Text(this.tipsText) + .fontSize(13) + .fontColor("#FFFFFF") + } + .borderRadius(4) + .padding({ + left: 4, + right: 4, + top: 3, + bottom: 3 + }) + .linearGradient({ + direction: GradientDirection.Right, + colors: this.colors + }) + .alignRules({ + right: { anchor: "cardpush_img", align: HorizontalAlign.Start }, + top: { anchor: "cardpush_img", align: VerticalAlign.Center } + }) + .onAreaChange((oldValue: Area, newValue: Area) => { + this.tipsWidth = newValue.width as number + }) + .offset({ x: -10, y: -10 }) + .id("cardpush_tips_tv") + + Polygon({ width: 10, height: 10 }) + .points([[0, 0], [0, 8], [4, 4]]) + .fill("#F65F49") + .alignRules({ + left: { anchor: "cardpush_tips_tv", align: HorizontalAlign.End }, + top: { anchor: "cardpush_tips_tv", align: VerticalAlign.Center } + }) + .offset({ y: -15, x: -10 }) + } + } + .height(this.cardShow ? this.cardHeight + this.cdTextHeight : 0) + .width(this.cardShow ? this.tipsWidth + this.cardWidth : 0) + } + // + + // + observer() { + this.sdk?.pushcardManager.eventNotify.on('pushcard_data', (pushEvent: PLVNewsPushEvent) => { + if (pushEvent.EVENT === PLVSocketPushCardEvent.NEWS_PUSH_START) { + this.sdk?.pushcardManager.getCardPushInfo(pushEvent.id) + .then((value) => { + this.cardPushInfo = value + this.acceptCardPushVO(value, pushEvent) + }) + } + + if (pushEvent.EVENT === PLVSocketPushCardEvent.NEWS_PUSH_CANCEL) { + this.disposeCardPushAllTask() + this.cardShow = false + this.cardCdShow = false + this.cardTipsShow = false + } + }) + } + // + + // + + async acceptCardPushVO(cardPushVO: PLVCardPushVO, pushEvent: PLVNewsPushEvent) { + this.disposeCardPushAllTask() + + const id = pushEvent.id + const lookTime = pushEvent.lookTime ?? 0 + const alreadyLookTime = await PLVCardLookTimeLocalRepository.getCache(this.sdk?.channelData.loginChannelId!, id!) + const needLookTime = lookTime - alreadyLookTime + const isEntrance = pushEvent.isEntrance() + const isEntranceOrNeedLook = isEntrance || needLookTime > 0 + this.canSendCardPushEvent = needLookTime <= 0 + + this.cardShow = isEntranceOrNeedLook + this.cardCdShow = isEntranceOrNeedLook && needLookTime > 0 + this.cardTipsShow = isEntranceOrNeedLook && lookTime > 0 + + if (cardPushVO.isGiftboxType()) { + this.cardImage = $r('app.media.plvli_interact_giftbox_gain') + this.colors = [["#F6A125", 0.0], ["#FD8121", 0.0]] + } else if (cardPushVO.isRedpackType()) { + this.cardImage = $r('app.media.plvli_interact_redpack_gain') + this.colors = [["#FF9D4D", 0.0], ["#F65F49", 0.5]] + } else if (cardPushVO.isCustomType()) { + const imgUrl = PLVTextUtils.fixPic(cardPushVO.cardImage) + this.cardImage = imgUrl === "" ? $r('app.media.plvli_interact_redpack_gain') : imgUrl + } + + this.tipsText = cardPushVO.countdownMsg ?? $r("app.string.plvli_card_push_reward_hint") + if (needLookTime > 0) { + setTimeout(() => { + this.cardTipsShow = false + }, 3000) + } + + this.showPushCardEvent = new PLVShowPushCardEvent().setData(pushEvent) + + // 卡片观看计时 + if (needLookTime > 0) { + this.startCardLookCountdownTask(id!, needLookTime, alreadyLookTime, isEntrance) + } + + } + + startCardLookCountdownTask(id: string, needLookTime: number, alreadyLookTime: number, isEntrance: boolean) { + clearInterval(this.countDownTaskId) + this.countDownTaskId = setInterval(() => { + needLookTime -= 1000 + PLVCardLookTimeLocalRepository.saveCache(this.sdk?.channelData.loginChannelId!, id, alreadyLookTime += 1000) + this.cdText = PLVTimeUtils.generateTime(needLookTime, true) + if (needLookTime <= 0) { + this.canSendCardPushEvent = true + // 点击事件 + if (this.showPushCardEvent != undefined) { + this.sdk?.interactManager.showCardPush(this.showPushCardEvent) + } + + this.cardCdShow = false + this.cardTipsShow = false + if (!isEntrance) { + this.cardShow = false + } + clearInterval(this.countDownTaskId) + } + }, 1000) + } + + disposeCardPushAllTask() { + clearInterval(this.countDownTaskId) + this.sdk?.pushcardManager.disposable() + } + + // + + + +} diff --git a/scenes_live/src/main/ets/components/interact/entrance/PLVLIInteractEntranceView.ets b/scenes_live/src/main/ets/components/interact/entrance/PLVLIInteractEntranceView.ets new file mode 100644 index 0000000..2a96804 --- /dev/null +++ b/scenes_live/src/main/ets/components/interact/entrance/PLVLIInteractEntranceView.ets @@ -0,0 +1,58 @@ +import { PLVInteractDataBean, PLVLiveSceneSDK } from '@polyvharmony/live-scenes-sdk' + +@Preview +@Component +export struct PLVLIInteractEntranceView { + @LocalStorageLink('sdk') sdk?: PLVLiveSceneSDK = undefined + @State isShowQuestionEntrance?: boolean = false + @State questionText: string | Resource = $r("app.string.plvli_interact_question") + + aboutToAppear(): void { + this.onInteractData() + } + + build() { + if (this.isShowQuestionEntrance) { + Row() { + Row() { + Image($r('app.media.plvli_questionnaire')) + .width(16) + .height(16) + Text(this.questionText) + .fontColor("#ffffff") + .fontSize(14) + .margin({ + left: 4 + }) + } + .padding({ + left: 10, top: 5, right: 10, bottom: 5 + }) + } + .backgroundColor("#333439") + .borderRadius(16) + .onClick((event) => { + this.sdk?.interactManager.showQuestionnaire() + }) + } + } + + onInteractData() { + this.sdk?.interactManager.eventDataNotify.on('interact_data', (data: PLVInteractDataBean) => { + let dataArray = data.callAppEvent?.getDataArray() + if (!dataArray || dataArray.length == 0) { + this.isShowQuestionEntrance = false + } + dataArray?.forEach((value, index)=> { + if (value.isShowQuestionnaireEvent()) { + this.isShowQuestionEntrance = value.isShow ?? false + if (value.title) { + this.questionText = value.title + } + } + }) + }, this) + } + + +} \ No newline at end of file diff --git a/scenes_live/src/main/ets/components/interact/lottery/PLVLILotteryView.ets b/scenes_live/src/main/ets/components/interact/lottery/PLVLILotteryView.ets new file mode 100644 index 0000000..8dc7688 --- /dev/null +++ b/scenes_live/src/main/ets/components/interact/lottery/PLVLILotteryView.ets @@ -0,0 +1,262 @@ +import { FunctionBean, PLVCommonConstants, PLVLiveSceneSDK, PLVTimeUtils, PLVWebviewUpdateAppStatusVO } from '@polyvharmony/live-scenes-sdk' + +const EVENT_CLICK_LOTTERY_PENDANT = "CLICK_LOTTERY_PENDANT" +const EVENT_UPDATE_IAR_PENDANT = "UPDATE_IAR_PENDANT" +const STATUS_OVER = "over" +const STATUS_RUNNING = "running" +const STATUS_DELAYTIME = "delayTime" + +@Component +export struct PLVLILotteryView { + // + @LocalStorageLink('sdk') sdk?: PLVLiveSceneSDK = undefined + + @State colors: Array<[ResourceColor, number]> = [["#FF9D4D", 0.0], ["#F65F49", 0.5]] + @State tipsText: string | Resource = "" + @State cdText: string | Resource = "" + + @State lotteryShow: boolean = false + @State lotteryCdShow: boolean = false + @State lotteryTipsShow: boolean = false + @State lotteryImage: string | Resource = $r('app.media.plvli_interact_lottery') + + @State lotteryWidth: number = 0 + @State lotteryHeight: number = 0 + @State cdTextHeight: number = 0 + @State cdTextWidth: number = 0 + @State tipsWidth: number = 0 + + private lotteryVo: FunctionBean | undefined + private remainTime: number = -1 + private lotteryStatus: string = "" + private showTipsTaskId?: number + private lotteryLookCountdownTaskId?: number + // + + // + + aboutToAppear(): void { + this.observer() + } + + build() { + RelativeContainer() { + if (this.lotteryShow) { + Column() { + Image(this.lotteryImage) + .width(34) + .height(34) + .onAreaChange((oldValue: Area, newValue: Area) => { + this.lotteryWidth = newValue.width as number + this.lotteryHeight = newValue.height as number + }) + + if (this.lotteryCdShow) { + Text(this.cdText) + .fontSize(8) + .fontColor("#FFFFFF") + .onAreaChange((oldValue: Area, newValue: Area) => { + this.cdTextWidth = newValue.width as number + this.cdTextHeight = newValue.height as number + }) + } + } + .onClick((event) => { + this.onClickLottery() + }) + .alignItems(HorizontalAlign.Center) + .alignRules({ + top: { anchor: PLVCommonConstants.CONTAINER, align: VerticalAlign.Top }, + right: { anchor: PLVCommonConstants.CONTAINER, align: HorizontalAlign.End } + }) + .id('lottery_img') + } + + if (this.lotteryTipsShow) { + Row() { + Text(this.tipsText) + .fontSize(13) + .fontColor("#FFFFFF") + } + .borderRadius(4) + .padding({ + left: 4, + right: 4, + top: 3, + bottom: 3 + }) + .linearGradient({ + direction: GradientDirection.Right, + colors: this.colors + }) + .alignRules({ + right: { anchor: "lottery_img", align: HorizontalAlign.Start }, + top: { anchor: "lottery_img", align: VerticalAlign.Center } + }) + .onAreaChange((oldValue: Area, newValue: Area) => { + this.tipsWidth = newValue.width as number + }) + .offset({ x: -10, y: -10 }) + .id("lottery_tips_tv") + + Polygon({ width: 10, height: 10 }) + .points([[0, 0], [0, 8], [4, 4]]) + .fill("#F65F49") + .alignRules({ + left: { anchor: "lottery_tips_tv", align: HorizontalAlign.End }, + top: { anchor: "lottery_tips_tv", align: VerticalAlign.Center } + }) + .offset({ y: -15, x: -10 }) + } + + } + .height(this.lotteryShow ? this.lotteryHeight + this.cdTextHeight : 0) + .width(this.lotteryShow ? this.tipsWidth + this.lotteryWidth : 0) + } + // + + // + observer() { + this.sdk?.interactManager.interactStatusNotify.on("interact_status", (data: PLVWebviewUpdateAppStatusVO) => { + if (data.event === EVENT_UPDATE_IAR_PENDANT) { + if (!data.value || data.value.dataArray?.length == 0) { + this.hide() + } + data.value?.dataArray?.forEach((functionBean) => { + if (functionBean.event === EVENT_CLICK_LOTTERY_PENDANT) { + this.lotteryVo = functionBean + this.parseLotteryMessage(this.lotteryVo) + } + }) + } + }) + } + // + + + // + parseLotteryMessage(lotteryVo: FunctionBean | undefined) { + if (lotteryVo?.delayTime) { + this.remainTime = lotteryVo.delayTime != 0 ? lotteryVo?.delayTime : -1 + } else { + this.remainTime = -1 + } + this.lotteryStatus = lotteryVo?.status ?? "" + if (!lotteryVo?.isShow) { + this.hide() + return + } + //加载自定义的URL图片 + this.lotteryImage = lotteryVo.icon ?? $r('app.media.plvli_interact_lottery') + if (lotteryVo.status === STATUS_OVER) { + this.disposeLotteryTask() + this.disposeShowTipsTask() + this.lotteryCdShow = true + this.lotteryShow = true + this.lotteryTipsShow = false + return + } + + if (this.remainTime != -1) { + this.startLotteryLookCountDownTask(this.remainTime) + } else { + this.startLotteryNoCountDown() + } + this.show() + } + + show() { + this.lotteryShow = true + this.lotteryCdShow = true + } + + hide() { + this.lotteryShow = false + this.lotteryCdShow = false + this.lotteryTipsShow = false + } + + startLotteryLookCountDownTask(needLookTime: number) { + if (this.lotteryStatus !== STATUS_DELAYTIME) { + return + } + this.disposeLotteryTask() + this.lotteryLookCountdownTaskId = setInterval(() => { + needLookTime -= 1 + this.remainTime = needLookTime + + //设置倒数时间 + this.cdText = PLVTimeUtils.generateTime(this.remainTime * 1000, true) + + //设置tips文案 大于3s的显示 '抽奖暂未开始' 小于3s显示'抽奖即将开始' + if (this.remainTime > 3) { + this.tipsText = $r("app.string.plvli_lottery_no_start") + } + + if (this.remainTime <= 3 && this.remainTime > 0) { + this.tipsText = $r("app.string.plvli_lottery_will_start") + this.showTipsTask() + } + + if (needLookTime <= 0) { + this.cdText = $r("app.string.plvli_lottery_running") + this.lotteryTipsShow = false + clearInterval(this.lotteryLookCountdownTaskId) + } + + }, 1000) + } + + startLotteryNoCountDown() { + this.disposeLotteryTask() + this.disposeShowTipsTask() + switch (this.lotteryStatus) { + case STATUS_RUNNING: + this.lotteryShow = true + this.tipsText = $r("app.string.plvli_lottery_will_start") + this.cdText = $r("app.string.plvli_lottery_running") + break + case STATUS_OVER: + this.cdText = $r("app.string.plvli_lottery_over") + this.lotteryCdShow = true + break + default : + this.lotteryTipsShow = false + } + } + + showTipsTask() { + this.disposeShowTipsTask() + this.lotteryTipsShow = true + this.showTipsTaskId = setTimeout(() => { + this.lotteryTipsShow = false + }, 3000) + } + + disposeLotteryTask() { + clearInterval(this.lotteryLookCountdownTaskId) + } + + disposeShowTipsTask() { + clearTimeout(this.showTipsTaskId) + } + + onClickLottery() { + if (this.lotteryStatus === "") { + return + } + + if (this.lotteryStatus === STATUS_OVER || this.lotteryStatus === STATUS_RUNNING) { + //这里有两种抽奖情况 + // 一种是即时抽奖,即时抽奖的状态为running,时间为0 + //一种是定时抽奖 定时抽奖有 状态有 delayTime、running、over 时间可以为0也可以不为0 + this.sdk?.interactManager.showLottery() + } else { + this.showTipsTask() + } + } + + // + + +} \ No newline at end of file diff --git a/scenes_live/src/main/ets/components/liveroom/PLVLIBulletinView.ets b/scenes_live/src/main/ets/components/liveroom/PLVLIBulletinView.ets new file mode 100644 index 0000000..39ec36e --- /dev/null +++ b/scenes_live/src/main/ets/components/liveroom/PLVLIBulletinView.ets @@ -0,0 +1,61 @@ +import { PLVWebUtils } from '@polyvharmony/live-scenes-sdk' + +@Preview +@Component +export struct PLVLIBulletinView { + @Link @Watch('onBulletinSrc') bulletinSrc: string | undefined + @State propBulletinSrc: string | undefined = this.bulletinSrc + @State layoutHeightScaleY: number = 0 + appearTimerId?: number + + build() { + if (this.propBulletinSrc) { + Row() { + Text() { + ImageSpan($r('app.media.plvli_gonggao')) + .width(12) + .height(12) + .margin({ right: 6 }) + .verticalAlign(ImageSpanAlignment.CENTER) + Span($r('app.string.plvli_live_bulletin_tip')) + .fontSize(12) + .fontColor('#ffffff') + } + + Text(this.propBulletinSrc) + .fontSize(12) + .fontColor('#ffffff') + .constraintSize({ maxWidth: '75%' }) + .textOverflow({ overflow: TextOverflow.MARQUEE }) + } + .onAppear(() => { + animateTo({ duration: 200, curve: Curve.Linear }, () => { + this.layoutHeightScaleY = 1 + }) + this.appearTimerId = setTimeout(() => { + animateTo({ + duration: 200, curve: Curve.Linear, onFinish: () => { + this.propBulletinSrc = undefined + } + }, () => { + this.layoutHeightScaleY = 0 + }) + }, 2000 + (this.propBulletinSrc?.length || 0) * 80) + }) + .onDisAppear(() => { + this.layoutHeightScaleY = 0 + clearTimeout(this.appearTimerId) + }) + .padding({ left: 10, right: 10 }) + .backgroundColor('#B30181FF') + .alignItems(VerticalAlign.Center) + .height(24) + .scale({ y: this.layoutHeightScaleY }) + .borderRadius(12) + } + } + + onBulletinSrc() { + this.propBulletinSrc = PLVWebUtils.cleanHTML(this.bulletinSrc || '') + } +} \ No newline at end of file diff --git a/scenes_live/src/main/ets/components/liveroom/PLVLILanguageSwitchDialog.ets b/scenes_live/src/main/ets/components/liveroom/PLVLILanguageSwitchDialog.ets new file mode 100644 index 0000000..04634f7 --- /dev/null +++ b/scenes_live/src/main/ets/components/liveroom/PLVLILanguageSwitchDialog.ets @@ -0,0 +1,90 @@ +import { PLVCommonConstants, PLVDeviceUtils, PLVLiveSceneSDK } from '@polyvharmony/live-scenes-sdk' + +@Preview +@CustomDialog +export struct PLVLILanguageSwitchDialog { + @LocalStorageLink('sdk') sdk?: PLVLiveSceneSDK = undefined + controller?: CustomDialogController + + build() { + Stack() { + Column() { + Button($r('app.string.plvli_live_language_switch_zh'), { type: ButtonType.Normal }) + .padding({ top: 16, bottom: 16 }) + .backgroundColor(Color.Transparent) + .width(PLVCommonConstants.FULL_PERCENT) + .fontSize(16) + .fontColor('#000000') + .onClick(() => { + if (!this.sdk?.languageManager.isZH()) { + this.confirmSwitchLanguage(true) + return + } + this.controller?.close() + }) + Divider() + .strokeWidth(1) + .color('#f2f2f2') + Button($r('app.string.plvli_live_language_switch_en'), { type: ButtonType.Normal }) + .padding({ top: 16, bottom: 16 }) + .backgroundColor(Color.Transparent) + .width(PLVCommonConstants.FULL_PERCENT) + .fontSize(16) + .fontColor('#000000') + .onClick(() => { + if (!this.sdk?.languageManager.isEN()) { + this.confirmSwitchLanguage(false) + return + } + this.controller?.close() + }) + Divider() + .strokeWidth(8) + .color('#f2f2f2') + Button($r('app.string.plvli_common_dialog_cancel'), { type: ButtonType.Normal }) + .padding({ top: 16, bottom: 16 }) + .backgroundColor(Color.Transparent) + .width(PLVCommonConstants.FULL_PERCENT) + .fontSize(16) + .fontColor('#000000') + .onClick(() => { + this.controller?.close() + }) + } + .padding({ bottom: PLVDeviceUtils.getNavigationIndicatorHeight() - 6 }) + .width(PLVCommonConstants.FULL_PERCENT) + .justifyContent(FlexAlign.End) + } + .borderRadius({ + topLeft: 12, + topRight: 12, + bottomLeft: 0, + bottomRight: 0 + }) + .width(PLVCommonConstants.FULL_PERCENT) + .backgroundColor('#ffffff') + } + + confirmSwitchLanguage(changToZH: boolean) { + changToZH ? this.sdk?.languageManager.changeToZH() : this.sdk?.languageManager.changeToEN() + this.controller?.close() + // reserve temporarily + // AlertDialog.show({ + // message: $r('app.string.plvli_live_language_switch_hint'), + // autoCancel: true, + // alignment: DialogAlignment.Center, + // primaryButton: { + // value: $r('app.string.plvli_common_dialog_cancel'), + // action: () => { + // } + // }, + // secondaryButton: { + // value: $r('app.string.plvli_common_dialog_confirm'), + // action: () => { + // changToZH ? this.sdk?.languageManager.changeToZH() : this.sdk?.languageManager.changeToEN() + // this.controller?.close() + // } + // } + // }) + } +} \ No newline at end of file diff --git a/scenes_live/src/main/ets/components/liveroom/PLVLIMoreView.ets b/scenes_live/src/main/ets/components/liveroom/PLVLIMoreView.ets new file mode 100644 index 0000000..b1d7bb1 --- /dev/null +++ b/scenes_live/src/main/ets/components/liveroom/PLVLIMoreView.ets @@ -0,0 +1,120 @@ +import { PLVCommonConstants, PLVDeviceUtils, PLVFunctionSwitchBean } from '@polyvharmony/live-scenes-sdk' +import { PLVLILanguageSwitchDialog } from './PLVLILanguageSwitchDialog' + +@Preview +@Component +export struct PLVLIMoreView { + moreDialogController = new CustomDialogController({ + builder: PLVLIMoreDialog(), + alignment: DialogAlignment.Bottom, + customStyle: true + }) + + build() { + Image($r('app.media.plvli_more')) + .width(32) + .height(32) + .draggable(false) + .onClick(() => { + this.moreDialogController.open() + }) + } +} + +@Preview +@CustomDialog +export struct PLVLIMoreDialog { + // 语言切换 + static readonly MORE_FUNCTION_TYPE_LANGUAGE_SWITCH = 'MORE_FUNCTION_TYPE_LANGUAGE_SWITCH' + static readonly FUNCTION_SWITCH_LIST: PLVFunctionSwitchBean[] = [ + new PLVFunctionSwitchBean(PLVLIMoreDialog.MORE_FUNCTION_TYPE_LANGUAGE_SWITCH, $r('app.media.plvli_live_more_language_switch'), $r('app.string.plvli_live_language_switch'), true), + ] + functionSwitchList = PLVLIMoreDialog.FUNCTION_SWITCH_LIST + controller?: CustomDialogController + languageSwitchDialogController = new CustomDialogController({ + builder: PLVLILanguageSwitchDialog(), + alignment: DialogAlignment.Bottom, + customStyle: true + }) + + build() { + Stack() { + Column() { + Row() { + Blank() + Image($r('app.media.plvli_popup_close')) + .width(34) + .height(34) + .objectFit(ImageFit.ScaleDown) + .draggable(false) + .onClick(() => { + this.controller?.close() + }) + } + .width(PLVCommonConstants.FULL_PERCENT) + + Grid() { + ForEach(this.functionSwitchList, (data: PLVFunctionSwitchBean, index) => { + GridItem() { + Column() { + Image(data.imageResource ? data.imageResource : data.icon) + .width(32) + .height(32) + .draggable(false) + Text(data.name) + .margin({ top: 10 }) + .maxLines(2) + .textOverflow({ overflow: TextOverflow.Ellipsis }) + .fontSize(12) + .textAlign(TextAlign.Center) + .fontColor('#CDCDCD') + } + .onClick(() => { + this.handleGridItemClick(data) + this.controller?.close() + }) + } + .height(PLVCommonConstants.FULL_PERCENT) + }) + } + .rowsGap(4) + .columnsGap(4) + .columnsTemplate('1fr 1fr 1fr 1fr 1fr') + .height(0) + .layoutWeight(1) + } + .padding({ + left: 6, + right: 6, + top: 6, + bottom: PLVDeviceUtils.getNavigationIndicatorHeight() - 6 + }) + .width(PLVCommonConstants.FULL_PERCENT) + .height(PLVCommonConstants.FULL_PERCENT) + } + .borderRadius({ + topLeft: 12, + topRight: 12, + bottomLeft: 0, + bottomRight: 0 + }) + .width(PLVCommonConstants.FULL_PERCENT) + .height(130) + .backgroundColor('#cc000000') + .backdropBlur(8) + } + + handleGridItemClick(data: PLVFunctionSwitchBean) { + switch (data.type) { + case PLVLIMoreDialog.MORE_FUNCTION_TYPE_LANGUAGE_SWITCH: + this.handleLanguageClick() + break + default: + break + } + } + + handleLanguageClick() { + this.languageSwitchDialogController.open() + } +} \ No newline at end of file diff --git a/scenes_live/src/main/ets/components/liveroom/PLVLIWatchInfoView.ets b/scenes_live/src/main/ets/components/liveroom/PLVLIWatchInfoView.ets new file mode 100644 index 0000000..41acf83 --- /dev/null +++ b/scenes_live/src/main/ets/components/liveroom/PLVLIWatchInfoView.ets @@ -0,0 +1,78 @@ +import { PLVChannelData, PLVChatroomManager, PLVCommonConstants, PLVLiveSceneSDK } from '@polyvharmony/live-scenes-sdk' + +const TAG = '[PLVLIWatchInfoView]' + +@Preview +@Component +export struct PLVLIWatchInfoView { + @LocalStorageLink('sdk') sdk?: PLVLiveSceneSDK = undefined + @LocalStorageLink('channelData') channelData?: PLVChannelData = undefined + @State chatroomManager: PLVChatroomManager | undefined = this.sdk?.chatroomManager + // 为true时显示在线人数,为false时显示观看热度 + showOnlineUserNumber: boolean = true + + aboutToAppear(): void { + this.onChannelData() + this.onChatData() + } + + build() { + RelativeContainer() { + Image(this.channelData?.liveDetail?.coverImage) + .width(28) + .height(28) + .borderRadius(28) + .margin({ left: 4 }) + .draggable(false) + .alignRules({ + left: { anchor: PLVCommonConstants.CONTAINER, align: HorizontalAlign.Start }, + center: { anchor: PLVCommonConstants.CONTAINER, align: VerticalAlign.Center } + }) + .id('avatarImage') + Text(this.channelData?.liveDetail?.getPublisher()) + .fontSize(14) + .fontColor('#ffffff') + .margin({ left: 4, top: 2 }) + .alignRules({ + top: { anchor: PLVCommonConstants.CONTAINER, align: VerticalAlign.Top }, + left: { anchor: 'avatarImage', align: HorizontalAlign.End } + }) + .id('nickNameText') + Text() { + ImageSpan($r('app.media.plvli_watch')) + .width(12) + .height(12) + .margin({ right: 3 }) + .verticalAlign(ImageSpanAlignment.CENTER) + Span(this.showOnlineUserNumber ? this.chatroomManager?.onlineUserNumber + '' : this.channelData?.pageViewer + '') + .fontColor('#ffffff') + .fontSize(12) + } + .alignRules({ + left: { anchor: 'nickNameText', align: HorizontalAlign.Start }, + top: { anchor: 'nickNameText', align: VerticalAlign.Bottom }, + right: { anchor: PLVCommonConstants.CONTAINER, align: HorizontalAlign.End } + }) + .margin({ right: 8 }) + .textOverflow({ overflow: TextOverflow.Ellipsis }) + .maxLines(1) + .id('watchCountText') + } + .backgroundColor('#73000000') + .borderRadius(36) + .width(118) + .height(36) + } + + onChannelData() { + this.channelData?.eventNotify.on('page_viewer', (arg: number) => { + this.channelData!.pageViewer = arg + }, this) + } + + onChatData() { + this.chatroomManager?.eventNotify.on('online_user_number', (arg: number) => { + this.chatroomManager!.onlineUserNumber = arg + }, this) + } +} \ No newline at end of file diff --git a/scenes_live/src/main/ets/components/player/PLVLIPlayerLayout.ets b/scenes_live/src/main/ets/components/player/PLVLIPlayerLayout.ets new file mode 100644 index 0000000..6abfd88 --- /dev/null +++ b/scenes_live/src/main/ets/components/player/PLVLIPlayerLayout.ets @@ -0,0 +1,157 @@ +import { PLVCommonConstants, PLVLiveSceneSDK } from '@polyvharmony/live-scenes-sdk' +import { + DerivedState, + lateInit, + MutableObserver, + PLVLiveStatusEnum, + PLVMediaPlayerPlayingState, + PLVMediaPlayerState +} from '@polyvharmony/media-player-sdk' +import { display, window } from '@kit.ArkUI' +import { common } from '@kit.AbilityKit' + +@Component +export struct PLVLIPlayerLayout { + @LocalStorageLink('sdk') sdk: PLVLiveSceneSDK = lateInit() + private context = getContext(this) as common.UIAbilityContext + @State videoWidth: number = 0 + @State videoHeight: number = 0 + @State isNoLive: boolean = true + @State isToPlayButtonVisible: boolean = false + private observers: MutableObserver[] = [] + + aboutToAppear(): void { + this.observeMediaPlayerState() + } + + build() { + RelativeContainer() { + // 播放器渲染视图 + XComponent({ + id: `plvli_video_xcomponent`, + type: "surface", + libraryname: "plvplayer_xcomponent" + }) { + } + .onLoad((component) => { + this.sdk.playerManager.startMainMediaPlayerWithComponent(component!) + }) + .id('plvli_player_xcomponent') + .width(this.videoWidth) + .height(this.videoHeight) + .alignRules({ + center: { anchor: PLVCommonConstants.CONTAINER, align: VerticalAlign.Center }, + middle: { anchor: PLVCommonConstants.CONTAINER, align: HorizontalAlign.Center } + }) + + // 双击暂停播放手势 & 暂停播放按钮 + Stack() { + Image($r("app.media.plvli_player_to_play_icon")) + .width(72) + .height(72) + .visibility(this.isToPlayButtonVisible ? Visibility.Visible : Visibility.None) + .onClick(() => { + this.switchMainPlayerPlayingState() + }) + } + .id('plvli_player_play_pause_gesture_layout') + .width(PLVCommonConstants.FULL_PERCENT) + .height(PLVCommonConstants.FULL_PERCENT) + .gesture( + TapGesture({ count: 2 }) + .onAction(() => { + this.switchMainPlayerPlayingState() + }) + ) + + // 暂无直播提示 + Column({ space: 12 }) { + Image($r("app.media.plvli_player_no_live_placeholder")) + .width(150) + .height(116) + + Text($r("app.string.plvli_player_no_live_hint_text")) + .fontSize(12) + .fontColor('#e4e4e4') + } + .id('plvli_player_no_live_placeholder_layout') + .width(PLVCommonConstants.FULL_PERCENT) + .height(PLVCommonConstants.FULL_PERCENT) + .justifyContent(FlexAlign.Center) + .alignItems(HorizontalAlign.Center) + .backgroundColor('#00021A') + .visibility(this.isNoLive ? Visibility.Visible : Visibility.None) + .hitTestBehavior(HitTestMode.None) + } + } + + private observeMediaPlayerState() { + this.sdk.playerManager.mainMediaPlayer.getStateListenerRegistry() + .videoSize + .observe((videoSize) => { + const containerWidth = px2vp(display.getDefaultDisplaySync().width) + const containerHeight = px2vp(display.getDefaultDisplaySync().height) + const containerRatio = containerWidth / containerHeight + let videoWidth = containerWidth + let videoHeight = containerHeight + const videoRatio = videoSize.width() / videoSize.height() + // fit center + if (containerRatio > videoRatio) { + videoWidth = containerHeight / videoSize.height() * videoSize.width() + } else if (containerRatio < videoRatio) { + videoHeight = containerWidth / videoSize.width() * videoSize.height() + } + this.videoWidth = videoWidth + this.videoHeight = videoHeight + }) + .pushTo(this.observers) + + this.sdk.playerManager.mainMediaPlayer.getBusinessListenerRegistry() + .liveStatus + .observe((liveStatus) => { + this.isNoLive = liveStatus === PLVLiveStatusEnum.NO_LIVE + }) + .pushTo(this.observers) + + this.sdk.playerManager.mainMediaPlayer.getStateListenerRegistry() + .playingState + .observe((playingState) => { + this.setKeepScreenOn(playingState === PLVMediaPlayerPlayingState.PLAYING) + }) + .pushTo(this.observers) + + const toPlayButtonVisibleState = new DerivedState(() => { + const isLive = this.sdk.playerManager.mainMediaPlayer.getBusinessListenerRegistry() + .liveStatus + .value === PLVLiveStatusEnum.LIVE + const isPaused = this.sdk.playerManager.mainMediaPlayer.getStateListenerRegistry() + .playerState + .value === PLVMediaPlayerState.STATE_PAUSED + return isLive && isPaused + }); + toPlayButtonVisibleState.observe((isToPlayButtonVisible) => { + this.isToPlayButtonVisible = isToPlayButtonVisible + }).pushTo(this.observers) + } + + private switchMainPlayerPlayingState() { + const isPlaying = this.sdk.playerManager.mainMediaPlayer.getStateListenerRegistry() + .playingState + .value === PLVMediaPlayerPlayingState.PLAYING + if (isPlaying) { + this.sdk.playerManager.mainMediaPlayer.pause() + } else { + this.sdk.playerManager.mainMediaPlayer.restart() + } + } + + private async setKeepScreenOn(keepScreenOn: boolean) { + const lastWindow = await window.getLastWindow(this.context); + lastWindow.setWindowKeepScreenOn(keepScreenOn); + } + + aboutToDisappear(): void { + MutableObserver.disposeAll(this.observers) + this.observers = [] + } +} \ No newline at end of file diff --git a/scenes_live/src/main/ets/components/product/PLVLIProductDetailPage.ets b/scenes_live/src/main/ets/components/product/PLVLIProductDetailPage.ets new file mode 100644 index 0000000..bb04d05 --- /dev/null +++ b/scenes_live/src/main/ets/components/product/PLVLIProductDetailPage.ets @@ -0,0 +1,44 @@ +import { router } from '@kit.ArkUI' +import { PLVDeviceUtils, PLVJSONObject, PLVSimpleWeb, PLVWebController } from '@polyvharmony/live-scenes-sdk' + +const ROUTE_NAME = 'PLVLIProductDetailPage' + +export function pushToProductDetailPage(url: string) { + router.pushNamedRoute({ + name: ROUTE_NAME, + params: { + url: url + } + }) +} + +@Preview +@Component +@Entry({ + routeName: ROUTE_NAME +}) +struct PLVLIProductDetailPage { + productDetailUrl?: string = (router.getParams() as PLVJSONObject)['url'] as string + controller: PLVWebController = new PLVWebController() + + aboutToAppear(): void { + } + + onBackPress(): boolean | void { + if (this.controller.accessBackward()) { + this.controller.backward() + return true + } + } + + build() { + Stack() { + PLVSimpleWeb({ + controller: this.controller, + src: this.productDetailUrl, + showLoading: true + }) + } + .margin({ top: PLVDeviceUtils.getStatusBarHeight(), bottom: PLVDeviceUtils.getNavigationIndicatorHeight() }) + } +} \ No newline at end of file diff --git a/scenes_live/src/main/ets/components/product/PLVLIProductView.ets b/scenes_live/src/main/ets/components/product/PLVLIProductView.ets new file mode 100644 index 0000000..66aa345 --- /dev/null +++ b/scenes_live/src/main/ets/components/product/PLVLIProductView.ets @@ -0,0 +1,251 @@ +import { PLVCommonConstants, PLVLiveSceneSDK, PLVProductDataBean, PLVTextUtils, PLVToastUtils } from '@polyvharmony/live-scenes-sdk' +import { pushToProductDetailPage } from './PLVLIProductDetailPage' +import { PLVProductWebViewController } from './PLVLIProductWebView' + +const TAG = '[PLVLIProductView]' + +@Preview +@Component +export struct PLVLIProductView { + @LocalStorageLink('sdk') sdk?: PLVLiveSceneSDK = undefined + @Link productDataBean: PLVProductDataBean + @State clickTimesScale: number = 1 + @Link productWebViewController: PLVProductWebViewController + + build() { + RelativeContainer() { + this.pushCardView() + Image($r('app.media.plvli_shopping_trolley')) + .width(32) + .height(32) + .draggable(false) + .alignRules({ + top: { anchor: PLVCommonConstants.CONTAINER, align: VerticalAlign.Top }, + left: { anchor: PLVCommonConstants.CONTAINER, align: HorizontalAlign.Start }, + bottom: { anchor: PLVCommonConstants.CONTAINER, align: VerticalAlign.Bottom }, + right: { anchor: PLVCommonConstants.CONTAINER, align: HorizontalAlign.End } + }) + .onClick(() => { + this.productWebViewController.isShow = true + }) + .id('entryImageView') + } + .width(32) + .height(32) + } + + @Builder + pushCardView() { + if (this.productDataBean.pushContentBean && + !this.productDataBean.pushContentBean.isBigProduct()) { + Column() { + RelativeContainer() { + if (this.productDataBean.pushContentBean.getCover()) { + Image(this.productDataBean.pushContentBean.getCover()) + .draggable(false) + .width(96) + .alignRules({ + left: { anchor: PLVCommonConstants.CONTAINER, align: HorizontalAlign.Start }, + top: { anchor: PLVCommonConstants.CONTAINER, align: VerticalAlign.Top }, + bottom: { anchor: PLVCommonConstants.CONTAINER, align: VerticalAlign.Bottom } + }) + .borderRadius(4) + .id('coverView') + } else { + Text(PLVTextUtils.toString(this.productDataBean.pushContentBean.showId)) + .width(96) + .fontColor('#FFFFFFFF') + .backgroundColor('#59000000') + .fontSize(24) + .alignRules({ + left: { anchor: PLVCommonConstants.CONTAINER, align: HorizontalAlign.Start }, + top: { anchor: PLVCommonConstants.CONTAINER, align: VerticalAlign.Top }, + bottom: { anchor: PLVCommonConstants.CONTAINER, align: VerticalAlign.Bottom } + }) + .borderRadius(4) + .fontWeight(FontWeight.Bold) + .textAlign(TextAlign.Center) + .id('coverView') + } + if (this.productDataBean.hotEffectEnable) { + Text() { + ImageSpan($r('app.media.plvli_product_hot_effect_icon')) + .width(10) + .height(10) + .margin({ right: 4 }) + .verticalAlign(ImageSpanAlignment.CENTER) + Span(this.productDataBean.hotEffectTips) + .fontColor('#FFFFFFFF') + .fontSize(10) + if (this.productDataBean.getHotEffectClickTimes()) { + Span(` x${this.productDataBean.getHotEffectClickTimes()}`) + .fontColor('#FFFFFFFF') + .fontSize(10) + } + } + .borderRadius({ topLeft: 4, topRight: 4 }) + .alignRules({ + top: { anchor: 'coverView', align: VerticalAlign.Top }, + left: { anchor: 'coverView', align: HorizontalAlign.Start }, + right: { anchor: 'coverView', align: HorizontalAlign.End } + }) + .padding({ left: 4 }) + .height(20) + .backgroundImage($r('app.media.plvli_greet_bg')) + .backgroundImageSize(ImageSize.Cover) + } + Text(this.productDataBean.pushContentBean.name) + .margin({ left: 8 }) + .alignRules({ + left: { anchor: 'coverView', align: HorizontalAlign.End }, + top: { anchor: 'coverView', align: VerticalAlign.Top }, + bottom: { anchor: 'featuresRow', align: VerticalAlign.Top }, + right: { anchor: 'closeImageView', align: HorizontalAlign.Start } + }) + .fontSize(14) + .maxLines(1) + .textOverflow({ overflow: TextOverflow.Ellipsis }) + .fontColor(Color.Gray) + .chainMode(Axis.Vertical, ChainStyle.SPREAD_INSIDE) + .id('nameTextView') + if (this.productDataBean.pushContentBean.getParsedFeatures()) { + Row() { + ForEach(this.productDataBean.pushContentBean.getParsedFeatures(), (item: string, index) => { + Text(item) + .fontSize(10) + .padding({ + left: 6, + right: 6, + top: 2, + bottom: 2 + }) + .margin({ right: 6 }) + .borderRadius(4) + .fontColor('#FF8F11') + .backgroundColor('#14FF8F11') + }) + } + .alignRules({ + top: { anchor: 'nameTextView', align: VerticalAlign.Bottom }, + left: { anchor: 'nameTextView', align: HorizontalAlign.Start }, + bottom: { anchor: 'descTextView', align: VerticalAlign.Top } + }) + .id('featuresRow') + } + Text(this.productDataBean.pushContentBean.productDesc) + .alignRules({ + left: { anchor: 'nameTextView', align: HorizontalAlign.Start }, + top: { anchor: 'featuresRow', align: VerticalAlign.Bottom }, + bottom: { anchor: 'priceTextView', align: VerticalAlign.Top }, + right: { anchor: PLVCommonConstants.CONTAINER, align: HorizontalAlign.End } + }) + .fontSize(12) + .maxLines(1) + .textOverflow({ overflow: TextOverflow.Ellipsis }) + .fontColor('#99333333') + .id('descTextView') + Text() { + if (this.productDataBean.pushContentBean.isNormalProduct()) { + Span(this.productDataBean.pushContentBean.isFreeForPay() ? $r('app.string.plvli_commodity_free') : `¥${this.productDataBean.pushContentBean.realPrice}`) + .fontColor('#FF473A') + .fontSize(18) + .fontWeight(FontWeight.Bold) + if (!(this.productDataBean.pushContentBean.isRealPriceEqualsPrice() || this.productDataBean.pushContentBean.isSrcPriceZero() || + this.productDataBean.pushContentBean.isFinanceProduct())) { + Span(` `) + Span(`¥${this.productDataBean.pushContentBean.price}`) + .fontColor('#ADADC0') + .decoration({ type: TextDecorationType.LineThrough, color: '#ADADC0', style: TextDecorationStyle.SOLID }) + .fontSize(12) + } + } else if (this.productDataBean.pushContentBean.isFinanceProduct()) { + Span(this.productDataBean.pushContentBean.yield) + .fontColor('#FF473A') + .fontSize(18) + .fontWeight(FontWeight.Bold) + } else if (this.productDataBean.pushContentBean.isPositionProduct()) { + Span(this.productDataBean.pushContentBean.getTreatment()) + .fontColor('#FF473A') + .fontSize(18) + .fontWeight(FontWeight.Bold) + } + } + .alignRules({ + left: { anchor: 'nameTextView', align: HorizontalAlign.Start }, + top: { anchor: 'descTextView', align: VerticalAlign.Bottom }, + bottom: { anchor: PLVCommonConstants.CONTAINER, align: VerticalAlign.Bottom }, + right: { anchor: 'linkEntryImageView', align: HorizontalAlign.Start } + }) + .maxLines(1) + .textOverflow({ overflow: TextOverflow.Ellipsis }) + .id('priceTextView') + + Image(this.getLink() ? $r('app.media.plvli_product_enter') : $r('app.media.plvli_product_enter_disabled')) + .width(24) + .height(24) + .draggable(false) + .objectFit(ImageFit.Contain) + .margin({ right: 10 }) + .alignRules({ + right: { anchor: PLVCommonConstants.CONTAINER, align: HorizontalAlign.End }, + bottom: { anchor: PLVCommonConstants.CONTAINER, align: VerticalAlign.Bottom } + }) + .id('linkEntryImageView') + Image($r('app.media.plvli_product_push_close')) + .draggable(false) + .alignRules({ + right: { anchor: PLVCommonConstants.CONTAINER, align: HorizontalAlign.End }, + top: { anchor: PLVCommonConstants.CONTAINER, align: VerticalAlign.Top } + }) + .onClick(() => { + this.sdk?.productManager.notifyPush(undefined) + }) + .objectFit(ImageFit.Contain) + .padding(8) + .translate({ x: 8, y: -8 }) + .width(24) + .height(24) + .id('closeImageView') + } + .onClick(() => { + this.handlePushCardClick() + }) + .padding(10) + .borderRadius(8) + .backgroundColor(Color.White) + .translate({ x: 32 }) + .height(0) + .layoutWeight(1) + + Polygon({ width: 16, height: 14 }) + .points([[0, 0], [8, 8], [16, 0]]) + .translate({ x: -8 }) + .fill(Color.White) + } + .width(300) + .height(132) + .translate({ y: -32 }) + .alignItems(HorizontalAlign.End) + .justifyContent(FlexAlign.End) + .alignRules({ + bottom: { anchor: 'entryImageView', align: VerticalAlign.Bottom }, + right: { anchor: 'entryImageView', align: HorizontalAlign.End } + }) + } + } + + handlePushCardClick() { + const link = this.getLink() + if (!link) { + PLVToastUtils.longShow($r('app.string.plvli_commodity_toast_empty_link')) + return + } + this.sdk?.productManager.notifyClick() + this.sdk?.productManager.notifyPush(undefined) + pushToProductDetailPage(link) + } + + getLink(): string | undefined { + return this.productDataBean.pushContentBean?.getLinkByType() + } +} \ No newline at end of file diff --git a/scenes_live/src/main/ets/components/product/PLVLIProductWebView.ets b/scenes_live/src/main/ets/components/product/PLVLIProductWebView.ets new file mode 100644 index 0000000..2d477dc --- /dev/null +++ b/scenes_live/src/main/ets/components/product/PLVLIProductWebView.ets @@ -0,0 +1,106 @@ +import { + EVENT_TYPE_CLICK_PRODUCT_BUTTON, + IPLVBackwardInterface, + PLVCallback, + PLVCommonConstants, + PLVDeviceUtils, + PLVEventNotify, + PLVInteractManager, + PLVLiveSceneSDK, + PLVProductContentBean, + PLVProductWeb, + PLVSocketWebController, + PLVToastUtils +} from '@polyvharmony/live-scenes-sdk' +import { pushToProductDetailPage } from './PLVLIProductDetailPage' + +const TAG = '[PLVLIProductWebView]' + +@Preview +@Component +export struct PLVLIProductWebView { + @Link viewController: PLVProductWebViewController + @LocalStorageLink('sdk') sdk?: PLVLiveSceneSDK = undefined + @State productController?: PLVSocketWebController = this.sdk?.webControllerManager.create() + @State interactManager?: PLVInteractManager = this.sdk?.interactManager + @State offsetY: number = 6 + PLVDeviceUtils.getNavigationIndicatorHeight() + + aboutToAppear(): void { + this.onProductData() + this.onViewData() + } + + build() { + Column() { + Stack() { + Column() { + PLVProductWeb({ + controller: this.productController, + interactManager: this.interactManager + }) + } + .padding({ + left: 6, + right: 6, + top: 6, + bottom: PLVDeviceUtils.getNavigationIndicatorHeight() - 6 + }) + .width(PLVCommonConstants.FULL_PERCENT) + .height(PLVCommonConstants.FULL_PERCENT) + } + .onTouch((event) => { + event.stopPropagation() + }) + .borderRadius({ + topLeft: 12, + topRight: 12, + bottomLeft: 0, + bottomRight: 0 + }) + .width(PLVCommonConstants.FULL_PERCENT) + .height(420) + .backgroundColor('#CC000000') + .backdropBlur(8) + } + .onTouch(() => { + this.viewController.isShow = false + }) + .offset({ y: this.offsetY }) + .justifyContent(FlexAlign.End) + .visibility(this.viewController.isShow ? Visibility.Visible : Visibility.None) + .width(PLVCommonConstants.FULL_PERCENT) + .height(PLVCommonConstants.FULL_PERCENT) + } + + onProductData() { + this.productController?.eventNotify.on(EVENT_TYPE_CLICK_PRODUCT_BUTTON, (data: PLVProductContentBean) => { + const productLink = data.getLinkByType() + if (!productLink) { + PLVToastUtils.longShow($r('app.string.plvli_commodity_toast_empty_link')) + return + } + pushToProductDetailPage(productLink) + this.viewController.isShow = false + }, this) + } + + onViewData() { + this.viewController.eventNotify.on('isShow', (arg: boolean) => { + this.viewController.isShow = arg + }, this) + } +} + +export class PLVProductWebViewController implements IPLVBackwardInterface { + isShow: boolean = false + eventNotify: PLVEventNotify<'isShow'> = new PLVEventNotify(this) + accessBackward: PLVCallback = () => { + return this.isShow + } + backward: PLVCallback = () => { + if (this.isShow) { + this.eventNotify.emit('isShow', false) + this.isShow = false + } + } +} \ No newline at end of file diff --git a/scenes_live/src/main/ets/components/reward/PLVLIRewardView.ets b/scenes_live/src/main/ets/components/reward/PLVLIRewardView.ets new file mode 100644 index 0000000..d58e517 --- /dev/null +++ b/scenes_live/src/main/ets/components/reward/PLVLIRewardView.ets @@ -0,0 +1,249 @@ +import { GiftDetailDataBean, PLVCommonConstants, PLVDeviceUtils, PLVHttpError, PLVI18NDataMapper, PLVJSONObject, PLVJSONUtils, PLVLiveSceneSDK, PLVToastUtils } from '@polyvharmony/live-scenes-sdk' + +@Preview +@Component +export struct PLVLIRewardView { + @Link rewardDataBeans: GiftDetailDataBean[] + @Link rewardType: string + rewardDialogController = new CustomDialogController({ + builder: PLVLIRewardDialog({ + rewardDataBeans: this.rewardDataBeans, + rewardType: this.rewardType + }), + alignment: DialogAlignment.Bottom, + customStyle: true + }) + + build() { + Image($r('app.media.plvli_reward')) + .width(32) + .height(32) + .draggable(false) + .onClick(() => { + this.rewardDialogController.open() + }) + } +} + +@Preview +@CustomDialog +export struct PLVLIRewardDialog { + @Link rewardDataBeans: GiftDetailDataBean[] + @Link rewardType: string + @LocalStorageLink('remainingRewardPoint') remainingRewardPoint: number = 0 + controller?: CustomDialogController + swiperRewardDataBeans: Array = [] + @LocalStorageLink('rewardCountSelectIndex') rewardCountSelectIndex: number = 0 + @LocalStorageLink('rewardItemSelectIndex') rewardItemSelectIndex: number = -1 + @LocalStorageLink('rewardSwiperIndex') rewardSwiperIndex: number = 0 + @LocalStorageLink('sdk') sdk?: PLVLiveSceneSDK = undefined + goodNumArr: number[] = [1, 5, 10, 66, 88, 666] + + aboutToAppear(): void { + const rewardDataBeanSection: GiftDetailDataBean[] = [] + for (let i = 0; i < this.rewardDataBeans.length; i++) { + if (rewardDataBeanSection.length < 10) { + rewardDataBeanSection.push(this.rewardDataBeans[i]) + } + if (rewardDataBeanSection.length == 10 || i == this.rewardDataBeans.length - 1) { + this.swiperRewardDataBeans.push([...rewardDataBeanSection]) + rewardDataBeanSection.length = 0 + } + } + if (this.isPointReward()) { + this.sdk?.rewardManager.getRemainingRewardPoint() + .then((value) => { + this.remainingRewardPoint = value + }) + } + } + + build() { + Stack() { + Column() { + Row() { + Text(this.isPointReward() ? $r('app.string.plvli_reward_type_point') : $r('app.string.plvli_reward_type_cash')) + .fontSize(16) + .fontColor('#FFFFFF') + .margin({ left: 10 }) + if (this.isPointReward()) { + Text($r('app.string.plvli_reward_remain_point', this.remainingRewardPoint + '')) + .fontSize(12) + .fontColor('#ADADC0') + .margin({ left: 8 }) + } + Blank() + Image($r('app.media.plvli_popup_close')) + .width(34) + .height(34) + .objectFit(ImageFit.ScaleDown) + .draggable(false) + .onClick(() => { + this.controller?.close() + }) + } + .justifyContent(FlexAlign.Center) + .width(PLVCommonConstants.FULL_PERCENT) + + Swiper() { + ForEach(this.swiperRewardDataBeans, (item: GiftDetailDataBean[], index1) => { + Grid() { + ForEach(item, (data: GiftDetailDataBean, index2) => { + GridItem() { + Column() { + Image(data.getImg()) + .width(48) + .height(48) + .objectFit(ImageFit.Contain) + .draggable(false) + Text(data.getName()) + .margin({ top: 2 }) + .maxLines(1) + .textOverflow({ overflow: TextOverflow.Ellipsis }) + .fontSize(12) + .textAlign(TextAlign.Center) + .fontColor('#D0D0D0') + Text() { + Span(this.isPointReward() ? data.price + '' : $r('app.string.plvli_commodity_free')) + if (this.isPointReward()) { + Span(data.pointUnit) + } + } + .margin({ top: 4 }) + .maxLines(1) + .textOverflow({ overflow: TextOverflow.Ellipsis }) + .fontSize(10) + .textAlign(TextAlign.Center) + .fontColor('#ADADC0') + } + .padding({ top: 8, bottom: 8 }) + .justifyContent(FlexAlign.Center) + .alignItems(HorizontalAlign.Center) + } + .backgroundColor(this.rewardItemSelectIndex == index1 * 10 + index2 ? '#ff3e3e4e' : '#00000000') + .borderRadius(8) + .onClick(() => { + this.rewardItemSelectIndex = index1 * 10 + index2 + }) + }) + } + .margin({ bottom: 30 }) + .rowsTemplate('1fr 1fr') + .columnsTemplate('1fr 1fr 1fr 1fr 1fr') + }) + } + .index(this.rewardSwiperIndex) + .onChange((index) => { + this.rewardSwiperIndex = index + }) + .height(240) + .translate({ y: 8 }) + .loop(false) + .autoPlay(false) + .width(PLVCommonConstants.FULL_PERCENT) + .indicator( + Indicator.dot() + .itemWidth(5) + .itemHeight(5) + .selectedItemWidth(5) + .selectedItemHeight(5) + .color('#80ffffff') + .selectedColor(Color.White) + ) + + Row() { + ForEach(this.goodNumArr, (value: number, index) => { + this.rewardCountText(value + '', index) + }) + Blank() + Button($r('app.string.plvli_reward_text')) + .height(32) + .backgroundColor('#FFA611') + .fontColor('#FFFFFF') + .fontSize(12) + .onClick(() => { + if (this.rewardItemSelectIndex == -1) { + PLVToastUtils.shortShow($r('app.string.plvli_reward_select_cash_hint')) + return + } + this.handleReward(this.rewardDataBeans[this.rewardItemSelectIndex]) + this.controller?.close() + }) + } + .margin({ top: 6 }) + .padding({ left: 10, right: 10 }) + .width(PLVCommonConstants.FULL_PERCENT) + .alignItems(VerticalAlign.Center) + .justifyContent(FlexAlign.Start) + } + .padding({ + left: 6, + right: 6, + top: 6, + bottom: PLVDeviceUtils.getNavigationIndicatorHeight() - 6 + }) + .justifyContent(FlexAlign.End) + .width(PLVCommonConstants.FULL_PERCENT) + } + .borderRadius({ + topLeft: 12, + topRight: 12, + bottomLeft: 0, + bottomRight: 0 + }) + .width(PLVCommonConstants.FULL_PERCENT) + .backgroundColor('#cc000000') + .backdropBlur(8) + } + + @Builder + rewardCountText(content: string, index: number) { + Text(content) + .height(24) + .fontColor(this.rewardCountSelectIndex == index ? '#FFFFFF' : '#ADADC0') + .fontSize(12) + .textAlign(TextAlign.Center) + .constraintSize({ minWidth: 36 }) + .backgroundColor(this.rewardCountSelectIndex == index ? '#ff3e3e4e' : '#ff1a1b1f') + .borderWidth(this.rewardCountSelectIndex == index ? 1 : 0) + .borderColor('#ffadadc0') + .borderRadius(12) + .margin({ right: 4 }) + .onClick(() => { + this.rewardCountSelectIndex = index + }) + } + + isPointReward() { + return 'POINT' === this.rewardType + } + + isCashReward() { + return 'CASH' === this.rewardType + } + + handleReward(data: GiftDetailDataBean) { + if (this.isPointReward()) { + this.sdk?.rewardManager.makePointReward(data.goodId, this.goodNumArr[this.rewardCountSelectIndex]) + .then((value) => { + this.remainingRewardPoint = value + }) + .catch((err: PLVHttpError) => { + this.toastError(err) + }) + } else { + this.sdk?.rewardManager.makeGiftCashReward(data.goodId, this.goodNumArr[this.rewardCountSelectIndex]) + .catch((err: PLVHttpError) => { + this.toastError(err) + }) + } + } + + toastError(err: PLVHttpError) { + const errData = PLVJSONUtils.safeParse(err.message) as PLVJSONObject + if (errData) { + const errMessage = errData['message'] as string + PLVToastUtils.shortShow(PLVI18NDataMapper.getException(errMessage) || '') + } + } +} \ No newline at end of file diff --git a/scenes_live/src/main/ets/pages/PLVLIWatchPage.ets b/scenes_live/src/main/ets/pages/PLVLIWatchPage.ets new file mode 100644 index 0000000..5e1a60b --- /dev/null +++ b/scenes_live/src/main/ets/pages/PLVLIWatchPage.ets @@ -0,0 +1,51 @@ +import { PLVCallback, PLVChannelData, PLVJSONObject, PLVLiveSceneSDK, PLVUtils } from '@polyvharmony/live-scenes-sdk'; +import { PLVLIWatchLayout, PLVWatchLayoutController } from '../components/PLVLIWatchLayout'; +import { router } from '@kit.ArkUI'; +import { webview } from '@kit.ArkWeb'; + +const TAG = '[PLVLIWatchPage]' +const ROUTE_NAME = 'PLVLIWatchPage' +let storage: LocalStorage = new LocalStorage() + +export function pushToWatchPage(sdkId: number, paramsCallback?: PLVCallback) { + const params: PLVJSONObject = {} + params['sdkId'] = sdkId + paramsCallback?.(params) + storage = new LocalStorage() + router.pushNamedRoute({ + name: ROUTE_NAME, + params: params + }) +} + +@Entry({ + routeName: ROUTE_NAME, + storage: storage +}) +@Component +struct PLVLIWatchPage { + @LocalStorageLink('sdk') sdk?: PLVLiveSceneSDK = PLVLiveSceneSDK.get((router.getParams() as PLVJSONObject)['sdkId'] as number) + @LocalStorageLink('channelData') channelData?: PLVChannelData = this.sdk?.channelData + @State watchLayoutController: PLVWatchLayoutController = new PLVWatchLayoutController() + + aboutToAppear(): void { + PLVUtils.setWindowFullScreen(true) + } + + aboutToDisappear(): void { + PLVUtils.setWindowFullScreen(false) + } + + override onBackPress(): boolean | void { + if (this.watchLayoutController.accessBackward()) { + this.watchLayoutController.backward() + return true + } + } + + build() { + Stack() { + PLVLIWatchLayout({ layoutController: this.watchLayoutController }, storage) + } + } +} \ No newline at end of file diff --git a/scenes_live/src/main/module.json5 b/scenes_live/src/main/module.json5 new file mode 100644 index 0000000..f5f273b --- /dev/null +++ b/scenes_live/src/main/module.json5 @@ -0,0 +1,14 @@ +{ + "module": { + "name": "scenes_live", + "type": "har", + "description": "$string:shared_desc", + "deviceTypes": [ + "phone", + "tablet", + "2in1" + ]/*, + "deliveryWithInstall": true, + "pages": "$profile:main_pages"*/ + } +} \ No newline at end of file diff --git a/scenes_live/src/main/resources/base/element/color.json b/scenes_live/src/main/resources/base/element/color.json new file mode 100644 index 0000000..1bbc9aa --- /dev/null +++ b/scenes_live/src/main/resources/base/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "white", + "value": "#FFFFFF" + } + ] +} \ No newline at end of file diff --git a/scenes_live/src/main/resources/base/element/string.json b/scenes_live/src/main/resources/base/element/string.json new file mode 100644 index 0000000..479f407 --- /dev/null +++ b/scenes_live/src/main/resources/base/element/string.json @@ -0,0 +1,248 @@ +{ + "string": [ + { + "name": "shared_desc", + "value": "description" + }, + { + "name": "plvli_live_bulletin", + "value": "Bulletin" + }, + { + "name": "plvli_live_intro", + "value": "Intro" + }, + { + "name": "plvli_live_no_intro", + "value": "No live broadcast introduction~" + }, + { + "name": "plvli_live_bulletin_tip", + "value": "Bulletin: " + }, + { + "name": "plvli_live_language_switch", + "value": "Language" + }, + { + "name": "plvli_live_language_switch_zh", + "value": "简体中文-ZH" + }, + { + "name": "plvli_live_language_switch_en", + "value": "English-EN" + }, + { + "name": "plvli_live_language_switch_hint", + "value": "Change language to re-enter live stream, confirm to switch" + }, + { + "name": "plvli_chat_toast_logging", + "value": "Chatroom logging" + }, + { + "name": "plvli_chat_toast_login_success", + "value": "Chatroom login successful" + }, + { + "name": "plvli_chat_toast_reconnecting", + "value": "Chatroom reconnecting" + }, + { + "name": "plvli_chat_toast_reconnect_success", + "value": "Chatroom reconnected successfully" + }, + { + "name": "plvli_chat_toast_login_failed", + "value": "Chatroom login failed" + }, + { + "name": "plvli_chat_restrict_max_viewer_hint", + "value": "The live room is too popular, please come back later" + }, + { + "name": "plvli_chat_input_tips_chat", + "value": "Join the chat" + }, + { + "name": "plvli_chat_input_tips_quiz", + "value": "Initiate a question" + }, + { + "name": "plvli_chat_send", + "value": "Send" + }, + { + "name": "plvli_chat_toast_send_text_empty", + "value": "The sending content cannot be empty!" + }, + { + "name": "plvli_chat_me", + "value": "%s(me)%s" + }, + { + "name": "plvli_chat_quiz_channel", + "value": "Question Channel" + }, + { + "name": "plvli_chat_quiz_default_tips", + "value": "You have entered the exclusive question channel, and the content of the question will not be made public" + }, + { + "name": "plvli_chat_input_tips_chatroom_close", + "value": "Chatroom is closed" + }, + { + "name": "plvli_chat_view_new_msg", + "value": "News" + }, + { + "name": "plvli_chat_welcome_join", + "value": "welcome %s join" + }, + { + "name": "plvli_chat_welcome_join_multi", + "value": "welcome %s and other %s people join" + }, + { + "name": "plvli_chat_copy", + "value": "Copy" + }, + { + "name": "plvli_chat_more", + "value": "More" + }, + { + "name": "plvli_chat_full_text", + "value": "Full text" + }, + { + "name": "plvli_chat_answer", + "value": "Reply" + }, + { + "name": "plvli_chat_copy_success", + "value": "Copy success" + }, + { + "name": "plvli_chat_input_tips_focus", + "value": "In focus mode" + }, + { + "name": "plvli_chat_toast_been_kicked", + "value": "You have been kicked out of the chatroom by the administrator!" + }, + { + "name": "plvli_chat_toast_account_login_elsewhere", + "value": "The current account has been logged in elsewhere, you will be logged out of this live room" + }, + { + "name": "plvli_chat_toast_chatroom_close", + "value": "Chatroom has been closed" + }, + { + "name": "plvli_chat_toast_chatroom_open", + "value": "Chatroom has been opened" + }, + { + "name": "plvli_chat_toast_history_load_failed", + "value": "History loading failed%s" + }, + { + "name": "plvli_chat_playback_tips", + "value": "Chat replay is on, showing historical messages" + }, + { + "name": "plvli_reward_give", + "value": "given%s" + }, + { + "name": "plvli_reward_type_point", + "value": "Points Reward" + }, + { + "name": "plvli_reward_type_cash", + "value": "Gifts Reward" + }, + { + "name": "plvli_reward_remain_point", + "value": "My points: %s" + }, + { + "name": "plvli_reward_text", + "value": "Reward" + }, + { + "name": "plvli_reward_select_cash_hint", + "value": "Please select a reward gift" + }, + { + "name": "plvli_commodity_free", + "value": "Free" + }, + { + "name": "plvli_commodity_toast_empty_link", + "value": "In-app purchases are not supported" + }, + { + "name": "plvli_red_paper_send_msg", + "value": "%s sent a " + }, + { + "name": "plvli_red_paper_dot", + "value": ", " + }, + { + "name": "plvli_red_paper_get", + "value": "Click to receive" + }, + { + "name": "plvli_common_dialog_tip_warm", + "value": "Warm Tips" + }, + { + "name": "plvli_common_dialog_confirm", + "value": "Confirm" + }, + { + "name": "plvli_common_dialog_cancel", + "value": "Cancel" + }, + { + "name": "plvli_player_no_live_hint_text", + "value": "Not Live" + }, + { + "name": "plvli_interact_question", + "value": "Question" + }, + { + "name": "plvli_card_push_reward_hint", + "value": "Continuous viewing rewards" + }, + { + "name": "plvli_lottery_over", + "value": "Lottery over" + }, + { + "name": "plvli_lottery_will_start", + "value": "Lottery is about to begin" + }, + { + "name": "plvli_lottery_no_start", + "value": "Lottery has not yet started" + }, + { + "name": "plvli_lottery_running", + "value": "In lottery" + }, + { + "name": "plv_red_paper_get", + "value": "Click to receive" + }, + { + "name": "plv_red_paper_red_pack_hint", + "value": "Password red envelope coming soon" + } + ] +} diff --git a/scenes_live/src/main/resources/base/media/plvli_chat_msg.png b/scenes_live/src/main/resources/base/media/plvli_chat_msg.png new file mode 100644 index 0000000000000000000000000000000000000000..fcad34a499b2cb75ff99a8cacff71da5d9ed00b0 GIT binary patch literal 742 zcmV|qe;xY%(3Edt8a?%f*o(O^n89G(cT({h#LwY1hrP85yD=NW zYuLKd5Q*p3@DkqL%LzL0LkMnS(`rK`-kZV`?xJI<=F`#m5YIL$MB?8W-f*f~(|SCJ zrjbU6Nal>hjQdz$)Nni+enM*#gS5sBI9}9nImppwg-B+N#;nUl&v9pR+Gi4OS6~Z8L4FOgH^JKQRp8%ab51jYg;=%MbKGwH655Y* zTyNmBMM26t-*66ZiAVI*6QYdYf(=!;c5E-ehhx?^MWXkDoG3DFWMLv^jTMnSLH>#7 zniyh-?5qNP)tYWZ!?`8~DX+$@rJ7!rogYd#)PxX+BSZYw_6O zqgn**xEg|a9BDv^A(f5sGs)(*oNz<3f52NS46qZQCO%(U>KszVqz#wC;EOtR9oQe* z@~MA8_RU$@R~>JrL1dfT8~6^_W&bem<3n5t><^3U>s7yNX%N|g`dhWtBYc9FRu!Ni z$h^vL!SAvU+KE{158`@PwsrR^I1)4}NV%@y`GyXuF-Tv$Xm>EM<^ghHHlyV~4YAhs YFR!)Dbq{rl!2kdN07*qoM6N<$g7OV#DF6Tf literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_chat_quiz_default.png b/scenes_live/src/main/resources/base/media/plvli_chat_quiz_default.png new file mode 100644 index 0000000000000000000000000000000000000000..c771c9f057d94f783fbbd06d240a4dd135bae466 GIT binary patch literal 867 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 literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_chatroom_btn_like_1.png b/scenes_live/src/main/resources/base/media/plvli_chatroom_btn_like_1.png new file mode 100644 index 0000000000000000000000000000000000000000..5c89372048769d96c32144aaf04735bddb86d803 GIT binary patch literal 2279 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 literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_chatroom_btn_like_2.png b/scenes_live/src/main/resources/base/media/plvli_chatroom_btn_like_2.png new file mode 100644 index 0000000000000000000000000000000000000000..1b43efe2464a8743ece6098dcb0edc29b83cfd46 GIT binary patch literal 2572 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 AQ~&?~ literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_chatroom_btn_like_4.png b/scenes_live/src/main/resources/base/media/plvli_chatroom_btn_like_4.png new file mode 100644 index 0000000000000000000000000000000000000000..9f683c0b9e4ad78e2edb566f0f2e4f3b26753c31 GIT binary patch literal 2594 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 Ef=nEAKL7v# literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_chatroom_btn_like_5.png b/scenes_live/src/main/resources/base/media/plvli_chatroom_btn_like_5.png new file mode 100644 index 0000000000000000000000000000000000000000..352338549ac5f02fd0f152ea844c6f68a64ed892 GIT binary patch literal 2787 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 literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_chatroom_btn_like_6.png b/scenes_live/src/main/resources/base/media/plvli_chatroom_btn_like_6.png new file mode 100644 index 0000000000000000000000000000000000000000..b2a6ed8c7f642f085415537635b36d598c1271f5 GIT binary patch literal 2345 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 literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_chatroom_btn_like_7.png b/scenes_live/src/main/resources/base/media/plvli_chatroom_btn_like_7.png new file mode 100644 index 0000000000000000000000000000000000000000..56be74a783e1905769c5a31a58003bd74c37af57 GIT binary patch literal 2225 zcmWlZdpuO>AIHzQPRcgQtv0u=Lu4e3C`U8Hxb87c%x3rvO8i>VR?HT^hAum*U+JP0 zg=wIN*TXYDrs7crjWBsIT-fH$cf?E0G9wP4Kx^ohsL0V3RCB3n=aj0v`l3gEFwSi^@kJN!oZz8ap-C|Om+V>r|u z3vnL`VPIU>VeSSj&>0J)V{H0omg6UQ9p=9d^IQ1|UNzuLVn5(*-_Nu~nRckx3Uspr z3fun)(@|f?0pE2PlaBd1W3a1+wF&2vZGuM;KMmqDG!Jtm)C&t`4umrMxlD}9913*D zIIbAmd6?ro!gU_yGDbt)HC#`!xhTRwxeU~w(c|ZevNx$=hT3O?n(6$WNmqHSedFq& zWYCo!bd*USfY%SOH=tZPCJMw7w&O_xe18;?CIBSjXdo7WOc9WXbo0a#65;%iWbV{u z3U%a=WJFDo(~^V`BJQ||iwjw}044-nLWJNXNnAoA!Vp+Vw}0+vXUSmCk`G|ZL0=V#bz4J`RQj_hlul*9Os=>S6^wp#`=10cvzv)($^84Jik(7qUIBDF{8T*cgy&V_o1q~C+=*{;v zEtLMOT(tF@Ayn8qyGzn1{89o(@4qKiG81nrK2P~lBzC>XVk75!=cu`@&okODn(jN& zl~FtybM!y@%}rnYB~|zLD%rHaSMNUj0P!Lm`R zwQH9gry4VxqU{WMrBe#n<*IKI$3=JucN>A;-9Au#C>}BT;NZ_r;uyP`Kpl^;Y|2YJ zg9Y1+l{<~mhDzIA7VX8gRta0Iqvoa&%TCH!;d8lU_g)uWi~QX8Un4^vbS}MLxZ!xo z=tTF8xXR{Lmm}>O-(QHoWRd=0?@6<-b15$vULMD8{t(2Gm2EC+cx`z%z;R2wxw@UVjT%xilDtTORbLXG{0l;?T@B$omwZhJ@YS_-YLGS zBKh0LE3av(f2*qF)q{(U*g!8T#s`Pixn|uq3k$1CwBD_*xa{dxoE};zIA`{3Y~TJS za>AXHYt=RhuPi1g0Zns-UVoKJ`c0$nj&)SWwf?_%QYqP}8S6=$3kc|$?aDa6&30GL zR>Gc zoRdLpTO-4Z*|*jeQvwuGRvuJ|6U#k6*a3;v4$BnrJd<)by1XCKTuG&zv8p?5VhK^g z_ws-Hwd=9*8VWx@L$*0*ZTy@xDjN!{&M}fiKgz14neSFbv0SZBU-S8#Z?A}3$$4p3j$`PucPE4;dG<_J+aeI(+bJ>&WVcpJOz$aKgZz$Q}Xl}BP15Fcp zvyJmVL*R{TdL@5-?T5LBqqwHhePbL9L)KyRk`mAe)QxF znO;#u@VO4Fi#XpFF4*Jd^I)gKXh{n zTiD0x+u_8qOCKpMzBbTWRbjoszuu|zP<37278BLf;Vt~dJ~u+p@J>bAfRf-bj2rJs2FmKBtCL;QS+{~^75EZP%H8%guPQRa8Ggc?w~?J+2Cejp>Q3+~nCoMY zKGJqaCT<>kyJrte)Ma_+(K-ri6w*m*b3YR^f{!Ej>< zPxCov_x95DHcKrtJPnkC@pThF`gl(jjlMoITes(yx&57XzSP{Za+#ho@4&SK>j!_c zPJh1ACTLfanqjc~;q84zeI@=uGRWqZWb2}P6qo3B?d7nbT=NKC@Oj#%^W|mfiPVBH z_imp5vqoWk5ar5~#zK?j0a=`k2{DxU_1L|@gGX(Q)(DNHN=i_1dC|;Cid@`(EyG{m zUZ7XS2n-H6vAkN>Q)4P=413p5H5M*QVw}%5JH08!H6p-kOstH7C7QWgD%U88kj0%d zDtY;$(6434P_IBZY1mz331!NhREKM~#kTyL`RwW0)N|sTZr6>_Pj%C;UtHK4YLfTY zb!cF``EZX*=ORk|>z_j|&**1wEBP2xy|}gi^Yj4<4(1FtFI&?CbyUufUoRBI31{El HCd&B-BlcV0 literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_chatroom_btn_like_8.png b/scenes_live/src/main/resources/base/media/plvli_chatroom_btn_like_8.png new file mode 100644 index 0000000000000000000000000000000000000000..e9a981d69b15bb7035ebeb7fbe7c00a12b6cf1d3 GIT binary patch literal 2286 zcmXZc3se&M8UXM?)6}%gJmssRTGL#sDNV7g$Ut%R(mx?3#hTKJtC*;0Xr@S3RBUo{ zYpJxQvW?!{o3Gp+xV1^C#kE{*^FeB9W{ROU>d4&To;~L`-+bSk|C~AV{lA&xfEngs z=Vk{%kV80w7Db$?=EKI4h^18p0}x~hfk-x;C>yWF;yfNM;Nfh5fyj|WfO0r^avaWM zU;vr@aY63)JfTqwe#7b{76)Y}WVNPzWFz4ng-clue z2riwR^~k>7E7zwmT5Q|1x>Huz7g==BqlZ>NI03yaB%@HE(qCM z;IowH^ShgDejT)e)!fGl-!Jw7_pk{+=E=LQ1mO<+QR6Ss{0(vU|tsKyY za6WRt0Edkt0OfAMxB!b`O%Nq#8;T%k;trIz%OK>VBI3O=F_CamEW&a{rd$zjCd9J^ zm`H#fNS_i2h`wQjbUr5F6aB;pJRZg;Bx1ZooQGh9L3%bDOtqX-8xW8*1I zT)@T!+i@X+3lnisg1LtxKAy|}yZ`wIh#fKI=V0b0i*e~;Tv~u172}0slUW{amWxZw zyMRSfP(VRBFbZHCz!-t$j{$!iP%r|U5R3r=b)2w;HVzo$AQELoqHHk1W=?Jc;~YXH z78`+aXjlvb6cnKv1XR6<(MJ#iy%gxAp*lIxDLGmd z_sy-nx(5Pnt6bYE)tHGNyvcpgAgtDjs++UQbpo{+U#;WadbLNTv_`Z!s13-*`6C8gMb? zUFF{{B*Zlq57gJVeCmF(HZO_w4nY$n0f`{N+>gBJc`l{XY*fBj9ej$0oeH@|UB?j?Rpr)4leo zYcp$ms@ShV$;Kux^1ZcHl{`!PC7>jQcI)%yaQ~VZ2S6R`1Q}3T2?z#20oj>h9T}$)49J}PpTu>|# z6qa#?ov%`ZLgzL)-@ck?`-Lp_;69oIt(hT-|4Zhr`AI1A9XWKo=-$)k`R(f{aIqbG zXw;cBt-w@~JYiR0I^?xKNXWMP+8Z(3ChL@pw1`@K%}%OOH|~j%RNx=Ga|0G`w>Ek; z>q^mS9=xv~o&~;YU(G74WjK<*(T&F<&aETe>Zls-lB^#pk2jX;AC`uf%c~mSzTn@0 zD&6mq=XVt2DWoGY?Sox=bQ2aly-q{1&T|!?3~U^o`;lLe?LJQ~#~s?P15#%?wpfzQ z+Hv&oCT_FVWD~pniEwyl^t;&lQgMjYlj1Rc4S)@+o>T32vl_zqci*qPWvw&`d9iT^ zENeycDbqNQx-Z=kUz`=P@z|v2mGBkXoVvmAS^6ghdj`kOJ}C`5A?tTUpoWxZ5NU>2 zqv*diGi|AnyX>VcvXKpy(-u}w|E{Al@FKs5-SkLhf%N-j4aCi|SZ-?P{e`xSsSYkW zGmW)tD6YTfSkV$+c6UWEDY-Lo%%)y?-x$%`l>8$yJhbL=PF2j^g-ficTEm8o&%1&f zI+h)6*FtH6JiL3OQ%c6C3Mu_@ap<<|nJtD;Cr7Q@{)o#b;WupY?75@Nh##^p*gG*!#z)^RJ&K7z1}VpnUtCDsAw$uj%HREy_(}9Tiv90xwF;ZE0a*^Ksd@6Tr44k) zZ{%Lovl|yeuSP4$^J=~$Pn-Qbh(1y#Jo9KMUKornXmOuPyRjm{-@zeFP8LVLOu9;| z$(fuNHtTcC{DtH6%-ai$r5lz(YJ zxcA!~4*8PQ$gs$D%E5XwiCjSC-YJbu4lHR}n`Y{YjlXb$G&{&Sw(4IAU-MsD$ivbK UC%Nfi#7`Rvr!#4HLJ-OS08&JQr~m)} literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_chatroom_btn_like_9.png b/scenes_live/src/main/resources/base/media/plvli_chatroom_btn_like_9.png new file mode 100644 index 0000000000000000000000000000000000000000..1c6f18b67ef92ae439e6f46e431f5b11f2bb0898 GIT binary patch literal 2293 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 literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_chatroom_file_share_doc_icon.png b/scenes_live/src/main/resources/base/media/plvli_chatroom_file_share_doc_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..dedc79e524c24c7407a6c9a78e60dd30fd0786e7 GIT binary patch literal 1379 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 D9Tw7) literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_chatroom_file_share_ppt_icon.png b/scenes_live/src/main/resources/base/media/plvli_chatroom_file_share_ppt_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5c7682ccb020d0dfcb0a19b1f0f3a97c1ce9e8d9 GIT binary patch literal 833 zcmeAS@N?(olHy`uVBq!ia0vp^6+k?JgBeJESsTv}q>csngt!9fw-Mg|OS6FF+en|U zalzk`!~Um*|DToqHq!fTgwN;Lzz^{OK-o7y1t2wW-$eWU`~B}ZBp33zkmO}eehISt zzaQTFb?e5L1v5TP==e}m_&vQ~CD11_B|(0{3>R77u9x8DWIC{0MBvYvV=I1bTQq&D z$NPI-8I~=zSw0L5Onja$jv*Dd-rl+CcRN6&HPKpeNx&s1=@(lrU70zjQzb=-S>)G0 z{m{@=k)~5y^&f3j-SYpnZmqc8wP`soSsVj)^5_>Vu#>Ol{!|uvOmTH><>d2gFW3gi ze?D1yz>SYldS@Gx)p^C{%v6!fm7cu8W=(}5L5HV2HAuDfiR2HycKAmCkbBhN=_T{nx3Q^DB*-L9=hz=% zATy>c>^0gF*ygDoX0R{n;PS8!>e>=~=}$Ls-TQOm)$*t(|E7l7h!n5l3Th$$CoSWKB z*#;}cS`0LKUKy-Br!Bo?s`j2GPLV&g9&DA_q<84Fm%tykf<@w*hcab%0aFlzr>mdK II;Vst08166C;$Ke literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_chatroom_file_share_xls_icon.png b/scenes_live/src/main/resources/base/media/plvli_chatroom_file_share_xls_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7e54e808c859f72f2e0a423172a22caecd5eec76 GIT binary patch literal 1153 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 ej2q*}d;Ax(Ht^SY+g{E90000% z+fEc&6ox-QEyb1+jfshj$_1JkB_3iVX2cm!8I8sRIu6ohw{oa}Zy|F79d6aP8s!R# z^s6*A7mGHXvZ|@xwGV}^>m;-9SH1HJo z1GohI0_?X?pZ4ejP64-o86Yg6dBl{fz>rM{l^6sjfPiAq-SiYV2lQKF$`yx!N#s&C z1)kIlFb)h@;LD5w;4<(Id*De;17}Qwrp0mK?;eXaslR|jMu|IO9J`l$UIoC2L2mky zC%bFVZdyQ=Q0=h~cvJ$wy!stkj6e)iUXKJ7{<6gNu%QB+q{;eRVZ z@jA4C!s>7om@Pr^y7UJ5#+obofTTB8gQ`$#hTLD-QW)*eY)#HO=$*M)-z*5 zHF*#O%Z*0kljnJhrT{$8TU=RL`4j}fa)CVKS@0f;on5U~TW+;ltvHV3X0y3IJUskf zH@xrrOHmYkjpI1p-rjE2>-B#Xb5+S`qc5u#*Jw08#~q>DgiiQ&tgWqmE|BxrGz0!o zP3U>vVzNM8ChWj}N#-tit36A?pEU7b+S=M$9~v4`HX#dM)75pf(|{Wq5~i9EMUj#T zhT%itTBiZ8G$qZt62A6gf(7^xc;1GuXiVDG1mE|U^8D@Q=B8=*5a|&P0F3H3Aj^a( zin^LmsZ?yiw{-^OUNDioCle}_%2E_X|5=0&*=d#U8~lJ=COCo*fj>dkM3WzqWx^NV z_m>>Phdb<4EqqX>2^$+5uHZx9HCUYNq?zClK18O{c845UCOCi(k?Aw@Kf3{MUBf#x zp$_sOa01_KHrGvckvTO3j+VhTXt$qPFyJ}J2+0Y2FTZ0*cR{`mI)is?!ZnbFz$v^# z6GlN^hAy~Z6Hbtbm#WDuycYj1 zcfr@<(@A)cVS!S@)z#IHChu1RgOSvYR0BwR*mJ^awfbQXjmF-x^D;Col*eOxXgE5N z1rKr+6y4!nX4R1IJzZn01cjQ?h27xW@t_37>eduJ>>C{9$J!|}OJW$BCr+ceM{uar z{Q!BwSgUMNldACTm@EN=sve@@cugO0rvxy)>IoW8o%OM|_6afR|f7;j_v zRM`l!_trINQgg@#Z!0l~98_`*-PTJ|`gvc> pN8Zv@k%!rRg`v*($q)bl002ovPDHLkV1jrC@XY`K literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_detail_gonggao.png b/scenes_live/src/main/resources/base/media/plvli_detail_gonggao.png new file mode 100644 index 0000000000000000000000000000000000000000..91294ddb18d600b682f6891bc9b2c64fc824ca7b GIT binary patch literal 1467 zcmV;s1w{IZP) z7Q`hhlF*r)h9=X=(zcn>rg65unKVt>w(qYG&%5lq@4E!ynb~i<&+nY)IsgATD@ntQ zsy>3>yMQ6R6WgmF;!JJFwX+2|sTq0i8C(a>;(X4A?XB||3i}8i?zuxo$rU2sIFCKm zhI>~tBsIZ~CfL>pTdlCg0-GCPV*{+OgZMhw+<-gf4EBuAi5xN5+DCw)8%s(Xa&imo zYJsF?J$zFGY^;a%^#UGehS*w&u7OxHa%u+_Qy&5U3tsvaVQJ@Z>}`eQ7VuQQy%7>M z@D26e%HwJwMuA6F!|EznRSBCcI5IC2HZ1tDi^Lx6q<>E<>{i2@Akhj58u+?8h&PMM zV`^Yc4MeKoD=J`FImDUiPwOIf$jT3%^}=^*Do?QJ;cJy^kEs>#C@s7KmX^bkGFVeX z|Iyw-Zo=9}K-xJRYWNNh+$!LkEuz^5;AZ98Rh36niSO)h7nMI#Cg6)p;px*5U5mqS zPaNvTlHB48-!=q1)&sBh!na!C)?ENFUxV;cSae#z!%AR&F>JMB@qrg!A#z_E^6qBX zsgYTNN@g4CV4c|ukJiA`&%vF041^3Mx2oVKm{$Y~N{|nCt0ekb7xrB(dW{djJu)-< z$}FlHBCEu2Y&Suc(M9Fg5LPTIpJ#$OMKG%nVrsEVk|Z21r49FB8du9qUHMuw9R3u# ze*~9X5B9{Dca+Li@TX2es0p{RhhXWQ3mDWg(;18+vvfP;eF3fC!L?uE!9RmT)#3a@ zT)PK8^AyY|fRKDhYQ`YF)QN4tV3cO_ziPpf>(;`NE$pfG6@{dOj?z zz$T@4;Y@7wV=(pJL!NJk_M0P1K$d;sA^9*p52oe9%1WHlzBXJ5R=v#P&E7*&ZKBCW z5^mYI@?Zr%H5WonxTNh($OF?%Z7`|?Qre*H#>f*;!-H~RY7PWuLr@;Fl-Ptk05`+h zTE$>$y@%|3hy;GW?+c%zz$azF)Ldj~cPlP`GK;E)SM0)EqHCb(+mR*k&2PT&$qGCm z3ud0eCGGFP>Ca$RS3yK2tgL|LBN;I}`4xh9xX=#|-`(@=fYYsr@D;=R@I$4sa< zu#e#Nb-4X45!z82Rsx+4ariIy1W;!%dGK;49J?gsHc0~?ufQi};Xcx%EU$Z7u}2IB z*NoDAZQkqc`a$@*PUATcn4^b}Gs2kTFgg?Fmng$Xk|gQI!XM3qu}0(TvR?vfd}Q` z7_xGIJ+aY(WsV71t#J?B(`-6}@xU`+j1f7!6w9D*KAd>7o5-kY?6V7TYdd`~jZZj< zJJf_-C$)!(BRvFfYs3&%1wYE9U?J002ovPDHLkV1nx}z&Zc` literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_face_101.png b/scenes_live/src/main/resources/base/media/plvli_face_101.png new file mode 100644 index 0000000000000000000000000000000000000000..a0159457a641d54abe01978f269a496fde79d645 GIT binary patch literal 6333 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 literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_face_102.png b/scenes_live/src/main/resources/base/media/plvli_face_102.png new file mode 100644 index 0000000000000000000000000000000000000000..b85168b7b1aeaac4ae2173090dcca91ece98e2fc GIT binary patch literal 6158 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 L)KsXJvkLz|$*}7J literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_face_103.png b/scenes_live/src/main/resources/base/media/plvli_face_103.png new file mode 100644 index 0000000000000000000000000000000000000000..9f4feb32de072611c016c0cf8cb30ae8f6ebd054 GIT binary patch literal 6824 zcmY+IRa6vww8dwJA*DgO8w90ugaL*SiJ=6fK_peW1Zhd>mhKMeP6rSex=|@XB|bz_ zkpK0*-MjWWXFr{F&cl8=zi70!8VL~t5d;Dud8Cfg`{#-OTLd`&`gA5`%s+$MD{3i1 zAdLxkZme-35F7|v(?Dgj(DXKq7Np(d>IZ7*rX6`p178k^gS? zq$RpsZaHsDDfK{iy)!!)iM*JN%#&q0>~)?DRXs|4R$_trmgk&eDu2{$b2{P1K92by}qE|7_2pewlpvu z4`$wgwh%D!7?g*B-Yn2%1^Pq5VjbA)1O-uG$`dq%fx&!G7YE8>z?cKL`2{u#z*PQi z4KHZ%2JH{QQ8$>X0{a-yrv^650VWkRCW2hb+hjbjUkj!U!1X@ZXao77U_A(o>Z2LS zKvvjoB?p*x0e!DP0UhX$1Ea4%773WO0gb*OKLB8@K~^9bM}wn|H`EZY;sd%Bz>pgF zUII#4!0|AcGXk@gVBP@iW`pGy0BZ-9+(ET3nAHF!eqcxoEZKuk#$f6x_?7~$zJW;# z@M{#zzXVBdz?3%lQ2{VIU^fG#1%WwxFmI|xO?cZZ23G7qn>5(V2L~;nPYLWds!$Su zlL;{Y7;Hv@|N6n{0@w@(E4JY48?X@qKD&Xf7;w1(Rvm(9AYjc2)C+<0Rj`u)zPtv@ zHegN*{GJ9&=HRm@nAZVce893LSTY6k8eq`?tiJ#Yx?s`h%(ScGU(O^v^|bX58~b{v zE2}bp7mckI?qnS<{II*6zHP}|_%AVZM?oj`jA}dDP1NM_^y=?bm#MPtEfK>}t2YlcV0G1zn3%vibbkG!Hz9k-jSidh z`+bn1myu6?-=MC_4B9ypD;BBM$i@zocdx zTo;zH&g6;jaO&rrxjNd%JnGP3p+JI<{~(D^gCk{OQPSdtOHFOsBQ9Nzq>QjIjI+O! zY7lE;Qu>#*P74c;Xu+n&#$P`ds7=WcCjWkgLSZXTtfm{N!~B?TLOFCW`>p+AEKhl#B%PevIbu{6t87;&C! zGfyIM0g@*vfBf|G`;^^CG>%!^F+#Asu9lQd^z3QOY5j;lnD)(Qo$^#1fNa-;#03rQqip z3XXJOAF&|XL9q9+GRCv>V^XF%`C1EyxmU409L91mK~MHc-!LMCvmE*s|Kc+2kZ#^< zz-L36oRE@q_FYsS;i&PH;=DRStCDQYoca@tbWr#@EDj777^4Sf4EZP}q05>vo@ej! zq3S`Y1kTJGj!Hhd$Lmj~5#;K1=3Q?UmUhfE%l9WdHlzk#(5Vf{l9fC(8=igG67kF6 zvkk(G3F}__A^Anaw(&3*Zznfz=%_b?aC;N-Ekn@+rkaR_=y`JFwlH0@yYMoVerf-( z!4^Z|TE8=LXJMql1F3v1JsN()!4iSEkS0~@(0voeh*0^U!OdkrC}D%DNK(Ei%!P_R z@fm%^#lrq33cm+e8l_JvO}uktzHBwpNUlK`9p$vcpz@=N(Fdk(Y7|~dx93=4bHu?y zoU1`Pq@H?!XH6&yP2P~K)AjJEbqMwz2_eRp)(ulfc##->Y>SQ@*B|qx8+_p26-!oU zaHWr$W>Y*@K3S4=r1Pd8t;i3HV|tq_m%xfCMn_sf$~Q7#AM}sI8>Fd}{bLAHEH5OA zNnwur&lO`wVc8OqFfvs#Bm8=-Njuaa1QO9WjMDQZk!ziw|Fc`u>fR?*kn~DU5ksZJ z%uScTx_kdV*$f+|-pXa9A~CueH4v!7vSLW5%9o^{U&ss>-+RBQJrhIRe_G;j8m|IeU7WsAHxh04fy(qfQ@}~#_~~$e15CvkLHg2Kvij& z)`w(5&EV$UCY{airE@$lIwMi@4z#p)tanaZt*=80bk1C!nd5QO;i3Ki?EU7=G*JmN z$2(@Zxjx;e^m6VYN=_UZwO(OE$2~e#xf6va{QwV_a^Ra;u>#@Pwjeim!vJaF$!>O6 za-5yrfffzT%yENoZa8XXMFMfgU2C{p3#ISbLK@oWKc;}*#Z0t)C^&8weQzb|oIcjR z^5h_Ne9xa;b8LpPBh7z8!WKcZTekgtGFt-cN!YW(u{ul}Oh@7Mq4RItDsG8Hj?}D* zikC#hN<@eLWN~dxO;N2T?WCsqGO@RRlB2kP$;5#^CX5DkolN;!pFr|B^QtE6jhkzO zC5HC*C84}xk*Rz1hc8P`wB+HQJa5Gz62r7K7~e_EoXG$#rQ~b5I$V#qapCAPU;ZK^+E5kD^5r_qSzwbvdP4l#ss^UCn)so8y9r+s;6+|lnZ4t5m_ zQj1c4{fZC~;TfNqpnZOTm-CL%+{~;dS6S-4aRKr89t<5Z7#gs9-$x}V3rk4SqU!Ob zohIse=FB6_fItrqKkAUFoKD6T9EW4qs&PGiyZ4r^4ktXBu+7;LAoS^Ac;^KD@pjaCH!kG%zMWsSu=|-EMe8 zL=qOlhO{x|r5~A?$iyF~$0-Me$YU25C2fSSr+|i1WWX>7*_4I7Uz|TACD&{ z%BDuukG;bo?%u7fjTA#I2W|1nOL2F6)>d}*>chj_TxDhE z?X7;txyf|FEP1iTB`KaVVfo%8Yogs1eY=@CBNKW zVNQkcYYoCzxU50=_L;86o%04xLs;dH9UO9^)G*jbOr7lCk3|o(^RdUjf3Gp&XKfP? zK#{GjmO;&)Kh)M1p;*h%zuqrDOZs~4=bdeCwyu#!`JP{0U;Vui%fkx}AS*)g?#HlA zokUhw!Wr<`;iZ8ZpGvE!Sy~apCQt>w{J{aZ*If_s=_~;6{WE03UJ*Dry=X4S8M-F6mJ_$D7U%abXv8_&6kh*IC>{bfT_=8G;?y&-Az_Hb z{N)cH93*$3mv-@i9p4bsKzYwD5@Oe4C|CT$uP+VSaq}dkDLJ|&p>=5L*k81}364SO& z)EXif|3j=V!MEMX_c`C|?+y&?FV@<_L|BHSH{?z4GCoG~#x^(}yeff>y22%6C#~(- z!^!!eaE?4qHPU`ZpFjVtHF)7eA|kKbq2zlV{B%pBTF_>X>vJ4@QnPjlZz5F^N=1c# zI+sM$09sOOI}$upQH7^^=KsdL@PWTCXy5M^+w7Cg+gxbUmUD7;^1x} zbND!wAw_JTSVfF+6MN(BZOdvbAgfw1<__1*8$W4Y$}6#gGx_~>;Q=Ju)+Q!8ltP`I zy!#Bn&W;|eGHe`&7nIK)@E3#>Ln_j_>0yd7A@co0QU8{UW_L(1Z@a8z2 zvA015uT+c-7IpB|xz`-n<(kIVdPfe;26bT*NDI0HKcj86=q%y%n(aqww-V07m)*Q3bfi)J;6lLR|RT=xOw&6#W z-PPCgoeFtK?;Kem5xv23%>X~q)fQDOVl~dL?N5IybI3X+%FVWL|25gZN`+;tyYb`6 zE>V|C&M142@175Hw>48mr**iZjo6b*2#S)O;x7603JzI1YwM<2 zAupq9VX3$NPqSzOW^Gbiq=-9P;DR}R{8L9__}PjghsNk}v6Ffw6Hz%f@2obaZo6zc z%i2I;=5x~t&OVt%VJX_OtZJVQF&Ix0>N*jEZ2WqF$E6@DK-b5^RwJ+7Aij-S9{9qQ zp!=61zLb;30WEy=45mCe=1Yn}hu|Si1mu>II6qJ$g$ZQaPZ))n6kf&0rew?;=iyS2 z%N**coQ0ULyt;?&xGI>+L{(6*U%gPxOS{)talhuCfRkgL7lXK-;YVo#B5`#wrt|?m z3i(M5JeVc5yCk!L{j;#lB7g-+ia=J zYm9yYZWU3*q)cBJyNie%PWO#>mbONF3G5l%0|Nu4YS(w7nur6|V~Rh_&L$U&KeMyY zuRF2!^oHSI!Asa;IMb5w)nZmiHX6(Pqp@;Tk&5WTM)7LpXm{I0g2Ts5%cfoZNLj9D z3OF3)f6I_Xh4cgly1JX&+uPQRFwQ~+)0 z1jmn@5UB@`iHoZ-^Vr6i`}pMCw@0lzyYr}qoxquega&>rBOsJrU0oaYSEBB7W$MyY z*w-|3f}G)r*naN`vdYFXij2Fi+L!6#f8WgZyiQ8`_U&79KNK}KHnu_H@J{2>g(bhC zN;+gJfrZ=t+u_t>ZJK--Zx@@cOaRZ$qm1YFv`uLUy0pp`dyV=&sHLMy^vlob@||R; zq#(0mi4033B8N&97b*Z6w+EQ%tYqzk>Rp#axsWPw>NHB$*pHFfquKflao)Q zqpvTP=lu+oafEv17n)k3&!m+asly*{&#EoCS*JXBOfk*RI6@y=E*RI;R(j>+iCPG)A1jt#uY4N6CBJU}c-kg& zloJW33{HjncN)5Q^tiBThs-Ny=tN_-{@gzFGs8)~_I->l^pDAJk~Zm8!i~=3Z6(YN z3DPj@p6MwFuE$kqJrY2n7YY7)KiCLCwVX`U^FNu5s)Y>M$-f`uidl0A8-G4+u=R<# z8L!ZThSTXRz^C`%sRefF(>LcF7luB=kkzMKOl7t{cbyYy1|0R?jN?-gx=b2(J8gy1 ze{n7hqngvGHa^(umb9i(MQ?>Z8q~OI(b#+mOnyG}|k){oKaH07n@bS@~{!_)awSY0{TLyLdc-$)^bg ztxJdaKc6iWp^VGjI2>hn7`!=LO1s?!%w^mLisB}l`NH<)3B~pd=c@Ie)D_D4Lhx6I z@aL7pSSm{O_4L=G3R*+ndP^maJ(DhZj;hJf(&0^OplbJiG1u*MlKpLqUd;Nk?X{08 zW+K9tlKz_ks%{u31aBwlLt0n1ET6esGrNdysj?JhzpMHPVbn8gYovjZk-omZI)|=M z@^B`P&~qc5<{Z&iGjR`|3z{Ly{@lYzD^R9hg~`Tpm62{xFXnLNq&5g=%|(%Zae~?< zY0GmG;k?t%3wM|7BFDbJZzvpyJ*kwX5Ec{?+Wd;bh(u*^#2Y&eEK>(rM$dclLMNBrQuI3s7kXbeRuSmxeE!Q=oh5b*%9O; zp_z6FP8o6?zmRiNo^vR^@I3b?QuqCklj2@6X!i04)t(U2kS}w?TE^~H@qQd6 zg@(004hQjCEx>BN^8HpPG#M`VkDb`a23)!_FvPKY*dAw#P>pDtK%j8zW~+(r z%5nHS9bMo|Qly7_;_k$XSh6r8#XcQ-FSnDQR23CQd~lG+&#J>EqpWG~;Z8bUnRut4 zM>|&`=-{SO-{&K_nx-a$vLa0~o&y%ODRc7hVH5EmpOaQaf@1cNk%3?V1=hl%A}qNf zDZPz|=m~oVKHuzjJG_(>9JL|SBD#0xy}6%%^((GUx$g5*t`MqUB?q85s&d3++SzGs zx8)*ot!Z$@PoD%sbGAd2^EMafW-zS8gx&7nq{X@fi(s)f-n(wL#4<6o$8_g!1%+it z()!tP^1tnxsd^H#7{zlMExI8ja`LUe-Rnn3@sYAy36noti4}B6i43s1iIeihnGxBL z@s3!rcy8ieJU;vJTUUUMY8Yq2&{SH_0emEQ&*asy>N_4wQep(&TBEIw)#0QK*&DBO zV#_o}=D;}9jc0dno%S-|crc2mY_3o`h3mT=E`0qKSKblI8(|*(k%YwIRGKU&X1!d( z{+{(dyq2AwKR#H&F>%N6VOt^yDU>c`uSG-aP8u=#o_g!&2=BP^lbKhV9?FETUW8~h8?b+zslH~gX`V> zr-$8|YQ4vc`wL$H?7H#Ab!*zv26K<)!pjRo*;D3^Nw2!suFHcSIx3vxFCLcX`}b8} z+4NFIy(>xQVe=Y=s8w@je7{`MP%QnAr7hp}I$9y+zcK%d`G7*pd*1|l)~^$-z7F6> z`D^qA`l$PEq7yRY%Cz@_8w~Yc7uzQ&NA?1X%Yob*{x#CG@0FDj&D(oNrx|Up|8AGE zu)etrtUlk2d}uK{f6Lg{J(<-!FK&6XLe-F3`|p2z;9Nz|;B{Uzb;}B=IGdfn!I#pS rv~W@dEda9d(U=zfe>CmU3UIkASK|+QPlNv9b;u(XZB(6-Rp|c!fvYv( literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_face_104.png b/scenes_live/src/main/resources/base/media/plvli_face_104.png new file mode 100644 index 0000000000000000000000000000000000000000..07689bf70522bc480bfa7021a81277565f9fddb9 GIT binary patch literal 6740 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 literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_face_106.png b/scenes_live/src/main/resources/base/media/plvli_face_106.png new file mode 100644 index 0000000000000000000000000000000000000000..0b64f9aa26e622374def77e954e9a587824b6fce GIT binary patch literal 6999 zcmY*;bx;)k^Y_smM}r^;CrE>&^wFNQ6&^4}n04l$8)#|1kM~hKupfk7bd?{R2!}8C4kw zq%Miz-U15(!GLJI(vjc)PZyNvgCZG_&iRl*46=1VnIZU~2{JiAg%L=Df@DfiV*zSj zKcwP=3=WXX1FFqHktWFE0Qs6Ag9)S&fKnrn^$g_j{7VBLbpEE|fwJcyp9NIE1{sW? zND$;|fsB6%oS;kxWO0FV<^L7Q(E^{$!DrL|#f2K6P8%Q%K&39o69r`|ph^prDS}iC zP-6xvl^*`X`CAkCuZzBL-L@QGWZ3H>Px(GKnW+S|0ULOWA>UxATz6YN*!tCFA>QsJ z0uH`a6{LZk(NrENIGE0f3*0EPjP|s&d?`|{0^7`aS*yw6r~~(S{p#!I(u?!c?X@K^ z-*WufFu+z9tRnCG(gBk1uH3aqnjw*u@S!j0=wKHduYr{gaJGA#`DQ6tJ6D(nbStO{ zFi0^IAlRY$QqMqFJeV(zdW`+>E$pGuWOAq*%zHeHc%tfjKtB%{_5+=o!ZZ-jAp=GW zK(7yI)dT~tz^F5*kpW|YV9Emw3xmmze^J+9TnkKwfrTK@VF=C!z+4nqi3h!|U^oGc zCxCfhFsAqL-9nTO9jv5+rZ=G55q#DL*~H+xKUgmWTcu!14>XE^sn?+4IhcDN0EK|D zS76Qs44aBEU_3nBgNqR`U<>ldKyNshNC8XPpwkl!Mu90uaQhn+(t-gEFb01pV*u^) zV9e;Dk{Jw{gFz#(odrgpFu4TxSRs3L16VAIPC?a>fmY)Y{Y_%0mg;+Ra$e(5`3;kFmaDc3xA9G`=ykX`WY-qs90UIUD|ijpicJa4ABow0z`k0-Wst;>i@h+zf(d;Ir+;@e-$Q2W2u*hmY(7(~t)R~g3MIwut->ALMG$|Tm_#~it z)`zBi;l-+&GU$;;7*YLS!ioYVd;8WI`+pY+uwcyODGl3(x}Pr%5j40HtVV3_IvH0n zo<*M8Np`J1QhIyQ@L4ur8x|u=uRoO-?iHr-!o3H^(6vgg^tMz$e*Ni~YsRA`=ZW)P zB85mvaOCWEM%Vt>HOiS6YC(SJ=> zos?2T39|d&g;?MJ>|RCdw`-^~8E_LNvijxO zl}$w>x&dmq@M90_^}4v$6CHy6i1n%YY^xFnroa#I$$WvUILkVZZG3V?tjVDEzjv1h zM6&~H+@UENg!?LNw@%#+eK^(^VazyIhD6anm}JAvn{R!7zGY+Gd7;JLcY{^Zhh<$j zSd5b=pVH+jI^>k@Rp*ir`$8SjTG5bgec~H(QSN)X_vG<~u6UmXjdgQt3zUjl<%B*~ zXG>`NvJb7)YRGTQxRki$>oUZYMVW-WlQiy0ipn!Gvi*A-rU8#$;%iY7k~c@3-4>+V z#oOtbe6fA4D@ z#cZi9?gVRA;!f9OhcHU_&o7bW1BjvsXL3tpIcsT}e)Bl$ct$$YQj&o#6ZuwB#qwXG zlwzckeL7mu#zsoNcFPkaT%lFiF#zwb!EE=;mEN-Q$O+!Fl$qIQ8H+$~t`p_>l5Krq z2cKkxlGxb(Fk3R-;|eWrp~>&Lyu9F2kSljch^6miiH#N}Yv()E3@II@=qmZcvfyEGZSu#X47dqNkY-clAP40Wa%hrf$mu{96JkInUDX#{Fq9z zQ*J?L$~{ZFLT!DPJteLR!OWkCU?ybo%(*BE>4qv0ho1&LBG7+bq#pLvK$djV;un*$ zhk(@AC)#1#6J;;C$phlXoiei&1n&%KmVHW>ag^>FPSwbi)}Dku*Ir(t;(c9jQcv8&coERR^POok!@u~hp2o{X&UK70 zjL1~U4a-hir^cO}lA?}|U-Vj8pA#xuM5uZE_SutmE5POW{e%?L^IOT7s$(_W`t5)# z2PXkOKHZ~7>y3pIMN`yc-XnuLQ-Bz9O`;ZxC@CFTupqE|d_-}kAQeyxybT4b!+fk zB7@UiZHZOmrB?CRLGBd_Ivz`+OfC~q&M1+DzjF(1betVI2+=dMWIHs$({wHVQu|cj zgBfCN*Y4<>#kMxvp56uL6$}^4Ca&KG4i*FEzxs{-F2M^8yX)=ss!?I8H|mx<)xQn$ zcDPkw5njf|`<&#B5Pzc+8ZH7uVvcJs%%tIxAj_sXo}BjRv9;ibyhxV14>*f~K|T&2 za*@_U^o#Q6*JEwN1Y$Er?{uzXnDs0xI*_!utg_z{>PUZYz~i5VjbY@rS{Di4vIP|mm`7WON8G|zSMl;mf+>Y zJ$g=*cvwq$2j#X|`8gd|)+Uo3E-fIwM@{{xt+36fOY(eKTF-ZiI(&2_J<~`2oQwco zRt_o04>UQWM?LQBYm?4bOlvTwe`wsXdK zTq4HVlC=FZbgxFD91Ynn$>7_Bjp@74;>EQv@d){@sm*K2`Mn2PJ~hvf1{akTQn71{ zp;4-5IzK-j4b8Zuvg%wPW-Hd)j@iFC1O|L;ryX1G+TTZAH6q~7p8i@N(UhKN zm&@uiGhgvD>0`R%xy75-R_aT8Q1v{`M?5ya-LEhUy2X0^C~+3P@@Lsq7s>przppPh z#H6Hzq(m0QXDHszIu5ZG%r5JR$wghEjaulVpQ#B3xmc*jGPSkLC&Q^@qUN!rd-|$& zE}i%6$Ol3sNc*QLLnfeh`ng@!EJSc@ZMwM&>JFV)Dnd`Gt7J?oR5c*voe=krLxR$%ho7 z?jCu0dCl`}kd)?^F&ia5%}B5MZb9olzp34@emNxv$3Id=wVFa>!o$Kucq3|%LM7}5 zqL2^JJtc&BuKVu;x{&;G%?{3ue(0J7{OVasN3?28*AhzAQaZ4&udV`x}g!_Hdf7FouMmJ$+J6q&u*i`HH;;$FDpV&E@j%HZER zFIu=1q@`^gAJ-($XFXV5ed9LX8A27P%gSnv%3-62Cga$vePDu}80EaOxJ!C!DVKDz z^Cx1eUnv-r!q(<3jtS7AV>};iNU;4WLy8x?v9N8dOX!{On*AwjKUSv1Uogv$6X_#_yGI$N>EU&(?BYL1KKzOq9o zTB_{s1{WZQvW00TXwRIUqV-g;mbPLJZl57g5v^@+cCnZ!aP5{-V$e))Zk^v66-$VY zKSi5)vW`h{e4I%^-TXW;B#eYXMR}ZfkN3%SG3lO?0zP|MRu)Z8Mig03MR~bRbfi9& z&U7bz9Z7Oqo49fW+_tEiLBc@KyScF(8uF8d6qh11g9^VxlVMMnyix~atoe8Gj)Mx|p9?X5Qc1HDzp_a5yZP5mM&HWF}OYDTJX(=oX166va+s zAeM5d{`i%!eg=hksZNhfVAq*1#eag1udAL)EWQWiSeqa8!>LntntQ5b$DAZ z4L9nqp-TKuBzWH^i1YCPgF*#vQUu5J*Tfi$Po^mm^TB#N=%&Jh=HVXpLl*y*oV2By zjPk86L2-U;3SI*$fEE`4w~(YHv)ZFUSDl`Ol!|zZ@6Um9Zf5tN?&+rZHt0@djFP%S3`b_c*#fRr}Lbu3^CY22c}sI zj1=()yyzr&um}xRE0WC05ZAfz!37mI^(lxo?j*_DsU0^tRdDT6+^Z|}%-eW)B4+nf zu|Zq84nBGnStbobPDX3h^?A%KUUdFYK9V07T^bmqYGW$aD};&$DH&Mln5bLD^5;xE z&}1^GY77MLF*RoX@^5sg2JC6CAd)`zJD2t*(;^nRV5LqMg|PMRiqj`YFNtuu^kpwK zwX>vzS46)?oNY9R{}YWO5M> zFS}*N2qSgRs$Q+1yT-5Gh{2OYsr2JRVNk>J%4X=GE=3Y&nofzo7a zy51YLKv^VXA-~!sWqZunn{>nRo*tVm-Yn>b_obFqcDbs;gOFP>%-ck1VU_&D}nYFm)^r3~<~0KxhxC zcrLN%LW^g8S*|WA%2ls1H|o&xz`6M8Cx1DuQm`XWez_h5>ivwhzjZ6YVRp<`AbYZ! z7Ap6)TRSp`Lm^yLV}0|}YF`v8vj!3Re4oNBaP`}#$s)$2O94hYzZ;|SIHV?1&U%_` z^rsa7W2(A@Qv}s1O9Y@1U*QwfmB;tj2Vs%Npg$w`n`#<94d6gjb!Fn&7!wdw#T%Lv zAdtzE{N6?#;q-2{SfpjLW!t;jow~|V(!$YCyNzoEY)39n*gt>fp+JxEg%`#&HBD6d zFMP;shjET_at-OQSmL=y>5qI`N?ZCAnO{)NlxXw0SuIYzpK63c-ocr8Q0=n*bzh5Z z(1v#6!v-6#DG@y`Gtw;d4qZ~$z3M)-aGafToRAj>CtKUyU8U$cSC4|8b7s*Hg{I}* zbVti~pGC)L+viuka;mw^YOe2-1sB{YGlD2b!F;^X#v9+#y#0X0k6s|WUD=wNK}V%7 zy`rX4@Tp!gv&qZAY~(0==4~`N!S}XyBz#8;o8J7KxA`fU*vtTV)nyV zO11P6yRTw7CmjxrGk2I2l<#y;BCTK;_M2k&pRPN6ew) zeA|}?CMA{`O#BQ&Gt&bkn!TSr`tjh2)tIpJ=GhwKX2<#G;^MxB&CY+9vgvn6Dhjk; z5Ow;8QgXHDxuVMyFjowaH@2ZH1l4XG#Pc9|B}ICir6nA^Bu24AxIBp~bfmS1!`Vwt zV<`OduPz;6#`w5Ha(3zWNYHz$OYf5xh4XQO(Igne(>EC`p`oGj@@3j)>2GmLrJdRG z7QE6k3Bn7Yl)hMXKaW!bM8*88st$Gw+*4vy_)gXJzSSqb6`xomjB$P6+5Olx&O7Rx zP3g85!{1YJW1}nuzuhUE;Qu5NbcK$qO_o-Cmg(-_-{zsRrg0-Nw& zv<*#;bb0afitk+GkL|kBA7XP1!W=I%%ixS(F}JzEAE$FlpR20LYCf=bE>}wUgNbO3 zX_&uTlf!3cFn{Vn>%&9Kp)VPXtP-Ewczo6AGMS-E%02r9#-upokg2njM^9Y#&fsp) z$&RhN?Sl_{!ggmUMqg)IOg*_{_@Bn;7GXOb<^mtfuh$T`2MdfGGyFO7)cQbG@766-10d@kF2#BfB)WZ*sb5=;d#6*6& zPdD&VCH=+F`}Gp(K?_)aDhA9Nx89=5dwzwXdG`w+#?o+Ob(4?~t}nDu)f z6)MP9307e|x;rZv3W5}msEMWRu;<1pVR16A ze@P8!&JC*o@b&OZ?{Vr564pMwTRIDHymXMYX`_IB` z;P#sTPJD)#Pen!Lqzd*@_)1>2;Al^LfbqJABuqhHzSv=7ZPg}2m)SD}>}~}mK0^|@ zr&*^QrYGhVo=&m`hLjVbb~q=LBpLF^cN>OZ+x%&^wNNCfy}cvl$vc9i3y&hJe5aaKV>;-Wo_P1r_u9K* zwYfMD{6$(=1#K##6XE0rjt@F;z1e*sDQ&ZaJZ7|$zPi~r?#wQ9u{>K0c@>o;%|bT5 zEy~Q%vCZdQJhfLQvl@gtoLzluTaxd$?-o$4BNiGtt`E~>TX}&~yr`CDS9WI=Mflg~ z(IYX>ei|0?|N0=-%nVW^3FH=G37vy_w8=M5?>EctMx_KU4mzaAzCXSjqWNpj%9@0O zJF$7bsUA;H;-a3*=lhNJWs0~+TE7DE z0XZRANvu_rgn-@HD(%c8m$lrYaBN8d>xA#)CF2q|;jB^Q`E(M__x&j>eMyX0QxQSo zG92kD7iq;x;YcOJ`3SxOK@S{jz_1_41-xL>28q*iKV2wyBh%k=?>`-DFycT z{_op+bLQMLb3WZOb3fdBBQ(_&2=S@#ArJ_mlA^5ke;W6{gkt?yCsQ9r{wLU0Qfg8V zNcCreyLUJc2o^+BRab8J+gn*yhJ#Q_7eSgX%NN1Yj8h>>PW;qL^6-bWN3g2V{{4&NTLMAuR*#tsCWZ1)WNrx=tKgLL~xs`1yC>l*QqcC>AE135oBwF z5*<+S7JO9)WjdhzEhyB?5TFM|dLUO9d=tyyWdtZSP^h2CM;Fga5Aw7wP|D~6jg1h! z0XtT70``AlUyBLGIhYSR(HCT97QK=ljI|n!^q9^2;K)t2Gg4n`A)ovC^RFu9%}A?- zim*=-Y}-+?i{IW(WogbPi`TpA888ry*^?}IlizRGI||YLEls>{D(m(!HhJ<;hZeru z{yyH%ud2BCU@R|JmHjxG0VP3b{+t3F{H(R*J=opNvJpn1lAX?EUVYowl}_ipmRC)}hW0PZFH?=LFz; z((QU5=nwfSK<`6O96*HwetrYf8DJ|XisO+zDcnd-4y?9D^&~umMS$wMP+z+ zz@RUf@dPy*=s#y*E*!K;fYnqm8VVW((FJr~n3$mb9q957Wgq}qq#z9rdi=qJAIPBu zZJMB44z#<2uJ_>Y0ca6L|GNg0c5YbMpc83DKmZ2ZLG^2}oe26A!LSOrJpvJ0r?0gE4{h;hMI9GJBL({I3cGq7I_hV{T^ z47geZmos424ovHTS!X*K4E(SF7vtcE7FZ7lOHN?I0E}yZC0o$10oH@SUOrf~1owAf zHyfNZf%8G|D-E1=fmIK1R1Fs1fuB0yrzV(qoybcIR(-+jD==>&PYMOIFTu2$86hE< zRyKpf0RSW<|8oBu7sU_S>N@-A<#pTcnZUm}DLjMAZ{pDX$11g9+4sj(j(tKEOUA?g zP9r~lrW9GEo!_?C?yXorqvpL^h1vitT2kja9KoEqz*>2zw*VJCv5@QM>eT=IXCPJuoOgRg6jH>0J!8;ev|LB_>;VV1o$z{6m%vQHQkQl9&%v+%^Xrtmu_ZE*m5yQFq4Kbpy??w(WMb9Z;W%w zT^3S%H%)zp2499!M0T^e3d*?fE1nanouZHlr)Gm+76f%IA2eBz--YVZ4h6r!nDTJ1 zY$am$(K-+wKv#wGg;DmhEiSGvgjUj!yG7pQ3m@@MrEw?K@w;5d$Mj`Be;U={VU$77&dTg;1L^-Q&M+gTQxN@Y z#E4k_OR$}!d>aYx36FIeT<>4YqwT# zMRp$6q!d{ZD57=4qwlKcYNAb$ltwwoN+JGLz|g5%hL(Tb!fmZ|&2>B2k`B7+Gjm0w zp}n5lr>=CLdR`(bc}CnN5rf#AXB8W546!qjdTOX5eYS+_z>h6<8+b&q?hNhYW@`=J zqPtGp322A$M$QTGUl!DH=HGaqSl$dq7ggP7UPrMJvOqGKxOVqGxe4S1N|qi*uC7gv zA7B42q1f@T;h$*lUcJ9~4n~ALo(4&I{4kLuI zHwK!iaRgKG*B=MsIJP(c!uq4&F^A=G;Z=|z>S|qu%-RaTYbkh!g%EF=qwyCwgvF-G zA%b6Zh7!1Zx?RO1QOG+ynqd`fmh@vq#w)-y3e^ken6akL^qa{z@5V$kGdt_+ANi#Y zNftMi;Pk(tJ;@QvC@cP9o1-?xajdX{K|B}~qoEcfpQo!%iDtjw(2#FfCR z7jPXYT`^*Td=k5Ur4j684sQj~J9lM^bt^ zRe^TtVO6F%odX?zT$B#)sfL1%p}KR^#6S#nC)#vF!6{AL!|nYeEgL#^1pr$!VSd#W+g`3IO6Kf7`=ipd-aUlr*4n7qNf~#qPFCh%kZD^ zQDiO83&Ja2`I}%_CX(OQlSn=o5iC`N718jOG^~$(IlXC$z_P#mDYKqk_b34g>+I0S z$V=E$r(92d1BAN;?*u8$4^CYwIWO9hj~gkcgGrX>?B6|4NpA)xeo0q#W%B2F7KRU5 zEAuNNCae;ggJWZ(kI4yCBj;}}dm2srta@{U*+*Om>C)1KVO$O#RwoMnq$C`D-JeN_ z3kUd3k=jfC`J_pP&jLnzr&~TnAUN;X1l;tWR~fgy^owERlMvj<3-Q@lmymd$I*(nn zqXBQg5H=(1{qZhLq=twt^rF9FIfG`sxH8O2yu&2w8km}83pJ?-$;V)d3r&wEubS}c z4cmHaDcZYBV&*#okH{W74G(+!H6e=nq4S1@OEPGSA@zXF$NY!^Y~{tpmCk6^pnzTF z`$s0NL1wKn1HPjQ+p|0)*~~#$2GcGlyREj^9p|jh)ya799D|(r zp+KaOrrERP$NE#@%(yc-`V#Eb55oobl9dhmqf6Ir@axPA^#qRgZ6k^F&o>w3NB!#M z5teiH%O&YA?eGe9sX<@j!$#4= zIJd@W-<925aY`#pzk@H#hMEcVZaL0EgvXw2S<}>$-$I$rUK`BAH4Wz7Rr-)^!AKjx zo3i#4yQC=OHxp&aJ}s+qIfSZrz=F1MQ5GrMc?(y^2m_99vXO-1{;TtYNsqA}&E?8) zbK9P%(jD7SDvJF45@lc%!mZSJbuj&D4?5kr5&};l|8IYu9>ZMHXciC z#kA_$OpmHwdBu>xM_0-Np&>_t9U0x-lF^Zw1IF;Q21ChPB^4yx8~+hT+^g!T z9%sgF_Q1Q5nRPJTwbLk{l#)VU|g&g|{zQw+P2(FFn(so=5n>S-H4~OgIe^ z$unO2%hJS+zmI1@xI+$P5u2J`h9A3-tl?*!>K^Ckz6=v>QD`ilBqvmeh4-bk^h}EHuVM?E1J@8u^=+`W%1PXGzWX6@i29Kr=Ty%<2W*n7?fg72=(Ze>RfbGS36jr$A?!YSgY{H?*K#7o1C>R>_k%zhQnpM##tw>QZTpIO2 z?<$S2zrT;6*ItkSuGUqdS6Iq}F`34}E-bc!Qa`KLj(mfS@eN4s0_&AVEDMY6FXSfn4mJJEilPq#(h6$M% z7w2WLK~G6XOh-o; zn!@@q4G*jD#0dvWjQJuHM!ObWg;)ht;pRAT5z%EJIAr|258E3X7}73Hvs1LBdPUhaaqCg>N2fXwqd@+5St0 zH~cdN&WIpZ8ZB?w1L}bQ+H`Cm!$K2%nPH5L7Wni*os zSr1YCj8zvv>ym2f7(V8MhuNPNFvf$Gn-aJkCNymBM8FFr9O>-A=w~4QAT#M&WUY=h zc|^&j%t?5zBrt7585da>f)av6eqPfdGUQ|~F=kKrEf(f&VMiT|`wsu74yvgMo5p*x z;^%VGf}zV$RP-cwM5Jo}BOyBN;#?>ZasSps;TS_EyK-vs;UGAzXt2gZ{)Htmq9_BO zdjUw#eZrnIn^97%*pu=KKF{PRmM~QMzTsG8<(tnuTbwPc#LfD? z(bG9*gWfyf#h-1#hgtvZ(jF^6)%*}2NuM1cr8)deo$SpAE5q`3i(In-YYIFC*7|{d zy(AMv=@nTx&as2%I!}&yO+iwIWQG(}Hw5|P#~maY@};~g8VZA^F zegLn{m`5(r8zK=F%=4s9Sxh%R;loby{;>!U*%9q~QxY~te4 zDauI;Y*X?d&!lq;IBRr@%r183pDNlt_v6khmP)&E*s|EpspS>f?TXE_!oS41U`}H{ zm>(-ED{E^*`D4B(|ANxWZQS{)9`R_tCb6HORLqxNCSXW^76->%`=ykXg_nXId6|LA zj5lcnaZ%Zwu~avqB?(S09mABdAs1qSWA3R2%xW@(;6V|@-lV? zXF1)*)#Wh;eg0k~-Seh~aa>4aMz)k8SDne_!#=vMcNneCIgzqum+}~|ZMuFk9Do01 z;)?Q34p|Yu(VJ*^;znz-^$vG4P@eCTjmkR9WU)%hO{30vJ^jN^sgiw&0oN@WBO23D zy}W{#&oc&5a%4rt6%7slmWA5_H+Zw>qS++DqqHM!jp3{34(39bS))TbNdJTR>z&Z2 zA7A>`a}Ni-33KQzZ7%sPTflGq%$6l85c3lT&dAyT?vEoPh!&kGac9>&CEsYbGD0wU zmNu~{nW;rJB2~d)!Q`5-{lmW1)mx_=sY-s6jr;B=MTs~M9+U`hbsva7F}&T0n&V$2 z`)wF3D;O;M;Hhugoz*1EmCTy7MHIGB4>qINHa?y)m2%dO<)xn23}d<+vo&)J1&K`0 z^7snJZF7pW(aRrP#e6nCkI!`V=YHTA9IIunnx$W+5Gu=m+UsU8Zea9On=V4(P1V~) zSwKI074t&R$BwM%)%Q#!3onf+sEyahWNe55ttZhi|JTE>#%;1o_U0{B zLe|sA6-$j9VQo|2mjXBo6wL-0{;JxE86M}m`KI^bB8C|2ptnRVH%eT>90*QkH(1&# z0X|OjbMtqViev{Vvb<@%0awI_qK1Ty?719PEvXWGMSuWiY}x;z$6iq-0@Xbrk>8R| z@?LfId~&I+r71?uH>z0hB9fy`8~z>@^0IWvKkVucpMC3vu1Ih1WbvFk@8?Jgl8<#X zq)5-v7w<_9HyLN$L?=(%*-y?ZsSP?ZIB`h*>h?abz7H&nnd|YAI1Hb=J9OqYlEG!H z%j2wkqB;*68!F-*7~h-zs``%Xyf&OO>2e+^5*NbnS;#TT7F$~R73I1j9)C$zjB6R= z{EVW4L7URoWQ0u3-{8gcn0!7m&E2k!GIYJG!x=jv;+#V4o02_lAS!ccWJEfjD$tx! zQH)eGi7O%O<9p^K7}wYBUZ+VR5~nU2V^@IG^W(*|pSb4MG9VC`Es49THMuSaiea zco{T*c+7d;(t5JQHnpN?`e{rA{z~^(?V6f+tBE-H38qu)0*@gpG(KQ?TKdadT$rn( zn0|FOm&*2YKB79Aj>E|`Q!?@wY5X2~-{i9k2F+NmvysXEZI(?Zk{FDNxCq9QADShb zo0q;R);p#ej??a$RGN`#eCbp*UsvBEvN`+R>UvRJ0V%4k;=YU_+?fz&Vxka764Y~7 z`C2syyD4*`9G0jh1DuAf|5Bn+wCM?b_*EfFotPb~V6*B4mZpAXMP4a^zX2>JAmYf6 zk!7dp@L8j1i&EDghPnGeEt(`L)OUV!@m9EVk-R~4F66!ljFmCzirZRWj zR@EPLp2F)>*G__KH^nE-S(1>=qBASWoTW~6y2aK*|IpvrPoeMcgg89O3}WeooL4U; zc3WNYBFyJ|EATvMcd)JgT4`p#4qH3F_b$%Ei^KVVZab7=I-Skr%A@-zuHoh{L9yiG z`S!nb9J(Et_%s$4ik>qIVXTI(ySYj38ZqA1{|t#~uG%!M<~Ar^&bW2$$w<7>3_NkU zDm(NsD{me?@LcCB{U2yjlb{YW70~E48*D zun)-+IWk0ruHDc~poZ1TZkFUtM+mRPoVkS2M zj=#U2z3@D5s)n01(0f-2I*CU6ST1i5b6w;OYe@2qIXL6d-5nomPkhPCqWtehNce;j z6F(`gW)jEqnZBn*<3Y5G`y7t2h{R+ryRdrY@9_YZ|C)jf^8do!5a6AJMEh=5YRdih PA%!T(smoSKzYY8!PZ<2* literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_face_108.png b/scenes_live/src/main/resources/base/media/plvli_face_108.png new file mode 100644 index 0000000000000000000000000000000000000000..c841dda83fc4a186dfafe63129515bbc289e5453 GIT binary patch literal 6180 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 IC2bz|Kgq{^LjV8( literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_face_110.png b/scenes_live/src/main/resources/base/media/plvli_face_110.png new file mode 100644 index 0000000000000000000000000000000000000000..28212604c7367d91d5546de4a3091e2fd7da1558 GIT binary patch literal 6525 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 Ku~ObLwwEB~EQ|Daj_kr9?L9{-Ljl`|fc zGavtyQvZ@K|C>_(m>rcf9+os7|F2;Gl`H?CKbAEgnmZ!=m{I?b8<{vElrkNbG#>tw zF8!lf|E*yDkO}^g3iygJ|BNgDk}Q@q9{-If|DiJfpjQ8{VEltH|C&MnoKpXrRF^a# z|BNh@EgJu;U;mW`|BWgCt6%?~D*UBa{FFKWs#^b^Q~#h)|EO30sagM+JO8Fp|D;s^ zvt9qFQ~#}9|C0m%pFZJ-Hs5qB0002`>bCXMnbMz7){{T<#7n1eH^h`ovw=eX;;5Tt zG~~XG%YR48i(>Z1V(Pb8kzF&$cQKtnAMv+GfFcm#l2`x8e*daX>z-cWs!yzGM3Gc3 z|9Uq6h()DKA^(p|Zxash!*o9l1wIP|u3awttu(uVSk<6s{;xp)*`)uuSKqL3|G_Z- z+Kgr{8vlGMkS`E~OE3SLP)ryMavc-@y?OtRE&rQe|IvK^-I4#|u7Vi_|GR?!lQ;jL zME`$5|I3p9;Gmf`9{<6LY6=SfuV_{w5&zJe`=e+7qHq1thyS}!c|Ifmu2lZAdH=j` z|HyOy&{>Ei3;)b6|EFI6&_hBH2LHcU|Ia`El?ZeN1pnZP|GQ%U)oK6RfdATi|EVKm z4i5j;a{tg`|DYNFr5^v;cmI@N|KEoH&Nu(QL;ule|FkpzkyZb#DPs%_|Ld^-w>tlm zS^vsd|IJ?i`RM<gp$|K^zg-gW=-$^Y%N|Lm^+)K34_RR7&_|KEN8=%D}KfdA^N|JPan@4Nru zhX3!s|M0{A+id^YV*lijMidGE>8JnNW&hl7|I|zW*IfVAPyf|Y|JYvt)>r@U!2jE5 z0>cX&0000h=j8g2J$v_ZR)jJj{{AWX{u2iR0RPY>7ytkm14%?dRCwC$n|WMQ z*S5#~yw0t?om+=G^jW7?ty)n~W=q2DY@O$+YHghr1Qd`Nq|BqdT<9%>6%?q5Me&JO zv4Bz|VrYRfh=33T1d1pk-nG`==OiGQfO6ma!*v27$C&fYZw-6xot=K>|Ie)7W1z=C zkAWToJqCIV^dA6{N+wN`X!AsEpZ8Ee(n+tr-G9iaw_Y5qiDtlS{YMSy|I`3!p8`n- zzjbNvC9u7tUVPw{o`3BF_PimlP3l7+>3~sm8NAX5FFwE@&%dR5-rJM<3`qJs^00S) z>C%u_A)HM0^$e!HM>fqsPv1yNx=ngp3j_z!6^#P!))09qI|bC{kH ze-}^n5fEHwgHBXbmK=rH0FOScyaPtR;5XhQ)MvoDXt6viDoRJsNb)KGz1C+gTe~zu zP7zblx^nHM4W9u+CD>iGN<0usK4EoX+<}oGDy<~9EF8&BWuHlZ3u-f1SX7f`L>zwnLcVD{mD^T zEOZ2MPz-`-1fyT20 zw?L$6W{(cY^mUUgOfBv##9`8iC=K+}AaEfQ(+O3ogir#JUN?PIK>9l5E{tWSP8+A; zEDaruVcisEx{LAM+IlO?WVrsL0n(efEtf|R@<7lQHgY!+K?~WnYwVsu2}r<1v4k~1 zzHRc1M*(CoGlKI}a&@>k9OfF?l`D8d6Rf`4+A7MkVQ~9Lvmf`Jfb)PO;y!zaFD?t3=NS;C#Dj)4TxHS$UyoKKzcIt zm&n890Uq=eQwAuMf@Ld}@CdmW6C$DGNF;I_5gNi|w)5ctKzxl$@M=I>;0ZDm#1q z<}W}03ZDJtC-YDwj3d+tMv(`kTE7PcP=HVmvHIMc_hq1W+IQcAeHZQ>_~rUUlm=+> z^YfcT%SS_|n9U0;cYTLX|L)semJ3!!-=iW)!$?Iy_hHmMkm+O$AWSgI_qZ=C)5635 z;+7VkX1OT_aEPT?%?K(da{KCC;o)iGv%|f=n%}@Rf|^~iO~J%d%L3uDpJ`uyKCi zxBTs<(T!ara6Ry3W|lH5pj#aOID<;@& z;0b3iySyy}0|UKxF{m_ae~_gBERS13UO_=7@UVYo&$jg5#U6TdjbIMY+HIzF10`*!a@a%wX}bbfEyZX1F5O_sBn_N@ z@1_t&8Qlya{kn_j2oeYa8shnLcJ;tHULk0mPn+fNl%Bl;tdy|~rt9*l< zZNWl9yjHAcj0=*YIS~vYUB`95ZpKtGqG160gvnvOA|xbq&z?R0{{DNMomY?-)2!Wr zrukyCU>B=DwnjPAEax~oFY`y+vnMpfcLNfoVHhHqH8nNmHRa_gDdpug z%^zE%a=TVJyE|b1L0!s^M5Gm#^eXcq(^dri z#iga0neM^pv^49j&47}Ua-NQqnvdyhV6cw|L_5}irluSu3c=J%^IjQ!lRFKD{bx!@~o8L*ruv9(d;k1rF|Wy`cin-RhWf{`^%i{8jGgvk6MHvkXjx- zo|~+#H@R<3L6V}YMMXt$pW=vT=eqlNV8$U)CRFa6NO0QH)q!8FNQ!RYsSiFEOkAxlwhQEhE4Fgb3;vp%yhz<~(7 zMno7!Ay75a)3G_?^*Ug(p;kZ!GPx)aG(ky8p&_BM@l}FA$Wx7p?y=Ped61;Go>?st z(b@8vnr5KRLy3y>^I5KirpHpd*2v3s7e4C(Nb+m|_R$E`R){@fY;1b$eiaY;3u+JK zmLu3z;Hhs1t8d3ULUM!{F9)RNi%cVw2#8|hW8<-b1c`*O{x69ZK;x!oP>xYZ-=v=P zN(u2m#$y1HJ~fbA=fPQw=7wnP_4P#*PLOfvwY)qYMs?ZB{rgKwSVzl!mN9;u7C_U2 zc#eU`sENLYQyq1IP@i&!Q_Em3gO!!RFMI%=t0f|?5mloc1rR}-eTAk*jY26h&m(4wPf7}R7xDndDX>3JohoB8aU!hTm}&()iUf)7F`t1%_YWWU1L+!P z;JC^>c9VMy8+wc&$}k8Z;Nkip&Z$2|V@yZ{adaNTh=4MSMW105k^23_42?j;f_Tz1k2T<| zkb8_Gh-DZ8aUOsGmfz_hrc)S5RFlpNag9WRL@>Xm+K7oS51OD6=$QaMuwqqYAylrgK*uXM^Yp7>CSq#A%E14SSn z(MDWWl+nLfaA;lhQp@PkB5BknYm$Q}QeuR~K#s6D)n zjMYXQ&v5j3R-ysObUYi#)T&U4SMqVNWyMXw3Fp9k&Z`7MeK^k9vkVC|VopPe0La4+ z{#U{|i>4U+{7^~Ikn-tSB63DiR3*?Rh6$uf< z^*Q^$XoSSW2qglb^B#T(bk4un!WUoWcqkQXjA|TTv!>6`0Aye+4E1e|jaa8kLX!o7 z>=6hAN)doCqJI~02uV#M@>w|wbS}ZRwAeNQ6_S-ut-i-=wcJ=w1JKx@Tx_Q+#gR2u zMnKD&^1Tw!W1i&*R9nwNnmG(e{skrwVHBN0pFvb_C4u}LN(F(c7!WH&(1A?r8BoKu zD9DWC$-a?IBoO2nOM1vL3TY1XFJ|a9k_gJ`^7x}1XRc?Td5vH*R=r}Yn*#aHFC7b5XgQ{ zodRDm;oLHDsE3hN0J_it=mH1AEK4DQf~zm)Ekhu99i^xc4{BpgK|PHMqo`1vaq@9l zDE8B~_UC+;6<~M9(jI_VRCk^B1XSeX=jZ3_(OjM95S(D|yGQ6^)$5Rfc7>7JA*|G~ zv9Zv7V1sYr;6U9F0G;PUnOGRlb}Edgc%?3KoHdJeM8y^s(0|mafC_2iA)l_PFwU?M zhYngNS8HI|3=#X+4wYJsh$5OQHH@w_|2U6rEH?T$^H8W1!X*bB%QO!id~og1!6Hyj zzB&;3>~fhnxL)XDa1|ONR0x__ns_M1mQfh(J5Pk}12P&PAhaKC>OiPaaVeVusrs{1 zV*5eukgEMapnBd9v97vP4@;BR*4BW5MjC*m)S%(&w9ql)r!0ID#OEAhgH|RG{eD5f z>C~W=3vE8l73;EvE}u1M0Q5Ia9i#M_AX+@Tdsj6Js!}RBP-y}4SywIW1=hj-!P|Ul zs#D6#o158mIzLA(gv1s$=w(en<`ax_xk7w&y`q|R;6e;<@{81nXv*>XAH2ywrQTAP zivp=N`NFINvwp1RX^^p;w~TEd5lvi6s;W9qgRm6Qw4;osL5%6oKg4MeTL~#oL4j1$ zAZ14&m6j3kHEwI{Z8Ir~R75vuN`HzQO{Lp8Pr2HxOf7`e zr_#@8o=Qt`yw7!U^KvZb69NgSqM##YF>^pfLiV9=7Y;Dwa#ufe5z=(#vRVI!x`I)2*inKd5AB^T)xbf zJ}`W+M$-aOb?4<6RTa8Zku_aUi}fMh=^43ef^W3bLX@YQNlOd(EXd90GMy>1w`USD zB1Ebe7p&TE(7GO5jNv6nT(E+1jH;sGF`Ooj*VSf8?{7gFUwbm3_I5wFB=A|f8z*e9 z4^DRIu!P2tkfyzz;ot%q#E%$29TsC$;|6$a`ODfY>6z=l_MHM2M6!dxO;yC#NM=t7aD!iSmd`o|zp}Otmar5is6VyM^;% zHY%XYo^B_uMY-YQdI6}EjcMpMoTP0JTe6#MiPdbJtEO;y)E3Sab%{a^5{gh|1>~4^ z3+Lu~$ts{5j&9qo1+A%VS1DwHpDfV0PoKMdymra%U(gQhUb0~p!y$JGJkSU!`1+z) zrE%q>E01*zWHj(=chP0-$;%sDeQ&4(!5~|j$B00r*-pC;{6fcp-C?uOleahz|L{c- z$yf8Pw5YX06+wS9()RPRp=v-kf?ea*c&Y)}B;se$nJ5y4(&n&lfQ5*@3EN(dFc(?6 zvrnh;6^U#RV-92O{asvNoT2>(c z2;PFeH8ES@!G$4+AX?4qTA*%#j3#>CsE4Y8pBLQN`t@=*M=HSecqZ6J*g$}v*29Gn zi18p022MdH7&<>tE1QG5sr#o(u$ zIk>?BKef+9m;J(A20+lxBMohEh>Qdr+9^Zf!#{T^WS_ZqEl~GBSmNkb>$t`xIi;3L z9z4G4WwT!i{aRuq-}RACG4u_IbbT!4xCSF+;qg2AxKmkx{yAuWV0SfB%O^k(TVw5p}vp+um3gd~!ZG^Y4 z@7sqp=w-7W0ok5U5p0&tPFYI1@TkVuHFiH3UMvw!vEAu=26O;{6p@L{l**WxnEi+o zAD`Zmo*o^|cE|18hn-@;_;Eei`(gIJEmk*X%>bl&R3meZg-Z|#deB zhaEVuWbb-46of$<#7T;7Y>V4RCI?$S(6pyOP}=xW4M5FsM}Jor$XuiGA_zrT``0fD z!*K({+G=g6z#_nqI7vxyad9U^9B^0@&-exu%|o zI|0{8A}%0X_~SQ>=NqRvElGmKaTK&vG&$g8fSq3cOpmt>noSI8;(P9Lau5hcY_=CK zCsO8;DqJUyEc#QYB|rZ7JseBIK5by>#3<- zXtub+Rk?iUa)s(qlwCj;vs7;Lt(+K;)1nCB9C4s!2zHv;mN$E|Id_~(y0S_%*PY9= zRgaSF4znv{WpJ>pwN6Cj6t)3CvKUFm{Va#Uw!AsA7u%PmFSy2+h!*d<(-peCc)FF8 zB)M#%m(Re1*}^am^r?tIKMX@)IeGZxN#NV{7`Oen|#c5LID2EEt4E!?Pff)I`!QQ4V|V@4bH=8Gnh(PQ?tkrl#$w}AHzrv$XM z2`BLfG&<7BHf}u9g`L5JY|I-k^zN%TBkVG6vu}*?ua4byeZg$>mg{%L$M|iE!*)l{ z96h7Kjuz%54SPzOQFZ!sCEYJu-(B!+S$QZCXO^SH}5^r5C7<3hwX6TcBD(E(n~xqv3yJ$J58`4*n|GLAB%8gZvb?=LVUYn?DSY(ZnM^{QUFJ z_=EPtjyGs!TRL>=4m$S(|F{rnRn20i%>Fm-7_ z^W>nHB<8)bE`|<~XvdkUqfOP%pV=Xte*!oqhPs1BKlct`p?$>eK$z!7kJL5o9ZlDx zz2VbuOr=UYbxMb7Z}{{SI)4<-iwhT0iSCGzgZ`V_ppheVB~tT;u`c_eaYIK>nKE&7 z=ZKW(j(i`^KQUC-yzi{LZ!MUab@@&uW@ctmbMyZ^(Epu126_zi80az3W1z=CJ+yxV Xjn%9$`z9^100000NkvXXu0mjfKeV&m literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_face_112.png b/scenes_live/src/main/resources/base/media/plvli_face_112.png new file mode 100644 index 0000000000000000000000000000000000000000..a49e991e9c1ad264b078477df08e020521df6cbd GIT binary patch literal 6744 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 R@bCWuQB~AZsFHgb_CGP=j}-s_ literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_face_114.png b/scenes_live/src/main/resources/base/media/plvli_face_114.png new file mode 100644 index 0000000000000000000000000000000000000000..16aff77aeac7edd1fb5be37d8c5968fdaf59c035 GIT binary patch literal 6714 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 M07*qoM6N<$g5oq^mH+?% literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_face_116.png b/scenes_live/src/main/resources/base/media/plvli_face_116.png new file mode 100644 index 0000000000000000000000000000000000000000..e969f5d678ca8285ec43e74b5ad423b1c21d01fa GIT binary patch literal 6336 zcmY*dWl$A z&-d-UJ+pge_S>1WGrO~~YAOnZ_)qa65D4LG1YF}Er~Gf?V*IPq*`#s*2-Eh}n^zD> zV=}>=ITi$h0Z~)dk`w4!Rc;&U&GD^hOSfunkE_jVD+%dZitFeujt4d$TA1k{>Xav+MOG4`25# zkoKL@4IhFmqxlpy2joPri7@El2Jc?YnQ0VdSJvMJcF04u&=-WklSajD+_PieRn}5C{e1YxpZIpH);oj-J+1>u?}yQ_KGd zOAbpNR!)c!aI#Ujeyid7&XKEeICq&7*QA2rQTLTEe@bZTe)fLID;QHL9Mc|38fC#v zT%pK6X55)C^hkTcf9v+|)K`w%uV1e_7FYd?_-ps5Z-M1getd!dhjLjV8;iq8C7a2- zwnvVeT{-cThVc_{AP$4Z55{M{$r|5_jg94q<>26mMYwltq}wY|=H4S=Lf={V(O7v| z1O)}F8yg$zQb`0LIUDJ|@wLvuybR5QX?V&s(Ca6K`RqE1rRy%67Kf(j2rEh7C#A0) z94!%r`0x%5O|m_H8}8P?J{a_T^gq}f!hHKKLzR=0v-7#W*DHb{3WkJ|1{$$i(}Gh2VDtMYLQF&#cT$JcRT` z4pfz~$HKnQEYqdOEGxt-l&LXCgA7#}TO^$_DB)|NL32id?2Gy(&x1mp?!p^G@K*4c zDn@J{ExB4^3r<}O%nKcGS%u1P2&{bX{8Nh8_3Xe7T2ACv^ghS4XB#GB6e8 zfo{NuQTm?Hw%#6a#K4I%pM{!So5>9VJ08h;mU8Q@s70msqxlu$zqF0aL=~ivL2(K zGuSo?ywH2f)dkff{}2Y9K_E@?Ebf(IN=LY=EW?`NwX#mKW^o@C6%|LKDsg2gpv>Pz z77^KYc0y0*q*ZAwpB>fP#D(8Sm?@@+Rh_Ef@z~>%y^<*zV9K=>vM7$6(|menHxfbg znBI!cidH84)l;#j*=%ZF43>;1Xe7t(f)fdAW+}>_@|?u^7-$Zkvq_k2J{eS-uO&UxP=GRTBafGR{wk=y(O5QC?L_rc zp1qJ0L;Mp@nAM%OrshUCHa#K!-n8s(89h^n&xeJ!6E~y;TFI*tw1f>Wv+{x*pSt{g8Rv3x9RsFJrC9rHx4HDS=_m)G>xe z#H>CkjmWBv#%oCttF0kOjGi|gQ3~Sb4thj5LWEY$f)`4HN18xsRsH)cIq^->m3lRl zhm??c_tTHdr#+a32 zH6Jen8)C1D{e{Bw#01^y0GYAE z*|rGYJ!gqaA&z`+^qf%ZIwJjwG~+4?@~*4AB)n1GuT*ib0aty%@WUgf%p5`t#GM9u zkJ%s@^?{k4kIOHN-BzfSsL-Nbu93-Ryi@7NG{tZ~(Tpqkn<}nudgMsrZEo}!FR39> zs{AABCCiqdADMgl)gXd`z7xr$+weds=}l=J#@O>chy_{tZ-kUa^%q5!zCgkls22WE zKx5MLz-C5_oX}7nHCwhHXc&D?2Q2y|lQZq27%J|yGUilNhLael>7!u>e-UQP&$2g* z8+@w*#yV^iFqmf4LR$zU=oY{4G3wuT7;5>X=WYF*bPV6QzfYrx8$oQf@48FDVvKTn zg*9C5CE5x91QBUVoD?uhHD|_0VKWyZ<%th@sEd`lnBQ$*pD#@ooscElSy+;&TGf(v z)TZO4II*8|?J=>?)C7pf=`r}#x-gXTB6(v}EDAQ}VKF$^`_t3K#eaR^{ono$cPe2? z$s8lpZlZ9X(rW*PCT6+uY-O62RZ|MdLYi`h;Ka7YnUn&Z-k6v^eyski;T9w*P#x|x z#R@mK(83P%at&2$Pp&N&#=Z{`nWeZ2XuiHNWj#K)FdKek3lvxU5qBUTe<-dU59x?B zl-uC@ua~dYhUC}?pdGp-Rl93-wCEhjaa|VNwoQ}4d|@XX90M82s9}a}^GBFzET@>) zw@eLKI5@*Nw*#YRRqHh=>^r37VIF&m5g0Jnrm^MzS#`V7O{coZPeXJ`yl1c%rPj2AlL9|9XDAf!SX4sGX@v|YC2KkvkS#j zb_ViqaLFH)I>HYrxW=#P-;;Y@{Wdb?_|o=@xJcp`8PwBYH$S!%E!2q;51Ww>J2aGd z3San}7ApiQ|1R3@N+`0Io=p`y%OP^6cF74Fo%96(yr9r0A*!Xas*G8HeOcepCGoor z?|+cEGB??>awC!#N|l%u5r{q0Nz~4nde)o>Ln907VqfMdTAy`IWjS;4%c-4HqVz^& z%zhn#h67<5Pa499u%eGm8;Lm7)=Q)!gtUl2V}D)DTe6ocq08vv>LI1Et_S5J(h2+s zzh2F33rX3~T>xUV)UwREJ6runkd_z-W3r@$EUwHAgiQKdk<04CjKZ_vyKm9Y8k!T% z_j>X*7~42v6!sgfSW^`7Nd7b6xJn`(@9Ag45lEzo+}25mAU?2+-me&b|140?=q;6& znp)Q;^^Zo4FpaVN#;(WQjBehxsR)Ld%FWMa|0PwNoEBMczD$|u!n`{)rlPC-Hb#La zD4<5*d_z13QF-+sru`8~RXL+kZgL|tZl#~k9C5UbEdgCezdWq&VD>rMrT75HIz#!fQV?BC{e6lbU%{^fg8~<*n<3IsB1)-yaf=CE-o5sQ&}Hz)_k}QrEF6b6>P& zkj0fY_~VjIHGJaOXtaH>0QyE03f148)WEzE8KYWufM?yzcwJp4^b%is( zdQiPEGju^mHKR49OuNrkyoKuFY?&6xC>IQ`5`?i5OiXJyN+uuWJ7*WrNm}xTN2P`ZL1c z6ttsuy$*vy+7InLMJFzAoI44Q@gHg38Af)Ne>h;hzw|S;F8-`&XrfWQ%i8SGJY{YY zzdBa+tXMuYGPf#{?}}EQ_R(Vqor(VO3B7?ASq;5O$#!d=!3X@v@m7CrVH`C{;}tx= zo=IvX)iZ&rHs`Nj#>oaQjKtp=CkYP!dqz z;5M+>W&SDdP9Qi)l8h$6$CSXL@lMZ*)|0RLw&uRywyBiPTIKsw4i)l*icYOTQ}nJt zxn|{as7B;QA;j8+3%eMdUiEA^=;X_lc<@!sny7^DsFjH*`bLdze^mh>m3Z657g=kDlT8TAIzzxUQJ-)Q|@r_l-v z8bZ&(P^0k=)ah5IQ_;V^PRCTez`BkOKHtj{|F7%nA;|mMxo19hc7J+JW^Z?$K1{6E zWDbovh(qnRQdv{0#o1em0PgeK`^z=UqDrv$mcg|1KG@ICS5Dx7)^_xUmn^YTo05` za~8qS4BgH+Yl4D(7b?GWU5zFch~v$u8n|nZEw?`2Yzn4$lC*?oCC-*|?}dABurRl? z=lLmHT`DY8cX9arOVfw%@#C%yH)LUc9?_4XZw(a*R@)IY-0s6-KF&_fL#KqsZL@RG zzgL$O3kz$sO-*s1JpU50aa$Jr{XVc(BZRhK;GG;Vb3aec`p4x4Psk_nsn2$}=a(4g zFFt2M7tF?Af_QY{#-7X{OmYga;4-YyC{rUF&+qYDMeTQ&@1M1InsgB%<8Q6TwWC%I z%#<*Q=8<&Ws#jGcWj$PfiS6&!7iG;hiwZ2n5TsnihSd15!zs3#Fq1A_i@>%t64yA{Mju?mU zT(VYFTXv0gq*uFmQP0_xid&Moi?B=Q0%N(&{}|2A3fh$AIv)O-WA>M2OBtj+)?HRW z8D1I>!qCh6*QCWK$XI0I99a(~hFK4N(i$a)bQ4WyVxe%$vOe3dMV0wY4SZ0ZmgbG6DDczE~4%iF+URa-^h=X&h`Q-65^k5;lWS>fmv_us^3a}I4I&`bG?iY{D0=nRuj0O4W7%=zK7 zh}liR=oG3aoPu~6#ycaf&@^{LO82lotMY4D4*BJZ@n*ewq7s`gF4^K9^36cq zf3>wWO;8Op@$zJ85W`xC3!Th)S>wM@_B`0)dL#v)CGF4m61C*GDRdgAH= zy>WO~{}f}|k|G?bP}0SYuHT+f-`EUy39-Gc>8B_sSanCnYJ2k$9VN%jT0rCQh=`Ki zrO03Wak+Ji!8bG$(0fQJJUi&()S~*Ub*tmRqi*wp;aW~IDK736l)d;Z?n~*PvV`6; zWb4*6E*m#zl=;M&Z7qx=Bwe4(?SsGY{w`>}(K4Y=jtzD9(GBlH&NM`w`5>MpohV{-&i;^48NZp={+(^b$A|0S~X>15jSRz?#VN;*u{&o5e+J zS`kmDFY(VZc&V^My$NtgSWYPxrK@LR$VG;ygl@b=-6{7uwcoommpPTQvKPmFuKaTkj}8!f7n zju|=LizKGLwjgIEB&B_$G-or%shg52Qr>_G^Eu&6!;%-0RjMUFOcu}39U>*63lyfa z_2Y{zq;o2?#hLiPEbt;SQZlbV#aJ{l!OH!Pv(y!nvwTO%)KqGBUh~jeK_w$2WADuR z^WKRhbEig1KwO`lJlEum+!JM!!_+C&oci073Rcr!nWM8El>LawPdw=y@)F+;5&P`d6R7I?O?UFZeXY&D?hwzr;G6xwvsgP5Q5ii>4<9&K zWt4qi|l2H z)+)5!i9~ngTJ>PS7)i1=6Fny99CMcv$^dN`IgT>s!QZnT++ibuyZnH7Q(hq?--cpy z*C+npqU8B4`GrZdnZ~;3Qhsl<`qrxnGP#W%EYRbzJQBH_L|5 z+sTde)G7j=x;YBOK_UtN*Gej75J67GCtVK#9c=GC1979 z^k%iJ#y%BqVnRWXjv^p+^|40d^d{;iiQ|De;O)j;^^d8V>48hr;fw+%u^Sf_4pgz6 zNO?OGUHd5+RgS>4FxRo)-^-Az%qjhkJ59LvD2DtFFc5-3!$Kq!cx^0r4`m zjfm}s8QeJXXuU!E+ruovgl>B|4sK|j6+WAI&dsP|eU|{o*J;Hqgp(^khNu}=7lvk( z2y+xz;VY>-b2RrYein+7qoLWSN&GnNMV-+Lbu6pK9_mexAb7{SFcpDr5>dg+!L>T= zfP|luEGZK;=onZ@sc-d;iHLD=#HK@;a4Y#l@%r`NO!GH=YHS16A!_EG*N%QMEhX7UdWFO0(-0uHiABay&qy6xLgsg^Far}F`LSDf?~}8 literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_face_117.png b/scenes_live/src/main/resources/base/media/plvli_face_117.png new file mode 100644 index 0000000000000000000000000000000000000000..dd363f5e0263b552ab5adf236b21cdbd56cc9e96 GIT binary patch literal 6905 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 literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_face_118.png b/scenes_live/src/main/resources/base/media/plvli_face_118.png new file mode 100644 index 0000000000000000000000000000000000000000..f14a0e380f60db2f9e9562ccb90171c5b3ead37c GIT binary patch literal 6957 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 literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_face_120.png b/scenes_live/src/main/resources/base/media/plvli_face_120.png new file mode 100644 index 0000000000000000000000000000000000000000..6541791b5de06be6f58fb79e36514fa7cb18a417 GIT binary patch literal 6463 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 literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_face_123.png b/scenes_live/src/main/resources/base/media/plvli_face_123.png new file mode 100644 index 0000000000000000000000000000000000000000..0221684536fdd4ccc54984c6739a2abe4371258a GIT binary patch literal 6500 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 B$|?W= literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_face_124.png b/scenes_live/src/main/resources/base/media/plvli_face_124.png new file mode 100644 index 0000000000000000000000000000000000000000..7dd40097077969e4301498582598c8285b86798f GIT binary patch literal 4149 zcmV-55X$d~P)@CNRM#F1;o`#V8f7EjYs@IjbT$#40nuD;}~OGQK8h z-5?R9944M85E-#VcH=ewl5*KEhM-uD!eNux-BrSCMvBYF0CRfry2^N7&E{o z7O^rOwJ!^!766|bJHsFlpcV(883CUf60$NOw=Nm8G6#C;*`x z0G%5Jqay*UBmkfu1EeAVodp1&1p%WZ0000yryNVe3t7z#J-!D+zza9I3|i3@H@z8P z*BDXD5oFsQIlU1#rW-!6D@)8CH>e(9)e|qK8Y!|MHmoNluo*R}AvV4sCa)hHuna%K z8%oL-Ft98!yCO%)AvC%ZD5)MFu?8!(C@#1qAhHWm&ly(E5jL^BXGugsRCwC$nRh@G*A~W;*V3Np_QW2I1$&7l z7Q_}2VgUgWk+$ucm&6iF61#xrsSrUxf*PYV2`CXoMFByOV&kEJOA!}Dklt1FopbMO zK}m#NnB|ZC&g?yB?maW-x0jin!Yibm=@lK24oC;21JVKMfOJ4QARUl)CA1N@Cm_Lu zPyg9pzuf?dZTioNygbuLznuU{M!ebYGN|7GNqYbieKruLhicBOb^s*&*BkvVbBgR_ zrfne6;!h7oUQVC_qM0MK3naGbZrOq2Fs92Lj3n9wlFXVvGa(@|G9eOaA|v5M`i4`I$b+g#X_m!G!rUV_{x`f{-Tz1S|bc zY=`;zVxArEmkvC75@R!%IG~J-nJ2cx{CqLep7*Q0Xn1Fz47u*3fiip;&kTFs?}vn6 zT6Ule_wOfyA&ip8YAN4$jAHwNJCP%u@}zTI_YX3jc{Y6CQ;Xi~G!qCwI6di!=@{R? z5A(Bk@7^y)+VXvq@37qRyZh)6i56rXU_1RuzKi(V>G8@5Q!|`-8;q_&M1fFsfQ&V`Q@ESH(Fywe< zTl4z%LpWiWXQl$8@Cqk7Kbr#se+m59l-JiWaJH|$c12b4wS)eQ$C%IeLn530a|$_v zd(;%6%Zbgufabn0<`GD;xYNOFSMI$a=;C-fzAxbM4VvV=zk6Q0m%~xy+{*!Rp^HEA zoa{JOpwTNmkwhpIh?{-*j2N~WAdrK7C=*>gU)^>R)N!JNM(-FUi@O^Q{KP`gylcBz zfAiJAQISKN3OYY@j&dqI_b{HJW<&!Zu~~P^4J$o&4jUn9*2QbU21ZgrKUvsd2%h74 z$I6~)03@<7+CaZ=h51J>Cz1^B>;k2;=%Q@sveFrOetoCu3u<$L1dHdp&9O}@AR@G8URUV4fD*&%1Q+Ty=;!)*Dy7UrM{pt#&dGE z3DE#ZxZLsw*jZ{`Rvy$jpVejgUl56xjyM0|d}?0mc?3v>FOiB(7H!MAxB<@bU;A1U z^?~q&$vTg_&106AHTutq1Qtd+S!$l@CfJpg_URqvST3Q}6 z*!{9UBa$rc>~fxErNS0zsVu~;)AH(e0*@E)j1#L5B!CKeX?18Q*e}Lq%bGs2C2(=i zt7Dm%o0i5!)H%8x_ww>OZm>v5)CQ8k3By&Wt1F{MwX(@Mav1TNXPPos9^sdPbw__M zuTU?qseK%X+CajOmaSwQoaA9$+2|MNNWc4Ns9yGbE+?1WUZJ60p+lZ~f^P|s2u>K- z=L58wni|||4QCI^YDRw|c`kc^IV+9B(AGStL66&lcXbAy(9j{hY>B!+qR&2ctV0qY z;Dj&_Xctr)-RSp71dlpp4{B61xjfpqI{PAzSMO0oT_E^%c2pJsHGrY+$SbMNkzjEr z$Fk=$Il%_mTPaWILSv#XkYK_vmzstK#s2S52Zp*syRwx;lHv0m84HN!-C>z*i<%w2 z7f=R^#OeY`KKX}hLw0sH>@B+?o9?@zlv;zb%T<2%!_{j|O|~)Tv z6D+flM-GHxDHbVZAsVc?va??}!qW9lg93;RmdeBIY{%V{XONW*Q5Q(q*|nhxRjQ&Y zYNe$ropg@$moLlCt}1Pu%QmHr$L^mmTnM|c>1{irHqh{`cdAOSgP_iJG*l@y#KeI5 zDwrdi@m;c6mwc4l4jlw*_BbKWg~_HwZ6JNC9shay6nFkqsW`Bzr>Z@ms>;zuJFxGC z5pMJAYqmOtp$v?P`as5R2owjZudi=J6sL$#Fj~LHvFbW@)yLI8RmqLxGAmd40?qoc z!DEH$0}01C?Lib!Wo0GSsps^xp7vw)N*tmq%vDlDR(URdpST^svwnTZpk`k&ngUun z_p0x{xJs@h){#}pXhBZ2uU^Ta=%c+dFqS8iIr@f$fTlJ7iqRC1&D^VDyFDr&fn+jS z<)cb;vPYGVSXe2;5mr#fCCMIv0X1C(gF(#k*b{aY6xQ2>Xac0)_v+Q3cYDaVdh(Kw zp3z$Jnyec`8Al{fRt&Cj{uz0$E*wWR0umWIQKDx|0HW$Za$lhAmgjP#Ok15O&tOA| zW8?rnUTle&L7FbRiP$@hDJKefF#v^sHD8 zQ9xI@7)5i~r=TIKtLJmVqMR!N zVO*3?U3F14MjU3ohyS#wDA;_mHEA^=cOd^B)({`bC`N6daFYkoKbc%GoIj zHFyzeMIf@&Y6$FflmEV=$EYG|j~{bupvS5z=Z0}?l`rKPG}NJ0frx#tK~WJAK*S1` zHv;(Mxpme@91Ac8n1zRr{nV-CX5&4E23CJJM!AL|`}75P^KE2LuR|?cmDalPqDM^6_+L9Db-hS&KB{*2mP|)^3 z#D2z)r$Oud)&d4D%&F+>jWi>;#|$&V0}!$81@%syKIOM7H}_#K@Z=&CM#u&2@t&ut z`i>&J0FhDM00)Fb4Co<{AxiE;h;~h7!&BZTJOL4tzV4^vPsIZf)ThdQn3BuIYyDs( zK0dyOCO2g*{jap?$L>%v{?ycO5g~~|p-)PJ0|-arPtCR?`~k^{;-?->QVN-pj{Zak z;ujhdK7rtgmJ+!)A_DF5V>~@3O85mL##7>N+_({c<0mA#c<~}M5PZAM{RYZ?j0NEt zh>V*;OH-nYN&7GE2db|(y2sGY4?ZWn14#_K-iTpDz>$^q;AW(2 z3>78Xzn}4-+{f4uEdUXRJ`19wW1^Ah+x;NmVe6AkiB^Ef(mq|Isd{YNeDdVBA7j|s z6m?&`XbeOwtQP!_D%#!MJsKR^0xL73Eg-SQj0K3Hs_02}L~B4qWIJZbB?fW{JT4!O zBU%I^Vmly`>&%%;mlm|bU9=`ZL^NvBl1pb8475uo*%IvnQKB;nePBwo4MapHvzPpK z<~PLot*fC(`#?lw4MbE+W|)z70L119d0OK!tTlk(TpRkqhaY}C)`GMXAh@pCT3g!+ zN&5k6L+OBYKsq2DkPb)(qyy3c>40=Vf35!mNG6ZBA6Qv000000NkvXXu0mjfq0VQY literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_face_125.png b/scenes_live/src/main/resources/base/media/plvli_face_125.png new file mode 100644 index 0000000000000000000000000000000000000000..3cdc9a660c4b89862678d4f84068b159fa588f10 GIT binary patch literal 3879 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 LEmfkjiSPdb-{nQg literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_face_127.png b/scenes_live/src/main/resources/base/media/plvli_face_127.png new file mode 100644 index 0000000000000000000000000000000000000000..fea51479b247c465147508b729fdf5ad09951007 GIT binary patch literal 5039 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 literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_face_128.png b/scenes_live/src/main/resources/base/media/plvli_face_128.png new file mode 100644 index 0000000000000000000000000000000000000000..d11fb554bb2c7584e31c4e261d589a6a0f58a26d GIT binary patch literal 7782 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 literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_face_129.png b/scenes_live/src/main/resources/base/media/plvli_face_129.png new file mode 100644 index 0000000000000000000000000000000000000000..398ee4c6e53d54522e3ad0441bece863120b9797 GIT binary patch literal 7182 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 literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_face_133.png b/scenes_live/src/main/resources/base/media/plvli_face_133.png new file mode 100644 index 0000000000000000000000000000000000000000..4e04ee8f53896195b3b9ee2539ae15e994765c38 GIT binary patch literal 4969 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 O2u#aJvsv9a;r{@m@Zt{u literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_face_134.png b/scenes_live/src/main/resources/base/media/plvli_face_134.png new file mode 100644 index 0000000000000000000000000000000000000000..9b6a575ca14ee61cb46968afe550673be5c56e6c GIT binary patch literal 4454 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 literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_face_137.png b/scenes_live/src/main/resources/base/media/plvli_face_137.png new file mode 100644 index 0000000000000000000000000000000000000000..7e5651a80a2bd8aee96ba0bd78c82412dd41bcb0 GIT binary patch literal 4159 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 JPDHLkV1hxcL~#HB literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_face_138.png b/scenes_live/src/main/resources/base/media/plvli_face_138.png new file mode 100644 index 0000000000000000000000000000000000000000..4afe4e850c1aab2320ab6ec5872c25a5c5eae0c6 GIT binary patch literal 3644 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 M07*qoM6N<$f){X_7XSbN literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_greet_bg.png b/scenes_live/src/main/resources/base/media/plvli_greet_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..c08a52bb11c3086b22a4e76bbc0a370f24f1eb09 GIT binary patch literal 8302 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 LNkvXXu0mjfaY2S7 literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_live_more_language_switch.png b/scenes_live/src/main/resources/base/media/plvli_live_more_language_switch.png new file mode 100644 index 0000000000000000000000000000000000000000..2eaccccef07a699b7113a51ccb9e5e6b20082d19 GIT binary patch literal 852 zcmV-a1FQUrP)Px#1am@3R0s$N2z&@+hyVZr{z*hZRCt{2o9%VlFcd(adO83blo8kYWqEa`n%?@5tgL?$LCCMNC|<Ame+6n%%pq}REJP)UC8Z0(# zn;M%_W;vj)NwCZUcNhQ%qj9zg&lhxFJLhozTp5kIc&L=uPBC|y?D{agI(hLi)IB$OabZze>%$3BV3m#IP&n3FG{Je3CE8@&LJ=elLN+9U~If}QlLL(Vi+JKj zK8+baUD(*@0BJv!xdsa3zR>~ZN$q27ZARe1xPNoD#9kg#q|`1Y*b5|@Un)0VBGa1J z9J2s);n6bZ#E7m1C~%)ou6zdyDU++}{?Qy&8&(4E0eY2Pg@)D&Rv6pcp2p7!uU745 z{F(63QrU_QpRg?Q7ZK#I`pQ2kF+-Qnt?L18-|Ct;^icwxZ~DlpfNikheZif8$_`_= z!tXlD_8JT*Q})dY;K^ag8p{fS4z;bL&(jz-1cP3aZE^h0*$RQq^tL7Lz!h%7F2KEv zRp{jET4^dGETdV_-~<=9WBdtpjPE>*-;(imI~d$`KQKb3ALY=qp5CYbLKD&F5U<%) ej!sP6K7Rokp@aTL!SE3P0000% z%}*0S7{-4EMMbozF=---9MJed6hcZHMMWjjXyijw1Z0&D6BDm^@#wX;9=!NBn4UcK zU+_rdy?+9iCJh}AFPLVth28D$%ut@>;r1@i^LBP--kolaSi$+M*_G6JOCDfPc3jANy-RtR;P(D=my4sWm+@6AE$w9K!+wz zzHk~CM}~4-#@$>5hJa2D{+gl_xC?wlpK&)Afd06Rdf@`_I-uA%`3yJ}tK$X?p?A3Z zJ}#nLmlt>86Fo z#YJRUZ;CMsM8?gbX68>|wzAX3C7P7ccP$X7i#NOy@YVuhx;W!DpRz!dZuT}NAZvjj z-5hO9z#9t$>E`U7`5p_znBWG`1u$TN7*p&Ac^6CzF~wnkNehIS;vr7)nf#o~ z<-Vm-sV`v#WV6}LY&N?YHa?X~eaYo=-;&AX=aA2s0ofV`3M>=~KdaU1wo*#fYPD*y zSo{?vK9k9OtyC(1)h;TP%HK>T^EJpbipAouTCG-9N~vnKx?Ly~euhZEI|#V{cO2(? zy7Lyl6Z^xOTxXuwe{ ziL;FfIA?(%-Mokk^A?EG#Ra!{ki!Dg!gSHIk*X6Z4^4}Un;+Qy80v+ia6C5F%sj{_ zXtl%JX09Ono_#TBfzY^k>mc)cn6f}@)SM$g-(WZG)hV)y>oC+0uFyU;f@eQ~AGAZM zJRa8k9>y&&5tcb3xL%V09$R20C|?rct+ND&t8X~R0qt;MF^v5a;{-9^D(gdfZ%rF@ za}8I=m&i8<2N}xi$XA*rWHOsX guG$X*XW|z34^5tGLL(eVu>b%707*qoM6N<$f@Dt6-T(jq literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_player_no_live_placeholder.png b/scenes_live/src/main/resources/base/media/plvli_player_no_live_placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..4d3be4bcf63fbf01855d0d804f644cdb669e06a6 GIT binary patch literal 18890 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 literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_player_to_play_icon.png b/scenes_live/src/main/resources/base/media/plvli_player_to_play_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b29685c06ac5d5a9a8b06c5c89cba2722ef463eb GIT binary patch literal 6501 zcmbtYWmHsAyN01r7^FL;L6A=AZWtN{lny~8B_#!sZWWlJW2hk=x|LQWq`Mhl0FfBD zbMIa2TlfFnYn}Z*?>W!gdz~LU!BAg=gqWTf3k!=xOH({UT{{AN?Cv0qNgM))MHa5pcN0{j2v9WP# zY6^uyS(uq&B1S|+?CtK_+1atOvSP>>b^6z@{r!CrAt6keXQ!twE-uT<%fiCK($dnE zm6aHi)zwvuht}3s47Rki{PykJ?d@%6XJ=4Q&_I8GEv%-Zy!`0ssH&X78e(XDfa5>>fqpDdwY9&dK%Mw4EFN! z($v&6GBP41C5?)T!psq4iy0P%N%Hvdt5>hg&CM~@RaaMI=EB0lf*DFtQPGbdKS)SO zFfF~iyK{DSK0Q5ER8*XqnYp>S!HgS?M(gS6d3bnWlI-p6#nk)m-8;KPPa4;$+`u_q9{?DSJq4^K~zW{SW{#V8RA3;Gu zfsxeI)c@ho(b1WhnEXe@07^2)AfG||4+=s#Psk#%e`lh1LN!7&sg82 zeoOqoOVK_OY^N91{C2;tHBiXQFG^;(lFhY4ums#Q#@9N}J>#I|Tk36YRwuvfW-8sy z^aH=8zo~eqpMcWso@5 ze*WR8XRrYpqA9sHHjmg|_24^@L;aopb2Kuvz6r11ojUJoXev^W?)`nJglIXLnJC}- zxl#1(vg4|L@A&Ylsq^3Ja^Kxe&FOVzdDWFvExH0NeseD=BF6T-^cjZ)AD19|F*l1S za|vgO&{NjZW*$Z+{t~Lv5^9Pv;1haE1~PKG$26q0#E(db2nq1P=Lm|6L>n|i-nbFdughegt<;3u?e8;P82 z)smXOX-EmkQu`0YtnV`CbPzVr+cm*Tg) z#@>dmvC6T=K4;@|OE>M+!;>!@{{A}y>Ib`AS}GG(2Vx6zlhJN$M02ijm%izl!*SfY zLOiyDnnAxEMR;|de_LFA2wiP+cpeNoS-L_ac4;Cm)*hK_Un;uCR}arIBs->XuCbMB z64IvkyF;to+wRaB~};wMG@T zeJbNh_0YL|nsM!33YOb~!aMG)-fh%PJ{kX~vRBS90SJVGb}upJJ+HK2iBh$@+qdh! zZe(?`llYMQ-ITlFHhW}Ka40rJ)#}5wl26)QiE)*&zr4&l+fS48t*$M&7M+Dd2crT4 zO4PcBzDlh#2J|KA)SJbUXtGV&zY22q{3F}VK}%CjBF01_B1+FM7v!Dmz}0Di@;4ho z4PS?H%sn(|oZ|YF`E)fnzw>ZO?Jnt$lp6ln4(x0b+Bbm7T7}$AA(wr3k(iN_JbhWW9-s|GeS=D1#TAvf_% z^ti0Wmg~i9_+*0~eyUcTxbSNUL6qS#d0(|t&GcW$g7TN<1Jxl_K;CA#sOU zNI~mC1|rf7FB;EPNDpe`A zMc4~J;z?zg(gj1>amx;poZzm=;`ZV_6@5+L&cY@sNOu%e7oW%8@H>qZFOFldzw42f|lN`;GJoNwsS;qDVn~uTk0IM(la)bePfQ(Psu}D(A1Ma<7aL2 ztJeAFKoFTo<1b3V0aibqO}mTrMw{>e;<89UuXfwq@zZ8h%f#wYN=W%epKxTXMl0{V zDb2(3=x0+tp12>#3qH{6B8JVw<*|)2S17)c=f}EeU|PvEvUu)GrXe>0`*(=g(8T#h za;SbOuT|Sijuv=8^A(d29#!t%JRS!wm7j%8U+qNP)x1HtuOgG+*3|14ec`LS-6()J zm39-KQdHJ7{e1#*6#;5!+(j&=U1 zJ`*xDKt-6IP@ov&VH%~n9UDq2dWxT4BzYF6=2`sA>fcM5ps%K^xshIWQ2;!~GNq?H z#A6+CfeJ239WXaaNYR1LA3CW;gLg+$vl&W14~5Ax+n{GM5@ymo3?yY0weF7?P@P!$ zraa_!p14H4&X8d(x9#yFhN}&Or9~#DeCUfF=Qx&koo2Gf)Z|dZaAsneyEy9NiY%(% zlTLIF+Wsc`Ms}cI(5etVKgyEHSXr=bEY zd=CQ>~-9<}uoA&W*6fH`%|>`aG@3o zfowhwRxFsC?b^YCW!Tb%zGDY@UX}3`;Mei@CJX?p1)V)vt-UVw3({Tnq>f2RYnHNT}UIG&UJJ#`|JBl~i^5im=8gD}Dg^QQDqCd_| z2${JE2~hkc_TT-7CWR?ri(aK>0DSAvp6Vep2L4;PREeFzL}~v2mM%n+|K7Vt-itmV z&ZV?TT;%6^#eJzLrcp8fGfBwhwI%$){^2@nl{o2R>?^r)zcUtjigqwI`DR1oOHtIGSZDBL868IL;a#sYFGB zN5L<%McJ%x|LS~UP8JpUaqxvrYJNT8*LmHzkPx=57nVH0PgeBqZ(6R#3y^n^SN15fh!!>!Oy<|} zka0$+q41oFkS`!~Q)l0X_v}}z)O69Bax}zH01vYE*Fa@caFaHr9&F3Q)1+CRJQknM z>8Y>MyN4(6!-pq&WPU1KVzVr{&XbQ31pAu>&xGPM(3OuQ@|&i~abTUyqHSq5bJ9^2%z{5dGvxc5(I9 zig2r#l|{t@Nu~2dKu670MsTC|EJy3oh0J>zch5Ub_YSL=E`FbEGJdm z(Z-Rbz-sS6t;p90s}HJs$e+(C$NJj3*yQ2!-a+5z=}&*p-I_X zv*J0y7vqzv&84uk!b3S}!`7pL=V0u7m*aW)N*ckU1M!{Llblip)KyR)Kn635yhVMp z(BHFX{w4_dOX;y&B)&&sitR0HCV`-+c#7!mbM7)qVq(~^+qt4Gr#_rH%5Yr@^nEvy z09rK5eJU~a%QQC93jU(M()TLzEmvrGD!eVE|BMIQF)Wi=IV>r~WjNf5umV-XnJ1!n zd8oT(*}34+o5oGS32_*nn4RqwPFXaL|08+sotI(k|KvrdeBvtyKYHTVx&D!~VeI|r z0~|ysbmhL5?@_;JA9pFRcmSI62(RyDO-D_`y%iUP&#rQU;^0jH<`1pBgMOI$#f;5a ztosT1w0C2!YsYrTXhv|7UnN=4I#n$gPlIYjFM`mkeeH4HgtKBU1UDOe#-Z<0JHmY; z`#ius+nVvfRyS1=yAA1^ zBc?T(urqmswnKoqf`#dqY(oJUCoN!JuG_9}HTO6bELe6kFT7=2=>oz?84)FAcr`Dpl!xK+V zCk+M%iEh1op%#2kh^6r=6llA27bkbrRByaTboUT>1iI3cWS^1!tNSe4>9fqcWaQGZ zhEp%`Z*US(DJf2tSc;ilfY$YFy+2=dVv~u6zc%EbqzcQO=t#}06BM%*E+42pKl|(! zRK$EE-pTzm{*qyJzKNUWxzB`}gWdh|;TAR50FaHNlQl%Ks458HJv=nzeB*O)Tv$6& zLp$V0RKO+660_*E-Zk)wNbX_D*YGH4t9Kn051|LT{M)<2@=lG0KIc-@`VJ)`S2GAU7Qp^h{d2BVBY=%$sfGzRVyg z`GZXS1S9^KIKr8!Xm=^rengWL2l&Eg=Tt3k#|qutGTZhU(VnV$44@_B|NUE`4}ACU zRB^pBp2s@NJTN&?x`N5bO=7?Xtw>=A=&QO>Xq?IQ1)I^(Ys;tDLa3M5l^1t^xTA7q zMOd*e0j(>K<@N}U-~o=JMiyns<@4;P)3s;6UcP}J46@Bu36uclgZ0px53eeBp5T>= z90z?dT{*FR7R0)c(=kC|MRh#8K9etD6gFt>Sz~``Y>QouC%d8BFi0;?3QRX05Gew* zkW%s-19aBr<_3Y3lKaG5)yX7h#@GI>-#YZmLKWPOPlfRUB;J~RvAFDvsWp6SMO~-a zJrf)HZna+I8kc8b_E=vS$8;+8g$M`pz-z%7sv)-_|JH}c(JLFYMiX)!x-=_hY7^Q* znJSH+-voa>xKF=BQ$fSsy=-m*JuY=4|JaWl;_g`qAtLa`w28*5pk4k8V0~~sw_QYO z;>4y6;X5M-EPU~fJ{e1S8F`#YOI~X%Q?r-yt{2%YM;=4?MZ?@jeljsITZ#E*v6BYcI?opkDvkq`#@cJ-yD zwz3U9WM`Kk!CT7gaZqz}_BkZN2Ii;4k@B=XiBt2fHKUOwuP|P3u*uKhQh0EP%iPWVXtAKh@tmHA38 zw0WCgL!W1d>qhZB9@J<8+};PmgCGa#E8y`RdTDv0Tl>*W<_}Z>E3RpZu%RK1l`lS@ zSbhN$yJ)Ob5PjI4Yv3St9S?E=S zunCZ=w^E?OP=!V^n)3<67q#P}zjdo&=R%^tF1zNhuSE@3gl%C)ZjekE@>3@R{HVA0 z3H21T-wkRL983AJ+Vc0*GjjRc53NYc+v|pP_Uh{U^~6UL=uMY#@^3brpf=i)qk&8{ z2QufM`-wfwN?s{5pJY&)rf(Y>YD|9r`D5d|(pb2RnjJXwLhR)U-J=IZJrvs33Vb7c zH@(Xf5uo>)Rl=#6c}m)=LDA-RG%cGTTHc>H1KTtF&BjS3)uZ$H-+T6O{oXV+)2#~? z8wq6Vh#AMO;Kj?;a{@hg)3Y++hwnuP_Q(()4D0HKk*B%XIinCtfN+A105t=)4TEZw z>PGFe1XYgTe3wt1o)$1{vxt&7P)fC?vCuLgEZLuG&p6H2+B zi1B?fK@eWZ&!6(E`1nCrMWf$1nUI`P@2AKZ=*jRdkNV}L$+zb_gjP0Fk*(j?E*m>( z&JR0s4NlaSNZ!u(JY*T1j4riiF&LVT}kUob4}X0Bx6`No;aag=Xgvf1L%EK%3Z$ z>gwd6{_ailD`IFpOa$yqFbV3h>*P$|!x7XTOQ7pu0@NPc9Ne^|0j!&Ow!9q#Si$`G zG4H`q>C8|GW`^cqY81uv&qgDdc&QSj7MK_fV5)U7fPUsFP+DRMv~s}H8jGO40}gDs a>c0Uxx8JyVg~nt600007KU}>CvX*2egHqg+}Q?Wb22tgz}OaGV`F1vgIee;4hAd`26K>Pj)^9j#PLij zxtd#^fg2uRxSB~#RSryL2+U-!wOd-b=+o}qyM?fwbX8yT?Vo@B{jaS+-~&9AdRwPQ zH-ea0FS6*`4n)`YVRY>PB1M2m5g=SVfRVyJ8_DnBaIvV5OjD?I=7Yks^xAnyZSS$ zJXp3Fc9dr|DPIM?*H9j8_!oqCW{BUJIb_`@3^tWYXFO>W69-n|`Qbd_*59e}-y^F0 z_%q?^w}R?Ewt1ko4ff8O2XMpV?P)5N={_o_xL&uph1`1R_Z7lyU+)6Zl-zzOr; zI>Ra}Z>g?=@5!3*FWm6m(}dkqgk8_6+&z_6t3O#f2MOyVB_)lV^CNkJkvze$5tHSA zeow9kIN|CyYUTUq3Hozh+w{&72D1dg7X)`_O!yfC{??T7c0DKTdVWN=UV6XSEV)te zdj7S?HrBwhXHME+?klSN?^o|3R=!cddj}S6+xRGN!FNs)emqI|@npdT|I5VYSx9Ug zyOfWrZDW@*DJp#rvGlb+e6N!>;A8)eRmY4d22aP~{} zAr}AU^1Gch9_3GhA2Z$?W4p%irry>;Y@?#8!{DjIE5t(HI&7!SfHAO`{emjT-b3(( zzuNG=o5W*q$c6Jsk{SY`y5Wh=AGUZFo;Lkm|7Xb;aq=)rZJ^<;0|Ho6hHE z(oDE*V}YCScr8Wc_DnIrM%Q-i6;LQ;Fzk5Vv5im-237Dv(wGB_&p%TiV(yIuKUE$6 z#u)K-2cEa3h_|J70uX(@FGeNEb-0>se3Xa#Ij5BM&Js@kS$&AvFBS00fwh(A*V4q> zQiQEZ!q((|0JPT!EUa3-SF77bRS$$NZzYc1D920cLri_SXhRKVLYd1r<&wM~_y|GN+H-470YhXmiAA#TERTloa>mIPr_ob={6 z1Yo3aASz$eBJ$wmE)Q}YR=^W*;!~d+sw3JER`@z5X!tuL2tdi%^woROPQ;hi480lAH`vEq*vLjx5yvrhD*+vELtGq9K zhVYsdl}R^zQ=ItKIPohn;#Z=?uS9nOd^lfJ_8QUi)(Y4^uN+u$e+9wwRh72}R`|La zs;3RrMbF#tF$caeO6A5_F`z$P4pxO%eWXNqrSda`sjcepKFV7Ii!Bm-Q``m5FOQPm z7!3yK*(Y`QWVvF0T~A>fYm36*3rG3eH7YN8-clZw$}8X-A{A;)88_T8xU_p}&-ct4 zs=MH89M~IPc-t~nZ8J*z@+k3!2=V&JuCve#E@|-im0%gw3Ml1#P`){sAxxj3yaL{; z2D~k0d|jI*_^WQ^O?WETN1TO*!V72d(c-Z?=lxee2r5>(yGIie|%R3eoX0kaagOvM_lmwrSK8e$J9TBlm`~mPNS4^ z-ngSAu;HCMo65g`Qov7mY@^KiX3;hRyvy^NseG8q7bEJ6E#tpXI)nYWJ-8<>-~P&5 zDp+Ff2&-hx+oK1}+B@F8m$t?gGE{eG?!duDY|!cUz5FMVAl<(;Th zz+WCUl&^Q&M!z_sQ@wV&Uu(*Jb0MsD;pANNDfU+rT+I2_l(2|6jnd_LOZ9q<_@%I= zJe4nK@AfNAxhEUKJ2SfSj#72uBq`6uFRa{ad46kZ&!xIwDQovBWzE&AfoPlZ1#ORN9oSkQ3YE^3yC&24 z(ZrE*1vIOH0iSdatWO=5ZKGe(j>;Fq=@X;!y$*6~@*LirEMUjju_tX*i%2!wnDF`~ z?U-NG3cg?1-{l}(6KAnwT*K>`UEZFqxN}~#jT&BW&?>w>vRkf?Xr5yBM?ch+t<&4n z!E#%s$Xio8*pk@iP4NT0ISzVL9Qc*!f!-M1=Z&K~<;G}HZ-@r%W#m1d-vB>736dgz Rgzo?V002ovPDHLkV1gzupr8N% literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_product_enter_disabled.png b/scenes_live/src/main/resources/base/media/plvli_product_enter_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..b4b0a3e9d593bbb4941d8a262147b99be97acfcd GIT binary patch literal 836 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAifOS+@4BLl<6e(pbstU&&j0G|-o z|NsA=1B3JD&jV>V_w3oTKrT=a$bd-QzkeSn0_0x3dKE}sym;}#g$oe%mo8m`sDvnh zs0S(oav=by9%$i>8#g|F{CMlutvh$_08ImG|Mck-P{H-<*RNc;^5@T=pFe+o`SRuK z*RMbm?%ur%Gy!Nb(4uSCu6_Uh{rB(RKo&V_X1E#&IWLtkQP%5RFmc=Ar58=F_&sRzxHUcC!9m}L ztj`0AIn0l3sAT)uq+7oE<=@>=pZpj0J+RRakDRu4-<9+|#VxxQ{r);7)nes+TZeTS ze+>_Ny_1vT{(S7UjP}yUvR8!H*Z)sidQU9t#3#k5EK{?9*j|LI=67GU~* zlhV>1rxrTB6I&AUEI^QBNyZ^9HUST})|sc8yC?aiF~ak?A?gUF!>DO<( zwr%Nju->iabnV)LxwX;CnOhS2O8I)H?f6=K!0Pxl|2sW;8_szeYvuIM54U)}#a7Jx zP5$PW-Fb)ozPBh;U%6nr`Gs6viGSd(?ZT mBX>=-w7qn<>D-SG<Px#1am@3R0s$N2z&@+hyVZrK}keGRA_ctX5;=mzq z(DDSN7p{~u66%{&yg~B>URkfy`Ij%vA1cI>Pjs``^g-d*jk z=l9OeCN{LRw6tszDLX(1PmfSu1AQR!=*t9Q3=C!T_0&4ZEIabtJf8U^Gg$_tWgK?~ZK^pS$OOHyqG zeod3M?XX1XMQV{a9;#0LMWGI>aL4>6O>$m z%;b-vFx2A>bI#DLJuQ|cVP?YEle}z)V6?bdh(uo$XW$dJjl|z zrdIf*^rm_7JHH01t-xfGv_0q+giS7#{>1dQEXEQk&_ z@@^CvI$bjf0QCLdHz2n5UmMYpy!(0R>So`bz4;3|j2rqsFk;?&W726B0O&~^(ffOh x$UaIR)Z@mM{pSc#Y);^&2Xv>!;F|8A1_@-q3n&x@wv(Mc7oaZdl9iDyb06LGs)78&qol`;+ E0B93bU;qFB literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_questionnaire.png b/scenes_live/src/main/resources/base/media/plvli_questionnaire.png new file mode 100644 index 0000000000000000000000000000000000000000..816d3255fb42780b38f03a92a89f788e498f3308 GIT binary patch literal 374 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-segQrqu0Y!OM4;Kp5R=m(CMN=o zPX<|@4F)kz1e%|ZF*zAzdMX6SHa;F?d?E;U}TPZ!4!kK=EzoaAdV z5OKJ8ZQnK?tp_##|GSGGKIL>-JUQjy%}KNQ`mf~Fopayq(&TArdCMO{EojPaH^n~le7R$NcJur3TFHt?XWilIA_=f`N9&3i{i;PPg za{3RX8l-CboGX2}^_%G8WQ}>w)l7VThC2jSN?lzdpX*`A+3_l#OUY4q&tLTwv+pji z)m!m>X@5$K1z&HZA+ODkr=oj2Ez_T!|M2KcTI;;H8LEX{evYqzK4I{5^>bP0l+XkK Dl&H6#iNZMOnJ#2ZY5FU04!?5X#oYa-?+VLNZjWO_#DX6Efll@H2>Rsye`5NQQQB zkU+xXH-umx^mV{S4#5V_XM*c~(pz%5yZ3#ZedqVy0rBGyz%hV4fHMH+06qbz0Ql@$ z#r@m4`#*WN&*2XIiv>pjP61p1s7AC4cdVnGG7vxpz;chrcH;Uf6>l-$pI@8YrgrA~ERFn!Js`EMeUKr-8zk$OU$qh|1gVD{!!TNwWtooSJUNc@WLcJ3uh&~%d%a!{ZI@))rsP$b z6L&hD9~6L2r}JZ7yJQj89-9v!@oaAxMvI7OHk)zA*sZFn*Q%;sGsbRbvl;h@hP4}p zA#){Eu;v3QFH`a1aQHw(#2C9>ZextydIE&C4~N4CnLfE3S0V$+pR}CwCn6$MRj-%Z zR8_t91PE*AoIgnx;1U7xg!hss3KalA)e~S?Il<&7HdRAoO98aU8Gn&v$bQNQ2+ zRVWm`?OK3Bq42HW@BebQ!FxdgJ_`$=>-vpt+x~-4&`B`NBKNgz`%%~Rnr3a9BKn z0=x)|0}&D<2^3&uVnjGKwk`uClZb?jQDABe5IhuFmKB%*k}ZIjF|sU6G-DK)90df^ zK6#Vr!t}7NQk!d!Yt zD3StFUMA-u)rFG4|58~1DKD1xi;$$1AhlfHL#i)K_>tNxGk&D{(v%;my*B4ZsxMCZ nk=m=XtB}ge(?Qtl>+^pBFg};|m0`-}00000NkvXXu0mjf0GS;z literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/base/media/plvli_shopping_trolley.png b/scenes_live/src/main/resources/base/media/plvli_shopping_trolley.png new file mode 100644 index 0000000000000000000000000000000000000000..cbd8989f9e0c63b9579f6f59fe98c1b44533cdc5 GIT binary patch literal 3479 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 V>QPFFr4RrB002ovPDHLkV1k}}eD(kU literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/en_US/media/plvli_interact_lottery.png b/scenes_live/src/main/resources/en_US/media/plvli_interact_lottery.png new file mode 100644 index 0000000000000000000000000000000000000000..53660a23f2cc5954ff3c9733a8f4dba27a670602 GIT binary patch literal 7083 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 V;4LgLz&ii{002ovPDHLkV1jFIOzr>x literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/en_US/media/plvli_interact_redpack_gain.png b/scenes_live/src/main/resources/en_US/media/plvli_interact_redpack_gain.png new file mode 100644 index 0000000000000000000000000000000000000000..0726c8181612b7fd3d0724930b7befa055e43e41 GIT binary patch literal 7880 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 UUpd{PWdHyG07*qoM6N<$f)es)761SM literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/zh_CN/media/plvli_chat_quiz_selected.png b/scenes_live/src/main/resources/zh_CN/media/plvli_chat_quiz_selected.png new file mode 100644 index 0000000000000000000000000000000000000000..1f917227cc6ed60173ec32a90a76580ab817a823 GIT binary patch literal 741 zcmVPx#1am@3R0s$N2z&@+hyVZrk4Z#9R9J=WmrrimP!NZ|ago}kL$i-_g3=o}H)xh2 zi{KL^oB(oykP|=@0o&XFdIN5Ndw?eHu9XPCE{utBio>5+i7I~5lk9o#4WGv|!!zu( z(@y_^BvmAhGsAytE&xj|Bn<#RH8(V~qttwJ%in65S+wzPNi{u}pPJuR-d2w%$(8hw zaXNTwKqtAFh5tG;@9T|o(b6}PTwn~iDRaln0!g(seP3n#9GY3U31lHs+zGaR#iewf z0i-MUJ*dQDYk7Anuxy=J>CpU!xf~^`kh$}so@YVfXg8~6{yYB|4BJ%b`6 z=uG?!MSTGv4R;cC08r|Igs-;iuG?nDl2!!dfTyJ+tKPQ&)ORB^%dr%ky5%OO^93KD za0|}CxhiorgPlYjOu;|ko)^=k6CbN)*6-~c9*QGpS(;d7H3 zNhIL~I0!9>qTC2>bvFF-IOL;6WdAu#4fV?hF=5UrU3LQnRIwyql50T}fn6?HRLg~f z5NFzXb->xNegIqmSoOYzG2FmYJvreNm4oN=Z;;%ZRu;heGypV>6RyUSD-Q;zbR@6iD$b`6DstPwgRN&HWE%m>`y_W9K3Sca6WxDk=NiZO*i72 zSKb3vHrow2=rDx2QE1RZY7-D2aiod_?L=rW04pwVJ-&HC7zP87$pN5AA z0yi~43$>Ci1nwB1oduF2#H)jgAo9KeaA>$D2adwXw+`f%F2o#zJ8GNRnDtyy#7+cU zPlE$5_^ZJs9thWjR@>$K804ZjEX^<9 zPZI^^2Oxp~w?!f0ID`^l$Ge9Bknv!&e>Xw(eaot-&9am5A$T|CvK_$i;L5j4moEYQ z2+)j!LLB7cA^jB4uy7x@%ia!+`S@Lm?&2Vj0Oe;uaW6#SAxCPL-Xaq9HEIh(NBNlqhp@W3)zwY^3CijDIz6{KV!1*N`i1Es z<7W6o(bmkUupf6qQ7G0Tyq>m&bz5;d>qQ=`L!EWl#cl7Gw407IoK&&N)vG^49o|-t zS*djAYvu1TRUv453<HU5G>!mC9mR^ z&f@WEapt9x{Nl!CX^jllp3DB8BmYhPKCWW@awRUc?bwUu|2)6QF;tq?tJHOxG`?{h zBG<3_vGN<%MQn2NTF@3c+Xp;GBd%abzeFhR!$|@vpZ#*Q=RFsRYI=M(vGzA=0>f;N zewj4=T{vp{U3cZqP^Q6wU!~ltM!{>thJHeJZ|fyb1-nWnyPr>R?l`3THY1?6vhvq7 z{(Gdyh;>h$av`hN?{}zIx%96rrv=jbl7D;Vp7!6GFl6pvDlD}@S{CrF9CJ5_^s2(C zg$HwC?w95jo=qvCMc%me&OA4sjjCS+j)p>?JKtml{OF-}B~+I{Z2yD^I#TSxV!A{9 zlx$QTli(A*NBRZd;=Wi$y2xKEqJAy7LiNmJn_fPnH+rcGCnSWcW@^k#9{*D*q#!NK z?AbW5@V>d3Pgk6kSF-5Hu)BN_`e?2-ru-exRfU56S1(~yIu%~cm`h|Xc}31PIt@th zN~X9R$i@Iw)X;40qGPI+%X;+cA3r`gJNc&+DcFh{ zqDRc_FCD5g>*hg!5oE2$&wCDbgv;Q)^;+#e%t%~_7w0(RdbFaaV$jTG>P)n(YS!Hv zUq!Un=nLY4sKyrMun|i|h4%FV(-SF`8m8WyiYrkmO~qkhj~_QTBNSqATB7#b$L?21 z>b3?ffm}NKWav@&%|zmfuFVfxgziUtqRy`e*}NWQRy>;6>!mi*R+dr9B9CrMNpZEv zXZUYmUYNYOq?++;kWDHR`~Bx(Nj^4=Q&Eljahub|NqZdDt4YW9@6A_zI6R}txF*MD z)-Z9wZ&k{I_&%iKoTB=^zWvFTS1NfW7I}LL?!j$phd`9C=`m*;Gj~@%p`mkQ-fv}& zMDh4!EN!sC2fc=yGu@ZFoW|#EN^snr?d`{C)2|aVo_M*G@!wKAdRn1fLNtH%eEX*I z;2T=(xT&3mMT5tOmKHNwdW`|vDgUwd#uMASI7z9*_0_%ueY02YwTebAiC^JNQZv@x zh>4|b{J|`K&3a;F;y@-4&<|NPHI>DE#gPnls*Zz8*g+PD@Md!dHMMyibk_cgmA|Wk1|V(Ne+v5Sv<2xCvV&`Z}vafQ*xgmVM(5j5hKRVzU89SoX<{UZvFi!vz$Tr zV|y@T@s?ZS$$$-(*Cu+G(G@LeR%D}6HDipSt5GvHk~BW{FBYx)IVVjb?zCNDyiD<| zMBS{V#aQGh+dg*N?}^*w4F`)q^3iui^rKbn1*J5T&%R0{==&^M#h?$kxy?>1RM|C$ z&`-3=gvm%6?wu604MSLt`ohHPh=>T?7<3*dZ%DND23cRLMW}G;3)$Y(HcW#h^y&h= zvOJTkVRkx%!&Q{Jbwp=TL+?*$%hQ6R+0tH)j(ND!)zae9+7gemLREatQeBS*4HUCS zIV>2WRG8oP{zZQAG~%CzCga zT~NJk+gag+H3^cW_RGV+|IX3rs$V%b^G-=t<|3>-yg4>62037%8^at|u7&yy{3| z@yR|}tB9IA>d^xoLsR!`WG)GGh29)ZP&r_~e~G>QC&hVTlHcYd|JHVX0TbGzX>Fl< zQX*rDX~KD)h9_#C9rx+0{dG7tGetvR^Sjf~!8EtVI2#INZn6*M>7jeiP^r^FmK zAL5mN+&|EX5%T#NV)XJPM<3&Zp8J394!n2kz3!+}TEo{EX6ug*DQz12IvV#zPdDL{ z<&ZaK%PXqBqvPj|BS*)+p0|5ZPEXTz9~r%wT2}Tv?nmfU*x3xFPC**p>Ga(*vr>cn z|0-|=F|s%1HsZaJF|u80#}D&kv;vu%X$w}g`urh^tpYKb)E=eMLbjV@7Sz!TQ>E7o zzjtFu{E6Luru*dr_1QY7zwnwM_li^3WdjovVbeAHFYa)|{R`S&D#$2~iEo`ql3(kO z`FM^g%-ftf?B%*Z&Gu*SvXVoO*FRq5P`c-q>*U1d#j>0ytMQmXfq zOTe}%_^@`{nK|^8q}_KN10L7=_YF&5sW+RGawru?&@4AFzr!0jonLkxQ$&EldKn{0G$b_sXoXs6}z?$iaz-q2My=|5pxYbyQ?zGbgt zm1k3>I>p>?_Y1T>RZxF_PL$C*c41-DE!RI+W_j)DwGRaKZlmyurVr`eQVgAv^Q@Gb zBm-X^9aUbUILp#RXoH=7b~4(81vAn8O?8hnb!uTvOJtQ=p8Pj}RBXoDnI;hZ;`(); z=Rdy9^yK)q`woAu@5!kV4-oz>GI?f|s@c_djv5?(WTPc{=}0lYW10OT=5v$W%$vQ> zS(Oio6DP;U_6o~gT(}oMJHwqfCb55VJZ}A0RHIcPSJ0_t8Kv%-Z=_!AyFMxD8=Z1F zyzg8Lu5ijj_SVS~E@>=e-39fp(bF%qXb5Fe%Qg+6uRz)xiPdG3+eAb#0!_FpOmESl>adyl{ zkB`+{F^P&hHC-_1)X&(@zRuO)5t$Ir#=SJm)Mh9u|Gt;z_i%*&WK@wesY~C)uzB8@ zfg&|T3+R-+%6Q!8cTA3Iuwv)fVocJaeF3NFz37W6U9M@;9eG?`&ati>wt?4|zjJnv zZ5-@_)&=El&HfJ0PKkd^JsI>*S^d2ZZX^Tx$jI{gr*9!s-5Amjj71k^$l>|b6G}eK h%d^*LYD4V6Or?tU{4RZrP)Px#1am@3R0s$N2z&@+hyVZ?s7XXYRCt`#oO`fkRek3_zqR(>=bZcK+qWMyjWp0` z5af}>*Eo?uslf`qQZYV26l0>`P*aJCnM5&DGx$ejNR>$(tEPfPV??x*XmCo5s8~1z z6G;^+0puZR>86`*`gLFDxgYB{f2_67+2`Kdeb2eH4}Mj<_T#L*9^dtQueFcxGbH`y z)n{Pje1r>t3lTXTr>6p&5vGB9DB49?!f+JiAgcR-2T>lv>BI7xTlfB~#vnh<#`NxY zZ=`S+V|WuPuR!%&1oP}F#Ub)2qTj`FJJ#GQmwsmcBz1XB`iTRmcfY$%rk7y!8sIXN zjYF;Lvfez~dzc6A!WFj=$M?vkpXr{AaU73+VgTx0@7j#&)gafRoLBi}S+hUEd*Kn# zPa<-wT=vmJMr=%fRvcU(0~Y~Kg`F0lP%*S}6W0Q_&V;%0fn=jTpl#U~9wz5CS> z-RE5i@)1PNK3VmiR8rlI)&EJnf0tbP?fhg^c~St>ufFRXHSXgAm!FLKehPFa&b(h< z|Jlc%ZAH%tKvjf)eCK-*ZUnYG+s^!y=?Kd8yzX&mAe>A>&GU^KJXaeRXUA^(${b7d2l6em)Jw z`e`@fUN3L_!lUE7G!}sR4_EvmHo5~ieXOoMcW56){s#GtzkOiT7e)q9zxeiZiR7EC z2RtJn0_wnx{q}ey0ui7Bg<~D&VIR4^M&2?SCyoT5e(4>jBl`c4F~!yhoVpFp*aD3% zWKEds!ZRJ1OQBe|@mtnGJZO^^HYBhyfvE&ig@@;%H>S&{>_+8Pqv*sn19`pes#&Gj zh3eTjW#mJEEwiv?JJcIcH&BaUI)SZqIHd*+0Ue{x)s8%aq6gx@8i=hwk_fg=!AsAA zsfqFGR6ScMcIjlc>BBg^>>&G!z=s5JeCzdW zET;b28i)*7@z+K`3`|bL3tj+|^|9&~l~+>Jn^aFMr6=aVFTVXfDA$ZPxB@sD22_Jc zz!YBp73%d;Ub#*SSn5EQFRMo@$FeqZ2ZtA7q31c>m;q>!3_!#{VSpHBXZ%EtH&NH{ z#Vg*kE&z4c73ZLOq1e03&7=p1Iwf9;F%@p^n4v;phuy2 z3f$8`(@%h^2XFrzETtZ#5-c0QivpMmG!+gsVebLhzW}`s&>M3+a-;6L;+*5*6s-#0 z-LH=HkbGQpyzoq&;&wkn_C!W9v4q*V2+yB_iJDjHn*?ly`-*VwoLBUFkHHz6AZ|k5 z18gvJixh_z(Pwg^nZ%c!YIu$_f#b@v3LMB`p$kigVXj5zTaQ97L+V2PRnLRQ=5dC# z1(A>I-LHP*Y6*x{0p!s3E5+&M<3>i38;boF+C9(PhkLMDpxcFJ1oJho+#?x)Sk;N0 z9yD8U$`r&?LtT;$9eUq*i0FcCFg-a8nl)bEH7y+JK{thN21S9}eHdMAgM#)1U6?@X z|368PMj0P1a5%~BK}@i*ne5zj_2Qw?;ki-`3i^lx3*Xkf}fqXQEbb%Jc3 z0+&IN1|XdWedlJFNLI|L**wj}%TI%pfxauj(*zbG$O>pJ!BPe-2S+-j`w#c~C$U8) zYktDU9-n?hZ@cQN@{Zw{c_jx*@ji6DVVWa){#IyZkOt$GDjX{OA%G}SZ^70D*t!L3 z#_O}fdG6e{5o+-&bt{}Y1N)bP&NC3lkT>ArCbSn}A%Q~r#WiySu&gCH?{sLGpl8RX zv(fB*!2hZ~95T`RH*eaEi62D9%p_|N!FGzyb;##ZqIeR?Bk1a25G9!ardrrB30p1f zd)hyL%gdm?8i2sPKY~Y}f$0gD-2lBhJh23sV<2;tZl!I~-ce*C!89gty&mzlDcIcb zoEU`&X>>Y3kzFXid3%3(V3-4Kay6>k*9?CY)H!Hn6nl=5?LCG&xIi}7rfBt0r`VYW z$&RfgXKo|fHj88e%^WfXX9sodX~A3sJGQ~G1CZw4lCDM~U@bJJV6TI@g@Krr;2EG{ z(MgN8d$7-tK604inI*`TjzH8%up1l5sZ&H}%wl)WdLw7n1amt!xf=M3Wvzn#^}FlX z_V*ZC09p+^CBJ_!o$ozGdUz4d-HAm)gm`+A=+uowr)Rj4Zs7LwtK0>MWl} zmiWv~B(He^X6wXSAU=Ydc(MGJU+o)kpfoSR$%(-W0NS}Wb-+y4=(SQbFVN$Gs7lf9 zz(I#=wlR}2G8rR@MXW`V2$RG}5+idl_OUKZtl}Ifu;7rSj?5}W)9ekq?aMIJHKNHVL>dBsOE|;rQ`>CWP92a$1?w13?f2QH`JyIM7&{eYRS4W&KY0M2zDaI zZl1u-)}Rr2mu7g7VZMc;nUNpN$eWNJX`yL>D;%ooo&Umtz}DA3kLaA45fIdQB;P5& z_2qfbff`+m>e}Fy0LFIN!(h#fLGqj^5_stjh^z;%*@2@=xCi!=|7el?NQzr3ygz6R zQmgs1F<=a8487D~1k@N13w6H-L_~ahDilX^+_3^_Sj>h5*-}TgO~CAg2eoFA*kGN~ z`PAbShdUvOQRXK#xK_bqjz)HIHbQhUaEAxb@urc$D{06|${?UO28<1%*^=kDh~P+X zz&w;=r#FCfaFbnJvj>Iq;92V@z*w-R52%r{UJ2lN5VZu;;8lZ(p&5I_a&`n3AS5WV z5HgA&Mo_1|4iQ8_L{S8Z&1fPFpuDLH;44OdlZv=hzzZVi0R-*Md&jsWr$}oF+i}=> z0y7g(OK>8%c81Qi5l0xL8RAHc7wwYEu?A-Aux-*OBIZ(PX0Vh49mr%j^WF8SH1RBr z81I`3K6DllUv=HA^jVKf@(O@RZ+`0;s5^Ib^nmRf;ZPF}E_yL7fis?qP|)s@_xk$) z3KEB;C;044w~L7kW+H;kn?p=%!3oT#-e(l!+t^h1);Y2s$W{(dbq3s3XaKi>tP44V zShibuPP4{KZP0yU3|crO5;nec6Eag9gOBuFz4@(YL=<{HX3Q;S(+${p3Ow+P55*>H zFdYFQs8K^OSn>M>j}?L)Pq<~iy}7mnpnWPwZ6moLQ_ z<5OOd`nsw%rR)5y5yT4W1c#71$kY%eG4XjbgMN-i2A7>5fnKn#*su|Kh1<@<0Zi1P z9(=4UDElhabU15l)$2%u*I5SttjOTtF~0$>cMdE?#16cwXxXGwLCxA0x%4nzL*wQf$li-|JW&kFKUfY*33UNWV<2ZOAq0lIl z4N-}=>zG;;{JC*K&70Q#lcQ;dQ}vmjQbgmB{ul2v z+9Vj4vR#Fu7f~+nD&FZgh+pvU_K0dDCJ|PU)}y|4D+fEyxfYz-dSf`V8^_Q~gJP~e zuMFH+ur<8LOE4O>ft#WR@)%m;i$uYK=6O(wibfU*21Zp-F-WZb-2jLx6dmscC?R1% z2nE%La8WHpF5`}0ln9kBs*Q5C#yTf4M2Q#4Dv3Z*2Mr*W?2uHh1rL}D7B{X1cV}5W zWnob?i4o^~He3XWh=V2ZB#J^rAlJmE9KvmpTNCO-w(zIvx(vjc~dIteHhz zL8^Z7r_oqN*#X@Ul2t`GUhXTDz$qllR^rO{OgY`2d$pb*T}8_zL(xw$d&eYkUW7|> zP;?_7AyssW79k!M!6xe#;iU-WC~(U7?+P@MVbQHp4-a79&WN|N%Znd3lT9V+D1rAG z6txC5HfW#9-~~*=3J%PdDt*8w6kM8O5L9e@mSQuO;- za-R}mtpw&=7lH>3D*O5qJnoT1-sfB1xN|q6^+EJOR9{7& zh4*vsb4nHIkd}AGulzZSrapDAy$sDAiiIrq3;!b6a?aL;f$WQL`rvx`m)QEqBg+Ol zOclBva0Sv1gDI`N23Mwq&zP9f^a1K1OOLat&Hyx*dpA!(3m^4hq7cqGOvKQ#Y0(zn zu8QANqb68f54w$mZX7=f0eCRN=|ig;fl;VT?RPugClupB$Wo6>i(!3K`hr;snhhsh z!E={ZGNG#ddnLSA+R)NX$ucxjFcwpWeicqGI%QZBCebM({ZI!RiB}Qp!B6#}2&)fM zh+~A^sw=2;q}6#5j1#|+sHDCKS2!>#AWb1&2CVOpPe{}ff1Ra(LB*k2j<>`E@cOUj z8AMnQ#<8 z!6IJW#0iSU*udRmkDo{7LwD@;qj&n|=?dm5y+iAj16=3)I${SoIdUCJC*5JlKHaP-(?*Y83pwj#H$+Y;Af zulwo^sMmdnHUwbFeL)W;=JSPuu@B{zI|z7L@9h`Xf^%BW{C{u_)c7$RPj z5ua3b!itQHjRp$698c_ZQa{}VUYt!>46h}9F4qz`5wF*b-%CAkqCJRO7+evD30?^v zsu+sV$6KBYcT0Z)2DNqWL3w1X%1k_PWvUbuHaP=rUpli^27r}fZz69Q%f<65mG@%M zT76*k1;6bhsSOf57W&p+J(#XnO%znb7a%LJ){O_A@(5Aqo@$MQ3HjsK{vINKz7mmD zC~~l+fTRVrp5FsKz9;!JA$3C5jOZPTX%rDrH->z~&a3{u{K?n)8!U&}$ECMol0TyV zXAwew15SBw9Bk{r){bA`0U(4&Kj{w%PZ9}AGLey-RmRlGhX?2;|09TTTktxd63d)t{g9)U)v88AzA!KJ(+Owq4s9}Dsle3U4DK41 ze^8wiaOS*sK}Pxbv1cJaj=vY_U=lI|=`!&#Kx0`Wse$$h5)G@705iQci}lHdF+RC* zH4t|j?9Hn+v4Zr2m%kGju&PlwYtDl>D)lVv+2~`>smez)iwm$}0X7F;@tI8!Rr0x= zHt0O;Sgh0)c`-XM1ruA~w4Iguj=;XXaP~P+ue9^n_aVw)IvqTlPN6o!?5B|j(G9_K zwcK>)+8^2g(CF@>ReuK({>Egs<@cP7^VzK};M65J7Q-J@+WpJ_3atmA%#th!{N{D= z!tnPC-~K#&=aYlqQJAkod%}Mww=@s$`skp(d%ghs{s#Wj+u*#5{j;URaNpO5`|~gV z0P(>}hWrF%a@g30qm%w#xs%E6uGNaJ3ZUHZ?OZ?by7yz z>8)_tJBQ2t^WTFMejKCpf2s|~8c>)cxa|FM!|H$3bHYrZ{=u)lmkpg;m~Eb@*y?n6 zBfRx`xbU*!=e-vE^Z$iQuNt9_C*jYp^}T%Wjj;12E6aTD!|-dr4;!}n`)_>)_B{?4 zT>`&c`5&O`FNf_%7|w;QL32~E*tkYM_VvFyUXc?!KOg)0r)abvA&2n~3#UGRWt~qw z?8Cp3p7__{-+%nQ!S#VByebd}pZqZV$y?yAPY;(rxEp@(Ex2cwKfbvO_B;yb{D(oA zfB6#FJbY?9#uz3#5Ad zw(J-@yZz4w*LezeR1DqRVIV{S^#)w@YIxDIzp9yAgkSp4aLJYan4W?+{~k<+ul4sm z0$;fWCYMIj0_9;3R>NWR4LO{mOPi&x%}S2%pqvb!ffUB=7K+O58p3$TQGCl z;P<@`!M2L`)aiIjIC~oWx6iKZ#^Pak{zZ^hwurs$kKh+x?yp<(@Y#<*Z4t;SMsThE z_wP?*4O$z(d?dTIj0B1pTm+|_HF&)9B6!hD2JXh;J+Py)J$vyeY_9;g_aQ%)GtT#5 zeD9mE^Fla1ytD67IQM0+<&42QC3pb4J__xFQ0tE8K@4c+cel%E6b>9%r%}(v1WcR` zFTWH{srYPXoDYqP{@d{)f0Xn~uNiLp@Ke6NNA82~-|er@toVCNM||Sq-+wT8Cl9`A zw+VY5gD8cx29kLzJkB^qSZo`G1N|ntaY!xv%CD`ov|s-C@PEZD9EREi)B~tT_ruIq zzuyM@|1BsmvjuikwlS*0rtNU`4TG`(_kIx`zu#ZiCgGeH`|BS+1ou; z`E%9k{^4ha+xkGo;ZJ*hE!a7)C$IZ6xad`b-~a6%_~Zw@A-V5saCaqCjS{%#CfIhS z2cz2>vEM`ICY|oztp(4T94Pe+s8mT$Q_bdHuOG7dEx0{(kdmK7<3$sn`A~{Ka)}*g@ANk|E724a7U?3fBS{gxZ3@Q{=x}4-x!$P>^WdV#cDR^Ank@_#WASegi}uU>nA0- z0v3+I{87IEU$!45uxSfySoU8*X~%Qm(gJi^qe(FGIIa98^7lVn6ZMe*1kkH4JR8eB zD9<}?A#43k{pFMwm7NA-Qj)CfWtOkLJtU3>3stL8nvP2VCN9Thwn6F>lc>x-sP^I_n3fT^|0KS!tud;)PF9Yt)bG&X=G=^M}4 zLL9#hk;_rJ5Yf{ZA$I&Zp%m4p5qS{RJIS)Yldr68Fjk}g58UhsMudHFuK)l507*qo IM6N<$f-g0hd+)v188*i(WkiUGGV(XGXM{)&8JUOdvZ7>kiV|7b;aHK~ z!MPtj*XJ6qelM>3`@3IU$(H6Y+ACaFAP@*G0&Zx1IW7McCCO!fJ4#%9IY{s5ndw0w zjhWQvu4E7h3B=MAWpq*u1OBR~@%pE?g@FngP$mWDw7{GWI57f8CXkB&1xQeU0HLO! z5Dp%gf;1%Pg#%d#kbwX>A`oB#JWN0(9B7h*P9!Ko00Sz3pawTtzD{F$jX62q8}mq{*Lue-11- z3Dx&-0U8(ACBSn9LY(G8p6#rgBB3+qED8mFRUfv+Uaq_zX@x`IUQE{oxVAYX;R$8# zJxxABPti<@8K_qTX(EK@wtFsWJ8C@R!77L1+~Aowcq(=@^kgc=0Kb+^$a5h$2@}xw z2;tg~fO`=9O|jD&!9 zaIm)yoS6@$SwWgG$QHXOG$KrN?!v@ZWtc$?0u&>TzC{8}GSC47Z{WwWy!adgkO>D3 ziogp=m>U2^QiP^NPyz>Me?hq{=!Re7n-yU^Qsz0clK%(25OMq?Zb6C(WQ&4_Jm9(} zc!~Ijz?23g2oemTAe`^SOd6EQfB-Jw$atj431C-13>4VVf%^!6mI4k+pbQRtIKW*5 z@I!(o*gxn+FkmhP992Oq5?INB<2}#}2hxyZO3*eV|D@B?KMV6O(U;GkL_q+J>e0qS7jKP0Gu0UHGng#@i|kc>Fi z6*|)91Mx`k8g{782`-}^exw6E)Z~`!Crn?ON&A7dxy{b>DISa6+iR$wDm*BxKA5g< zm=1fezyC{W1sgV9RPu4!B=`}2znRemz1}sqez5O^T{D^8e6$L6VyA?#KjamFKxk+Y zhI%N64@LPQx;B&Sg9n5D!Mn~OTUD*nDE@P&lld~~UIHnK!BL-#)QEvbpNgZ(m@}4* z%ZC4oQ;xNhl?_7{oGrEyuT|$3G#skTXjk+sa(k#{7om|{Y6Gjq6t&z|L zI#pq7DQ8 zIIpg)CC$yrLHW4UZ4GpXNPHr;c%iD7&snLvj=@L!lbLHp%?DoVAc9u(z1d(OohM>> zAu0APt9y%!Yy72##n+*kG-3(H=V{e6Pk^4Wv9TUG65|E&@8vWrdeua$D)g||Ko(#3 z-Id|lwqQRqEX9Y~$6H|r{U)h*iHt0O!nW3KC1Z(YM*QJnaB{DiI*l%>HstruVO2za zYuZHs^&Y0Qv@~|6G&Z)Bc<%{=$>z}gXa?lT(6ATRxCd{l_i}f*5$tPANmX83R4Tc- zHc7M59k`V!SBH{dQh#?zNdU^y(wS<>6^O_J|dxTocGFp^H4Pi|Y z=7<8`n{=JFwbwm;0~Wld6(CC%#*d-no&>_!sr@%m0W`5etYzh;1}T3FN?;p3x+ z1tb1P37mJSsjsc9tYEPp?vM7`R9QIf6bCM;EwtkVtFh5ly+75QweOy3H!bDdR?S~N zg4u^P-0XJ2Y)$8P*Vl7PS^28Y(OT_v`{ye7H>C$NNvn}|)3m*^yz2bHS2YaOCoNO% zlGRTBx6Gwxlbg4=(oCH6fZlot3|Q z0m`#k(zT7A!M^|LcnlA$c{_3MCT`~r|4R$Is-R1Rp1;NaW#$>R=z!h^Op5W zH-0*g%3|AHY4-k$A1c@kR7&W|^Z>;ENEsO6dLT;Nua@YT?QA&M^Mly1%RS}it(e6! zNs)Q%AVu^&48}vW?Sh5$*tKDFOt9QG|M1acySu@uH#)VLc}z!0(cCW*5e@G-)CO6J2OZVZpz7N2^d*Dz`PQCfN+k+Vr%{*#v?H-7@gsksi?hsEA~ zJKCW%U!v6fd}?iXn&?PPzU<@F;u@z~_|AT-1XOFT*F$QcuWqtdoXIZKZ-3f3l+D%w zH%ex{QQNS)RXa#s+p~YQ0O=v?8kv7*+{eM@?bn!^PBDy={n zp4V7_!=O1Un*Rw+Rc^AtXYAOq8^qn)B|zl$Cg%{t{33b;ZEi_FUT(tl?Y8XLz+%=9 zNM>TeFQ!Ln$#2MF-mK>5$GsXc&%1D$Pa27=f!A7Y9G#|d(vVj{NHwL<>K%Rq9K;On z9NZ82jem@f_c!tO71Frp$9x*Afl&7FkNaxTGRHE|QB=em8oEe6dehz&&%k*$tht_- zmnSS~_Fxue9t(f$9nn3KHB}%wk&m%TP5XyVd z=-wzN=Pj_aBYAd*NcCk=?P8oF=aUwQE$1IaIL#7m+HJad1CQZC_d&PgO@m+i!EYx* zi3w#<;x#Q{sAtPC@fbJdkSU*rW~}(~@9+{Z-{* z%bHGzTO(Naj?`?+)U_yY#+lWgfs1{dyZ~M!Ls>#BCh5wQq_wyhvKl44L=#VfjAcDs zZ=Qr%-~ieA2kh0iHbl?Z5eGfYSA=rlqAZaif1C2H(U2MkQ6ef)qB|Ff!3#K@b2R2J zwEFgeX9cBZPN{pCtVl@?LPE@E)w9vzG=f)Xjbn;L2cL%#^hWD;z{_*sxkN-n#Nvyy z{xaV+Dze$EK6zjb$B`L*u;5-kH7CL8F6-@Qf?1YCJ=tG==lmMvi+_DxM^5O-`Be@c zQ=Zd(gIZ(JHX~cmuqT?y1`(FCFj3oM?c>4U-*{4!&y*@kHMv-Gk$1AK_GX=*#kV1) z+*<4&y(RG{d%>N#ps$&w<)L4L8evpx@^^XRp5(# zHH~TdQ_CC&$qLf@)j_$h|ES(zhs6c&&JclzSwax}2evs9Bj~NHF?+$J&QQ5%YjR_W zYE6(DM25P#X;e?}qqrIokAYOfb(7a#ksn7FXZQ9>*b|fGDDu-E;8QewHSt&M%XXs6 z2v$ybu{;Z_7-&-dZe>Na8u^w^dxW9c3E6&UBqgjMef{ z^|-S*C9BJBc5(miif{-L|A&r9=q6${H!$y=LT^LRd3!^1i>!s%mG0k_ESL^yD{*^A zPm-KZULh4#-ONtMo9%x|E+TQ~#&&jg4t5+YUhKc88fAS4Gk9Dbr>-5ix|--4$n@R# zaU^8I=IO|KoN&i6sW-pLZ@#3<$!=+^}BXCH8;3KkbhI literal 0 HcmV?d00001 diff --git a/scenes_live/src/main/resources/zh_CN/media/plvli_red_pack_password_icon.png b/scenes_live/src/main/resources/zh_CN/media/plvli_red_pack_password_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9dc9fe0edb6bfcacabc3ed5a61a0f5c5cb7c66f1 GIT binary patch literal 12506 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 literal 0 HcmV?d00001