Commit f827fea1ce0e93dff2696bac5c5b11b2e88bf923
1 parent
4dee6c1d
no message
Showing
27 changed files
with
4108 additions
and
39 deletions
Too many changes to show.
To preserve performance only 27 of 159 files are displayed.
Podfile
| ... | ... | @@ -36,7 +36,9 @@ target 'metaCode' do |
| 36 | 36 | #七牛 |
| 37 | 37 | pod 'Qiniu' |
| 38 | 38 | #支付组件 |
| 39 | - pod 'CNLivePayCostModule' | |
| 39 | +# pod 'CNLivePayCostModule' | |
| 40 | + pod 'CNLivePayCostModule','0.1.8' | |
| 41 | +# pod 'AlipaySDK-iOS', '~> 15.8.30' | |
| 40 | 42 | #加载GIF |
| 41 | 43 | pod 'SwiftGifOrigin', '~> 1.7.0' |
| 42 | 44 | #数据库存储 | ... | ... |
metaCode.xcodeproj/project.pbxproj
| ... | ... | @@ -7,6 +7,10 @@ |
| 7 | 7 | objects = { |
| 8 | 8 | |
| 9 | 9 | /* Begin PBXBuildFile section */ |
| 10 | + 19023DB52D801EF700872398 /* CNLiveHomeLanmuController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19023DB42D801EF700872398 /* CNLiveHomeLanmuController.swift */; }; | |
| 11 | + 19023DB72D80339800872398 /* CNLiveHomeLanmuThreeImgCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19023DB62D80339800872398 /* CNLiveHomeLanmuThreeImgCell.swift */; }; | |
| 12 | + 19023DBB2D8270DA00872398 /* CNLiveHomeShopCategoryCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19023DBA2D8270DA00872398 /* CNLiveHomeShopCategoryCell.swift */; }; | |
| 13 | + 19023DBD2D8282DE00872398 /* CNLiveHomeShopCategoryModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19023DBC2D8282DE00872398 /* CNLiveHomeShopCategoryModel.swift */; }; | |
| 10 | 14 | 1909DC962C6309EC001E7986 /* CNLiveDigitalResumePreViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1909DC952C6309EC001E7986 /* CNLiveDigitalResumePreViewController.swift */; }; |
| 11 | 15 | 1909DC982C6342C4001E7986 /* CNLiveDigitalThreeCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1909DC972C6342C3001E7986 /* CNLiveDigitalThreeCell.swift */; }; |
| 12 | 16 | 1909DC9B2C634D6F001E7986 /* CNLiveDigitalThreeCerCollectCell .swift in Sources */ = {isa = PBXBuildFile; fileRef = 1909DC9A2C634D6F001E7986 /* CNLiveDigitalThreeCerCollectCell .swift */; }; |
| ... | ... | @@ -101,6 +105,10 @@ |
| 101 | 105 | 192ED4872C575EC90057244C /* CNLiveVitaeAddWorkFirCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 192ED4862C575EC90057244C /* CNLiveVitaeAddWorkFirCell.swift */; }; |
| 102 | 106 | 192ED48A2C5771930057244C /* CNLiveVitaeAddWorkSecCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 192ED4892C5771930057244C /* CNLiveVitaeAddWorkSecCell.swift */; }; |
| 103 | 107 | 192ED48C2C57719F0057244C /* CNLiveVitaeAddWorkThreeCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 192ED48B2C57719F0057244C /* CNLiveVitaeAddWorkThreeCell.swift */; }; |
| 108 | + 192FDB002D8BEEB300F8723D /* CNLiveVodCellBottomView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 192FDAFF2D8BEEB300F8723D /* CNLiveVodCellBottomView.swift */; }; | |
| 109 | + 192FDB022D8BF38500F8723D /* CNLiveVodTrailerExpandCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 192FDB012D8BF38500F8723D /* CNLiveVodTrailerExpandCell.swift */; }; | |
| 110 | + 192FDB042D8D0B6000F8723D /* CNLiveVodShopExpandCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 192FDB032D8D0B6000F8723D /* CNLiveVodShopExpandCell.swift */; }; | |
| 111 | + 192FDB062D8D0B7E00F8723D /* CNLiveVodShopBottomView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 192FDB052D8D0B7E00F8723D /* CNLiveVodShopBottomView.swift */; }; | |
| 104 | 112 | 1938BD172B3D6C7F00390A34 /* CNLiveAuthViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1938BD162B3D6C7F00390A34 /* CNLiveAuthViewController.swift */; }; |
| 105 | 113 | 1938BD202B46799A00390A34 /* CNLivePlayletHomePageController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1938BD1F2B46799A00390A34 /* CNLivePlayletHomePageController.swift */; }; |
| 106 | 114 | 1938BD222B467C1700390A34 /* CNLivePlayletHomePageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1938BD212B467C1700390A34 /* CNLivePlayletHomePageCell.swift */; }; |
| ... | ... | @@ -137,8 +145,31 @@ |
| 137 | 145 | 194134962C2412C7004FC047 /* CNLiveRealManageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 194134952C2412C7004FC047 /* CNLiveRealManageCell.swift */; }; |
| 138 | 146 | 194134982C292199004FC047 /* CNLiveIdentityRepositoryController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 194134972C292199004FC047 /* CNLiveIdentityRepositoryController.swift */; }; |
| 139 | 147 | 1941349A2C294A78004FC047 /* CNLiveIdentityResTableCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 194134992C294A78004FC047 /* CNLiveIdentityResTableCell.swift */; }; |
| 148 | + 19416F822D3F9B3000ACD0A7 /* CNLiveTVPlayerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19416F812D3F9B3000ACD0A7 /* CNLiveTVPlayerViewController.swift */; }; | |
| 140 | 149 | 194455A12B6B3310006C5A2A /* CNWebView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 194455A02B6B3310006C5A2A /* CNWebView.swift */; }; |
| 150 | + 1947297B2D6D8EF500E55857 /* CNLivePlayerTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1947297A2D6D8EF500E55857 /* CNLivePlayerTool.swift */; }; | |
| 141 | 151 | 195226792C294C8E00CB0707 /* CNLiveIdentityResThreeCollectCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 195226782C294C8E00CB0707 /* CNLiveIdentityResThreeCollectCell.swift */; }; |
| 152 | + 195650B52D7047C500818FC8 /* CNLiveZFPlayerControlView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 195650B42D7047C500818FC8 /* CNLiveZFPlayerControlView.swift */; }; | |
| 153 | + 195650BB2D71B12B00818FC8 /* CNLiveVodPlayModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 195650BA2D71B12B00818FC8 /* CNLiveVodPlayModel.swift */; }; | |
| 154 | + 195650BD2D7298E800818FC8 /* CNLiveVodAlbumMsgModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 195650BC2D7298E800818FC8 /* CNLiveVodAlbumMsgModel.swift */; }; | |
| 155 | + 195650BF2D73000900818FC8 /* CNLiveVodAlbumListModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 195650BE2D73000900818FC8 /* CNLiveVodAlbumListModel.swift */; }; | |
| 156 | + 195650C32D7543A500818FC8 /* CNLiveVodIntroductionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 195650C22D7543A500818FC8 /* CNLiveVodIntroductionCell.swift */; }; | |
| 157 | + 195650C72D769B2A00818FC8 /* CNLiveVodAlbumListCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 195650C62D769B2A00818FC8 /* CNLiveVodAlbumListCell.swift */; }; | |
| 158 | + 195650C92D769CEA00818FC8 /* CNLiveVodTrailersCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 195650C82D769CEA00818FC8 /* CNLiveVodTrailersCell.swift */; }; | |
| 159 | + 195650CB2D76A36300818FC8 /* CNLiveVodPlayShopCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 195650CA2D76A36300818FC8 /* CNLiveVodPlayShopCell.swift */; }; | |
| 160 | + 195650CD2D76C45400818FC8 /* CNLiveVodAlbumListCollectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 195650CC2D76C45400818FC8 /* CNLiveVodAlbumListCollectionCell.swift */; }; | |
| 161 | + 195650CF2D77023A00818FC8 /* CNLiveVodTrailersCollectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 195650CE2D77023A00818FC8 /* CNLiveVodTrailersCollectionCell.swift */; }; | |
| 162 | + 195650D12D77E33E00818FC8 /* CNLiveVodPlayShopCollectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 195650D02D77E33E00818FC8 /* CNLiveVodPlayShopCollectionCell.swift */; }; | |
| 163 | + 195650D32D79804400818FC8 /* CNLiveHomeTwoShopCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 195650D22D79804400818FC8 /* CNLiveHomeTwoShopCell.swift */; }; | |
| 164 | + 195650D62D7A9B5700818FC8 /* CNLiveHomeSearchController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 195650D52D7A9B5700818FC8 /* CNLiveHomeSearchController.swift */; }; | |
| 165 | + 195650D82D7BD6E500818FC8 /* CNLiveHomeSearchHistoryCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 195650D72D7BD6E500818FC8 /* CNLiveHomeSearchHistoryCell.swift */; }; | |
| 166 | + 195650DA2D7BD72E00818FC8 /* CNLiveHomeSearchHotCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 195650D92D7BD72E00818FC8 /* CNLiveHomeSearchHotCell.swift */; }; | |
| 167 | + 195650DD2D7BDA9F00818FC8 /* CNLiveHomeSearchViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 195650DC2D7BDA9F00818FC8 /* CNLiveHomeSearchViewModel.swift */; }; | |
| 168 | + 195650DF2D7BE18200818FC8 /* CNLiveHomeSearchHotModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 195650DE2D7BE18200818FC8 /* CNLiveHomeSearchHotModel.swift */; }; | |
| 169 | + 195650E12D7C098900818FC8 /* CNLiveHomeSearchHistoryModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 195650E02D7C098900818FC8 /* CNLiveHomeSearchHistoryModel.swift */; }; | |
| 170 | + 195650E32D7C201600818FC8 /* CNLiveSearchHistoryFloatLayoutView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 195650E22D7C201600818FC8 /* CNLiveSearchHistoryFloatLayoutView.swift */; }; | |
| 171 | + 195650E52D7E8C9400818FC8 /* CNLiveHomeSearchResultJuJiCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 195650E42D7E8C9400818FC8 /* CNLiveHomeSearchResultJuJiCell.swift */; }; | |
| 172 | + 195650E72D7E8CF300818FC8 /* CNLiveHomeSearchResultDuanJuCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 195650E62D7E8CF300818FC8 /* CNLiveHomeSearchResultDuanJuCell.swift */; }; | |
| 142 | 173 | 19565EC02AF4DE0E007D6727 /* CNLiveShopDetailBtnsCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19565EBF2AF4DE0E007D6727 /* CNLiveShopDetailBtnsCell.swift */; }; |
| 143 | 174 | 19565EC22AF616CA007D6727 /* CNLiveShopDetailOrderAssetCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19565EC12AF616CA007D6727 /* CNLiveShopDetailOrderAssetCell.swift */; }; |
| 144 | 175 | 19565EC52AF8AD1F007D6727 /* CNLiveShopProductManagerController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19565EC42AF8AD1F007D6727 /* CNLiveShopProductManagerController.swift */; }; |
| ... | ... | @@ -148,6 +179,18 @@ |
| 148 | 179 | 19565ECD2AF8D256007D6727 /* CNLiveShopGoodsListClassifyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19565ECC2AF8D256007D6727 /* CNLiveShopGoodsListClassifyView.swift */; }; |
| 149 | 180 | 19565ECF2AF8D8F6007D6727 /* CNLiveShopGoodsListCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19565ECE2AF8D8F6007D6727 /* CNLiveShopGoodsListCell.swift */; }; |
| 150 | 181 | 19565ED42AF9FEB4007D6727 /* CNLiveShopAddEditGoodsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19565ED32AF9FEB4007D6727 /* CNLiveShopAddEditGoodsModel.swift */; }; |
| 182 | + 1958B4142D83D2BA00F37E35 /* CNLiveHomeMoreController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1958B4132D83D2BA00F37E35 /* CNLiveHomeMoreController.swift */; }; | |
| 183 | + 1958B4162D83F45200F37E35 /* CNLiveHomeTwoHengTuCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1958B4152D83F45200F37E35 /* CNLiveHomeTwoHengTuCell.swift */; }; | |
| 184 | + 1958B4182D8572A200F37E35 /* CNLiveMinePlayHistoryCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1958B4172D8572A200F37E35 /* CNLiveMinePlayHistoryCell.swift */; }; | |
| 185 | + 1958B41A2D8572C100F37E35 /* CNLiveMineMineOrderCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1958B4192D8572C100F37E35 /* CNLiveMineMineOrderCell.swift */; }; | |
| 186 | + 1958B41C2D87BD3E00F37E35 /* CNLiveMinePlayHistoryCollectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1958B41B2D87BD3E00F37E35 /* CNLiveMinePlayHistoryCollectionCell.swift */; }; | |
| 187 | + 1958B41E2D8A98CB00F37E35 /* CNLiveVodPlayViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1958B41D2D8A98CA00F37E35 /* CNLiveVodPlayViewModel.swift */; }; | |
| 188 | + 196211DF2D64869A001925EC /* CNLiveHomeYingshiBannerCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 196211DE2D648699001925EC /* CNLiveHomeYingshiBannerCell.swift */; }; | |
| 189 | + 196211E12D66BCDE001925EC /* CNLiveHomeLanmuCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 196211E02D66BCDE001925EC /* CNLiveHomeLanmuCell.swift */; }; | |
| 190 | + 196211E32D66D36A001925EC /* CNLiveHomeOneBigTwoSmallCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 196211E22D66D36A001925EC /* CNLiveHomeOneBigTwoSmallCell.swift */; }; | |
| 191 | + 196211E52D66F5E6001925EC /* CNLiveHomeADCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 196211E42D66F5E6001925EC /* CNLiveHomeADCell.swift */; }; | |
| 192 | + 196211E72D66F828001925EC /* CNLiveHomeTwoDuanjuCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 196211E62D66F828001925EC /* CNLiveHomeTwoDuanjuCell.swift */; }; | |
| 193 | + 196211E92D686C03001925EC /* CNLiveHomeFollowCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 196211E82D686C03001925EC /* CNLiveHomeFollowCell.swift */; }; | |
| 151 | 194 | 1965FA3E2AFB176E00F0F435 /* CNLiveShopAddGoodsSingleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1965FA3D2AFB176E00F0F435 /* CNLiveShopAddGoodsSingleView.swift */; }; |
| 152 | 195 | 1965FA402AFB38AA00F0F435 /* CNLiveAddGoodsSelectUploadImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1965FA3F2AFB38AA00F0F435 /* CNLiveAddGoodsSelectUploadImageView.swift */; }; |
| 153 | 196 | 1965FA422AFB79EA00F0F435 /* CNLiveGoodsCategoryController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1965FA412AFB79EA00F0F435 /* CNLiveGoodsCategoryController.swift */; }; |
| ... | ... | @@ -160,6 +203,7 @@ |
| 160 | 203 | 197563772C5C80D9004E0F42 /* HeroNetworkImageProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 197563762C5C80D9004E0F42 /* HeroNetworkImageProvider.swift */; }; |
| 161 | 204 | 19864E3F2BEF6A3300586E72 /* CNLiveDownSlideRealHotListCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19864E3E2BEF6A3300586E72 /* CNLiveDownSlideRealHotListCell.swift */; }; |
| 162 | 205 | 19864E412BF6090400586E72 /* CNLiveDuanJuDetailCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19864E402BF6090400586E72 /* CNLiveDuanJuDetailCell.swift */; }; |
| 206 | + 19A8CD142D62DC3700509BCD /* CNLiveTVHomeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19A8CD132D62DC3700509BCD /* CNLiveTVHomeViewController.swift */; }; | |
| 163 | 207 | 19AB90642BB412C700B6A79B /* CNLiveDownslideOperationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19AB90632BB412C700B6A79B /* CNLiveDownslideOperationManager.swift */; }; |
| 164 | 208 | 19AD65AA2BA041210045A444 /* CNLiveGoodsDetailsTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19AD65A92BA041210045A444 /* CNLiveGoodsDetailsTableViewCell.swift */; }; |
| 165 | 209 | 19AD65AC2BA16CF20045A444 /* CNLiveShopCommentRequestShareModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19AD65AB2BA16CF20045A444 /* CNLiveShopCommentRequestShareModel.swift */; }; |
| ... | ... | @@ -169,6 +213,7 @@ |
| 169 | 213 | 19B153CF2BC540FF0018906C /* CNLivePayOrderInfoModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19B153CE2BC540FF0018906C /* CNLivePayOrderInfoModel.swift */; }; |
| 170 | 214 | 19B153D22BC623980018906C /* CNLiveShopPayNeedPaymentCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19B153D12BC623980018906C /* CNLiveShopPayNeedPaymentCell.swift */; }; |
| 171 | 215 | 19B153D42BC623BE0018906C /* CNLiveShopPayWeChatAlipayCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19B153D32BC623BE0018906C /* CNLiveShopPayWeChatAlipayCell.swift */; }; |
| 216 | + 19B711872D55FE130000872A /* CNLiveDownSlideBannerCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19B711862D55FE130000872A /* CNLiveDownSlideBannerCell.swift */; }; | |
| 172 | 217 | 19BAF0342C7831DB00BD7CC0 /* CNLiveDigitalResumePreviewFourWorkAwardCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19BAF0332C7831DB00BD7CC0 /* CNLiveDigitalResumePreviewFourWorkAwardCell.swift */; }; |
| 173 | 218 | 19BB1FDF2AEA3A450094D962 /* CNSlideBaseNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19BB1FDE2AEA3A450094D962 /* CNSlideBaseNavigationController.swift */; }; |
| 174 | 219 | 19BB1FE12AEB5C220094D962 /* CNLiveShopConsoleController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19BB1FE02AEB5C220094D962 /* CNLiveShopConsoleController.swift */; }; |
| ... | ... | @@ -361,6 +406,10 @@ |
| 361 | 406 | |
| 362 | 407 | /* Begin PBXFileReference section */ |
| 363 | 408 | 170BC5D0622EA2969D110A3B /* Pods-metaCode.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-metaCode.release.xcconfig"; path = "Target Support Files/Pods-metaCode/Pods-metaCode.release.xcconfig"; sourceTree = "<group>"; }; |
| 409 | + 19023DB42D801EF700872398 /* CNLiveHomeLanmuController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveHomeLanmuController.swift; sourceTree = "<group>"; }; | |
| 410 | + 19023DB62D80339800872398 /* CNLiveHomeLanmuThreeImgCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveHomeLanmuThreeImgCell.swift; sourceTree = "<group>"; }; | |
| 411 | + 19023DBA2D8270DA00872398 /* CNLiveHomeShopCategoryCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveHomeShopCategoryCell.swift; sourceTree = "<group>"; }; | |
| 412 | + 19023DBC2D8282DE00872398 /* CNLiveHomeShopCategoryModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveHomeShopCategoryModel.swift; sourceTree = "<group>"; }; | |
| 364 | 413 | 1909DC952C6309EC001E7986 /* CNLiveDigitalResumePreViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveDigitalResumePreViewController.swift; sourceTree = "<group>"; }; |
| 365 | 414 | 1909DC972C6342C3001E7986 /* CNLiveDigitalThreeCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveDigitalThreeCell.swift; sourceTree = "<group>"; }; |
| 366 | 415 | 1909DC9A2C634D6F001E7986 /* CNLiveDigitalThreeCerCollectCell .swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CNLiveDigitalThreeCerCollectCell .swift"; sourceTree = "<group>"; }; |
| ... | ... | @@ -455,6 +504,10 @@ |
| 455 | 504 | 192ED4862C575EC90057244C /* CNLiveVitaeAddWorkFirCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveVitaeAddWorkFirCell.swift; sourceTree = "<group>"; }; |
| 456 | 505 | 192ED4892C5771930057244C /* CNLiveVitaeAddWorkSecCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveVitaeAddWorkSecCell.swift; sourceTree = "<group>"; }; |
| 457 | 506 | 192ED48B2C57719F0057244C /* CNLiveVitaeAddWorkThreeCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveVitaeAddWorkThreeCell.swift; sourceTree = "<group>"; }; |
| 507 | + 192FDAFF2D8BEEB300F8723D /* CNLiveVodCellBottomView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveVodCellBottomView.swift; sourceTree = "<group>"; }; | |
| 508 | + 192FDB012D8BF38500F8723D /* CNLiveVodTrailerExpandCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveVodTrailerExpandCell.swift; sourceTree = "<group>"; }; | |
| 509 | + 192FDB032D8D0B6000F8723D /* CNLiveVodShopExpandCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveVodShopExpandCell.swift; sourceTree = "<group>"; }; | |
| 510 | + 192FDB052D8D0B7E00F8723D /* CNLiveVodShopBottomView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveVodShopBottomView.swift; sourceTree = "<group>"; }; | |
| 458 | 511 | 1938BD162B3D6C7F00390A34 /* CNLiveAuthViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveAuthViewController.swift; sourceTree = "<group>"; }; |
| 459 | 512 | 1938BD1F2B46799A00390A34 /* CNLivePlayletHomePageController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLivePlayletHomePageController.swift; sourceTree = "<group>"; }; |
| 460 | 513 | 1938BD212B467C1700390A34 /* CNLivePlayletHomePageCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLivePlayletHomePageCell.swift; sourceTree = "<group>"; }; |
| ... | ... | @@ -491,8 +544,31 @@ |
| 491 | 544 | 194134952C2412C7004FC047 /* CNLiveRealManageCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveRealManageCell.swift; sourceTree = "<group>"; }; |
| 492 | 545 | 194134972C292199004FC047 /* CNLiveIdentityRepositoryController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveIdentityRepositoryController.swift; sourceTree = "<group>"; }; |
| 493 | 546 | 194134992C294A78004FC047 /* CNLiveIdentityResTableCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveIdentityResTableCell.swift; sourceTree = "<group>"; }; |
| 547 | + 19416F812D3F9B3000ACD0A7 /* CNLiveTVPlayerViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveTVPlayerViewController.swift; sourceTree = "<group>"; }; | |
| 494 | 548 | 194455A02B6B3310006C5A2A /* CNWebView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNWebView.swift; sourceTree = "<group>"; }; |
| 549 | + 1947297A2D6D8EF500E55857 /* CNLivePlayerTool.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLivePlayerTool.swift; sourceTree = "<group>"; }; | |
| 495 | 550 | 195226782C294C8E00CB0707 /* CNLiveIdentityResThreeCollectCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveIdentityResThreeCollectCell.swift; sourceTree = "<group>"; }; |
| 551 | + 195650B42D7047C500818FC8 /* CNLiveZFPlayerControlView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveZFPlayerControlView.swift; sourceTree = "<group>"; }; | |
| 552 | + 195650BA2D71B12B00818FC8 /* CNLiveVodPlayModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveVodPlayModel.swift; sourceTree = "<group>"; }; | |
| 553 | + 195650BC2D7298E800818FC8 /* CNLiveVodAlbumMsgModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveVodAlbumMsgModel.swift; sourceTree = "<group>"; }; | |
| 554 | + 195650BE2D73000900818FC8 /* CNLiveVodAlbumListModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveVodAlbumListModel.swift; sourceTree = "<group>"; }; | |
| 555 | + 195650C22D7543A500818FC8 /* CNLiveVodIntroductionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveVodIntroductionCell.swift; sourceTree = "<group>"; }; | |
| 556 | + 195650C62D769B2A00818FC8 /* CNLiveVodAlbumListCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveVodAlbumListCell.swift; sourceTree = "<group>"; }; | |
| 557 | + 195650C82D769CEA00818FC8 /* CNLiveVodTrailersCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveVodTrailersCell.swift; sourceTree = "<group>"; }; | |
| 558 | + 195650CA2D76A36300818FC8 /* CNLiveVodPlayShopCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveVodPlayShopCell.swift; sourceTree = "<group>"; }; | |
| 559 | + 195650CC2D76C45400818FC8 /* CNLiveVodAlbumListCollectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveVodAlbumListCollectionCell.swift; sourceTree = "<group>"; }; | |
| 560 | + 195650CE2D77023A00818FC8 /* CNLiveVodTrailersCollectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveVodTrailersCollectionCell.swift; sourceTree = "<group>"; }; | |
| 561 | + 195650D02D77E33E00818FC8 /* CNLiveVodPlayShopCollectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveVodPlayShopCollectionCell.swift; sourceTree = "<group>"; }; | |
| 562 | + 195650D22D79804400818FC8 /* CNLiveHomeTwoShopCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveHomeTwoShopCell.swift; sourceTree = "<group>"; }; | |
| 563 | + 195650D52D7A9B5700818FC8 /* CNLiveHomeSearchController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveHomeSearchController.swift; sourceTree = "<group>"; }; | |
| 564 | + 195650D72D7BD6E500818FC8 /* CNLiveHomeSearchHistoryCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveHomeSearchHistoryCell.swift; sourceTree = "<group>"; }; | |
| 565 | + 195650D92D7BD72E00818FC8 /* CNLiveHomeSearchHotCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveHomeSearchHotCell.swift; sourceTree = "<group>"; }; | |
| 566 | + 195650DC2D7BDA9F00818FC8 /* CNLiveHomeSearchViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveHomeSearchViewModel.swift; sourceTree = "<group>"; }; | |
| 567 | + 195650DE2D7BE18200818FC8 /* CNLiveHomeSearchHotModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveHomeSearchHotModel.swift; sourceTree = "<group>"; }; | |
| 568 | + 195650E02D7C098900818FC8 /* CNLiveHomeSearchHistoryModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveHomeSearchHistoryModel.swift; sourceTree = "<group>"; }; | |
| 569 | + 195650E22D7C201600818FC8 /* CNLiveSearchHistoryFloatLayoutView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveSearchHistoryFloatLayoutView.swift; sourceTree = "<group>"; }; | |
| 570 | + 195650E42D7E8C9400818FC8 /* CNLiveHomeSearchResultJuJiCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveHomeSearchResultJuJiCell.swift; sourceTree = "<group>"; }; | |
| 571 | + 195650E62D7E8CF300818FC8 /* CNLiveHomeSearchResultDuanJuCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveHomeSearchResultDuanJuCell.swift; sourceTree = "<group>"; }; | |
| 496 | 572 | 19565EBF2AF4DE0E007D6727 /* CNLiveShopDetailBtnsCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopDetailBtnsCell.swift; sourceTree = "<group>"; }; |
| 497 | 573 | 19565EC12AF616CA007D6727 /* CNLiveShopDetailOrderAssetCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopDetailOrderAssetCell.swift; sourceTree = "<group>"; }; |
| 498 | 574 | 19565EC42AF8AD1F007D6727 /* CNLiveShopProductManagerController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopProductManagerController.swift; sourceTree = "<group>"; }; |
| ... | ... | @@ -502,6 +578,18 @@ |
| 502 | 578 | 19565ECC2AF8D256007D6727 /* CNLiveShopGoodsListClassifyView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopGoodsListClassifyView.swift; sourceTree = "<group>"; }; |
| 503 | 579 | 19565ECE2AF8D8F6007D6727 /* CNLiveShopGoodsListCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopGoodsListCell.swift; sourceTree = "<group>"; }; |
| 504 | 580 | 19565ED32AF9FEB4007D6727 /* CNLiveShopAddEditGoodsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopAddEditGoodsModel.swift; sourceTree = "<group>"; }; |
| 581 | + 1958B4132D83D2BA00F37E35 /* CNLiveHomeMoreController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveHomeMoreController.swift; sourceTree = "<group>"; }; | |
| 582 | + 1958B4152D83F45200F37E35 /* CNLiveHomeTwoHengTuCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveHomeTwoHengTuCell.swift; sourceTree = "<group>"; }; | |
| 583 | + 1958B4172D8572A200F37E35 /* CNLiveMinePlayHistoryCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveMinePlayHistoryCell.swift; sourceTree = "<group>"; }; | |
| 584 | + 1958B4192D8572C100F37E35 /* CNLiveMineMineOrderCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveMineMineOrderCell.swift; sourceTree = "<group>"; }; | |
| 585 | + 1958B41B2D87BD3E00F37E35 /* CNLiveMinePlayHistoryCollectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveMinePlayHistoryCollectionCell.swift; sourceTree = "<group>"; }; | |
| 586 | + 1958B41D2D8A98CA00F37E35 /* CNLiveVodPlayViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveVodPlayViewModel.swift; sourceTree = "<group>"; }; | |
| 587 | + 196211DE2D648699001925EC /* CNLiveHomeYingshiBannerCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveHomeYingshiBannerCell.swift; sourceTree = "<group>"; }; | |
| 588 | + 196211E02D66BCDE001925EC /* CNLiveHomeLanmuCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveHomeLanmuCell.swift; sourceTree = "<group>"; }; | |
| 589 | + 196211E22D66D36A001925EC /* CNLiveHomeOneBigTwoSmallCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveHomeOneBigTwoSmallCell.swift; sourceTree = "<group>"; }; | |
| 590 | + 196211E42D66F5E6001925EC /* CNLiveHomeADCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveHomeADCell.swift; sourceTree = "<group>"; }; | |
| 591 | + 196211E62D66F828001925EC /* CNLiveHomeTwoDuanjuCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveHomeTwoDuanjuCell.swift; sourceTree = "<group>"; }; | |
| 592 | + 196211E82D686C03001925EC /* CNLiveHomeFollowCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveHomeFollowCell.swift; sourceTree = "<group>"; }; | |
| 505 | 593 | 1965FA3D2AFB176E00F0F435 /* CNLiveShopAddGoodsSingleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopAddGoodsSingleView.swift; sourceTree = "<group>"; }; |
| 506 | 594 | 1965FA3F2AFB38AA00F0F435 /* CNLiveAddGoodsSelectUploadImageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveAddGoodsSelectUploadImageView.swift; sourceTree = "<group>"; }; |
| 507 | 595 | 1965FA412AFB79EA00F0F435 /* CNLiveGoodsCategoryController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveGoodsCategoryController.swift; sourceTree = "<group>"; }; |
| ... | ... | @@ -514,6 +602,7 @@ |
| 514 | 602 | 197563762C5C80D9004E0F42 /* HeroNetworkImageProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeroNetworkImageProvider.swift; sourceTree = "<group>"; }; |
| 515 | 603 | 19864E3E2BEF6A3300586E72 /* CNLiveDownSlideRealHotListCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveDownSlideRealHotListCell.swift; sourceTree = "<group>"; }; |
| 516 | 604 | 19864E402BF6090400586E72 /* CNLiveDuanJuDetailCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveDuanJuDetailCell.swift; sourceTree = "<group>"; }; |
| 605 | + 19A8CD132D62DC3700509BCD /* CNLiveTVHomeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveTVHomeViewController.swift; sourceTree = "<group>"; }; | |
| 517 | 606 | 19AB90632BB412C700B6A79B /* CNLiveDownslideOperationManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveDownslideOperationManager.swift; sourceTree = "<group>"; }; |
| 518 | 607 | 19AD65A92BA041210045A444 /* CNLiveGoodsDetailsTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveGoodsDetailsTableViewCell.swift; sourceTree = "<group>"; }; |
| 519 | 608 | 19AD65AB2BA16CF20045A444 /* CNLiveShopCommentRequestShareModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopCommentRequestShareModel.swift; sourceTree = "<group>"; }; |
| ... | ... | @@ -523,6 +612,7 @@ |
| 523 | 612 | 19B153CE2BC540FF0018906C /* CNLivePayOrderInfoModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLivePayOrderInfoModel.swift; sourceTree = "<group>"; }; |
| 524 | 613 | 19B153D12BC623980018906C /* CNLiveShopPayNeedPaymentCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopPayNeedPaymentCell.swift; sourceTree = "<group>"; }; |
| 525 | 614 | 19B153D32BC623BE0018906C /* CNLiveShopPayWeChatAlipayCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopPayWeChatAlipayCell.swift; sourceTree = "<group>"; }; |
| 615 | + 19B711862D55FE130000872A /* CNLiveDownSlideBannerCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveDownSlideBannerCell.swift; sourceTree = "<group>"; }; | |
| 526 | 616 | 19BAF0332C7831DB00BD7CC0 /* CNLiveDigitalResumePreviewFourWorkAwardCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveDigitalResumePreviewFourWorkAwardCell.swift; sourceTree = "<group>"; }; |
| 527 | 617 | 19BB1FDE2AEA3A450094D962 /* CNSlideBaseNavigationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNSlideBaseNavigationController.swift; sourceTree = "<group>"; }; |
| 528 | 618 | 19BB1FE02AEB5C220094D962 /* CNLiveShopConsoleController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopConsoleController.swift; sourceTree = "<group>"; }; |
| ... | ... | @@ -737,6 +827,30 @@ |
| 737 | 827 | /* End PBXFrameworksBuildPhase section */ |
| 738 | 828 | |
| 739 | 829 | /* Begin PBXGroup section */ |
| 830 | + 19023DB82D8123F700872398 /* Lanmu */ = { | |
| 831 | + isa = PBXGroup; | |
| 832 | + children = ( | |
| 833 | + 19023DB62D80339800872398 /* CNLiveHomeLanmuThreeImgCell.swift */, | |
| 834 | + ); | |
| 835 | + path = Lanmu; | |
| 836 | + sourceTree = "<group>"; | |
| 837 | + }; | |
| 838 | + 19023DB92D81240C00872398 /* Home */ = { | |
| 839 | + isa = PBXGroup; | |
| 840 | + children = ( | |
| 841 | + 196211DE2D648699001925EC /* CNLiveHomeYingshiBannerCell.swift */, | |
| 842 | + 196211E02D66BCDE001925EC /* CNLiveHomeLanmuCell.swift */, | |
| 843 | + 196211E82D686C03001925EC /* CNLiveHomeFollowCell.swift */, | |
| 844 | + 196211E22D66D36A001925EC /* CNLiveHomeOneBigTwoSmallCell.swift */, | |
| 845 | + 196211E42D66F5E6001925EC /* CNLiveHomeADCell.swift */, | |
| 846 | + 196211E62D66F828001925EC /* CNLiveHomeTwoDuanjuCell.swift */, | |
| 847 | + 195650D22D79804400818FC8 /* CNLiveHomeTwoShopCell.swift */, | |
| 848 | + 19023DBA2D8270DA00872398 /* CNLiveHomeShopCategoryCell.swift */, | |
| 849 | + 1958B4152D83F45200F37E35 /* CNLiveHomeTwoHengTuCell.swift */, | |
| 850 | + ); | |
| 851 | + path = Home; | |
| 852 | + sourceTree = "<group>"; | |
| 853 | + }; | |
| 740 | 854 | 1909DC922C6308FA001E7986 /* 数字简历相关页面 */ = { |
| 741 | 855 | isa = PBXGroup; |
| 742 | 856 | children = ( |
| ... | ... | @@ -990,8 +1104,8 @@ |
| 990 | 1104 | 1938BD152B3D6C6000390A34 /* Controller */ = { |
| 991 | 1105 | isa = PBXGroup; |
| 992 | 1106 | children = ( |
| 993 | - 19C735BF2BFDCECD00CACF4E /* CNLiveTotalHotListController */, | |
| 994 | 1107 | 1938BD272B48009600390A34 /* HomeController */, |
| 1108 | + 19C735BF2BFDCECD00CACF4E /* CNLiveTotalHotListController */, | |
| 995 | 1109 | 1938BD1D2B46791400390A34 /* PlayletHomePage */, |
| 996 | 1110 | ); |
| 997 | 1111 | path = Controller; |
| ... | ... | @@ -1107,6 +1221,7 @@ |
| 1107 | 1221 | 19FA20162AE22D3C001F7186 /* CNLiveDownSlideRecommendCell.swift */, |
| 1108 | 1222 | 19FA20182AE22D98001F7186 /* CNLiveDownSlideTodayRecommendCell.swift */, |
| 1109 | 1223 | 19CC4D462ADD006600308E2A /* CNDownSlideSingleCourseCell.swift */, |
| 1224 | + 19B711862D55FE130000872A /* CNLiveDownSlideBannerCell.swift */, | |
| 1110 | 1225 | 19CC4D4E2ADD0FC200308E2A /* CNUpSlideDetailScrollView.swift */, |
| 1111 | 1226 | 19864E3E2BEF6A3300586E72 /* CNLiveDownSlideRealHotListCell.swift */, |
| 1112 | 1227 | 19C735C22BFED49700CACF4E /* CNLiveRealHotListDetailCell.swift */, |
| ... | ... | @@ -1198,6 +1313,111 @@ |
| 1198 | 1313 | path = DigitalAuth; |
| 1199 | 1314 | sourceTree = "<group>"; |
| 1200 | 1315 | }; |
| 1316 | + 194729792D6D8EB300E55857 /* Util */ = { | |
| 1317 | + isa = PBXGroup; | |
| 1318 | + children = ( | |
| 1319 | + 19D2CE622AE8B65D00691757 /* CNLiveDownSlideTool.swift */, | |
| 1320 | + 1947297A2D6D8EF500E55857 /* CNLivePlayerTool.swift */, | |
| 1321 | + ); | |
| 1322 | + path = Util; | |
| 1323 | + sourceTree = "<group>"; | |
| 1324 | + }; | |
| 1325 | + 195650B62D71B00200818FC8 /* HuBiLieHomePage */ = { | |
| 1326 | + isa = PBXGroup; | |
| 1327 | + children = ( | |
| 1328 | + 195650DB2D7BDA4C00818FC8 /* ViewModel */, | |
| 1329 | + 194729792D6D8EB300E55857 /* Util */, | |
| 1330 | + 195650B92D71B03600818FC8 /* Model */, | |
| 1331 | + 195650B82D71B02F00818FC8 /* View */, | |
| 1332 | + 195650B72D71B02200818FC8 /* Controller */, | |
| 1333 | + ); | |
| 1334 | + path = HuBiLieHomePage; | |
| 1335 | + sourceTree = "<group>"; | |
| 1336 | + }; | |
| 1337 | + 195650B72D71B02200818FC8 /* Controller */ = { | |
| 1338 | + isa = PBXGroup; | |
| 1339 | + children = ( | |
| 1340 | + 19A8CD132D62DC3700509BCD /* CNLiveTVHomeViewController.swift */, | |
| 1341 | + 195650D52D7A9B5700818FC8 /* CNLiveHomeSearchController.swift */, | |
| 1342 | + 19023DB42D801EF700872398 /* CNLiveHomeLanmuController.swift */, | |
| 1343 | + 1958B4132D83D2BA00F37E35 /* CNLiveHomeMoreController.swift */, | |
| 1344 | + 19416F812D3F9B3000ACD0A7 /* CNLiveTVPlayerViewController.swift */, | |
| 1345 | + ); | |
| 1346 | + path = Controller; | |
| 1347 | + sourceTree = "<group>"; | |
| 1348 | + }; | |
| 1349 | + 195650B82D71B02F00818FC8 /* View */ = { | |
| 1350 | + isa = PBXGroup; | |
| 1351 | + children = ( | |
| 1352 | + 195650C12D75435700818FC8 /* VodDetail */, | |
| 1353 | + 195650C02D75433B00818FC8 /* Home */, | |
| 1354 | + ); | |
| 1355 | + path = View; | |
| 1356 | + sourceTree = "<group>"; | |
| 1357 | + }; | |
| 1358 | + 195650B92D71B03600818FC8 /* Model */ = { | |
| 1359 | + isa = PBXGroup; | |
| 1360 | + children = ( | |
| 1361 | + 195650BA2D71B12B00818FC8 /* CNLiveVodPlayModel.swift */, | |
| 1362 | + 195650BC2D7298E800818FC8 /* CNLiveVodAlbumMsgModel.swift */, | |
| 1363 | + 195650BE2D73000900818FC8 /* CNLiveVodAlbumListModel.swift */, | |
| 1364 | + 195650DE2D7BE18200818FC8 /* CNLiveHomeSearchHotModel.swift */, | |
| 1365 | + 195650E02D7C098900818FC8 /* CNLiveHomeSearchHistoryModel.swift */, | |
| 1366 | + 19023DBC2D8282DE00872398 /* CNLiveHomeShopCategoryModel.swift */, | |
| 1367 | + ); | |
| 1368 | + path = Model; | |
| 1369 | + sourceTree = "<group>"; | |
| 1370 | + }; | |
| 1371 | + 195650C02D75433B00818FC8 /* Home */ = { | |
| 1372 | + isa = PBXGroup; | |
| 1373 | + children = ( | |
| 1374 | + 19023DB92D81240C00872398 /* Home */, | |
| 1375 | + 19023DB82D8123F700872398 /* Lanmu */, | |
| 1376 | + 195650D42D7A9A4F00818FC8 /* Search */, | |
| 1377 | + ); | |
| 1378 | + path = Home; | |
| 1379 | + sourceTree = "<group>"; | |
| 1380 | + }; | |
| 1381 | + 195650C12D75435700818FC8 /* VodDetail */ = { | |
| 1382 | + isa = PBXGroup; | |
| 1383 | + children = ( | |
| 1384 | + 195650B42D7047C500818FC8 /* CNLiveZFPlayerControlView.swift */, | |
| 1385 | + 195650C22D7543A500818FC8 /* CNLiveVodIntroductionCell.swift */, | |
| 1386 | + 195650C62D769B2A00818FC8 /* CNLiveVodAlbumListCell.swift */, | |
| 1387 | + 195650CC2D76C45400818FC8 /* CNLiveVodAlbumListCollectionCell.swift */, | |
| 1388 | + 195650C82D769CEA00818FC8 /* CNLiveVodTrailersCell.swift */, | |
| 1389 | + 195650CE2D77023A00818FC8 /* CNLiveVodTrailersCollectionCell.swift */, | |
| 1390 | + 195650CA2D76A36300818FC8 /* CNLiveVodPlayShopCell.swift */, | |
| 1391 | + 195650D02D77E33E00818FC8 /* CNLiveVodPlayShopCollectionCell.swift */, | |
| 1392 | + 192FDAFF2D8BEEB300F8723D /* CNLiveVodCellBottomView.swift */, | |
| 1393 | + 192FDB012D8BF38500F8723D /* CNLiveVodTrailerExpandCell.swift */, | |
| 1394 | + 192FDB052D8D0B7E00F8723D /* CNLiveVodShopBottomView.swift */, | |
| 1395 | + 192FDB032D8D0B6000F8723D /* CNLiveVodShopExpandCell.swift */, | |
| 1396 | + ); | |
| 1397 | + path = VodDetail; | |
| 1398 | + sourceTree = "<group>"; | |
| 1399 | + }; | |
| 1400 | + 195650D42D7A9A4F00818FC8 /* Search */ = { | |
| 1401 | + isa = PBXGroup; | |
| 1402 | + children = ( | |
| 1403 | + 195650D72D7BD6E500818FC8 /* CNLiveHomeSearchHistoryCell.swift */, | |
| 1404 | + 195650E22D7C201600818FC8 /* CNLiveSearchHistoryFloatLayoutView.swift */, | |
| 1405 | + 195650D92D7BD72E00818FC8 /* CNLiveHomeSearchHotCell.swift */, | |
| 1406 | + 195650E42D7E8C9400818FC8 /* CNLiveHomeSearchResultJuJiCell.swift */, | |
| 1407 | + 195650E62D7E8CF300818FC8 /* CNLiveHomeSearchResultDuanJuCell.swift */, | |
| 1408 | + ); | |
| 1409 | + path = Search; | |
| 1410 | + sourceTree = "<group>"; | |
| 1411 | + }; | |
| 1412 | + 195650DB2D7BDA4C00818FC8 /* ViewModel */ = { | |
| 1413 | + isa = PBXGroup; | |
| 1414 | + children = ( | |
| 1415 | + 195650DC2D7BDA9F00818FC8 /* CNLiveHomeSearchViewModel.swift */, | |
| 1416 | + 1958B41D2D8A98CA00F37E35 /* CNLiveVodPlayViewModel.swift */, | |
| 1417 | + ); | |
| 1418 | + path = ViewModel; | |
| 1419 | + sourceTree = "<group>"; | |
| 1420 | + }; | |
| 1201 | 1421 | 19565EC32AF8ACC2007D6727 /* GoodsManager */ = { |
| 1202 | 1422 | isa = PBXGroup; |
| 1203 | 1423 | children = ( |
| ... | ... | @@ -1368,7 +1588,6 @@ |
| 1368 | 1588 | 194134812C181A7E004FC047 /* DigitalAuth */, |
| 1369 | 1589 | 1917330B2B109691007BCC04 /* CNLivePlayer */, |
| 1370 | 1590 | 19CC4D512ADD129800308E2A /* CNUpSlideAnimationTransition.swift */, |
| 1371 | - 19D2CE622AE8B65D00691757 /* CNLiveDownSlideTool.swift */, | |
| 1372 | 1591 | 19BB202A2AF382150094D962 /* CNLiveAdaptTool.swift */, |
| 1373 | 1592 | 191733302B170537007BCC04 /* CNLiveCommonManager.swift */, |
| 1374 | 1593 | 19E9D1612B3BBB2E00D0FB30 /* CNLiveFileManager.swift */, |
| ... | ... | @@ -1638,6 +1857,7 @@ |
| 1638 | 1857 | 796398902A260C0100D045EB /* Main */ = { |
| 1639 | 1858 | isa = PBXGroup; |
| 1640 | 1859 | children = ( |
| 1860 | + 195650B62D71B00200818FC8 /* HuBiLieHomePage */, | |
| 1641 | 1861 | 7939B06D2B47EB46005AE981 /* VideoPage */, |
| 1642 | 1862 | 1938BD112B3D6C0C00390A34 /* HomePages */, |
| 1643 | 1863 | 7991722C2AF08CF100DC01A8 /* ShopPage */, |
| ... | ... | @@ -1703,6 +1923,9 @@ |
| 1703 | 1923 | 79F4B11B2A33036E00993C03 /* CNLiveMineInfoAlertView.swift */, |
| 1704 | 1924 | 79803E282AD6991200F05F68 /* CNLiveMineInputMessageView.swift */, |
| 1705 | 1925 | 19C0F76C2BDB48750097CC8F /* CNBindingManageCell.swift */, |
| 1926 | + 1958B4172D8572A200F37E35 /* CNLiveMinePlayHistoryCell.swift */, | |
| 1927 | + 1958B41B2D87BD3E00F37E35 /* CNLiveMinePlayHistoryCollectionCell.swift */, | |
| 1928 | + 1958B4192D8572C100F37E35 /* CNLiveMineMineOrderCell.swift */, | |
| 1706 | 1929 | ); |
| 1707 | 1930 | path = View; |
| 1708 | 1931 | sourceTree = "<group>"; |
| ... | ... | @@ -2138,6 +2361,7 @@ |
| 2138 | 2361 | 1917334C2B2BE9CA007BCC04 /* CNLiveCreateCouponTypeMoneyView.swift in Sources */, |
| 2139 | 2362 | 191733002B0B58E5007BCC04 /* CNLiveSelectUploadImageModel.swift in Sources */, |
| 2140 | 2363 | 1909DCA72C637378001E7986 /* CNLiveDigitalResumePreviewFiveCell.swift in Sources */, |
| 2364 | + 19B711872D55FE130000872A /* CNLiveDownSlideBannerCell.swift in Sources */, | |
| 2141 | 2365 | 19F1C2332AB5728B0083D06C /* CNIDCardView.swift in Sources */, |
| 2142 | 2366 | 19C0F7692BD9F9F70097CC8F /* CNThreeLoginViewController.swift in Sources */, |
| 2143 | 2367 | 191732F32B084DBC007BCC04 /* CNLiveShopClassifySwitchTableViewCell.swift in Sources */, |
| ... | ... | @@ -2146,6 +2370,7 @@ |
| 2146 | 2370 | 1938BD2E2B48021E00390A34 /* CNHomePageBaseNavigationController.swift in Sources */, |
| 2147 | 2371 | 1917332F2B16C7C9007BCC04 /* CNLiveTimer.swift in Sources */, |
| 2148 | 2372 | 194134942C240583004FC047 /* CNLiveDigitalRealManageController.swift in Sources */, |
| 2373 | + 195650DA2D7BD72E00818FC8 /* CNLiveHomeSearchHotCell.swift in Sources */, | |
| 2149 | 2374 | 7CD675292A270F6A008354C1 /* WJColorChange.m in Sources */, |
| 2150 | 2375 | 192ED4782C5339D50057244C /* CNLiveCertificateCollectionCell.swift in Sources */, |
| 2151 | 2376 | 194134862C196F59004FC047 /* CNLiveAuthTool.swift in Sources */, |
| ... | ... | @@ -2153,7 +2378,9 @@ |
| 2153 | 2378 | 19864E412BF6090400586E72 /* CNLiveDuanJuDetailCell.swift in Sources */, |
| 2154 | 2379 | 79F4B11C2A33036E00993C03 /* CNLiveMineInfoAlertView.swift in Sources */, |
| 2155 | 2380 | 192ED47C2C538C970057244C /* CNLiveVitaeCertificateAddPhotoCell.swift in Sources */, |
| 2381 | + 196211E92D686C03001925EC /* CNLiveHomeFollowCell.swift in Sources */, | |
| 2156 | 2382 | 79BB96A82AF223FB00AEA4AC /* CNLiveConfigAlertManager.swift in Sources */, |
| 2383 | + 1958B41A2D8572C100F37E35 /* CNLiveMineMineOrderCell.swift in Sources */, | |
| 2157 | 2384 | 19BB1FF02AF0E5B30094D962 /* CNLiveShopDetailModel.swift in Sources */, |
| 2158 | 2385 | 1938BD382B4BDC2500390A34 /* CNLiveAlbumImageCell.swift in Sources */, |
| 2159 | 2386 | 796398942A260C0100D045EB /* AppDelegate.swift in Sources */, |
| ... | ... | @@ -2167,6 +2394,7 @@ |
| 2167 | 2394 | 19C0F76B2BDB432A0097CC8F /* CNLiveMineBindingManagerController.swift in Sources */, |
| 2168 | 2395 | 792B53282AFCD7640009AB49 /* CNLiveShopOrderExpressDetailViewController.swift in Sources */, |
| 2169 | 2396 | 79396EF12A31C21B0053E1AF /* CNLiveInfoShowViewController.swift in Sources */, |
| 2397 | + 196211E32D66D36A001925EC /* CNLiveHomeOneBigTwoSmallCell.swift in Sources */, | |
| 2170 | 2398 | 191733422B284D5E007BCC04 /* CNLiveShopCouponCreateBottomView.swift in Sources */, |
| 2171 | 2399 | 192336EB2AD9224300D47CD4 /* CNUpSlideViewController.swift in Sources */, |
| 2172 | 2400 | 19565ECB2AF8C59C007D6727 /* CNLiveShopGoodsListModel.swift in Sources */, |
| ... | ... | @@ -2194,6 +2422,7 @@ |
| 2194 | 2422 | 19565ECD2AF8D256007D6727 /* CNLiveShopGoodsListClassifyView.swift in Sources */, |
| 2195 | 2423 | 19E302672BC8FEBC00F6B8BD /* CNLliveShopDetailCloseCell.swift in Sources */, |
| 2196 | 2424 | 1938BD322B4B8F0400390A34 /* CNLiveHomePageModel.swift in Sources */, |
| 2425 | + 195650E52D7E8C9400818FC8 /* CNLiveHomeSearchResultJuJiCell.swift in Sources */, | |
| 2197 | 2426 | 191732EF2B075C3A007BCC04 /* CNLiveCreateShopClassifyViewController.swift in Sources */, |
| 2198 | 2427 | 1938BD302B4B8A3500390A34 /* CNLiveHomePageViewModel.swift in Sources */, |
| 2199 | 2428 | 19C735CC2C11A1F400CACF4E /* CNLiveDigitalThreeCollectCell.swift in Sources */, |
| ... | ... | @@ -2219,9 +2448,11 @@ |
| 2219 | 2448 | 1941348C2C20261C004FC047 /* CNLiveDigitalSecCell.swift in Sources */, |
| 2220 | 2449 | 19CC4D4F2ADD0FC200308E2A /* CNUpSlideDetailScrollView.swift in Sources */, |
| 2221 | 2450 | 191733642B392011007BCC04 /* CNLiveShopGoodsSearchViewController.swift in Sources */, |
| 2451 | + 195650B52D7047C500818FC8 /* CNLiveZFPlayerControlView.swift in Sources */, | |
| 2222 | 2452 | 79EABB892AB4497700F3A4E2 /* CNLiveSaveStandDB.swift in Sources */, |
| 2223 | 2453 | 790B1FB62A41938F0074CF00 /* UIImage+CNLiveExtensions.swift in Sources */, |
| 2224 | 2454 | 192ED4692C4F77370057244C /* CNLiveHangYeFirCell.swift in Sources */, |
| 2455 | + 196211E12D66BCDE001925EC /* CNLiveHomeLanmuCell.swift in Sources */, | |
| 2225 | 2456 | 19C735C12BFDCEE900CACF4E /* CNLiveTotalHotListController.swift in Sources */, |
| 2226 | 2457 | 7939B0732B47F12F005AE981 /* CNLiveShortVideoViewController.swift in Sources */, |
| 2227 | 2458 | 19BB1FEA2AEF7B4A0094D962 /* CNLiveShopConsoleCell.swift in Sources */, |
| ... | ... | @@ -2229,9 +2460,11 @@ |
| 2229 | 2460 | 1938BD202B46799A00390A34 /* CNLivePlayletHomePageController.swift in Sources */, |
| 2230 | 2461 | 790D019D2A2DCBD000C5978D /* UIView+CNLiveExtensions.swift in Sources */, |
| 2231 | 2462 | 790B1FB62A41938F0074CF00 /* UIImage+CNLiveExtensions.swift in Sources */, |
| 2463 | + 196211E52D66F5E6001925EC /* CNLiveHomeADCell.swift in Sources */, | |
| 2232 | 2464 | 192ED4742C521F4D0057244C /* CNLiveVocationalCertifiteCollectionViewLayout.swift in Sources */, |
| 2233 | 2465 | 191732F82B08AB9D007BCC04 /* CNLiveShopClassilyViewModel.swift in Sources */, |
| 2234 | 2466 | 79BB1C162B05C62900C5720C /* CNLiveShopBodyCouponView.swift in Sources */, |
| 2467 | + 195650D62D7A9B5700818FC8 /* CNLiveHomeSearchController.swift in Sources */, | |
| 2235 | 2468 | 798916E92B04532D00D08302 /* CNLiveSavePointDB.swift in Sources */, |
| 2236 | 2469 | 1938BD242B468AC900390A34 /* CNLivePlayletHomePageHeaderCell.swift in Sources */, |
| 2237 | 2470 | 19B153D42BC623BE0018906C /* CNLiveShopPayWeChatAlipayCell.swift in Sources */, |
| ... | ... | @@ -2268,6 +2501,8 @@ |
| 2268 | 2501 | 19565EC72AF8AD38007D6727 /* CNLiveShopNewProductController.swift in Sources */, |
| 2269 | 2502 | 798A44F72A3077ED00815935 /* CNLiveHotButton.swift in Sources */, |
| 2270 | 2503 | 7CD6753D2A2740B0008354C1 /* CNMainView.swift in Sources */, |
| 2504 | + 192FDB002D8BEEB300F8723D /* CNLiveVodCellBottomView.swift in Sources */, | |
| 2505 | + 195650CB2D76A36300818FC8 /* CNLiveVodPlayShopCell.swift in Sources */, | |
| 2271 | 2506 | 19B153CB2BC3E1870018906C /* CNLiveShopPayController.swift in Sources */, |
| 2272 | 2507 | 191733662B39237D007BCC04 /* CNLiveShopGoodsManageListTableViewCell.swift in Sources */, |
| 2273 | 2508 | 1909DC982C6342C4001E7986 /* CNLiveDigitalThreeCell.swift in Sources */, |
| ... | ... | @@ -2290,12 +2525,17 @@ |
| 2290 | 2525 | 7CD675402A2740B0008354C1 /* CNDownSlideView.swift in Sources */, |
| 2291 | 2526 | 19BB1FE32AEB8B7C0094D962 /* CNLiveShopConsoleViewModel.swift in Sources */, |
| 2292 | 2527 | 1938BD2A2B48014E00390A34 /* CNHomepageDetailViewController.swift in Sources */, |
| 2528 | + 19023DB52D801EF700872398 /* CNLiveHomeLanmuController.swift in Sources */, | |
| 2293 | 2529 | 1965FA422AFB79EA00F0F435 /* CNLiveGoodsCategoryController.swift in Sources */, |
| 2530 | + 195650D12D77E33E00818FC8 /* CNLiveVodPlayShopCollectionCell.swift in Sources */, | |
| 2294 | 2531 | 792E57D92A3AA2F2005834DB /* CNLiveCommonBaseModel.swift in Sources */, |
| 2295 | 2532 | 1941349A2C294A78004FC047 /* CNLiveIdentityResTableCell.swift in Sources */, |
| 2533 | + 195650E32D7C201600818FC8 /* CNLiveSearchHistoryFloatLayoutView.swift in Sources */, | |
| 2296 | 2534 | 791C1C862AFB2EB4003E6362 /* CNLiveShopOrderExpressViewController.swift in Sources */, |
| 2297 | 2535 | 7CD6753E2A2740B0008354C1 /* CNUpSlideView.swift in Sources */, |
| 2536 | + 19023DB72D80339800872398 /* CNLiveHomeLanmuThreeImgCell.swift in Sources */, | |
| 2298 | 2537 | 191733312B170537007BCC04 /* CNLiveCommonManager.swift in Sources */, |
| 2538 | + 196211E72D66F828001925EC /* CNLiveHomeTwoDuanjuCell.swift in Sources */, | |
| 2299 | 2539 | 7CD675402A2740B0008354C1 /* CNDownSlideView.swift in Sources */, |
| 2300 | 2540 | 191732F52B085BAE007BCC04 /* CNLiveShopClassilyIconTableViewCell.swift in Sources */, |
| 2301 | 2541 | 192ED4842C5742510057244C /* CNLiveVitaeAddWorkController.swift in Sources */, |
| ... | ... | @@ -2319,25 +2559,33 @@ |
| 2319 | 2559 | 191733212B143F3A007BCC04 /* CNLiveGradientView.swift in Sources */, |
| 2320 | 2560 | 19AD65AE2BA177C20045A444 /* CNLiveShopGoodsDetailsTableHeaderView.swift in Sources */, |
| 2321 | 2561 | 192ED46B2C4F77450057244C /* CNLiveHangYeSecCell.swift in Sources */, |
| 2562 | + 1958B41C2D87BD3E00F37E35 /* CNLiveMinePlayHistoryCollectionCell.swift in Sources */, | |
| 2322 | 2563 | 19BB1FE62AEB93B80094D962 /* CNLiveShopUserInfoModel.swift in Sources */, |
| 2564 | + 19023DBB2D8270DA00872398 /* CNLiveHomeShopCategoryCell.swift in Sources */, | |
| 2323 | 2565 | 1909DCAB2C649C10001E7986 /* CNLiveDigitalResumePreViewSecCollectionCell.swift in Sources */, |
| 2566 | + 195650C32D7543A500818FC8 /* CNLiveVodIntroductionCell.swift in Sources */, | |
| 2567 | + 195650BD2D7298E800818FC8 /* CNLiveVodAlbumMsgModel.swift in Sources */, | |
| 2324 | 2568 | 19DFE64D2C4792C500E428AE /* CNLiveDigitalResumeInfoController.swift in Sources */, |
| 2325 | 2569 | 7CD675472A274167008354C1 /* NewPagedFlowView.m in Sources */, |
| 2326 | 2570 | 191732ED2B073C52007BCC04 /* CNLiveShopClassifyListModel.swift in Sources */, |
| 2327 | 2571 | 191733482B2855E8007BCC04 /* CNLiveShopCouponViewModel.swift in Sources */, |
| 2328 | 2572 | 79F4B11A2A32F21400993C03 /* CNLiveMineNickViewController.swift in Sources */, |
| 2329 | 2573 | 191733542B2C4D58007BCC04 /* CNLivePickerToolsView.swift in Sources */, |
| 2574 | + 192FDB042D8D0B6000F8723D /* CNLiveVodShopExpandCell.swift in Sources */, | |
| 2330 | 2575 | 191733112B109EDC007BCC04 /* CNLivePlayerControlView.swift in Sources */, |
| 2331 | 2576 | 1917331F2B10A1BE007BCC04 /* CNLivePlayerEnum.swift in Sources */, |
| 2577 | + 195650E12D7C098900818FC8 /* CNLiveHomeSearchHistoryModel.swift in Sources */, | |
| 2332 | 2578 | 191733382B27FD66007BCC04 /* CNLiveShopClassifySectionHeaderView.swift in Sources */, |
| 2333 | 2579 | 19CB631F2C69ADF500D889F8 /* CNLiveDigitalResumePreViewSelectRenzhengCerController.swift in Sources */, |
| 2334 | 2580 | 194134782C17F83B004FC047 /* CNLiveFaceAuthController.swift in Sources */, |
| 2581 | + 19023DBD2D8282DE00872398 /* CNLiveHomeShopCategoryModel.swift in Sources */, | |
| 2335 | 2582 | 1938BD222B467C1700390A34 /* CNLivePlayletHomePageCell.swift in Sources */, |
| 2336 | 2583 | 1938BD3F2B4BE7C500390A34 /* CNLiveAlbumMsgModel.swift in Sources */, |
| 2337 | 2584 | 798A44FF2A30A0A800815935 /* CNLiveInputFeedBackViewController.swift in Sources */, |
| 2338 | 2585 | 19B153D22BC623980018906C /* CNLiveShopPayNeedPaymentCell.swift in Sources */, |
| 2339 | 2586 | 19DFE6492C44BEAE00E428AE /* CNLiveDigitalResumeCell.swift in Sources */, |
| 2340 | 2587 | 79282A442A2F1C1E00B5F8CF /* CNLiveLoginAuthView.swift in Sources */, |
| 2588 | + 1958B4142D83D2BA00F37E35 /* CNLiveHomeMoreController.swift in Sources */, | |
| 2341 | 2589 | 19B153CD2BC3EB690018906C /* CNLiveShoph5ViewModel.swift in Sources */, |
| 2342 | 2590 | 79BB96A62AF21E2800AEA4AC /* CNLiveShopOrderDetailViewController.swift in Sources */, |
| 2343 | 2591 | 194455A12B6B3310006C5A2A /* CNWebView.swift in Sources */, |
| ... | ... | @@ -2348,11 +2596,13 @@ |
| 2348 | 2596 | 19CC4D542ADD163D00308E2A /* CNUpSlideCardPresentationController.swift in Sources */, |
| 2349 | 2597 | 790D01A32A2DDBA300C5978D /* CNLiveConfigManager.swift in Sources */, |
| 2350 | 2598 | 194134962C2412C7004FC047 /* CNLiveRealManageCell.swift in Sources */, |
| 2599 | + 196211DF2D64869A001925EC /* CNLiveHomeYingshiBannerCell.swift in Sources */, | |
| 2351 | 2600 | 1941347A2C18001A004FC047 /* CGImage+FaceCrop.swift in Sources */, |
| 2352 | 2601 | 7939B0752B47F1B9005AE981 /* CNLiveShortVideoListTableViewCell.swift in Sources */, |
| 2353 | 2602 | 794294A72B4D18EC008AAFA0 /* CNLiveShortVideoContentListView.swift in Sources */, |
| 2354 | 2603 | 19565EC52AF8AD1F007D6727 /* CNLiveShopProductManagerController.swift in Sources */, |
| 2355 | 2604 | 19CC4D492ADD06C500308E2A /* UITableView+Extension.swift in Sources */, |
| 2605 | + 195650D82D7BD6E500818FC8 /* CNLiveHomeSearchHistoryCell.swift in Sources */, | |
| 2356 | 2606 | 796308732B4B8EB80090D22A /* CNLiveShortVideoViewModel.swift in Sources */, |
| 2357 | 2607 | 19E9D1602B3A98C200D0FB30 /* CNLiveShopAssociatedGoodsTableViewCell.swift in Sources */, |
| 2358 | 2608 | 191732CE2B04AACD007BCC04 /* CNLiveShopTextView.swift in Sources */, |
| ... | ... | @@ -2361,6 +2611,7 @@ |
| 2361 | 2611 | 7987BF3D2A497644000A1ABC /* CNLiveMineQuestViewController.swift in Sources */, |
| 2362 | 2612 | 798A44EA2A30135D00815935 /* CNLiveMineBodyListView.swift in Sources */, |
| 2363 | 2613 | 1917335A2B3283A1007BCC04 /* CNLiveCouponGoodsSearchView.swift in Sources */, |
| 2614 | + 195650C92D769CEA00818FC8 /* CNLiveVodTrailersCell.swift in Sources */, | |
| 2364 | 2615 | 191733362B27EFD4007BCC04 /* CNLiveShopClassilyManageViewController.swift in Sources */, |
| 2365 | 2616 | 799172322AF08D1B00DC01A8 /* CNLiveShopOrderViewController.swift in Sources */, |
| 2366 | 2617 | 1917332D2B15DB20007BCC04 /* CNLivePlayerKVOModel.swift in Sources */, |
| ... | ... | @@ -2371,12 +2622,15 @@ |
| 2371 | 2622 | 1909DC962C6309EC001E7986 /* CNLiveDigitalResumePreViewController.swift in Sources */, |
| 2372 | 2623 | 79DC67642B5FB60900261A94 /* CNLiveMineAuthFormViewController.swift in Sources */, |
| 2373 | 2624 | 790D01852A2D89E100C5978D /* UIColor+CNLiveExtensions.swift in Sources */, |
| 2625 | + 1958B4162D83F45200F37E35 /* CNLiveHomeTwoHengTuCell.swift in Sources */, | |
| 2374 | 2626 | 19C0F7672BD8DC4D0097CC8F /* CNThreeLoginModel.swift in Sources */, |
| 2627 | + 19416F822D3F9B3000ACD0A7 /* CNLiveTVPlayerViewController.swift in Sources */, | |
| 2375 | 2628 | 794FF1092B02131300385E85 /* CNLiveSaveSearchDB.swift in Sources */, |
| 2376 | 2629 | 19864E3F2BEF6A3300586E72 /* CNLiveDownSlideRealHotListCell.swift in Sources */, |
| 2377 | 2630 | 79396EED2A319F220053E1AF /* NSObject+CNLiveExtensions.swift in Sources */, |
| 2378 | 2631 | 1917331B2B10A0EF007BCC04 /* CNLivePlayerLoadingView.swift in Sources */, |
| 2379 | 2632 | 19FA201B2AE60423001F7186 /* CNLiveDownSlideModelLayout.swift in Sources */, |
| 2633 | + 192FDB022D8BF38500F8723D /* CNLiveVodTrailerExpandCell.swift in Sources */, | |
| 2380 | 2634 | 1909DCA22C637353001E7986 /* CNLiveDigitalResumePreviewThreeCell.swift in Sources */, |
| 2381 | 2635 | 192ED47E2C538CA30057244C /* CNLiveVitaeCertificateAddInfoCell.swift in Sources */, |
| 2382 | 2636 | 7C4931312A2F142F000E44B4 /* CNHomePageBackgroupView.swift in Sources */, |
| ... | ... | @@ -2386,6 +2640,7 @@ |
| 2386 | 2640 | 19DFE6432C41039600E428AE /* CNLiveVitaeViewModel.swift in Sources */, |
| 2387 | 2641 | 790D018B2A2D8B3300C5978D /* CNLiveLoginViewController.swift in Sources */, |
| 2388 | 2642 | 19C735D02C12F5F600CACF4E /* CNLiveRealNameCell.swift in Sources */, |
| 2643 | + 195650BF2D73000900818FC8 /* CNLiveVodAlbumListModel.swift in Sources */, | |
| 2389 | 2644 | 7999415C2B4E8E8E0014C721 /* CNLiveRefresh.swift in Sources */, |
| 2390 | 2645 | 19CC4D562ADD19C200308E2A /* String+Extension.swift in Sources */, |
| 2391 | 2646 | 7905BB492AB0588B0089BC50 /* CNLiveMineAuthResultViewController.swift in Sources */, |
| ... | ... | @@ -2396,9 +2651,12 @@ |
| 2396 | 2651 | 191733152B109FD7007BCC04 /* CNLivePlayerTopNaviView.swift in Sources */, |
| 2397 | 2652 | 794FF1052B01FC8800385E85 /* CNLiveShopOrderSearchViewController.swift in Sources */, |
| 2398 | 2653 | 798A44EC2A302DBE00815935 /* CNLiveMineAddInfoViewController.swift in Sources */, |
| 2654 | + 195650E72D7E8CF300818FC8 /* CNLiveHomeSearchResultDuanJuCell.swift in Sources */, | |
| 2399 | 2655 | 791C1C882AFB6FD7003E6362 /* CNLiveShopOrderExpressFirmViewController.swift in Sources */, |
| 2656 | + 195650DF2D7BE18200818FC8 /* CNLiveHomeSearchHotModel.swift in Sources */, | |
| 2400 | 2657 | 7CD675422A2740F8008354C1 /* CNCustomIndexView.swift in Sources */, |
| 2401 | 2658 | 794BC1652AF9E70D00A68C74 /* CNLiveShopOrderSendViewController.swift in Sources */, |
| 2659 | + 195650CF2D77023A00818FC8 /* CNLiveVodTrailersCollectionCell.swift in Sources */, | |
| 2402 | 2660 | 79BB96AA2AF2330900AEA4AC /* CNLiveShopBodyDetailView.swift in Sources */, |
| 2403 | 2661 | 790D01912A2DAC5E00C5978D /* CNLiveConfigFontMacro.swift in Sources */, |
| 2404 | 2662 | 790D01852A2D89E100C5978D /* UIColor+CNLiveExtensions.swift in Sources */, |
| ... | ... | @@ -2409,6 +2667,8 @@ |
| 2409 | 2667 | 197563772C5C80D9004E0F42 /* HeroNetworkImageProvider.swift in Sources */, |
| 2410 | 2668 | 794294AA2B4D4381008AAFA0 /* CNLiveShortVideoCommentListView.swift in Sources */, |
| 2411 | 2669 | 1909DC9E2C637339001E7986 /* CNLiveDigitalResumePreViewFirCell.swift in Sources */, |
| 2670 | + 195650C72D769B2A00818FC8 /* CNLiveVodAlbumListCell.swift in Sources */, | |
| 2671 | + 195650BB2D71B12B00818FC8 /* CNLiveVodPlayModel.swift in Sources */, | |
| 2412 | 2672 | 7978A8432A396632007C86B8 /* CNLiveMineViewModel.swift in Sources */, |
| 2413 | 2673 | 19AD65AC2BA16CF20045A444 /* CNLiveShopCommentRequestShareModel.swift in Sources */, |
| 2414 | 2674 | 19CB63222C69B3B600D889F8 /* CNLiveDigitalResumeGuanfangRenzhengCell.swift in Sources */, |
| ... | ... | @@ -2419,6 +2679,8 @@ |
| 2419 | 2679 | 1938BD412B4BEC6900390A34 /* CNLiveAlbumListModel.swift in Sources */, |
| 2420 | 2680 | 1941347E2C1815E7004FC047 /* AVExtensions.swift in Sources */, |
| 2421 | 2681 | 7CD675422A2740F8008354C1 /* CNCustomIndexView.swift in Sources */, |
| 2682 | + 1958B4182D8572A200F37E35 /* CNLiveMinePlayHistoryCell.swift in Sources */, | |
| 2683 | + 195650DD2D7BDA9F00818FC8 /* CNLiveHomeSearchViewModel.swift in Sources */, | |
| 2422 | 2684 | 191733292B148BF7007BCC04 /* CNLivePlayerVolumeBrightnessView.swift in Sources */, |
| 2423 | 2685 | 7C4931292A2D8BA8000E44B4 /* CNLiveBaseTabBarViewController.swift in Sources */, |
| 2424 | 2686 | 79F4B1162A32B96B00993C03 /* CNLiveMineInfoViewController.swift in Sources */, |
| ... | ... | @@ -2426,10 +2688,12 @@ |
| 2426 | 2688 | 194134882C1FE4E7004FC047 /* CNLiveDigitalAssetsController.swift in Sources */, |
| 2427 | 2689 | 7CD6753F2A2740B0008354C1 /* CNDownSlideViewRemindView.swift in Sources */, |
| 2428 | 2690 | 19565ECF2AF8D8F6007D6727 /* CNLiveShopGoodsListCell.swift in Sources */, |
| 2691 | + 1947297B2D6D8EF500E55857 /* CNLivePlayerTool.swift in Sources */, | |
| 2429 | 2692 | 192ED4632C4A642F0057244C /* CNLiveAddrAreaModel.swift in Sources */, |
| 2430 | 2693 | 1965FA3E2AFB176E00F0F435 /* CNLiveShopAddGoodsSingleView.swift in Sources */, |
| 2431 | 2694 | 7CD6753C2A2740B0008354C1 /* CNUpSlideViewRemindView.swift in Sources */, |
| 2432 | 2695 | 7939B0772B47F88A005AE981 /* CNLiveShortVideoControlView.swift in Sources */, |
| 2696 | + 1958B41E2D8A98CB00F37E35 /* CNLiveVodPlayViewModel.swift in Sources */, | |
| 2433 | 2697 | 191733602B352488007BCC04 /* CNLiveCouponGoodsListTableViewCell.swift in Sources */, |
| 2434 | 2698 | 79BB1C142B05C51900C5720C /* CNLiveShopCouponViewController.swift in Sources */, |
| 2435 | 2699 | 1941348A2C200E4E004FC047 /* CNLiveDigitalFirstCell.swift in Sources */, |
| ... | ... | @@ -2447,6 +2711,7 @@ |
| 2447 | 2711 | 79A267832AF8D7BC0088D9F6 /* CNLiveShopBodyCustomView.swift in Sources */, |
| 2448 | 2712 | 1917335E2B328495007BCC04 /* CNLiveCouponListTableViewCell.swift in Sources */, |
| 2449 | 2713 | 791C1C8C2AFB85F8003E6362 /* CNLiveShopBodyExpressView.swift in Sources */, |
| 2714 | + 195650CD2D76C45400818FC8 /* CNLiveVodAlbumListCollectionCell.swift in Sources */, | |
| 2450 | 2715 | 79868B192B874294008E0F5C /* CNLiveSaveAuthStateDB.swift in Sources */, |
| 2451 | 2716 | 790D019A2A2DCAE400C5978D /* CNLiveViewController.swift in Sources */, |
| 2452 | 2717 | 191733192B10A05D007BCC04 /* CNLivePlayerProgressView.swift in Sources */, |
| ... | ... | @@ -2458,8 +2723,11 @@ |
| 2458 | 2723 | 19AB90642BB412C700B6A79B /* CNLiveDownslideOperationManager.swift in Sources */, |
| 2459 | 2724 | 7991723A2AF091E100DC01A8 /* CNLiveShopOrderListViewController.swift in Sources */, |
| 2460 | 2725 | 798A44F02A305BC200815935 /* UIButton+CNLiveExtensions.swift in Sources */, |
| 2726 | + 195650D32D79804400818FC8 /* CNLiveHomeTwoShopCell.swift in Sources */, | |
| 2727 | + 19A8CD142D62DC3700509BCD /* CNLiveTVHomeViewController.swift in Sources */, | |
| 2461 | 2728 | 1969E1AD2C92E98700E4185E /* CNHomeWebViewController.swift in Sources */, |
| 2462 | 2729 | 1938BD342B4B968300390A34 /* CNLiveHomePageDuanJuCell.swift in Sources */, |
| 2730 | + 192FDB062D8D0B7E00F8723D /* CNLiveVodShopBottomView.swift in Sources */, | |
| 2463 | 2731 | 192ED4872C575EC90057244C /* CNLiveVitaeAddWorkFirCell.swift in Sources */, |
| 2464 | 2732 | 191733522B2C4CEA007BCC04 /* CNLivePickerSelectDateTools.swift in Sources */, |
| 2465 | 2733 | 1917333A2B27FDF3007BCC04 /* CNLiveShopClassilyManageTableViewCell.swift in Sources */, |
| ... | ... | @@ -2640,7 +2908,7 @@ |
| 2640 | 2908 | CODE_SIGN_ENTITLEMENTS = metaCode/metaCode.entitlements; |
| 2641 | 2909 | CODE_SIGN_IDENTITY = "Apple Development"; |
| 2642 | 2910 | CODE_SIGN_STYLE = Automatic; |
| 2643 | - CURRENT_PROJECT_VERSION = 1.1.4.24.09.14.12; | |
| 2911 | + CURRENT_PROJECT_VERSION = 1.1.4.25.02.09.11; | |
| 2644 | 2912 | DEBUG_INFORMATION_FORMAT = dwarf; |
| 2645 | 2913 | DEVELOPMENT_TEAM = 94X49GG3ZW; |
| 2646 | 2914 | ENABLE_BITCODE = NO; |
| ... | ... | @@ -2708,7 +2976,7 @@ |
| 2708 | 2976 | INFOPLIST_KEY_UIMainStoryboardFile = Main; |
| 2709 | 2977 | INFOPLIST_KEY_UIStatusBarStyle = ""; |
| 2710 | 2978 | INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; |
| 2711 | - IPHONEOS_DEPLOYMENT_TARGET = 11.0; | |
| 2979 | + IPHONEOS_DEPLOYMENT_TARGET = 13.0; | |
| 2712 | 2980 | LD_RUNPATH_SEARCH_PATHS = ( |
| 2713 | 2981 | "$(inherited)", |
| 2714 | 2982 | "@executable_path/Frameworks", |
| ... | ... | @@ -2896,7 +3164,7 @@ |
| 2896 | 3164 | CODE_SIGN_ENTITLEMENTS = metaCode/metaCode.entitlements; |
| 2897 | 3165 | CODE_SIGN_IDENTITY = "Apple Development"; |
| 2898 | 3166 | CODE_SIGN_STYLE = Automatic; |
| 2899 | - CURRENT_PROJECT_VERSION = 1.1.4.24.09.14.12; | |
| 3167 | + CURRENT_PROJECT_VERSION = 1.1.4.25.02.09.11; | |
| 2900 | 3168 | DEVELOPMENT_TEAM = 94X49GG3ZW; |
| 2901 | 3169 | ENABLE_BITCODE = NO; |
| 2902 | 3170 | ENABLE_MODULE_VERIFIER = NO; |
| ... | ... | @@ -2963,7 +3231,7 @@ |
| 2963 | 3231 | INFOPLIST_KEY_UIMainStoryboardFile = Main; |
| 2964 | 3232 | INFOPLIST_KEY_UIStatusBarStyle = ""; |
| 2965 | 3233 | INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; |
| 2966 | - IPHONEOS_DEPLOYMENT_TARGET = 11.0; | |
| 3234 | + IPHONEOS_DEPLOYMENT_TARGET = 13.0; | |
| 2967 | 3235 | LD_RUNPATH_SEARCH_PATHS = ( |
| 2968 | 3236 | "$(inherited)", |
| 2969 | 3237 | "@executable_path/Frameworks", | ... | ... |
metaCode/Classes/Common/Base/CNLiveBaseTabBarViewController.swift
| ... | ... | @@ -52,21 +52,25 @@ class CNLiveBaseTabBarViewController: UITabBarController |
| 52 | 52 | // MARK: - 控制器的信息 |
| 53 | 53 | func setUpTabBar() { |
| 54 | 54 | |
| 55 | + | |
| 56 | +//// let homeVC = CNLiveNewAuthViewController.init() | |
| 57 | + ///忽必烈 | |
| 58 | + let homeVC = CNLiveTVHomeViewController.init() | |
| 55 | 59 | // let homeVC = CNLiveAuthViewController.init() |
| 56 | - let homeVC = CNHomeWebViewController() | |
| 57 | - homeVC.url = URL(string: "https://wjjh5.cnlive.com/chatgpt/#/") | |
| 58 | - let authVC = CNMetaCodeHomePageController.init() | |
| 60 | +// let homeVC = CNHomeWebViewController() | |
| 61 | +// homeVC.url = URL(string: "https://wjjh5.cnlive.com/chatgpt/#/") | |
| 62 | +// let authVC = CNMetaCodeHomePageController.init() | |
| 59 | 63 | let mineVC = CNLiveMineViewController.init() |
| 60 | - | |
| 64 | + | |
| 61 | 65 | creatTabbarView(viewController: homeVC, image: "tabbar_hoem_icon_default", selectImage: "tabbar_hoem_icon_selected", title: "首页") |
| 62 | - creatTabbarView(viewController: authVC, image: "tabbar_authentication_unSelect", selectImage: "tabbar_authentication", title: "认证") | |
| 66 | +// creatTabbarView(viewController: authVC, image: "tabbar_authentication_unSelect", selectImage: "tabbar_authentication", title: "认证") | |
| 63 | 67 | creatTabbarView(viewController: mineVC, image: "tabbar_mine_icon_default", selectImage: "tabbar_mine_icon_selected", title: "我的") |
| 64 | 68 | |
| 65 | 69 | self.tabBar.tintColor = UIColor("#0066FE") |
| 66 | 70 | self.tabBar.isTranslucent = false |
| 67 | 71 | self.viewControllers = [ |
| 68 | 72 | CNLiveBaseNavigationController(rootViewController: homeVC), |
| 69 | - CNLiveBaseNavigationController(rootViewController: authVC), | |
| 73 | + //CNLiveBaseNavigationController(rootViewController: authVC), | |
| 70 | 74 | CNLiveBaseNavigationController(rootViewController: mineVC) |
| 71 | 75 | ] |
| 72 | 76 | // self.selectedIndex = 1 | ... | ... |
metaCode/Classes/Common/Base/CNLiveBaseViewController.swift
| ... | ... | @@ -252,5 +252,58 @@ class CNLiveBaseViewController: UIViewController { |
| 252 | 252 | @objc func topNavViewTap() { |
| 253 | 253 | UIApplication.shared.keyWindow?.endEditing(true) |
| 254 | 254 | } |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + override var shouldAutorotate: Bool { | |
| 259 | + return false | |
| 260 | + } | |
| 261 | + | |
| 262 | + override var preferredStatusBarStyle: UIStatusBarStyle { | |
| 263 | + return .lightContent | |
| 264 | + } | |
| 265 | + | |
| 266 | + override var prefersStatusBarHidden: Bool { | |
| 267 | + return false | |
| 268 | + } | |
| 269 | + | |
| 270 | + override var supportedInterfaceOrientations: UIInterfaceOrientationMask { | |
| 271 | + return .portrait | |
| 272 | + } | |
| 273 | + | |
| 255 | 274 | } |
| 256 | 275 | |
| 276 | + | |
| 277 | +//extension UIDeviceOrientation { | |
| 278 | +// /// 获取当前屏幕方向 | |
| 279 | +// var interfaceOrientation: UIInterfaceOrientation { | |
| 280 | +// switch self { | |
| 281 | +// case .portrait: | |
| 282 | +// return .portrait | |
| 283 | +// case .portraitUpsideDown: | |
| 284 | +// return .portraitUpsideDown | |
| 285 | +// case .landscapeLeft: | |
| 286 | +// return .landscapeRight // 注意:设备的左旋是界面的右旋 | |
| 287 | +// case .landscapeRight: | |
| 288 | +// return .landscapeLeft // 注意:设备的右旋是界面的左旋 | |
| 289 | +// case .faceUp, .faceDown, .unknown: | |
| 290 | +// return .unknown | |
| 291 | +// @unknown default: | |
| 292 | +// return .unknown | |
| 293 | +// } | |
| 294 | +// } | |
| 295 | +// | |
| 296 | +// /// 判断当前屏幕是否是竖屏 | |
| 297 | +// func isCurrentScreenPortrait() -> Bool { | |
| 298 | +// let window = UIApplication.shared.windows.filter {$0.isKeyWindow}.first ?? UIWindow() | |
| 299 | +// let orientation = window.windowScene?.interfaceOrientation | |
| 300 | +// switch orientation { | |
| 301 | +// case .portrait, .portraitUpsideDown: | |
| 302 | +// return true | |
| 303 | +// case .landscapeLeft, .landscapeRight: | |
| 304 | +// return false | |
| 305 | +// default: | |
| 306 | +// return true | |
| 307 | +// } | |
| 308 | +// } | |
| 309 | +//} | ... | ... |
metaCode/Classes/Config/CNLiveConfigUserInfo.swift
| ... | ... | @@ -66,7 +66,9 @@ class UserInfoModel: BaseModel { |
| 66 | 66 | } |
| 67 | 67 | |
| 68 | 68 | class UserInfoManager: NSObject { |
| 69 | - | |
| 69 | + static let mataCodeUserInfo = "mateCode_userInfo" | |
| 70 | + static let CNLiveUserInfo = "CNUserInfo" | |
| 71 | + | |
| 70 | 72 | static let shared = UserInfoManager() |
| 71 | 73 | |
| 72 | 74 | fileprivate var _userInfo : UserInfoModel? |
| ... | ... | @@ -92,7 +94,9 @@ class UserInfoManager: NSObject { |
| 92 | 94 | UserInfoManager.clearUserInfo() |
| 93 | 95 | UserInfoManager.shared._userInfo = userInfo |
| 94 | 96 | //JsonUtil.modelToJson(userInfo) |
| 95 | - UserDefaults.standard.set(userInfo.toJSONString(), forKey: "mateCode_userInfo") | |
| 97 | + UserDefaults.standard.set(userInfo.toJSONString(), forKey: mataCodeUserInfo) | |
| 98 | + UserDefaults.standard.set(userInfo.toJSONString(), forKey: CNLiveUserInfo) | |
| 99 | + | |
| 96 | 100 | if UserDefaults.standard.synchronize() { |
| 97 | 101 | print("用户信息存储成功") |
| 98 | 102 | } |
| ... | ... | @@ -101,7 +105,8 @@ class UserInfoManager: NSObject { |
| 101 | 105 | /// 读取用户数据 |
| 102 | 106 | /// - Returns: 用户数据 |
| 103 | 107 | static public func readUserInfo() -> UserInfoModel { |
| 104 | - let user_info = UserDefaults.standard.object(forKey: "mateCode_userInfo") | |
| 108 | + let user_info = UserDefaults.standard.object(forKey: mataCodeUserInfo) | |
| 109 | + | |
| 105 | 110 | if user_info == nil { |
| 106 | 111 | print("获取用户信息失败") |
| 107 | 112 | return UserInfoModel() |
| ... | ... | @@ -116,7 +121,9 @@ class UserInfoManager: NSObject { |
| 116 | 121 | } |
| 117 | 122 | |
| 118 | 123 | static public func clearUserInfo() { |
| 119 | - UserDefaults.standard.removeObject(forKey: "mateCode_userInfo") | |
| 124 | + UserDefaults.standard.removeObject(forKey: mataCodeUserInfo) | |
| 125 | + UserDefaults.standard.removeObject(forKey: CNLiveUserInfo) | |
| 126 | + | |
| 120 | 127 | UserInfoManager.shared._userInfo = nil |
| 121 | 128 | StandSortManager.removeStandSort() |
| 122 | 129 | if UserDefaults.standard.synchronize() { | ... | ... |
metaCode/Classes/Config/CNLiveConfigstant.swift
| ... | ... | @@ -17,7 +17,10 @@ let KStatusBarHeight:CGFloat = UIApplication.shared.statusBarFrame.height; |
| 17 | 17 | ///导航栏高度 |
| 18 | 18 | let KNavigationHeight:CGFloat = (KStatusBarHeight + 44) |
| 19 | 19 | ///tabbar高度 |
| 20 | -let KTabBarHeight:CGFloat = (KStatusBarHeight == 44 ? 83 : 49) | |
| 20 | +let KTabBarHeight:CGFloat = (isiPhoneXSeries ? 83 : 49) | |
| 21 | +///tabbarSafe高度 | |
| 22 | +let KTabBarSafeHeight:CGFloat = (isiPhoneXSeries ? 34 : 0) | |
| 23 | + | |
| 21 | 24 | /** |
| 22 | 25 | 获取系统tabbarUI高度 |
| 23 | 26 | */ | ... | ... |
metaCode/Classes/Main/HomePage/Controller/DownSlideController/CNUpSlideViewController.swift
| ... | ... | @@ -12,12 +12,31 @@ import UIKit |
| 12 | 12 | let kCNDownSlideBackgroundColorHex: String = "#F7F8FA" |
| 13 | 13 | |
| 14 | 14 | ///CNliveDownSlideModel Type |
| 15 | +let SlideModelTypeRecommend1: String = "1"//1大图banner | |
| 15 | 16 | let SlideModelTypeRecommend4: String = "4"//4一排两个 推荐课程&推荐活动 |
| 16 | 17 | let SlideModelTypeTodayRecommend74: String = "74"//74今日推荐 |
| 17 | 18 | let SlideModelTypeAllCourse12: String = "12"//12列表全部课程 |
| 18 | 19 | let SlideModelTypeOneCourse75: String = "75"//75单课程大图 |
| 19 | -let SlideModelTypeTwoDuanJu5: String = "5"//5竖版短剧 一排两个 | |
| 20 | 20 | let SlideModelTypeRealHotList7: String = "7"//7实时热榜 |
| 21 | +let SlideModelTypeBanner1: String = "1"//1Banner | |
| 22 | + | |
| 23 | +//忽必烈 | |
| 24 | +let SlideModelTypeLanmu22: String = "22"//22首页栏目 电影 电视剧 纪录片 | |
| 25 | +let SlideModelTypeFollow77: String = "77"//正在追 接口type77 | |
| 26 | +let SlideModelTypeTVOneBigTwoSmall2: String = "2"//2 一大图两小图 | |
| 27 | +let SlideModelTypeAD31: String = "31"//31横幅广告 | |
| 28 | +let SlideModelTypeTwoDuanJu5: String = "5"//5竖版短剧 一排两个 | |
| 29 | +let SlideModelTypeOngHangThree3: String = "3"//3竖版 一排三个 | |
| 30 | + | |
| 31 | +let SlideModelTypeShop29: String = "29"//29 官方周边 | |
| 32 | +let SlideModelTypeShopCategory78: String = "78"//78电商分类 | |
| 33 | + | |
| 34 | +//let SlideModelTypeThreeDuanJu5: String = "5"//忽必烈版5一排三个 旧版5竖版短剧 一排两个 | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 21 | 40 | |
| 22 | 41 | class CNUpSlideViewController: CNLiveBaseViewController,UITableViewDelegate,UITableViewDataSource{ |
| 23 | 42 | ... | ... |
metaCode/Classes/Main/HomePage/Controller/WebController/CNHomeWebViewController.swift
| ... | ... | @@ -109,10 +109,11 @@ class CNHomeWebViewController:CNLiveBaseViewController ,WKNavigationDelegate{ |
| 109 | 109 | make.top.equalTo(get_system_nav_height()) |
| 110 | 110 | make.left.right.bottom.equalToSuperview() |
| 111 | 111 | } |
| 112 | + | |
| 112 | 113 | |
| 113 | - let webVC = CNWebViewController() | |
| 114 | - webVC.url = URL(string: "https://wjjh5.cnlive.com/chatgpt/#/pages/index/index?id=1836691195091464194") | |
| 115 | - navigationViewController().pushViewController(webVC, animated: true) | |
| 114 | +// let webVC = CNWebViewController() | |
| 115 | +// webVC.url = URL(string: "https://wjjh5.cnlive.com/chatgpt/#/pages/index/index?id=1836691195091464194") | |
| 116 | +// navigationViewController().pushViewController(webVC, animated: true) | |
| 116 | 117 | } |
| 117 | 118 | |
| 118 | 119 | func h5StopVideoPlayer(){ | ... | ... |
metaCode/Classes/Main/HomePage/Controller/WebController/CNWebView.swift
| ... | ... | @@ -27,12 +27,13 @@ typealias cnWebControllerUpdateNavEditBlock = (_ isShowEdit:Bool)->Void |
| 27 | 27 | //更新Web控制器 currentUrl |
| 28 | 28 | typealias cnWebControllerUpdateCurrentUrlBlock = (_ currentUrl:String)->Void |
| 29 | 29 | |
| 30 | -class CNWebView:UIView,WKNavigationDelegate, WKScriptMessageHandler{ | |
| 30 | +class CNWebView:UIView,WKNavigationDelegate, WKScriptMessageHandler,WKUIDelegate{ | |
| 31 | 31 | |
| 32 | 32 | var configuration:WKWebViewConfiguration? |
| 33 | 33 | |
| 34 | 34 | lazy var cnWebView :WKWebView = { |
| 35 | 35 | let cnWebView = WKWebView(frame: self.bounds, configuration: self.configuration!) |
| 36 | + cnWebView.uiDelegate = self | |
| 36 | 37 | return cnWebView |
| 37 | 38 | }() |
| 38 | 39 | |
| ... | ... | @@ -379,9 +380,33 @@ class CNWebView:UIView,WKNavigationDelegate, WKScriptMessageHandler{ |
| 379 | 380 | self.bridge?.registerHandler("ymAiGetAutoPlayAudioState", handler: { data, responseCallback in |
| 380 | 381 | print("js call oc\(data)") |
| 381 | 382 | |
| 382 | - | |
| 383 | - | |
| 384 | 383 | }) |
| 384 | + //h5拉起原生 跳转ugc播放页面 | |
| 385 | + self.bridge?.registerHandler("wjjJumpUGCAlbum", handler: { data, responseCallback in | |
| 386 | + print("js call oc\(data)") | |
| 387 | + let dic = data as! Dictionary<String, Any> | |
| 388 | + if let albumIdStr = dic["albumId"] as? String{ | |
| 389 | + //短剧-跳转短剧播放页 | |
| 390 | + navigationViewController().visibleViewController?.navigationController?.pushViewController(CNLiveShortVideoViewController(aid: albumIdStr), animated: pushAnimated) | |
| 391 | + | |
| 392 | + } | |
| 393 | + }) | |
| 394 | + | |
| 395 | + //h5拉起原生跳视频专辑 | |
| 396 | + self.bridge?.registerHandler("video://album", handler: { data, responseCallback in | |
| 397 | + print("js call oc\(data)") | |
| 398 | + let dataDic = data as! Dictionary<String, Any> | |
| 399 | + print("拉起视频专辑") | |
| 400 | + | |
| 401 | + }) | |
| 402 | + //h5拉起原生跳视频单集 | |
| 403 | + self.bridge?.registerHandler("video://vod", handler: { data, responseCallback in | |
| 404 | + print("js call oc\(data)") | |
| 405 | + let dataDic = data as! Dictionary<String, Any> | |
| 406 | + print("拉起视频单集") | |
| 407 | + | |
| 408 | + }) | |
| 409 | + | |
| 385 | 410 | } |
| 386 | 411 | |
| 387 | 412 | // MARK: - 检查url |
| ... | ... | @@ -478,7 +503,31 @@ class CNWebView:UIView,WKNavigationDelegate, WKScriptMessageHandler{ |
| 478 | 503 | } |
| 479 | 504 | return str |
| 480 | 505 | } |
| 481 | - | |
| 506 | + // MARK: - WKUIDelegate | |
| 507 | + func webView(_ webView: WKWebView, runJavaScriptTextInputPanelWithPrompt prompt: String, defaultText: String?, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping (String?) -> Void) { | |
| 508 | + if prompt.contains("video://vod"){ | |
| 509 | + //视频单集 | |
| 510 | + let tempDic = NSString.getURLParameters(prompt) | |
| 511 | + if let dic = tempDic{ | |
| 512 | + if let contentId = dic.object(forKey: "contentId") as? String{ | |
| 513 | + CNLiveDownSlideTool.pushVodController(contentId: contentId, navigationVC: navigationViewController(), isAblumVideo: false) | |
| 514 | + } | |
| 515 | + } | |
| 516 | + }else if prompt.contains("video://album"){ | |
| 517 | + //视频专辑 | |
| 518 | + let tempDic = NSString.getURLParameters(prompt) | |
| 519 | + if let dic = tempDic{ | |
| 520 | + if let aidStr = dic.object(forKey: "aid") as? String{ | |
| 521 | + //跳转点播专辑 | |
| 522 | + CNLiveDownSlideTool.pushVodController(contentId: aidStr, navigationVC: navigationViewController(), isAblumVideo: true) | |
| 523 | + } | |
| 524 | + } | |
| 525 | + | |
| 526 | + | |
| 527 | + } | |
| 528 | + completionHandler("http") | |
| 529 | + } | |
| 530 | + | |
| 482 | 531 | // MARK: - WKWebViewDelegate |
| 483 | 532 | // 页面开始加载时调用 |
| 484 | 533 | func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) { | ... | ... |
metaCode/Classes/Main/HomePage/Controller/WebController/CNWebViewController.swift
| ... | ... | @@ -20,6 +20,7 @@ let ManagemallshopH5 = "managemall.cnlive.com" |
| 20 | 20 | |
| 21 | 21 | class CNWebViewController:CNLiveBaseViewController ,WKNavigationDelegate{ |
| 22 | 22 | |
| 23 | + var isHiddenNavigationBar = false | |
| 23 | 24 | var bridge:WKWebViewJavascriptBridge? |
| 24 | 25 | var currentUrl:String = ""//当前网页的url |
| 25 | 26 | |
| ... | ... | @@ -32,7 +33,8 @@ class CNWebViewController:CNLiveBaseViewController ,WKNavigationDelegate{ |
| 32 | 33 | configuration.preferences.minimumFontSize = 0.0 |
| 33 | 34 | configuration.preferences = preferences |
| 34 | 35 | configuration.userContentController = WKUserContentController() |
| 35 | - let webView = CNWebView(frame: CGRectMake(0, KNavigationHeight, Width, Height-KNavigationHeight), configuration: configuration, url: _url) | |
| 36 | + let navH = self.isHiddenNavigationBar ? 0 : KNavigationHeight | |
| 37 | + let webView = CNWebView(frame: CGRectMake(0, navH, Width, Height-navH), configuration: configuration, url: _url) | |
| 36 | 38 | webView.cnWebView.scrollView.showsVerticalScrollIndicator = false |
| 37 | 39 | webView.cnWebView.scrollView.showsHorizontalScrollIndicator = false |
| 38 | 40 | webView.isCNWebController = true |
| ... | ... | @@ -89,7 +91,7 @@ class CNWebViewController:CNLiveBaseViewController ,WKNavigationDelegate{ |
| 89 | 91 | |
| 90 | 92 | override func viewDidLoad() { |
| 91 | 93 | super.viewDidLoad() |
| 92 | - navigationBarHidden = false | |
| 94 | + navigationBarHidden = self.isHiddenNavigationBar | |
| 93 | 95 | self.view.addSubview(self.webView) |
| 94 | 96 | |
| 95 | 97 | self.webView.webControllerUpdateNavSoundBlock = { isSound in |
| ... | ... | @@ -124,8 +126,9 @@ class CNWebViewController:CNLiveBaseViewController ,WKNavigationDelegate{ |
| 124 | 126 | self.webView.webControllerUpdateCurrentUrlBlock = { [weak self] currentUrlStr in |
| 125 | 127 | self!.currentUrl = currentUrlStr |
| 126 | 128 | } |
| 129 | + let navH = self.isHiddenNavigationBar ? 0 : KNavigationHeight | |
| 127 | 130 | self.webView.snp.makeConstraints { make in |
| 128 | - make.top.equalTo(get_system_nav_height()) | |
| 131 | + make.top.equalTo(navH) | |
| 129 | 132 | make.left.right.bottom.equalToSuperview() |
| 130 | 133 | } |
| 131 | 134 | } | ... | ... |
metaCode/Classes/Main/HomePage/View/VerticalViews/DownSlide/CNDownSlideSingleCourseCell.swift
| ... | ... | @@ -516,6 +516,7 @@ class CNDownSlideSingleCourseCell: UITableViewCell, UICollectionViewDelegate, UI |
| 516 | 516 | } |
| 517 | 517 | //MARK: - 事件 |
| 518 | 518 | @objc func enterBtnAction(_ sender: UIButton){ |
| 519 | + | |
| 519 | 520 | let tag = sender.tag |
| 520 | 521 | if self.myCurriculum?.list.count ?? 0 > 0{ |
| 521 | 522 | let albumMdl = self.myCurriculum?.list[tag] | ... | ... |
metaCode/Classes/Main/HomePage/View/VerticalViews/DownSlide/CNLiveDownSlideBannerCell.swift
0 → 100644
| 1 | +// | |
| 2 | +// CNLiveDownSlideBannerCell.swift | |
| 3 | +// metaCode | |
| 4 | +// | |
| 5 | +// Created by zx on 2025/2/7. | |
| 6 | +// | |
| 7 | + | |
| 8 | +import Foundation | |
| 9 | + | |
| 10 | +///banner高度 | |
| 11 | +let DownSlideBannerH: CGFloat = DownSlideBannerW*195/345 | |
| 12 | +///banner宽度 | |
| 13 | +let DownSlideBannerW: CGFloat = KSreenWidth-DownSlideRecommendLeftGap*2 | |
| 14 | + | |
| 15 | +class CNLiveDownSlideBannerCell: UITableViewCell { | |
| 16 | + //slideModel | |
| 17 | + var _slideModel : CNLiveDownSlideModel? | |
| 18 | + var slideModel : CNLiveDownSlideModel? { | |
| 19 | + get{ | |
| 20 | + _slideModel | |
| 21 | + } | |
| 22 | + set{ | |
| 23 | + _slideModel = newValue! | |
| 24 | + | |
| 25 | + for obj in contentView.subviews{ | |
| 26 | + obj.removeFromSuperview() | |
| 27 | + } | |
| 28 | + self.setupNewUI(model: _slideModel!) | |
| 29 | + } | |
| 30 | + } | |
| 31 | + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { | |
| 32 | + super.init(style: style, reuseIdentifier: reuseIdentifier) | |
| 33 | + self.selectionStyle = .none | |
| 34 | + contentView.backgroundColor = HexColor(kCNDownSlideBackgroundColorHex) | |
| 35 | + contentView.clipsToBounds = true | |
| 36 | + } | |
| 37 | + | |
| 38 | + required init?(coder: NSCoder) { | |
| 39 | + fatalError("init(coder:) has not been implemented") | |
| 40 | + } | |
| 41 | + | |
| 42 | + func setupNewUI(model:CNLiveDownSlideModel){ | |
| 43 | + //总块数 | |
| 44 | + let contentsNum = model.contents.count | |
| 45 | + //model行数 | |
| 46 | + let row = model.rowNum | |
| 47 | + //总显示块数 | |
| 48 | + var totalNum = (contentsNum >= row) ? row : contentsNum | |
| 49 | + if row == 0{//row为0 , contents全部显示 | |
| 50 | + totalNum = contentsNum | |
| 51 | + } | |
| 52 | + for i in 0..<totalNum{//i是第几行 | |
| 53 | + let contentMdl = model.contents[i] | |
| 54 | + let imageView = UIImageView(frame: CGRectMake(DownSlideRecommendLeftGap, CGFloat(i)*(DownSlideBannerH+DownSlideRecommendLeftGap), CGFloat(DownSlideBannerW), CGFloat(DownSlideBannerH))) | |
| 55 | + imageView.kf.setImage(with: URL(string:contentMdl.poster )) | |
| 56 | + imageView.tag = i | |
| 57 | + imageView.layer.cornerRadius = 12 | |
| 58 | + imageView.clipsToBounds = true | |
| 59 | + imageView.isUserInteractionEnabled = true | |
| 60 | + imageView.contentMode = .scaleAspectFill | |
| 61 | + imageView.addGestureRecognizer(UITapGestureRecognizer.init(target: self, action: #selector(pushWebAction))) | |
| 62 | + contentView.addSubview(imageView) | |
| 63 | + } | |
| 64 | + } | |
| 65 | + | |
| 66 | + @objc func pushWebAction(ges: UITapGestureRecognizer){ | |
| 67 | + let imageView = ges.view as! UIImageView | |
| 68 | + let i = imageView.tag | |
| 69 | + let contentMdl = self.slideModel?.contents[i] | |
| 70 | + CNLiveDownSlideTool.pushWebVCWithContentsMdl(model: contentMdl?.model ?? "", contentId: contentMdl?.contentId ?? "", pid: contentMdl?.pid ?? "", shareUrl: contentMdl?.shareUrl ?? "", thirdUrl: contentMdl?.thirdUrl ?? "", title: contentMdl?.title ?? "", s_to: contentMdl?.s_to ?? "",trailerId: contentMdl?.trailerId ?? "", controller: nil, slideModel: nil) | |
| 71 | + } | |
| 72 | +} | ... | ... |
metaCode/Classes/Main/HomePages/Controller/HomeController/CNLiveAuthViewController.swift
| ... | ... | @@ -13,6 +13,7 @@ class CNLiveAuthViewController:CNLiveBaseViewController,UITableViewDelegate,UITa |
| 13 | 13 | let kCNLiveDownSlideRecommendCellIdentifier = "kCNLiveDownSlideRecommendCellIdentifier" |
| 14 | 14 | let kCNLiveDownSlideTodayRecommendCellIdentifier = "kCNLiveDownSlideTodayRecommendCellIdentifier" |
| 15 | 15 | let kCNLiveDownSlideSingleCourseCellIdentifier = "kCNLiveDownSlideSingleCourseCellIdentifier" |
| 16 | + let kCNLiveDownSlideBannerCellIdentifier = "kCNLiveDownSlideBannerCellIdentifier" | |
| 16 | 17 | let kCNLiveHomePageDuanJuCellIdentifier = "kCNLiveHomePageDuanJuCellIdentifier" |
| 17 | 18 | let kCNLiveDownSlideTwoDuanJuCellIdentifier = "kCNLiveDownSlideTwoDuanJuCellIdentifier" |
| 18 | 19 | let kCNLiveDownSlideRealHotListCellIdentifier = "kCNLiveDownSlideRealHotListCellIdentifier" |
| ... | ... | @@ -72,7 +73,7 @@ class CNLiveAuthViewController:CNLiveBaseViewController,UITableViewDelegate,UITa |
| 72 | 73 | tableView.delegate = self |
| 73 | 74 | tableView.separatorStyle = .none |
| 74 | 75 | tableView.register(CNLiveHomePageDuanJuCell.self, forCellReuseIdentifier: kCNLiveHomePageDuanJuCellIdentifier) |
| 75 | - | |
| 76 | + tableView.register(CNLiveDownSlideBannerCell.self, forCellReuseIdentifier: kCNLiveDownSlideBannerCellIdentifier) | |
| 76 | 77 | tableView.register(CNLiveDownSlideRecommendCell.self, forCellReuseIdentifier: kCNLiveDownSlideRecommendCellIdentifier) |
| 77 | 78 | tableView.register(CNLiveDownSlideTodayRecommendCell.self, forCellReuseIdentifier: kCNLiveDownSlideTodayRecommendCellIdentifier) |
| 78 | 79 | tableView.register(CNDownSlideSingleCourseCell.self, forCellReuseIdentifier: kCNLiveDownSlideAllCourseCellIdentifier) |
| ... | ... | @@ -116,7 +117,7 @@ class CNLiveAuthViewController:CNLiveBaseViewController,UITableViewDelegate,UITa |
| 116 | 117 | //除了短剧的model |
| 117 | 118 | let slideModel = self.dataArray[indexPath.row] as! CNLiveDownSlideModel |
| 118 | 119 | |
| 119 | - //type=4一排两个 推荐课程&推荐活动; 74今日推荐; 12列表全部课程; 75单课程大图 | |
| 120 | + //type=4一排两个 推荐课程&推荐活动; 74今日推荐; 12列表全部课程; 75单课程大图 1大图banner | |
| 120 | 121 | if slideModel.type == SlideModelTypeRecommend4{ |
| 121 | 122 | guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveDownSlideRecommendCellIdentifier) as? CNLiveDownSlideRecommendCell |
| 122 | 123 | else { |
| ... | ... | @@ -164,6 +165,14 @@ class CNLiveAuthViewController:CNLiveBaseViewController,UITableViewDelegate,UITa |
| 164 | 165 | } |
| 165 | 166 | cell.slideModel = slideModel |
| 166 | 167 | return cell |
| 168 | + }else if slideModel.type == SlideModelTypeRecommend1{ | |
| 169 | + guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveDownSlideBannerCellIdentifier) as? CNLiveDownSlideBannerCell | |
| 170 | + else { | |
| 171 | + let cell = CNLiveDownSlideBannerCell() | |
| 172 | + return cell | |
| 173 | + } | |
| 174 | + cell.slideModel = slideModel | |
| 175 | + return cell | |
| 167 | 176 | }else{ |
| 168 | 177 | return UITableViewCell() |
| 169 | 178 | } | ... | ... |
metaCode/Classes/Main/HomePages/Model/CNLiveAlbumListModel.swift
| ... | ... | @@ -31,31 +31,54 @@ class CNLiveAlbumListBaseModel:BaseModel{ |
| 31 | 31 | } |
| 32 | 32 | class CNLiveAlbumListModel:BaseModel{ |
| 33 | 33 | var title = "" |
| 34 | + var albumId = "" | |
| 35 | + var albumName = "" | |
| 36 | + var actor = "" | |
| 37 | + var spId = "" | |
| 38 | + var spName = "" | |
| 39 | + var modelId = "" | |
| 40 | + var time = "" | |
| 41 | + var img = "" | |
| 42 | + var poster = "" | |
| 43 | + var counts = "" | |
| 44 | + var description = "" | |
| 45 | + var viewCounts = "" | |
| 46 | + var schedule = "" | |
| 47 | + var liveType = "" | |
| 48 | + var downloadType = "" | |
| 49 | + var activityId = "" | |
| 50 | + var comments = "" | |
| 51 | + var chapterId = "" | |
| 52 | + var contentId = "" | |
| 53 | + var duration = "" | |
| 54 | + var shareUrl = "" | |
| 55 | + var fileSize = "" | |
| 56 | + var cmccActiveId = "" | |
| 57 | + var productId = "" | |
| 58 | + var productType = "" | |
| 59 | + var isStudy = "" | |
| 60 | + var playTime = "" | |
| 61 | + var tool :CNLiveAlbumListToolModel? | |
| 62 | + var product:CNLiveAlbumProductModel? | |
| 63 | + | |
| 34 | 64 | var shortTitle = "" |
| 35 | 65 | var subTitle = "" |
| 36 | - var product:CNLiveAlbumProductModel? | |
| 37 | - var poster = "" | |
| 38 | 66 | var model = "" |
| 39 | 67 | var thirdUrl = "" |
| 40 | 68 | var colours = "" |
| 41 | 69 | var address = "" |
| 42 | - var contentId = "" | |
| 43 | 70 | var source = "" |
| 44 | 71 | var sourceName = "" |
| 45 | 72 | var pid = "" |
| 46 | 73 | var witnessId = "" |
| 47 | 74 | var videoUrl = "" |
| 48 | - var duration = "" | |
| 49 | 75 | var number = "" |
| 50 | 76 | var goods = "" |
| 51 | 77 | var icon : CNLiveAlbumListIconModel? |
| 52 | - var time = "" | |
| 53 | 78 | var tagId = "" |
| 54 | 79 | var tagName = "" |
| 55 | - var tool :CNLiveAlbumListToolModel? | |
| 56 | 80 | var activityEndTime = "" |
| 57 | 81 | var h5Url = "" |
| 58 | - var shareUrl = "" | |
| 59 | 82 | var album:CNLiveAlbumListAlbumModel? |
| 60 | 83 | var block = "" |
| 61 | 84 | var isHorizontalScreen = "" | ... | ... |
metaCode/Classes/Main/HomePages/Model/CNLiveHomePageModel.swift
| ... | ... | @@ -7,6 +7,168 @@ |
| 7 | 7 | |
| 8 | 8 | import Foundation |
| 9 | 9 | |
| 10 | +////// 忽必烈首页频道model | |
| 11 | +class CNLiveHomePageHuBiLieModel:BaseModel{ | |
| 12 | + var id = "" | |
| 13 | + var name = "" | |
| 14 | + var showName = "" | |
| 15 | + var type = "" | |
| 16 | + var typeName = "" | |
| 17 | + var thirdUrl = "" | |
| 18 | + var textColor = "" | |
| 19 | + var textColorSelected = "" | |
| 20 | + var pageType = "" | |
| 21 | + var navigation = "" | |
| 22 | + var siteId = "" | |
| 23 | + var pageId = "" | |
| 24 | + var backgroundColor = "" | |
| 25 | + var backgroundImg = "" | |
| 26 | + var backgroundImgH5 = "" | |
| 27 | + var statusBarColor = "" | |
| 28 | + var module = "" | |
| 29 | + var defaultPage = "" | |
| 30 | + var img = "" | |
| 31 | + var icon = "" | |
| 32 | + var width = "" | |
| 33 | + var height = "" | |
| 34 | + var version = "" | |
| 35 | + var endVersion = "" | |
| 36 | + var parentId = "" | |
| 37 | + var channelId = "" | |
| 38 | + var sort = "" | |
| 39 | + var enable = "" | |
| 40 | + var channelVer = "" | |
| 41 | + var pageStyleList = [CNLiveHomePageStyleListModel]() | |
| 42 | + | |
| 43 | +} | |
| 44 | + | |
| 45 | +//播放记录 | |
| 46 | +class CNLiveHomeFollowListBaseModel:BaseModel{ | |
| 47 | + var endRow = 0 | |
| 48 | + var firstPage = 0 | |
| 49 | + var hasNextPage = false | |
| 50 | + var nextPage = 0 | |
| 51 | + var hasPreviousPage = false | |
| 52 | + var isFirstPage = true | |
| 53 | + var isLastPage = true | |
| 54 | + var lastPage = 0 | |
| 55 | + var list = [CNLiveHomeFollowModel]() | |
| 56 | + var navigateFirstPage = 0 | |
| 57 | + var navigateLastPage = 0 | |
| 58 | + var navigatePages = 0 | |
| 59 | + var navigatepageNums:Array<Any> = [] | |
| 60 | + var pageNum = 0 | |
| 61 | + var pageSize = 0 | |
| 62 | + var pages = 0 | |
| 63 | + var prePage = 0 | |
| 64 | + var size = 0 | |
| 65 | + var startRow = 0 | |
| 66 | + var total = 0 | |
| 67 | + | |
| 68 | +} | |
| 69 | + | |
| 70 | +//正在追剧集 | |
| 71 | +class CNLiveHomeFollowModel:BaseModel{ | |
| 72 | + var id = "" | |
| 73 | + var contentId = "" | |
| 74 | + var activeId = "" | |
| 75 | + var title = "" | |
| 76 | + var time = "" | |
| 77 | + var counts = "" | |
| 78 | + var actor = "" | |
| 79 | + var sid = "" | |
| 80 | + var albumId = "" | |
| 81 | + var albumImg = "" | |
| 82 | + var albumName = ""//专辑名称 | |
| 83 | + var channelName = "" | |
| 84 | + var schedule = "" | |
| 85 | + var recent = "" | |
| 86 | + var siteId = "" | |
| 87 | + var modelId = "" | |
| 88 | + var poster = "" | |
| 89 | + var description = "" | |
| 90 | + var shareUrl = "" | |
| 91 | + var cmccActiveId = "" | |
| 92 | + | |
| 93 | + var product:CNLiveAlbumProductModel? | |
| 94 | + var aproduct:CNLiveAlbumProductModel? | |
| 95 | + | |
| 96 | +} | |
| 97 | + | |
| 98 | +//收藏记录 | |
| 99 | +class CNLiveCollectionListBaseModel:BaseModel{ | |
| 100 | + var endRow = 0 | |
| 101 | + var firstPage = 0 | |
| 102 | + var hasNextPage = false | |
| 103 | + var nextPage = 0 | |
| 104 | + var hasPreviousPage = false | |
| 105 | + var isFirstPage = true | |
| 106 | + var isLastPage = true | |
| 107 | + var lastPage = 0 | |
| 108 | + var list = [CNLiveCollectionListModel]() | |
| 109 | + var navigateFirstPage = 0 | |
| 110 | + var navigateLastPage = 0 | |
| 111 | + var navigatePages = 0 | |
| 112 | + var navigatepageNums:Array<Any> = [] | |
| 113 | + var pageNum = 0 | |
| 114 | + var pageSize = 0 | |
| 115 | + var pages = 0 | |
| 116 | + var prePage = 0 | |
| 117 | + var size = 0 | |
| 118 | + var startRow = 0 | |
| 119 | + var total = 0 | |
| 120 | + | |
| 121 | +} | |
| 122 | +class CNLiveCollectionListModel:BaseModel{ | |
| 123 | + var title = "" | |
| 124 | + var subTitle = "" | |
| 125 | + var poster = "" | |
| 126 | + var contentId = "" | |
| 127 | + var albumId = "" | |
| 128 | + var pid = "" | |
| 129 | + var model = "" | |
| 130 | + var collectionTime = "" | |
| 131 | +} | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | +//影视剧 音乐 电商 | |
| 136 | +class CNLiveHomePageStyleListModel:BaseModel{ | |
| 137 | + var id = "" | |
| 138 | + var name = "" | |
| 139 | + var showName = "" | |
| 140 | + var type = "" | |
| 141 | + var typeName = "" | |
| 142 | + var thirdUrl = "" | |
| 143 | + var textColor = "" | |
| 144 | + var textColorSelected = "" | |
| 145 | + var pageType = "" | |
| 146 | + var navigation = "" | |
| 147 | + var siteId = "" | |
| 148 | + var pageId = "" | |
| 149 | + var backgroundColor = "" | |
| 150 | + var backgroundImg = "" | |
| 151 | + var backgroundImgH5 = "" | |
| 152 | + var statusBarColor = "" | |
| 153 | + var module = "" | |
| 154 | + var defaultPage = "" | |
| 155 | + var img = "" | |
| 156 | + var icon = "" | |
| 157 | + var width = "" | |
| 158 | + var height = "" | |
| 159 | + var version = "" | |
| 160 | + var endVersion = "" | |
| 161 | + var parentId = "" | |
| 162 | + var channelId = "" | |
| 163 | + var sort = "" | |
| 164 | + var enable = "" | |
| 165 | + var channelVer = "" | |
| 166 | + var pageStyleList = "" | |
| 167 | +} | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | +///////// 短剧首页 | |
| 10 | 172 | class CNLiveHomePageModel:BaseModel{ |
| 11 | 173 | var endRow = 0 |
| 12 | 174 | var firstPage = 0 | ... | ... |
metaCode/Classes/Main/HomePages/View/HomepageDetail/CNLiveAlbumCell.swift
metaCode/Classes/Main/HomePages/ViewModel/CNLiveHomePageViewModel.swift
| ... | ... | @@ -7,8 +7,408 @@ |
| 7 | 7 | |
| 8 | 8 | import Foundation |
| 9 | 9 | import CNLiveRequestBastKit |
| 10 | +import CNLiveBusinessTools | |
| 11 | +class CNLiveHomePageViewModel:NSObject,URLSessionTaskDelegate{ | |
| 12 | + static let shared = CNLiveHomePageViewModel() | |
| 13 | + | |
| 14 | + ///id获取播放地址url | |
| 15 | + func getVodVideoURL(contentId:String,resultBlock: @escaping downSlideResultBlock){ | |
| 16 | + | |
| 17 | + // 获取当前时间戳(自1970年以来的秒数) | |
| 18 | + let timeInterval = Date().timeIntervalSince1970 | |
| 19 | + // 将时间戳转换为字符串 | |
| 20 | + // let timeString = String(format: "%ld", Int64(timeInterval)) | |
| 21 | + // 或者更简洁地使用String的初始化方法 | |
| 22 | + let timeString = "\(Int64(timeInterval))" | |
| 23 | + | |
| 24 | + let bundleIdentifier = Bundle.main.bundleIdentifier | |
| 25 | + | |
| 26 | + let uuid = CNLiveBusinessTools.getUidForStat(Date()) | |
| 27 | + | |
| 28 | + let shortVersion = Bundle.main.infoDictionary!["CFBundleShortVersionString"] as! String | |
| 29 | + | |
| 30 | + | |
| 31 | + let param = NSMutableDictionary() | |
| 32 | + param.setValue(CNLiveMCEnvironmentManager.shared.appId, forKey: "appId") | |
| 33 | + param.setValue(contentId, forKey: "vId") | |
| 34 | + param.setValue(timeString, forKey: "timestamp") | |
| 35 | + param.setValue("0", forKey: "isHLS") | |
| 36 | + param.setValue("i", forKey: "plat") | |
| 37 | + param.setValue("v", forKey: "playType") | |
| 38 | + param.setValue(bundleIdentifier, forKey: "platform_id") | |
| 39 | + param.setValue("", forKey: "channelName") | |
| 40 | + param.setValue("", forKey: "tag") | |
| 41 | + param.setValue("", forKey: "from") | |
| 42 | + param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "sid") | |
| 43 | + // param.setValue(uuid, forKey: "uid") | |
| 44 | + param.setValue(shortVersion, forKey: "ver") | |
| 45 | + | |
| 46 | + param.setValue("1", forKey: "appType") | |
| 47 | + param.setValue("i", forKey: "clientPlat") | |
| 48 | + param.setValue(shortVersion, forKey: "version") | |
| 49 | + param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "uid") | |
| 50 | + param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "loginSid") | |
| 51 | + param.setValue("release", forKey: "app_channel_id") | |
| 52 | + param.setValue("2", forKey: "rate") | |
| 53 | + param.setValue("release", forKey: "app_channel_id") | |
| 54 | + param.setValue("0", forKey: "retry") | |
| 55 | + | |
| 56 | + | |
| 57 | + let signStr = CNLiveBusinessTools.signvalue(param as! [AnyHashable : Any]) | |
| 58 | + let string1 = "\(signStr)&key=\(CNLiveMCEnvironmentManager.shared.appKey)" | |
| 59 | + let signString1 = CNLiveBusinessTools.sha1(string1).uppercased() | |
| 60 | + let liveUrl = APPLoginHost+"/open/api2/vod_ips/vodplayByAPP" | |
| 61 | + | |
| 62 | + let videourl = "\(liveUrl)?\(signStr)&sign=\(signString1)" | |
| 63 | + print("111111URL:\(videourl)") | |
| 64 | + | |
| 65 | + // 创建一个可变URL请求 | |
| 66 | + let urlRequest = NSMutableURLRequest(url: URL(string: videourl)!) | |
| 67 | + urlRequest.httpMethod = "GET" | |
| 68 | + urlRequest.timeoutInterval = 30 | |
| 69 | + | |
| 70 | + let config = URLSessionConfiguration.default | |
| 71 | + config.requestCachePolicy = .reloadIgnoringLocalCacheData | |
| 72 | + let urlSession = URLSession(configuration: config, delegate: self, delegateQueue: OperationQueue.current) | |
| 73 | + let task = urlSession.dataTask(with: urlRequest as URLRequest) { data, response, error in | |
| 74 | + if let urlResponse = response as? HTTPURLResponse, urlResponse.statusCode == 301 || urlResponse.statusCode == 302 { | |
| 75 | + // do something ... | |
| 76 | + print("重定向地址 == \(urlResponse.allHeaderFields["Location"] as? String ?? "无重定向地址")") | |
| 77 | + resultBlock(urlResponse.allHeaderFields["Location"] as? String ?? "",.success) | |
| 78 | + | |
| 79 | + } | |
| 80 | + } | |
| 81 | + | |
| 82 | + task.resume() | |
| 83 | + } | |
| 84 | + func urlSession(_ session: URLSession, task: URLSessionTask, willPerformHTTPRedirection response: HTTPURLResponse, newRequest request: URLRequest, completionHandler: @escaping (URLRequest?) -> Void) { | |
| 85 | + print("\(response.statusCode)") // 302 | |
| 86 | + print("\(response.allHeaderFields["Location"] as? String ?? "无重定向地址")") // 重定向地址URL | |
| 87 | + | |
| 88 | + // 根据业务需求决定是否使用新的请求继续任务 | |
| 89 | + // completionHandler(request) // 使用新的请求继续任务 | |
| 90 | + // completionHandler(nil) // 不使用新的请求,取消重定向 | |
| 91 | + | |
| 92 | + // 在这个例子中,我们简单地取消重定向(即不使用新的请求) | |
| 93 | + completionHandler(nil) | |
| 94 | + } | |
| 95 | + | |
| 96 | + //点播详情 | |
| 97 | + static func requestGetVodPlayApi( contentId:String,sid:String,resultBlock: @escaping downSlideResultBlock) { | |
| 98 | + let param = NSMutableDictionary() | |
| 99 | + param.setValue(contentId, forKey: "contentId") | |
| 100 | + param.setValue(sid, forKey: "sid") | |
| 101 | + param.setValue("", forKey: "channelName") | |
| 102 | + param.setValue("1", forKey: "model") | |
| 103 | + param.setValue(CNLiveMCEnvironmentManager.shared.appId, forKey: "appId") | |
| 104 | + param.setValue("1", forKey: "type") | |
| 105 | + param.setValue("", forKey: "app_channel_id") | |
| 106 | + | |
| 107 | + | |
| 108 | + CNLiveNetworking.setAllowRequestDefaultArgument(true) | |
| 109 | + CNLiveNetworking.setupShowDataResult(false) | |
| 110 | + let custom_param = NSMutableDictionary() | |
| 111 | + custom_param.setValue(CNLiveMCEnvironmentManager.shared.appId, forKey: "appId") | |
| 112 | + custom_param.setValue(CNLiveMCEnvironmentManager.shared.appKey, forKey: "appKey") | |
| 113 | + CNLiveNetworking.setupCustomParam(custom_param as? [String : String]) | |
| 114 | +//https://cmsapi.cnlive.com/playApi/play?contentId=1350760&sid=&channelName=&model=1&appId=769_li40lrkt53&type=1&app_channel_id= | |
| 115 | + CNLiveNetworking.requestNetwork(with: .GET, urlString: "https://cmsapi.cnlive.com/playApi/play", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in | |
| 116 | + hiddenLoading() | |
| 117 | + if (error == nil) { | |
| 118 | + let resp = result as! NSDictionary | |
| 119 | + let errorCode = "\(resp["errorCode"] ?? "0")" | |
| 120 | + if (errorCode == "0") { | |
| 121 | + | |
| 122 | + if let dataDic = resp["data"] as? Dictionary<String, Any>{ | |
| 123 | + let dataMdl = newDictionaryToModel(dataDic , CNLiveVodPlayModel.self) | |
| 124 | + resultBlock(dataMdl,.success) | |
| 125 | + }else | |
| 126 | + { | |
| 127 | + resultBlock(NSNull(),.failed) | |
| 128 | + } | |
| 129 | + } | |
| 130 | + else{ | |
| 131 | + resultBlock(NSNull(),.failed) | |
| 132 | + } | |
| 133 | + } | |
| 134 | + } | |
| 135 | + } | |
| 136 | + /// 获取专辑信息接口 | |
| 137 | + /// - Parameters: | |
| 138 | + /// - aid: 专辑名称 | |
| 139 | + /// - resultBlock: 返回 | |
| 140 | + static func requstWithVodAlbumMsgVideo(aid: String,resultBlock: @escaping downSlideResultBlock) { | |
| 141 | + let param = NSMutableDictionary() | |
| 142 | + param.setValue(aid, forKey: "aid") | |
| 143 | + param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "sid") | |
| 144 | + param.setValue("mc_app", forKey: "app_channel_id") | |
| 145 | + | |
| 146 | + let custom_param = NSMutableDictionary() | |
| 147 | + custom_param.setValue(CNLiveMCEnvironmentManager.shared.appId_wjj, forKey: "appId") | |
| 148 | + custom_param.setValue(CNLiveMCEnvironmentManager.shared.appKey_wjj, forKey: "appKey") | |
| 149 | + CNLiveNetworking.setAllowRequestDefaultArgument(true) | |
| 150 | + CNLiveNetworking.setupShowDataResult(false) | |
| 151 | + CNLiveNetworking.setupCustomParam(custom_param as? [String : String]) | |
| 152 | + CNLiveNetworking.requestNetwork(with: .GET, urlString: APPBaseCMSUrl+"/contentApi/getAlbumMsg", param: param as! [String : Any], cacheType: .networkOnly) { task, result, error in | |
| 153 | + hiddenLoading() | |
| 154 | + if (error == nil) { | |
| 155 | + let resp = result as! NSDictionary | |
| 156 | + let errorCode = "\(resp["errorCode"] ?? "0")" | |
| 157 | + if (errorCode == "0") { | |
| 158 | + if resp["data"] is NSNull { | |
| 159 | + resultBlock(NSNull(), .failed) | |
| 160 | + } else { | |
| 161 | + let listModel = dictionaryToModel(resp["data"] as! [String : Any], CNLiveVodAlbumMsgModel.self,"") as! CNLiveVodAlbumMsgModel | |
| 162 | + resultBlock(listModel, .success) | |
| 163 | + } | |
| 164 | + } else { | |
| 165 | + showMessage(message: resp["errorMessage"] as! String) | |
| 166 | + resultBlock(NSNull(),.failed) | |
| 167 | + } | |
| 168 | + } else { | |
| 169 | + if CNLiveNetworking.isNetworking() { | |
| 170 | + showMessage(message: "请求失败") | |
| 171 | + resultBlock(NSNull(),.failed) | |
| 172 | + } else { | |
| 173 | + showMessage(message: "似乎与网络断开链接") | |
| 174 | + resultBlock(NSNull(),.noNetwork) | |
| 175 | + } | |
| 176 | + } | |
| 177 | + } | |
| 178 | + } | |
| 179 | + //专辑列表 | |
| 180 | + static func requstWithVodAlbumVideoList(aid: String,resultBlock: @escaping downSlideResultBlock) { | |
| 181 | + let param = NSMutableDictionary() | |
| 182 | + param.setValue(aid, forKey: "aid") | |
| 183 | + param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "sid") | |
| 184 | + param.setValue("mc_app", forKey: "app_channel_id") | |
| 185 | + param.setValue("1", forKey: "page") | |
| 186 | + param.setValue("200", forKey: "pageSize") | |
| 187 | + | |
| 188 | + let custom_param = NSMutableDictionary() | |
| 189 | + custom_param.setValue(CNLiveMCEnvironmentManager.shared.appId_wjj, forKey: "appId") | |
| 190 | + custom_param.setValue(CNLiveMCEnvironmentManager.shared.appKey_wjj, forKey: "appKey") | |
| 191 | + CNLiveNetworking.setAllowRequestDefaultArgument(true) | |
| 192 | + CNLiveNetworking.setupShowDataResult(false) | |
| 193 | + CNLiveNetworking.setupCustomParam(custom_param as? [String : String]) | |
| 194 | + CNLiveNetworking.requestNetwork(with: .GET, urlString: APPBaseCMSUrl+"/contentApi/albumVideoList", param: param as! [String : Any], cacheType: .networkOnly) { task, result, error in | |
| 195 | + hiddenLoading() | |
| 196 | + if (error == nil) { | |
| 197 | + let resp = result as! NSDictionary | |
| 198 | + let errorCode = "\(resp["errorCode"] ?? "0")" | |
| 199 | + if (errorCode == "0") { | |
| 200 | + if resp["data"] is NSNull { | |
| 201 | + resultBlock(NSNull(), .failed) | |
| 202 | + } else { | |
| 203 | + let listModel = dictionaryToModel(resp["data"] as! [String : Any], CNLiveVodAlbumListBaseModel.self,"") as! CNLiveVodAlbumListBaseModel | |
| 204 | + resultBlock(listModel, .success) | |
| 205 | + } | |
| 206 | + } else { | |
| 207 | + showMessage(message: resp["errorMessage"] as! String) | |
| 208 | + resultBlock(NSNull(),.failed) | |
| 209 | + } | |
| 210 | + } else { | |
| 211 | + if CNLiveNetworking.isNetworking() { | |
| 212 | + showMessage(message: "请求失败") | |
| 213 | + resultBlock(NSNull(),.failed) | |
| 214 | + } else { | |
| 215 | + showMessage(message: "似乎与网络断开链接") | |
| 216 | + resultBlock(NSNull(),.noNetwork) | |
| 217 | + } | |
| 218 | + } | |
| 219 | + } | |
| 220 | + } | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + /// 忽必烈 获取首页原生页面顶部频道数据 | |
| 225 | + static func requestGetHomePageTopConfigList( resultBlock: @escaping downSlideResultBlock) { | |
| 226 | + let param = NSMutableDictionary() | |
| 227 | + param.setValue("3310", forKey: "siteStyleId") | |
| 228 | + CNLiveNetworking.setAllowRequestDefaultArgument(true) | |
| 229 | + CNLiveNetworking.setupShowDataResult(false) | |
| 230 | + let custom_param = NSMutableDictionary() | |
| 231 | + custom_param.setValue(CNLiveMCEnvironmentManager.shared.appId, forKey: "appId") | |
| 232 | + custom_param.setValue(CNLiveMCEnvironmentManager.shared.appKey, forKey: "appKey") | |
| 233 | + CNLiveNetworking.setupCustomParam(custom_param as? [String : String]) | |
| 234 | +// http://cms.cnlive.com/api/contentApi/otherChannelList?siteStyleId=3310 | |
| 235 | + CNLiveNetworking.requestNetwork(with: .GET, urlString: APPBaseCMSUrl+"/contentApi/otherChannelList", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in | |
| 236 | + hiddenLoading() | |
| 237 | + if (error == nil) { | |
| 238 | + let resp = result as! NSDictionary | |
| 239 | + let errorCode = "\(resp["errorCode"] ?? "0")" | |
| 240 | + if (errorCode == "0") { | |
| 241 | + | |
| 242 | + let dataArr = resp["data"] as! Array<Any> | |
| 243 | + var resArr = [] | |
| 244 | + if dataArr.count > 0{ | |
| 245 | + //有在追短剧 | |
| 246 | + for dataDic in dataArr { | |
| 247 | + let dataMdl = newDictionaryToModel(dataDic as! [String : Any], CNLiveHomePageHuBiLieModel.self) | |
| 248 | + resArr.append(dataMdl) | |
| 249 | + } | |
| 250 | + }else{ | |
| 251 | + //没有在追短剧 | |
| 252 | + } | |
| 253 | + | |
| 254 | + resultBlock(resArr,.success) | |
| 255 | + } | |
| 256 | + else{ | |
| 257 | + resultBlock(NSNull(),.failed) | |
| 258 | + } | |
| 259 | + } | |
| 260 | + } | |
| 261 | + } | |
| 262 | + //电商分类 | |
| 263 | + static func requestGetHomePageShopCategoryApi(shop_id:String,resultBlock: @escaping downSlideResultBlock) { | |
| 264 | + let param = NSMutableDictionary() | |
| 265 | + param.setValue(shop_id, forKey: "shop_id") | |
| 266 | + | |
| 267 | + CNLiveNetworking.setAllowRequestDefaultArgument(true) | |
| 268 | + CNLiveNetworking.setupShowDataResult(false) | |
| 269 | + CNLiveNetworking.setupDSRequest(true) | |
| 270 | + let custom_param = NSMutableDictionary() | |
| 271 | + custom_param.setValue(CNLiveMCEnvironmentManager.shared.appId_wjj_b, forKey: "appId") | |
| 272 | + custom_param.setValue(CNLiveMCEnvironmentManager.shared.appId_wjj_b, forKey: "appKey") | |
| 273 | + CNLiveNetworking.setupCustomParam(custom_param as? [String : String]) | |
| 274 | + CNLiveNetworking.requestNetwork(with: .POST, urlString: APPBaseWjjShopUrl+"/Api/Index3/sellerCategory", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in | |
| 275 | + hiddenLoading() | |
| 276 | + if (error == nil) { | |
| 277 | + let resp = result as! NSDictionary | |
| 278 | + if let errCode = resp["code"] as? String{ | |
| 279 | + if errCode == "200" || errCode == "0"{ | |
| 280 | + let dataDic = resp["data"] as! NSDictionary | |
| 281 | + let shopCategoryModel = newDictionaryToModel(dataDic as! [String : Any], CNLiveHomeShopCategoryModel.self) | |
| 282 | + resultBlock(shopCategoryModel,.success) | |
| 283 | + }else{ | |
| 284 | + resultBlock(NSNull(),.failed) | |
| 285 | + } | |
| 286 | + } | |
| 287 | + } | |
| 288 | + resultBlock(NSNull(),.failed) | |
| 289 | + } | |
| 290 | + } | |
| 291 | + | |
| 292 | + static func requestGetHomePageFollow( sid:String,resultBlock: @escaping downSlideResultBlock) { | |
| 293 | + let param = NSMutableDictionary() | |
| 294 | + param.setValue("yszg", forKey: "channelName") | |
| 295 | + | |
| 296 | +// param.setValue("1342671", forKey: "sid") | |
| 297 | + | |
| 298 | + param.setValue(sid, forKey: "sid") | |
| 299 | + CNLiveNetworking.setAllowRequestDefaultArgument(true) | |
| 300 | + CNLiveNetworking.setupShowDataResult(false) | |
| 301 | + let custom_param = NSMutableDictionary() | |
| 302 | + custom_param.setValue(CNLiveMCEnvironmentManager.shared.appId, forKey: "appId") | |
| 303 | + custom_param.setValue(CNLiveMCEnvironmentManager.shared.appKey, forKey: "appKey") | |
| 304 | + CNLiveNetworking.setupCustomParam(custom_param as? [String : String]) | |
| 305 | +// http://cms.cnlive.com/api/recordApi/getRecords?sid=10506285&channelName=yszg | |
| 306 | + CNLiveNetworking.requestNetwork(with: .GET, urlString: APPBaseCMSUrl+"/recordApi/getRecords", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in | |
| 307 | + hiddenLoading() | |
| 308 | + if (error == nil) { | |
| 309 | + let resp = result as! NSDictionary | |
| 310 | + let errorCode = "\(resp["errorCode"] ?? "0")" | |
| 311 | + if (errorCode == "0") { | |
| 312 | + | |
| 313 | + let dataDic = resp["data"] as! Dictionary<String, Any> | |
| 314 | + var resArr = dataDic["list"] as! Array<Any> | |
| 315 | + if resArr.count > 0{ | |
| 316 | + //有在追 | |
| 317 | + let followDic = resArr.first as! Dictionary<String, Any> | |
| 318 | + let dataMdl = newDictionaryToModel(followDic as! [String : Any], CNLiveHomeFollowModel.self) | |
| 319 | + resultBlock(dataMdl,.success) | |
| 320 | + }else{ | |
| 321 | + //没有在追短剧 | |
| 322 | + resultBlock(NSNull(),.failed) | |
| 323 | + } | |
| 324 | + | |
| 325 | + } | |
| 326 | + else{ | |
| 327 | + resultBlock(NSNull(),.failed) | |
| 328 | + } | |
| 329 | + } | |
| 330 | + } | |
| 331 | + } | |
| 332 | + | |
| 333 | + static func requestGetMinePlayHistory( sid:String,page:NSInteger,resultBlock: @escaping downSlideResultBlock) { | |
| 334 | + let param = NSMutableDictionary() | |
| 335 | + param.setValue("yszg", forKey: "channelName") | |
| 336 | + param.setValue("\(page)", forKey: "page") | |
| 337 | + | |
| 338 | +// param.setValue("1342671", forKey: "sid") | |
| 339 | + | |
| 340 | + param.setValue(sid, forKey: "sid") | |
| 341 | + CNLiveNetworking.setAllowRequestDefaultArgument(true) | |
| 342 | + CNLiveNetworking.setupShowDataResult(false) | |
| 343 | + let custom_param = NSMutableDictionary() | |
| 344 | + custom_param.setValue(CNLiveMCEnvironmentManager.shared.appId, forKey: "appId") | |
| 345 | + custom_param.setValue(CNLiveMCEnvironmentManager.shared.appKey, forKey: "appKey") | |
| 346 | + CNLiveNetworking.setupCustomParam(custom_param as? [String : String]) | |
| 347 | +// http://cms.cnlive.com/api/recordApi/getRecords?sid=10506285&channelName=yszg | |
| 348 | + CNLiveNetworking.requestNetwork(with: .GET, urlString: APPBaseCMSUrl+"/recordApi/getRecords", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in | |
| 349 | + hiddenLoading() | |
| 350 | + if (error == nil) { | |
| 351 | + let resp = result as! NSDictionary | |
| 352 | + let errorCode = "\(resp["errorCode"] ?? "0")" | |
| 353 | + if (errorCode == "0") { | |
| 354 | + if resp["data"] is NSNull { | |
| 355 | + resultBlock(NSNull(), .failed) | |
| 356 | + } else { | |
| 357 | + let listModel = dictionaryToModel(resp["data"] as! [String : Any], CNLiveHomeFollowListBaseModel.self,"") as! CNLiveHomeFollowListBaseModel | |
| 358 | + resultBlock(listModel, .success) | |
| 359 | + } | |
| 360 | + } else { | |
| 361 | + showMessage(message: resp["errorMessage"] as! String) | |
| 362 | + resultBlock(NSNull(),.failed) | |
| 363 | + } | |
| 364 | + } else { | |
| 365 | + if CNLiveNetworking.isNetworking() { | |
| 366 | + showMessage(message: "请求失败") | |
| 367 | + resultBlock(NSNull(),.failed) | |
| 368 | + } else { | |
| 369 | + showMessage(message: "似乎与网络断开链接") | |
| 370 | + resultBlock(NSNull(),.noNetwork) | |
| 371 | + } | |
| 372 | + } | |
| 373 | + | |
| 374 | + } | |
| 375 | + } | |
| 376 | + //收藏列表:contentApi/getCollectionList 参数:sid、source=yszg、page、pageSize | |
| 377 | + static func getCollectionListApi(sid:String,page:String,pageSize:String,resultBlock: @escaping downSlideResultBlock) { | |
| 378 | + let param = NSMutableDictionary() | |
| 379 | + param.setValue(sid, forKey: "sid") | |
| 380 | + param.setValue("yszg", forKey: "source") | |
| 381 | + param.setValue(page, forKey: "page") | |
| 382 | + param.setValue(pageSize, forKey: "pageSize") | |
| 383 | + | |
| 384 | + CNLiveNetworking.setAllowRequestDefaultArgument(true) | |
| 385 | + CNLiveNetworking.setupShowDataResult(false) | |
| 386 | + let custom_param = NSMutableDictionary() | |
| 387 | + custom_param.setValue(CNLiveMCEnvironmentManager.shared.appId, forKey: "appId") | |
| 388 | + custom_param.setValue(CNLiveMCEnvironmentManager.shared.appKey, forKey: "appKey") | |
| 389 | + CNLiveNetworking.setupCustomParam(custom_param as? [String : String]) | |
| 390 | + CNLiveNetworking.requestNetwork(with: .GET, urlString: APPBaseCMSUrl+"/contentApi/getCollectionList", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in | |
| 391 | + hiddenLoading() | |
| 392 | + if (error == nil) { | |
| 393 | + let resp = result as! NSDictionary | |
| 394 | + let errorCode = "\(resp["errorCode"] ?? "0")" | |
| 395 | + if (errorCode == "0") { | |
| 396 | + if resp["data"] is NSNull { | |
| 397 | + resultBlock(NSNull(), .failed) | |
| 398 | + } else { | |
| 399 | + let listModel = dictionaryToModel(resp["data"] as! [String : Any], CNLiveCollectionListBaseModel.self,"") as! CNLiveCollectionListBaseModel | |
| 400 | + resultBlock(listModel, .success) | |
| 401 | + } | |
| 402 | + } else { | |
| 403 | + showMessage(message: resp["errorMessage"] as! String) | |
| 404 | + resultBlock(NSNull(),.failed) | |
| 405 | + } | |
| 406 | + }else{ | |
| 407 | + resultBlock(NSNull(),.failed) | |
| 408 | + } | |
| 409 | + } | |
| 410 | + } | |
| 10 | 411 | |
| 11 | -class CNLiveHomePageViewModel:NSObject{ | |
| 12 | 412 | |
| 13 | 413 | /// 获取首页原生页面数据 |
| 14 | 414 | static func requestGetHomePageConfigList( resultBlock: @escaping downSlideResultBlock) { |
| ... | ... | @@ -165,6 +565,8 @@ class CNLiveHomePageViewModel:NSObject{ |
| 165 | 565 | static func getAlbumList(aid:String, page:NSInteger,resultBlock: @escaping downSlideResultBlock) { |
| 166 | 566 | let param = NSMutableDictionary() |
| 167 | 567 | param.setValue(aid, forKey: "aid") |
| 568 | + param.setValue("mc_app", forKey: "app_channel_id") | |
| 569 | + | |
| 168 | 570 | param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "sid") |
| 169 | 571 | param.setValue("\(page)", forKey: "page") |
| 170 | 572 | ... | ... |
metaCode/Classes/Main/HuBiLieHomePage/Controller/CNLiveHomeLanmuController.swift
0 → 100644
| 1 | +// | |
| 2 | +// CNLiveHomeLanmuController.swift | |
| 3 | +// metaCode | |
| 4 | +// | |
| 5 | +// Created by zx on 2025/3/11. | |
| 6 | +// | |
| 7 | + | |
| 8 | +import Foundation | |
| 9 | +import MJRefresh | |
| 10 | +class CNLiveHomeLanmuController:CNLiveBaseViewController, UITableViewDataSource, UITableViewDelegate{ | |
| 11 | + | |
| 12 | + var _slideContentModel : CNLiveDownSlideContentsModel? | |
| 13 | + var slideContentModel : CNLiveDownSlideContentsModel? { | |
| 14 | + get{ | |
| 15 | + _slideContentModel | |
| 16 | + } | |
| 17 | + set{ | |
| 18 | + _slideContentModel = newValue! | |
| 19 | + | |
| 20 | + } | |
| 21 | + } | |
| 22 | + | |
| 23 | + ///数据源 | |
| 24 | + lazy var dataArray: NSMutableArray = { | |
| 25 | + var dataArray = NSMutableArray() | |
| 26 | + return dataArray | |
| 27 | + }() | |
| 28 | + lazy var headerDataArray: NSMutableArray = { | |
| 29 | + var dataArray = NSMutableArray() | |
| 30 | + return dataArray | |
| 31 | + }() | |
| 32 | + | |
| 33 | + let kCNLiveHomeLanmuThreeImgCellIdentifier = "kCNLiveHomeLanmuThreeImgCellIdentifier" | |
| 34 | + | |
| 35 | + lazy var tableView : UITableView = { | |
| 36 | + let tableView = UITableView(frame: .zero, style: .plain) | |
| 37 | + tableView.dataSource = self | |
| 38 | + tableView.delegate = self | |
| 39 | + tableView.separatorStyle = .none | |
| 40 | + tableView.register(CNLiveHomeLanmuThreeImgCell.self, forCellReuseIdentifier: kCNLiveHomeLanmuThreeImgCellIdentifier) | |
| 41 | + tableView.backgroundColor = .white | |
| 42 | + return tableView | |
| 43 | + }() | |
| 44 | + | |
| 45 | + var pageId = "" | |
| 46 | + var currentHeaderBtnIndex = 0 | |
| 47 | + var resultHeaderView:UIView? | |
| 48 | + var footerRefreshView: MJRefreshAutoNormalFooter! | |
| 49 | + var page = 1//当前页数 | |
| 50 | + | |
| 51 | + override func viewDidLoad() { | |
| 52 | + super.viewDidLoad() | |
| 53 | + self.navigationBarHidden = false | |
| 54 | + titleName = self.slideContentModel?.title ?? "" | |
| 55 | + | |
| 56 | + view.addSubview(tableView) | |
| 57 | + tableView.snp.makeConstraints { make in | |
| 58 | + make.left.equalToSuperview() | |
| 59 | + make.top.equalTo(KNavigationHeight) | |
| 60 | + make.bottom.equalToSuperview() | |
| 61 | + make.right.equalToSuperview() | |
| 62 | + } | |
| 63 | + self.addRefreshView() | |
| 64 | + self.setUpResultHeaderView() | |
| 65 | + | |
| 66 | + self.getPageApi(pageID: self.pageId) | |
| 67 | + } | |
| 68 | + func addRefreshView() { | |
| 69 | + tableView.mj_header = MJRefreshNormalHeader.init(refreshingBlock: {[weak self] in | |
| 70 | + guard let self = self else { return } | |
| 71 | + self.page = 1 | |
| 72 | + self.getBlockContents(page: 1) | |
| 73 | + }) | |
| 74 | + tableView.mj_footer = MJRefreshAutoNormalFooter.init(refreshingBlock: {[weak self] in | |
| 75 | + guard let self = self else { return } | |
| 76 | + self.page = self.page + 1 | |
| 77 | + self.getBlockContents(page: self.page) | |
| 78 | + }) | |
| 79 | + } | |
| 80 | + | |
| 81 | + func setUpResultHeaderView(){ | |
| 82 | + resultHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: KSreenWidth, height: 52)) | |
| 83 | + resultHeaderView?.backgroundColor = .white | |
| 84 | + | |
| 85 | + tableView.tableHeaderView = resultHeaderView | |
| 86 | + } | |
| 87 | + | |
| 88 | + // MARK: - BtnAction | |
| 89 | + @objc func headerBtnAction(btn:UIButton){ | |
| 90 | + let index = btn.tag - 1000 | |
| 91 | + self.currentHeaderBtnIndex = index | |
| 92 | + for objBtn in self.resultHeaderView!.subviews{ | |
| 93 | + if let obj = objBtn as? UIButton{ | |
| 94 | + if obj.tag == btn.tag{ | |
| 95 | + //选中 | |
| 96 | + obj.backgroundColor = HexColor("#D3E4FF") | |
| 97 | + obj.setTitleColor(HexColor("#2076FF"), for: .normal) | |
| 98 | + }else{ | |
| 99 | + //未选中 | |
| 100 | + obj.backgroundColor = .clear | |
| 101 | + obj.setTitleColor(HexColor("#919191"), for: .normal) | |
| 102 | + } | |
| 103 | + | |
| 104 | + } | |
| 105 | + } | |
| 106 | + //刷新接口 | |
| 107 | + self.getBlockContents(page: 1) | |
| 108 | + } | |
| 109 | + | |
| 110 | + // MARK: - UITableViewDelegate | |
| 111 | + func numberOfSections(in tableView: UITableView) -> Int { | |
| 112 | + return 1 | |
| 113 | + } | |
| 114 | + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { | |
| 115 | + return self.dataArray.count | |
| 116 | + } | |
| 117 | + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { | |
| 118 | + | |
| 119 | + if let slideModel = self.dataArray[indexPath.row] as? [CNLiveAlbumModel]{ | |
| 120 | + guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveHomeLanmuThreeImgCellIdentifier) as? CNLiveHomeLanmuThreeImgCell | |
| 121 | + else { | |
| 122 | + let cell = CNLiveHomeLanmuThreeImgCell() | |
| 123 | + return cell | |
| 124 | + } | |
| 125 | + cell.slideModel = slideModel | |
| 126 | + return cell | |
| 127 | + } | |
| 128 | + return UITableViewCell() | |
| 129 | + } | |
| 130 | + | |
| 131 | + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { | |
| 132 | + let imgW:CGFloat = (KSreenWidth-60.0)/3.0 | |
| 133 | + let imgH:CGFloat = imgW*140.0/105.0 | |
| 134 | + return imgH+55.0 | |
| 135 | + } | |
| 136 | + | |
| 137 | + deinit { | |
| 138 | + } | |
| 139 | + //MARK: - 网络请求获取区块详情页 | |
| 140 | + func getPageApi(pageID:String) | |
| 141 | + { | |
| 142 | + showLoading(message: "") | |
| 143 | + CNLiveDownSlideViewModel.requestGetPage(pageId: pageID as NSString) {[weak self] result, status in | |
| 144 | + hiddenLoading() | |
| 145 | + guard let self = self else { return } | |
| 146 | + if status == .success{ | |
| 147 | + self.headerDataArray.removeAllObjects() | |
| 148 | + let array = result as! [Any] | |
| 149 | + let newDataArray = NSMutableArray() | |
| 150 | + for (idx,slideModel) in array.enumerated() { | |
| 151 | + if let model = slideModel as? CNLiveDownSlideModel{ | |
| 152 | + | |
| 153 | + newDataArray.addObjects(from: [model]) | |
| 154 | + //创建区块btn | |
| 155 | + let width = 60.0 | |
| 156 | + let height = 32.0 | |
| 157 | + let x = 15.0+CGFloat(idx)*width | |
| 158 | + let y = 10.0 | |
| 159 | + | |
| 160 | + let expandBtn = UIButton.init(type: .custom) | |
| 161 | +// expandBtn.backgroundColor = HexColor("#D3E4FF") | |
| 162 | +// expandBtn.setTitleColor(HexColor("#2076FF"), for: .normal) | |
| 163 | + if idx == self.currentHeaderBtnIndex{ | |
| 164 | + //选中 | |
| 165 | + expandBtn.backgroundColor = HexColor("#D3E4FF") | |
| 166 | + expandBtn.setTitleColor(HexColor("#2076FF"), for: .normal) | |
| 167 | + }else{ | |
| 168 | + //未选中 | |
| 169 | + expandBtn.backgroundColor = .clear | |
| 170 | + expandBtn.setTitleColor(HexColor("#919191"), for: .normal) | |
| 171 | + } | |
| 172 | + | |
| 173 | + expandBtn.setTitle(model.blockName, for: .normal) | |
| 174 | + expandBtn.layer.cornerRadius = 16 | |
| 175 | + expandBtn.clipsToBounds = true | |
| 176 | + expandBtn.titleLabel?.font = BoldFont_13 | |
| 177 | + expandBtn.frame = CGRect(x: x, y: y, width: width, height: height) | |
| 178 | + expandBtn.tag = 1000+idx | |
| 179 | + expandBtn.addTarget(self, action: #selector(headerBtnAction), for: .touchUpInside) | |
| 180 | + resultHeaderView?.addSubview(expandBtn) | |
| 181 | + } | |
| 182 | + } | |
| 183 | + self.headerDataArray.addObjects(from: newDataArray as! [Any]) | |
| 184 | + self.getBlockContents(page: 1) | |
| 185 | + | |
| 186 | + }else if (status == .failed){ | |
| 187 | + // self.NetApiStatus = .apiError | |
| 188 | + }else if (status == .noNetwork){ | |
| 189 | + | |
| 190 | + // self.NetApiStatus = .notNetwork | |
| 191 | + } | |
| 192 | + } | |
| 193 | + // | |
| 194 | + } | |
| 195 | + | |
| 196 | + func chunkArray<T>(array: [T], chunkSize: Int) -> [[T]] { | |
| 197 | + var result = [[T]]() | |
| 198 | + var currentIndex = 0 | |
| 199 | + | |
| 200 | + while currentIndex < array.count { | |
| 201 | + let endIndex = min(currentIndex + chunkSize, array.count) | |
| 202 | + let chunk = Array(array[currentIndex..<endIndex]) | |
| 203 | + result.append(chunk) | |
| 204 | + currentIndex += chunkSize | |
| 205 | + } | |
| 206 | + | |
| 207 | + return result | |
| 208 | + } | |
| 209 | + | |
| 210 | + | |
| 211 | + // MARK: - 获取内容 | |
| 212 | + func getBlockContents(page:NSInteger){ | |
| 213 | + showLoading(message: "") | |
| 214 | + if let slideModel = self.headerDataArray[self.currentHeaderBtnIndex] as? CNLiveDownSlideModel{ | |
| 215 | + let blockId = slideModel.blockId | |
| 216 | + print("blockId:\(blockId)") | |
| 217 | + CNLiveHomePageViewModel.getBlockContents(blockId: blockId, page: page) {[weak self] result, status in | |
| 218 | + hiddenLoading() | |
| 219 | + guard let self = self else { return } | |
| 220 | + if status == .success{ | |
| 221 | + let albumBaseModel = result as! CNLiveAlbumBaseModel | |
| 222 | + if self.page > 1 && albumBaseModel.list.count > 0 { | |
| 223 | + var tempArr = Array<Any>() | |
| 224 | + for obj in self.dataArray { | |
| 225 | + if let objArr = obj as? Array<Any>{ | |
| 226 | + for tempObj in objArr{ | |
| 227 | + if let tempMdl = tempObj as? CNLiveAlbumModel{ | |
| 228 | + tempArr.append(tempMdl) | |
| 229 | + } | |
| 230 | + } | |
| 231 | + }else{ | |
| 232 | + if let tempMdl = obj as? CNLiveAlbumModel{ | |
| 233 | + tempArr.append(tempMdl) | |
| 234 | + } | |
| 235 | + } | |
| 236 | + } | |
| 237 | + | |
| 238 | + self.dataArray = NSMutableArray(array: tempArr) | |
| 239 | + self.dataArray.addObjects(from: albumBaseModel.list) | |
| 240 | + } | |
| 241 | + if self.page == 1 { | |
| 242 | + self.dataArray.removeAllObjects() | |
| 243 | + self.dataArray.addObjects(from: albumBaseModel.list) | |
| 244 | + if self.dataArray.count > 0 && self.tableView.mj_header == nil && self.tableView.mj_footer == nil { | |
| 245 | + self.addRefreshView() | |
| 246 | + } | |
| 247 | + } | |
| 248 | + | |
| 249 | + self.tableView.mj_header?.endRefreshing() | |
| 250 | + | |
| 251 | + //分成3个一组 | |
| 252 | + let chunkedArray = self.chunkArray(array: self.dataArray as! Array<Any>, chunkSize: 3) | |
| 253 | + self.dataArray = NSMutableArray(array: chunkedArray) | |
| 254 | + self.tableView.reloadData() | |
| 255 | + if albumBaseModel.hasNextPage{ | |
| 256 | + self.tableView.mj_footer?.endRefreshing() | |
| 257 | + }else{ | |
| 258 | + self.tableView.mj_footer?.endRefreshingWithNoMoreData() | |
| 259 | + } | |
| 260 | + | |
| 261 | + }else if (status == .noNetwork) { | |
| 262 | +// self.network_type = .noNetwork | |
| 263 | +// self.tableView.reloadEmptyDataSet() | |
| 264 | + } else { | |
| 265 | +// self.network_type = .failed | |
| 266 | +// self.tableView.reloadEmptyDataSet() | |
| 267 | + } | |
| 268 | + } | |
| 269 | + | |
| 270 | + }else{ | |
| 271 | + | |
| 272 | + } | |
| 273 | + } | |
| 274 | + | |
| 275 | +} | ... | ... |
metaCode/Classes/Main/HuBiLieHomePage/Controller/CNLiveHomeMoreController.swift
0 → 100644
| 1 | +// | |
| 2 | +// CNLiveHomeMoreController.swift | |
| 3 | +// metaCode | |
| 4 | +// | |
| 5 | +// Created by zx on 2025/3/14. | |
| 6 | +// | |
| 7 | + | |
| 8 | +import Foundation | |
| 9 | +import MJRefresh | |
| 10 | +class CNLiveHomeMoreController:CNLiveBaseViewController, UITableViewDataSource, UITableViewDelegate{ | |
| 11 | + | |
| 12 | + //我的播放记录 | |
| 13 | + var _followModels : [CNLiveHomeFollowModel]? | |
| 14 | + var followModels : [CNLiveHomeFollowModel]? { | |
| 15 | + get{ | |
| 16 | + _followModels | |
| 17 | + } | |
| 18 | + set{ | |
| 19 | + _followModels = newValue! | |
| 20 | + } | |
| 21 | + } | |
| 22 | + | |
| 23 | + //1行2横图 1行3竖图 | |
| 24 | + var _slideModel : CNLiveDownSlideModel? | |
| 25 | + var slideModel : CNLiveDownSlideModel? { | |
| 26 | + get{ | |
| 27 | + _slideModel | |
| 28 | + } | |
| 29 | + set{ | |
| 30 | + _slideModel = newValue! | |
| 31 | + } | |
| 32 | + } | |
| 33 | + | |
| 34 | + ///数据源 | |
| 35 | + lazy var dataArray: NSMutableArray = { | |
| 36 | + var dataArray = NSMutableArray() | |
| 37 | + return dataArray | |
| 38 | + }() | |
| 39 | + | |
| 40 | + let kCNLiveHomeLanmuThreeImgCellIdentifier = "kCNLiveHomeLanmuThreeImgCellIdentifier" | |
| 41 | + let kCNLiveHomeTwoHengTuCellIdentifier = "kCNLiveHomeTwoHengTuCellIdentifier" | |
| 42 | + | |
| 43 | + lazy var tableView : UITableView = { | |
| 44 | + let tableView = UITableView(frame: .zero, style: .plain) | |
| 45 | + tableView.dataSource = self | |
| 46 | + tableView.delegate = self | |
| 47 | + tableView.separatorStyle = .none | |
| 48 | + tableView.register(CNLiveHomeLanmuThreeImgCell.self, forCellReuseIdentifier: kCNLiveHomeLanmuThreeImgCellIdentifier) | |
| 49 | + tableView.register(CNLiveHomeTwoHengTuCell.self, forCellReuseIdentifier: kCNLiveHomeTwoHengTuCellIdentifier) | |
| 50 | + tableView.backgroundColor = .white | |
| 51 | + return tableView | |
| 52 | + }() | |
| 53 | + | |
| 54 | + var footerRefreshView: MJRefreshAutoNormalFooter! | |
| 55 | + var page = 1//当前页数 | |
| 56 | + | |
| 57 | + override func viewDidLoad() { | |
| 58 | + super.viewDidLoad() | |
| 59 | + self.navigationBarHidden = false | |
| 60 | + | |
| 61 | + view.addSubview(tableView) | |
| 62 | + tableView.snp.makeConstraints { make in | |
| 63 | + make.left.equalToSuperview() | |
| 64 | + make.top.equalTo(KNavigationHeight) | |
| 65 | + make.bottom.equalToSuperview() | |
| 66 | + make.right.equalToSuperview() | |
| 67 | + } | |
| 68 | + self.addRefreshView() | |
| 69 | + self.page = 1 | |
| 70 | + if self.slideModel != nil{ | |
| 71 | + titleName = self.slideModel?.blockName ?? "" | |
| 72 | + self.getBlockContents(page: self.page) | |
| 73 | + }else if self.followModels != nil{ | |
| 74 | + self.getHomePageFollowApi(sid: UserInfoManager.shared.userInfo.uid) | |
| 75 | + titleName = "播放记录" | |
| 76 | + }else{ | |
| 77 | + //我的收藏 | |
| 78 | + titleName = "我的收藏" | |
| 79 | + self.getCollectionListApi() | |
| 80 | + } | |
| 81 | + } | |
| 82 | + func addRefreshView() { | |
| 83 | + tableView.mj_header = MJRefreshNormalHeader.init(refreshingBlock: {[weak self] in | |
| 84 | + guard let self = self else { return } | |
| 85 | + self.page = 1 | |
| 86 | + if self.slideModel != nil{ | |
| 87 | + self.getBlockContents(page: 1) | |
| 88 | + }else if self.followModels != nil{ | |
| 89 | + self.getHomePageFollowApi(sid: UserInfoManager.shared.userInfo.uid) | |
| 90 | + }else{ | |
| 91 | + self.getCollectionListApi() | |
| 92 | + } | |
| 93 | + }) | |
| 94 | + tableView.mj_footer = MJRefreshAutoNormalFooter.init(refreshingBlock: {[weak self] in | |
| 95 | + guard let self = self else { return } | |
| 96 | + self.page = self.page + 1 | |
| 97 | + if self.slideModel != nil{ | |
| 98 | + self.getBlockContents(page: self.page) | |
| 99 | + }else if self.followModels != nil{ | |
| 100 | + self.getHomePageFollowApi(sid: UserInfoManager.shared.userInfo.uid) | |
| 101 | + }else{ | |
| 102 | + self.getCollectionListApi() | |
| 103 | + } | |
| 104 | + }) | |
| 105 | + } | |
| 106 | + | |
| 107 | + // MARK: - UITableViewDelegate | |
| 108 | + func numberOfSections(in tableView: UITableView) -> Int { | |
| 109 | + return 1 | |
| 110 | + } | |
| 111 | + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { | |
| 112 | + return self.dataArray.count | |
| 113 | + } | |
| 114 | + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { | |
| 115 | + | |
| 116 | + if let slideModel = self.dataArray[indexPath.row] as? [CNLiveAlbumModel]{ | |
| 117 | + if self.slideModel?.type == SlideModelTypeTVOneBigTwoSmall2{ | |
| 118 | + //一行2个横图 | |
| 119 | + guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveHomeTwoHengTuCellIdentifier) as? CNLiveHomeTwoHengTuCell | |
| 120 | + else { | |
| 121 | + let cell = CNLiveHomeTwoHengTuCell() | |
| 122 | + return cell | |
| 123 | + } | |
| 124 | + cell.slideModel = slideModel | |
| 125 | + return cell | |
| 126 | + | |
| 127 | + }else if self.slideModel?.type == SlideModelTypeTwoDuanJu5{ | |
| 128 | + //一行3个竖图 | |
| 129 | + guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveHomeLanmuThreeImgCellIdentifier) as? CNLiveHomeLanmuThreeImgCell | |
| 130 | + else { | |
| 131 | + let cell = CNLiveHomeLanmuThreeImgCell() | |
| 132 | + return cell | |
| 133 | + } | |
| 134 | + cell.slideModel = slideModel | |
| 135 | + return cell | |
| 136 | + }else{ | |
| 137 | + // | |
| 138 | + } | |
| 139 | + | |
| 140 | + }else if let followModel = self.dataArray[indexPath.row] as? [CNLiveHomeFollowModel]{ | |
| 141 | + //一行2个横图 | |
| 142 | + guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveHomeTwoHengTuCellIdentifier) as? CNLiveHomeTwoHengTuCell | |
| 143 | + else { | |
| 144 | + let cell = CNLiveHomeTwoHengTuCell() | |
| 145 | + return cell | |
| 146 | + } | |
| 147 | + cell.followModel = followModel | |
| 148 | + return cell | |
| 149 | + }else if let collectionModel = self.dataArray[indexPath.row] as? [CNLiveCollectionListModel]{ | |
| 150 | + //一行2个横图 | |
| 151 | + guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveHomeTwoHengTuCellIdentifier) as? CNLiveHomeTwoHengTuCell | |
| 152 | + else { | |
| 153 | + let cell = CNLiveHomeTwoHengTuCell() | |
| 154 | + return cell | |
| 155 | + } | |
| 156 | + cell.collectionModel = collectionModel | |
| 157 | + return cell | |
| 158 | + } | |
| 159 | + return UITableViewCell() | |
| 160 | + } | |
| 161 | + | |
| 162 | + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { | |
| 163 | + if let slideModel = self.dataArray[indexPath.row] as? [CNLiveAlbumModel]{ | |
| 164 | + if self.slideModel?.type == SlideModelTypeTVOneBigTwoSmall2{ | |
| 165 | + //一行2个横图 | |
| 166 | + let imgW:CGFloat = (KSreenWidth-45.0)/2.0 | |
| 167 | + let imgH:CGFloat = imgW*93.0/165.0 | |
| 168 | + return imgH+76.0 | |
| 169 | + }else if self.slideModel?.type == SlideModelTypeTwoDuanJu5{ | |
| 170 | + //一行3个竖图 | |
| 171 | + let imgW:CGFloat = (KSreenWidth-60.0)/3.0 | |
| 172 | + let imgH:CGFloat = imgW*140.0/105.0 | |
| 173 | + return imgH+55.0 | |
| 174 | + }else{ | |
| 175 | + } | |
| 176 | + }else if let followModel = self.dataArray[indexPath.row] as? [CNLiveHomeFollowModel]{ | |
| 177 | + //一行2个横图 | |
| 178 | + let imgW:CGFloat = (KSreenWidth-45.0)/2.0 | |
| 179 | + let imgH:CGFloat = imgW*93.0/165.0 | |
| 180 | + return imgH+76.0 | |
| 181 | + }else if let followModel = self.dataArray[indexPath.row] as? [CNLiveCollectionListModel]{ | |
| 182 | + //一行2个横图 | |
| 183 | + let imgW:CGFloat = (KSreenWidth-45.0)/2.0 | |
| 184 | + let imgH:CGFloat = imgW*93.0/165.0 | |
| 185 | + return imgH+76.0 | |
| 186 | + } | |
| 187 | + return 60 | |
| 188 | + } | |
| 189 | + | |
| 190 | + deinit { | |
| 191 | + } | |
| 192 | + | |
| 193 | + func chunkArray<T>(array: [T], chunkSize: Int) -> [[T]] { | |
| 194 | + var result = [[T]]() | |
| 195 | + var currentIndex = 0 | |
| 196 | + | |
| 197 | + while currentIndex < array.count { | |
| 198 | + let endIndex = min(currentIndex + chunkSize, array.count) | |
| 199 | + let chunk = Array(array[currentIndex..<endIndex]) | |
| 200 | + result.append(chunk) | |
| 201 | + currentIndex += chunkSize | |
| 202 | + } | |
| 203 | + | |
| 204 | + return result | |
| 205 | + } | |
| 206 | + | |
| 207 | + // MARK: - 获取内容 | |
| 208 | + //我的-播放记录 | |
| 209 | + func getHomePageFollowApi(sid:String){ | |
| 210 | + CNLiveHomePageViewModel.requestGetMinePlayHistory(sid: sid, page: self.page){[weak self] result, status in | |
| 211 | + guard let self = self else { return } | |
| 212 | + hiddenLoading() | |
| 213 | + if status == .success{ | |
| 214 | + let albumBaseModel = result as! CNLiveHomeFollowListBaseModel | |
| 215 | + | |
| 216 | + if self.page > 1 && albumBaseModel.list.count > 0 { | |
| 217 | + var tempArr = Array<Any>() | |
| 218 | + for obj in self.dataArray { | |
| 219 | + if let objArr = obj as? Array<Any>{ | |
| 220 | + for tempObj in objArr{ | |
| 221 | + if let tempMdl = tempObj as? CNLiveHomeFollowModel{ | |
| 222 | + tempArr.append(tempMdl) | |
| 223 | + } | |
| 224 | + } | |
| 225 | + }else{ | |
| 226 | + if let tempMdl = obj as? CNLiveHomeFollowModel{ | |
| 227 | + tempArr.append(tempMdl) | |
| 228 | + } | |
| 229 | + } | |
| 230 | + } | |
| 231 | + | |
| 232 | + self.dataArray = NSMutableArray(array: tempArr) | |
| 233 | + self.dataArray.addObjects(from: albumBaseModel.list) | |
| 234 | + } | |
| 235 | + if self.page == 1 { | |
| 236 | + self.dataArray.removeAllObjects() | |
| 237 | + self.dataArray.addObjects(from: albumBaseModel.list) | |
| 238 | + if self.dataArray.count > 0 && self.tableView.mj_header == nil && self.tableView.mj_footer == nil { | |
| 239 | + self.addRefreshView() | |
| 240 | + } | |
| 241 | + } | |
| 242 | + | |
| 243 | + self.tableView.mj_header?.endRefreshing() | |
| 244 | + | |
| 245 | + //分成2个一组 | |
| 246 | + let chunkedArray = self.chunkArray(array: self.dataArray as! Array<Any>, chunkSize: 2) | |
| 247 | + self.dataArray = NSMutableArray(array: chunkedArray) | |
| 248 | + self.tableView.reloadData() | |
| 249 | + if albumBaseModel.hasNextPage{ | |
| 250 | + self.tableView.mj_footer?.endRefreshing() | |
| 251 | + }else{ | |
| 252 | + self.tableView.mj_footer?.endRefreshingWithNoMoreData() | |
| 253 | + } | |
| 254 | + | |
| 255 | + }else{ | |
| 256 | + //没有 | |
| 257 | + } | |
| 258 | + } | |
| 259 | + } | |
| 260 | + | |
| 261 | + //我的-收藏记录 | |
| 262 | + func getCollectionListApi(){ | |
| 263 | + CNLiveHomePageViewModel.getCollectionListApi(sid: UserInfoManager.shared.userInfo.uid, page: "\(self.page)", pageSize: "10") {[weak self] result, status in | |
| 264 | + guard let self = self else { return } | |
| 265 | + hiddenLoading()//UserInfoManager.shared.userInfo.uid //"10506286" | |
| 266 | + if status == .success{ | |
| 267 | + let albumBaseModel = result as! CNLiveCollectionListBaseModel | |
| 268 | + | |
| 269 | + if self.page > 1 && albumBaseModel.list.count > 0 { | |
| 270 | + var tempArr = Array<Any>() | |
| 271 | + for obj in self.dataArray { | |
| 272 | + if let objArr = obj as? Array<Any>{ | |
| 273 | + for tempObj in objArr{ | |
| 274 | + if let tempMdl = tempObj as? CNLiveCollectionListModel{ | |
| 275 | + tempArr.append(tempMdl) | |
| 276 | + } | |
| 277 | + } | |
| 278 | + }else{ | |
| 279 | + if let tempMdl = obj as? CNLiveCollectionListModel{ | |
| 280 | + tempArr.append(tempMdl) | |
| 281 | + } | |
| 282 | + } | |
| 283 | + } | |
| 284 | + | |
| 285 | + self.dataArray = NSMutableArray(array: tempArr) | |
| 286 | + self.dataArray.addObjects(from: albumBaseModel.list) | |
| 287 | + } | |
| 288 | + if self.page == 1 { | |
| 289 | + self.dataArray.removeAllObjects() | |
| 290 | + self.dataArray.addObjects(from: albumBaseModel.list) | |
| 291 | + if self.dataArray.count > 0 && self.tableView.mj_header == nil && self.tableView.mj_footer == nil { | |
| 292 | + self.addRefreshView() | |
| 293 | + } | |
| 294 | + } | |
| 295 | + | |
| 296 | + self.tableView.mj_header?.endRefreshing() | |
| 297 | + | |
| 298 | + //分成2个一组 | |
| 299 | + let chunkedArray = self.chunkArray(array: self.dataArray as! Array<Any>, chunkSize: 2) | |
| 300 | + self.dataArray = NSMutableArray(array: chunkedArray) | |
| 301 | + self.tableView.reloadData() | |
| 302 | + if albumBaseModel.hasNextPage{ | |
| 303 | + self.tableView.mj_footer?.endRefreshing() | |
| 304 | + }else{ | |
| 305 | + self.tableView.mj_footer?.endRefreshingWithNoMoreData() | |
| 306 | + } | |
| 307 | + | |
| 308 | + }else{ | |
| 309 | + //没有 | |
| 310 | + } | |
| 311 | + } | |
| 312 | + } | |
| 313 | + | |
| 314 | + func getBlockContents(page:NSInteger){ | |
| 315 | + showLoading(message: "") | |
| 316 | + if let blockId = self.slideModel?.blockId{ | |
| 317 | + print("blockId:\(blockId)") | |
| 318 | + CNLiveHomePageViewModel.getBlockContents(blockId: blockId, page: page) {[weak self] result, status in | |
| 319 | + hiddenLoading() | |
| 320 | + guard let self = self else { return } | |
| 321 | + if status == .success{ | |
| 322 | + let albumBaseModel = result as! CNLiveAlbumBaseModel | |
| 323 | + if self.page > 1 && albumBaseModel.list.count > 0 { | |
| 324 | + var tempArr = Array<Any>() | |
| 325 | + for obj in self.dataArray { | |
| 326 | + if let objArr = obj as? Array<Any>{ | |
| 327 | + for tempObj in objArr{ | |
| 328 | + if let tempMdl = tempObj as? CNLiveAlbumModel{ | |
| 329 | + tempArr.append(tempMdl) | |
| 330 | + } | |
| 331 | + } | |
| 332 | + }else{ | |
| 333 | + if let tempMdl = obj as? CNLiveAlbumModel{ | |
| 334 | + tempArr.append(tempMdl) | |
| 335 | + } | |
| 336 | + } | |
| 337 | + } | |
| 338 | + | |
| 339 | + self.dataArray = NSMutableArray(array: tempArr) | |
| 340 | + self.dataArray.addObjects(from: albumBaseModel.list) | |
| 341 | + } | |
| 342 | + if self.page == 1 { | |
| 343 | + self.dataArray.removeAllObjects() | |
| 344 | + self.dataArray.addObjects(from: albumBaseModel.list) | |
| 345 | + if self.dataArray.count > 0 && self.tableView.mj_header == nil && self.tableView.mj_footer == nil { | |
| 346 | + self.addRefreshView() | |
| 347 | + } | |
| 348 | + } | |
| 349 | + | |
| 350 | + self.tableView.mj_header?.endRefreshing() | |
| 351 | + | |
| 352 | + //分成3个一组 | |
| 353 | + let chunkedArray = self.chunkArray(array: self.dataArray as! Array<Any>, chunkSize: 3) | |
| 354 | + self.dataArray = NSMutableArray(array: chunkedArray) | |
| 355 | + self.tableView.reloadData() | |
| 356 | + if albumBaseModel.hasNextPage{ | |
| 357 | + self.tableView.mj_footer?.endRefreshing() | |
| 358 | + }else{ | |
| 359 | + self.tableView.mj_footer?.endRefreshingWithNoMoreData() | |
| 360 | + } | |
| 361 | + | |
| 362 | + }else if (status == .noNetwork) { | |
| 363 | +// self.network_type = .noNetwork | |
| 364 | +// self.tableView.reloadEmptyDataSet() | |
| 365 | + } else { | |
| 366 | +// self.network_type = .failed | |
| 367 | +// self.tableView.reloadEmptyDataSet() | |
| 368 | + } | |
| 369 | + } | |
| 370 | + | |
| 371 | + } | |
| 372 | + | |
| 373 | + } | |
| 374 | + | |
| 375 | +} | ... | ... |
metaCode/Classes/Main/HuBiLieHomePage/Controller/CNLiveHomeSearchController.swift
0 → 100644
| 1 | +// | |
| 2 | +// CNLiveHomeSearchController.swift | |
| 3 | +// metaCode | |
| 4 | +// | |
| 5 | +// Created by zx on 2025/3/7. | |
| 6 | +// | |
| 7 | +// | |
| 8 | +import Foundation | |
| 9 | +import QMUIKit | |
| 10 | +import MJRefresh | |
| 11 | + | |
| 12 | +class CNLiveHomeSearchController:CNLiveBaseViewController,UISearchBarDelegate, UITableViewDataSource, UITableViewDelegate{ | |
| 13 | + | |
| 14 | + let CNLiveHomeSearchHistoryKey = "CNLiveHomeSearchHistoryKey" | |
| 15 | + lazy var searBarView :QMUISearchBar = { | |
| 16 | + let iconImgView = QMUISearchBar(frame: CGRect(x: 15, y: KStatusBarHeight, width: KSreenWidth-50-15, height: 32)) | |
| 17 | + iconImgView.backgroundColor = .white//.clear | |
| 18 | + iconImgView.searchTextField.backgroundColor = .white | |
| 19 | + iconImgView.searchTextField.clearButtonMode = .whileEditing | |
| 20 | + iconImgView.searchTextField.font = Font_13 | |
| 21 | + iconImgView.searchTextField.textColor = HexColor("#333333") | |
| 22 | + iconImgView.clipsToBounds = true | |
| 23 | + iconImgView.layer.cornerRadius = 16 | |
| 24 | + iconImgView.backgroundImage = UIImage(named: "home_searchBg") | |
| 25 | + iconImgView.scopeBarBackgroundImage = UIImage(named: "home_searchBg") | |
| 26 | + iconImgView.contentMode = .scaleAspectFill | |
| 27 | + iconImgView.backgroundColor = .clear | |
| 28 | + iconImgView.searchTextField.backgroundColor = .clear | |
| 29 | + iconImgView.inputView?.backgroundColor = .clear | |
| 30 | + iconImgView.delegate = self | |
| 31 | + return iconImgView | |
| 32 | + }() | |
| 33 | + lazy var searchBgImgView :UIImageView = { | |
| 34 | + let iconImgView = UIImageView() | |
| 35 | + iconImgView.image = UIImage(named: "home_searchBg") | |
| 36 | + iconImgView.contentMode = .scaleAspectFill | |
| 37 | + return iconImgView | |
| 38 | + }() | |
| 39 | + | |
| 40 | + lazy var cancelBtn: QMUIButton = { | |
| 41 | + let playBtn = QMUIButton.init(type: .custom) | |
| 42 | + playBtn.setTitle("取消", for: .normal) | |
| 43 | + playBtn.setTitleColor(HexColor("#999999"), for: .normal) | |
| 44 | + playBtn.titleLabel?.font = Font_15 | |
| 45 | + playBtn.addTarget(self, action: #selector(cancelBtnAction), for: .touchUpInside) | |
| 46 | + return playBtn | |
| 47 | + }() | |
| 48 | + ///数据源 | |
| 49 | + lazy var dataArray: NSMutableArray = { | |
| 50 | + var dataArray = NSMutableArray() | |
| 51 | + return dataArray | |
| 52 | + }() | |
| 53 | + let kCNLiveHomeSearchHotCellIdentifier = "kCNLiveHomeSearchHotCellIdentifier" | |
| 54 | + let kCNLiveHomeSearchHistoryCellIdentifier = "kCNLiveHomeSearchHistoryCellIdentifier" | |
| 55 | + lazy var tableView : UITableView = { | |
| 56 | + let tableView = UITableView(frame: .zero, style: .plain) | |
| 57 | + tableView.dataSource = self | |
| 58 | + tableView.delegate = self | |
| 59 | + tableView.separatorStyle = .none | |
| 60 | + tableView.register(CNLiveHomeSearchHistoryCell.self, forCellReuseIdentifier: kCNLiveHomeSearchHistoryCellIdentifier) | |
| 61 | + tableView.register(CNLiveHomeSearchHotCell.self, forCellReuseIdentifier: kCNLiveHomeSearchHotCellIdentifier) | |
| 62 | + | |
| 63 | + tableView.backgroundColor = .white | |
| 64 | + return tableView | |
| 65 | + }() | |
| 66 | + | |
| 67 | + var searchText = ""//搜索内容 | |
| 68 | + var hisArr = [String]()//搜索本地历史 | |
| 69 | + var page = 1//当前页数 | |
| 70 | + var historyHeight:CGFloat = 176//默认高度 | |
| 71 | + | |
| 72 | + // MARK: - 搜索结果 | |
| 73 | + //搜索结果数组 | |
| 74 | + lazy var resultListArray: NSMutableArray = { | |
| 75 | + var dataArray = NSMutableArray() | |
| 76 | + return dataArray | |
| 77 | + }() | |
| 78 | + let kCNLiveHomeSearchResultJuJiCellIdentifier = "kCNLiveHomeSearchResultJuJiCellIdentifier" | |
| 79 | +// let kCNLiveHomeSearchResultDuanJuCellIdentifier = "kCNLiveHomeSearchResultDuanJuCellIdentifier" | |
| 80 | + lazy var resultTableView : UITableView = { | |
| 81 | + let tableView = UITableView(frame: .zero, style: .plain) | |
| 82 | + tableView.dataSource = self | |
| 83 | + tableView.delegate = self | |
| 84 | + tableView.separatorStyle = .none | |
| 85 | + tableView.register(CNLiveHomeSearchResultJuJiCell.self, forCellReuseIdentifier: kCNLiveHomeSearchResultJuJiCellIdentifier) | |
| 86 | +// tableView.register(CNLiveHomeSearchResultDuanJuCell.self, forCellReuseIdentifier: kCNLiveHomeSearchResultDuanJuCellIdentifier) | |
| 87 | + | |
| 88 | + tableView.backgroundColor = .white | |
| 89 | + return tableView | |
| 90 | + }() | |
| 91 | + var resultHeaderView:UIView? | |
| 92 | + | |
| 93 | + var footerRefreshView: MJRefreshAutoNormalFooter! | |
| 94 | + var isJujiModel:Bool = false//搜索结果 默认单集 | |
| 95 | + | |
| 96 | + override func viewDidLoad() { | |
| 97 | + super.viewDidLoad() | |
| 98 | + self.view.backgroundColor = .white | |
| 99 | + | |
| 100 | + view.addSubview(searBarView) | |
| 101 | + searBarView.snp.makeConstraints { make in | |
| 102 | + make.left.equalToSuperview().offset(15) | |
| 103 | + make.top.equalToSuperview().offset(KStatusBarHeight) | |
| 104 | + make.width.equalTo((KSreenWidth-50-15 > 310) ? 310 : KSreenWidth-50-15 ) | |
| 105 | + make.height.equalTo(32) | |
| 106 | + } | |
| 107 | +// view.addSubview(searchBgImgView) | |
| 108 | +// searchBgImgView.snp.makeConstraints { make in | |
| 109 | +// make.left.equalToSuperview().offset(15) | |
| 110 | +// make.top.equalToSuperview().offset(KStatusBarHeight) | |
| 111 | +// make.width.equalTo(KSreenWidth-50-15) | |
| 112 | +// make.height.equalTo(32) | |
| 113 | +// } | |
| 114 | + | |
| 115 | + view.addSubview(cancelBtn) | |
| 116 | + cancelBtn.snp.makeConstraints { make in | |
| 117 | + make.left.equalTo(self.searBarView.snp.right) | |
| 118 | + make.top.equalTo(self.searBarView.snp.top) | |
| 119 | + make.bottom.equalTo(self.searBarView.snp.bottom) | |
| 120 | + make.right.equalToSuperview() | |
| 121 | + } | |
| 122 | + view.addSubview(tableView) | |
| 123 | + tableView.snp.makeConstraints { make in | |
| 124 | + make.left.equalToSuperview() | |
| 125 | + make.top.equalTo(self.searBarView.snp.bottom) | |
| 126 | + make.bottom.equalToSuperview() | |
| 127 | + make.right.equalToSuperview() | |
| 128 | + } | |
| 129 | + self.recordSearchHistory() | |
| 130 | + self.getSearchHotListApi() | |
| 131 | + | |
| 132 | + view.addSubview(resultTableView) | |
| 133 | + resultTableView.isHidden = true | |
| 134 | + resultTableView.snp.makeConstraints { make in | |
| 135 | + make.left.equalToSuperview() | |
| 136 | + make.top.equalTo(self.searBarView.snp.bottom) | |
| 137 | + make.bottom.equalToSuperview() | |
| 138 | + make.right.equalToSuperview() | |
| 139 | + } | |
| 140 | + self.setUpResultHeaderView() | |
| 141 | + self.addRefreshView() | |
| 142 | + } | |
| 143 | + | |
| 144 | + lazy var headerJuJiBtn: UIButton = { | |
| 145 | + let expandBtn = UIButton.init(type: .custom) | |
| 146 | + expandBtn.backgroundColor = .clear | |
| 147 | + expandBtn.setTitleColor(HexColor("#919191"), for: .normal) | |
| 148 | + | |
| 149 | + expandBtn.titleLabel?.font = BoldFont_13 | |
| 150 | + expandBtn.setTitle("剧集", for: .normal) | |
| 151 | + expandBtn.layer.cornerRadius = 16 | |
| 152 | + expandBtn.clipsToBounds = true | |
| 153 | + expandBtn.frame = CGRect(x: 0, y: 0, width: 60, height: 32) | |
| 154 | + expandBtn.addTarget(self, action: #selector(headerJuJiBtnAction), for: .touchUpInside) | |
| 155 | + return expandBtn | |
| 156 | + }() | |
| 157 | + lazy var headerDuanJuBtn: UIButton = { | |
| 158 | + let expandBtn = UIButton.init(type: .custom) | |
| 159 | + expandBtn.backgroundColor = HexColor("#D3E4FF") | |
| 160 | + expandBtn.setTitleColor(HexColor("#2076FF"), for: .normal) | |
| 161 | + | |
| 162 | + expandBtn.setTitle("视频", for: .normal) | |
| 163 | + expandBtn.layer.cornerRadius = 16 | |
| 164 | + expandBtn.clipsToBounds = true | |
| 165 | + expandBtn.titleLabel?.font = BoldFont_13 | |
| 166 | + expandBtn.frame = CGRect(x: 0, y: 0, width: 60, height: 32) | |
| 167 | + expandBtn.addTarget(self, action: #selector(headerDuanJuBtnAction), for: .touchUpInside) | |
| 168 | + return expandBtn | |
| 169 | + }() | |
| 170 | + | |
| 171 | + func addRefreshView() { | |
| 172 | + resultTableView.mj_header = MJRefreshNormalHeader.init(refreshingBlock: {[weak self] in | |
| 173 | + guard let self = self else { return } | |
| 174 | + self.page = 1 | |
| 175 | + self.getSearchResultWithSearchText(searchText: self.searchText, modelId: self.isJujiModel ? "album" : "1", isFirst: true, page: "1") | |
| 176 | + }) | |
| 177 | + resultTableView.mj_footer = MJRefreshAutoNormalFooter.init(refreshingBlock: {[weak self] in | |
| 178 | + guard let self = self else { return } | |
| 179 | + //"album"剧集 1单集 | |
| 180 | + self.page = self.page + 1 | |
| 181 | + self.getSearchResultWithSearchText(searchText: searchText, modelId: self.isJujiModel ? "album" : "1", isFirst: false, page: "\(self.page)") | |
| 182 | + }) | |
| 183 | + | |
| 184 | + } | |
| 185 | + | |
| 186 | + func setUpResultHeaderView(){ | |
| 187 | + resultHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: KSreenWidth, height: 60)) | |
| 188 | + resultHeaderView?.backgroundColor = .white | |
| 189 | + | |
| 190 | + resultHeaderView!.addSubview(headerDuanJuBtn) | |
| 191 | + headerDuanJuBtn.snp.makeConstraints { make in | |
| 192 | + make.left.equalTo(15) | |
| 193 | + make.width.equalTo(60) | |
| 194 | + make.centerY.equalToSuperview() | |
| 195 | + make.height.equalTo(32) | |
| 196 | + } | |
| 197 | + resultHeaderView!.addSubview(headerJuJiBtn) | |
| 198 | + headerJuJiBtn.snp.makeConstraints { make in | |
| 199 | + make.left.equalTo(self.headerDuanJuBtn.snp.right) | |
| 200 | + make.width.equalTo(60) | |
| 201 | + make.centerY.equalToSuperview() | |
| 202 | + make.height.equalTo(32) | |
| 203 | + } | |
| 204 | + resultTableView.tableHeaderView = resultHeaderView | |
| 205 | + self.isJujiModel = false | |
| 206 | + } | |
| 207 | + | |
| 208 | + func changeResult(){ | |
| 209 | + self.page = 1 | |
| 210 | + self.getSearchResultWithSearchText(searchText: self.searchText, modelId: self.isJujiModel ? "album" : "1", isFirst: true, page: "1") | |
| 211 | + } | |
| 212 | + // MARK: - BtnAction | |
| 213 | + @objc func headerDuanJuBtnAction(){ | |
| 214 | + if self.searBarView.isFirstResponder{ | |
| 215 | + self.view.endEditing(true) | |
| 216 | + } | |
| 217 | + isJujiModel = false | |
| 218 | + headerJuJiBtn.backgroundColor = .clear | |
| 219 | + headerJuJiBtn.setTitleColor(HexColor("#919191"), for: .normal) | |
| 220 | + | |
| 221 | + headerDuanJuBtn.backgroundColor = HexColor("#D3E4FF") | |
| 222 | + headerDuanJuBtn.setTitleColor(HexColor("#2076FF"), for: .normal) | |
| 223 | + | |
| 224 | + changeResult() | |
| 225 | + } | |
| 226 | + @objc func headerJuJiBtnAction(){ | |
| 227 | + if self.searBarView.isFirstResponder{ | |
| 228 | + self.view.endEditing(true) | |
| 229 | + } | |
| 230 | + isJujiModel = true | |
| 231 | + headerJuJiBtn.backgroundColor = HexColor("#D3E4FF") | |
| 232 | + headerJuJiBtn.setTitleColor(HexColor("#2076FF"), for: .normal) | |
| 233 | + | |
| 234 | + headerDuanJuBtn.backgroundColor = .clear | |
| 235 | + headerDuanJuBtn.setTitleColor(HexColor("#919191"), for: .normal) | |
| 236 | + | |
| 237 | + changeResult() | |
| 238 | + } | |
| 239 | + | |
| 240 | + @objc func cancelBtnAction(){ | |
| 241 | + self.isJujiModel = false | |
| 242 | + if self.resultTableView.isHidden{ | |
| 243 | + self.navigationController?.popViewController(animated: false) | |
| 244 | + }else{ | |
| 245 | + self.resultTableView.isHidden = true | |
| 246 | + } | |
| 247 | + } | |
| 248 | + | |
| 249 | + // MARK: - UISearchBarDelegate | |
| 250 | + func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { | |
| 251 | + if let text = searchBar.text{ | |
| 252 | + let trimStr = text.qmui_trim | |
| 253 | + if trimStr.qmui_trimAllWhiteSpace.count == 0{ | |
| 254 | + QMUITips.showError("搜索内容不能为空", in: self.view, hideAfterDelay: 1.5) | |
| 255 | + return | |
| 256 | + } | |
| 257 | + self.tableView.tableFooterView = nil | |
| 258 | + self.tableView.mj_footer = nil | |
| 259 | + self.searchText = text | |
| 260 | + self.page = 1 | |
| 261 | + self.view.endEditing(true) | |
| 262 | + showLoading(message: "") | |
| 263 | + self.getSearchResultWithSearchText(searchText: searchText, modelId: self.isJujiModel ? "album" : "1", isFirst: true, page: "1") | |
| 264 | + self.recordSearchHistory() | |
| 265 | + self.getSearchHotListApi() | |
| 266 | + } | |
| 267 | + | |
| 268 | + } | |
| 269 | + func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) { | |
| 270 | + if searchText.count == 0{ | |
| 271 | + self.tableView.tableFooterView = nil | |
| 272 | +// self.tableView.removeFromSuperview() | |
| 273 | + } | |
| 274 | + | |
| 275 | + } | |
| 276 | + func searchBar(_ searchBar: UISearchBar, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { | |
| 277 | + if text == "" || text == "\n"{ | |
| 278 | + //删 | |
| 279 | + return true | |
| 280 | + } | |
| 281 | + if (text.count+(searchBar.text?.count ?? 0)) > 30{ | |
| 282 | + //输入字符超过最大限制 | |
| 283 | + QMUITips.showError("输入字符超过最大限制", in: self.view, hideAfterDelay: 1.5) | |
| 284 | + return false | |
| 285 | + } | |
| 286 | + return true | |
| 287 | + | |
| 288 | + } | |
| 289 | + | |
| 290 | + // MARK: - UITableViewDelegate | |
| 291 | + func numberOfSections(in tableView: UITableView) -> Int { | |
| 292 | + return 1 | |
| 293 | + } | |
| 294 | + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { | |
| 295 | + if tableView == self.tableView{ | |
| 296 | + return self.dataArray.count | |
| 297 | + }else{ | |
| 298 | + //搜索结果 | |
| 299 | + return self.resultListArray.count | |
| 300 | + } | |
| 301 | + } | |
| 302 | + // MARK: - UITableViewDelegate | |
| 303 | + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { | |
| 304 | + if tableView == self.tableView{ | |
| 305 | + if let historyModel = self.dataArray[indexPath.row] as? CNLiveHomeSearchHistoryModel{ | |
| 306 | + //搜索历史 | |
| 307 | + guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveHomeSearchHistoryCellIdentifier) as? CNLiveHomeSearchHistoryCell | |
| 308 | + else { | |
| 309 | + let cell = CNLiveHomeSearchHistoryCell() | |
| 310 | + return cell | |
| 311 | + } | |
| 312 | + cell.historyModel = historyModel | |
| 313 | + cell.searchHistoryClickBlock = { searchText in | |
| 314 | + self.searchText = searchText | |
| 315 | + self.view.endEditing(true) | |
| 316 | + self.getSearchResultWithSearchText(searchText: searchText, modelId: self.isJujiModel ? "album" : "1", isFirst: true, page: "1") | |
| 317 | + } | |
| 318 | + cell.newHeight = { height in | |
| 319 | + self.historyHeight = height | |
| 320 | + } | |
| 321 | + return cell | |
| 322 | + | |
| 323 | + }else if let hotModel = self.dataArray[indexPath.row] as? CNLiveHomeSearchHotModel{ | |
| 324 | + //热词 | |
| 325 | + guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveHomeSearchHotCellIdentifier) as? CNLiveHomeSearchHotCell | |
| 326 | + else { | |
| 327 | + let cell = CNLiveHomeSearchHotCell() | |
| 328 | + return cell | |
| 329 | + } | |
| 330 | + cell.hotModel = hotModel | |
| 331 | + return cell | |
| 332 | + }else{ | |
| 333 | + | |
| 334 | + } | |
| 335 | + }else{ | |
| 336 | + //搜索结果 | |
| 337 | + if let resModel = self.resultListArray[indexPath.row] as? CNLiveHomeSearchResultListModel{ | |
| 338 | + guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveHomeSearchResultJuJiCellIdentifier) as? CNLiveHomeSearchResultJuJiCell | |
| 339 | + else { | |
| 340 | + let cell = CNLiveHomeSearchResultJuJiCell() | |
| 341 | + return cell | |
| 342 | + } | |
| 343 | + cell.resModel = resModel | |
| 344 | + return cell | |
| 345 | +// else if resModel.model == kCNDownSlideContentsModelModel1{//点播 | |
| 346 | +// guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveHomeSearchResultDuanJuCellIdentifier) as? CNLiveHomeSearchResultDuanJuCell | |
| 347 | +// else { | |
| 348 | +// let cell = CNLiveHomeSearchResultDuanJuCell() | |
| 349 | +// return cell | |
| 350 | +// } | |
| 351 | +// cell.resModel = resModel | |
| 352 | +// return cell | |
| 353 | +// } | |
| 354 | + } | |
| 355 | + } | |
| 356 | + return UITableViewCell() | |
| 357 | + } | |
| 358 | + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { | |
| 359 | + if tableView == self.tableView{ | |
| 360 | + if let slideModel = self.dataArray[indexPath.row] as? CNLiveHomeSearchHotModel{ | |
| 361 | + //热词列表 | |
| 362 | + self.searchText = slideModel.value.count > 0 ? slideModel.value : "" | |
| 363 | + self.searBarView.text = self.searchText | |
| 364 | + self.recordSearchHistory() | |
| 365 | + self.getSearchHotListApi() | |
| 366 | + self.getSearchResultWithSearchText(searchText: self.searchText, modelId: self.isJujiModel ? "album" : "1", isFirst: true, page: "1") | |
| 367 | + } | |
| 368 | + }else{ | |
| 369 | + //搜索结果 | |
| 370 | + if let resModel = self.resultListArray[indexPath.row] as? CNLiveHomeSearchResultListModel{ | |
| 371 | + | |
| 372 | + var contentId = "" | |
| 373 | + var pid = "" | |
| 374 | + var title = "" | |
| 375 | + | |
| 376 | + if resModel.model == kCNDownSlideContentsModelModelAlbum_video{//专辑 | |
| 377 | + contentId = resModel.albumId | |
| 378 | + pid = resModel.pid | |
| 379 | + title = resModel.name | |
| 380 | + }else if resModel.model == kCNDownSlideContentsModelModel1{//点播 | |
| 381 | + contentId = resModel.contentId | |
| 382 | + pid = resModel.pid | |
| 383 | + title = resModel.title | |
| 384 | + } | |
| 385 | + //跳转到点播详情页-专辑/点播 | |
| 386 | + CNLiveDownSlideTool.pushWebAndVodVCWithContentsMdl(model: resModel.model, contentId: contentId, pid: pid, shareUrl: "", thirdUrl: "", title: title, s_to: "", trailerId: "", controller: navigationViewController().visibleViewController, slideModel: nil) | |
| 387 | + }else{ | |
| 388 | + | |
| 389 | + } | |
| 390 | + } | |
| 391 | + } | |
| 392 | + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { | |
| 393 | + if tableView == self.tableView{ | |
| 394 | + if let slideModel = self.dataArray[indexPath.row] as? CNLiveHomeSearchHotModel{ | |
| 395 | + //热词列表 | |
| 396 | + // let slideModel = self.dataArray[indexPath.row] as! CNLiveHomeSearchHotModel | |
| 397 | + return 40 | |
| 398 | + }else if let slideModel = self.dataArray[indexPath.row] as? CNLiveHomeSearchHistoryModel{ | |
| 399 | + //搜索历史 | |
| 400 | + let slideModel = self.dataArray[indexPath.row] as! CNLiveHomeSearchHistoryModel | |
| 401 | + return self.historyHeight//176//145 | |
| 402 | + // return CGFloat(slideModel.cellH) | |
| 403 | + }else{ | |
| 404 | + return 170 | |
| 405 | + } | |
| 406 | + }else{ | |
| 407 | + //搜索结果 | |
| 408 | + //albnum剧集90 | |
| 409 | + //1点播 imgH+55 (imgH+55)i -10 | |
| 410 | + return 90 | |
| 411 | +// if let resModel = self.resultListArray[indexPath.row] as? CNLiveHomeSearchResultListModel{ | |
| 412 | +// return 90 | |
| 413 | +// if resModel.model == kCNDownSlideContentsModelModelAlbum_video{//专辑 | |
| 414 | +// return 90 | |
| 415 | +// }else if resModel.model == kCNDownSlideContentsModelModel1{//点播 | |
| 416 | +// let imgW = (KSreenWidth-4*15.0)/3.0 | |
| 417 | +// let imgH = imgW*140.0/105.0 | |
| 418 | +// return imgH+55 | |
| 419 | +// }else{ | |
| 420 | +// | |
| 421 | +// } | |
| 422 | +// }else{//专辑或单集 | |
| 423 | +// return 60 | |
| 424 | +// } | |
| 425 | +// return 60 | |
| 426 | + } | |
| 427 | + } | |
| 428 | + | |
| 429 | + func recordSearchHistory(){ | |
| 430 | + if var hisArr = UserDefaults.standard.array(forKey: CNLiveHomeSearchHistoryKey) as? Array<String>{ | |
| 431 | + var hisArrM = hisArr | |
| 432 | + if self.searchText.count > 0{ | |
| 433 | + if hisArrM.contains(self.searchText){ | |
| 434 | + hisArrM.remove(self.searchText) | |
| 435 | + hisArrM.append(self.searchText) | |
| 436 | + }else{ | |
| 437 | + if hisArrM.count >= 10{ | |
| 438 | + hisArrM.remove(at: 0) | |
| 439 | + } | |
| 440 | + hisArrM.append(self.searchText) | |
| 441 | + } | |
| 442 | + UserDefaults.standard.setValue(hisArrM, forKey: CNLiveHomeSearchHistoryKey) | |
| 443 | + UserDefaults.standard.synchronize() | |
| 444 | + } | |
| 445 | + self.hisArr.removeAll() | |
| 446 | + for his in hisArrM { | |
| 447 | + self.hisArr.append(his) | |
| 448 | + } | |
| 449 | + let hisModel = CNLiveHomeSearchHistoryModel() | |
| 450 | + hisModel.history = self.hisArr | |
| 451 | + hisModel.cellH = 140//计算高度 | |
| 452 | + self.dataArray.removeAllObjects() | |
| 453 | + self.dataArray.add(hisModel) | |
| 454 | + }else{ | |
| 455 | + let tempArr = [String]() | |
| 456 | + UserDefaults.standard.setValue(tempArr, forKey: CNLiveHomeSearchHistoryKey) | |
| 457 | + UserDefaults.standard.synchronize() | |
| 458 | + self.hisArr = [String]() | |
| 459 | + let hisModel = CNLiveHomeSearchHistoryModel() | |
| 460 | + hisModel.history = self.hisArr | |
| 461 | + hisModel.cellH = 140//计算高度 | |
| 462 | + self.dataArray.removeAllObjects() | |
| 463 | + self.dataArray.add(hisModel) | |
| 464 | + } | |
| 465 | + self.tableView.reloadData() | |
| 466 | + } | |
| 467 | + func getSearchHotListApi(){ | |
| 468 | + CNLiveHomeSearchViewModel.getSearchHotListApi {[weak self] result, status in | |
| 469 | + guard let self = self else { return } | |
| 470 | + if status == .success{ | |
| 471 | + if let hotArr = result as? [CNLiveHomeSearchHotModel]{ | |
| 472 | + //热词 | |
| 473 | + let titleMdl = CNLiveHomeSearchHotModel() | |
| 474 | + titleMdl.sort = 0 | |
| 475 | + titleMdl.value = "热点榜" | |
| 476 | + self.dataArray.add(titleMdl) | |
| 477 | + for (idx,mdl) in hotArr.enumerated() { | |
| 478 | + mdl.sort = idx+1 | |
| 479 | + self.dataArray.add(mdl) | |
| 480 | + } | |
| 481 | + self.tableView.mj_header?.endRefreshing() | |
| 482 | + self.tableView.reloadData() | |
| 483 | + } | |
| 484 | + }else{ | |
| 485 | + | |
| 486 | + } | |
| 487 | + } | |
| 488 | + } | |
| 489 | + //获取搜索结果 | |
| 490 | + func getSearchResultWithSearchText(searchText:String,modelId:String,isFirst:Bool,page:String){ | |
| 491 | + self.searBarView.text = searchText | |
| 492 | + CNLiveHomeSearchViewModel.getSearchResultApi(modelId: modelId, keyword: searchText, page: page, pageSize: "10") { [weak self] result, status in | |
| 493 | + guard let self = self else { return } | |
| 494 | + self.resultTableView.isHidden = false | |
| 495 | + if status == .success{ | |
| 496 | + if let resultBaseModel = result as? CNLiveHomeSearchResultListBaseModel{ | |
| 497 | + if self.page > 1 { | |
| 498 | + for mdl in resultBaseModel.list{ | |
| 499 | + self.resultListArray.add(mdl) | |
| 500 | + } | |
| 501 | + } | |
| 502 | + if self.page == 1 { | |
| 503 | + self.resultListArray.removeAllObjects() | |
| 504 | + for mdl in resultBaseModel.list{ | |
| 505 | + self.resultListArray.add(mdl) | |
| 506 | + } | |
| 507 | + if self.resultListArray.count > 0 && self.resultTableView.mj_header == nil && self.resultTableView.mj_footer == nil { | |
| 508 | + self.addRefreshView() | |
| 509 | + self.page = self.page + 1 | |
| 510 | + self.getSearchResultWithSearchText(searchText: searchText, modelId: self.isJujiModel ? "album" : "1", isFirst: true, page: "\(self.page)") | |
| 511 | + | |
| 512 | + } | |
| 513 | + } | |
| 514 | + | |
| 515 | + self.resultTableView.mj_header?.endRefreshing() | |
| 516 | + self.resultTableView.mj_footer?.endRefreshing() | |
| 517 | + self.resultTableView.reloadData() | |
| 518 | + if resultBaseModel.list.count == 0 { | |
| 519 | + self.resultTableView.mj_footer?.endRefreshingWithNoMoreData() | |
| 520 | + self.resultTableView.reloadData() | |
| 521 | + } | |
| 522 | + if resultBaseModel.hasNextPage == false{ | |
| 523 | + self.resultTableView.mj_footer?.endRefreshingWithNoMoreData() | |
| 524 | + self.resultTableView.reloadData() | |
| 525 | + } | |
| 526 | + | |
| 527 | + | |
| 528 | + } | |
| 529 | + }else{ | |
| 530 | + | |
| 531 | + } | |
| 532 | + } | |
| 533 | + } | |
| 534 | + | |
| 535 | + deinit { | |
| 536 | + | |
| 537 | + } | |
| 538 | +} | |
| 539 | + | |
| 540 | + | |
| 541 | +//import UIKit | |
| 542 | +//import MJRefresh | |
| 543 | +//import QMUIKit | |
| 544 | +//import SnapKit // 假设你使用 SnapKit 进行布局 | |
| 545 | +// | |
| 546 | +//class CNClassifySearchController: BaseViewController { | |
| 547 | +// | |
| 548 | +// // 声明属性 | |
| 549 | +// var refreshView: MJRefreshAutoNormalFooter! | |
| 550 | +// var listArrM = :ml-search[Any] | |
| 551 | +// var hasNextPage: String? | |
| 552 | +// var page = 1 | |
| 553 | +// var hideSearchKB = false | |
| 554 | +// | |
| 555 | +// // 搜索历史相关 | |
| 556 | +// var titleLab: UILabel! | |
| 557 | +// var labelLineView: UIView! | |
| 558 | +// var scrollView: UIScrollView! | |
| 559 | +// var historyItemView: CNCategoryFloatLayoutView! // 假设这是一个自定义的 UIView 子类 | |
| 560 | +// var clearButton: UIButton! | |
| 561 | +// | |
| 562 | +// // 其他必要的属性... | |
| 563 | +// | |
| 564 | +// override func viewDidLoad() { | |
| 565 | +// super.viewDidLoad() | |
| 566 | +// | |
| 567 | +// // 初始化列表和页面 | |
| 568 | +// listArrM = [] | |
| 569 | +// page = 1 | |
| 570 | +// | |
| 571 | +// // 设置刷新控件 | |
| 572 | +// refreshView = MJRefreshAutoNormalFooter { [weak self] in | |
| 573 | +// guard let self = self else { return } | |
| 574 | +// let pageStr = String(self.page) | |
| 575 | +// self.getClassifySearchResult(withSearchText: self.searchText, isFirst: false, page: pageStr) | |
| 576 | +// } | |
| 577 | +// | |
| 578 | +// // 设置头部刷新控件(假设这是自定义的) | |
| 579 | +// // tableView.mj_header = ... | |
| 580 | +// | |
| 581 | +// // 如果不是从全搜索来的,则设置 UI | |
| 582 | +// if !fromAllSearch { | |
| 583 | +// setupUI() | |
| 584 | +// } | |
| 585 | +// | |
| 586 | +// // 监听键盘隐藏通知 | |
| 587 | +// NotificationCenter.default.addObserver(self, selector: #selector(keyBoardHidden), name: UIKeyboardDidHideNotification, object: nil) | |
| 588 | +// } | |
| 589 | +// | |
| 590 | +// // MARK: - 视图生命周期方法 | |
| 591 | +// | |
| 592 | +// override func viewWillAppear(_ animated: Bool) { | |
| 593 | +// super.viewWillAppear(animated) | |
| 594 | +// navigationController?.navigationBar.isHidden = true | |
| 595 | +// } | |
| 596 | +// | |
| 597 | +// override func viewDidAppear(_ animated: Bool) { | |
| 598 | +// super.viewDidAppear(animated) | |
| 599 | +// navigationController?.navigationBar.isHidden = true | |
| 600 | +// if hideSearchKB { | |
| 601 | +// hideKB() | |
| 602 | +// } | |
| 603 | +// hideSearchKB = true | |
| 604 | +// searchBar.becomeFirstResponder() | |
| 605 | +// } | |
| 606 | +// | |
| 607 | +// override func viewWillDisappear(_ animated: Bool) { | |
| 608 | +// super.viewWillDisappear(animated) | |
| 609 | +// if !fromAllSearch { | |
| 610 | +// navigationController?.navigationBar.isHidden = false | |
| 611 | +// } | |
| 612 | +// view.endEditing(true) | |
| 613 | +// } | |
| 614 | +// | |
| 615 | +// override func viewDidDisappear(_ animated: Bool) { | |
| 616 | +// super.viewDidDisappear(animated) | |
| 617 | +// if !fromAllSearch { | |
| 618 | +// navigationController?.navigationBar.isHidden = false | |
| 619 | +// } | |
| 620 | +// } | |
| 621 | +// | |
| 622 | +// // MARK: - 搜索功能 | |
| 623 | +// | |
| 624 | +// @objc func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { | |
| 625 | +// let searchText = searchBar.text?.trimmingCharacters(in: .whitespacesAndNewlines) | |
| 626 | +// if searchText?.isEmpty ?? true { | |
| 627 | +// QMUITips.showError(in: view, message: "搜索内容不能为空", hideAfterDelay: 1.5) | |
| 628 | +// return | |
| 629 | +// } | |
| 630 | +// | |
| 631 | +// tableView.mj_footer = nil | |
| 632 | +// tableView.tableFooterView = nil | |
| 633 | +// self.searchText = searchText | |
| 634 | +// page = 1 | |
| 635 | +// QMUITips.showLoading(in: view) | |
| 636 | +// getClassifySearchResult(withSearchText: searchText!, isFirst: true, page: "1") | |
| 637 | +// | |
| 638 | +// recordHistory() | |
| 639 | +// } | |
| 640 | +// | |
| 641 | +// // 其他搜索相关的方法... | |
| 642 | +// | |
| 643 | +// // MARK: - 清除搜索历史 | |
| 644 | +// | |
| 645 | +// @objc func clearBtnClick(_ sender: UIButton) { | |
| 646 | +// tableView.mj_footer = nil | |
| 647 | +// tableView.tableFooterView = nil | |
| 648 | +// listArrM.removeAll() | |
| 649 | +// tableView.reloadData() | |
| 650 | +// // 可能需要移除 tableView | |
| 651 | +// } | |
| 652 | +// | |
| 653 | +// // MARK: - 获取搜索结果 | |
| 654 | +// | |
| 655 | +// func getClassifySearchResult(withSearchText searchText: String, isFirst: Bool, page: String) { | |
| 656 | +// if isFirst && tableView.superview == nil { | |
| 657 | +// view.addSubview(tableView) | |
| 658 | +// } | |
| 659 | +// | |
| 660 | +// let param: [String: Any] = [ | |
| 661 | +// "page": page.isEmpty ? "1" : page, | |
| 662 | +// "pageSize": "10", | |
| 663 | +// "keyword": searchText.urlEncoded // 假设这是一个自定义的扩展方法 | |
| 664 | +// ] | |
| 665 | +// | |
| 666 | +// // 发起网络请求(这里使用假设的网络请求方法) | |
| 667 | +// // networkRequest(param) { response in | |
| 668 | +// // // 处理响应 | |
| 669 | +// // } | |
| 670 | +// | |
| 671 | +// // 假设网络请求已经完成,并返回了结果 | |
| 672 | +// // let responseObject = ... | |
| 673 | +// | |
| 674 | +// // 更新 UI(这里仅展示逻辑,实际代码需根据响应对象调整) | |
| 675 | +// tableView.mj_footer?.endRefreshing() | |
| 676 | +// tableView.mj_header?.endRefreshing() | |
| 677 | +// QMUITips.hideAllTips(in: view) | |
| 678 | +// | |
| 679 | +// if let dataDic = responseObject?["data"] as? [String: Any], | |
| 680 | +// let hasNextPageStr = dataDic["hasNextPage"] as? String, | |
| 681 | +// hasNextPageStr == "1" { | |
| 682 | +// page += 1 | |
| 683 | +// } else { | |
| 684 | +// tableView.mj_footer?.endRefreshingWithNoMoreData() | |
| 685 | +// } | |
| 686 | +// | |
| 687 | +// // 根据不同类型更新 listArrM 和 tableView | |
| 688 | +// // ... | |
| 689 | +// | |
| 690 | +// if isFirst { | |
| 691 | +// tableView.reloadData() | |
| 692 | +// if listArrM.count > 0, hasNextPageStr == "1" { | |
| 693 | +// tableView.mj_footer = refreshView | |
| 694 | +// } | |
| 695 | +// tableView.scrollToTop(animated: true) | |
| 696 | +// } | |
| 697 | +// } | |
| 698 | +// | |
| 699 | +// // MARK: - 记录搜索历史 | |
| 700 | +// | |
| 701 | +// func recordHistory() { | |
| 702 | +// // 假设 CNUserShareModel 是一个单例或全局对象 | |
| 703 | +// let historyKey = "CNWjjCategorySearchHistoryKey_\(CNUserShareModel.shared.uid)" | |
| 704 | +// if let userDefaults = UserDefaults.standard, | |
| 705 | +// let historyArray = userDefaults.array(forKey: historyKey) as? [String] { | |
| 706 | +// var historyArrayM = historyArray.mutableCopy() as! [String] | |
| 707 | +// if let searchText = searchText, !historyArrayM.contains(searchText) { | |
| 708 | +// if historyArrayM.count >= 10 { | |
| 709 | +// historyArrayM.removeFirst() | |
| 710 | +// } | |
| 711 | +// historyArrayM.append(searchText) | |
| 712 | +// } | |
| 713 | +// userDefaults.set(historyArrayM, forKey: historyKey) | |
| 714 | +// userDefaults.synchronize() | |
| 715 | +// | |
| 716 | +// historyItemView.subviews.forEach { $0.removeFromSuperview() } | |
| 717 | +// historyArrayM.reversed().forEach { str in | |
| 718 | +// let button = QMUIGhostButton() | |
| 719 | +// button.ghostColor = .black | |
| 720 | +// button.layer.borderColor = UIColor(rgb: 0xD4D5DA).cgColor | |
| 721 | +// button.setTitle(str, for: .normal) | |
| 722 | +// button.titleLabel?.font = UIFont.systemFont(ofSize: 14) | |
| 723 | +// button.contentEdgeInsets = UIEdgeInsets(top: 8, left: 8, bottom: 8, right: 8) | |
| 724 | +// button.addTarget(self, action: #selector(historyButtonAction(_:)), for: .touchUpInside) | |
| 725 | +// historyItemView.addSubview(button) | |
| 726 | +// } | |
| 727 | +// | |
| 728 | +// historyItemView.snp.remakeConstraints { make in | |
| 729 | +// make.top.equalTo(scrollView) | |
| 730 | +// make.left.equalTo(view).offset(10) | |
| 731 | +// make.right.equalTo(view).offset(-10) | |
| 732 | +// make.height.equalTo(historyItemView.sizeThatFits(CGSize(width: view.bounds.width - 20, height: CGFloat.greatestFiniteMagnitude)).height) | |
| 733 | +// } | |
| 734 | +// | |
| 735 | +// let offHeight = historyItemView.snp.frame.height + 10 + 45 + 10 + UIApplication.shared.statusBarFrame.height + 109 - view.bounds.height | |
| 736 | +// if offHeight > 0 { | |
| 737 | +// scrollView.contentSize = CGSize(width: view.bounds.width, height: view.bounds.height - UIApplication.shared.statusBarFrame.height - 108 + offHeight) | |
| 738 | +// } | |
| 739 | +// | |
| 740 | +// clearButton.isHidden = historyArrayM.isEmpty | |
| 741 | +// } | |
| 742 | +// } | |
| 743 | +// | |
| 744 | +// // MARK: - 显示无内容页 | |
| 745 | +// | |
| 746 | +// func showEmptyView() { | |
| 747 | +// tableView.mj_footer = nil | ... | ... |
metaCode/Classes/Main/HuBiLieHomePage/Controller/CNLiveTVHomeViewController.swift
0 → 100644
| 1 | +// | |
| 2 | +// CNLiveTVHomeViewController.swift | |
| 3 | +// metaCode | |
| 4 | +// | |
| 5 | +// Created by zx on 2025/2/17. | |
| 6 | +// 忽必烈电视剧改版首页 | |
| 7 | + | |
| 8 | +import Foundation | |
| 9 | +import QMUIKit | |
| 10 | +import MJRefresh | |
| 11 | + | |
| 12 | +class CNLiveTVHomeViewController:CNLiveBaseViewController, UITableViewDataSource, UITableViewDelegate{ | |
| 13 | + | |
| 14 | + let kCNLiveHomeYingshiBannerCellIdentifier = "kCNLiveHomeYingshiBannerCellIdentifier" | |
| 15 | + let kCNLiveHomeLanmuCellIdentifier = "kCNLiveHomeLanmuCellIdentifier" | |
| 16 | + let kCNLiveHomeOneBigTwoSmallCellIdentifier = "kCNLiveHomeOneBigTwoSmallCellIdentifier" | |
| 17 | + let kCNLiveHomeADCellIdentifier = "kCNLiveHomeADCellIdentifier" | |
| 18 | + let kCNLiveHomeTwoDuanjuCellIdentifier = "kCNLiveHomeTwoDuanjuCellIdentifier" | |
| 19 | + let kCNLiveHomeFollowCellIdentifier = "kCNLiveHomeFollowCellIdentifier" | |
| 20 | + let kCNLiveHomeTwoShopCellIdentifier = "kCNLiveHomeTwoShopCellIdentifier" | |
| 21 | + let kCNLiveHomeShopCategoryCellIdentifier = "kCNLiveHomeShopCategoryCellIdentifier" | |
| 22 | + | |
| 23 | + let group = DispatchGroup() | |
| 24 | + let queue = DispatchQueue.global(qos: .default) | |
| 25 | + var homePageStyleListMdls:[CNLiveHomePageStyleListModel] = [CNLiveHomePageStyleListModel]()//频道mdls | |
| 26 | + | |
| 27 | + lazy var tableView : UITableView = { | |
| 28 | + let tableView = UITableView(frame: .zero, style: .plain) | |
| 29 | + tableView.dataSource = self | |
| 30 | + tableView.delegate = self | |
| 31 | + tableView.separatorStyle = .none | |
| 32 | + tableView.register(CNLiveHomeYingshiBannerCell.self, forCellReuseIdentifier: kCNLiveHomeYingshiBannerCellIdentifier) | |
| 33 | + tableView.register(CNLiveHomeLanmuCell.self, forCellReuseIdentifier: kCNLiveHomeLanmuCellIdentifier) | |
| 34 | + tableView.register(CNLiveHomeFollowCell.self, forCellReuseIdentifier: kCNLiveHomeFollowCellIdentifier) | |
| 35 | + tableView.register(CNLiveHomeOneBigTwoSmallCell.self, forCellReuseIdentifier: kCNLiveHomeOneBigTwoSmallCellIdentifier) | |
| 36 | + tableView.register(CNLiveHomeADCell.self, forCellReuseIdentifier: kCNLiveHomeADCellIdentifier) | |
| 37 | + tableView.register(CNLiveHomeTwoDuanjuCell.self, forCellReuseIdentifier: kCNLiveHomeTwoDuanjuCellIdentifier) | |
| 38 | + tableView.register(CNLiveHomeTwoShopCell.self, forCellReuseIdentifier: kCNLiveHomeTwoShopCellIdentifier) | |
| 39 | + tableView.register(CNLiveHomeShopCategoryCell.self, forCellReuseIdentifier: kCNLiveHomeShopCategoryCellIdentifier) | |
| 40 | + | |
| 41 | + tableView.backgroundColor = .white | |
| 42 | + return tableView | |
| 43 | + }() | |
| 44 | + | |
| 45 | + | |
| 46 | + lazy var iconBgImgView :UIImageView = { | |
| 47 | + let iconImgView = UIImageView(frame: CGRect(x: 0, y: 0, width: KSreenWidth, height: 295*KSreenWidth/375)) | |
| 48 | + iconImgView.image = UIImage(named: "yingshibg.jpg") | |
| 49 | + iconImgView.contentMode = .scaleAspectFill | |
| 50 | + return iconImgView | |
| 51 | + }() | |
| 52 | + | |
| 53 | + lazy var iconImgView :UIImageView = { | |
| 54 | + let iconImgView = UIImageView(frame: CGRect(x: 15, y: KStatusBarHeight+10, width: 74, height: 32)) | |
| 55 | + iconImgView.image = UIImage(named: "yingshiicon") | |
| 56 | + iconImgView.contentMode = .scaleAspectFill | |
| 57 | + return iconImgView | |
| 58 | + }() | |
| 59 | + | |
| 60 | + lazy var searBarView :QMUISearchBar = { | |
| 61 | + let iconImgView = QMUISearchBar(frame: CGRect(x: iconImgView.right+10, y: KStatusBarHeight+10, width: KSreenWidth-iconImgView.right-10-15, height: 32)) | |
| 62 | + iconImgView.backgroundColor = .white | |
| 63 | + iconImgView.searchTextField.backgroundColor = .white | |
| 64 | + iconImgView.searchTextField.clearButtonMode = .always | |
| 65 | + iconImgView.searchTextField.font = Font_13 | |
| 66 | + iconImgView.searchTextField.textColor = HexColor("#333333") | |
| 67 | + iconImgView.clipsToBounds = true | |
| 68 | + iconImgView.layer.cornerRadius = 16 | |
| 69 | + return iconImgView | |
| 70 | + }() | |
| 71 | + lazy var searchBtn: QMUIButton = { | |
| 72 | + let playBtn = QMUIButton.init(type: .custom) | |
| 73 | + playBtn.frame = self.searBarView.bounds | |
| 74 | + playBtn.clipsToBounds = true | |
| 75 | + playBtn.layer.cornerRadius = 16 | |
| 76 | + playBtn.addTarget(self, action: #selector(searBarViewAction), for: .touchUpInside) | |
| 77 | + return playBtn | |
| 78 | + }() | |
| 79 | + | |
| 80 | + | |
| 81 | + lazy var pageStyleBtn1: QMUIButton = { | |
| 82 | + let playBtn = QMUIButton.init(type: .custom) | |
| 83 | + playBtn.frame = CGRect(x: 10, y: self.searBarView.bottom+20, width: 80, height: 25) | |
| 84 | + playBtn.setTitle("影视剧", for: .normal) | |
| 85 | + playBtn.setTitleColor(HexColor("#000102"), for: .normal) | |
| 86 | + playBtn.titleLabel?.font = BoldFont_18 | |
| 87 | + playBtn.addTarget(self, action: #selector(pageStyleBtn1Action), for: .touchUpInside) | |
| 88 | + return playBtn | |
| 89 | + }() | |
| 90 | + lazy var pageStyleBtn2: QMUIButton = { | |
| 91 | + let playBtn = QMUIButton.init(type: .custom) | |
| 92 | + playBtn.frame = CGRect(x: pageStyleBtn1.right+10, y: self.searBarView.bottom+20, width: 80, height: 25) | |
| 93 | + playBtn.setTitle("影视剧", for: .normal) | |
| 94 | + playBtn.setTitleColor(HexColor("#919191"), for: .normal) | |
| 95 | + playBtn.titleLabel?.font = Font_14 | |
| 96 | + playBtn.addTarget(self, action: #selector(pageStyleBtn2Action), for: .touchUpInside) | |
| 97 | + playBtn.isHidden = true | |
| 98 | + return playBtn | |
| 99 | + }() | |
| 100 | + lazy var pageStyleBtn3: QMUIButton = { | |
| 101 | + let playBtn = QMUIButton.init(type: .custom) | |
| 102 | + playBtn.frame = CGRect(x: pageStyleBtn2.right+10, y: self.searBarView.bottom+20, width: 80, height: 25) | |
| 103 | + playBtn.setTitle("影视剧", for: .normal) | |
| 104 | + playBtn.setTitleColor(HexColor("#919191"), for: .normal) | |
| 105 | + playBtn.titleLabel?.font = Font_14 | |
| 106 | + playBtn.addTarget(self, action: #selector(pageStyleBtn3Action), for: .touchUpInside) | |
| 107 | + playBtn.isHidden = true | |
| 108 | + return playBtn | |
| 109 | + }() | |
| 110 | + lazy var pageStyleBtn4: QMUIButton = { | |
| 111 | + let playBtn = QMUIButton.init(type: .custom) | |
| 112 | + playBtn.frame = CGRect(x: pageStyleBtn3.right+10, y: self.searBarView.bottom+20, width: 80, height: 25) | |
| 113 | + playBtn.setTitle("影视剧", for: .normal) | |
| 114 | + playBtn.setTitleColor(HexColor("#919191"), for: .normal) | |
| 115 | + playBtn.titleLabel?.font = Font_14 | |
| 116 | + playBtn.addTarget(self, action: #selector(pageStyleBtn4Action), for: .touchUpInside) | |
| 117 | + playBtn.isHidden = true | |
| 118 | + return playBtn | |
| 119 | + }() | |
| 120 | + | |
| 121 | + ///数据源 | |
| 122 | + lazy var dataArray: NSMutableArray = { | |
| 123 | + var dataArray = NSMutableArray() | |
| 124 | + return dataArray | |
| 125 | + }() | |
| 126 | + var currStyleIndex = 0 | |
| 127 | + | |
| 128 | + override func viewDidLoad() { | |
| 129 | + super.viewDidLoad() | |
| 130 | + self.view.backgroundColor = .white | |
| 131 | + | |
| 132 | + view.addSubview(iconBgImgView) | |
| 133 | + view.addSubview(iconImgView) | |
| 134 | + iconImgView.snp.makeConstraints { make in | |
| 135 | + make.left.equalTo(15) | |
| 136 | + make.top.equalTo(KStatusBarHeight+10) | |
| 137 | + make.width.equalTo(74) | |
| 138 | + make.height.equalTo(32) | |
| 139 | + } | |
| 140 | + view.addSubview(searBarView) | |
| 141 | + searBarView.snp.makeConstraints { make in | |
| 142 | + make.left.equalTo(self.iconImgView.snp.right).offset(10) | |
| 143 | + make.top.equalTo(self.iconImgView.snp.top) | |
| 144 | + make.right.equalToSuperview().offset(-15) | |
| 145 | + make.height.equalTo(32) | |
| 146 | + } | |
| 147 | + searBarView.addSubview(searchBtn) | |
| 148 | + searchBtn.snp.makeConstraints { make in | |
| 149 | + make.top.left.right.bottom.equalToSuperview() | |
| 150 | + } | |
| 151 | + | |
| 152 | + view.addSubview(pageStyleBtn1) | |
| 153 | + view.addSubview(pageStyleBtn2) | |
| 154 | + view.addSubview(pageStyleBtn3) | |
| 155 | + view.addSubview(pageStyleBtn4) | |
| 156 | + | |
| 157 | + view.addSubview(tableView) | |
| 158 | + tableView.frame = CGRect(x: 0, y: self.pageStyleBtn1.bottom+10, width: KSreenWidth, height: KSreenHeight-KTabBarHeight-self.pageStyleBtn1.bottom-10) | |
| 159 | + self.getHomePageTopConfigListApi() | |
| 160 | + self.addRefreshView() | |
| 161 | + } | |
| 162 | + | |
| 163 | + deinit { | |
| 164 | + | |
| 165 | + } | |
| 166 | + | |
| 167 | + //// | |
| 168 | + @objc func searBarViewAction(){ | |
| 169 | + let homePageStyleListMdl = self.homePageStyleListMdls[self.currStyleIndex] | |
| 170 | + | |
| 171 | + if homePageStyleListMdl.id == "3337"{ | |
| 172 | + //电商搜索页面 | |
| 173 | + let urlString = "https://managemall.cnlive.com/html/mall/1/#/pages/goods/search/search?uid=\(UserInfoManager.shared.userInfo.uid)&scene=app" | |
| 174 | + CNLiveDownSlideTool.pushWebAndVodVCWithContentsMdl(model: kCNDownSlideContentsModelModelProduct , contentId: "" , pid: "" , shareUrl: "" , thirdUrl: urlString , title: "" , s_to: "" ,trailerId: "" , controller: nil, slideModel: nil) | |
| 175 | + | |
| 176 | + }else { | |
| 177 | + //跳转原生搜索页面 | |
| 178 | + currentViewController()?.navigationController?.pushViewController(CNLiveHomeSearchController(), animated: false) | |
| 179 | + } | |
| 180 | + | |
| 181 | + } | |
| 182 | + | |
| 183 | + @objc func pageStyleBtn1Action(){ | |
| 184 | + self.changeBtnHighLight(idx: 0) | |
| 185 | + } | |
| 186 | + | |
| 187 | + @objc func pageStyleBtn2Action(){ | |
| 188 | + self.changeBtnHighLight(idx: 1) | |
| 189 | + | |
| 190 | + } | |
| 191 | + | |
| 192 | + @objc func pageStyleBtn3Action(){ | |
| 193 | + self.changeBtnHighLight(idx: 2) | |
| 194 | + | |
| 195 | + } | |
| 196 | + | |
| 197 | + @objc func pageStyleBtn4Action(){ | |
| 198 | + self.changeBtnHighLight(idx: 3) | |
| 199 | + | |
| 200 | + } | |
| 201 | + | |
| 202 | + func changeBtnHighLight(idx:Int){ | |
| 203 | + if idx == 0{ | |
| 204 | + self.changeBtn(btn: self.pageStyleBtn1, isHighLight: true) | |
| 205 | + self.changeBtn(btn: self.pageStyleBtn2, isHighLight: false) | |
| 206 | + self.changeBtn(btn: self.pageStyleBtn3, isHighLight: false) | |
| 207 | + self.changeBtn(btn: self.pageStyleBtn4, isHighLight: false) | |
| 208 | + }else if idx == 1{ | |
| 209 | + self.changeBtn(btn: self.pageStyleBtn1, isHighLight: false) | |
| 210 | + self.changeBtn(btn: self.pageStyleBtn2, isHighLight: true) | |
| 211 | + self.changeBtn(btn: self.pageStyleBtn3, isHighLight: false) | |
| 212 | + self.changeBtn(btn: self.pageStyleBtn4, isHighLight: false) | |
| 213 | + }else if idx == 2{ | |
| 214 | + self.changeBtn(btn: self.pageStyleBtn1, isHighLight: false) | |
| 215 | + self.changeBtn(btn: self.pageStyleBtn2, isHighLight: false) | |
| 216 | + self.changeBtn(btn: self.pageStyleBtn3, isHighLight: true) | |
| 217 | + self.changeBtn(btn: self.pageStyleBtn4, isHighLight: false) | |
| 218 | + }else if idx == 3{ | |
| 219 | + self.changeBtn(btn: self.pageStyleBtn1, isHighLight: false) | |
| 220 | + self.changeBtn(btn: self.pageStyleBtn2, isHighLight: false) | |
| 221 | + self.changeBtn(btn: self.pageStyleBtn3, isHighLight: false) | |
| 222 | + self.changeBtn(btn: self.pageStyleBtn4, isHighLight: true) | |
| 223 | + }else{ | |
| 224 | + | |
| 225 | + } | |
| 226 | + let homePageStyleListMdl = self.homePageStyleListMdls[idx] | |
| 227 | +// self.group.enter() | |
| 228 | + self.currStyleIndex = idx | |
| 229 | + self.dataArray.removeAllObjects() | |
| 230 | + self.getPageApi(pageID: homePageStyleListMdl.pageId) | |
| 231 | + } | |
| 232 | + func changeBtn(btn:QMUIButton,isHighLight:Bool){ | |
| 233 | + if isHighLight{ | |
| 234 | + btn.setTitleColor(HexColor("#000102"), for: .normal) | |
| 235 | + btn.titleLabel?.font = BoldFont_18 | |
| 236 | + }else{ | |
| 237 | + btn.setTitleColor(HexColor("#919191"), for: .normal) | |
| 238 | + btn.titleLabel?.font = Font_14 | |
| 239 | + } | |
| 240 | + | |
| 241 | + } | |
| 242 | + | |
| 243 | + // MARK: - UITableViewDelegate | |
| 244 | + func numberOfSections(in tableView: UITableView) -> Int { | |
| 245 | + return 1 | |
| 246 | + } | |
| 247 | + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { | |
| 248 | + return self.dataArray.count | |
| 249 | + } | |
| 250 | + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { | |
| 251 | + | |
| 252 | + if let slideModel = self.dataArray[indexPath.row] as? CNLiveDownSlideModel{ | |
| 253 | + if slideModel.type == SlideModelTypeRecommend1{ | |
| 254 | + //banner | |
| 255 | + guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveHomeYingshiBannerCellIdentifier) as? CNLiveHomeYingshiBannerCell | |
| 256 | + else { | |
| 257 | + let cell = CNLiveHomeYingshiBannerCell() | |
| 258 | + return cell | |
| 259 | + } | |
| 260 | + cell.slideModel = slideModel | |
| 261 | + return cell | |
| 262 | + }else if slideModel.type == SlideModelTypeLanmu22{ | |
| 263 | + //栏目 | |
| 264 | + guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveHomeLanmuCellIdentifier) as? CNLiveHomeLanmuCell | |
| 265 | + else { | |
| 266 | + let cell = CNLiveHomeLanmuCell() | |
| 267 | + return cell | |
| 268 | + } | |
| 269 | + cell.slideModel = slideModel | |
| 270 | + cell.imgClickBlock = { slideContentMdl in | |
| 271 | + let urlString = slideContentMdl.thirdUrl | |
| 272 | + if let url = URL(string: urlString){ | |
| 273 | + // 使用 URLComponents 解析 URL | |
| 274 | + let components = URLComponents(url: url, resolvingAgainstBaseURL: false)! | |
| 275 | + // 获取查询项数组 | |
| 276 | + let queryItems = components.queryItems | |
| 277 | + // 遍历查询项数组,查找 pageId 的值 | |
| 278 | + var pageId = "" | |
| 279 | + for queryItem in queryItems ?? [] { | |
| 280 | + if queryItem.name == "pageId" { | |
| 281 | + pageId = queryItem.value ?? "" | |
| 282 | + break | |
| 283 | + } | |
| 284 | + } | |
| 285 | + if pageId.count > 0{ | |
| 286 | + let vc = CNLiveHomeLanmuController() | |
| 287 | + vc.slideContentModel = slideContentMdl | |
| 288 | + vc.pageId = pageId | |
| 289 | + currentViewController()?.navigationController?.pushViewController(vc, animated: true) | |
| 290 | + }else{ | |
| 291 | + //跳转webView | |
| 292 | + CNLiveDownSlideTool.pushWebAndVodVCWithContentsMdl(model: slideContentMdl.model, contentId: slideContentMdl.contentId, pid: slideContentMdl.pid, shareUrl: slideContentMdl.shareUrl, thirdUrl: slideContentMdl.thirdUrl, title: slideContentMdl.title, s_to: slideContentMdl.s_to, trailerId: slideContentMdl.trailerId, controller: self, slideModel: nil) | |
| 293 | + } | |
| 294 | + } | |
| 295 | + | |
| 296 | + } | |
| 297 | + return cell | |
| 298 | + }else if slideModel.type == SlideModelTypeTVOneBigTwoSmall2{ | |
| 299 | + // | |
| 300 | + guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveHomeOneBigTwoSmallCellIdentifier) as? CNLiveHomeOneBigTwoSmallCell | |
| 301 | + else { | |
| 302 | + let cell = CNLiveHomeOneBigTwoSmallCell() | |
| 303 | + return cell | |
| 304 | + } | |
| 305 | + cell.slideModel = slideModel | |
| 306 | + return cell | |
| 307 | + }else if slideModel.type == SlideModelTypeAD31{ | |
| 308 | + //广告 | |
| 309 | + guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveHomeADCellIdentifier) as? CNLiveHomeADCell | |
| 310 | + else { | |
| 311 | + let cell = CNLiveHomeADCell() | |
| 312 | + return cell | |
| 313 | + } | |
| 314 | + cell.slideModel = slideModel | |
| 315 | + return cell | |
| 316 | + }else if slideModel.type == SlideModelTypeTwoDuanJu5{ | |
| 317 | + //一排3个 | |
| 318 | + guard let cell = tableView.dequeueReusableCell (withIdentifier: kCNLiveHomeTwoDuanjuCellIdentifier) as? CNLiveHomeTwoDuanjuCell | |
| 319 | + else { | |
| 320 | + let cell = CNLiveHomeTwoDuanjuCell() | |
| 321 | + return cell | |
| 322 | + } | |
| 323 | + cell.slideModel = slideModel | |
| 324 | + return cell | |
| 325 | + }else if slideModel.type == SlideModelTypeShop29{ | |
| 326 | + //官方周边 一排2个 | |
| 327 | + guard let cell = tableView.dequeueReusableCell (withIdentifier: kCNLiveHomeTwoShopCellIdentifier) as? CNLiveHomeTwoShopCell | |
| 328 | + else { | |
| 329 | + let cell = CNLiveHomeTwoShopCell() | |
| 330 | + return cell | |
| 331 | + } | |
| 332 | + cell.slideModel = slideModel | |
| 333 | + return cell | |
| 334 | + }else{ | |
| 335 | + return UITableViewCell() | |
| 336 | + } | |
| 337 | + }else if let followModel = self.dataArray[indexPath.row] as? CNLiveHomeFollowModel{ | |
| 338 | + //正在追 | |
| 339 | + guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveHomeFollowCellIdentifier) as? CNLiveHomeFollowCell | |
| 340 | + else { | |
| 341 | + let cell = CNLiveHomeFollowCell() | |
| 342 | + return cell | |
| 343 | + } | |
| 344 | + cell.followModel = followModel | |
| 345 | + return cell | |
| 346 | + }else if let categoryModel = self.dataArray[indexPath.row] as? CNLiveHomeShopCategoryModel{ | |
| 347 | + //电商分类 一排三个 | |
| 348 | + guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveHomeShopCategoryCellIdentifier) as? CNLiveHomeShopCategoryCell | |
| 349 | + else { | |
| 350 | + let cell = CNLiveHomeShopCategoryCell() | |
| 351 | + return cell | |
| 352 | + } | |
| 353 | + cell.slideModel = categoryModel | |
| 354 | + return cell | |
| 355 | + }else{ | |
| 356 | + return UITableViewCell() | |
| 357 | + } | |
| 358 | + | |
| 359 | + } | |
| 360 | + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { | |
| 361 | + | |
| 362 | + if let slideModel = self.dataArray[indexPath.row] as? CNLiveDownSlideModel{ | |
| 363 | + //非短剧 | |
| 364 | + let slideModel = self.dataArray[indexPath.row] as! CNLiveDownSlideModel | |
| 365 | + if slideModel.type == SlideModelTypeFollow77{ | |
| 366 | + return 0.0//追剧 占位数据 | |
| 367 | + } | |
| 368 | + return CGFloat(slideModel.cellH) | |
| 369 | + }else if let slideModel = self.dataArray[indexPath.row] as? CNLiveHomeFollowModel{ | |
| 370 | + //正在追 | |
| 371 | + return 50.0+15.0//80 | |
| 372 | + }else if let slideModel = self.dataArray[indexPath.row] as? CNLiveHomeShopCategoryModel{ | |
| 373 | + //商品分类 一排三个 | |
| 374 | + let maxCount = slideModel.group.count > 6 ? 6 : slideModel.group.count | |
| 375 | + let hangNum = Int(ceil(Double(maxCount)/3.0)) | |
| 376 | + let imgW = (KSreenWidth-15*4)/3.0 | |
| 377 | + let imgH = imgW*32.0/105.0 | |
| 378 | + let rowH = imgH+15.0 | |
| 379 | + let height = CGFloat(hangNum)*rowH | |
| 380 | + return height | |
| 381 | + }else{ | |
| 382 | + return 60 | |
| 383 | + } | |
| 384 | + } | |
| 385 | + | |
| 386 | + func addRefreshView() { | |
| 387 | + tableView.mj_header = MJRefreshNormalHeader.init(refreshingBlock: {[weak self] in | |
| 388 | + self!.getHomePageTopConfigListApi() | |
| 389 | + }) | |
| 390 | + } | |
| 391 | + | |
| 392 | + //MARK: - 获取首页配置 | |
| 393 | + func getHomePageTopConfigListApi(){ | |
| 394 | + CNLiveHomePageViewModel.requestGetHomePageTopConfigList{[weak self] result, status in | |
| 395 | + guard let self = self else { return } | |
| 396 | + if status == .success{ | |
| 397 | + | |
| 398 | + let dataModelArr = result as! [CNLiveHomePageHuBiLieModel] | |
| 399 | + let dataModel = dataModelArr.first! | |
| 400 | + | |
| 401 | + let img = dataModel.img | |
| 402 | + if img.count > 0{ | |
| 403 | + self.iconImgView.kf.setImage(with: URL(string: img)) | |
| 404 | + self.iconImgView.isHidden = false | |
| 405 | + | |
| 406 | + self.iconImgView.snp.remakeConstraints { make in | |
| 407 | + make.left.equalTo(15) | |
| 408 | + make.top.equalTo(KStatusBarHeight+10) | |
| 409 | + make.width.equalTo(74) | |
| 410 | + make.height.equalTo(32) | |
| 411 | + } | |
| 412 | + self.searBarView.snp.remakeConstraints { make in | |
| 413 | + make.left.equalTo(self.iconImgView.snp.right).offset(10) | |
| 414 | + make.top.equalTo(self.iconImgView.snp.top) | |
| 415 | + make.right.equalToSuperview().offset(-15) | |
| 416 | + make.height.equalTo(32) | |
| 417 | + } | |
| 418 | + }else{ | |
| 419 | + self.iconImgView.isHidden = true | |
| 420 | + self.iconImgView.image = nil | |
| 421 | + self.iconImgView.snp.remakeConstraints { make in | |
| 422 | + make.left.equalTo(15) | |
| 423 | + make.top.equalTo(KStatusBarHeight+10) | |
| 424 | + make.width.equalTo(0) | |
| 425 | + make.height.equalTo(32) | |
| 426 | + } | |
| 427 | + self.searBarView.snp.remakeConstraints { make in | |
| 428 | + make.left.equalTo(self.iconImgView.snp.right) | |
| 429 | + make.top.equalTo(self.iconImgView.snp.top) | |
| 430 | + make.right.equalToSuperview().offset(-15) | |
| 431 | + make.height.equalTo(32) | |
| 432 | + } | |
| 433 | + | |
| 434 | + } | |
| 435 | + | |
| 436 | + let homePageListMdls = dataModel.pageStyleList | |
| 437 | + self.homePageStyleListMdls = homePageListMdls | |
| 438 | + for (idx,mdl) in homePageListMdls.enumerated() { | |
| 439 | + if idx == 0{ | |
| 440 | + self.pageStyleBtn1.setTitle(mdl.name, for: .normal) | |
| 441 | + self.changeBtn(btn: self.pageStyleBtn1, isHighLight: true) | |
| 442 | + self.pageStyleBtn1.isHidden = false | |
| 443 | +// self.group.enter() | |
| 444 | + self.getPageApi(pageID: mdl.pageId) | |
| 445 | + | |
| 446 | + }else if idx == 1{ | |
| 447 | + self.pageStyleBtn2.setTitle(mdl.name, for: .normal) | |
| 448 | + self.changeBtn(btn: self.pageStyleBtn2, isHighLight: false) | |
| 449 | + self.pageStyleBtn2.isHidden = false | |
| 450 | + }else if idx == 2{ | |
| 451 | + self.pageStyleBtn3.setTitle(mdl.name, for: .normal) | |
| 452 | + self.changeBtn(btn: self.pageStyleBtn3, isHighLight: false) | |
| 453 | + self.pageStyleBtn3.isHidden = false | |
| 454 | + }else if idx == 3{ | |
| 455 | + self.pageStyleBtn4.setTitle(mdl.name, for: .normal) | |
| 456 | + self.changeBtn(btn: self.pageStyleBtn4, isHighLight: false) | |
| 457 | + self.pageStyleBtn4.isHidden = false | |
| 458 | + }else{ | |
| 459 | + | |
| 460 | + } | |
| 461 | + } | |
| 462 | +// self.group.notify(queue: .main) { | |
| 463 | +// // 所有网络请求都已完成,在这里执行你的任务 | |
| 464 | +// self.tableView.mj_header?.endRefreshing() | |
| 465 | +// self.tableView.reloadData() | |
| 466 | +// } | |
| 467 | + | |
| 468 | + }else{ | |
| 469 | + self.getHomePageTopConfigListApi() | |
| 470 | + } | |
| 471 | + } | |
| 472 | + } | |
| 473 | + | |
| 474 | + func getHomePageShopCategoryApi(shop_id:String){ | |
| 475 | + | |
| 476 | + CNLiveHomePageViewModel.requestGetHomePageShopCategoryApi(shop_id: shop_id){[weak self] result, status in | |
| 477 | + guard let self = self else { return } | |
| 478 | + if status == .success{ | |
| 479 | + var cateMdl = result as! CNLiveHomeShopCategoryModel | |
| 480 | + | |
| 481 | + var followIdx = 0 | |
| 482 | + for (idx,mdl) in self.dataArray.enumerated(){ | |
| 483 | + if let lanmuMdl = mdl as? CNLiveDownSlideModel{ | |
| 484 | + if lanmuMdl.type == SlideModelTypeShopCategory78{ | |
| 485 | + //商品分类 | |
| 486 | + followIdx = idx | |
| 487 | + } | |
| 488 | + } | |
| 489 | + } | |
| 490 | + if cateMdl.group.count == 0{ | |
| 491 | + //不显示分类 | |
| 492 | + self.dataArray.removeObject(at: followIdx) | |
| 493 | + }else{ | |
| 494 | + let model = CNLiveHomeShopCategoryGroupModel() | |
| 495 | + model.title = "全部商品" | |
| 496 | + cateMdl.group.insert(model, at: 0) | |
| 497 | + self.dataArray.replaceObject(at: followIdx, with: cateMdl) | |
| 498 | + } | |
| 499 | + }else{ | |
| 500 | + | |
| 501 | + } | |
| 502 | + self.tableView.mj_header?.endRefreshing() | |
| 503 | + self.tableView.reloadData() | |
| 504 | + self.tableView.scrollToTop(animated: false) | |
| 505 | + } | |
| 506 | + } | |
| 507 | + func getHomePageFollowApi(sid:String){ | |
| 508 | + CNLiveHomePageViewModel.requestGetHomePageFollow(sid: sid){[weak self] result, status in | |
| 509 | + guard let self = self else { return } | |
| 510 | + if status == .success{ | |
| 511 | + //插入数据到栏目下一位 | |
| 512 | + let followMdl = result as! CNLiveHomeFollowModel | |
| 513 | +// if self.dataArray.count >= 2{ | |
| 514 | +// self.dataArray.insert(followMdl, at: 2) | |
| 515 | +// } | |
| 516 | + var followIdx = 0 | |
| 517 | + for (idx,mdl) in self.dataArray.enumerated(){ | |
| 518 | + if let lanmuMdl = mdl as? CNLiveDownSlideModel{ | |
| 519 | + if lanmuMdl.type == SlideModelTypeFollow77{ | |
| 520 | + //正在追 | |
| 521 | + followIdx = idx | |
| 522 | + } | |
| 523 | + } | |
| 524 | + } | |
| 525 | + self.dataArray.replaceObject(at: followIdx, with: followMdl) | |
| 526 | + | |
| 527 | +// self.group.leave() | |
| 528 | + | |
| 529 | + }else{ | |
| 530 | + //没有在追 | |
| 531 | +// self.group.leave() | |
| 532 | + } | |
| 533 | + self.tableView.mj_header?.endRefreshing() | |
| 534 | + self.tableView.reloadData() | |
| 535 | + self.tableView.scrollToTop(animated: false) | |
| 536 | + } | |
| 537 | + } | |
| 538 | + //MARK: - 网络请求获取区块详情页 | |
| 539 | + func getPageApi(pageID:String) | |
| 540 | + { | |
| 541 | + // showLoading(message: "") | |
| 542 | + CNLiveDownSlideViewModel.requestGetPage(pageId: pageID as NSString) {[weak self] result, status in | |
| 543 | + hiddenLoading() | |
| 544 | + guard let self = self else { return } | |
| 545 | + | |
| 546 | + if status == .success{ | |
| 547 | + self.dataArray.removeAllObjects() | |
| 548 | + let array = result as! [Any] | |
| 549 | + let newDataArray = NSMutableArray() | |
| 550 | + var isRefreshTable = true | |
| 551 | + for slideModel in array { | |
| 552 | + if let model = slideModel as? CNLiveDownSlideModel{ | |
| 553 | + | |
| 554 | + let layout = CNLiveDownSlideModelLayout.init(model: model) | |
| 555 | + let cellModel = layout.getCellHModel() | |
| 556 | + newDataArray.addObjects(from: [cellModel]) | |
| 557 | + if model.type == SlideModelTypeFollow77{ | |
| 558 | +// self.group.enter() | |
| 559 | + self.getHomePageFollowApi(sid: UserInfoManager.shared.userInfo.uid) | |
| 560 | + isRefreshTable = false | |
| 561 | + }else if model.type == SlideModelTypeShopCategory78{ | |
| 562 | + if model.contents.count > 0{ | |
| 563 | + let shop_id = model.contents[0].contentId | |
| 564 | + self.getHomePageShopCategoryApi(shop_id: shop_id) | |
| 565 | + isRefreshTable = false | |
| 566 | + } | |
| 567 | + }else{ | |
| 568 | + } | |
| 569 | + } | |
| 570 | + } | |
| 571 | + self.dataArray.addObjects(from: newDataArray as! [Any]) | |
| 572 | + if isRefreshTable{ | |
| 573 | + //需要刷新table | |
| 574 | + self.tableView.mj_header?.endRefreshing() | |
| 575 | + self.tableView.reloadData() | |
| 576 | + self.tableView.scrollToTop(animated: false) | |
| 577 | + }else{ | |
| 578 | + //后面接口刷新table | |
| 579 | + } | |
| 580 | + }else if (status == .failed){ | |
| 581 | + | |
| 582 | + // self.NetApiStatus = .apiError | |
| 583 | + }else if (status == .noNetwork){ | |
| 584 | + | |
| 585 | + // self.NetApiStatus = .notNetwork | |
| 586 | + } | |
| 587 | +// self.group.leave() | |
| 588 | + } | |
| 589 | + // | |
| 590 | + } | |
| 591 | + | |
| 592 | + | |
| 593 | +} | |
| 594 | + | ... | ... |
metaCode/Classes/Main/HuBiLieHomePage/Controller/CNLiveTVPlayerViewController.swift
0 → 100644
| 1 | +// | |
| 2 | +// CNLivePlayerViewController.swift | |
| 3 | +// metaCode | |
| 4 | +// | |
| 5 | +// Created by zx on 2025/1/21. | |
| 6 | +// | |
| 7 | + | |
| 8 | +import Foundation | |
| 9 | +import ZFPlayer | |
| 10 | +import MJRefresh | |
| 11 | +import HandyJSON | |
| 12 | +import CNLiveShareToolKit | |
| 13 | + | |
| 14 | +class CNLiveTVPlayerViewController:UIViewController, UITableViewDataSource, UITableViewDelegate{ | |
| 15 | + | |
| 16 | + //当前内容id | |
| 17 | + var contentId = "" | |
| 18 | + | |
| 19 | + //CNLiveVodPlayModel 单集model | |
| 20 | + var _vodPlayModel : CNLiveVodPlayModel? | |
| 21 | + var vodPlayModel : CNLiveVodPlayModel? { | |
| 22 | + get{ | |
| 23 | + _vodPlayModel | |
| 24 | + } | |
| 25 | + set{ | |
| 26 | + _vodPlayModel = newValue! | |
| 27 | + } | |
| 28 | + } | |
| 29 | + | |
| 30 | + //CNLiveVodPlayModel 专辑列表model | |
| 31 | + var _vodAlbumListBaseModel : CNLiveVodAlbumListBaseModel? | |
| 32 | + var vodAlbumListBaseModel : CNLiveVodAlbumListBaseModel? { | |
| 33 | + get{ | |
| 34 | + _vodAlbumListBaseModel | |
| 35 | + } | |
| 36 | + set{ | |
| 37 | + _vodAlbumListBaseModel = newValue! | |
| 38 | + } | |
| 39 | + } | |
| 40 | + | |
| 41 | + //playerUrl | |
| 42 | + var _url:URL? | |
| 43 | + var url:URL? { | |
| 44 | + get{ | |
| 45 | + return _url | |
| 46 | + } | |
| 47 | + set{ | |
| 48 | + _url = newValue! | |
| 49 | + } | |
| 50 | + } | |
| 51 | + | |
| 52 | + let kCNLiveVodIntroductionCellIdentifier = "kCNLiveVodIntroductionCellIdentifier" | |
| 53 | + let kCNLiveVodAlbumListCellIdentifier = "kCNLiveVodAlbumListCellIdentifier" | |
| 54 | + let kCNLiveVodTrailersCellIdentifier = "kCNLiveVodTrailersCellIdentifier" | |
| 55 | + let kCNLiveVodPlayShopCellIdentifier = "kCNLiveVodPlayShopCellIdentifier" | |
| 56 | + | |
| 57 | + | |
| 58 | + lazy var tableView : UITableView = { | |
| 59 | + let tableView = UITableView(frame: .zero, style: .plain) | |
| 60 | + tableView.dataSource = self | |
| 61 | + tableView.delegate = self | |
| 62 | + tableView.separatorStyle = .none | |
| 63 | + tableView.register(CNLiveVodIntroductionCell.self, forCellReuseIdentifier: kCNLiveVodIntroductionCellIdentifier) | |
| 64 | + tableView.register(CNLiveVodAlbumListCell.self, forCellReuseIdentifier: kCNLiveVodAlbumListCellIdentifier) | |
| 65 | + tableView.register(CNLiveVodTrailersCell.self, forCellReuseIdentifier: kCNLiveVodTrailersCellIdentifier) | |
| 66 | + tableView.register(CNLiveVodPlayShopCell.self, forCellReuseIdentifier: kCNLiveVodPlayShopCellIdentifier) | |
| 67 | + | |
| 68 | + tableView.backgroundColor = .white | |
| 69 | + return tableView | |
| 70 | + }() | |
| 71 | + ///数据源 | |
| 72 | + lazy var dataArray: NSMutableArray = { | |
| 73 | + var dataArray = NSMutableArray() | |
| 74 | + return dataArray | |
| 75 | + }() | |
| 76 | + | |
| 77 | + lazy var bottomCommentShowContainView :UIView = { | |
| 78 | + let iconImgView = UIView() | |
| 79 | + iconImgView.backgroundColor = .clear | |
| 80 | + return iconImgView | |
| 81 | + }() | |
| 82 | + lazy var bottomCommentView :UIView = { | |
| 83 | + let iconImgView = UIView(frame: CGRect(x: 0, y: KSreenHeight-60-KTabBarSafeHeight, width: KSreenWidth, height: 60)) | |
| 84 | + iconImgView.backgroundColor = .white | |
| 85 | + iconImgView.isUserInteractionEnabled = true | |
| 86 | + iconImgView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(bottomCommentViewTapAction))) | |
| 87 | + return iconImgView | |
| 88 | + }() | |
| 89 | + lazy var bottomCommentTalkView :UIView = { | |
| 90 | + let iconImgView = UIView() | |
| 91 | + iconImgView.layer.borderColor = HexColor("#979797")?.cgColor | |
| 92 | + iconImgView.layer.borderWidth = 0.5 | |
| 93 | + iconImgView.layer.cornerRadius = 20 | |
| 94 | + iconImgView.clipsToBounds = true | |
| 95 | + return iconImgView | |
| 96 | + }() | |
| 97 | + lazy var bottomCommentLabel: UILabel = { | |
| 98 | + let titleLabel = UILabel() | |
| 99 | + titleLabel.text = "我来说几句…" | |
| 100 | + titleLabel.textColor = HexColor("#999999") | |
| 101 | + titleLabel.textAlignment = .left | |
| 102 | + titleLabel.font = Font_14 | |
| 103 | + return titleLabel | |
| 104 | + }() | |
| 105 | + lazy var bottomCommentImgView :UIImageView = { | |
| 106 | + let iconImgView = UIImageView() | |
| 107 | + iconImgView.image = UIImage(named: "home_player_comment") | |
| 108 | + return iconImgView | |
| 109 | + }() | |
| 110 | + | |
| 111 | + | |
| 112 | + lazy var whitBgView :UIView = { | |
| 113 | + let iconImgView = UIView(frame: CGRect(x: 0, y: KStatusBarHeight, width: KSreenWidth, height: KSreenHeight-KStatusBarHeight)) | |
| 114 | + iconImgView.backgroundColor = .white | |
| 115 | + return iconImgView | |
| 116 | + }() | |
| 117 | + lazy var containerView :UIImageView = { | |
| 118 | + let iconImgView = UIImageView(frame: CGRect(x: 0, y: KStatusBarHeight, width: KSreenWidth, height: KSreenWidth*9/16)) | |
| 119 | + iconImgView.image = UIImage.imageWithColor(color: UIColor.black, size: CGSize(width: 1, height: 1)) | |
| 120 | + return iconImgView | |
| 121 | + }() | |
| 122 | + lazy var controlView :CNLiveZFPlayerControlView = { | |
| 123 | + let controlView = CNLiveZFPlayerControlView() | |
| 124 | + controlView.fastViewAnimated = true | |
| 125 | + controlView.autoHiddenTimeInterval = 5 | |
| 126 | + controlView.autoFadeTimeInterval = 0.5 | |
| 127 | + controlView.prepareShowLoading = true | |
| 128 | + controlView.prepareShowControlView = false | |
| 129 | + controlView.showCustomStatusBar = true | |
| 130 | + return controlView | |
| 131 | + }() | |
| 132 | + var player: ZFPlayerController! | |
| 133 | + var isAblumVideo = false | |
| 134 | + override func viewDidLoad() { | |
| 135 | + super.viewDidLoad() | |
| 136 | + view.backgroundColor = .black | |
| 137 | + self.view.addSubview(self.whitBgView) | |
| 138 | + self.view.addSubview(self.containerView) | |
| 139 | + | |
| 140 | + let backBtn = UIButton.backItem(imageName: ("mine_header_icon_white_back"), target: self, action: #selector(ClickBackBtn)) | |
| 141 | + backBtn.frame = CGRect(x: 15, y: KStatusBarHeight, width: backBtn.width, height: backBtn.height) | |
| 142 | + self.view.addSubview(backBtn) | |
| 143 | +// backBtn.backgroundColor = .red | |
| 144 | + | |
| 145 | + self.setupPlayer() | |
| 146 | + | |
| 147 | + view.addSubview(tableView) | |
| 148 | + tableView.frame = CGRect(x: 0, y: self.containerView.bottom, width: KSreenWidth, height: KSreenHeight-self.containerView.bottom-KTabBarSafeHeight-60) | |
| 149 | + view.addSubview(self.bottomCommentView) | |
| 150 | + self.bottomCommentView.addSubview(self.bottomCommentTalkView) | |
| 151 | + bottomCommentTalkView.snp.makeConstraints { make in | |
| 152 | + make.top.left.equalToSuperview().offset(10) | |
| 153 | + make.width.equalToSuperview().offset(-75) | |
| 154 | + make.height.equalTo(40) | |
| 155 | + } | |
| 156 | + self.bottomCommentView.addSubview(self.bottomCommentLabel) | |
| 157 | + bottomCommentLabel.snp.makeConstraints { make in | |
| 158 | + make.left.equalToSuperview().offset(25) | |
| 159 | + make.centerY.equalToSuperview() | |
| 160 | + make.width.equalTo(100) | |
| 161 | + make.height.equalTo(20) | |
| 162 | + } | |
| 163 | + self.bottomCommentView.addSubview(self.bottomCommentImgView) | |
| 164 | + bottomCommentImgView.snp.makeConstraints { make in | |
| 165 | + make.right.equalToSuperview().offset(-20) | |
| 166 | + make.centerY.equalToSuperview() | |
| 167 | + make.width.equalTo(25) | |
| 168 | + make.height.equalTo(24) | |
| 169 | + } | |
| 170 | + self.view.addSubview(self.bottomCommentShowContainView) | |
| 171 | + bottomCommentShowContainView.snp.makeConstraints { make in | |
| 172 | + make.left.equalToSuperview() | |
| 173 | + make.top.equalToSuperview().offset(self.containerView.bottom) | |
| 174 | + make.width.equalToSuperview() | |
| 175 | + make.height.equalToSuperview().offset(-self.containerView.bottom) | |
| 176 | + } | |
| 177 | + bottomCommentShowContainView.isHidden = true | |
| 178 | +// self.addRefreshView() | |
| 179 | + self.configDataArray() | |
| 180 | + self.isAblumVideo = false | |
| 181 | + if let albumModel = self.vodAlbumListBaseModel{ | |
| 182 | + //专辑 | |
| 183 | + self.isAblumVideo = true | |
| 184 | + }else{ | |
| 185 | + //单集 | |
| 186 | + self.isAblumVideo = false | |
| 187 | + } | |
| 188 | + } | |
| 189 | + | |
| 190 | + func configDataArray(){ | |
| 191 | + //配置数据 | |
| 192 | + var tempDataArray = NSMutableArray() | |
| 193 | + //单集 简介 | |
| 194 | + if let vodPlayModel = self.vodPlayModel{//单集有值-简介 | |
| 195 | + for (_,mdl) in vodPlayModel.blockList.enumerated(){ | |
| 196 | + if mdl.type == "5"{//点播详情数据 | |
| 197 | + //CNLiveVodPlayBlockListModel | |
| 198 | + tempDataArray.add(mdl) | |
| 199 | + } | |
| 200 | + } | |
| 201 | + } | |
| 202 | + //专辑-简介 | |
| 203 | + if let vodAlbumListBaseModel = self.vodAlbumListBaseModel{//专辑有值-专辑列表 | |
| 204 | + if let mdl = vodAlbumListBaseModel.list.first{ | |
| 205 | + if let msgModel = mdl.vodAlbumMsgModel{ | |
| 206 | + let tempArr = NSMutableArray(array: tempDataArray as! [Any]) | |
| 207 | + if let vodMdl = tempArr.firstObject as? CNLiveVodPlayBlockListModel{ | |
| 208 | + for firMdl in vodMdl.list{ | |
| 209 | + firMdl.title = msgModel.albumName | |
| 210 | + firMdl.desc = msgModel.desc | |
| 211 | + } | |
| 212 | + tempDataArray.removeAllObjects() | |
| 213 | + tempDataArray.add(vodMdl) | |
| 214 | + } | |
| 215 | + | |
| 216 | + } | |
| 217 | + } | |
| 218 | + } | |
| 219 | + //专辑有值-专辑列表 | |
| 220 | + if let vodAlbumListBaseModel = self.vodAlbumListBaseModel{//专辑有值-专辑列表 | |
| 221 | + tempDataArray.add(vodAlbumListBaseModel) | |
| 222 | + } | |
| 223 | + //看点 | |
| 224 | + ///**blockList.type 1/2/3/4/5 商品入口/片花资讯/活动推荐/相关推荐/点播详情 */ | |
| 225 | + if let vodPlayModel = self.vodPlayModel{//单集有值-简介 | |
| 226 | + for (_,mdl) in vodPlayModel.blockList.enumerated(){ | |
| 227 | + if mdl.type == "2"{//看点list数据 | |
| 228 | + //CNLiveVodPlayBlockListModel | |
| 229 | + tempDataArray.add(mdl) | |
| 230 | + } | |
| 231 | + } | |
| 232 | + } | |
| 233 | + //商品 | |
| 234 | + if let vodPlayModel = self.vodPlayModel{//单集有值 | |
| 235 | + if vodPlayModel.goodsJson.count > 0{ | |
| 236 | + let goodMdls = jsonArrayToModel(vodPlayModel.goodsJson, CNLiveVodPlayShopModel.self) | |
| 237 | + if goodMdls.count > 0{//CNLiveVodPlayModel [CNLiveVodPlayShopModel] | |
| 238 | + //有商品 | |
| 239 | + tempDataArray.add(goodMdls) | |
| 240 | + }else{ | |
| 241 | + //没商品 | |
| 242 | + } | |
| 243 | + } | |
| 244 | + } | |
| 245 | + | |
| 246 | + self.dataArray = NSMutableArray(array: tempDataArray) | |
| 247 | + | |
| 248 | + } | |
| 249 | + | |
| 250 | + func setupNewUI(model:CNLiveDownSlideContentsModel){ | |
| 251 | + | |
| 252 | + } | |
| 253 | + func setupPlayer(){ | |
| 254 | + let playerManager = ZFAVPlayerManager() | |
| 255 | + playerManager.shouldAutoPlay = true | |
| 256 | +// playerManager.rate = 2 | |
| 257 | + | |
| 258 | + player = ZFPlayerController(playerManager: playerManager, containerView: containerView) | |
| 259 | + player.pauseWhenAppResignActive = false | |
| 260 | + player.controlView = controlView | |
| 261 | + //不跟随设备旋转 | |
| 262 | + player.allowOrentitaionRotation = false | |
| 263 | + | |
| 264 | + // self.player.currentPlayerManager.rate = 0.5 //点击按钮加 | |
| 265 | + | |
| 266 | + self.player.orientationDidChanged = {[weak self] player,isFullScreen in | |
| 267 | + guard let self = self else { return } | |
| 268 | + | |
| 269 | + } | |
| 270 | + /// 播放完成 | |
| 271 | + self.player.playerDidToEnd = { | |
| 272 | + [weak self] asset in | |
| 273 | + guard let self = self else { return } | |
| 274 | + | |
| 275 | + // if (!self.player.isLastAssetURL) { | |
| 276 | + // [self.player playTheNext]; | |
| 277 | + // NSString *title = [NSString stringWithFormat:@"视频标题%zd",self.player.currentPlayIndex]; | |
| 278 | + // [self.controlView showTitle:title coverURLString:kVideoCover fullScreenMode:ZFFullScreenModeLandscape]; | |
| 279 | + // } else { | |
| 280 | + // [self.player stop]; | |
| 281 | + // } | |
| 282 | + } | |
| 283 | + var urls = [URL]() | |
| 284 | + urls.append(self.url!) | |
| 285 | + self.player.assetURLs = urls | |
| 286 | + self.player.playTheIndex(0) | |
| 287 | + var title = "" | |
| 288 | + if self.vodPlayModel?.blockList.count ?? 0 > 0{ | |
| 289 | + for mdl in self.vodPlayModel!.blockList{ | |
| 290 | + if mdl.type == "5"{//详情 | |
| 291 | + if mdl.list.count > 0{ | |
| 292 | + let vodModel = mdl.list[0] | |
| 293 | + title = vodModel.title | |
| 294 | + } | |
| 295 | + } | |
| 296 | + } | |
| 297 | + } | |
| 298 | + self.controlView.showTitle(title, cover: UIImage.imageWithColor(color: .darkGray, size: CGSize(width: 50, height: 50)), fullScreenMode: .landscape) | |
| 299 | + | |
| 300 | + } | |
| 301 | + | |
| 302 | + // MARK: - UITableViewDelegate | |
| 303 | + func numberOfSections(in tableView: UITableView) -> Int { | |
| 304 | + return 1 | |
| 305 | + } | |
| 306 | + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { | |
| 307 | + return self.dataArray.count | |
| 308 | + } | |
| 309 | + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { | |
| 310 | + if let vodPlayBlockListModel = self.dataArray[indexPath.row] as? CNLiveVodPlayBlockListModel{ | |
| 311 | + if vodPlayBlockListModel.type == "5"{ | |
| 312 | + //点播详情 | |
| 313 | + //简介-标题描述,点赞评论分享 | |
| 314 | + guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveVodIntroductionCellIdentifier) as? CNLiveVodIntroductionCell | |
| 315 | + else { | |
| 316 | + let cell = CNLiveVodIntroductionCell() | |
| 317 | + return cell | |
| 318 | + } | |
| 319 | + cell.vodPlayBlockListModel = vodPlayBlockListModel | |
| 320 | + cell.updateCellBlock = {[weak self] isExpand,isFavorite,isCollection,type,vodPlayBlockListListModel in | |
| 321 | + guard let self = self else { return } | |
| 322 | + if type == "1"{ | |
| 323 | + //点击了详情按钮 | |
| 324 | + self.introducCellDetailBtnAction(vodPlayBlockListListModel: vodPlayBlockListListModel) | |
| 325 | + }else if type == "2"{ | |
| 326 | + //点击了点赞按钮 | |
| 327 | + self.vodSupport(vodPlayBlockListListModel: vodPlayBlockListListModel, isLiked: isFavorite) | |
| 328 | + }else if type == "3"{ | |
| 329 | + //点击了收藏按钮 | |
| 330 | + self.vodCollection(vodPlayBlockListListModel: vodPlayBlockListListModel, isCollectioned: isCollection) | |
| 331 | + }else if type == "4"{ | |
| 332 | + //点击了分享按钮 | |
| 333 | + self.vodShare(vodPlayBlockListListModel: vodPlayBlockListListModel) | |
| 334 | + } | |
| 335 | + } | |
| 336 | + return cell | |
| 337 | + | |
| 338 | + }else if vodPlayBlockListModel.type == "2"{//看点 | |
| 339 | + //看点 | |
| 340 | + guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveVodTrailersCellIdentifier) as? CNLiveVodTrailersCell | |
| 341 | + else { | |
| 342 | + let cell = CNLiveVodTrailersCell() | |
| 343 | + return cell | |
| 344 | + } | |
| 345 | + cell.vodPlayBlockListModel = vodPlayBlockListModel | |
| 346 | + cell.expandBlock = { [weak self] model in | |
| 347 | + guard let self = self else { return } | |
| 348 | + self.trailersCellDetailBtnAction(vodPlayBlockListModel: model) | |
| 349 | + } | |
| 350 | + cell.selectBlock = { [weak self] model in | |
| 351 | + guard let self = self else { return } | |
| 352 | + self.contentId = model.contentId | |
| 353 | + let isAblumVideo = model.model == "1" ? false : true | |
| 354 | + self.refreshVodData(isAblumVideo: isAblumVideo) | |
| 355 | + } | |
| 356 | + return cell | |
| 357 | + }else{ | |
| 358 | + | |
| 359 | + } | |
| 360 | + }else if let vodAlbumListBaseModel = self.dataArray[indexPath.row] as? CNLiveVodAlbumListBaseModel{ | |
| 361 | + //专辑列表 | |
| 362 | + guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveVodAlbumListCellIdentifier) as? CNLiveVodAlbumListCell | |
| 363 | + else { | |
| 364 | + let cell = CNLiveVodAlbumListCell() | |
| 365 | + return cell | |
| 366 | + } | |
| 367 | + cell.vodAlbumListBaseModel = vodAlbumListBaseModel | |
| 368 | + | |
| 369 | + cell.selectBlock = {[weak self] vodModel, index in | |
| 370 | + guard let self = self else { return } | |
| 371 | + self.contentId = vodModel.contentId | |
| 372 | + self.changeContentApi(vodModel: vodModel) | |
| 373 | + } | |
| 374 | + return cell | |
| 375 | + }else if let vodPlayShopModels = self.dataArray[indexPath.row] as? [CNLiveVodPlayShopModel]{ | |
| 376 | + //电商 | |
| 377 | + guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveVodPlayShopCellIdentifier) as? CNLiveVodPlayShopCell | |
| 378 | + else { | |
| 379 | + let cell = CNLiveVodPlayShopCell() | |
| 380 | + return cell | |
| 381 | + } | |
| 382 | + cell.vodPlayShopModels = vodPlayShopModels | |
| 383 | + cell.expandBlock = {[weak self] vodPlayShopModels in | |
| 384 | + guard let self = self else { return } | |
| 385 | + self.shopCellDetailBtnAction(vodPlayShopModels: vodPlayShopModels) | |
| 386 | + } | |
| 387 | + return cell | |
| 388 | + }else { | |
| 389 | + return UITableViewCell() | |
| 390 | + } | |
| 391 | + return UITableViewCell() | |
| 392 | + } | |
| 393 | + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { | |
| 394 | + if let vodPlayBlockListModel = self.dataArray[indexPath.row] as? CNLiveVodPlayBlockListModel{ | |
| 395 | + if vodPlayBlockListModel.type == "5"{ | |
| 396 | + //点播详情 | |
| 397 | + //简介-标题描述,点赞评论分享 | |
| 398 | + return 112 | |
| 399 | + }else if vodPlayBlockListModel.type == "2"{ | |
| 400 | + //看点 | |
| 401 | + return 25+106+76 | |
| 402 | + }else{ | |
| 403 | + } | |
| 404 | + | |
| 405 | + }else if let vodAlbumListBaseModel = self.dataArray[indexPath.row] as? CNLiveVodAlbumListBaseModel{ | |
| 406 | + //专辑列表 | |
| 407 | + return 50+15 | |
| 408 | + }else if let vodPlayShopModels = self.dataArray[indexPath.row] as? [CNLiveVodPlayShopModel]{ | |
| 409 | + //电商 | |
| 410 | + return 145.0 | |
| 411 | + }else { | |
| 412 | + | |
| 413 | + } | |
| 414 | + return 100 | |
| 415 | + } | |
| 416 | + | |
| 417 | + func addRefreshView() { | |
| 418 | + tableView.mj_header = MJRefreshNormalHeader.init(refreshingBlock: {[weak self] in | |
| 419 | + self!.refreshVodData(isAblumVideo: self!.isAblumVideo) | |
| 420 | + }) | |
| 421 | + } | |
| 422 | + | |
| 423 | + //更换contentId内容 play接口刷新看点和电商 | |
| 424 | + func changeContentApi(vodModel:CNLiveVodAlbumListModel){ | |
| 425 | + | |
| 426 | + //刷新url | |
| 427 | + CNLiveHomePageViewModel.shared.getVodVideoURL(contentId: vodModel.activityId) {[weak self] result, status in | |
| 428 | + guard let self = self else { return } | |
| 429 | + if status == .success | |
| 430 | + { | |
| 431 | + if let url = result as? String{ | |
| 432 | + self.playWithUrlAndTitle(url: url, title: vodModel.title) | |
| 433 | + } | |
| 434 | + }else{ | |
| 435 | + | |
| 436 | + } | |
| 437 | + } | |
| 438 | + | |
| 439 | + | |
| 440 | + //play接口刷新 看点和电商 | |
| 441 | + CNLiveDownSlideTool.getVodPlayApi(contentId: vodModel.contentId) {[weak self] result, status in | |
| 442 | + guard let self = self else { return } | |
| 443 | + if status == .success{ | |
| 444 | + if let vodPlayModel = result as? CNLiveVodPlayModel{ | |
| 445 | + self.vodPlayModel = vodPlayModel | |
| 446 | + self.configDataArray() | |
| 447 | + self.tableView.reloadData() | |
| 448 | + }else{ | |
| 449 | + | |
| 450 | + } | |
| 451 | + }else{ | |
| 452 | + | |
| 453 | + } | |
| 454 | + } | |
| 455 | + | |
| 456 | + } | |
| 457 | + | |
| 458 | + //播放url更换title | |
| 459 | + func playWithUrlAndTitle(url:String,title:String){ | |
| 460 | + self.url = URL(string: url) | |
| 461 | + var urls = [URL]() | |
| 462 | + urls.append(self.url!) | |
| 463 | + self.player.assetURLs = urls | |
| 464 | + self.player.playTheIndex(0) | |
| 465 | + self.controlView.showTitle(title, cover: UIImage.imageWithColor(color: .darkGray, size: CGSize(width: 50, height: 50)), fullScreenMode: .landscape) | |
| 466 | + } | |
| 467 | + | |
| 468 | + override var preferredStatusBarStyle: UIStatusBarStyle{ | |
| 469 | + return .lightContent | |
| 470 | + } | |
| 471 | + | |
| 472 | + override var prefersStatusBarHidden: Bool{ | |
| 473 | + return false | |
| 474 | + } | |
| 475 | + | |
| 476 | + override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation{ | |
| 477 | + return .none | |
| 478 | + } | |
| 479 | + | |
| 480 | + override var shouldAutorotate: Bool{ | |
| 481 | + return false | |
| 482 | + } | |
| 483 | + | |
| 484 | + override var supportedInterfaceOrientations: UIInterfaceOrientationMask{ | |
| 485 | + return .allButUpsideDown | |
| 486 | + } | |
| 487 | + | |
| 488 | + func shopCellDetailBtnAction(vodPlayShopModels:[CNLiveVodPlayShopModel]) { | |
| 489 | + bottomCommentShowContainView.isHidden = false | |
| 490 | + | |
| 491 | + let detailBgView = CNLiveVodShopBottomView(frame: bottomCommentShowContainView.bounds) | |
| 492 | + detailBgView.backgroundColor = .white | |
| 493 | + bottomCommentShowContainView.addSubview(detailBgView) | |
| 494 | + detailBgView.vodPlayShopModels = vodPlayShopModels | |
| 495 | + detailBgView.expandHideBlock = {[weak self] in | |
| 496 | + guard let self = self else { return } | |
| 497 | + self.bottomCommentShowContainView.removeAllSubviews() | |
| 498 | + self.bottomCommentShowContainView.isHidden = true | |
| 499 | + } | |
| 500 | + | |
| 501 | + } | |
| 502 | + // MARK: - 看点cell展开 | |
| 503 | + func trailersCellDetailBtnAction(vodPlayBlockListModel:CNLiveVodPlayBlockListModel) { | |
| 504 | + bottomCommentShowContainView.isHidden = false | |
| 505 | + | |
| 506 | + let detailBgView = CNLiveVodCellBottomView(frame: bottomCommentShowContainView.bounds) | |
| 507 | + detailBgView.backgroundColor = .white | |
| 508 | + bottomCommentShowContainView.addSubview(detailBgView) | |
| 509 | + detailBgView.vodPlayBlockListModel = vodPlayBlockListModel | |
| 510 | + detailBgView.expandHideBlock = {[weak self] in | |
| 511 | + guard let self = self else { return } | |
| 512 | + self.bottomCommentShowContainView.removeAllSubviews() | |
| 513 | + self.bottomCommentShowContainView.isHidden = true | |
| 514 | + } | |
| 515 | + detailBgView.updateBlock = {[weak self] seleIdx,model in | |
| 516 | + guard let self = self else { return } | |
| 517 | + self.contentId = model.contentId | |
| 518 | + var isAblumVideo = false | |
| 519 | + if model.model == "1"{ | |
| 520 | + isAblumVideo = false | |
| 521 | + }else{ | |
| 522 | + isAblumVideo = true | |
| 523 | + } | |
| 524 | + self.refreshVodData(isAblumVideo: isAblumVideo) | |
| 525 | + } | |
| 526 | + } | |
| 527 | + // MARK: - 简介cell点击事件 | |
| 528 | + func introducCellDetailBtnAction(vodPlayBlockListListModel:CNLiveVodPlayBlockListListModel) { | |
| 529 | + bottomCommentShowContainView.isHidden = false | |
| 530 | + | |
| 531 | + let detailBgView = UIView(frame: bottomCommentShowContainView.bounds) | |
| 532 | + detailBgView.backgroundColor = .white | |
| 533 | + bottomCommentShowContainView.addSubview(detailBgView) | |
| 534 | + | |
| 535 | + let vodMdl = vodPlayBlockListListModel | |
| 536 | + | |
| 537 | + let titleLbl = UILabel() | |
| 538 | + titleLbl.font = BoldFont_15 | |
| 539 | + titleLbl.textColor = HexColor("#000102") | |
| 540 | + titleLbl.text = vodMdl.title | |
| 541 | + bottomCommentShowContainView.addSubview(titleLbl) | |
| 542 | + | |
| 543 | + titleLbl.snp.makeConstraints { make in | |
| 544 | + make.left.equalTo(10) | |
| 545 | + make.top.equalTo(16) | |
| 546 | + make.width.lessThanOrEqualTo(KSreenWidth-50) | |
| 547 | + } | |
| 548 | + | |
| 549 | + let detailLbl = UILabel() | |
| 550 | + detailLbl.font = Font_10 | |
| 551 | + detailLbl.textColor = HexColor("#999999") | |
| 552 | + detailLbl.text = "详情" | |
| 553 | + bottomCommentShowContainView.addSubview(detailLbl) | |
| 554 | + detailLbl.snp.makeConstraints { make in | |
| 555 | + make.left.equalTo(titleLbl.snp.right).offset(15) | |
| 556 | + make.top.equalTo(20.5) | |
| 557 | + make.width.equalTo(20) | |
| 558 | + make.height.equalTo(14) | |
| 559 | + } | |
| 560 | + | |
| 561 | + let descLbl = UITextView() | |
| 562 | + descLbl.font = Font_13 | |
| 563 | + descLbl.textColor = HexColor("#999999") | |
| 564 | + descLbl.text = vodMdl.desc | |
| 565 | + descLbl.width = KSreenWidth-20 | |
| 566 | + bottomCommentShowContainView.addSubview(descLbl) | |
| 567 | + | |
| 568 | + descLbl.snp.makeConstraints { make in | |
| 569 | + make.left.equalTo(10) | |
| 570 | + make.top.equalTo(titleLbl.snp.bottom).offset(10) | |
| 571 | + make.right.equalToSuperview().offset(-20) | |
| 572 | + make.bottom.equalToSuperview().offset(-15-50-10) | |
| 573 | + } | |
| 574 | + | |
| 575 | + let expandBtn = UIButton.init(type: .custom) | |
| 576 | + expandBtn.backgroundColor = .clear | |
| 577 | + expandBtn.setImage(UIImage(named: "home_player_unexpand"), for: .normal) | |
| 578 | + expandBtn.addTarget(self, action: #selector(expandBtnAction), for: .touchUpInside) | |
| 579 | + bottomCommentShowContainView.addSubview(expandBtn) | |
| 580 | + expandBtn.snp.makeConstraints { make in | |
| 581 | + make.centerX.equalToSuperview() | |
| 582 | + make.bottom.equalToSuperview().offset(-15) | |
| 583 | + make.width.equalTo(50) | |
| 584 | + make.height.equalTo(50) | |
| 585 | + } | |
| 586 | + | |
| 587 | + } | |
| 588 | + | |
| 589 | + func vodSupport(vodPlayBlockListListModel:CNLiveVodPlayBlockListListModel,isLiked:Bool){ | |
| 590 | + CNLiveVodPlayViewModel.vodSupport(contentId: vodPlayBlockListListModel.pid, support: isLiked) {[weak self] result, status in | |
| 591 | + guard let self = self else { return } | |
| 592 | + if status == .success{ | |
| 593 | + | |
| 594 | + } | |
| 595 | + } | |
| 596 | + } | |
| 597 | + func vodCollection(vodPlayBlockListListModel:CNLiveVodPlayBlockListListModel,isCollectioned:Bool){ | |
| 598 | + let type = isCollectioned ? "1" : "2" | |
| 599 | + CNLiveVodPlayViewModel.vodCollection(type: type, vodPlayBlockListListModel: vodPlayBlockListListModel) {[weak self] result, status in | |
| 600 | + guard let self = self else { return } | |
| 601 | + if status == .success{ | |
| 602 | + //不改数据了 | |
| 603 | + } | |
| 604 | + } | |
| 605 | + } | |
| 606 | + func vodShare(vodPlayBlockListListModel:CNLiveVodPlayBlockListListModel){ | |
| 607 | + //vodPlayBlockListListModel.img | |
| 608 | + //vodPlayBlockListListModel.title | |
| 609 | + //vodPlayBlockListListModel.subTitle | |
| 610 | + // | |
| 611 | + //http://wjjh5.cnlive.com/cnYjzg.html?id=2&version=1.0.9&isShowTitle=true&plat=i&wjjFrom=apple&backgroundColor=%234B8AF5&wjjToken=ACGspwyhX6xbuJ27P0flZOejyKjcS70g7VegVKRgAWPUzacEKgXz2JcmlAVoc5oG&appId=769_li40lrkt53&channelName=yjzg&shareSid=352610&isApp=false&ver=1.0.9.24.03.27.14&sid=352610&wjjUUID=B849E3C36DF04D89B0C8DB9322B69B51_1711520943&voteId=AS5FFqIhAAAQAAAAAAAAAA==&isWjjReport=true | |
| 612 | + //https://wjjh5.cnlive.com/apkdownloadYuanma.php | |
| 613 | + CNLiveShareManager.showShareViewWithParam(forShareTitle: "标题111", shareUrl: "http://wjjh5.cnlive.com/cnYjzg.html?id=2&version=1.0.9&isShowTitle=true&plat=i&wjjFrom=apple&backgroundColor=%234B8AF5&wjjToken=ACGspwyhX6xbuJ27P0flZOejyKjcS70g7VegVKRgAWPUzacEKgXz2JcmlAVoc5oG&appId=769_li40lrkt53&channelName=yjzg&shareSid=352610&isApp=false&ver=1.0.9.24.03.27.14&sid=352610&wjjUUID=B849E3C36DF04D89B0C8DB9322B69B51_1711520943&voteId=AS5FFqIhAAAQAAAAAAAAAA==&isWjjReport=true", shareDesc: "描述111", shareImage: vodPlayBlockListListModel.img, screenFull: false, hiddenWjj: true, hiddenQQ: false, hiddenWB: true, hiddenLifeCircle: true, hiddenWechatCircle: false, hiddenWechat: false, hiddenSafari: false, formVC: currentViewController(), topImage: [], topTitles: [], platformType: .all) { title in | |
| 614 | + | |
| 615 | + } completerBlock: { resultType, platformType, typeString in | |
| 616 | + if resultType == .succ{ | |
| 617 | + | |
| 618 | + } | |
| 619 | + } | |
| 620 | + } | |
| 621 | + | |
| 622 | + // MARK: - ButtonAction | |
| 623 | + | |
| 624 | + @objc func expandBtnAction() { | |
| 625 | + //详情 收起 | |
| 626 | + self.bottomCommentShowContainView.removeAllSubviews() | |
| 627 | + self.bottomCommentShowContainView.isHidden = true | |
| 628 | + } | |
| 629 | + @objc func bottomCommentViewTapAction() { | |
| 630 | + bottomCommentShowContainView.isHidden = false | |
| 631 | + //评论 | |
| 632 | + CNLiveShortVideoCommentListView.showVideoCommentListView(pid: self.vodPlayModel?.contentId ?? "", contentSid: UserInfoManager.shared.userInfo.uid,containView:self.bottomCommentShowContainView, result: { commentModel in | |
| 633 | + print("\(commentModel)") | |
| 634 | + }, close: { | |
| 635 | + self.bottomCommentShowContainView.isHidden = true | |
| 636 | + }) | |
| 637 | + | |
| 638 | + } | |
| 639 | + | |
| 640 | + @objc func ClickBackBtn() { | |
| 641 | + | |
| 642 | + let viewControllers = self.navigationController?.viewControllers | |
| 643 | + if viewControllers?.count ?? 0 > 1 { | |
| 644 | + if viewControllers?.last == self { | |
| 645 | + self.navigationController!.popViewController(animated: true) | |
| 646 | + } | |
| 647 | + } | |
| 648 | + } | |
| 649 | + | |
| 650 | + func destroyPlayer(){ | |
| 651 | + self.player.stop() | |
| 652 | + } | |
| 653 | + | |
| 654 | + func refreshVodData(isAblumVideo:Bool){ | |
| 655 | + CNLiveDownSlideTool.getVodData(contentId: self.contentId, isAblumVideo: isAblumVideo) {[weak self] vodPlayModel, contentId,url, result, status in | |
| 656 | + if status == .success{ | |
| 657 | + self!.vodPlayModel = vodPlayModel | |
| 658 | + self!.contentId = contentId | |
| 659 | + if let vodAlbumListBaseModel = result{ | |
| 660 | + self!.vodAlbumListBaseModel = vodAlbumListBaseModel | |
| 661 | + } | |
| 662 | + self!.url = URL(string: url) | |
| 663 | + self!.configDataArray() | |
| 664 | + self!.tableView.mj_header?.endRefreshing() | |
| 665 | + self!.tableView.reloadData() | |
| 666 | + self!.playWithUrlAndTitle(url: url, title: "") | |
| 667 | + }else{ | |
| 668 | + | |
| 669 | + } | |
| 670 | + } | |
| 671 | + } | |
| 672 | + // MARK: - 点播play接口 | |
| 673 | + /* | |
| 674 | + func requestGetVodPlayApi(contentId:String){ | |
| 675 | + CNLiveHomePageViewModel.requestGetVodPlayApi(contentId: contentId, sid: UserInfoManager.shared.userInfo.uid, resultBlock: { result, status in | |
| 676 | + if status == .success{ | |
| 677 | + if let vodPlayMpdel = result as? CNLiveVodPlayModel{ | |
| 678 | + if let albumMdl = vodPlayMpdel.album{ | |
| 679 | + //专辑 | |
| 680 | + self.requestGetVodPlay1Api(contentId: vodPlayMpdel.contentId) | |
| 681 | + //记录当前播放集数的ContentId | |
| 682 | + self.contentId = vodPlayMpdel.contentId | |
| 683 | + self.requestGetAlbumMsgApi(contentId: vodPlayMpdel.contentId) | |
| 684 | + }else{ | |
| 685 | + //单集 | |
| 686 | + | |
| 687 | + } | |
| 688 | + } | |
| 689 | + } | |
| 690 | + }) | |
| 691 | + } | |
| 692 | + //专辑的单集内容 | |
| 693 | + func requestGetVodPlay1Api(contentId:String){ | |
| 694 | + CNLiveHomePageViewModel.requestGetVodPlayApi(contentId: contentId, sid: UserInfoManager.shared.userInfo.uid, resultBlock: { result, status in | |
| 695 | + if status == .success{ | |
| 696 | + if let vodPlayMpdel = result as? CNLiveVodPlayModel{ | |
| 697 | + if let albumMdl = vodPlayMpdel.album{ | |
| 698 | + //专辑 | |
| 699 | + | |
| 700 | + }else{ | |
| 701 | + //单集 | |
| 702 | + | |
| 703 | + } | |
| 704 | + } | |
| 705 | + } | |
| 706 | + }) | |
| 707 | + } | |
| 708 | + */ | |
| 709 | + // MARK: - 专辑内容详情 | |
| 710 | +// func requestGetAlbumMsgApi(contentId:String){ | |
| 711 | +// CNLiveHomePageViewModel.requstWithVodAlbumMsgVideo(aid: contentId, resultBlock: { result, status in | |
| 712 | +// if status == .success{ | |
| 713 | +// if let vodPlayMpdel = result as? CNLiveVodPlayModel{ | |
| 714 | +// //专辑详情 | |
| 715 | +// } | |
| 716 | +// } | |
| 717 | +// }) | |
| 718 | +// } | |
| 719 | + | |
| 720 | + deinit { | |
| 721 | + print("vod deinit") | |
| 722 | + } | |
| 723 | +} | ... | ... |
metaCode/Classes/Main/HuBiLieHomePage/Model/CNLiveHomeSearchHistoryModel.swift
0 → 100644
| 1 | +// | |
| 2 | +// CNLiveHomeSearchHistoryModel.swift | |
| 3 | +// metaCode | |
| 4 | +// | |
| 5 | +// Created by zx on 2025/3/8. | |
| 6 | +// | |
| 7 | + | |
| 8 | +import Foundation | |
| 9 | + | |
| 10 | +class CNLiveHomeSearchHistoryModel:BaseModel{ | |
| 11 | + var history = [String]() | |
| 12 | + ///电商cell高度 | |
| 13 | + var cellH:CGFloat = 145.0 | |
| 14 | + | |
| 15 | +} | |
| 16 | +class CNLiveHomeSearchResultListBaseModel:BaseModel{ | |
| 17 | + var endRow = 0 | |
| 18 | + var firstPage = 0 | |
| 19 | + var hasNextPage = false | |
| 20 | + var nextPage = 0 | |
| 21 | + var hasPreviousPage = false | |
| 22 | + var isFirstPage = true | |
| 23 | + var isLastPage = true | |
| 24 | + var lastPage = 0 | |
| 25 | + var list = [CNLiveHomeSearchResultListModel]() | |
| 26 | + var navigateFirstPage = 0 | |
| 27 | + var navigateLastPage = 0 | |
| 28 | + var navigatePages = 0 | |
| 29 | + var navigatepageNums:Array<Any> = [] | |
| 30 | + var pageNum = 0 | |
| 31 | + var pageSize = 0 | |
| 32 | + var pages = 0 | |
| 33 | + var prePage = 0 | |
| 34 | + var size = 0 | |
| 35 | + var startRow = 0 | |
| 36 | + var total = 0 | |
| 37 | +} | |
| 38 | + | |
| 39 | +class CNLiveHomeSearchResultListModel:BaseModel{ | |
| 40 | + //专辑 点播 | |
| 41 | + var albumId = ""//专辑 | |
| 42 | + var icon = ""//专辑 | |
| 43 | + var name = ""//专辑 | |
| 44 | + var model = ""//专辑 //点播 | |
| 45 | + var product:CNLiveAlbumProductModel?//专辑//点播 | |
| 46 | + var title = ""//点播 | |
| 47 | + var subTitle = ""//专辑//点播 | |
| 48 | + var status = ""//点播 | |
| 49 | + var poster = ""//点播 | |
| 50 | + var contentId = ""//点播 | |
| 51 | + var pid = ""//点播 | |
| 52 | + var publishTime = ""//点播 | |
| 53 | + | |
| 54 | +} | |
| 55 | + | |
| 56 | +//class CNLiveHomeSearchHistoryModelLayout:NSObject{ | |
| 57 | +// | |
| 58 | +// ///cell高度 | |
| 59 | +// var cellH:CGFloat = 0.0 | |
| 60 | +// | |
| 61 | +// //slideModel | |
| 62 | +// var _historyModel : CNLiveHomeSearchHistoryModel? | |
| 63 | +// var historyModel : CNLiveHomeSearchHistoryModel? { | |
| 64 | +// get{ | |
| 65 | +// _historyModel | |
| 66 | +// } | |
| 67 | +// set{ | |
| 68 | +// _historyModel = newValue | |
| 69 | +// } | |
| 70 | +// } | |
| 71 | +// | |
| 72 | +// init(model:CNLiveHomeSearchHistoryModel){ | |
| 73 | +// super.init() | |
| 74 | +// self.historyModel = model | |
| 75 | +// self.historyModel?.cellH = | |
| 76 | +// } | |
| 77 | +// func getCellHModel()->CNLiveHomeSearchHistoryModel{ | |
| 78 | +// return historyModel! | |
| 79 | +// } | |
| 80 | +// | |
| 81 | +//} | ... | ... |
metaCode/Classes/Main/HuBiLieHomePage/Model/CNLiveHomeSearchHotModel.swift
0 → 100644
metaCode/Classes/Main/HuBiLieHomePage/Model/CNLiveHomeShopCategoryModel.swift
0 → 100644
| 1 | +// | |
| 2 | +// CNLiveHomeShopCategoryModel.swift | |
| 3 | +// metaCode | |
| 4 | +// | |
| 5 | +// Created by zx on 2025/3/13. | |
| 6 | +// | |
| 7 | + | |
| 8 | +import Foundation | |
| 9 | +class CNLiveHomeShopCategoryModel:BaseModel{ | |
| 10 | + var state = "" | |
| 11 | + var group = [CNLiveHomeShopCategoryGroupModel]() | |
| 12 | +} | |
| 13 | +class CNLiveHomeShopCategoryGroupModel:BaseModel{ | |
| 14 | + var simg = "" | |
| 15 | + var id = "" | |
| 16 | + var istop = "" | |
| 17 | + var title = "" | |
| 18 | + var level = "" | |
| 19 | + var pid = "" | |
| 20 | + ///二级分类列表 | |
| 21 | + var child = [CNLiveShopClassifyModel]() | |
| 22 | +} | ... | ... |
metaCode/Classes/Main/HuBiLieHomePage/Model/CNLiveVodAlbumListModel.swift
0 → 100644
| 1 | +// | |
| 2 | +// CNLiveVodAlbumListModel.swift | |
| 3 | +// metaCode | |
| 4 | +// | |
| 5 | +// Created by zx on 2025/3/1. | |
| 6 | +// | |
| 7 | +// 专辑视频列表详情(播放地址 ,点赞数等信息) | |
| 8 | + | |
| 9 | +import Foundation | |
| 10 | + | |
| 11 | +class CNLiveVodAlbumListBaseModel:BaseModel{ | |
| 12 | + var endRow = 0 | |
| 13 | + var firstPage = 0 | |
| 14 | + var hasNextPage = false | |
| 15 | + var nextPage = 0 | |
| 16 | + var hasPreviousPage = false | |
| 17 | + var isFirstPage = true | |
| 18 | + var isLastPage = true | |
| 19 | + var lastPage = 0 | |
| 20 | + var list = [CNLiveVodAlbumListModel]() | |
| 21 | + var navigateFirstPage = 0 | |
| 22 | + var navigateLastPage = 0 | |
| 23 | + var navigatePages = 0 | |
| 24 | + var navigatepageNums:Array<Any> = [] | |
| 25 | + var pageNum = 0 | |
| 26 | + var pageSize = 0 | |
| 27 | + var pages = 0 | |
| 28 | + var prePage = 0 | |
| 29 | + var size = 0 | |
| 30 | + var startRow = 0 | |
| 31 | + var total = 0 | |
| 32 | + | |
| 33 | + //非接口数据 | |
| 34 | + var cellH:CGFloat = 0.0 | |
| 35 | + var isExpand = false//是否展开详情简介 | |
| 36 | + | |
| 37 | +} | |
| 38 | +class CNLiveVodAlbumListModel:BaseModel{ | |
| 39 | + var title = "" | |
| 40 | + var albumId = "" | |
| 41 | + var albumName = "" | |
| 42 | + var actor = "" | |
| 43 | + var spId = "" | |
| 44 | + var spName = "" | |
| 45 | + var modelId = "" | |
| 46 | + var time = "" | |
| 47 | + var img = "" | |
| 48 | + var poster = "" | |
| 49 | + var counts = "" | |
| 50 | + var description = "" | |
| 51 | + var viewCounts = "" | |
| 52 | + var schedule = "" | |
| 53 | + var liveType = "" | |
| 54 | + var downloadType = "" | |
| 55 | + var activityId = "" | |
| 56 | + var isHorizontalScreen = "" | |
| 57 | + var comments = "" | |
| 58 | + var chapterId = "" | |
| 59 | + var contentId = "" | |
| 60 | + var duration = "" | |
| 61 | + var shareUrl = "" | |
| 62 | + var fileSize = "" | |
| 63 | + var cmccActiveId = "" | |
| 64 | + var productId = "" | |
| 65 | + var productType = "" | |
| 66 | + var isStudy = "" | |
| 67 | + var playTime = "" | |
| 68 | + var tool :CNLiveAlbumListToolModel? | |
| 69 | + var product:CNLiveAlbumProductModel? | |
| 70 | + | |
| 71 | + //非接口数据-专辑详情 | |
| 72 | + var vodAlbumMsgModel:CNLiveVodAlbumMsgModel? | |
| 73 | +// var shortTitle = "" | |
| 74 | +// var subTitle = "" | |
| 75 | +// var model = "" | |
| 76 | +// var thirdUrl = "" | |
| 77 | +// var colours = "" | |
| 78 | +// var address = "" | |
| 79 | +// var source = "" | |
| 80 | +// var sourceName = "" | |
| 81 | +// var pid = "" | |
| 82 | +// var witnessId = "" | |
| 83 | +// var videoUrl = "" | |
| 84 | +// var number = "" | |
| 85 | +// var goods = "" | |
| 86 | +// var icon : CNLiveAlbumListIconModel? | |
| 87 | +// var tagId = "" | |
| 88 | +// var tagName = "" | |
| 89 | +// var activityEndTime = "" | |
| 90 | +// var h5Url = "" | |
| 91 | +// var album:CNLiveAlbumListAlbumModel? | |
| 92 | +// var block = "" | |
| 93 | +// var isHorizontalScreen = "" | |
| 94 | +// var videoShowType = "" | |
| 95 | +// //非接口数据 | |
| 96 | +// var albumMsgModel:CNLiveAlbumMsgModel? | |
| 97 | +} | |
| 98 | +//class CNLiveAlbumListIconModel:BaseModel{ | |
| 99 | +// var face = "" | |
| 100 | +// var id = "" | |
| 101 | +// var name = "" | |
| 102 | +// var type = "" | |
| 103 | +// var desc = "" | |
| 104 | +// var focused = false | |
| 105 | +// var fansNum = "" | |
| 106 | +// var authInfos = "" | |
| 107 | +//} | |
| 108 | +//class CNLiveAlbumListToolModel:BaseModel{ | |
| 109 | +// var commentsNum = "" | |
| 110 | +// var commentList = "" | |
| 111 | +// var collectioned = false | |
| 112 | +// var likeList = "" | |
| 113 | +// var liked = false | |
| 114 | +// var likesNum = "" | |
| 115 | +// var voteNum = "" | |
| 116 | +// var shareNum = "" | |
| 117 | +// var playNum = "" | |
| 118 | +// var collectionNum = "" | |
| 119 | +// var sort = "" | |
| 120 | +// var voted = false | |
| 121 | +//} | |
| 122 | +//class CNLiveAlbumListAlbumModel:BaseModel{ | |
| 123 | +// var albumId = "" | |
| 124 | +// var icon = "" | |
| 125 | +// var name = "" | |
| 126 | +// var model = "" | |
| 127 | +// var product:CNLiveAlbumProductModel? | |
| 128 | +//} | |
| 129 | + | ... | ... |
metaCode/Classes/Main/HuBiLieHomePage/Model/CNLiveVodAlbumMsgModel.swift
0 → 100644
| 1 | +// | |
| 2 | +// CNLiveVodAlbumMsgModel.swift | |
| 3 | +// metaCode | |
| 4 | +// | |
| 5 | +// Created by zx on 2025/3/1. | |
| 6 | +// | |
| 7 | + | |
| 8 | +import Foundation | |
| 9 | + | |
| 10 | +class CNLiveVodAlbumMsgModel:BaseModel{ | |
| 11 | + var albumId = "" | |
| 12 | + var albumImg = "" | |
| 13 | + var albumName = ""//专辑名称 | |
| 14 | + var product:CNLiveAlbumProductModel? | |
| 15 | + var desc = "" | |
| 16 | + var descImg = "" | |
| 17 | + var subTitle = "" | |
| 18 | + var actor = "" | |
| 19 | + var actorName = "" | |
| 20 | + var time = "" | |
| 21 | + var sp:CNLiveVodPlaySPModel? | |
| 22 | + var siteId = "" | |
| 23 | + var episodeNow = "" | |
| 24 | + var episodeAll = "" | |
| 25 | + var subscriptions = "" | |
| 26 | + var subscribe = false | |
| 27 | + var episodeLast = 1//上次播放集数 | |
| 28 | + var contentIdLast = ""//上次播放集的id | |
| 29 | + var collection = false //是否追剧 | |
| 30 | + var charity:CNLiveVodPlayCharityModel? | |
| 31 | +} | ... | ... |