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

#import "VLCPlaylistViewController.h"
10
#import "VLCMovieViewController.h"
11
#import "VLCPlaylistTableViewCell.h"
12
#import "VLCPlaylistGridView.h"
13
#import "VLCAddMediaViewController.h"
Felix Paul Kühne's avatar
Felix Paul Kühne committed
14 15 16 17 18 19 20 21 22 23 24

@interface VLCPlaylistViewController () {
    NSMutableArray *_foundMedia;
}
@end

@implementation VLCPlaylistViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
25
    if (self)
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
26
        self.title = @"VLC";
27

Felix Paul Kühne's avatar
Felix Paul Kühne committed
28 29 30 31 32 33 34
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

35
    UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"vlc"] style:UIBarButtonItemStyleBordered target:self action:@selector(leftButtonAction:)];
36 37 38 39 40 41 42 43 44 45 46 47

    /* 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)
        addButton.image = [UIImage imageNamed:@"vlc-xmas"];

48
    self.editButtonItem.title = NSLocalizedString(@"BUTTON_EDIT", @"");
Felix Paul Kühne's avatar
Felix Paul Kühne committed
49 50 51
    self.navigationItem.leftBarButtonItem = addButton;
    self.navigationItem.rightBarButtonItem = self.editButtonItem;

52
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
53 54 55
        _gridView.separatorStyle = AQGridViewCellSeparatorStyleEmptySpace;
        _gridView.alwaysBounceVertical = YES;
        _gridView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
56 57 58
    } else {
        _tableView.rowHeight = [VLCPlaylistTableViewCell heightOfCell];
        _tableView.separatorColor = [UIColor colorWithWhite:.2 alpha:1.];
Felix Paul Kühne's avatar
Felix Paul Kühne committed
59
    }
60

61 62 63 64 65
    self.emptyLibraryLabel.text = NSLocalizedString(@"EMPTY_LIBRARY", @"");
    self.emptyLibraryLongDescriptionLabel.lineBreakMode = UILineBreakModeWordWrap;
    self.emptyLibraryLongDescriptionLabel.numberOfLines = 0;
    self.emptyLibraryLongDescriptionLabel.text = NSLocalizedString(@"EMPTY_LIBRARY_LONG", @"");
    [self.emptyLibraryLongDescriptionLabel sizeToFit];
Felix Paul Kühne's avatar
Felix Paul Kühne committed
66 67
}

68 69 70
- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
71
    [self _displayEmptyLibraryViewIfNeeded];
72 73
}

74 75 76 77
- (void)viewDidAppear:(BOOL)animated
{
    [self performSelector:@selector(updateViewContents) withObject:nil afterDelay:.3];
    [[MLMediaLibrary sharedMediaLibrary] performSelector:@selector(libraryDidAppear) withObject:nil afterDelay:1.];
78 79

    [super viewDidAppear:animated];
80 81 82 83 84 85 86 87
}

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

88 89 90
- (void)removeMediaObject:(MLFile *)mediaObject
{
    [[NSFileManager defaultManager] removeItemAtPath:[[NSURL URLWithString:mediaObject.url] path] error:nil];
91 92

    [self updateViewContents];
93 94 95 96 97 98 99 100
}

- (void)_displayEmptyLibraryViewIfNeeded
{
    if (_foundMedia.count > 0) {
        if (self.emptyLibraryView.superview)
            [self.emptyLibraryView removeFromSuperview];
    } else {
101
        if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
102 103 104 105 106
            self.emptyLibraryView.frame = self.tableView.frame;
        else
            self.emptyLibraryView.frame = self.gridView.frame;
        [self.view addSubview:self.emptyLibraryView];
    }
107 108
}

109

110
- (void)updateViewContents
Felix Paul Kühne's avatar
Felix Paul Kühne committed
111
{
112 113
    [[MLMediaLibrary sharedMediaLibrary] updateMediaDatabase];

Felix Paul Kühne's avatar
Felix Paul Kühne committed
114
    _foundMedia = [NSMutableArray arrayWithArray:[MLFile allFiles]];
115

116
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
117
        [self.tableView reloadData];
118
    else {
119
        [self.gridView reloadData];
120 121
        [self.gridView setNeedsDisplay];
    }
122 123

    [self _displayEmptyLibraryViewIfNeeded];
Felix Paul Kühne's avatar
Felix Paul Kühne committed
124 125
}

126 127 128

#pragma mark - Table View

Felix Paul Kühne's avatar
Felix Paul Kühne committed
129 130 131 132 133 134 135 136 137 138 139 140 141
- (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
{
142
    static NSString *CellIdentifier = @"PlaylistCell";
Felix Paul Kühne's avatar
Felix Paul Kühne committed
143

144
    VLCPlaylistTableViewCell *cell = (VLCPlaylistTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
Felix Paul Kühne's avatar
Felix Paul Kühne committed
145
    if (cell == nil)
146
        cell = [VLCPlaylistTableViewCell cellWithReuseIdentifier:CellIdentifier];
Felix Paul Kühne's avatar
Felix Paul Kühne committed
147

148 149
    cell.mediaObject = _foundMedia[indexPath.row];

Felix Paul Kühne's avatar
Felix Paul Kühne committed
150 151 152 153 154 155 156 157 158 159
    return cell;
}

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    return YES;
}

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

164
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
Felix Paul Kühne's avatar
Felix Paul Kühne committed
165
{
166
    MLFile *mediaObject = _foundMedia[indexPath.row];
167
    if (!self.movieViewController)
Felix Paul Kühne's avatar
Felix Paul Kühne committed
168
        self.movieViewController = [[VLCMovieViewController alloc] initWithNibName:@"VLCMovieViewController" bundle:nil];
169

170 171
    self.movieViewController.mediaItem = mediaObject;
    [self.navigationController pushViewController:self.movieViewController animated:YES];
Felix Paul Kühne's avatar
Felix Paul Kühne committed
172 173
}

174 175
#pragma mark - AQGridView
- (NSUInteger)numberOfItemsInGridView:(AQGridView *)gridView
Felix Paul Kühne's avatar
Felix Paul Kühne committed
176
{
177
    return _foundMedia.count;
Felix Paul Kühne's avatar
Felix Paul Kühne committed
178 179
}

180
- (AQGridViewCell *)gridView:(AQGridView *)gridView cellForItemAtIndex:(NSUInteger)index
Felix Paul Kühne's avatar
Felix Paul Kühne committed
181
{
182
    static NSString *AQCellIdentifier = @"AQPlaylistCell";
183

184
    VLCPlaylistGridView *cell = (VLCPlaylistGridView *)[gridView dequeueReusableCellWithIdentifier:AQCellIdentifier];
185
    if (cell == nil) {
186
        cell = [[[NSBundle mainBundle] loadNibNamed:@"VLCPlaylistGridView" owner:self options:nil] lastObject];
187
        cell.selectionStyle = AQGridViewCellSelectionStyleGlow;
188 189
    }

190
    cell.mediaObject = _foundMedia[index];
191 192 193 194 195 196

    return cell;
}

- (CGSize)portraitGridCellSizeForGridView:(AQGridView *)gridView
{
197
    return [VLCPlaylistGridView preferredSize];
198 199 200 201
}

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

204
    MLFile *mediaObject = _foundMedia[index];
Felix Paul Kühne's avatar
Felix Paul Kühne committed
205
    if (!self.movieViewController)
Felix Paul Kühne's avatar
Felix Paul Kühne committed
206
        self.movieViewController = [[VLCMovieViewController alloc] initWithNibName:@"VLCMovieViewController" bundle:nil];
Felix Paul Kühne's avatar
Felix Paul Kühne committed
207

208 209
    self.movieViewController.mediaItem = mediaObject;
    [self.navigationController pushViewController:self.movieViewController animated:YES];
Felix Paul Kühne's avatar
Felix Paul Kühne committed
210 211
}

212
#pragma mark - UI implementation
213 214
- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
215 216 217 218 219
    if (_editMode != editing)
        _editMode = editing;
    else
        _editMode = !editing;

220
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
221
        [self.gridView setEditing:_editMode];
222
    else
223 224 225
        [self.tableView setEditing:_editMode animated:YES];

    if (_editMode) {
226
        self.editButtonItem.style = UIBarButtonItemStyleDone;
227
        self.editButtonItem.title = NSLocalizedString(@"BUTTON_DONE",@"");
228 229
    } else {
        self.editButtonItem.style = UIBarButtonItemStylePlain;
230
        self.editButtonItem.title = NSLocalizedString(@"BUTTON_EDIT",@"");
231 232 233
    }
}

234
- (IBAction)leftButtonAction:(id)sender
235
{
236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253
    if (self.addMediaViewController == nil)
        self.addMediaViewController = [[VLCAddMediaViewController alloc] initWithNibName:@"VLCAddMediaViewController" bundle:nil];

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
		self.addMediaViewController.contentSizeForViewInPopover = self.addMediaViewController.view.frame.size;
        if (self.addMediaPopoverController == nil) {
            self.addMediaPopoverController = [[UIPopoverController alloc] initWithContentViewController:self.addMediaViewController];
            self.addMediaPopoverController.delegate = self;
        }

        if (self.addMediaPopoverController.popoverVisible)
            [self.addMediaPopoverController dismissPopoverAnimated:YES];
        else
            [self.addMediaPopoverController presentPopoverFromBarButtonItem:self.navigationItem.leftBarButtonItem
                                                   permittedArrowDirections:UIPopoverArrowDirectionUp
                                                                   animated:YES];
    } else
        [self.navigationController presentViewController:self.addMediaViewController animated:YES completion:NULL];
254 255
}

256
/* deprecated in iOS 6 */
257 258
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
259
    return (toInterfaceOrientation == UIInterfaceOrientationPortrait) || (_foundMedia.count > 0);
260 261 262 263
}

/* introduced in iOS 6 */
- (NSUInteger)supportedInterfaceOrientations {
264
    return (_foundMedia.count > 0)? UIInterfaceOrientationMaskAll: UIInterfaceOrientationMaskPortrait;
265 266 267 268
}

/* introduced in iOS 6 */
- (BOOL)shouldAutorotate {
269
    return (_foundMedia.count > 0);
270 271
}

272
#pragma mark - coin coin
273

274 275 276 277 278 279 280
- (void)openMovieFromURL:(NSURL *)url
{
    if (!self.movieViewController)
        self.movieViewController = [[VLCMovieViewController alloc] initWithNibName:@"VLCMovieViewController" bundle:nil];

    self.movieViewController.url = url;
    [self.navigationController pushViewController:self.movieViewController animated:YES];
281 282
}

283

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