| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- //
- // JXEpisodeInfo.m
- // AICity
- //
- // Created by TogetherWatch on 2025-10-20.
- // Feature: 010-ui-ios - iOS平台完整功能实现(对标Android)
- //
- #import "JXEpisodeInfo.h"
- @implementation JXEpisodeInfo
- #pragma mark - 初始化方法
- - (instancetype)init {
- self = [super init];
- if (self) {
- _episodeId = @"";
- _episodeNumber = 0;
- _title = @"";
- _thumbnailUrl = @"";
- _duration = 0;
- _likeCount = 0;
- _isPaid = NO;
- _isActive = YES;
- _tcplayerAppId = @"";
- _tcplayerFileId = @"";
- _tcplayerSign = @"";
- _tcplayerSign265 = @"";
- _tcplayerSign264 = @"";
- }
- return self;
- }
- - (instancetype)initWithDictionary:(NSDictionary *)dict {
- self = [super init];
- if (self) {
- _episodeId = dict[@"id"] ?: dict[@"jx_episode_id"] ?: @"";
- _episodeNumber = [dict[@"episodeNumber"] ?: dict[@"episode_number"] integerValue];
- _title = dict[@"title"] ?: @"";
- _thumbnailUrl = dict[@"thumbnailUrl"] ?: dict[@"thumbnail"] ?: @"";
- _duration = [dict[@"duration"] integerValue];
- _likeCount = [dict[@"likeCount"] longLongValue];
- _isPaid = [dict[@"isPaid"] ?: dict[@"is_paid"] boolValue];
- _isActive = [dict[@"isActive"] ?: dict[@"is_active"] boolValue];
-
- // 播放源信息
- _tcplayerAppId = dict[@"tcplayer_app_id"] ?: @"";
- _tcplayerFileId = dict[@"tcplayer_file_id"] ?: @"";
- _tcplayerSign = dict[@"tcplayer_sign"] ?: @"";
- _tcplayerSign265 = dict[@"tcplayer_sign_265"] ?: @"";
- _tcplayerSign264 = dict[@"tcplayer_sign_264"] ?: @"";
- }
- return self;
- }
- + (instancetype)episodeInfoWithDictionary:(NSDictionary *)dict {
- return [[self alloc] initWithDictionary:dict];
- }
- - (NSDictionary *)toDictionary {
- return @{
- @"id": self.episodeId,
- @"episodeNumber": @(self.episodeNumber),
- @"title": self.title,
- @"thumbnailUrl": self.thumbnailUrl,
- @"duration": @(self.duration),
- @"likeCount": @(self.likeCount),
- @"isPaid": @(self.isPaid),
- @"isActive": @(self.isActive),
- @"tcplayer_app_id": self.tcplayerAppId ?: @"",
- @"tcplayer_file_id": self.tcplayerFileId ?: @"",
- @"tcplayer_sign": self.tcplayerSign ?: @"",
- @"tcplayer_sign_265": self.tcplayerSign265 ?: @"",
- @"tcplayer_sign_264": self.tcplayerSign264 ?: @""
- };
- }
- #pragma mark - UI格式化方法
- - (NSString *)formattedDuration {
- NSInteger minutes = self.duration / 60;
- NSInteger seconds = self.duration % 60;
- return [NSString stringWithFormat:@"%02ld:%02ld", (long)minutes, (long)seconds];
- }
- - (NSString *)formattedLikeCount {
- return [self formatCount:self.likeCount];
- }
- - (NSString *)formatCount:(long long)count {
- if (count >= 10000) {
- return [NSString stringWithFormat:@"%.1fw", count / 10000.0];
- } else if (count >= 1000) {
- return [NSString stringWithFormat:@"%.1fk", count / 1000.0];
- } else {
- return [NSString stringWithFormat:@"%lld", count];
- }
- }
- #pragma mark - NSObject
- - (NSString *)description {
- return [NSString stringWithFormat:@"<JXEpisodeInfo: 第%ld集, title=%@, duration=%@, isPaid=%@>",
- (long)self.episodeNumber,
- self.title,
- [self formattedDuration],
- @(self.isPaid)];
- }
- @end
|