VLCMovieViewController.m 6.39 KB
Newer Older
Felix Paul Kühne's avatar
Felix Paul Kühne committed
1
//
2
//  VLCMovieViewController.m
Felix Paul Kühne's avatar
Felix Paul Kühne committed
3 4 5 6 7 8
//  AspenProject
//
//  Created by Felix Paul Kühne on 27.02.13.
//  Copyright (c) 2013 VideoLAN. All rights reserved.
//

9
#import "VLCMovieViewController.h"
Felix Paul Kühne's avatar
Felix Paul Kühne committed
10

11
@interface VLCMovieViewController ()
Felix Paul Kühne's avatar
Felix Paul Kühne committed
12 13 14
@property (strong, nonatomic) UIPopoverController *masterPopoverController;
@end

15
@implementation VLCMovieViewController
16
@synthesize movieView=_movieView, tapBarView=_tapBarView, backButton=_backButton, positionSlider=_positionSlider, timeDisplay=_timeDisplay, playPauseButton = _playPauseButton, bwdButton = _bwdButton, fwdButton = _fwdButton, subtitleSwitcherButton = _subtitleSwitcherButton, audioSwitcherButton = _audioSwitcherButton, controllerPanel = _controllerPanel;
Felix Paul Kühne's avatar
Felix Paul Kühne committed
17 18 19

- (void)dealloc
{
20
    [_mediaItem release];
Felix Paul Kühne's avatar
Felix Paul Kühne committed
21 22 23 24
    [_masterPopoverController release];
    [super dealloc];
}

25
#pragma mark - Managing the media item
Felix Paul Kühne's avatar
Felix Paul Kühne committed
26

27
- (void)setMediaItem:(id)newMediaItem
Felix Paul Kühne's avatar
Felix Paul Kühne committed
28
{
29 30 31
    if (_mediaItem != newMediaItem) {
        [_mediaItem release];
        _mediaItem = [newMediaItem retain];
Felix Paul Kühne's avatar
Felix Paul Kühne committed
32 33 34 35
    }

    if (self.masterPopoverController != nil) {
        [self.masterPopoverController dismissPopoverAnimated:YES];
36
    }
Felix Paul Kühne's avatar
Felix Paul Kühne committed
37 38
}

39
- (void)viewDidLoad
Felix Paul Kühne's avatar
Felix Paul Kühne committed
40
{
41 42 43 44
    [super viewDidLoad];
    _mediaPlayer = [[VLCMediaPlayer alloc] init];
    [_mediaPlayer setDelegate:self];
    [_mediaPlayer setDrawable:self.movieView];
45 46 47 48
    self.navigationItem.leftBarButtonItem = self.backButton;
    self.navigationItem.titleView = self.positionSlider;
    self.navigationItem.rightBarButtonItem = self.timeDisplay;
    self.navigationItem.rightBarButtonItem.style = UIBarButtonItemStylePlain;
49
}
Felix Paul Kühne's avatar
Felix Paul Kühne committed
50

51 52 53
- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
54 55
    if (self.mediaItem) {
        self.title = [self.mediaItem title];
56 57 58 59 60 61 62

        [_mediaPlayer setMedia:[VLCMedia mediaWithURL:[NSURL URLWithString:self.mediaItem.url]]];
        if (self.mediaItem.lastPosition && [self.mediaItem.lastPosition floatValue] < 0.99)
            [_mediaPlayer setPosition:[self.mediaItem.lastPosition floatValue]];
        [_mediaPlayer play];

        [UIApplication sharedApplication].idleTimerDisabled = YES;
Felix Paul Kühne's avatar
Felix Paul Kühne committed
63
    }
64 65
    self.tapBarView.hidden = NO;
    self.tapBarView.alpha = 1.0f;
Felix Paul Kühne's avatar
Felix Paul Kühne committed
66 67
}

68
- (void)viewWillDisappear:(BOOL)animated
Felix Paul Kühne's avatar
Felix Paul Kühne committed
69
{
70 71 72
    [_mediaPlayer pause];
    [UIApplication sharedApplication].idleTimerDisabled = NO;
    [super viewWillDisappear:animated];
Felix Paul Kühne's avatar
Felix Paul Kühne committed
73 74 75 76 77 78 79 80 81 82 83
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
84
    if (self)
85
        self.title = @"Video Playback";
Felix Paul Kühne's avatar
Felix Paul Kühne committed
86 87
    return self;
}
88

89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
#pragma mark - controls

- (IBAction)closePlayback:(id)sender
{
    [self.navigationController popViewControllerAnimated:YES];
}

- (IBAction)positionSliderAction:(UISlider *)sender
{
    _mediaPlayer.position = sender.value;
}

- (void)mediaPlayerTimeChanged:(NSNotification *)aNotification {
    self.positionSlider.value = [_mediaPlayer position];
    self.timeDisplay.title = [[_mediaPlayer remainingTime] stringValue];
}

106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
- (IBAction)play:(id)sender
{
    if ([_mediaPlayer isPlaying]) {
        [_mediaPlayer pause];
        _playPauseButton.titleLabel.text = @"Pse";
    } else {
        [_mediaPlayer play];
        _playPauseButton.titleLabel.text = @"Play";
    }
}

- (IBAction)forward:(id)sender
{
    [_mediaPlayer mediumJumpForward];
}

- (IBAction)backward:(id)sender
{
    [_mediaPlayer mediumJumpBackward];
}

- (IBAction)switchAudioTrack:(id)sender
{
    _audiotrackActionSheet = [[UIActionSheet alloc] initWithTitle:NSLocalizedString(@"Choose Audio Track", @"audio track selector") delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles: nil];
    NSArray * audioTracks = [_mediaPlayer audioTracks];
    NSUInteger count = [audioTracks count];
    for (NSUInteger i = 1; i < count; i++) // skip the "Disable menu item"
        [_audiotrackActionSheet addButtonWithTitle:[audioTracks objectAtIndex:i]];
    [_audiotrackActionSheet addButtonWithTitle:NSLocalizedString(@"Cancel", @"audio track selector")];
    [_audiotrackActionSheet setCancelButtonIndex:[_audiotrackActionSheet numberOfButtons] - 1];
    [_audiotrackActionSheet showFromRect:[self.audioSwitcherButton frame] inView:self.audioSwitcherButton animated:YES];
}

- (IBAction)switchSubtitleTrack:(id)sender
{
    _subtitleActionSheet = [[UIActionSheet alloc] initWithTitle:NSLocalizedString(@"Choose Subtitle Track", @"subtitle track selector") delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles: nil];
    NSArray * spuTracks = [_mediaPlayer videoSubTitles];
    NSUInteger count = [spuTracks count];
    for (NSUInteger i = 0; i < count; i++)
        [_subtitleActionSheet addButtonWithTitle:[spuTracks objectAtIndex:i]];
    [_subtitleActionSheet addButtonWithTitle:NSLocalizedString(@"Cancel", @"subtitle track selector")];
    [_subtitleActionSheet setCancelButtonIndex:[_subtitleActionSheet numberOfButtons] - 1];
    [_subtitleActionSheet showFromRect:[self.subtitleSwitcherButton frame] inView:self.subtitleSwitcherButton animated:YES];
}

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
    if (buttonIndex == 0) { // "Cancel" button
        APLog(@"action sheet was canceled");
        return;
    }
    if (actionSheet == _subtitleActionSheet) {
        _mediaPlayer.currentVideoSubTitleIndex = buttonIndex;
        [_subtitleActionSheet release];
    } else {
        _mediaPlayer.currentAudioTrackIndex = buttonIndex;
        [_audiotrackActionSheet release];
    }
}

Felix Paul Kühne's avatar
Felix Paul Kühne committed
165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181
#pragma mark - Split view

- (void)splitViewController:(UISplitViewController *)splitController willHideViewController:(UIViewController *)viewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)popoverController
{
    barButtonItem.title = NSLocalizedString(@"Master", @"Master");
    [self.navigationItem setLeftBarButtonItem:barButtonItem animated:YES];
    self.masterPopoverController = popoverController;
}

- (void)splitViewController:(UISplitViewController *)splitController willShowViewController:(UIViewController *)viewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem
{
    // Called when the view is shown again in the split view, invalidating the button and popover controller.
    [self.navigationItem setLeftBarButtonItem:nil animated:YES];
    self.masterPopoverController = nil;
}

@end