diff options
author | Vitaly Takmazov | 2016-08-28 21:03:22 +0300 |
---|---|---|
committer | Vitaly Takmazov | 2016-08-28 21:03:22 +0300 |
commit | 188d8e4ea870d1a6c8edd5a9b323742804badeba (patch) | |
tree | 071067f7189a6474d49abb952b1b04b820985b7a /Juick/ViewControllers/MessagesViewController.m | |
parent | a74588083c4950e9237dff7a84ccdd129b72c950 (diff) |
project cleanup
Diffstat (limited to 'Juick/ViewControllers/MessagesViewController.m')
-rw-r--r-- | Juick/ViewControllers/MessagesViewController.m | 181 |
1 files changed, 181 insertions, 0 deletions
diff --git a/Juick/ViewControllers/MessagesViewController.m b/Juick/ViewControllers/MessagesViewController.m new file mode 100644 index 0000000..28e7613 --- /dev/null +++ b/Juick/ViewControllers/MessagesViewController.m @@ -0,0 +1,181 @@ +// +// MasterViewController.m +// Juick +// +// Created by Vitaly Takmazov on 26.10.13. +// Copyright (c) 2013 com.juick. All rights reserved. +// + +#import "MessagesViewController.h" +#import "MessageCell.h" + +#import "Message.h" +#import "ColorScheme.h" + +#import "NewPostViewController.h" + + +#import "NSURL+PathParameters.h" + +static NSString *CellIdentifier = @"MessageCell"; + + +@interface MessagesViewController (); + +@property(nonatomic, strong) NSMutableArray *messages; +@property(nonatomic, assign) Boolean dataLoading; +@property(nonatomic, strong) NSString *path; +@property(nonatomic, strong) NSMutableDictionary *params; + +@end + +@implementation MessagesViewController + +- (void)loadFromPath:(NSString *)messagesPath withParams:(NSDictionary *)params withTitle:(NSString *)title +{ + [self setPath:messagesPath]; + [self setParams:[[NSMutableDictionary alloc] initWithDictionary:params]]; + self.title = title; + __weak MessagesViewController * weakSelf = self; + [self.messages removeAllObjects]; + [weakSelf refreshData]; +} + +- (void) refreshData { + if ([self.path isEqualToString:[Message threadUrl]]) { + [self.messages removeAllObjects]; + } + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + self.dataLoading = YES; + [Message pullNextFromPath:self.path params:self.params callback:^(NSArray *next) { + dispatch_async(dispatch_get_main_queue(), ^{ + [self.messages addObjectsFromArray:next]; + [self.tableView reloadData]; + [self.refreshControl endRefreshing]; + self.dataLoading = NO; + }); + }]; + }); +} + +- (UIStatusBarStyle)preferredStatusBarStyle +{ + return UIStatusBarStyleLightContent; +} + +- (void)viewDidLoad +{ + [super viewDidLoad]; + self.dataLoading = NO; + [self.view setBackgroundColor:[ColorScheme mainBackground]]; + self.messages = [NSMutableArray array]; + + SWRevealViewController *revealController = [self revealViewController]; + if (revealController) { + // TODO: add to thread view too + [self.view addGestureRecognizer:[revealController panGestureRecognizer]]; + } + + [self.tableView registerNib:[UINib nibWithNibName:@"MessageCell" bundle:nil] forCellReuseIdentifier:CellIdentifier]; + self.tableView.rowHeight = UITableViewAutomaticDimension; + self.tableView.estimatedRowHeight = 500.0f; + self.refreshControl = [UIRefreshControl new]; + [self.refreshControl addTarget:self action:@selector(refreshData) forControlEvents:UIControlEventValueChanged];} + +- (void) composePressed { + CATransition* transition = [CATransition animation]; + transition.duration = 0.3; + transition.type = kCATransitionFade; + transition.subtype = kCATransitionFromTop; + + [self.navigationController.view.layer addAnimation:transition forKey:kCATransition]; + [self.navigationController pushViewController:[[NewPostViewController alloc] init] animated:NO]; +} + +- (void)viewDidAppear:(BOOL)animated +{ + [super viewDidAppear:animated]; + if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) { + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(contentSizeCategoryChanged:) + name:UIContentSizeCategoryDidChangeNotification + object:nil]; + } +} + +- (void)viewDidDisappear:(BOOL)animated +{ + [super viewDidDisappear:animated]; + if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) { + [[NSNotificationCenter defaultCenter] removeObserver:self + name:UIContentSizeCategoryDidChangeNotification + object:nil]; + } +} + +- (void)contentSizeCategoryChanged:(NSNotification *)notification +{ + [self.tableView reloadData]; +} + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return _messages.count; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + MessageCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; + Message *msg = [_messages objectAtIndex:indexPath.row]; + [cell setMessage:msg]; + if ([msg.attach length] > 0) { + __weak MessagesViewController * weakSelf = self; + [cell.attach yy_setImageWithURL:[NSURL URLWithString:msg.attach] placeholder:[UIImage imageNamed:@"AttachPlaceholder"] options:YYWebImageOptionProgressiveBlur | YYWebImageOptionSetImageWithFadeAnimation completion:^(UIImage * _Nullable image, NSURL * _Nonnull url, YYWebImageFromType from, YYWebImageStage stage, NSError * _Nullable error) { + dispatch_async(dispatch_get_main_queue(), ^{ + [cell setNeedsUpdateConstraints]; + [cell updateConstraintsIfNeeded]; + [cell setNeedsLayout]; + [cell layoutIfNeeded]; + }); + }]; + + } else { + cell.attach.image = nil; + } + + return cell; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + if ([self.path isEqualToString:[Message threadUrl]]) + return; + Message *msg = [_messages objectAtIndex:indexPath.row]; + MessagesViewController *threadViewController = [[MessagesViewController alloc] init]; + [threadViewController loadFromPath:[Message threadUrl] withParams:[NSDictionary dictionaryWithObjectsAndKeys:msg.MID, @"mid", nil] withTitle:@"Thread"]; + [self.navigationController pushViewController:threadViewController animated:NO]; +} + +-(void)splitViewController:(UISplitViewController *)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem { + self.navigationItem.leftBarButtonItem = nil; +} + +-(void)splitViewController:(UISplitViewController *)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)pc { + self.navigationItem.leftBarButtonItem = barButtonItem; +} + +-(void)scrollViewDidScroll:(UIScrollView *)scrollView_ { + CGFloat actualPosition = scrollView_.contentOffset.y; + CGFloat contentHeight = scrollView_.contentSize.height - scrollView_.contentSize.height / 2; + if (actualPosition >= contentHeight && !self.dataLoading) { + NSNumber *lastMid = ((Message *)[self.messages lastObject]).MID; + if (![self.path isEqualToString:[Message threadUrl]]) { + [self.params setValue:lastMid forKey:@"before_mid"]; + } + [self refreshData]; + } +} + + +@end |