TCBGMListViewController.m 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. //
  2. // TCBGMListViewController.m
  3. // TXXiaoShiPinDemo
  4. //
  5. // Created by linkzhzhu on 2017/12/8.
  6. // Copyright © 2017年 tencent. All rights reserved.
  7. //
  8. #import "TCBGMListViewController.h"
  9. #import "TCBGMHelper.h"
  10. #import "UIView+CustomAutoLayout.h"
  11. #import "TCBGMCell.h"
  12. @interface TCBGMListViewController()<TCBGMHelperListener>{
  13. NSMutableDictionary* _progressList;
  14. NSTimeInterval lastUIFreshTick;
  15. }
  16. @property(nonatomic) NSDictionary* _bgmDict;
  17. @property(nonatomic) NSArray* _bgmKeys;
  18. @property(nonatomic) TCBGMHelper* _bgmHelper;
  19. @property(nonatomic,weak) id<TCBGMControllerListener> _bgmListener;
  20. @end
  21. @implementation TCBGMListViewController
  22. @synthesize _bgmDict;
  23. @synthesize _bgmKeys;
  24. @synthesize _bgmHelper;
  25. @synthesize _bgmListener;
  26. - (instancetype)initWithStyle:(UITableViewStyle)style
  27. {
  28. self = [super initWithStyle:style];
  29. if (self) {
  30. _progressList = [NSMutableDictionary new];
  31. }
  32. return self;
  33. }
  34. -(void)setBGMControllerListener:(id<TCBGMControllerListener>) listener{
  35. _bgmListener = listener;
  36. }
  37. -(void)viewDidLoad{
  38. [super viewDidLoad];
  39. [[self tableView] registerNib:[UINib nibWithNibName:@"TCBGMCell" bundle:nil] forCellReuseIdentifier:@"TCBGMCell"];
  40. // UIBarButtonItem *customBackButton = [[UIBarButtonItem alloc] initWithTitle:@"取消"
  41. // style:UIBarButtonItemStylePlain
  42. // target:self
  43. // action:@selector(goBack)];
  44. UIBarButtonItem *customBackButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"back"] style:UIBarButtonItemStylePlain target:self action:@selector(goBack)];
  45. customBackButton.tintColor = UIColorFromRGB(0x0accac);
  46. self.navigationItem.leftBarButtonItem = customBackButton;
  47. lastUIFreshTick = [[NSDate date] timeIntervalSince1970]*1000;
  48. _bgmHelper = [TCBGMHelper sharedInstance];
  49. [_bgmHelper setDelegate:self];
  50. [self loadBGMList];
  51. // UIButton* testBtn = [[UIButton alloc] init];
  52. // testBtn.titleLabel.font = [UIFont systemFontOfSize:16];
  53. // [testBtn setTitle:@"测试" forState:UIControlStateNormal];
  54. // [testBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
  55. // [testBtn setBackgroundImage:[UIImage imageNamed:@"button"] forState:UIControlStateNormal];
  56. // [testBtn setBackgroundImage:[UIImage imageNamed:@"button_pressed"] forState:UIControlStateSelected];
  57. // [testBtn addTarget:self action:@selector(test:) forControlEvents:UIControlEventTouchUpInside];
  58. // [self.view addSubview:testBtn];
  59. // [testBtn sizeWith:CGSizeMake(200, 50)];
  60. // [testBtn alignParentLeft];
  61. }
  62. - (void)goBack
  63. {
  64. [self.navigationController dismissViewControllerAnimated:YES completion:nil];
  65. }
  66. -(void) updateCells{
  67. dispatch_async(dispatch_get_main_queue(), ^(){
  68. [[self tableView] reloadData];
  69. });
  70. }
  71. - (void)loadBGMList{
  72. NSString* jsonUrl = @"http://bgm-1252463788.cosgz.myqcloud.com/bgm_list.json";
  73. // NSString *jsonUrl = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"bgm_list.json"];
  74. [_bgmHelper initBGMListWithJsonFile:jsonUrl];
  75. }
  76. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
  77. {
  78. return 1;
  79. }
  80. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
  81. {
  82. return [_bgmKeys count];
  83. }
  84. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  85. {
  86. TCBGMCell* cell = [tableView dequeueReusableCellWithIdentifier:@"TCBGMCell"];
  87. // if (!cell) {
  88. // cell = [[TCBGMCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"TCBGMCell"];
  89. // }
  90. NSUInteger rowNum = indexPath.row;
  91. [[cell nameView] setText:[[_bgmDict objectForKey:[_bgmKeys objectAtIndex:rowNum]] name]];
  92. [[cell progressView] setWidth:2];
  93. NSNumber* nsPercent = [_progressList objectForKey:[_bgmKeys objectAtIndex:rowNum]];
  94. float percent = nsPercent? [nsPercent floatValue] : 0;
  95. [[cell progressView] setPercent: percent];
  96. [cell setFinish:(percent == 1.f)];
  97. return cell;
  98. }
  99. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
  100. TCBGMElement* ele = [_bgmDict objectForKey:[_bgmKeys objectAtIndex:indexPath.row]];
  101. if([ele isValid] && [[NSFileManager defaultManager] fileExistsAtPath:[NSHomeDirectory() stringByAppendingPathComponent:[ele localUrl]]]){
  102. [self goBack];
  103. [_bgmListener onBGMControllerPlay: [NSHomeDirectory() stringByAppendingPathComponent:[ele localUrl]]];
  104. }
  105. else [_bgmHelper downloadBGM:[_bgmDict objectForKey:[_bgmKeys objectAtIndex:indexPath.row]]];
  106. }
  107. -(void) onBGMListLoad:(NSDictionary*)dict{
  108. if(dict){
  109. BGMLog(@"BGM List 加载成功");
  110. _bgmDict = dict;
  111. _bgmKeys = [_bgmDict keysSortedByValueUsingComparator:^(TCBGMElement* e1, TCBGMElement* e2){
  112. return [[e1 name] compare:[e2 name]];
  113. }];
  114. for (NSString* url in _bgmKeys) {
  115. TCBGMElement* ele = [_bgmDict objectForKey:url];
  116. if([[ele isValid] boolValue]){
  117. [_progressList setObject :[NSNumber numberWithFloat:1.f] forKey:url];
  118. }
  119. }
  120. [self updateCells];
  121. }
  122. }
  123. -(void) onBGMDownloading:(TCBGMElement*)current percent:(float)percent{
  124. BGMLog(@"%@:%f",[current name], percent);
  125. [_progressList setObject :[NSNumber numberWithFloat:percent] forKey:[current netUrl]];
  126. if([[NSDate date] timeIntervalSince1970]*1000 - lastUIFreshTick > 300){
  127. lastUIFreshTick = [[NSDate date] timeIntervalSince1970]*1000;
  128. [self updateCells];
  129. }
  130. }
  131. -(void) onBGMDownloadDone:(TCBGMElement*)element{
  132. if([[element isValid] boolValue]){
  133. BGMLog(@"Download \"%@\" success!", [element name]);
  134. [_progressList setObject :[NSNumber numberWithFloat:1.f] forKey:[element netUrl]];
  135. [self goBack];
  136. [_bgmListener onBGMControllerPlay: [NSHomeDirectory() stringByAppendingPathComponent:[element localUrl]]];
  137. }
  138. else BGMLog(@"Download \"%@\" failed!", [element name]);
  139. [self updateCells];
  140. }
  141. @end