Commit 184f9c5314f29af3a8ebe5addad2ac4332c17df7

Authored by liushiyu
1 parent 70545b57

专辑跳转方法添加

@@ -49,20 +49,23 @@ target 'metaCode' do @@ -49,20 +49,23 @@ target 'metaCode' do
49 #播放器 49 #播放器
50 pod 'ZFPlayer', :git => 'https://gitee.com/mirrors/ZFPlayer.git' 50 pod 'ZFPlayer', :git => 'https://gitee.com/mirrors/ZFPlayer.git'
51 pod 'ZFPlayer/ControlView', :git => 'https://gitee.com/mirrors/ZFPlayer.git' 51 pod 'ZFPlayer/ControlView', :git => 'https://gitee.com/mirrors/ZFPlayer.git'
52 -# pod 'ZFPlayer/AVPlayer', :git => 'https://gitee.com/mirrors/ZFPlayer.git' 52 + pod 'ZFPlayer/AVPlayer', :git => 'https://gitee.com/mirrors/ZFPlayer.git'
53 pod 'ZFPlayer/ijkplayer', :git => 'https://gitee.com/mirrors/ZFPlayer.git' 53 pod 'ZFPlayer/ijkplayer', :git => 'https://gitee.com/mirrors/ZFPlayer.git'
54 - #支付  
55 - #pod 'CNLivePayCostModule'  
56 #分享 54 #分享
57 #pod 'CNLiveShareToolKit' 55 #pod 'CNLiveShareToolKit'
  56 + #网家家输入组件
  57 + pod 'CNLiveCustomUI/CNLiveContentToolTextView'
  58 + #业务工具库
  59 + pod 'CNLiveBusinessTools'
58 60
59 #图片浏览器 61 #图片浏览器
60 - pod 'SKPhotoBrowser' 62 + pod 'SKPhotoBrowser', :git => 'https://gitee.com/mirrors/SKPhotoBrowser.git'
61 63
62 #视频播放器 64 #视频播放器
63 pod 'PLPlayerKit' 65 pod 'PLPlayerKit'
64 #UI框架 66 #UI框架
65 - pod 'QMUIKit' 67 +# pod 'QMUIKit'
  68 + pod 'YYWebImage', :git => 'https://gitee.com/mirrors/YYWebImage.git'
66 69
67 target 'metaCodeTests' do 70 target 'metaCodeTests' do
68 inherit! :search_paths 71 inherit! :search_paths
metaCode.xcodeproj/project.pbxproj
@@ -158,9 +158,10 @@ @@ -158,9 +158,10 @@
158 7939B0732B47F12F005AE981 /* CNLiveShortVideoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7939B0722B47F12F005AE981 /* CNLiveShortVideoViewController.swift */; }; 158 7939B0732B47F12F005AE981 /* CNLiveShortVideoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7939B0722B47F12F005AE981 /* CNLiveShortVideoViewController.swift */; };
159 7939B0752B47F1B9005AE981 /* CNLiveShortVideoListTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7939B0742B47F1B9005AE981 /* CNLiveShortVideoListTableViewCell.swift */; }; 159 7939B0752B47F1B9005AE981 /* CNLiveShortVideoListTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7939B0742B47F1B9005AE981 /* CNLiveShortVideoListTableViewCell.swift */; };
160 7939B0772B47F88A005AE981 /* CNLiveShortVideoControlView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7939B0762B47F88A005AE981 /* CNLiveShortVideoControlView.swift */; }; 160 7939B0772B47F88A005AE981 /* CNLiveShortVideoControlView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7939B0762B47F88A005AE981 /* CNLiveShortVideoControlView.swift */; };
161 - 7939B0792B47FC33005AE981 /* CNLiveShortVideoCustomControlView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7939B0782B47FC33005AE981 /* CNLiveShortVideoCustomControlView.swift */; };  
162 793CAF522A58FCA200882EF4 /* CNLiveMineExchangeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 793CAF512A58FCA200882EF4 /* CNLiveMineExchangeViewController.swift */; }; 161 793CAF522A58FCA200882EF4 /* CNLiveMineExchangeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 793CAF512A58FCA200882EF4 /* CNLiveMineExchangeViewController.swift */; };
163 794294A72B4D18EC008AAFA0 /* CNLiveShortVideoContentListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 794294A62B4D18EC008AAFA0 /* CNLiveShortVideoContentListView.swift */; }; 162 794294A72B4D18EC008AAFA0 /* CNLiveShortVideoContentListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 794294A62B4D18EC008AAFA0 /* CNLiveShortVideoContentListView.swift */; };
  163 + 794294AA2B4D4381008AAFA0 /* CNLiveShortVideoCommentListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 794294A92B4D4381008AAFA0 /* CNLiveShortVideoCommentListView.swift */; };
  164 + 794294AC2B4D44C0008AAFA0 /* CNLiveShortVideoCommentLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 794294AB2B4D44C0008AAFA0 /* CNLiveShortVideoCommentLayout.swift */; };
164 794BC1652AF9E70D00A68C74 /* CNLiveShopOrderSendViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 794BC1642AF9E70D00A68C74 /* CNLiveShopOrderSendViewController.swift */; }; 165 794BC1652AF9E70D00A68C74 /* CNLiveShopOrderSendViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 794BC1642AF9E70D00A68C74 /* CNLiveShopOrderSendViewController.swift */; };
165 794FF1052B01FC8800385E85 /* CNLiveShopOrderSearchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 794FF1042B01FC8800385E85 /* CNLiveShopOrderSearchViewController.swift */; }; 166 794FF1052B01FC8800385E85 /* CNLiveShopOrderSearchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 794FF1042B01FC8800385E85 /* CNLiveShopOrderSearchViewController.swift */; };
166 794FF1072B01FC9800385E85 /* CNLiveShopOrderSearchListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 794FF1062B01FC9800385E85 /* CNLiveShopOrderSearchListViewController.swift */; }; 167 794FF1072B01FC9800385E85 /* CNLiveShopOrderSearchListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 794FF1062B01FC9800385E85 /* CNLiveShopOrderSearchListViewController.swift */; };
@@ -196,6 +197,7 @@ @@ -196,6 +197,7 @@
196 799172362AF08D4500DC01A8 /* CNLiveShopBaseModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 799172352AF08D4500DC01A8 /* CNLiveShopBaseModel.swift */; }; 197 799172362AF08D4500DC01A8 /* CNLiveShopBaseModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 799172352AF08D4500DC01A8 /* CNLiveShopBaseModel.swift */; };
197 799172382AF090CD00DC01A8 /* CNLiveShopBodyListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 799172372AF090CD00DC01A8 /* CNLiveShopBodyListView.swift */; }; 198 799172382AF090CD00DC01A8 /* CNLiveShopBodyListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 799172372AF090CD00DC01A8 /* CNLiveShopBodyListView.swift */; };
198 7991723A2AF091E100DC01A8 /* CNLiveShopOrderListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 799172392AF091E100DC01A8 /* CNLiveShopOrderListViewController.swift */; }; 199 7991723A2AF091E100DC01A8 /* CNLiveShopOrderListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 799172392AF091E100DC01A8 /* CNLiveShopOrderListViewController.swift */; };
  200 + 7999415C2B4E8E8E0014C721 /* CNLiveRefresh.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7999415B2B4E8E8E0014C721 /* CNLiveRefresh.swift */; };
199 79A212C02B0B5C5400BFA8E3 /* CNLiveShopCouponManagerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79A212BF2B0B5C5400BFA8E3 /* CNLiveShopCouponManagerViewController.swift */; }; 201 79A212C02B0B5C5400BFA8E3 /* CNLiveShopCouponManagerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79A212BF2B0B5C5400BFA8E3 /* CNLiveShopCouponManagerViewController.swift */; };
200 79A212C22B0B5D0700BFA8E3 /* CNLiveShopBodyCouponManagerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79A212C12B0B5D0700BFA8E3 /* CNLiveShopBodyCouponManagerView.swift */; }; 202 79A212C22B0B5D0700BFA8E3 /* CNLiveShopBodyCouponManagerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79A212C12B0B5D0700BFA8E3 /* CNLiveShopBodyCouponManagerView.swift */; };
201 79A267832AF8D7BC0088D9F6 /* CNLiveShopBodyCustomView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79A267822AF8D7BC0088D9F6 /* CNLiveShopBodyCustomView.swift */; }; 203 79A267832AF8D7BC0088D9F6 /* CNLiveShopBodyCustomView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79A267822AF8D7BC0088D9F6 /* CNLiveShopBodyCustomView.swift */; };
@@ -422,9 +424,10 @@ @@ -422,9 +424,10 @@
422 7939B0722B47F12F005AE981 /* CNLiveShortVideoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShortVideoViewController.swift; sourceTree = "<group>"; }; 424 7939B0722B47F12F005AE981 /* CNLiveShortVideoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShortVideoViewController.swift; sourceTree = "<group>"; };
423 7939B0742B47F1B9005AE981 /* CNLiveShortVideoListTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShortVideoListTableViewCell.swift; sourceTree = "<group>"; }; 425 7939B0742B47F1B9005AE981 /* CNLiveShortVideoListTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShortVideoListTableViewCell.swift; sourceTree = "<group>"; };
424 7939B0762B47F88A005AE981 /* CNLiveShortVideoControlView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShortVideoControlView.swift; sourceTree = "<group>"; }; 426 7939B0762B47F88A005AE981 /* CNLiveShortVideoControlView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShortVideoControlView.swift; sourceTree = "<group>"; };
425 - 7939B0782B47FC33005AE981 /* CNLiveShortVideoCustomControlView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShortVideoCustomControlView.swift; sourceTree = "<group>"; };  
426 793CAF512A58FCA200882EF4 /* CNLiveMineExchangeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveMineExchangeViewController.swift; sourceTree = "<group>"; }; 427 793CAF512A58FCA200882EF4 /* CNLiveMineExchangeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveMineExchangeViewController.swift; sourceTree = "<group>"; };
427 794294A62B4D18EC008AAFA0 /* CNLiveShortVideoContentListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShortVideoContentListView.swift; sourceTree = "<group>"; }; 428 794294A62B4D18EC008AAFA0 /* CNLiveShortVideoContentListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShortVideoContentListView.swift; sourceTree = "<group>"; };
  429 + 794294A92B4D4381008AAFA0 /* CNLiveShortVideoCommentListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShortVideoCommentListView.swift; sourceTree = "<group>"; };
  430 + 794294AB2B4D44C0008AAFA0 /* CNLiveShortVideoCommentLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShortVideoCommentLayout.swift; sourceTree = "<group>"; };
428 794BC1642AF9E70D00A68C74 /* CNLiveShopOrderSendViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopOrderSendViewController.swift; sourceTree = "<group>"; }; 431 794BC1642AF9E70D00A68C74 /* CNLiveShopOrderSendViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopOrderSendViewController.swift; sourceTree = "<group>"; };
429 794FF1042B01FC8800385E85 /* CNLiveShopOrderSearchViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopOrderSearchViewController.swift; sourceTree = "<group>"; }; 432 794FF1042B01FC8800385E85 /* CNLiveShopOrderSearchViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopOrderSearchViewController.swift; sourceTree = "<group>"; };
430 794FF1062B01FC9800385E85 /* CNLiveShopOrderSearchListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopOrderSearchListViewController.swift; sourceTree = "<group>"; }; 433 794FF1062B01FC9800385E85 /* CNLiveShopOrderSearchListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopOrderSearchListViewController.swift; sourceTree = "<group>"; };
@@ -460,6 +463,7 @@ @@ -460,6 +463,7 @@
460 799172352AF08D4500DC01A8 /* CNLiveShopBaseModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopBaseModel.swift; sourceTree = "<group>"; }; 463 799172352AF08D4500DC01A8 /* CNLiveShopBaseModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopBaseModel.swift; sourceTree = "<group>"; };
461 799172372AF090CD00DC01A8 /* CNLiveShopBodyListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopBodyListView.swift; sourceTree = "<group>"; }; 464 799172372AF090CD00DC01A8 /* CNLiveShopBodyListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopBodyListView.swift; sourceTree = "<group>"; };
462 799172392AF091E100DC01A8 /* CNLiveShopOrderListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopOrderListViewController.swift; sourceTree = "<group>"; }; 465 799172392AF091E100DC01A8 /* CNLiveShopOrderListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopOrderListViewController.swift; sourceTree = "<group>"; };
  466 + 7999415B2B4E8E8E0014C721 /* CNLiveRefresh.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveRefresh.swift; sourceTree = "<group>"; };
463 79A212BF2B0B5C5400BFA8E3 /* CNLiveShopCouponManagerViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopCouponManagerViewController.swift; sourceTree = "<group>"; }; 467 79A212BF2B0B5C5400BFA8E3 /* CNLiveShopCouponManagerViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopCouponManagerViewController.swift; sourceTree = "<group>"; };
464 79A212C12B0B5D0700BFA8E3 /* CNLiveShopBodyCouponManagerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopBodyCouponManagerView.swift; sourceTree = "<group>"; }; 468 79A212C12B0B5D0700BFA8E3 /* CNLiveShopBodyCouponManagerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopBodyCouponManagerView.swift; sourceTree = "<group>"; };
465 79A267822AF8D7BC0088D9F6 /* CNLiveShopBodyCustomView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopBodyCustomView.swift; sourceTree = "<group>"; }; 469 79A267822AF8D7BC0088D9F6 /* CNLiveShopBodyCustomView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopBodyCustomView.swift; sourceTree = "<group>"; };
@@ -1029,6 +1033,7 @@ @@ -1029,6 +1033,7 @@
1029 isa = PBXGroup; 1033 isa = PBXGroup;
1030 children = ( 1034 children = (
1031 796308742B4B90700090D22A /* CNLiveShortVideoHomeModel.swift */, 1035 796308742B4B90700090D22A /* CNLiveShortVideoHomeModel.swift */,
  1036 + 794294AB2B4D44C0008AAFA0 /* CNLiveShortVideoCommentLayout.swift */,
1032 ); 1037 );
1033 path = Model; 1038 path = Model;
1034 sourceTree = "<group>"; 1039 sourceTree = "<group>";
@@ -1038,12 +1043,19 @@ @@ -1038,12 +1043,19 @@
1038 children = ( 1043 children = (
1039 7939B0742B47F1B9005AE981 /* CNLiveShortVideoListTableViewCell.swift */, 1044 7939B0742B47F1B9005AE981 /* CNLiveShortVideoListTableViewCell.swift */,
1040 7939B0762B47F88A005AE981 /* CNLiveShortVideoControlView.swift */, 1045 7939B0762B47F88A005AE981 /* CNLiveShortVideoControlView.swift */,
1041 - 7939B0782B47FC33005AE981 /* CNLiveShortVideoCustomControlView.swift */,  
1042 794294A62B4D18EC008AAFA0 /* CNLiveShortVideoContentListView.swift */, 1046 794294A62B4D18EC008AAFA0 /* CNLiveShortVideoContentListView.swift */,
  1047 + 794294A92B4D4381008AAFA0 /* CNLiveShortVideoCommentListView.swift */,
1043 ); 1048 );
1044 path = View; 1049 path = View;
1045 sourceTree = "<group>"; 1050 sourceTree = "<group>";
1046 }; 1051 };
  1052 + 794294A82B4D3018008AAFA0 /* Share */ = {
  1053 + isa = PBXGroup;
  1054 + children = (
  1055 + );
  1056 + path = Share;
  1057 + sourceTree = "<group>";
  1058 + };
1047 79579CAA2AAAE905006E5B38 /* Database */ = { 1059 79579CAA2AAAE905006E5B38 /* Database */ = {
1048 isa = PBXGroup; 1060 isa = PBXGroup;
1049 children = ( 1061 children = (
@@ -1131,6 +1143,7 @@ @@ -1131,6 +1143,7 @@
1131 796398922A260C0100D045EB /* Config */ = { 1143 796398922A260C0100D045EB /* Config */ = {
1132 isa = PBXGroup; 1144 isa = PBXGroup;
1133 children = ( 1145 children = (
  1146 + 794294A82B4D3018008AAFA0 /* Share */,
1134 79E496E42AB936E200127BF8 /* Tool */, 1147 79E496E42AB936E200127BF8 /* Tool */,
1135 79579CAA2AAAE905006E5B38 /* Database */, 1148 79579CAA2AAAE905006E5B38 /* Database */,
1136 7CD675512A29C04B008354C1 /* CNLiveConfigstant.swift */, 1149 7CD675512A29C04B008354C1 /* CNLiveConfigstant.swift */,
@@ -1190,6 +1203,7 @@ @@ -1190,6 +1203,7 @@
1190 children = ( 1203 children = (
1191 798A44F52A3077ED00815935 /* CNLiveHotButton.swift */, 1204 798A44F52A3077ED00815935 /* CNLiveHotButton.swift */,
1192 798A44FA2A30999900815935 /* CNLiveAlertTool.swift */, 1205 798A44FA2A30999900815935 /* CNLiveAlertTool.swift */,
  1206 + 7999415B2B4E8E8E0014C721 /* CNLiveRefresh.swift */,
1193 ); 1207 );
1194 path = CustomView; 1208 path = CustomView;
1195 sourceTree = "<group>"; 1209 sourceTree = "<group>";
@@ -1707,7 +1721,6 @@ @@ -1707,7 +1721,6 @@
1707 19BB1FF02AF0E5B30094D962 /* CNLiveShopDetailModel.swift in Sources */, 1721 19BB1FF02AF0E5B30094D962 /* CNLiveShopDetailModel.swift in Sources */,
1708 1938BD382B4BDC2500390A34 /* CNLiveAlbumImageCell.swift in Sources */, 1722 1938BD382B4BDC2500390A34 /* CNLiveAlbumImageCell.swift in Sources */,
1709 796398942A260C0100D045EB /* AppDelegate.swift in Sources */, 1723 796398942A260C0100D045EB /* AppDelegate.swift in Sources */,
1710 - 7939B0792B47FC33005AE981 /* CNLiveShortVideoCustomControlView.swift in Sources */,  
1711 1917330D2B1096AB007BCC04 /* CNLivePlayerViewController.swift in Sources */, 1724 1917330D2B1096AB007BCC04 /* CNLivePlayerViewController.swift in Sources */,
1712 1917330F2B10989C007BCC04 /* CNLivePlayerView.swift in Sources */, 1725 1917330F2B10989C007BCC04 /* CNLivePlayerView.swift in Sources */,
1713 7989B5C72A4BDC7200A19B10 /* CNLiveMineEarnListViewController.swift in Sources */, 1726 7989B5C72A4BDC7200A19B10 /* CNLiveMineEarnListViewController.swift in Sources */,
@@ -1873,6 +1886,7 @@ @@ -1873,6 +1886,7 @@
1873 7C4931312A2F142F000E44B4 /* CNHomePageBackgroupView.swift in Sources */, 1886 7C4931312A2F142F000E44B4 /* CNHomePageBackgroupView.swift in Sources */,
1874 19BB1FF22AF21A950094D962 /* CNLliveShopDetailBannerCell.swift in Sources */, 1887 19BB1FF22AF21A950094D962 /* CNLliveShopDetailBannerCell.swift in Sources */,
1875 790D018B2A2D8B3300C5978D /* CNLiveLoginViewController.swift in Sources */, 1888 790D018B2A2D8B3300C5978D /* CNLiveLoginViewController.swift in Sources */,
  1889 + 7999415C2B4E8E8E0014C721 /* CNLiveRefresh.swift in Sources */,
1876 19CC4D562ADD19C200308E2A /* String+Extension.swift in Sources */, 1890 19CC4D562ADD19C200308E2A /* String+Extension.swift in Sources */,
1877 7905BB492AB0588B0089BC50 /* CNLiveMineAuthResultViewController.swift in Sources */, 1891 7905BB492AB0588B0089BC50 /* CNLiveMineAuthResultViewController.swift in Sources */,
1878 19565EC22AF616CA007D6727 /* CNLiveShopDetailOrderAssetCell.swift in Sources */, 1892 19565EC22AF616CA007D6727 /* CNLiveShopDetailOrderAssetCell.swift in Sources */,
@@ -1881,6 +1895,7 @@ @@ -1881,6 +1895,7 @@
1881 191733152B109FD7007BCC04 /* CNLivePlayerTopNaviView.swift in Sources */, 1895 191733152B109FD7007BCC04 /* CNLivePlayerTopNaviView.swift in Sources */,
1882 794FF1052B01FC8800385E85 /* CNLiveShopOrderSearchViewController.swift in Sources */, 1896 794FF1052B01FC8800385E85 /* CNLiveShopOrderSearchViewController.swift in Sources */,
1883 798A44EC2A302DBE00815935 /* CNLiveMineAddInfoViewController.swift in Sources */, 1897 798A44EC2A302DBE00815935 /* CNLiveMineAddInfoViewController.swift in Sources */,
  1898 + 794294AC2B4D44C0008AAFA0 /* CNLiveShortVideoCommentLayout.swift in Sources */,
1884 791C1C882AFB6FD7003E6362 /* CNLiveShopOrderExpressFirmViewController.swift in Sources */, 1899 791C1C882AFB6FD7003E6362 /* CNLiveShopOrderExpressFirmViewController.swift in Sources */,
1885 7CD675422A2740F8008354C1 /* CNCustomIndexView.swift in Sources */, 1900 7CD675422A2740F8008354C1 /* CNCustomIndexView.swift in Sources */,
1886 794BC1652AF9E70D00A68C74 /* CNLiveShopOrderSendViewController.swift in Sources */, 1901 794BC1652AF9E70D00A68C74 /* CNLiveShopOrderSendViewController.swift in Sources */,
@@ -1889,6 +1904,7 @@ @@ -1889,6 +1904,7 @@
1889 790D01852A2D89E100C5978D /* UIColor+CNLiveExtensions.swift in Sources */, 1904 790D01852A2D89E100C5978D /* UIColor+CNLiveExtensions.swift in Sources */,
1890 19FA20192AE22D98001F7186 /* CNLiveDownSlideTodayRecommendCell.swift in Sources */, 1905 19FA20192AE22D98001F7186 /* CNLiveDownSlideTodayRecommendCell.swift in Sources */,
1891 790B1FB42A4153E90074CF00 /* CNLiveMineBaseModel.swift in Sources */, 1906 790B1FB42A4153E90074CF00 /* CNLiveMineBaseModel.swift in Sources */,
  1907 + 794294AA2B4D4381008AAFA0 /* CNLiveShortVideoCommentListView.swift in Sources */,
1892 7978A8432A396632007C86B8 /* CNLiveMineViewModel.swift in Sources */, 1908 7978A8432A396632007C86B8 /* CNLiveMineViewModel.swift in Sources */,
1893 191733022B0C4EAB007BCC04 /* CNLiveSelUplSingleImageView.swift in Sources */, 1909 191733022B0C4EAB007BCC04 /* CNLiveSelUplSingleImageView.swift in Sources */,
1894 798A44EE2A305AAC00815935 /* CNLiveBaseNavigationController.swift in Sources */, 1910 798A44EE2A305AAC00815935 /* CNLiveBaseNavigationController.swift in Sources */,
metaCode/Classes/CustomView/CNLiveRefresh.swift 0 → 100644
  1 +//
  2 +// CNLiveHeaderRefresh.swift
  3 +// metaCode
  4 +//
  5 +// Created by open on 2024/1/10.
  6 +//
  7 +
  8 +import Foundation
  9 +import MJRefresh
  10 +
  11 +class CNLiveHeaderRefresh: MJRefreshNormalHeader {
  12 +
  13 + override func prepare() {
  14 + super.prepare()
  15 + self.loadingView?.color = .white
  16 + self.arrowView!.isHidden = true
  17 + self.stateLabel?.isHidden = true
  18 + self.lastUpdatedTimeLabel?.isHidden = true
  19 + }
  20 +}
  21 +
  22 +class CNLiveFooterRefresh: MJRefreshAutoNormalFooter {
  23 + override func prepare() {
  24 + super.prepare()
  25 + self.stateLabel?.textColor = .white
  26 + self.loadingView?.color = .white
  27 + }
  28 +}
metaCode/Classes/Environment/CNLiveEnvironment.swift
@@ -33,6 +33,8 @@ let APPBaseWjjBUrl: String = CNLiveEnvironmentManager.shared.base_wjj_b_url @@ -33,6 +33,8 @@ let APPBaseWjjBUrl: String = CNLiveEnvironmentManager.shared.base_wjj_b_url
33 let APPBaseWjjShopUrl: String = CNLiveEnvironmentManager.shared.base_mjj_shop_url 33 let APPBaseWjjShopUrl: String = CNLiveEnvironmentManager.shared.base_mjj_shop_url
34 /// cms接口 34 /// cms接口
35 let APPBaseCMSUrl: String = CNLiveEnvironmentManager.shared.base_cms_url 35 let APPBaseCMSUrl: String = CNLiveEnvironmentManager.shared.base_cms_url
  36 +/// 用户云接口
  37 +let APPBaseTokenUrl: String = CNLiveEnvironmentManager.shared.img_token_url
36 /// cms_api接口 38 /// cms_api接口
37 let APPBaseCMSClassUrl: String = CNLiveEnvironmentManager.shared.base_cms_class_url 39 let APPBaseCMSClassUrl: String = CNLiveEnvironmentManager.shared.base_cms_class_url
38 ///当前APP的环境 40 ///当前APP的环境
metaCode/Classes/Main/HomePages/Controller/AuthController/CNLiveAuthViewController.swift
@@ -96,16 +96,16 @@ class CNLiveAuthViewController:CNLiveBaseViewController,UITableViewDelegate,UITa @@ -96,16 +96,16 @@ class CNLiveAuthViewController:CNLiveBaseViewController,UITableViewDelegate,UITa
96 // MARK: - UITableViewDelegate 96 // MARK: - UITableViewDelegate
97 func numberOfSections(in tableView: UITableView) -> Int { 97 func numberOfSections(in tableView: UITableView) -> Int {
98 if self.isHaveDuanJU{ 98 if self.isHaveDuanJU{
99 - 2 99 + return 2
100 }else{ 100 }else{
101 - 1 101 + return 1
102 } 102 }
103 } 103 }
104 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 104 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
105 if self.isHaveDuanJU && section == 0{ 105 if self.isHaveDuanJU && section == 0{
106 - 1 106 + return 1
107 }else{ 107 }else{
108 - self.dataArray.count 108 + return self.dataArray.count
109 } 109 }
110 } 110 }
111 111
metaCode/Classes/Main/HomePages/ViewModel/CNLiveHomePageViewModel.swift
@@ -92,7 +92,6 @@ class CNLiveHomePageViewModel:NSObject{ @@ -92,7 +92,6 @@ class CNLiveHomePageViewModel:NSObject{
92 let param = NSMutableDictionary() 92 let param = NSMutableDictionary()
93 param.setValue(aid, forKey: "aid") 93 param.setValue(aid, forKey: "aid")
94 param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "sid") 94 param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "sid")
95 -  
96 CNLiveNetworking.setAllowRequestDefaultArgument(true) 95 CNLiveNetworking.setAllowRequestDefaultArgument(true)
97 CNLiveNetworking.setupShowDataResult(false) 96 CNLiveNetworking.setupShowDataResult(false)
98 CNLiveNetworking.requestNetwork(with: .GET, urlString: APPBaseCMSUrl+"/contentApi/getAlbumMsg", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in 97 CNLiveNetworking.requestNetwork(with: .GET, urlString: APPBaseCMSUrl+"/contentApi/getAlbumMsg", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in
@@ -118,7 +117,6 @@ class CNLiveHomePageViewModel:NSObject{ @@ -118,7 +117,6 @@ class CNLiveHomePageViewModel:NSObject{
118 let param = NSMutableDictionary() 117 let param = NSMutableDictionary()
119 param.setValue(aid, forKey: "aid") 118 param.setValue(aid, forKey: "aid")
120 param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "sid") 119 param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "sid")
121 -  
122 CNLiveNetworking.setAllowRequestDefaultArgument(true) 120 CNLiveNetworking.setAllowRequestDefaultArgument(true)
123 CNLiveNetworking.setupShowDataResult(false) 121 CNLiveNetworking.setupShowDataResult(false)
124 CNLiveNetworking.requestNetwork(with: .GET, urlString: APPBaseCMSUrl+"/ugcApi/albumList", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in 122 CNLiveNetworking.requestNetwork(with: .GET, urlString: APPBaseCMSUrl+"/ugcApi/albumList", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in
@@ -136,8 +134,7 @@ class CNLiveHomePageViewModel:NSObject{ @@ -136,8 +134,7 @@ class CNLiveHomePageViewModel:NSObject{
136 } 134 }
137 135
138 resultBlock(listArr,.success) 136 resultBlock(listArr,.success)
139 - }  
140 - else{ 137 + }else{
141 resultBlock(NSNull(),.failed) 138 resultBlock(NSNull(),.failed)
142 } 139 }
143 } 140 }
metaCode/Classes/Main/MinePage/Controller/CNLiveMineViewController.swift
@@ -193,7 +193,7 @@ extension CNLiveMineViewController { @@ -193,7 +193,7 @@ extension CNLiveMineViewController {
193 self.navigationController?.pushViewController(CNLiveShopCouponManagerViewController.init(), animated: true) 193 self.navigationController?.pushViewController(CNLiveShopCouponManagerViewController.init(), animated: true)
194 } 194 }
195 if indexPath.row == 4 { 195 if indexPath.row == 4 {
196 - self.navigationController?.pushViewController(CNLiveShortVideoViewController.init(), animated: true) 196 + self.navigationController?.pushViewController(CNLiveShortVideoViewController.init(aid: "cms_ugc_10504077_1704334474587"), animated: true)
197 } 197 }
198 } 198 }
199 199
metaCode/Classes/Main/VideoPage/Controller/CNLiveShortVideoViewController.swift
@@ -8,7 +8,10 @@ @@ -8,7 +8,10 @@
8 import Foundation 8 import Foundation
9 import ZFPlayer 9 import ZFPlayer
10 import APButton 10 import APButton
11 -class CNLiveShortVideoViewController : CNLiveBaseViewController, UITableViewDelegate, UITableViewDataSource, CNLiveShortVideoListTableViewCellDelegate { 11 +import EmptyDataSet_Swift
  12 +import MJRefresh
  13 +
  14 +class CNLiveShortVideoViewController : CNLiveBaseViewController, UITableViewDelegate, UITableViewDataSource, CNLiveShortVideoListTableViewCellDelegate, EmptyDataSetSource, EmptyDataSetDelegate {
12 15
13 var player: ZFPlayerController! 16 var player: ZFPlayerController!
14 let kVideoBodyListViewCellIdentifier = "kVideoBodyListViewCellIdentifier" 17 let kVideoBodyListViewCellIdentifier = "kVideoBodyListViewCellIdentifier"
@@ -16,6 +19,8 @@ class CNLiveShortVideoViewController : CNLiveBaseViewController, UITableViewDele @@ -16,6 +19,8 @@ class CNLiveShortVideoViewController : CNLiveBaseViewController, UITableViewDele
16 let tableView = UITableView(frame: .zero, style: .plain) 19 let tableView = UITableView(frame: .zero, style: .plain)
17 tableView.dataSource = self 20 tableView.dataSource = self
18 tableView.delegate = self 21 tableView.delegate = self
  22 + tableView.emptyDataSetSource = self
  23 + tableView.emptyDataSetDelegate = self
19 tableView.isPagingEnabled = true 24 tableView.isPagingEnabled = true
20 tableView.estimatedRowHeight = 0 25 tableView.estimatedRowHeight = 0
21 tableView.estimatedSectionFooterHeight = 0 26 tableView.estimatedSectionFooterHeight = 0
@@ -26,6 +31,8 @@ class CNLiveShortVideoViewController : CNLiveBaseViewController, UITableViewDele @@ -26,6 +31,8 @@ class CNLiveShortVideoViewController : CNLiveBaseViewController, UITableViewDele
26 tableView.tableFooterView = UIView.init() 31 tableView.tableFooterView = UIView.init()
27 tableView.separatorStyle = .none 32 tableView.separatorStyle = .none
28 tableView.scrollsToTop = false 33 tableView.scrollsToTop = false
  34 + tableView.showsVerticalScrollIndicator = false
  35 + tableView.showsHorizontalScrollIndicator = false
29 tableView.contentInsetAdjustmentBehavior = .never; 36 tableView.contentInsetAdjustmentBehavior = .never;
30 tableView.register(CNLiveShortVideoListTableViewCell.self, forCellReuseIdentifier: kVideoBodyListViewCellIdentifier) 37 tableView.register(CNLiveShortVideoListTableViewCell.self, forCellReuseIdentifier: kVideoBodyListViewCellIdentifier)
31 return tableView 38 return tableView
@@ -51,16 +58,52 @@ class CNLiveShortVideoViewController : CNLiveBaseViewController, UITableViewDele @@ -51,16 +58,52 @@ class CNLiveShortVideoViewController : CNLiveBaseViewController, UITableViewDele
51 let dataArray = NSMutableArray.init() 58 let dataArray = NSMutableArray.init()
52 return dataArray 59 return dataArray
53 }() 60 }()
54 - 61 +
  62 + var aid: String! = ""
  63 + var pageNum: NSInteger! = 1
  64 + var currentIndex: NSInteger! = 0
  65 + var headerRefreshView: CNLiveHeaderRefresh!
  66 + var footerRefreshView: CNLiveFooterRefresh!
55 var playerManager = ZFIJKPlayerManager.init() 67 var playerManager = ZFIJKPlayerManager.init()
56 // var playerManager = ZFAVPlayerManager.init() 68 // var playerManager = ZFAVPlayerManager.init()
57 69
  70 + /// 初始化播放器
  71 + /// - Parameters:
  72 + /// - aid: 专辑 id
  73 + /// - page: 当前页数
  74 + /// - currentIndex: 当前点击的索引
  75 + /// - dataArray: 当前请求的数据
  76 + init(aid: String,page: NSInteger, currentIndex: NSInteger, dataArray: [CNLiveAlbumListModel]) {
  77 + self.aid = aid
  78 + self.pageNum = page
  79 + self.currentIndex = currentIndex
  80 + super.init(nibName:nil, bundle:nil)
  81 + self.dataArray.addObjects(from: dataArray)
  82 + dataArray.forEach {[weak self] listModel in
  83 + guard let self = self else { return }
  84 + self.dataURLArray.add(listModel.videoUrl)
  85 + }
  86 + }
  87 +
  88 + /// 初始化播放器
  89 + /// - Parameter aid: 专辑 id
  90 + init(aid: String) {
  91 + self.aid = aid
  92 + super.init(nibName:nil, bundle:nil)
  93 + }
  94 +
  95 + required init?(coder: NSCoder) {
  96 + fatalError("init(coder:) has not been implemented")
  97 + }
  98 +
58 override func viewDidLoad() { 99 override func viewDidLoad() {
59 super.viewDidLoad() 100 super.viewDidLoad()
60 view.backgroundColor = .black 101 view.backgroundColor = .black
61 view.addSubview(tableView) 102 view.addSubview(tableView)
62 view.addSubview(backBtn) 103 view.addSubview(backBtn)
63 - requestData() 104 +
  105 + requestData {}
  106 + addRefreshView()
64 107
65 player = ZFPlayerController(scrollView: tableView, playerManager: playerManager, containerViewTag: 100) 108 player = ZFPlayerController(scrollView: tableView, playerManager: playerManager, containerViewTag: 100)
66 player.disableGestureTypes = [.pan, .pinch] 109 player.disableGestureTypes = [.pan, .pinch]
@@ -74,17 +117,14 @@ class CNLiveShortVideoViewController : CNLiveBaseViewController, UITableViewDele @@ -74,17 +117,14 @@ class CNLiveShortVideoViewController : CNLiveBaseViewController, UITableViewDele
74 } 117 }
75 player.playerPrepareToPlay = {[weak self] asset, assetURL in 118 player.playerPrepareToPlay = {[weak self] asset, assetURL in
76 guard let self = self else { return } 119 guard let self = self else { return }
  120 + self.controlView.videoPlayer((self.player)!, currentTime: self.player.currentTime, totalTime: self.player.totalTime)
77 let index = self.dataURLArray.index(of: assetURL.absoluteString) 121 let index = self.dataURLArray.index(of: assetURL.absoluteString)
78 - let homeModel = self.dataArray[index] as! ShortVideoHomeTestModel  
79 - if (homeModel.isMoney!) {  
80 - let indexPath = IndexPath(row: index, section: 0)  
81 - let cell: CNLiveShortVideoListTableViewCell = self.tableView.cellForRow(at: indexPath) as! CNLiveShortVideoListTableViewCell  
82 - cell.hiddenView(isHidden: true) 122 + let homeModel = self.dataArray[index] as! CNLiveAlbumListModel
  123 + let indexPath = IndexPath(row: index, section: 0)
  124 + let cell: CNLiveShortVideoListTableViewCell = self.tableView.cellForRow(at: indexPath) as! CNLiveShortVideoListTableViewCell
  125 + cell.hiddenView(isHidden: homeModel.product!.albumProductType != "0")
  126 + if (homeModel.product!.albumProductType != "0") {
83 self.player.stopCurrentPlayingCell() 127 self.player.stopCurrentPlayingCell()
84 - } else {  
85 - let indexPath = IndexPath(row: index, section: 0)  
86 - let cell: CNLiveShortVideoListTableViewCell = self.tableView.cellForRow(at: indexPath) as! CNLiveShortVideoListTableViewCell  
87 - cell.hiddenView(isHidden: false)  
88 } 128 }
89 } 129 }
90 // 更新另一个控制层的时间 130 // 更新另一个控制层的时间
@@ -103,42 +143,72 @@ class CNLiveShortVideoViewController : CNLiveBaseViewController, UITableViewDele @@ -103,42 +143,72 @@ class CNLiveShortVideoViewController : CNLiveBaseViewController, UITableViewDele
103 if self.player.playingIndexPath != nil { 143 if self.player.playingIndexPath != nil {
104 return 144 return
105 } 145 }
106 - if indexPath.row == (self.dataArray.count) - 1 {  
107 - // 加载下一页数据  
108 - self.requestData()  
109 - self.tableView.reloadData()  
110 - }  
111 self.playVideo(at: indexPath) 146 self.playVideo(at: indexPath)
112 } 147 }
113 } 148 }
114 149
  150 + func addRefreshView() {
  151 + headerRefreshView = CNLiveHeaderRefresh(refreshingBlock: { [weak self] in
  152 + guard let self = self else { return }
  153 + self.pageNum = 1
  154 + self.requestData {}
  155 + })
  156 + footerRefreshView = CNLiveFooterRefresh(refreshingBlock: { [weak self] in
  157 + guard let self = self else { return }
  158 + self.player.stopCurrentPlayingCell()
  159 + self.pageNum += 1
  160 + self.requestData {}
  161 + })
  162 + }
  163 +
115 override func viewWillLayoutSubviews() { 164 override func viewWillLayoutSubviews() {
116 super.viewWillLayoutSubviews() 165 super.viewWillLayoutSubviews()
117 self.backBtn.frame = CGRectMake(15, CGRectGetMaxY(UIApplication.shared.statusBarFrame), 45, 45) 166 self.backBtn.frame = CGRectMake(15, CGRectGetMaxY(UIApplication.shared.statusBarFrame), 45, 45)
118 } 167 }
119 168
120 - func loadRequest() {  
121 - dataArray.removeAllObjects()  
122 - DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { [weak self] in  
123 - guard let strongSelf = self else { return }  
124 - // 下拉时一定要停止当前播放,以防有新数据,播放位置会错位  
125 - strongSelf.player.stopCurrentPlayingCell()  
126 - strongSelf.requestData()  
127 - strongSelf.tableView.reloadData()  
128 - strongSelf.player.zf_filterShouldPlayCellWhileScrolled { [weak self] indexPath in  
129 - guard let strongSelf = self else { return }  
130 - strongSelf.playVideo(at: indexPath)  
131 - }  
132 - }  
133 - }  
134 -  
135 - func requestData() {  
136 - CNLiveShortVideoViewModel.requstWithShortVideo { [weak self] result, respStatue in 169 + func requestData(resultBlock: @escaping () -> Void) {
  170 + CNLiveShortVideoViewModel.requstWithShortVideo(aid: self.aid, page: self.pageNum) { [weak self] result, respStatue in
137 guard let self = self else { return } 171 guard let self = self else { return }
138 - self.dataArray.addObjects(from: (result as! [Any]).first as! [Any])  
139 - self.dataURLArray.addObjects(from: (result as! [Any]).last as! [Any])  
140 - self.tableView.reloadData()  
141 - self.playTheIndex(index: 0) 172 + if respStatue == .success {
  173 + if self.pageNum == 1 {
  174 + self.dataArray.removeAllObjects()
  175 + self.dataURLArray.removeAllObjects()
  176 + }
  177 + let listArray = (result as! [Any]).first as! [CNLiveAlbumListModel]
  178 + self.dataArray.addObjects(from: listArray)
  179 + let urlArray = (result as! [Any]).last as! [String]
  180 + self.dataURLArray.addObjects(from: urlArray)
  181 + if self.tableView.mj_header != nil && self.tableView.mj_footer != nil {
  182 + self.tableView.mj_footer?.endRefreshing()
  183 + self.tableView.mj_header?.endRefreshing()
  184 + }
  185 + self.tableView.reloadData()
  186 + let hasNextPage = (result as! [Any])[1] as! Bool
  187 + if listArray.count == 0 && urlArray.count == 0 {
  188 + if !hasNextPage {
  189 + self.tableView.mj_footer?.endRefreshingWithNoMoreData()
  190 + self.tableView.reloadData()
  191 + }
  192 + } else {
  193 + if self.tableView.mj_header == nil {
  194 + self.tableView.mj_header = headerRefreshView
  195 + }
  196 + if self.tableView.mj_footer == nil {
  197 + self.tableView.mj_footer = footerRefreshView
  198 + }
  199 + }
  200 + if self.pageNum == 1 {
  201 + self.playTheIndex(index: self.currentIndex)
  202 + }
  203 + } else {
  204 + if self.tableView.mj_header != nil && self.tableView.mj_footer != nil {
  205 + self.tableView.mj_footer?.endRefreshing()
  206 + self.tableView.mj_header?.endRefreshing()
  207 + }
  208 + if self.dataArray.count == 0 {
  209 + self.tableView.reloadEmptyDataSet()
  210 + }
  211 + }
142 } 212 }
143 } 213 }
144 214
@@ -152,12 +222,6 @@ class CNLiveShortVideoViewController : CNLiveBaseViewController, UITableViewDele @@ -152,12 +222,6 @@ class CNLiveShortVideoViewController : CNLiveBaseViewController, UITableViewDele
152 guard let self = self else { return } 222 guard let self = self else { return }
153 self.playVideo(at: indexPath) 223 self.playVideo(at: indexPath)
154 } 224 }
155 - // 如果是最后一行,去请求新数据  
156 - if index == dataArray.count - 1 {  
157 - // 加载下一页数据  
158 - requestData()  
159 - tableView.reloadData()  
160 - }  
161 } 225 }
162 226
163 override var shouldAutorotate: Bool { 227 override var shouldAutorotate: Bool {
@@ -181,10 +245,10 @@ class CNLiveShortVideoViewController : CNLiveBaseViewController, UITableViewDele @@ -181,10 +245,10 @@ class CNLiveShortVideoViewController : CNLiveBaseViewController, UITableViewDele
181 } 245 }
182 246
183 func playVideo(at indexPath: IndexPath) { 247 func playVideo(at indexPath: IndexPath) {
184 - let data: ShortVideoHomeTestModel = dataArray[indexPath.row] as! ShortVideoHomeTestModel  
185 - self.player.playTheIndexPath(indexPath, assetURL: URL(string: data.videoUrl!)!) 248 + let data: CNLiveAlbumListModel = dataArray[indexPath.row] as! CNLiveAlbumListModel
  249 + self.player.playTheIndexPath(indexPath, assetURL: URL(string: data.videoUrl)!)
186 controlView.resetControlView() 250 controlView.resetControlView()
187 - controlView.showCoverView(withUrl: data.poster!) 251 + controlView.showCoverView(withUrl: data.poster)
188 } 252 }
189 253
190 deinit { 254 deinit {
@@ -201,7 +265,12 @@ class CNLiveShortVideoViewController : CNLiveBaseViewController, UITableViewDele @@ -201,7 +265,12 @@ class CNLiveShortVideoViewController : CNLiveBaseViewController, UITableViewDele
201 extension CNLiveShortVideoViewController { 265 extension CNLiveShortVideoViewController {
202 266
203 func likeActionMethod(viewcell: CNLiveShortVideoListTableViewCell, button: UIButton) { 267 func likeActionMethod(viewcell: CNLiveShortVideoListTableViewCell, button: UIButton) {
204 - button.isSelected = !button.isSelected 268 + CNLiveShortVideoViewModel.requestRankWithLike(contentId: viewcell.homeModel.pid, contentTitle: viewcell.homeModel.title, contentSid: viewcell.homeModel.icon!.id, support: viewcell.homeModel.tool!.liked, tagName: viewcell.homeModel.tagName) {result, respStatue in
  269 + if respStatue == .success {
  270 + viewcell.homeModel.tool!.liked = !viewcell.homeModel.tool!.liked
  271 + button.isSelected = viewcell.homeModel.tool!.liked
  272 + }
  273 + }
205 } 274 }
206 func commentActionMethod(viewcell: CNLiveShortVideoListTableViewCell, button: UIButton) { 275 func commentActionMethod(viewcell: CNLiveShortVideoListTableViewCell, button: UIButton) {
207 276
@@ -216,8 +285,10 @@ extension CNLiveShortVideoViewController { @@ -216,8 +285,10 @@ extension CNLiveShortVideoViewController {
216 285
217 } 286 }
218 func listActionMethod(viewcell: CNLiveShortVideoListTableViewCell, button: UIButton) { 287 func listActionMethod(viewcell: CNLiveShortVideoListTableViewCell, button: UIButton) {
219 - CNLiveShortVideoContentListView.showVideoContentListView(result: { videoId in  
220 - 288 + CNLiveShortVideoContentListView.showVideoContentListView(title: viewcell.homeModel.albumMsgModel!.albumName,dataArray: dataArray, result: {[weak self] listModel in
  289 + guard let self = self else { return }
  290 + let index = self.dataArray.index(of: listModel) as NSInteger
  291 + self.playTheIndex(index: index)
221 }) 292 })
222 } 293 }
223 func payActionMethod(viewcell: CNLiveShortVideoListTableViewCell, button: UIButton) { 294 func payActionMethod(viewcell: CNLiveShortVideoListTableViewCell, button: UIButton) {
@@ -227,8 +298,8 @@ extension CNLiveShortVideoViewController { @@ -227,8 +298,8 @@ extension CNLiveShortVideoViewController {
227 guard let self = self else { return } 298 guard let self = self else { return }
228 payButton.stopAnimating() 299 payButton.stopAnimating()
229 for item in self.dataArray { 300 for item in self.dataArray {
230 - let homeModel = item as! ShortVideoHomeTestModel  
231 - homeModel.isMoney = false 301 + let homeModel = item as! CNLiveAlbumListModel
  302 + homeModel.product!.albumProductType = "0"
232 self.tableView.reloadData() 303 self.tableView.reloadData()
233 } 304 }
234 let index = self.dataArray.index(of: viewcell.homeModel as Any) 305 let index = self.dataArray.index(of: viewcell.homeModel as Any)
@@ -252,7 +323,7 @@ extension CNLiveShortVideoViewController { @@ -252,7 +323,7 @@ extension CNLiveShortVideoViewController {
252 guard let cell = tableView.dequeueReusableCell(withIdentifier: kVideoBodyListViewCellIdentifier) as? CNLiveShortVideoListTableViewCell else { 323 guard let cell = tableView.dequeueReusableCell(withIdentifier: kVideoBodyListViewCellIdentifier) as? CNLiveShortVideoListTableViewCell else {
253 return CNLiveShortVideoListTableViewCell() 324 return CNLiveShortVideoListTableViewCell()
254 } 325 }
255 - cell.setupWithData(model: dataArray[indexPath.row] as! ShortVideoHomeTestModel) 326 + cell.setupWithData(model: dataArray[indexPath.row] as! CNLiveAlbumListModel)
256 cell.delegate = self 327 cell.delegate = self
257 return cell 328 return cell
258 } 329 }
@@ -261,6 +332,10 @@ extension CNLiveShortVideoViewController { @@ -261,6 +332,10 @@ extension CNLiveShortVideoViewController {
261 self.playVideo(at: indexPath) 332 self.playVideo(at: indexPath)
262 } 333 }
263 334
  335 + func image(forEmptyDataSet scrollView: UIScrollView) -> UIImage? {
  336 + return UIImage(named: "short_video_default")
  337 + }
  338 +
264 func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { 339 func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
265 scrollView.zf_scrollViewDidEndDecelerating() 340 scrollView.zf_scrollViewDidEndDecelerating()
266 } 341 }
@@ -285,3 +360,4 @@ extension CNLiveShortVideoViewController { @@ -285,3 +360,4 @@ extension CNLiveShortVideoViewController {
285 self.playVideo(at: indexPath) 360 self.playVideo(at: indexPath)
286 } 361 }
287 } 362 }
  363 +
metaCode/Classes/Main/VideoPage/Model/CNLiveShortVideoCommentLayout.swift 0 → 100644
  1 +//
  2 +// CNLiveShortVideoCommentLayout.swift
  3 +// metaCode
  4 +//
  5 +// Created by open on 2024/1/9.
  6 +//
  7 +
  8 +import Foundation
metaCode/Classes/Main/VideoPage/Model/CNLiveShortVideoHomeModel.swift
@@ -7,51 +7,59 @@ @@ -7,51 +7,59 @@
7 7
8 import Foundation 8 import Foundation
9 9
10 -class ShortVideoHomeTestModel: BaseModel {  
11 - var activityEndTime: String? = ""  
12 - var address: String? = ""  
13 - var colours: String? = ""  
14 - var contentId: String? = ""  
15 - var coordinate: String? = ""  
16 - var duration: String? = ""  
17 - var h5Url: String? = ""  
18 - var shortTitle: String? = ""  
19 - var height: Int? = 0  
20 - var isMoney: Bool? = false  
21 - var identity: Int? = 0  
22 - var isHorizontalScreen: Int? = 0  
23 - var model: String? = ""  
24 - var number: String? = "" 10 +//!!!: 评论相关 model
  11 +class ShortVideoHomeCommentModel: BaseModel {
  12 + var total_hd: Int? = 0 //总数
  13 + var hasNext: String? = ""
  14 + var comments = [ShortVideoHomeCommentListModel]()
  15 +}
  16 +
  17 +class ShortVideoHomeCommentListModel: BaseModel {
  18 + var comment = ShortVideoHomeCommentFListModel()
  19 + var replyData = ShortVideoHomeCommentRListModel()
  20 +}
  21 +//评论数据
  22 +class ShortVideoHomeCommentFListModel: BaseModel {
  23 + var commentId: String? = ""
25 var pid: String? = "" 24 var pid: String? = ""
26 - var poster: String? = ""  
27 - var productId: String? = ""  
28 - var productType: String? = ""  
29 - var shareUrl: String? = ""  
30 - var source: Int? = 0  
31 - var sourceDescribe: String? = ""  
32 - var sourceName: String? = ""  
33 - var subTitle: String? = ""  
34 - var supervision: String? = ""  
35 - var tagId: String? = ""  
36 - var tagName: String? = ""  
37 - var thirdUrl: String? = ""  
38 - var time: Int? = 0  
39 - var timeString: String? = ""  
40 - var title: String? = ""  
41 - var videoType: Int? = 0  
42 - var videoUrl: String? = ""  
43 - var width: Int? = 0  
44 - var showStatue: Int? = 0  
45 - var witnessId: String? = ""  
46 - var statue: String? = ""  
47 - var pids: [String]? = []  
48 - var icon = ShortVideoHomeTestIconModel() 25 + var uid: String? = ""
  26 + var nick: String? = ""
  27 + var facepath: String? = ""
  28 + var content: String? = ""
  29 + var created_at: String? = ""
  30 + var praise: String? = ""
  31 + var plat: String? = ""
  32 + var isOffical: Bool? = false
  33 + var model: String? = ""
  34 + var spId: String? = ""
  35 + var seqId: Int? = 0
  36 + var topicId: String? = ""
  37 + var praiseCount: Int? = 0
  38 + var isPraised: Bool? = false
  39 + var icon: String? = ""
  40 +}
  41 +//回复数据
  42 +class ShortVideoHomeCommentRListModel: BaseModel {
  43 + var total_hd: Int? = 0 //总数
  44 + var replys = [ShortVideoHomeCommentRListItemModel]()
49 } 45 }
50 46
51 -class ShortVideoHomeTestIconModel: BaseModel {  
52 - var face: String? = ""  
53 - var focused: Bool? = false  
54 - var idField: String? = ""  
55 - var name: String? = ""  
56 - var type: String? = "" 47 +class ShortVideoHomeCommentRListItemModel: BaseModel {
  48 + var praiseCount: Int? = 0
  49 + var isPraised: Bool? = false
  50 + var commentId: String? = ""
  51 + var replyId: String? = ""
  52 + var topicId: String? = ""
  53 + var created_at: String? = ""
  54 + var plat: String? = ""
  55 + var fromFace: String? = ""
  56 + var fromSid: String? = ""
  57 + var fromNick: String? = ""
  58 + var toSid: String? = ""
  59 + var toNick: String? = ""
  60 + var toFace: String? = ""
  61 + var seqId: Int? = 0
  62 + var content: String? = ""
  63 + var level: Int? = 0
  64 + var icon: String? = ""
57 } 65 }
metaCode/Classes/Main/VideoPage/View/CNLiveShortVideoCommentListView.swift 0 → 100644
  1 +//
  2 +// CNLiveShortVideoCommentListView.swift
  3 +// metaCode
  4 +//
  5 +// Created by open on 2024/1/9.
  6 +//
  7 +
  8 +import Foundation
  9 +
  10 +class CNLiveShortVideoCommentListView: UIView {
  11 +
  12 +}
metaCode/Classes/Main/VideoPage/View/CNLiveShortVideoContentListView.swift
@@ -7,9 +7,21 @@ @@ -7,9 +7,21 @@
7 7
8 import Foundation 8 import Foundation
9 9
10 -typealias CloseVideoListResultBlock = (_ videoId: Any) ->Void 10 +typealias CloseVideoListResultBlock = (_ listModel: Any) ->Void
11 class CNLiveShortVideoContentListView: UIView, UITableViewDelegate, UITableViewDataSource { 11 class CNLiveShortVideoContentListView: UIView, UITableViewDelegate, UITableViewDataSource {
12 12
  13 + lazy var grayMaskView: UIView = {
  14 + let grayMaskView = UIView()
  15 + grayMaskView.backgroundColor = UIColor.black.withAlphaComponent(0.2)
  16 + return grayMaskView
  17 + }()
  18 +
  19 + lazy var contentView: UIView = {
  20 + let view = UIView.init()
  21 + view.backgroundColor = HexColor("#010101")
  22 + return view
  23 + }()
  24 +
13 lazy var closeButton: UIButton = { 25 lazy var closeButton: UIButton = {
14 let button = UIButton(type: .custom) 26 let button = UIButton(type: .custom)
15 button.setImage(UIImage(named: "short_video_close"), for: .normal) 27 button.setImage(UIImage(named: "short_video_close"), for: .normal)
@@ -41,7 +53,7 @@ class CNLiveShortVideoContentListView: UIView, UITableViewDelegate, UITableViewD @@ -41,7 +53,7 @@ class CNLiveShortVideoContentListView: UIView, UITableViewDelegate, UITableViewD
41 tableView.dataSource = self 53 tableView.dataSource = self
42 tableView.delegate = self 54 tableView.delegate = self
43 tableView.rowHeight = 90 55 tableView.rowHeight = 90
44 - tableView.estimatedRowHeight = 0 56 + tableView.estimatedRowHeight = 90
45 tableView.estimatedSectionFooterHeight = 0 57 tableView.estimatedSectionFooterHeight = 0
46 tableView.estimatedSectionHeaderHeight = 0 58 tableView.estimatedSectionHeaderHeight = 0
47 tableView.backgroundColor = HexColor("#010101") 59 tableView.backgroundColor = HexColor("#010101")
@@ -54,21 +66,38 @@ class CNLiveShortVideoContentListView: UIView, UITableViewDelegate, UITableViewD @@ -54,21 +66,38 @@ class CNLiveShortVideoContentListView: UIView, UITableViewDelegate, UITableViewD
54 return tableView 66 return tableView
55 }() 67 }()
56 68
  69 + lazy var dataSource: NSMutableArray = {
  70 + let array = NSMutableArray()
  71 + return array
  72 + }()
  73 +
  74 + var resultBlock: CloseVideoListResultBlock!
  75 +
57 override init(frame: CGRect) { 76 override init(frame: CGRect) {
58 super.init(frame: frame) 77 super.init(frame: frame)
59 78
60 - addSubview(closeButton) 79 + addSubview(grayMaskView)
  80 + grayMaskView.snp.makeConstraints { make in
  81 + make.edges.equalToSuperview()
  82 + }
  83 +
  84 + grayMaskView.addSubview(contentView)
  85 + contentView.snp.makeConstraints { make in
  86 + make.top.equalTo(250)
  87 + make.right.left.bottom.equalToSuperview()
  88 + }
  89 + contentView.addSubview(closeButton)
61 closeButton.snp.makeConstraints { make in 90 closeButton.snp.makeConstraints { make in
62 make.right.equalToSuperview().offset(-15) 91 make.right.equalToSuperview().offset(-15)
63 make.top.equalToSuperview().offset(15) 92 make.top.equalToSuperview().offset(15)
64 make.size.equalTo(30) 93 make.size.equalTo(30)
65 } 94 }
66 - addSubview(titleLabel) 95 + contentView.addSubview(titleLabel)
67 titleLabel.snp.makeConstraints { make in 96 titleLabel.snp.makeConstraints { make in
68 make.top.left.equalToSuperview().offset(20) 97 make.top.left.equalToSuperview().offset(20)
69 make.right.equalTo(closeButton.snp.left).offset(-10) 98 make.right.equalTo(closeButton.snp.left).offset(-10)
70 } 99 }
71 - addSubview(lineLabel) 100 + contentView.addSubview(lineLabel)
72 lineLabel.snp.makeConstraints { make in 101 lineLabel.snp.makeConstraints { make in
73 make.top.equalTo(closeButton.snp.bottom).offset(15) 102 make.top.equalTo(closeButton.snp.bottom).offset(15)
74 make.centerX.equalToSuperview() 103 make.centerX.equalToSuperview()
@@ -76,32 +105,41 @@ class CNLiveShortVideoContentListView: UIView, UITableViewDelegate, UITableViewD @@ -76,32 +105,41 @@ class CNLiveShortVideoContentListView: UIView, UITableViewDelegate, UITableViewD
76 make.right.equalToSuperview().offset(-10) 105 make.right.equalToSuperview().offset(-10)
77 make.height.equalTo(1) 106 make.height.equalTo(1)
78 } 107 }
79 - addSubview(tableView) 108 + contentView.addSubview(tableView)
80 tableView.snp.makeConstraints { make in 109 tableView.snp.makeConstraints { make in
81 make.bottom.left.right.equalToSuperview() 110 make.bottom.left.right.equalToSuperview()
82 make.top.equalTo(lineLabel.snp.bottom).offset(10) 111 make.top.equalTo(lineLabel.snp.bottom).offset(10)
83 } 112 }
84 } 113 }
85 114
  115 + func setupWithDataSource(title: String,dataArray: NSMutableArray) {
  116 + dataSource = dataArray
  117 + titleLabel.text = title
  118 + self.tableView.reloadData()
  119 + }
  120 +
86 required init?(coder: NSCoder) { 121 required init?(coder: NSCoder) {
87 fatalError("init(coder:) has not been implemented") 122 fatalError("init(coder:) has not been implemented")
88 } 123 }
89 124
  125 + deinit {
  126 + print("弹出界面销毁")
  127 + }
90 128
91 @objc func closeMethod() { 129 @objc func closeMethod() {
92 removeFromSuperview() 130 removeFromSuperview()
93 } 131 }
94 132
95 - static public func showVideoContentListView(result: @escaping CloseVideoListResultBlock) { 133 + static public func showVideoContentListView(title: String,dataArray: NSMutableArray,result: @escaping CloseVideoListResultBlock) {
96 134
97 let pickerView = CNLiveShortVideoContentListView.init(frame: CGRect.zero) 135 let pickerView = CNLiveShortVideoContentListView.init(frame: CGRect.zero)
98 - pickerView.backgroundColor = HexColor("#010101") 136 + pickerView.resultBlock = result
  137 + pickerView.setupWithDataSource(title: title,dataArray: dataArray)
99 138
100 let delegate = UIApplication.shared.delegate as! AppDelegate 139 let delegate = UIApplication.shared.delegate as! AppDelegate
101 delegate.window?.addSubview(pickerView) 140 delegate.window?.addSubview(pickerView)
102 pickerView.snp.makeConstraints { make in 141 pickerView.snp.makeConstraints { make in
103 - make.top.equalTo(250)  
104 - make.right.left.bottom.equalToSuperview() 142 + make.edges.equalToSuperview()
105 } 143 }
106 delegate.window?.layoutIfNeeded() 144 delegate.window?.layoutIfNeeded()
107 pickerView.alpha = 0 145 pickerView.alpha = 0
@@ -117,65 +155,85 @@ extension CNLiveShortVideoContentListView { @@ -117,65 +155,85 @@ extension CNLiveShortVideoContentListView {
117 return 1 155 return 1
118 } 156 }
119 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 157 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
120 - return 20 158 + return dataSource.count
121 } 159 }
122 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 160 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
123 guard let cell = tableView.dequeueReusableCell(withIdentifier: kVideoContentListViewCellIdentifier) as? CNLiveShortVideoContentListTableViewCell else { 161 guard let cell = tableView.dequeueReusableCell(withIdentifier: kVideoContentListViewCellIdentifier) as? CNLiveShortVideoContentListTableViewCell else {
124 return CNLiveShortVideoContentListTableViewCell() 162 return CNLiveShortVideoContentListTableViewCell()
125 } 163 }
  164 + cell.setupWithDataModel(listModel: dataSource[indexPath.row] as! CNLiveAlbumListModel)
126 return cell 165 return cell
127 } 166 }
128 - 167 + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  168 + self.resultBlock(dataSource[indexPath.row] as! CNLiveAlbumListModel)
  169 + closeMethod()
  170 + }
129 } 171 }
130 172
131 class CNLiveShortVideoContentListTableViewCell: UITableViewCell { 173 class CNLiveShortVideoContentListTableViewCell: UITableViewCell {
132 174
133 - override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {  
134 - super.init(style: style, reuseIdentifier: reuseIdentifier)  
135 - contentView.backgroundColor = .clear  
136 - backgroundColor = .clear  
137 - selectionStyle = .none  
138 - 175 + lazy var iconView: UIImageView = {
139 let imageView = UIImageView.init() 176 let imageView = UIImageView.init()
140 - imageView.image = UIImage(named: "mine_auth_result_header_failer") 177 + imageView.image = UIImage(named: "short_video_default")
141 imageView.contentMode = .scaleAspectFill 178 imageView.contentMode = .scaleAspectFill
142 imageView.layer.cornerRadius = 5 179 imageView.layer.cornerRadius = 5
143 imageView.layer.masksToBounds = true 180 imageView.layer.masksToBounds = true
144 imageView.clipsToBounds = true 181 imageView.clipsToBounds = true
145 - contentView.addSubview(imageView)  
146 - imageView.snp.makeConstraints { make in  
147 - make.left.top.equalToSuperview().offset(20)  
148 - make.width.equalTo(50)  
149 - make.height.equalTo(70)  
150 - }  
151 -  
152 - let paragraphStyle = NSMutableParagraphStyle()  
153 - paragraphStyle.lineSpacing = 6 182 + return imageView
  183 + }()
  184 +
  185 + lazy var titleLabel: UILabel = {
154 let titleLabel = UILabel.init() 186 let titleLabel = UILabel.init()
155 - titleLabel.attributedText = NSAttributedString(string: "第四集 我们都不知道,所做的哪一个选择会让命运的齿轮开始转动", attributes: [NSAttributedString.Key.paragraphStyle: paragraphStyle])  
156 titleLabel.textColor = .white 187 titleLabel.textColor = .white
157 titleLabel.lineBreakMode = .byTruncatingTail 188 titleLabel.lineBreakMode = .byTruncatingTail
158 titleLabel.numberOfLines = 2 189 titleLabel.numberOfLines = 2
159 titleLabel.font = medium_adapt_font(pointSize: 12) 190 titleLabel.font = medium_adapt_font(pointSize: 12)
  191 + return titleLabel
  192 + }()
  193 +
  194 + lazy var timeLabel: UILabel = {
  195 + let timeLabel = UILabel.init()
  196 + timeLabel.textColor = .white
  197 + timeLabel.font = light_adapt_font(pointSize: 13)
  198 + return timeLabel
  199 + }()
  200 +
  201 + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
  202 + super.init(style: style, reuseIdentifier: reuseIdentifier)
  203 + contentView.backgroundColor = .clear
  204 + backgroundColor = .clear
  205 + selectionStyle = .none
  206 +
  207 +
  208 + contentView.addSubview(iconView)
  209 + iconView.snp.makeConstraints { make in
  210 + make.left.top.equalToSuperview().offset(20)
  211 + make.width.equalTo(50)
  212 + make.height.equalTo(70)
  213 + }
160 contentView.addSubview(titleLabel) 214 contentView.addSubview(titleLabel)
161 titleLabel.snp.makeConstraints { make in 215 titleLabel.snp.makeConstraints { make in
162 - make.left.equalTo(imageView.snp.right).offset(10) 216 + make.left.equalTo(iconView.snp.right).offset(10)
163 make.top.equalToSuperview().offset(20) 217 make.top.equalToSuperview().offset(20)
164 make.right.equalToSuperview().offset(-20) 218 make.right.equalToSuperview().offset(-20)
165 } 219 }
166 -  
167 - let timeLabel = UILabel.init()  
168 - timeLabel.text = "04:45"  
169 - timeLabel.textColor = .white  
170 - timeLabel.font = light_adapt_font(pointSize: 13)  
171 contentView.addSubview(timeLabel) 220 contentView.addSubview(timeLabel)
172 timeLabel.snp.makeConstraints { make in 221 timeLabel.snp.makeConstraints { make in
173 - make.left.equalTo(imageView.snp.right).offset(10)  
174 - make.bottom.equalTo(imageView.snp.bottom) 222 + make.left.equalTo(iconView.snp.right).offset(10)
  223 + make.bottom.equalTo(iconView.snp.bottom)
175 make.right.equalToSuperview().offset(-20) 224 make.right.equalToSuperview().offset(-20)
176 } 225 }
177 } 226 }
178 227
  228 + func setupWithDataModel(listModel: CNLiveAlbumListModel) {
  229 + iconView.kf.indicatorType = .activity
  230 + iconView.kf.setImage(with: URL(string: listModel.poster), placeholder: UIImage(named: "short_video_default"))
  231 + let paragraphStyle = NSMutableParagraphStyle()
  232 + paragraphStyle.lineSpacing = 6
  233 + titleLabel.attributedText = NSAttributedString(string: listModel.title, attributes: [NSAttributedString.Key.paragraphStyle: paragraphStyle, ])
  234 + timeLabel.text = listModel.duration
  235 + }
  236 +
179 required init?(coder: NSCoder) { 237 required init?(coder: NSCoder) {
180 fatalError("init(coder:) has not been implemented") 238 fatalError("init(coder:) has not been implemented")
181 } 239 }
metaCode/Classes/Main/VideoPage/View/CNLiveShortVideoCustomControlView.swift deleted 100644 → 0
1 -//  
2 -// CNLiveShortVideoCustomControlView.swift  
3 -// metaCode  
4 -//  
5 -// Created by open on 2024/1/5.  
6 -//  
7 -  
8 -import Foundation  
9 -import ZFPlayer  
10 -  
11 -class CNLiveShortVideoCustomControlView: UIView, ZFPlayerMediaControl, ZFSliderViewDelegate {  
12 -  
13 - var player: ZFPlayerController?  
14 -  
15 - var topToolView: UIView = {  
16 - let view = UIView()  
17 - let image = UIImage(named: "ZFPlayer_top_shadow")  
18 - view.layer.contents = image?.cgImage  
19 - return view  
20 - }()  
21 -  
22 - var titleLabel: UILabel = {  
23 - let label = UILabel()  
24 - label.textColor = .white  
25 - label.font = UIFont.systemFont(ofSize: 15.0)  
26 - return label  
27 - }()  
28 -  
29 - var bottomToolView: UIView = {  
30 - let view = UIView()  
31 - let image = UIImage(named: "ZFPlayer_bottom_shadow")  
32 - view.layer.contents = image?.cgImage  
33 - return view  
34 - }()  
35 -  
36 - var playOrPauseBtn: UIButton = {  
37 - let button = UIButton(type: .custom)  
38 - button.setImage(UIImage(named: "new_allPlay_44x44_"), for: .normal)  
39 - button.setImage(UIImage(named: "new_allPause_44x44_"), for: .selected)  
40 - return button  
41 - }()  
42 -  
43 - var currentTimeLabel: UILabel = {  
44 - let label = UILabel()  
45 - label.textColor = .white  
46 - label.font = UIFont.systemFont(ofSize: 14.0)  
47 - label.textAlignment = .center  
48 - return label  
49 - }()  
50 -  
51 - var slider: ZFSliderView = {  
52 - let slider = ZFSliderView()  
53 - slider.maximumTrackTintColor = UIColor(red: 0.5, green: 0.5, blue: 0.5, alpha: 0.8)  
54 - slider.bufferTrackTintColor = UIColor(red: 1, green: 1, blue: 1, alpha: 0.5)  
55 - slider.minimumTrackTintColor = .white  
56 - slider.setThumbImage(UIImage(named: "ZFPlayer_slider"), for: .normal)  
57 - slider.sliderHeight = 2  
58 - return slider  
59 - }()  
60 -  
61 - var totalTimeLabel: UILabel = {  
62 - let label = UILabel()  
63 - label.textColor = .white  
64 - label.font = UIFont.systemFont(ofSize: 14.0)  
65 - label.textAlignment = .center  
66 - return label  
67 - }()  
68 -  
69 - var fullScreenBtn: UIButton = {  
70 - let button = UIButton(type: .custom)  
71 - button.setImage(UIImage(named: "ZFPlayer_fullscreen"), for: .normal)  
72 - return button  
73 - }()  
74 -  
75 - var coverImageView: UIImageView = {  
76 - let imageView = UIImageView()  
77 - imageView.isUserInteractionEnabled = true  
78 - imageView.contentMode = .scaleAspectFit  
79 - return imageView  
80 - }()  
81 -  
82 - var bottomPgrogress: ZFSliderView = {  
83 - let slider = ZFSliderView()  
84 - slider.maximumTrackTintColor = .clear  
85 - slider.minimumTrackTintColor = .white  
86 - slider.bufferTrackTintColor = UIColor(red: 1, green: 1, blue: 1, alpha: 0.5)  
87 - slider.sliderHeight = 1  
88 - slider.isHideSliderBlock = false  
89 - return slider  
90 - }()  
91 -  
92 - override init(frame: CGRect) {  
93 - super.init(frame: frame)  
94 - addSubview(topToolView)  
95 - addSubview(bottomToolView)  
96 - addSubview(playOrPauseBtn)  
97 - topToolView.addSubview(titleLabel)  
98 - bottomToolView.addSubview(currentTimeLabel)  
99 - bottomToolView.addSubview(slider)  
100 - bottomToolView.addSubview(totalTimeLabel)  
101 - bottomToolView.addSubview(fullScreenBtn)  
102 - addSubview(bottomPgrogress)  
103 -// addSubview(activity)  
104 -  
105 -// autoFadeTimeInterval = 0.2  
106 -// autoHiddenTimeInterval = 2.5  
107 -  
108 - // 设置子控件的响应事件  
109 - makeSubViewsAction()  
110 -  
111 -// resetControlView()  
112 - clipsToBounds = true  
113 - }  
114 -  
115 - func makeSubViewsAction() {  
116 - playOrPauseBtn.addTarget(self, action: #selector(playPauseButtonClickAction), for: .touchUpInside)  
117 - fullScreenBtn.addTarget(self, action: #selector(fullScreenButtonClickAction), for: .touchUpInside)  
118 - }  
119 -  
120 -  
121 -  
122 - /////////////// ZFSliderViewDelegate  
123 - func sliderTouchBegan(_ value: Float) {  
124 - slider.isdragging = true  
125 - }  
126 -  
127 - func sliderTouchEnded(_ value: Float) {  
128 - guard player?.totalTime ?? 0.0 > 0 else {  
129 - slider.isdragging = false  
130 - return  
131 - }  
132 -  
133 - player?.seek(toTime: (player?.totalTime ?? 0.0) * TimeInterval(value), completionHandler: {[weak self] finished in  
134 - guard let self = self else { return }  
135 - if finished {  
136 - self.slider.isdragging = false  
137 - }  
138 - })  
139 - }  
140 -  
141 - func sliderValueChanged(_ value: Float) {  
142 - guard player?.totalTime ?? 0.0 > 0 else {  
143 - slider.value = 0  
144 - return  
145 - }  
146 -  
147 - slider.isdragging = true  
148 - let currentTimeString = ZFUtilities.convertTimeSecond(Int((player?.totalTime ?? 0.0) * TimeInterval(value)))  
149 - currentTimeLabel.text = currentTimeString  
150 - }  
151 -  
152 - func sliderTapped(_ value: Float) {  
153 - guard player?.totalTime ?? 0.0 > 0 else {  
154 - slider.isdragging = false  
155 - slider.value = 0  
156 - return  
157 - }  
158 -  
159 - slider.isdragging = true  
160 - player?.seek(toTime: (player?.totalTime ?? 0.0) * TimeInterval(value), completionHandler: { [weak self] finished in  
161 - guard let self = self else { return }  
162 - if finished {  
163 - slider.isdragging = false  
164 - player?.currentPlayerManager.play()  
165 - }  
166 - })  
167 - }  
168 -  
169 - ////////////action  
170 - @objc func playPauseButtonClickAction(_ sender: UIButton) {  
171 - playOrPause()  
172 - }  
173 -  
174 - @objc func fullScreenButtonClickAction(_ sender: UIButton) {  
175 - self.player?.enterFullScreen(!self.player!.isFullScreen, animated: true)  
176 - }  
177 -  
178 - private func playOrPause() {  
179 - self.playOrPauseBtn.isSelected = !self.playOrPauseBtn.isSelected  
180 - self.playOrPauseBtn.isSelected ? self.player?.currentPlayerManager.play(): self.player?.currentPlayerManager.pause()  
181 - }  
182 -  
183 - private func playBtnSelectedState(selected: Bool) {  
184 - self.playOrPauseBtn.isSelected = selected  
185 - }  
186 -  
187 -  
188 - ///////private  
189 - func resetControlView() {  
190 - self.bottomToolView.alpha = 1  
191 - self.slider.value = 0  
192 - self.slider.bufferValue = 0  
193 - self.currentTimeLabel.text = "00:00"  
194 - self.totalTimeLabel.text = "00:00"  
195 - self.backgroundColor = .clear  
196 - self.playOrPauseBtn.isSelected = true  
197 - self.titleLabel.text = ""  
198 - }  
199 -  
200 -// func showControlView() {  
201 -// self.topToolView.alpha = 1  
202 -// self.bottomToolView.alpha = 1  
203 -// self.isShow = true  
204 -// self.topToolView.zf_y = 0  
205 -// self.bottomToolView.zf_y = self.zf_height - self.bottomToolView.zf_height  
206 -// self.playOrPauseBtn.alpha = 1  
207 -// self.player.statusBarHidden = false  
208 -// }  
209 -  
210 - required init?(coder: NSCoder) {  
211 - super.init(coder: coder)  
212 - // Initialization code...  
213 - }  
214 -}  
metaCode/Classes/Main/VideoPage/View/CNLiveShortVideoListTableViewCell.swift
@@ -29,7 +29,6 @@ class CNLiveShortVideoListTableViewCell: UITableViewCell { @@ -29,7 +29,6 @@ class CNLiveShortVideoListTableViewCell: UITableViewCell {
29 label.textAlignment = .left 29 label.textAlignment = .left
30 label.numberOfLines = 1 30 label.numberOfLines = 1
31 label.lineBreakMode = .byTruncatingTail 31 label.lineBreakMode = .byTruncatingTail
32 - label.text = "爱得供养"  
33 return label 32 return label
34 }() 33 }()
35 34
@@ -40,7 +39,6 @@ class CNLiveShortVideoListTableViewCell: UITableViewCell { @@ -40,7 +39,6 @@ class CNLiveShortVideoListTableViewCell: UITableViewCell {
40 label.textAlignment = .left 39 label.textAlignment = .left
41 label.numberOfLines = 3 40 label.numberOfLines = 3
42 label.lineBreakMode = .byTruncatingTail 41 label.lineBreakMode = .byTruncatingTail
43 - label.text = "在 Swift 中,CGRect 的属性和方法名通常是小写字母开头的驼峰命名法。确保在 Swift 中使用正确的命名规范和语法。这段 Swift 代码与原始的 Objective-C 代码逻辑相同,只是在语法和命名上进行了一些调整。"  
44 return label 42 return label
45 }() 43 }()
46 44
@@ -50,21 +48,18 @@ class CNLiveShortVideoListTableViewCell: UITableViewCell { @@ -50,21 +48,18 @@ class CNLiveShortVideoListTableViewCell: UITableViewCell {
50 label.font = semibold_adapt_font(pointSize: 15) 48 label.font = semibold_adapt_font(pointSize: 15)
51 label.textAlignment = .center 49 label.textAlignment = .center
52 label.numberOfLines = 0 50 label.numberOfLines = 0
53 - label.text = "当前内容需付费观看"  
54 label.isHidden = true 51 label.isHidden = true
55 return label 52 return label
56 }() 53 }()
57 54
58 lazy var listBtn: UIButton = { 55 lazy var listBtn: UIButton = {
59 let button = UIButton(type: .custom) 56 let button = UIButton(type: .custom)
60 - button.setTitle("爱的供养·45集", for: .normal)  
61 button.setTitleColor(.white, for: .normal) 57 button.setTitleColor(.white, for: .normal)
62 button.contentHorizontalAlignment = .left 58 button.contentHorizontalAlignment = .left
63 button.contentEdgeInsets = UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 0) 59 button.contentEdgeInsets = UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 0)
64 button.titleLabel?.textAlignment = .left 60 button.titleLabel?.textAlignment = .left
65 button.titleLabel?.lineBreakMode = .byTruncatingTail 61 button.titleLabel?.lineBreakMode = .byTruncatingTail
66 button.titleLabel?.font = semibold_adapt_font(pointSize: 15) 62 button.titleLabel?.font = semibold_adapt_font(pointSize: 15)
67 - button.addTarget(self, action: #selector(likeMothod), for: .touchUpInside)  
68 button.layer.cornerRadius = 10 63 button.layer.cornerRadius = 10
69 button.layer.masksToBounds = true 64 button.layer.masksToBounds = true
70 button.backgroundColor = HexColor("#414141") 65 button.backgroundColor = HexColor("#414141")
@@ -146,10 +141,11 @@ class CNLiveShortVideoListTableViewCell: UITableViewCell { @@ -146,10 +141,11 @@ class CNLiveShortVideoListTableViewCell: UITableViewCell {
146 coverImageView.isUserInteractionEnabled = true 141 coverImageView.isUserInteractionEnabled = true
147 coverImageView.tag = 100 142 coverImageView.tag = 100
148 coverImageView.contentMode = .scaleAspectFit 143 coverImageView.contentMode = .scaleAspectFit
  144 + coverImageView.image = UIImage(named: "short_video_default")
149 return coverImageView 145 return coverImageView
150 }() 146 }()
151 147
152 - var homeModel: ShortVideoHomeTestModel! 148 + var homeModel: CNLiveAlbumListModel!
153 weak var delegate: CNLiveShortVideoListTableViewCellDelegate! 149 weak var delegate: CNLiveShortVideoListTableViewCellDelegate!
154 150
155 override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { 151 override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
@@ -172,10 +168,26 @@ class CNLiveShortVideoListTableViewCell: UITableViewCell { @@ -172,10 +168,26 @@ class CNLiveShortVideoListTableViewCell: UITableViewCell {
172 contentView.addSubview(payView) 168 contentView.addSubview(payView)
173 } 169 }
174 170
175 - func setupWithData(model: ShortVideoHomeTestModel) { 171 + func setupWithData(model: CNLiveAlbumListModel) {
176 homeModel = model 172 homeModel = model
177 coverImageView.kf.indicatorType = .activity 173 coverImageView.kf.indicatorType = .activity
178 - coverImageView.kf.setImage(with: URL(string: model.icon.face!), placeholder: UIImage(named: "short_video_default")) 174 + coverImageView.kf.setImage(with: URL(string: model.poster), placeholder: UIImage(named: "short_video_default"))
  175 + iconBtn.kf.setImage(with: URL(string: model.icon!.face), for: .normal)
  176 + likeBtn.setTitle(model.tool?.likesNum, for: .normal)
  177 + commentBtn.setTitle(model.tool?.commentsNum, for: .normal)
  178 + shareBtn.setTitle(model.tool?.shareNum, for: .normal)
  179 + likeBtn.isSelected = model.tool!.liked
  180 + titleLabel.text = model.shortTitle
  181 + descLabel.text = model.title
  182 + listBtn.setTitle(model.albumMsgModel?.albumName, for: .normal)
  183 +
  184 + let imageV: UIImageView = payView.viewWithTag(1000) as! UIImageView
  185 + imageV.kf.indicatorType = .activity
  186 + imageV.kf.setImage(with: URL(string: model.poster))
  187 + let titleL: UILabel = payView.viewWithTag(1001) as! UILabel
  188 + titleL.text = model.title
  189 + let timeL: UILabel = payView.viewWithTag(1002) as! UILabel
  190 + timeL.text = model.duration
179 } 191 }
180 192
181 override func layoutSubviews() { 193 override func layoutSubviews() {
@@ -321,12 +333,11 @@ extension CNLiveShortVideoListTableViewCell { @@ -321,12 +333,11 @@ extension CNLiveShortVideoListTableViewCell {
321 view.layer.masksToBounds = true 333 view.layer.masksToBounds = true
322 334
323 let imageView = UIImageView.init() 335 let imageView = UIImageView.init()
324 - imageView.image = UIImage(named: "mine_auth_result_header_failer")  
325 imageView.contentMode = .scaleAspectFill 336 imageView.contentMode = .scaleAspectFill
326 imageView.layer.cornerRadius = 5 337 imageView.layer.cornerRadius = 5
327 imageView.layer.masksToBounds = true 338 imageView.layer.masksToBounds = true
328 imageView.clipsToBounds = true 339 imageView.clipsToBounds = true
329 - imageView.viewWithTag(1000) 340 + imageView.tag = 1000
330 view.addSubview(imageView) 341 view.addSubview(imageView)
331 imageView.snp.makeConstraints { make in 342 imageView.snp.makeConstraints { make in
332 make.left.top.equalToSuperview().offset(20) 343 make.left.top.equalToSuperview().offset(20)
@@ -334,14 +345,11 @@ extension CNLiveShortVideoListTableViewCell { @@ -334,14 +345,11 @@ extension CNLiveShortVideoListTableViewCell {
334 make.height.equalTo(70) 345 make.height.equalTo(70)
335 } 346 }
336 347
337 - let paragraphStyle = NSMutableParagraphStyle()  
338 - paragraphStyle.lineSpacing = 6  
339 let titleLabel = UILabel.init() 348 let titleLabel = UILabel.init()
340 - titleLabel.attributedText = NSAttributedString(string: "第四集 我们都不知道,所做的哪一个选择会让命运的齿轮开始转动", attributes: [NSAttributedString.Key.paragraphStyle: paragraphStyle])  
341 titleLabel.textColor = .white 349 titleLabel.textColor = .white
342 titleLabel.lineBreakMode = .byTruncatingTail 350 titleLabel.lineBreakMode = .byTruncatingTail
343 titleLabel.numberOfLines = 2 351 titleLabel.numberOfLines = 2
344 - titleLabel.viewWithTag(1001) 352 + titleLabel.tag = 1001
345 titleLabel.font = medium_adapt_font(pointSize: 12) 353 titleLabel.font = medium_adapt_font(pointSize: 12)
346 view.addSubview(titleLabel) 354 view.addSubview(titleLabel)
347 titleLabel.snp.makeConstraints { make in 355 titleLabel.snp.makeConstraints { make in
@@ -351,9 +359,8 @@ extension CNLiveShortVideoListTableViewCell { @@ -351,9 +359,8 @@ extension CNLiveShortVideoListTableViewCell {
351 } 359 }
352 360
353 let timeLabel = UILabel.init() 361 let timeLabel = UILabel.init()
354 - timeLabel.text = "04:45"  
355 timeLabel.textColor = .white 362 timeLabel.textColor = .white
356 - timeLabel.viewWithTag(1002) 363 + timeLabel.tag = 1002
357 timeLabel.font = light_adapt_font(pointSize: 13) 364 timeLabel.font = light_adapt_font(pointSize: 13)
358 view.addSubview(timeLabel) 365 view.addSubview(timeLabel)
359 timeLabel.snp.makeConstraints { make in 366 timeLabel.snp.makeConstraints { make in
metaCode/Classes/Main/VideoPage/ViewModel/CNLiveShortVideoViewModel.swift
@@ -11,21 +11,182 @@ import CNLiveRequestBastKit @@ -11,21 +11,182 @@ import CNLiveRequestBastKit
11 typealias resultShortVideoBlock = (_ result: Any,_ respStatue :CNLiveMineResponseType) -> Void 11 typealias resultShortVideoBlock = (_ result: Any,_ respStatue :CNLiveMineResponseType) -> Void
12 class CNLiveShortVideoViewModel: NSObject { 12 class CNLiveShortVideoViewModel: NSObject {
13 13
14 - /// 这是测试请求短视频数据  
15 - static func requstWithShortVideo(reultShortVideoBlock: @escaping resultShortVideoBlock) {  
16 - 14 + /// 获取短视频数据
  15 + /// - Parameters:
  16 + /// - aid: 专辑 id
  17 + /// - reultShortVideoBlock: 返回
  18 + static func requstWithShortVideo(aid: String,page: NSInteger,reultShortVideoBlock: @escaping resultShortVideoBlock) {
17 let param = NSMutableDictionary() 19 let param = NSMutableDictionary()
18 - param.setValue("10511059", forKey: "creatorId")  
19 - param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "userId")  
20 - param.setValue("3", forKey: "type")  
21 - param.setValue("1", forKey: "page") 20 + param.setValue(aid, forKey: "aid")
  21 + param.setValue("", forKey: "app_channel_id")
  22 + param.setValue("\(page)", forKey: "page")
22 param.setValue("10", forKey: "pageSize") 23 param.setValue("10", forKey: "pageSize")
  24 + param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "sid")
  25 + let custom_param = NSMutableDictionary()
  26 + custom_param.setValue(APPId_wjj, forKey: "appId")
  27 + custom_param.setValue(APPKey_wjj, forKey: "appKey")
  28 + CNLiveNetworking.setAllowRequestDefaultArgument(true)
  29 + CNLiveNetworking.setupShowDataResult(false)
  30 + CNLiveNetworking.setupCustomParam(custom_param as? [String : String])
  31 + CNLiveNetworking.requestNetwork(with: .GET, urlString: APPBaseCMSUrl+"/ugcApi/albumList", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in
  32 + hiddenLoading()
  33 + if (error == nil) {
  34 + let resp = result as! NSDictionary
  35 + let errorCode = "\(resp["errorCode"] ?? "0")"
  36 + if (errorCode == "0") {
  37 + if resp["data"] is NSNull {
  38 + reultShortVideoBlock(NSNull(), .failed)
  39 + } else {
  40 + CNLiveShortVideoViewModel.requstWithAlbumMsgVideo(aid: aid) { result, respStatue in
  41 + if respStatue == .success {
  42 + let resp_dict = resp["data"] as! NSDictionary
  43 + let array = resp_dict["list"] as! NSArray
  44 + let tempArray = NSMutableArray()
  45 + let tempUrlArray = NSMutableArray()
  46 + for item in array {
  47 + let listModel = dictionaryToModel(item as! [String : Any], CNLiveAlbumListModel.self,"") as! CNLiveAlbumListModel
  48 + listModel.albumMsgModel = result as? CNLiveAlbumMsgModel
  49 + tempArray.add(listModel)
  50 + tempUrlArray.add(listModel.videoUrl as String)
  51 + }
  52 + reultShortVideoBlock([tempArray, resp_dict["hasNextPage"], tempUrlArray], .success)
  53 + } else {
  54 + let resp_dict = resp["data"] as! NSDictionary
  55 + let array = resp_dict["list"] as! NSArray
  56 + let tempArray = NSMutableArray()
  57 + let tempUrlArray = NSMutableArray()
  58 + for item in array {
  59 + let listModel = dictionaryToModel(item as! [String : Any], CNLiveAlbumListModel.self,"") as! CNLiveAlbumListModel
  60 + tempArray.add(listModel)
  61 + tempUrlArray.add(listModel.videoUrl as String)
  62 + }
  63 + reultShortVideoBlock([tempArray, resp_dict["hasNextPage"], tempUrlArray], .success)
  64 + }
  65 + }
  66 + }
  67 + } else {
  68 + showMessage(message: resp["errorMessage"] as! String)
  69 + reultShortVideoBlock(NSNull(),.failed)
  70 + }
  71 + } else {
  72 + if CNLiveNetworking.isNetworking() {
  73 + showMessage(message: "请求失败")
  74 + reultShortVideoBlock(NSNull(),.failed)
  75 + } else {
  76 + showMessage(message: "似乎与网络断开链接")
  77 + reultShortVideoBlock(NSNull(),.noNetwork)
  78 + }
  79 + }
  80 + }
  81 + }
  82 +
  83 + /// 获取专辑信息接口
  84 + /// - Parameters:
  85 + /// - aid: 专辑名称
  86 + /// - reultShortVideoBlock: 返回
  87 + static func requstWithAlbumMsgVideo(aid: String,reultShortVideoBlock: @escaping resultShortVideoBlock) {
  88 + let param = NSMutableDictionary()
  89 + param.setValue(aid, forKey: "aid")
  90 + param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "sid")
  91 + let custom_param = NSMutableDictionary()
  92 + custom_param.setValue(APPId_wjj, forKey: "appId")
  93 + custom_param.setValue(APPKey_wjj, forKey: "appKey")
  94 + CNLiveNetworking.setAllowRequestDefaultArgument(true)
  95 + CNLiveNetworking.setupShowDataResult(false)
  96 + CNLiveNetworking.setupCustomParam(custom_param as? [String : String])
  97 + CNLiveNetworking.requestNetwork(with: .GET, urlString: APPBaseCMSUrl+"/contentApi/getAlbumMsg", param: param as! [String : Any], cacheType: .networkOnly) { task, result, error in
  98 + hiddenLoading()
  99 + if (error == nil) {
  100 + let resp = result as! NSDictionary
  101 + let errorCode = "\(resp["errorCode"] ?? "0")"
  102 + if (errorCode == "0") {
  103 + if resp["data"] is NSNull {
  104 + reultShortVideoBlock(NSNull(), .failed)
  105 + } else {
  106 + let listModel = dictionaryToModel(resp["data"] as! [String : Any], CNLiveAlbumMsgModel.self,"") as! CNLiveAlbumMsgModel
  107 + reultShortVideoBlock(listModel, .success)
  108 + }
  109 + } else {
  110 + showMessage(message: resp["errorMessage"] as! String)
  111 + reultShortVideoBlock(NSNull(),.failed)
  112 + }
  113 + } else {
  114 + if CNLiveNetworking.isNetworking() {
  115 + showMessage(message: "请求失败")
  116 + reultShortVideoBlock(NSNull(),.failed)
  117 + } else {
  118 + showMessage(message: "似乎与网络断开链接")
  119 + reultShortVideoBlock(NSNull(),.noNetwork)
  120 + }
  121 + }
  122 + }
  123 + }
  124 +
  125 +
  126 + /// 短视频点赞功能
  127 + /// - Parameters:
  128 + /// - contentId: 点赞内容 id
  129 + /// - contentTitle: 点赞的视频标题
  130 + /// - support: 1:点赞 0:取消点赞
  131 + /// - reultShortVideoBlock: 返回
  132 + static func requestRankWithLike(contentId: String, contentTitle: String, contentSid: String, support: Bool,tagName: String,reultShortVideoBlock: @escaping resultShortVideoBlock) {
  133 + let param = NSMutableDictionary()
  134 + param.setValue(contentId, forKey: "contentId")
  135 + param.setValue(APPId_wjj, forKey: "appId")
  136 + param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "sid")
  137 + param.setValue(contentId, forKey: "contentTitle")
  138 + param.setValue(contentSid, forKey: "contentSid")
  139 + param.setValue(support ? "1":"0", forKey: "support")
  140 + param.setValue("false", forKey: "isRank")
  141 + param.setValue("1", forKey: "isUgc")
  142 + param.setValue(tagName, forKey: "contentTag")
  143 + let custom_param = NSMutableDictionary()
  144 + custom_param.setValue(APPId_wjj, forKey: "appId")
  145 + custom_param.setValue(APPKey_wjj, forKey: "appKey")
  146 + CNLiveNetworking.setAllowRequestDefaultArgument(true)
  147 + CNLiveNetworking.setupShowDataResult(false)
  148 + CNLiveNetworking.setupCustomParam(custom_param as? [String : String])
  149 + CNLiveNetworking.requestNetwork(with: .POST, urlString: APPBaseTokenUrl+"/support/supportBySpIdForRank/insert", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in
  150 + hiddenLoading()
  151 + if (error == nil) {
  152 + let resp = result as! NSDictionary
  153 + let errorCode = "\(resp["errorCode"] ?? "0")"
  154 + if (errorCode == "0") {
  155 + reultShortVideoBlock(support ? "取消点赞成功" : "点赞成功", .success)
  156 + } else {
  157 + showMessage(message: resp["errorMessage"] as! String)
  158 + reultShortVideoBlock(NSNull(),.failed)
  159 + }
  160 + } else {
  161 + if CNLiveNetworking.isNetworking() {
  162 + showMessage(message: "请求失败")
  163 + reultShortVideoBlock(NSNull(),.failed)
  164 + } else {
  165 + showMessage(message: "似乎与网络断开链接")
  166 + reultShortVideoBlock(NSNull(),.noNetwork)
  167 + }
  168 + }
  169 + }
  170 + }
  171 +
  172 + //!!!: 评论相关
  173 +
  174 + /// 获取评论列表数
  175 + /// - Parameters:
  176 + /// - pid: 视频 pid
  177 + /// - page: 页数
  178 + /// - reultShortVideoBlock: 返回
  179 + static func requestCommentList(pid: String,page: NSInteger,reultShortVideoBlock: @escaping resultShortVideoBlock) {
  180 + let param = NSMutableDictionary()
  181 + param.setValue(pid, forKey: "topicId")
  182 + param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "sid")
  183 + param.setValue("\(page)", forKey: "seqId")
  184 + param.setValue("10", forKey: "count")
23 let custom_param = NSMutableDictionary() 185 let custom_param = NSMutableDictionary()
24 custom_param.setValue(APPId_wjj, forKey: "appId") 186 custom_param.setValue(APPId_wjj, forKey: "appId")
25 custom_param.setValue(APPKey_wjj, forKey: "appKey") 187 custom_param.setValue(APPKey_wjj, forKey: "appKey")
26 CNLiveNetworking.setAllowRequestDefaultArgument(true) 188 CNLiveNetworking.setAllowRequestDefaultArgument(true)
27 CNLiveNetworking.setupShowDataResult(false) 189 CNLiveNetworking.setupShowDataResult(false)
28 - CNLiveNetworking.setupDSRequest(true)  
29 CNLiveNetworking.setupCustomParam(custom_param as? [String : String]) 190 CNLiveNetworking.setupCustomParam(custom_param as? [String : String])
30 CNLiveNetworking.requestNetwork(with: .GET, urlString: APPBaseCMSClassUrl+"/ugcApi/ugcVideoList", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in 191 CNLiveNetworking.requestNetwork(with: .GET, urlString: APPBaseCMSClassUrl+"/ugcApi/ugcVideoList", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in
31 hiddenLoading() 192 hiddenLoading()
@@ -36,21 +197,149 @@ class CNLiveShortVideoViewModel: NSObject { @@ -36,21 +197,149 @@ class CNLiveShortVideoViewModel: NSObject {
36 if resp["data"] is NSNull { 197 if resp["data"] is NSNull {
37 reultShortVideoBlock(NSNull(), .failed) 198 reultShortVideoBlock(NSNull(), .failed)
38 } else { 199 } else {
  200 + let listModel = dictionaryToModel(resp["data"] as! [String : Any], ShortVideoHomeCommentModel.self,"") as! ShortVideoHomeCommentModel
  201 + reultShortVideoBlock(listModel, .success)
  202 + }
  203 + } else {
  204 + showMessage(message: resp["errorMessage"] as! String)
  205 + reultShortVideoBlock(NSNull(),.failed)
  206 + }
  207 + } else {
  208 + if CNLiveNetworking.isNetworking() {
  209 + showMessage(message: "请求失败")
  210 + reultShortVideoBlock(NSNull(),.failed)
  211 + } else {
  212 + showMessage(message: "似乎与网络断开链接")
  213 + reultShortVideoBlock(NSNull(),.noNetwork)
  214 + }
  215 + }
  216 + }
  217 + }
  218 +
  219 + /// 发布评论
  220 + /// - Parameters:
  221 + /// - videoId: 视频 id
  222 + /// - comment: 评论内容
  223 + /// - isAuthor: 是否是作者
  224 + /// - reultShortVideoBlock: 返回
  225 + static func requestCommentWithSend(videoId: String, comment: String, isAuthor: Bool,reultShortVideoBlock: @escaping resultShortVideoBlock) {
  226 + let param = NSMutableDictionary()
  227 + param.setValue(videoId, forKey: "topicId")
  228 + param.setValue(APPId_wjj, forKey: "appId")
  229 + param.setValue(comment, forKey: "comment")
  230 + param.setValue(isAuthor ? "1":"0", forKey: "isAuthor")
  231 + param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "sid")
  232 + let custom_param = NSMutableDictionary()
  233 + custom_param.setValue(APPId_wjj, forKey: "appId")
  234 + custom_param.setValue(APPKey_wjj, forKey: "appKey")
  235 + CNLiveNetworking.setAllowRequestDefaultArgument(true)
  236 + CNLiveNetworking.setupShowDataResult(false)
  237 + CNLiveNetworking.setupCustomParam(custom_param as? [String : String])
  238 + CNLiveNetworking.requestNetwork(with: .POST, urlString: APPBaseTokenUrl+"/commentServices/commentForUgc/insertComment", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in
  239 + hiddenLoading()
  240 + if (error == nil) {
  241 + let resp = result as! NSDictionary
  242 + let errorCode = "\(resp["errorCode"] ?? "0")"
  243 + if (errorCode == "0") {
  244 + reultShortVideoBlock("评论成功", .success)
  245 + } else {
  246 + showMessage(message: resp["errorMessage"] as! String)
  247 + reultShortVideoBlock(NSNull(),.failed)
  248 + }
  249 + } else {
  250 + if CNLiveNetworking.isNetworking() {
  251 + showMessage(message: "请求失败")
  252 + reultShortVideoBlock(NSNull(),.failed)
  253 + } else {
  254 + showMessage(message: "似乎与网络断开链接")
  255 + reultShortVideoBlock(NSNull(),.noNetwork)
  256 + }
  257 + }
  258 + }
  259 + }
  260 +
  261 +
  262 + /// 对评论进行回复
  263 + /// - Parameters:
  264 + /// - commentId: 评论 id
  265 + /// - comment: 评论内容
  266 + /// - toSid: 被回复者ID
  267 + /// - fromSid: 回复者ID
  268 + /// - level: 1:一级评论回复 2:二级评论回复
  269 + /// - reultShortVideoBlock: 返回
  270 + static func requestCommentWithReply(commentId: String, comment: String, toSid: String, fromSid: String, level: String,reultShortVideoBlock: @escaping resultShortVideoBlock) {
  271 + let param = NSMutableDictionary()
  272 + param.setValue(commentId, forKey: "commentId")
  273 + param.setValue(APPId_wjj, forKey: "appId")
  274 + param.setValue(comment, forKey: "comment")
  275 + param.setValue(toSid, forKey: "toSid")
  276 + param.setValue(fromSid, forKey: "fromSid")
  277 + param.setValue(level, forKey: "level")
  278 + param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "sid")
  279 + let custom_param = NSMutableDictionary()
  280 + custom_param.setValue(APPId_wjj, forKey: "appId")
  281 + custom_param.setValue(APPKey_wjj, forKey: "appKey")
  282 + CNLiveNetworking.setAllowRequestDefaultArgument(true)
  283 + CNLiveNetworking.setupShowDataResult(false)
  284 + CNLiveNetworking.setupCustomParam(custom_param as? [String : String])
  285 + CNLiveNetworking.requestNetwork(with: .POST, urlString: APPBaseTokenUrl+"/commentServices/commentForUgc/insertReply", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in
  286 + hiddenLoading()
  287 + if (error == nil) {
  288 + let resp = result as! NSDictionary
  289 + let errorCode = "\(resp["errorCode"] ?? "0")"
  290 + if (errorCode == "0") {
  291 + reultShortVideoBlock("回复成功", .success)
  292 + } else {
  293 + showMessage(message: resp["errorMessage"] as! String)
  294 + reultShortVideoBlock(NSNull(),.failed)
  295 + }
  296 + } else {
  297 + if CNLiveNetworking.isNetworking() {
  298 + showMessage(message: "请求失败")
  299 + reultShortVideoBlock(NSNull(),.failed)
  300 + } else {
  301 + showMessage(message: "似乎与网络断开链接")
  302 + reultShortVideoBlock(NSNull(),.noNetwork)
  303 + }
  304 + }
  305 + }
  306 + }
  307 +
  308 +
  309 + /// 获取回复数据列表
  310 + /// - Parameters:
  311 + /// - commentId: 评论 id
  312 + /// - page: 页数
  313 + /// - reultShortVideoBlock: 返回
  314 + static func requestcommentWithReplyList(commentId: String,page: NSInteger,reultShortVideoBlock: @escaping resultShortVideoBlock) {
  315 + let param = NSMutableDictionary()
  316 + param.setValue(commentId, forKey: "commentId")
  317 + param.setValue("\(page)", forKey: "seqId")
  318 + param.setValue("10", forKey: "count")
  319 + let custom_param = NSMutableDictionary()
  320 + custom_param.setValue(APPId_wjj, forKey: "appId")
  321 + custom_param.setValue(APPKey_wjj, forKey: "appKey")
  322 + CNLiveNetworking.setAllowRequestDefaultArgument(true)
  323 + CNLiveNetworking.setupShowDataResult(false)
  324 + CNLiveNetworking.setupCustomParam(custom_param as? [String : String])
  325 + CNLiveNetworking.requestNetwork(with: .POST, urlString: APPBaseCMSClassUrl+"/commentServices/commentForUgc/loadReplys", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in
  326 + hiddenLoading()
  327 + if (error == nil) {
  328 + let resp = result as! NSDictionary
  329 + let errorCode = "\(resp["errorCode"] ?? "0")"
  330 + if (errorCode == "0") {
  331 + if resp["data"] is NSNull {
  332 + reultShortVideoBlock(NSNull(), .failed)
  333 + } else {
39 let resp_dict = resp["data"] as! NSDictionary 334 let resp_dict = resp["data"] as! NSDictionary
40 - let array = resp_dict["list"] as! NSArray 335 + let resp_reply_dict = resp_dict["replyData"] as! NSDictionary
  336 + let array = resp_reply_dict["replys"] as! NSArray
41 let tempArray = NSMutableArray() 337 let tempArray = NSMutableArray()
42 - let tempUrlArray = NSMutableArray()  
43 - var index = 0  
44 for item in array { 338 for item in array {
45 - let listModel = dictionaryToModel(item as! [String : Any], ShortVideoHomeTestModel.self,"") as! ShortVideoHomeTestModel  
46 - if (index > 2) {  
47 - listModel.isMoney = true  
48 - } 339 + let listModel = dictionaryToModel(item as! [String : Any], ShortVideoHomeCommentRListItemModel.self,"") as! ShortVideoHomeCommentRListItemModel
49 tempArray.add(listModel) 340 tempArray.add(listModel)
50 - tempUrlArray.add(listModel.videoUrl! as String)  
51 - index += 1  
52 } 341 }
53 - reultShortVideoBlock([tempArray, tempUrlArray], .success) 342 + reultShortVideoBlock(tempArray, .success)
54 } 343 }
55 } else { 344 } else {
56 showMessage(message: resp["errorMessage"] as! String) 345 showMessage(message: resp["errorMessage"] as! String)
@@ -68,4 +357,84 @@ class CNLiveShortVideoViewModel: NSObject { @@ -68,4 +357,84 @@ class CNLiveShortVideoViewModel: NSObject {
68 } 357 }
69 } 358 }
70 359
  360 + /// 删除评论
  361 + /// - Parameters:
  362 + /// - videoId: 视频 id
  363 + /// - commentId: 评论 id
  364 + /// - reultShortVideoBlock: 返回
  365 + static func requestCommentDelete(videoId: String, commentId: String, reultShortVideoBlock: @escaping resultShortVideoBlock) {
  366 + let param = NSMutableDictionary()
  367 + param.setValue(commentId, forKey: "commentId")
  368 + param.setValue(APPId_wjj, forKey: "appId")
  369 + param.setValue(videoId, forKey: "topicId")
  370 + param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "sid")
  371 + let custom_param = NSMutableDictionary()
  372 + custom_param.setValue(APPId_wjj, forKey: "appId")
  373 + custom_param.setValue(APPKey_wjj, forKey: "appKey")
  374 + CNLiveNetworking.setAllowRequestDefaultArgument(true)
  375 + CNLiveNetworking.setupShowDataResult(false)
  376 + CNLiveNetworking.setupCustomParam(custom_param as? [String : String])
  377 + CNLiveNetworking.requestNetwork(with: .POST, urlString: APPBaseTokenUrl+"/commentServices/commentForUgc/deleteComment", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in
  378 + hiddenLoading()
  379 + if (error == nil) {
  380 + let resp = result as! NSDictionary
  381 + let errorCode = "\(resp["errorCode"] ?? "0")"
  382 + if (errorCode == "0") {
  383 + reultShortVideoBlock("删除成功", .success)
  384 + } else {
  385 + showMessage(message: resp["errorMessage"] as! String)
  386 + reultShortVideoBlock(NSNull(),.failed)
  387 + }
  388 + } else {
  389 + if CNLiveNetworking.isNetworking() {
  390 + showMessage(message: "请求失败")
  391 + reultShortVideoBlock(NSNull(),.failed)
  392 + } else {
  393 + showMessage(message: "似乎与网络断开链接")
  394 + reultShortVideoBlock(NSNull(),.noNetwork)
  395 + }
  396 + }
  397 + }
  398 + }
  399 +
  400 + /// 删除回复
  401 + /// - Parameters:
  402 + /// - replyId: 回复 id
  403 + /// - commentId: 评论 id
  404 + /// - reultShortVideoBlock: 返回
  405 + static func requestCommentReplyDelete(replyId: String, commentId: String, reultShortVideoBlock: @escaping resultShortVideoBlock) {
  406 + let param = NSMutableDictionary()
  407 + param.setValue(commentId, forKey: "commentId")
  408 + param.setValue(APPId_wjj, forKey: "appId")
  409 + param.setValue(replyId, forKey: "replyId")
  410 + param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "sid")
  411 + let custom_param = NSMutableDictionary()
  412 + custom_param.setValue(APPId_wjj, forKey: "appId")
  413 + custom_param.setValue(APPKey_wjj, forKey: "appKey")
  414 + CNLiveNetworking.setAllowRequestDefaultArgument(true)
  415 + CNLiveNetworking.setupShowDataResult(false)
  416 + CNLiveNetworking.setupCustomParam(custom_param as? [String : String])
  417 + CNLiveNetworking.requestNetwork(with: .POST, urlString: APPBaseTokenUrl+"/commentServices/commentForUgc/deleteReply", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in
  418 + hiddenLoading()
  419 + if (error == nil) {
  420 + let resp = result as! NSDictionary
  421 + let errorCode = "\(resp["errorCode"] ?? "0")"
  422 + if (errorCode == "0") {
  423 + reultShortVideoBlock("删除成功", .success)
  424 + } else {
  425 + showMessage(message: resp["errorMessage"] as! String)
  426 + reultShortVideoBlock(NSNull(),.failed)
  427 + }
  428 + } else {
  429 + if CNLiveNetworking.isNetworking() {
  430 + showMessage(message: "请求失败")
  431 + reultShortVideoBlock(NSNull(),.failed)
  432 + } else {
  433 + showMessage(message: "似乎与网络断开链接")
  434 + reultShortVideoBlock(NSNull(),.noNetwork)
  435 + }
  436 + }
  437 + }
  438 + }
  439 +
71 } 440 }