@@ -1806,6 +1806,130 @@ - (void)deleteFile:(NSString *)file {
18061806 }
18071807}
18081808
1809+ #pragma mark - 评论区图片保存
1810+
1811+ + (void )saveCommentImages : (NSArray *)imageModels
1812+ currentIndex : (NSInteger )currentIndex
1813+ completion : (void (^)(NSInteger successCount, NSInteger livePhotoCount, NSInteger failedCount))completion {
1814+ if (!imageModels || imageModels.count == 0 ) {
1815+ if (completion) completion (0 , 0 , 0 );
1816+ return ;
1817+ }
1818+
1819+ // 确定要保存的图片
1820+ NSArray *imagesToSave = nil ;
1821+ if (currentIndex >= 0 && currentIndex < (NSInteger )imageModels.count ) {
1822+ imagesToSave = @[imageModels[currentIndex]];
1823+ } else {
1824+ imagesToSave = imageModels;
1825+ }
1826+
1827+ // 分离普通图片和实况照片
1828+ NSMutableArray *normalImages = [NSMutableArray array ];
1829+ NSMutableArray *livePhotos = [NSMutableArray array ];
1830+
1831+ for (id imageModel in imagesToSave) {
1832+ @try {
1833+ // 获取图片 URL - originUrl 和 mediumUrl 都是 AWEURLModel 类型
1834+ NSString *imageUrlStr = nil ;
1835+
1836+ // 首先尝试 originUrl
1837+ AWEURLModel *originUrlModel = [imageModel valueForKey: @" originUrl" ];
1838+ if (originUrlModel) {
1839+ NSArray *urlList = [originUrlModel originURLList ];
1840+ if (urlList && urlList.count > 0 ) {
1841+ imageUrlStr = urlList.firstObject ;
1842+ }
1843+ }
1844+
1845+ // 如果 originUrl 没有获取到,尝试 mediumUrl
1846+ if (!imageUrlStr) {
1847+ AWEURLModel *mediumUrlModel = [imageModel valueForKey: @" mediumUrl" ];
1848+ if (mediumUrlModel) {
1849+ NSArray *urlList = [mediumUrlModel originURLList ];
1850+ if (urlList && urlList.count > 0 ) {
1851+ imageUrlStr = urlList.firstObject ;
1852+ }
1853+ }
1854+ }
1855+
1856+ NSLog (@" [DYYY] 评论图片URL: %@ " , imageUrlStr);
1857+
1858+ if (!imageUrlStr || imageUrlStr.length == 0 ) {
1859+ NSLog (@" [DYYY] 无法获取图片URL,imageModel: %@ " , imageModel);
1860+ continue ;
1861+ }
1862+
1863+ // 检查是否是实况照片
1864+ id livePhotoModel = [imageModel valueForKey: @" livePhotoModel" ];
1865+ if (livePhotoModel) {
1866+ NSArray *videoUrls = [livePhotoModel valueForKey: @" videoUrl" ];
1867+ if (videoUrls && videoUrls.count > 0 ) {
1868+ NSString *videoUrlStr = videoUrls.firstObject ;
1869+ if (videoUrlStr && videoUrlStr.length > 0 ) {
1870+ // 传入字符串而不是 NSURL,与 downloadAllLivePhotosWithProgress 期望的格式一致
1871+ [livePhotos addObject: @{
1872+ @" imageURL" : imageUrlStr,
1873+ @" videoURL" : videoUrlStr
1874+ }];
1875+ continue ;
1876+ }
1877+ }
1878+ }
1879+
1880+ // 普通图片 - 存储字符串而不是 NSURL
1881+ [normalImages addObject: imageUrlStr];
1882+ } @catch (NSException *e) {
1883+ NSLog (@" [DYYY] 解析评论图片失败: %@ " , e);
1884+ }
1885+ }
1886+
1887+ NSLog (@" [DYYY] 解析完成: 普通图片=%lu , 实况照片=%lu " , (unsigned long )normalImages.count , (unsigned long )livePhotos.count );
1888+
1889+ // 如果都没有解析到有效URL,直接返回失败
1890+ if (normalImages.count == 0 && livePhotos.count == 0 ) {
1891+ if (completion) completion (0 , 0 , (NSInteger )imagesToSave.count );
1892+ return ;
1893+ }
1894+
1895+ __block NSInteger successCount = 0 ;
1896+ __block NSInteger livePhotoCount = 0 ;
1897+ __block NSInteger failedCount = 0 ;
1898+
1899+ dispatch_group_t group = dispatch_group_create ();
1900+
1901+ // 保存普通图片
1902+ if (normalImages.count > 0 ) {
1903+ dispatch_group_enter (group);
1904+ [self downloadAllImagesWithProgress: [normalImages mutableCopy ]
1905+ progress: nil
1906+ completion: ^(NSInteger imgSuccess, NSInteger imgTotal) {
1907+ successCount += imgSuccess;
1908+ failedCount += (imgTotal - imgSuccess);
1909+ dispatch_group_leave (group);
1910+ }];
1911+ }
1912+
1913+ // 保存实况照片
1914+ if (livePhotos.count > 0 ) {
1915+ dispatch_group_enter (group);
1916+ [self downloadAllLivePhotosWithProgress: livePhotos
1917+ progress: nil
1918+ completion: ^(NSInteger lpSuccess, NSInteger lpTotal) {
1919+ successCount += lpSuccess;
1920+ livePhotoCount = lpSuccess;
1921+ failedCount += (lpTotal - lpSuccess);
1922+ dispatch_group_leave (group);
1923+ }];
1924+ }
1925+
1926+ dispatch_group_notify (group, dispatch_get_main_queue (), ^{
1927+ if (completion) {
1928+ completion (successCount, livePhotoCount, failedCount);
1929+ }
1930+ });
1931+ }
1932+
18091933+ (void )downloadAllLivePhotos : (NSArray <NSDictionary *> *)livePhotos {
18101934 if (livePhotos.count == 0 ) {
18111935 return ;
0 commit comments