VLCPlaylistViewController.m 19.2 KB
Newer Older
Felix Paul Kühne's avatar
Felix Paul Kühne committed
1 2 3 4 5 6 7
//
//  VLCMasterViewController.m
//  AspenProject
//
//  Created by Felix Paul Kühne on 27.02.13.
//  Copyright (c) 2013 VideoLAN. All rights reserved.
//
8 9
//  Refer to the COPYING file of the official project for license.
//
Felix Paul Kühne's avatar
Felix Paul Kühne committed
10 11

#import "VLCPlaylistViewController.h"
12
#import "VLCMovieViewController.h"
13
#import "VLCPlaylistTableViewCell.h"
14
#import "VLCPlaylistGridView.h"
Romain Goyet's avatar
Romain Goyet committed
15
#import "UINavigationController+Theme.h"
16
#import "NSString+SupportedMedia.h"
17
#import "VLCBugreporter.h"
18
#import "VLCAppDelegate.h"
19
#import "UIBarButtonItem+Theme.h"
20
#import "AQGridView.h"
Felix Paul Kühne's avatar
Felix Paul Kühne committed
21

22 23 24 25 26

#ifndef UIStatusBarStyleLightContent
#define UIStatusBarStyleLightContent 1
#endif

27 28 29
@implementation EmptyLibraryView
@end

30
@interface VLCPlaylistViewController () <AQGridViewDataSource, AQGridViewDelegate, UITableViewDataSource, UITableViewDelegate, MLMediaLibrary> {
Felix Paul Kühne's avatar
Felix Paul Kühne committed
31
    NSMutableArray *_foundMedia;
32
    VLCLibraryMode _libraryMode;
33
    UIBarButtonItem *_menuButton;
Felix Paul Kühne's avatar
Felix Paul Kühne committed
34 35 36 37 38
}
@end

@implementation VLCPlaylistViewController

39 40 41
- (void)loadView {
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
        _tableView = [[UITableView alloc] initWithFrame:[UIScreen mainScreen].bounds style:UITableViewStylePlain];
42
        _tableView.backgroundColor = [UIColor colorWithWhite:.122 alpha:1.];
43 44
        _tableView.rowHeight = [VLCPlaylistTableViewCell heightOfCell];
        _tableView.separatorColor = [UIColor colorWithWhite:.122 alpha:1.];
45 46 47 48 49
        _tableView.delegate = self;
        _tableView.dataSource = self;
        self.view = _tableView;
    } else {
        _gridView = [[AQGridView alloc] initWithFrame:[UIScreen mainScreen].bounds];
50 51 52
        _gridView.separatorStyle = AQGridViewCellSeparatorStyleEmptySpace;
        _gridView.alwaysBounceVertical = YES;
        _gridView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
53 54
        _gridView.delegate = self;
        _gridView.dataSource = self;
55
        _gridView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"libraryBackground"]];
56 57 58
        self.view = _gridView;
    }

59
    _libraryMode = VLCLibraryModeAllFiles;
60

61 62
    self.view.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
    self.emptyLibraryView = [[[NSBundle mainBundle] loadNibNamed:@"VLCEmptyLibraryView" owner:self options:nil] lastObject];
63 64
    _emptyLibraryView.emptyLibraryLongDescriptionLabel.lineBreakMode = UILineBreakModeWordWrap;
    _emptyLibraryView.emptyLibraryLongDescriptionLabel.numberOfLines = 0;
65 66 67 68
}

#pragma mark -

Felix Paul Kühne's avatar
Felix Paul Kühne committed
69 70 71
- (void)viewDidLoad
{
    [super viewDidLoad];
72
    self.title = NSLocalizedString(@"LIBRARY_ALL_FILES", @"");
73
    _menuButton = [UIBarButtonItem themedRevealMenuButtonWithTarget:self andSelector:@selector(leftButtonAction:)];
74 75 76 77 78 79 80 81 82 83

    /* After day 354 of the year, the usual VLC cone is replaced by another cone
     * wearing a Father Xmas hat.
     * Note: this icon doesn't represent an endorsement of The Coca-Cola Company
     * and should not be confused with the idea of religious statements or propagation there off
     */
    NSCalendar *gregorian =
    [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSUInteger dayOfYear = [gregorian ordinalityOfUnit:NSDayCalendarUnit inUnit:NSYearCalendarUnit forDate:[NSDate date]];
    if (dayOfYear >= 354)
84
        _menuButton.image = [UIImage imageNamed:@"vlc-xmas"];
85

86
    self.navigationItem.leftBarButtonItem = _menuButton;
87

88 89 90 91 92 93 94 95
    if (SYSTEM_RUNS_IN_THE_FUTURE)
        self.editButtonItem.tintColor = [UIColor whiteColor];
    else {
        [self.editButtonItem setBackgroundImage:[UIImage imageNamed:@"button"]
                                       forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
        [self.editButtonItem setBackgroundImage:[UIImage imageNamed:@"buttonHighlight"]
                                       forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];
    }
Felix Paul Kühne's avatar
Felix Paul Kühne committed
96

97 98 99
    _emptyLibraryView.emptyLibraryLabel.text = NSLocalizedString(@"EMPTY_LIBRARY", @"");
    _emptyLibraryView.emptyLibraryLongDescriptionLabel.text = NSLocalizedString(@"EMPTY_LIBRARY_LONG", @"");
    [_emptyLibraryView.emptyLibraryLongDescriptionLabel sizeToFit];
Felix Paul Kühne's avatar
Felix Paul Kühne committed
100 101
}

102 103 104
- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
105
    [self _displayEmptyLibraryViewIfNeeded];
106 107
}

108 109
- (void)viewDidAppear:(BOOL)animated
{
110 111
    [super viewDidAppear:animated];

112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
    if ([[MLMediaLibrary sharedMediaLibrary] libraryNeedsUpgrade]) {
        self.navigationItem.rightBarButtonItem = nil;
        self.navigationItem.leftBarButtonItem = nil;
        self.emptyLibraryView.emptyLibraryLabel.text = NSLocalizedString(@"UPGRADING_LIBRARY", @"");
        self.emptyLibraryView.emptyLibraryLongDescriptionLabel.hidden = YES;
        [self.emptyLibraryView.activityIndicator startAnimating];
        self.emptyLibraryView.frame = self.view.frame;
        self.title = @"";
        [self.view addSubview:self.emptyLibraryView];

        [[MLMediaLibrary sharedMediaLibrary] setDelegate: self];
        [[MLMediaLibrary sharedMediaLibrary] performSelectorInBackground:@selector(upgradeLibrary) withObject:nil];
        return;
    }

127
    if (_foundMedia.count < 1)
128
        [self updateViewContents];
129
    [[MLMediaLibrary sharedMediaLibrary] performSelector:@selector(libraryDidAppear) withObject:nil afterDelay:1.];
130 131 132

    if (SYSTEM_RUNS_IN_THE_FUTURE)
        [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
133 134 135 136 137 138 139 140
}

- (void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];
    [[MLMediaLibrary sharedMediaLibrary] libraryDidDisappear];
}

141 142 143 144 145 146 147 148 149 150 151
- (BOOL)canBecomeFirstResponder
{
    return YES;
}

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
    if (motion == UIEventSubtypeMotionShake)
        [[VLCBugreporter sharedInstance] handleBugreportRequest];
}

152 153
- (void)removeMediaObject:(MLFile *)mediaObject
{
154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSString *folderLocation = [[[NSURL URLWithString:mediaObject.url] path] stringByDeletingLastPathComponent];
    NSArray *allfiles = [fileManager contentsOfDirectoryAtPath:folderLocation error:nil];
    NSString *fileName = [[[[NSURL URLWithString:mediaObject.url] path] lastPathComponent] stringByDeletingPathExtension];
    NSIndexSet *indexSet = [allfiles indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
       return ([obj rangeOfString:fileName].location != NSNotFound);
    }];
    unsigned int count = indexSet.count;
    NSString *additionalFilePath;
    NSUInteger currentIndex = [indexSet firstIndex];
    for (unsigned int x = 0; x < count; x++) {
        additionalFilePath = allfiles[currentIndex];
        if ([additionalFilePath isSupportedSubtitleFormat])
            [fileManager removeItemAtPath:[folderLocation stringByAppendingPathComponent:additionalFilePath] error:nil];
        currentIndex = [indexSet indexGreaterThanIndex:currentIndex];
    }
    [fileManager removeItemAtPath:[[NSURL URLWithString:mediaObject.url] path] error:nil];
171
    [[MLMediaLibrary sharedMediaLibrary] updateMediaDatabase];
172
    [self updateViewContents];
173 174 175 176
}

- (void)_displayEmptyLibraryViewIfNeeded
{
177 178 179 180
    if (self.emptyLibraryView.superview)
        [self.emptyLibraryView removeFromSuperview];

    if (_foundMedia.count <= 0) {
181
        self.emptyLibraryView.frame = self.view.frame;
182 183
        [self.view addSubview:self.emptyLibraryView];
    }
184
    if (_libraryMode == VLCLibraryModeAllFiles && _foundMedia.count > 0)
185 186 187
        self.navigationItem.rightBarButtonItem = self.editButtonItem;
    else
        self.navigationItem.rightBarButtonItem = nil;
188 189 190 191 192

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
        _tableView.separatorStyle = (_foundMedia.count > 0)? UITableViewCellSeparatorStyleSingleLine:
                                                             UITableViewCellSeparatorStyleNone;
    }
193 194
}

195 196 197 198 199 200 201 202 203
- (void)libraryUpgradeComplete
{
    self.emptyLibraryView.emptyLibraryLongDescriptionLabel.hidden = NO;
    self.emptyLibraryView.emptyLibraryLabel.text = NSLocalizedString(@"EMPTY_LIBRARY", @"");
    [self.emptyLibraryView.activityIndicator stopAnimating];
    self.title = NSLocalizedString(@"LIBRARY_ALL_FILES", @"");
    self.navigationItem.leftBarButtonItem = _menuButton;
    [self.emptyLibraryView removeFromSuperview];

204 205 206 207 208 209 210
    [self updateViewContents];
}

- (void)libraryWasUpdated
{
    NSLog(@"libraryWasUpdated");
    [self updateViewContents];
211 212
}

213
- (void)updateViewContents
Felix Paul Kühne's avatar
Felix Paul Kühne committed
214
{
215
    if (_libraryMode == VLCLibraryModeAllAlbums) {
216 217
        NSArray *rawAlbums = [MLAlbum allAlbums];
        _foundMedia = [[NSMutableArray alloc] init];
218
        for (MLAlbum *album in rawAlbums) {
219 220 221
            if (album.name.length > 0 && album.tracks.count > 0)
                [_foundMedia addObject:album];
        }
222

223
    } else if (_libraryMode == VLCLibraryModeAllSeries) {
224 225
        NSArray *rawShows = [MLShow allShows];
        _foundMedia = [[NSMutableArray alloc] init];
226
        for (MLShow *show in rawShows) {
227 228 229
            if (show.name.length > 0 && show.episodes.count > 0)
                [_foundMedia addObject:show];
        }
230 231 232
    } else
        _foundMedia = [NSMutableArray arrayWithArray:[MLFile allFiles]];

233
    [self reloadViews];
234
}
235

236
- (void)reloadViews
237
{
238
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
239
        [self.tableView reloadData];
240
    else {
241
        [self.gridView reloadData];
242
        [self.gridView performSelector:@selector(reloadData) withObject:nil afterDelay:2.];
243
    }
244 245

    [self _displayEmptyLibraryViewIfNeeded];
Felix Paul Kühne's avatar
Felix Paul Kühne committed
246 247
}

248 249
#pragma mark - Table View

Felix Paul Kühne's avatar
Felix Paul Kühne committed
250 251 252 253 254 255 256 257 258 259 260 261 262
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return _foundMedia.count;
}

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
263
    static NSString *CellIdentifier = @"PlaylistCell";
Felix Paul Kühne's avatar
Felix Paul Kühne committed
264

265
    VLCPlaylistTableViewCell *cell = (VLCPlaylistTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
Felix Paul Kühne's avatar
Felix Paul Kühne committed
266
    if (cell == nil)
267
        cell = [VLCPlaylistTableViewCell cellWithReuseIdentifier:CellIdentifier];
Felix Paul Kühne's avatar
Felix Paul Kühne committed
268

269 270
    NSInteger row = indexPath.row;
    cell.mediaObject = _foundMedia[row];
271

Felix Paul Kühne's avatar
Felix Paul Kühne committed
272 273 274
    return cell;
}

275 276 277 278 279
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    cell.backgroundColor = (indexPath.row % 2 == 0)? [UIColor blackColor]: [UIColor colorWithWhite:.122 alpha:1.];
}

Felix Paul Kühne's avatar
Felix Paul Kühne committed
280 281 282 283 284 285 286
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    return YES;
}

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
287 288
    if (editingStyle == UITableViewCellEditingStyleDelete)
        [self removeMediaObject: _foundMedia[indexPath.row]];
Felix Paul Kühne's avatar
Felix Paul Kühne committed
289 290
}

291
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
Felix Paul Kühne's avatar
Felix Paul Kühne committed
292
{
293 294
    [tableView deselectRowAtIndexPath:indexPath animated:YES];

295 296 297
    NSManagedObject *currentObject = _foundMedia[indexPath.row];
    if ([currentObject isKindOfClass:[MLAlbum class]]) {
        _foundMedia = [NSMutableArray arrayWithArray:[[(MLAlbum *)currentObject tracks] allObjects]];
298 299 300
        self.navigationItem.leftBarButtonItem = [UIBarButtonItem themedBackButtonWithTarget:self andSelector:@selector(backToAllItems:)];
        [self.navigationItem.leftBarButtonItem setTitle:NSLocalizedString(@"LIBRARY_MUSIC", @"")];
        self.title = [(MLAlbum*)currentObject name];
301
        [self reloadViews];
302 303
    } else if ([currentObject isKindOfClass:[MLShow class]]) {
        _foundMedia = [NSMutableArray arrayWithArray:[[(MLShow *)currentObject episodes] allObjects]];
304 305 306
        self.navigationItem.leftBarButtonItem = [UIBarButtonItem themedBackButtonWithTarget:self andSelector:@selector(backToAllItems:)];
        [self.navigationItem.leftBarButtonItem setTitle:NSLocalizedString(@"LIBRARY_SERIES", @"")];
        self.title = [(MLShow*)currentObject name];
307
        [self reloadViews];
308 309 310
    } else {
        if (!self.movieViewController)
            self.movieViewController = [[VLCMovieViewController alloc] initWithNibName:nil bundle:nil];
311

312 313
        if ([currentObject isKindOfClass:[MLFile class]])
            self.movieViewController.mediaItem = (MLFile *)currentObject;
314
        else if ([currentObject isKindOfClass:[MLAlbumTrack class]])
315
            self.movieViewController.mediaItem = [(MLAlbumTrack*)currentObject files].anyObject;
316 317
        else if ([currentObject isKindOfClass:[MLShowEpisode class]])
            self.movieViewController.mediaItem = [(MLShowEpisode*)currentObject files].anyObject;
318 319 320

        [self.navigationController pushViewController:self.movieViewController animated:YES];
    }
Felix Paul Kühne's avatar
Felix Paul Kühne committed
321 322
}

323 324
#pragma mark - AQGridView
- (NSUInteger)numberOfItemsInGridView:(AQGridView *)gridView
Felix Paul Kühne's avatar
Felix Paul Kühne committed
325
{
326
    return _foundMedia.count;
Felix Paul Kühne's avatar
Felix Paul Kühne committed
327 328
}

329
- (AQGridViewCell *)gridView:(AQGridView *)gridView cellForItemAtIndex:(NSUInteger)index
Felix Paul Kühne's avatar
Felix Paul Kühne committed
330
{
331
    static NSString *AQCellIdentifier = @"AQPlaylistCell";
332

333
    VLCPlaylistGridView *cell = (VLCPlaylistGridView *)[gridView dequeueReusableCellWithIdentifier:AQCellIdentifier];
334
    if (cell == nil) {
335
        cell = [[[NSBundle mainBundle] loadNibNamed:@"VLCPlaylistGridView" owner:self options:nil] lastObject];
336
        cell.selectionStyle = AQGridViewCellSelectionStyleNone;
337
        cell.gridView = gridView;
338 339
    }

340
    cell.mediaObject = _foundMedia[index];
341 342 343 344 345 346

    return cell;
}

- (CGSize)portraitGridCellSizeForGridView:(AQGridView *)gridView
{
347
    return [VLCPlaylistGridView preferredSize];
348 349 350 351
}

- (void)gridView:(AQGridView *)gridView didSelectItemAtIndex:(NSUInteger)index
{
352 353
    [self.gridView deselectItemAtIndex:index animated:YES];

354 355 356 357 358 359
    NSManagedObject *currentObject = _foundMedia[index];
    if ([currentObject isKindOfClass:[MLAlbum class]]) {
        _foundMedia = [NSMutableArray arrayWithArray:[[(MLAlbum *)currentObject tracks] allObjects]];
        self.navigationItem.leftBarButtonItem = [UIBarButtonItem themedBackButtonWithTarget:self andSelector:@selector(backToAllItems:)];
        [self.navigationItem.leftBarButtonItem setTitle:NSLocalizedString(@"LIBRARY_MUSIC", @"")];
        self.title = [(MLAlbum*)currentObject name];
360
        [self reloadViews];
361 362 363 364 365
    } else if ([currentObject isKindOfClass:[MLShow class]]) {
        _foundMedia = [NSMutableArray arrayWithArray:[[(MLShow *)currentObject episodes] allObjects]];
        self.navigationItem.leftBarButtonItem = [UIBarButtonItem themedBackButtonWithTarget:self andSelector:@selector(backToAllItems:)];
        [self.navigationItem.leftBarButtonItem setTitle:NSLocalizedString(@"LIBRARY_SERIES", @"")];
        self.title = [(MLShow*)currentObject name];
366
        [self reloadViews];
367 368 369 370 371 372 373 374 375 376
    } else {
        if (!self.movieViewController)
            self.movieViewController = [[VLCMovieViewController alloc] initWithNibName:nil bundle:nil];

        if ([currentObject isKindOfClass:[MLFile class]])
            self.movieViewController.mediaItem = (MLFile *)currentObject;
        else if ([currentObject isKindOfClass:[MLAlbumTrack class]])
            self.movieViewController.mediaItem = [(MLAlbumTrack*)currentObject files].anyObject;
        else if ([currentObject isKindOfClass:[MLShowEpisode class]])
            self.movieViewController.mediaItem = [(MLShowEpisode*)currentObject files].anyObject;
Felix Paul Kühne's avatar
Felix Paul Kühne committed
377

378 379
        [self.navigationController pushViewController:self.movieViewController animated:YES];
    }
Felix Paul Kühne's avatar
Felix Paul Kühne committed
380 381
}

382 383 384 385 386 387
- (void)gridView:(AQGridView *)aGridView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndex:(NSUInteger)index
{
    if (editingStyle == UITableViewCellEditingStyleDelete)
        [self removeMediaObject: _foundMedia[index]];
}

388
#pragma mark - UI implementation
389 390
- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
391
    if (_libraryMode != VLCLibraryModeAllFiles)
392 393
        return;

394
    [super setEditing:editing animated:animated];
395

Felix Paul Kühne's avatar
Felix Paul Kühne committed
396
    UIBarButtonItem *editButton = self.editButtonItem;
397 398
    NSString *editImage = editing? @"doneButton": @"button";
    NSString *editImageHighlight = editing? @"doneButtonHighlight": @"buttonHighlight";
399 400 401 402 403 404 405 406 407
    if (SYSTEM_RUNS_IN_THE_FUTURE)
        editButton.tintColor = [UIColor whiteColor];
    else {
        [editButton setBackgroundImage:[UIImage imageNamed:editImage] forState:UIControlStateNormal
                                     barMetrics:UIBarMetricsDefault];
        [editButton setBackgroundImage:[UIImage imageNamed:editImageHighlight]
                                       forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];
        [editButton setTitleTextAttributes: editing ? @{UITextAttributeTextShadowColor : [UIColor whiteColor], UITextAttributeTextColor : [UIColor blackColor]} : @{UITextAttributeTextShadowColor : [UIColor colorWithWhite:0. alpha:.37], UITextAttributeTextColor : [UIColor whiteColor]} forState:UIControlStateNormal];
    }
Felix Paul Kühne's avatar
Felix Paul Kühne committed
408

409
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
410
        [self.gridView setEditing:editing];
411
    else
412
        [self.tableView setEditing:editing animated:YES];
413 414
}

415 416
- (UITableViewCellEditingStyle)tableView:(UITableView *)aTableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
417
    if (_libraryMode != VLCLibraryModeAllFiles)
418 419 420 421 422
        return UITableViewCellEditingStyleNone;

    return UITableViewCellEditingStyleDelete;
}

423
- (IBAction)leftButtonAction:(id)sender
424
{
425
    [[(VLCAppDelegate*)[UIApplication sharedApplication].delegate revealController] toggleSidebar:![(VLCAppDelegate*)[UIApplication sharedApplication].delegate revealController].sidebarShowing duration:kGHRevealSidebarDefaultAnimationDuration];
426 427
}

428 429 430 431 432 433
- (IBAction)backToAllItems:(id)sender
{
    self.navigationItem.leftBarButtonItem = _menuButton;
    [self setLibraryMode:_libraryMode];
}

434
/* deprecated in iOS 6 */
435 436
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
437 438 439 440
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
        return YES;

    return (_foundMedia.count > 0) || toInterfaceOrientation == UIInterfaceOrientationPortrait;
441 442
}

443 444
// RootController is responsible for supporting interface orientation(iOS6.0+), i.e. navigation controller
// so this will not work as intended without "voodoo magic"(UINavigationController category, subclassing, etc)
445 446
/* introduced in iOS 6 */
- (NSUInteger)supportedInterfaceOrientations {
447 448 449 450 451
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
        return UIInterfaceOrientationMaskAll;

    return (_foundMedia.count > 0)? UIInterfaceOrientationMaskAllButUpsideDown:
                                    UIInterfaceOrientationMaskPortrait;
452 453 454 455
}

/* introduced in iOS 6 */
- (BOOL)shouldAutorotate {
456
    return (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) || (_foundMedia.count > 0);
457 458
}

459
#pragma mark - coin coin
460

461 462 463
- (void)openMovieFromURL:(NSURL *)url
{
    if (!self.movieViewController)
464
        self.movieViewController = [[VLCMovieViewController alloc] initWithNibName:nil bundle:nil];
465

466 467 468
    if (self.navigationController.topViewController != self.movieViewController)
        [self.navigationController pushViewController:self.movieViewController animated:YES];

469
    self.movieViewController.url = url;
470 471
}

472
- (void)setLibraryMode:(VLCLibraryMode)mode
473 474
{
    _libraryMode = mode;
475

476
    if (_libraryMode == VLCLibraryModeAllAlbums)
477
        self.title = NSLocalizedString(@"LIBRARY_MUSIC", @"");
478
    else if( _libraryMode == VLCLibraryModeAllSeries)
479 480 481 482
        self.title = NSLocalizedString(@"LIBRARY_SERIES", @"");
    else
        self.title = NSLocalizedString(@"LIBRARY_ALL_FILES", @"");

483
    [self updateViewContents];
484 485
}

Felix Paul Kühne's avatar
Felix Paul Kühne committed
486
@end