VLCPlaylistViewController.m 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. //
  2. // VLCMasterViewController.m
  3. // AspenProject
  4. //
  5. // Created by Felix Paul Kühne on 27.02.13.
  6. // Copyright (c) 2013 VideoLAN. All rights reserved.
  7. //
  8. #import "VLCPlaylistViewController.h"
  9. #import "VLCMovieViewController.h"
  10. #import "VLCPlaylistTableViewCell.h"
  11. #import "VLCPlaylistGridViewCell.h"
  12. #import "VLCAboutViewController.h"
  13. @interface VLCPlaylistViewController () {
  14. NSMutableArray *_foundMedia;
  15. }
  16. @end
  17. @implementation VLCPlaylistViewController
  18. - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
  19. {
  20. self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
  21. if (self)
  22. self.title = @"Aspen";
  23. return self;
  24. }
  25. - (void)viewDidLoad
  26. {
  27. self.tableView.rowHeight = [VLCPlaylistTableViewCell heightOfCell];
  28. self.tableView.separatorColor = [UIColor colorWithWhite:.2 alpha:1.];
  29. [super viewDidLoad];
  30. UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithTitle:@"About" style:UIBarButtonItemStyleBordered target:self action:@selector(showAboutView:)];
  31. self.navigationItem.leftBarButtonItem = addButton;
  32. self.navigationItem.rightBarButtonItem = self.editButtonItem;
  33. [self updateViewContents];
  34. [[MLMediaLibrary sharedMediaLibrary] libraryDidAppear];
  35. if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
  36. _gridView.separatorStyle = AQGridViewCellSeparatorStyleEmptySpace;
  37. _gridView.alwaysBounceVertical = YES;
  38. _gridView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
  39. }
  40. }
  41. #pragma mark - Table View
  42. - (void)updateViewContents
  43. {
  44. [[MLMediaLibrary sharedMediaLibrary] updateMediaDatabase];
  45. _foundMedia = [NSMutableArray arrayWithArray:[MLFile allFiles]];
  46. if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
  47. [self.tableView reloadData];
  48. else
  49. [self.gridView reloadData];
  50. }
  51. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
  52. {
  53. return 1;
  54. }
  55. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
  56. {
  57. return _foundMedia.count;
  58. }
  59. // Customize the appearance of table view cells.
  60. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  61. {
  62. static NSString *CellIdentifier = @"Cell";
  63. VLCPlaylistTableViewCell *cell = (VLCPlaylistTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
  64. if (cell == nil)
  65. cell = [VLCPlaylistTableViewCell cellWithReuseIdentifier:CellIdentifier];
  66. MLFile *object = _foundMedia[indexPath.row];
  67. cell.titleLabel.text = object.title;
  68. cell.subtitleLabel.text = [NSString stringWithFormat:@"%@ — %.2f MB", [VLCTime timeWithNumber:[object duration]], [object fileSizeInBytes] / 2e6];
  69. cell.thumbnailView.image = object.computedThumbnail;
  70. return cell;
  71. }
  72. - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
  73. {
  74. return YES;
  75. }
  76. - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
  77. {
  78. if (editingStyle == UITableViewCellEditingStyleDelete) {
  79. [_foundMedia removeObjectAtIndex:indexPath.row];
  80. [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
  81. } else if (editingStyle == UITableViewCellEditingStyleInsert) {
  82. // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view.
  83. }
  84. }
  85. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
  86. {
  87. MLFile *mediaObject = _foundMedia[indexPath.row];
  88. if (!self.movieViewController) {
  89. self.movieViewController = [[VLCMovieViewController alloc] initWithNibName:@"VLCMovieViewController" bundle:nil];
  90. }
  91. self.movieViewController.mediaItem = mediaObject;
  92. [self.navigationController pushViewController:self.movieViewController animated:YES];
  93. }
  94. #pragma mark - AQGridView
  95. - (NSUInteger)numberOfItemsInGridView:(AQGridView *)gridView
  96. {
  97. return _foundMedia.count;
  98. }
  99. - (AQGridViewCell *)gridView:(AQGridView *)gridView cellForItemAtIndex:(NSUInteger)index
  100. {
  101. static NSString *AQCellIdentifier = @"AQCell";
  102. VLCPlaylistGridViewCell *cell = (VLCPlaylistGridViewCell *)[gridView dequeueReusableCellWithIdentifier:AQCellIdentifier];
  103. if (cell == nil) {
  104. cell = [[VLCPlaylistGridViewCell alloc] initWithFrame:CGRectMake(0.0, 0.0, 384.,216.) reuseIdentifier:AQCellIdentifier];
  105. cell.selectionStyle = AQGridViewCellSelectionStyleBlueGray;
  106. }
  107. MLFile *object = _foundMedia[index];
  108. cell.title = object.title;
  109. cell.subtitle = [NSString stringWithFormat:@"%@ — %.2f MB", [VLCTime timeWithNumber:[object duration]], [object fileSizeInBytes] / 2e6];
  110. cell.thumbnail = object.computedThumbnail;
  111. return cell;
  112. }
  113. - (CGSize)portraitGridCellSizeForGridView:(AQGridView *)gridView
  114. {
  115. static CGSize cellSize = { 384., 216. };
  116. return cellSize;
  117. }
  118. - (void)gridView:(AQGridView *)gridView didSelectItemAtIndex:(NSUInteger)index
  119. {
  120. MLFile *mediaObject = _foundMedia[index];
  121. if (!self.movieViewController)
  122. self.movieViewController = [[VLCMovieViewController alloc] initWithNibName:@"VLCMovieViewController" bundle:nil];
  123. self.movieViewController.mediaItem = mediaObject;
  124. [self.navigationController pushViewController:self.movieViewController animated:YES];
  125. }
  126. #pragma mark - UI implementation
  127. - (void)showAboutView:(id)sender
  128. {
  129. if (!self.aboutViewController)
  130. self.aboutViewController = [[VLCAboutViewController alloc] initWithNibName:@"VLCAboutViewController" bundle:nil];
  131. [self.navigationController pushViewController:self.aboutViewController animated:YES];
  132. }
  133. @end