diff options
Diffstat (limited to 'VKPC/Playlist.m')
-rw-r--r-- | VKPC/Playlist.m | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/VKPC/Playlist.m b/VKPC/Playlist.m new file mode 100644 index 0000000..0b51cd4 --- /dev/null +++ b/VKPC/Playlist.m @@ -0,0 +1,139 @@ +// +// Playlist.m +// VKPC +// +// Created by Evgeny on 12/4/13. +// Copyright (c) 2013-2014 Eugene Z. All rights reserved. +// + +#import "Playlist.h" + +@implementation Playlist + +- (id)init { + if (self = [super init]) { + _tracks = [[NSMutableArray alloc] init]; + _title = [[NSString alloc] init]; + _playlistID = 0; + _lastPlaylistID = 0; + _lastTitle = @""; + _lastTracksCount = 0; + + _lastPlaying.index = -1; + _lastPlaying.status = PlayingStatusNotPlaying; + + _playing.index = -1; + _playing.status = PlayingStatusNotPlaying; + + _browser = @""; + _delegate = nil; + } + + return self; +} + +- (void)setTracks:(NSArray *)tracks { + _lastTracksCount = tracks.count; + + [_tracks removeAllObjects]; + [_tracks addObjectsFromArray:tracks]; +} + +- (void)setPlaylistID:(NSInteger)playlistID { + _lastPlaylistID = playlistID; + _playlistID = playlistID; + + if (_delegate != nil) { + [_delegate playlistIDChanged:playlistID]; + } +} + +- (void)setTitle:(NSString *)title { + _lastTitle = [NSString stringWithString:_title]; + _title = [NSString stringWithString:title]; +} + +// TODO fix in receiver +//- (NSString *)title { +// return [_title isEqualToString:@""] ? [[[NSBundle mainBundle] infoDictionary] objectForKey:kCFBundleDisplayName] : _title; +//} + +//- (NSString *)lastTitle { +// return [_lastTitle isEqualToString:@""] ? [[[NSBundle mainBundle] infoDictionary] objectForKey:kCFBundleDisplayName] : _lastTitle; +//} + +//- (int)lastTracksCount { +// return lastTracksCount; +//} + +//- (int)playlistId { +// return playlistId; +//} + +//- (int)lastPlaylistId { +// return lastPlaylistId; +//} + +//- (PlayingTrackStatus)playing { +// return playing; +//} + +//- (PlayingTrackStatus)lastPlaying { +// return lastPlaying; +//} + +- (void)setPlayingIndex:(NSInteger)index { + _lastPlaying.index = _playing.index; + _playing.index = index; +} + +- (void)setPlayingStatus:(PlayingStatus)status { + _lastPlaying.status = _playing.status; + _playing.status = status; +} + +- (void)replaceWithDataFromPlaylist:(Playlist *)pl { + self.tracks = pl.tracks; + self.title = pl.title; + self.playlistID = pl.playlistID; + self.browser = pl.browser; + + [self setPlayingIndex:pl.playing.index]; + [self setPlayingStatus:pl.playing.status]; +} + +// TODO можно хранить таблицу _id => index, обновлять ее при каждом обновлении tracks +- (int)trackIndexById:(NSString *)_id { + for (int i = 0; i < _tracks.count; i++) { + if ([(NSString *)((NSDictionary *)_tracks[i])[@"id"] isEqualToString:_id]) return i; + } + return -1; +} + +- (void)clear { + self.title = @""; + self.browser = @""; +// [self setTitle:@""]; +// [self setBrowser:@""]; + + _lastTracksCount = _tracks.count; + [_tracks removeAllObjects]; + + self.playlistID = 0; +// [self setId:0]; + _playing.status = PlayingStatusNotPlaying; + _playing.index = -1; + + _lastPlaying.status = PlayingStatusNotPlaying; + _lastPlaying.index = -1; +} + +- (BOOL)changed { + return _tracks.count != 0 || _lastTracksCount != _tracks.count || !([_title isEqualToString:_lastTitle]) || _playlistID != _lastPlaylistID; +} + +- (BOOL)empty { + return _tracks.count == 0 && _playlistID <= 0; +} + +@end |