summaryrefslogtreecommitdiff
path: root/Juick/ViewControllers/MessagesViewController.m
diff options
context:
space:
mode:
authorGravatar Vitaly Takmazov2016-08-28 21:03:22 +0300
committerGravatar Vitaly Takmazov2016-08-28 21:03:22 +0300
commit188d8e4ea870d1a6c8edd5a9b323742804badeba (patch)
tree071067f7189a6474d49abb952b1b04b820985b7a /Juick/ViewControllers/MessagesViewController.m
parenta74588083c4950e9237dff7a84ccdd129b72c950 (diff)
project cleanup
Diffstat (limited to 'Juick/ViewControllers/MessagesViewController.m')
-rw-r--r--Juick/ViewControllers/MessagesViewController.m181
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