1818#import " User.h"
1919#import < AFNetworking/UIImageView+AFNetworking.h>
2020
21-
2221#import " CSFeedItemCell.h"
2322
23+
2424@interface CSHomeViewController ()
2525{
2626 NSString *currentURL;
@@ -45,7 +45,7 @@ - (void)viewDidLoad
4545 [self setUpVerticalScrollView ];
4646 [self setUpCollectionView ];
4747 [self setUpWebView ];
48- [self setupFeedItemObserver ];
48+ [self setupFeedsObserver ];
4949}
5050
5151- (void )viewDidLayoutSubviews
@@ -70,81 +70,96 @@ -(BOOL)shouldAutorotate {
7070// {
7171// }
7272/* *
73- * Assigns observers for feeds and feed items, puts page controller at start
73+ * Assigns observers for feeds
7474 */
75- - (void ) setupFeedItemObserver
75+ - (void ) setupFeedsObserver
7676{
7777
7878 [self observeRelationship: @keypath (self .currentUser.feeds)
79- changeBlock: ^(__weak CSHomeViewController *self , NSSet *old, NSSet *new) {
80- NSMutableArray *addedFeeds = [[new allObjects ] mutableCopy ];
81- NSMutableArray *removedFeeds = [[old allObjects ] mutableCopy ];
82-
83- [addedFeeds removeObjectsInArray: [old allObjects ]];
84- [removedFeeds removeObjectsInArray: [new allObjects ]];
85-
86- for ( Feed *feed in removedFeeds ){
87- [feed removeAllObservations ];
88-
89- // Remove feed items associated to the feed
90- for ( FeedItem *item in feed.feedItems ){
91- [_feedItems removeObject: item];
92- }
93-
94- // Delete feed which will cascade delete feed items
95- [feed deleteEntity ];
96- [[NSManagedObjectContext defaultContext ] saveToPersistentStoreAndWait ];
97- }
98-
99- for ( Feed *feed in addedFeeds ){
100- [feed observeRelationship: @" feedItems"
101- changeBlock: ^(__weak Feed *feed, NSSet *old, NSSet *new) {
102-
103- _feedItems = [(CSFeedItemCollectionViewDataSource *)_collectionView_feedItems.dataSource feedItems ];
104-
105- if (!new) {
106- NSLog (@" There are no feeds here" );
107- } else {
108- NSMutableArray *addedFeedItems = [[new allObjects ] mutableCopy ];
109- NSMutableArray *removedFeedItems = [[old allObjects ] mutableCopy ];
110-
111- [addedFeedItems removeObjectsInArray: [old allObjects ]];
112- [removedFeedItems removeObjectsInArray: [new allObjects ]];
113-
114- for ( FeedItem *item in removedFeedItems ){
115- [_feedItems removeObject: item];
116- }
117-
118- for ( FeedItem *item in addedFeedItems ){
119- [_feedItems addObject: item];
120- }
121-
122- [_pageControl_itemIndicator.button_newItem setHidden: NO ];
123- }
124- }
125- insertionBlock: nil
126- removalBlock: nil
127- replacementBlock: nil ];
128- }
129- // redraw the collection with the changes to the feed items
130- [_feedCollectionViewDataSource sortFeedItems ];
131- [_collectionView_feedItems reloadData ];
132- _pageControl_itemIndicator.numberOfPages = [_feedItems count ] < 6 ? [_feedItems count ] : 5 ;
133-
134- if (_currentFeedItem){
135- [self scrollToCurrentFeedItem ];
136- [_pageControl_itemIndicator setPageControllerPageAtIndex: [_feedCollectionViewDataSource.sortedFeedItems indexOfObject: _currentFeedItem]
137- forCollection: _feedItems];
138- } else {
139- [_pageControl_itemIndicator setPageControllerPageAtIndex: 0 forCollection: _feedItems];
140- }
79+ changeBlock: ^(__weak CSHomeViewController *self , NSSet *old, NSSet *new){
80+ [self feedsDidChange: old new: new];
14181 }
14282 insertionBlock: nil
14383 removalBlock: nil
14484 replacementBlock: nil
14585 ];
14686}
14787
88+ /* *
89+ * Assigns observers for feedsItems when feeds array on current user changes
90+ */
91+ -(void ) feedsDidChange : (NSSet *)old new : (NSSet *)new
92+ {
93+ NSMutableArray *addedFeeds = [[new allObjects ] mutableCopy ];
94+ NSMutableArray *removedFeeds = [[old allObjects ] mutableCopy ];
95+
96+ [addedFeeds removeObjectsInArray: [old allObjects ]];
97+ [removedFeeds removeObjectsInArray: [new allObjects ]];
98+
99+ for ( Feed *feed in removedFeeds ){
100+ [feed removeAllObservations ];
101+
102+ // Remove feed items associated to the feed
103+ for ( FeedItem *item in feed.feedItems ){
104+ [_feedItems removeObject: item];
105+ }
106+
107+ // Delete feed which will cascade delete feed items
108+ [feed deleteEntity ];
109+ [[NSManagedObjectContext defaultContext ] saveToPersistentStoreAndWait ];
110+ }
111+
112+ for ( Feed *feed in addedFeeds ){
113+ [feed observeRelationship: @" feedItems"
114+ changeBlock: ^(__weak Feed *feed, NSSet *old, NSSet *new) {
115+ [self feedItemsDidChange: old new: new];
116+ }
117+ insertionBlock: nil
118+ removalBlock: nil
119+ replacementBlock: nil ];
120+ }
121+ // redraw the collection with the changes to the feed items
122+ [_feedCollectionViewDataSource sortFeedItems ];
123+ [_collectionView_feedItems reloadData ];
124+ _pageControl_itemIndicator.numberOfPages = [_feedItems count ] < 6 ? [_feedItems count ] : 5 ;
125+
126+ if (_currentFeedItem){
127+ [self scrollToCurrentFeedItem ];
128+ [_pageControl_itemIndicator setPageControllerPageAtIndex: [_feedCollectionViewDataSource.sortedFeedItems indexOfObject: _currentFeedItem]
129+ forCollection: _feedItems];
130+ } else {
131+ [_pageControl_itemIndicator setPageControllerPageAtIndex: 0 forCollection: _feedItems];
132+ }
133+ }
134+
135+ /* *
136+ * Called when feedItems array on observed feeds change, shows new item button on page control
137+ */
138+ -(void ) feedItemsDidChange : (NSSet *)old new : (NSSet *)new
139+ {
140+ _feedItems = [(CSFeedItemCollectionViewDataSource *)_collectionView_feedItems.dataSource feedItems ];
141+
142+ if (!new) {
143+ NSLog (@" There are no feeds here" );
144+ } else {
145+ NSMutableArray *addedFeedItems = [[new allObjects ] mutableCopy ];
146+ NSMutableArray *removedFeedItems = [[old allObjects ] mutableCopy ];
147+
148+ [addedFeedItems removeObjectsInArray: [old allObjects ]];
149+ [removedFeedItems removeObjectsInArray: [new allObjects ]];
150+
151+ for ( FeedItem *item in removedFeedItems ){
152+ [_feedItems removeObject: item];
153+ }
154+
155+ for ( FeedItem *item in addedFeedItems ){
156+ [_feedItems addObject: item];
157+ }
158+
159+ [_pageControl_itemIndicator.button_newItem setHidden: NO ];
160+ }
161+ }
162+
148163#pragma mark - IBActions
149164
150165// Receives left menu link click
@@ -161,7 +176,7 @@ -(void)setUpVerticalScrollView{
161176 NSInteger width = self.verticalScrollView .frame .size .width ;
162177 NSInteger height = self.verticalScrollView .frame .size .height ;
163178 self.verticalScrollView .contentSize = CGSizeMake (width, height*2 );
164-
179+
165180 self.verticalScrollView .pagingEnabled =YES ;
166181 self.verticalScrollView .delegate = self;
167182}
@@ -173,7 +188,7 @@ - (void)setUpCollectionView
173188{
174189 // NSArray *feedItems = [FeedItem MR_findAll];
175190 NSSet *feedItems = _currentUser.feedItems ;
176-
191+
177192 _feedCollectionViewDataSource =
178193 [[CSFeedItemCollectionViewDataSource alloc ] initWithFeedItems: feedItems
179194 reusableCellIdentifier: @" feedItemCell"
0 commit comments