1717#import " User.h"
1818
1919@interface CSHomeViewController (){
20- CSFeedItemCollectionViewDataSource *feedCollectionViewDataSource;
21- FeedItem *currentFeedItem;
22- NSString *currentURL;
20+ NSString *currentURL;
2321}
2422
2523// / The collection view which holds the individual feed items
@@ -32,11 +30,14 @@ @implementation CSHomeViewController
3230
3331- (void )viewDidLoad
3432{
35- [super viewDidLoad ];
36- [self setUpCollectionView ];
37- [self setUpWebView ];
38- [self setupFeedItemObserver ];
39- // Do any additional setup after loading the view.
33+ [super viewDidLoad ];
34+ _feedItems = [[NSMutableSet alloc ] init ];
35+ [_pageControl_itemIndicator setUpFadesOnView: [_pageControl_itemIndicator superview ]];
36+ _pageControl_itemIndicator.controller_owner = self;
37+ [self setUpCollectionView ];
38+ [self setUpWebView ];
39+ [self setupFeedItemObserver ];
40+ // Do any additional setup after loading the view.
4041}
4142
4243- (void )viewDidLayoutSubviews
@@ -46,75 +47,88 @@ - (void)viewDidLayoutSubviews
4647
4748- (void ) setupFeedItemObserver
4849{
49- _currentUser = [User current ];
50- [self observeRelationship: @keypath (self .currentUser.feeds)
51- changeBlock: ^(__weak CSHomeViewController *self , NSSet *old, NSSet *new) {
52- NSMutableArray *addedFeeds = [[new allObjects ] mutableCopy ];
53- NSMutableArray *removedFeeds = [[old allObjects ] mutableCopy ];
54-
55- [addedFeeds removeObjectsInArray: [old allObjects ]];
56- [removedFeeds removeObjectsInArray: [new allObjects ]];
57-
58- for ( Feed *feed in removedFeeds ){
59- [feed removeAllObservations ];
60- }
61-
62- for ( Feed *feed in addedFeeds ){
63- [feed observeRelationship: @" feedItems"
64- changeBlock: ^(__weak Feed *feed, NSSet *old, NSSet *new) {
65- if (!new) {
66- NSLog (@" startup?" );
67- } else {
68- NSMutableArray *addedFeedItems = [[new allObjects ] mutableCopy ];
69- NSMutableArray *removedFeedItems = [[old allObjects ] mutableCopy ];
70-
71- [addedFeedItems removeObjectsInArray: [old allObjects ]];
72- [removedFeedItems removeObjectsInArray: [new allObjects ]];
73-
74- for ( FeedItem *item in removedFeedItems ){
75- [[(CSFeedItemCollectionViewDataSource *)_collectionView_feedItems.dataSource feedItems ] removeObject: item];
76- }
77-
78- for ( FeedItem *item in addedFeedItems ){
79- [[(CSFeedItemCollectionViewDataSource *)_collectionView_feedItems.dataSource feedItems ] addObject: item];
80- }
50+ _currentUser = [User current ];
51+
52+ [self observeRelationship: @keypath (self .currentUser.feeds)
53+ changeBlock: ^(__weak CSHomeViewController *self , NSSet *old, NSSet *new) {
54+ NSMutableArray *addedFeeds = [[new allObjects ] mutableCopy ];
55+ NSMutableArray *removedFeeds = [[old allObjects ] mutableCopy ];
56+
57+ [addedFeeds removeObjectsInArray: [old allObjects ]];
58+ [removedFeeds removeObjectsInArray: [new allObjects ]];
59+
60+ for ( Feed *feed in removedFeeds ){
61+ [feed removeAllObservations ];
62+ }
63+
64+ for ( Feed *feed in addedFeeds ){
65+ [feed observeRelationship: @" feedItems"
66+ changeBlock: ^(__weak Feed *feed, NSSet *old, NSSet *new) {
67+
68+ _feedItems = [(CSFeedItemCollectionViewDataSource *)_collectionView_feedItems.dataSource feedItems ];
69+
70+ if (!new) {
71+ NSLog (@" There are no feeds here" );
72+ } else {
73+ NSMutableArray *addedFeedItems = [[new allObjects ] mutableCopy ];
74+ NSMutableArray *removedFeedItems = [[old allObjects ] mutableCopy ];
75+
76+ [addedFeedItems removeObjectsInArray: [old allObjects ]];
77+ [removedFeedItems removeObjectsInArray: [new allObjects ]];
78+
79+ for ( FeedItem *item in removedFeedItems ){
80+ [_feedItems removeObject: item];
8181 }
8282
83- // redraw the collection with the changes to the feed items
84- [feedCollectionViewDataSource sortFeedItems ];
85- [_collectionView_feedItems reloadData ];
86- if (currentFeedItem){
87- [self scrollToCurrentFeedItem ];
83+ for ( FeedItem *item in addedFeedItems ){
84+ [_feedItems addObject: item];
8885 }
86+
87+ [_pageControl_itemIndicator.button_newItem setHidden: NO ];
8988 }
90- insertionBlock: nil
91- removalBlock: nil
92- replacementBlock: nil ];
93- }
94-
95- // properties:@[@"title", @"summary", @"updatedAt", @"publishedAt", @"createdAt", @"image", @"url"]
96- }
97- insertionBlock: nil
98- removalBlock: nil
99- replacementBlock: nil
100- ];
89+
90+ // redraw the collection with the changes to the feed items
91+ [_feedCollectionViewDataSource sortFeedItems ];
92+ [_collectionView_feedItems reloadData ];
93+ _pageControl_itemIndicator.numberOfPages = [_feedItems count ] < 6 ? [_feedItems count ] : 5 ;
94+
95+ if (_currentFeedItem){
96+ [self scrollToCurrentFeedItem ];
97+ [_pageControl_itemIndicator setPageControllerPageAtIndex: [_feedCollectionViewDataSource.sortedFeedItems indexOfObject: _currentFeedItem]
98+ forCollection: _feedItems];
99+ } else {
100+ [_pageControl_itemIndicator setPageControllerPageAtIndex: 0 forCollection: _feedItems];
101+ }
102+ }
103+ insertionBlock: nil
104+ removalBlock: nil
105+ replacementBlock: nil ];
106+ }
107+ }
108+ insertionBlock: nil
109+ removalBlock: nil
110+ replacementBlock: nil
111+ ];
112+ NSLog (@" observer added" );
101113}
102114
115+ // Sets up collection view on controller start up
103116- (void )setUpCollectionView
104117{
105- User *current = [User current ];
106- NSSet *feedItems = current.feedItems ;
107-
108- feedCollectionViewDataSource =
109- [[CSFeedItemCollectionViewDataSource alloc ] initWithFeedItems: feedItems
110- reusableCellIdentifier: @" feedItemCell"
111- configureBlock: [self configureFeedItem ]];
112-
113- self.collectionView_feedItems .dataSource = feedCollectionViewDataSource;
114- self.collectionView_feedItems .delegate = self;
118+ User *current = [User current ];
119+ NSSet *feedItems = current.feedItems ;
120+
121+ _feedCollectionViewDataSource =
122+ [[CSFeedItemCollectionViewDataSource alloc ] initWithFeedItems: feedItems
123+ reusableCellIdentifier: @" feedItemCell"
124+ configureBlock: [self configureFeedItem ]];
125+
126+ self.collectionView_feedItems .dataSource = _feedCollectionViewDataSource;
127+ self.collectionView_feedItems .delegate = self;
128+
129+
115130}
116131
117-
118132#pragma mark - IBActions
119133
120134// Receives left menu link click
@@ -166,8 +180,8 @@ - (void)scrollViewDidEndDecelerating:(UIScrollView *)sender {
166180 // If we are scrolling in the collectionView only
167181 if ([sender isMemberOfClass: [CSFeedItemCollectionView class ]]) {
168182 // unload the webView if we have moved to a new feedItem
169- if (currentFeedItem != self.collectionView_feedItems .currentFeedItem ){
170- currentFeedItem = self.collectionView_feedItems .currentFeedItem ;
183+ if (_currentFeedItem != self.collectionView_feedItems .currentFeedItem ){
184+ _currentFeedItem = self.collectionView_feedItems .currentFeedItem ;
171185 [self .feedItemWebView loadHTMLString: @" <html><head></head><body></body></html>" baseURL: nil ];
172186 }
173187 }
@@ -176,12 +190,20 @@ - (void)scrollViewDidEndDecelerating:(UIScrollView *)sender {
176190// Scroll to the currentFeedItem when the feedItems update
177191- (void )scrollToCurrentFeedItem
178192{
179- NSUInteger index = [feedCollectionViewDataSource .sortedFeedItems indexOfObject: currentFeedItem ];
193+ NSUInteger index = [_feedCollectionViewDataSource .sortedFeedItems indexOfObject: _currentFeedItem ];
180194 NSIndexPath *indexPath = [NSIndexPath indexPathForRow: index inSection: 0 ];
181195 [_collectionView_feedItems scrollToItemAtIndexPath: indexPath atScrollPosition: UICollectionViewScrollPositionCenteredHorizontally animated: NO ];
182196}
183197
184- -(void )loadFeedItemWebView
198+
199+ - (void )collectionView : (UICollectionView *)collectionView didEndDisplayingCell : (UICollectionViewCell *)cell forItemAtIndexPath : (NSIndexPath *)indexPath
200+ {
201+ int newIndex = indexPath.row +((indexPath.row -self.collectionCellGoingTo )*-1 );
202+ [_pageControl_itemIndicator setPageControllerPageAtIndex: newIndex
203+ forCollection: _feedItems];
204+ }
205+
206+ - (void )loadFeedItemWebView
185207{
186208 // Check if this is a new url
187209 if (currentURL != self.collectionView_feedItems .currentFeedItem .url ){
0 commit comments