summaryrefslogtreecommitdiff
path: root/Juick/ViewControllers/FeedViewController.m
diff options
context:
space:
mode:
Diffstat (limited to 'Juick/ViewControllers/FeedViewController.m')
-rw-r--r--Juick/ViewControllers/FeedViewController.m154
1 files changed, 154 insertions, 0 deletions
diff --git a/Juick/ViewControllers/FeedViewController.m b/Juick/ViewControllers/FeedViewController.m
new file mode 100644
index 0000000..67d80e1
--- /dev/null
+++ b/Juick/ViewControllers/FeedViewController.m
@@ -0,0 +1,154 @@
+//
+// DiscoverViewController.m
+// Juick
+//
+// Created by Vitaly Takmazov on 03/12/2017.
+// Copyright © 2017 com.juick. All rights reserved.
+//
+
+#import "FeedViewController.h"
+#import "ThreadViewController.h"
+#import "BlogViewController.h"
+#import "MessageCell.h"
+#import "APIClient.h"
+#import "AppDelegate.h"
+#import "ColorScheme.h"
+
+@interface FeedViewController ()
+
+@property NSString *selectedUser;
+@end
+
+@implementation FeedViewController
+
+-(void) viewDidLoad {
+ self.messagesDelegate = self;
+ if ([[APIClient sharedClient] isAuthenticated]) {
+ [[APIClient sharedClient] authenticate:^(User *user, NSError *error) {
+ if (user) {
+ if ([self.path length] == 0) {
+ self.path = [APIClient feedUrl];
+ self.navigationController.visibleViewController.navigationItem.title = @"My feed";
+ }
+ [self setShouldScrollToBottomOnRefresh:NO];
+ [self refreshData];
+ } else {
+ [User throwUnableToLogin:self error:error];
+ }
+ }];
+
+ } else {
+ if ([self.path length] == 0) {
+ self.path = [APIClient messagesUrl];
+ self.navigationController.visibleViewController.navigationItem.title = @"Discover";
+ }
+ [self setShouldScrollToBottomOnRefresh:NO];
+ [self refreshData];
+ }
+ [super viewDidLoad];
+}
+
+-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+ NSString * cellIdentifier = @"messageCell";
+ MessageCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
+ [self performSegueWithIdentifier:@"threadViewSegue" sender:cell];
+}
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+ if (!self.dataLoading) {
+ MessageCell *cell = (MessageCell *)[super tableView:tableView cellForRowAtIndexPath:indexPath];
+ cell.delegate = self;
+ return cell;
+ } else {
+ return [super tableView:tableView cellForRowAtIndexPath:indexPath];
+ }
+}
+
+-(void)avatarClicked:(NSString *)uname {
+ self.selectedUser = uname;
+ [self performSegueWithIdentifier:@"profileSegue" sender:self];
+}
+
+-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+ if ([segue.identifier isEqual: @"threadViewSegue"]) {
+ NSNumber *mid;
+ BOOL scrollToEnd = NO;
+ if ([AppDelegate shared].pushedThread != nil) {
+ mid = [[AppDelegate shared].pushedThread copy];
+ [AppDelegate shared].pushedThread = nil;
+ [AppDelegate shared].pushedUname = nil;
+ scrollToEnd = YES;
+ } else {
+ Message *msg = [self.messages objectAtIndex:[self.tableView indexPathForSelectedRow].row];
+ mid = msg.mid;
+ }
+ if ([mid integerValue] > 0) {
+ ThreadViewController *threadVC = (ThreadViewController *)segue.destinationViewController;
+ [threadVC setPath:[APIClient threadUrl]];
+ [threadVC setParams:@{@"mid": mid }];
+ [threadVC setShouldScrollToBottomOnRefresh:scrollToEnd];
+ }
+ }
+ if ([segue.identifier isEqual: @"profileSegue"]) {
+ BlogViewController *blogVC = (BlogViewController *)segue.destinationViewController;
+ [blogVC setUname:self.selectedUser];
+ [blogVC setTitle:self.selectedUser];
+ blogVC.path = [NSString stringWithFormat:@"/messages?uname=%@", self.selectedUser];
+ [blogVC setShouldScrollToBottomOnRefresh:NO];
+ }
+}
+- (IBAction)filterAction:(id)sender {
+ if (![[APIClient sharedClient] isAuthenticated]) {
+ [self.navigationController performSegueWithIdentifier:@"loginSegue" sender:self.navigationController];
+ return;
+ }
+ UIAlertController *filterAlert = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet];
+ [filterAlert addAction:[UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:nil]];
+ [filterAlert addAction:[UIAlertAction actionWithTitle:@"My feed" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+ self.path = [APIClient feedUrl];
+ self.navigationController.visibleViewController.navigationItem.title = @"My feed";
+ self.params = nil;
+ [self.messages removeAllObjects];
+ [self.tableView reloadData];
+ [self setShouldScrollToBottomOnRefresh:NO];
+ }]];
+ [filterAlert addAction:[UIAlertAction actionWithTitle:@"Discover" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+ self.path = [APIClient messagesUrl];
+ self.navigationController.visibleViewController.navigationItem.title = @"Discover";
+ self.params = nil;
+ [self.messages removeAllObjects];
+ [self.tableView reloadData];
+ [self setShouldScrollToBottomOnRefresh:NO];
+ }]];
+ [filterAlert addAction:[UIAlertAction actionWithTitle:@"Discussions" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+ self.path = [APIClient discussionsUrl];
+ self.navigationController.visibleViewController.navigationItem.title = @"Discussions";
+ self.params = nil;
+ [self.messages removeAllObjects];
+ [self.tableView reloadData];
+ [self setShouldScrollToBottomOnRefresh:NO];
+ }]];
+ [filterAlert.view setTintColor:[ColorScheme linkColor]];
+ UIPopoverPresentationController *popover = [filterAlert popoverPresentationController];
+ if (popover) {
+ popover.sourceView = self.view;
+ popover.sourceRect = CGRectMake(CGRectGetMidX(self.view.bounds), CGRectGetMidY(self.view.bounds), 0, 0);
+ popover.permittedArrowDirections = UIPopoverArrowDirectionUp;
+ }
+ [self presentViewController:filterAlert animated:YES completion:nil];
+}
+
+-(void) loadMore {
+ Message *lastMsg = [self.messages lastObject];
+ if (lastMsg != nil) {
+ if ([self.path isEqualToString:[APIClient discussionsUrl]]) {
+ NSDate *msgDate = [[APIClient sharedClient].dateFormatter dateFromString:lastMsg.timestamp];
+ self.params = [@{@"to" : [NSString stringWithFormat:@"%.0f", [msgDate timeIntervalSince1970] * 1000]} mutableCopy];
+ } else if (![self.path isEqualToString:[APIClient threadUrl]]) {
+ NSNumber *lastMid = lastMsg.mid;
+ self.params = [@{@"before_mid":lastMid} mutableCopy];
+ }
+ [self setShouldScrollToBottomOnRefresh:NO];
+ }
+}
+
+@end