aboutsummaryrefslogtreecommitdiff
path: root/VKPC/Playlist.m
diff options
context:
space:
mode:
Diffstat (limited to 'VKPC/Playlist.m')
-rw-r--r--VKPC/Playlist.m139
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