Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // FriendsTimelineController.m
- // Twitterena
- //
- // Created by Andy on 4/06/09
- // Copyright 2009 Andrew.Weekes.com. All rights reserved.
- //
- #import "FriendsTimelineController.h"
- #import "FriendsTimelineDataSource.h"
- #import "TwitterenaAppDelegate.h"
- #import "ColorUtils.h"
- @interface FriendsTimelineController (Private)
- - (void)scrollToFirstUnread;
- - (void)didLeaveTab:(UINavigationController*)navigationController;
- @end
- @implementation FriendsTimelineController
- //
- // UIViewController methods
- //
- - (void)viewDidLoad
- {
- if (!isLoaded) {
- [self loadTimeline];
- }
- }
- - (void) dealloc
- {
- [super dealloc];
- }
- - (void)viewWillAppear:(BOOL)animated
- {
- [super viewWillAppear:animated];
- [self.tableView setContentOffset:contentOffset animated:false];
- [self.tableView reloadData];
- self.navigationController.navigationBar.tintColor = [UIColor navigationColorForTab:tab];
- self.tableView.separatorColor = [UIColor lightGrayColor];
- }
- - (void)viewDidAppear:(BOOL)animated
- {
- if (firstTimeToAppear) {
- firstTimeToAppear = false;
- [self scrollToFirstUnread];
- }
- [super viewDidAppear:animated];
- if (stopwatch) {
- LAP(stopwatch, @"viewDidAppear");
- [stopwatch release];
- stopwatch = nil;
- }
- }
- - (void)viewWillDisappear:(BOOL)animated
- {
- contentOffset = self.tableView.contentOffset;
- }
- - (void)viewDidDisappear:(BOOL)animated
- {
- }
- - (void)didReceiveMemoryWarning
- {
- #if 0
- TwitterenaAppDelegate *appDelegate = (TwitterenaAppDelegate*)[UIApplication sharedApplication].delegate;
- if (appDelegate.selectedTab != [self navigationController].tabBarItem.tag) {
- [super didReceiveMemoryWarning];
- }
- #endif
- }
- //
- // Public methods
- //
- - (void)loadTimeline
- {
- NSString *username = [[NSUserDefaults standardUserDefaults] stringForKey:@"username"];
- NSString *password = [[NSUserDefaults standardUserDefaults] stringForKey:@"password"];
- if ([username length] != 0 && [password length] != 0) {
- self.navigationItem.leftBarButtonItem.enabled = false;
- [timelineDataSource getTimeline];
- }
- isLoaded = true;
- }
- - (void)restoreAndLoadTimeline:(BOOL)load
- {
- firstTimeToAppear = true;
- stopwatch = [[Stopwatch alloc] init];
- tab = [self navigationController].tabBarItem.tag;
- timelineDataSource = [[FriendsTimelineDataSource alloc] initWithController:self tweetType:tab];
- self.tableView.dataSource = timelineDataSource;
- self.tableView.delegate = timelineDataSource;
- if (load) [self loadTimeline];
- }
- - (IBAction) reload:(id) sender
- {
- self.navigationItem.leftBarButtonItem.enabled = false;
- [timelineDataSource getTimeline];
- }
- - (void)autoRefresh
- {
- [self reload:nil];
- }
- // sound notification
- -(void)playSound
- {BOOL flag = [[NSUserDefaults standardUserDefaults] boolForKey:@"tweetsounds"];
- if (flag == false) return;
- {itootSound *mentionssound = [[itootSound alloc] initWithFileName:@"mentionssound.aif"];
- [mentionssound play];
- }}
- - (void)postViewAnimationDidFinish
- {
- if (self.navigationController.topViewController != self) return;
- if (tab == TAB_FRIENDS) {
- //
- // Do animation if the controller displays friends timeline or sent direct messages.
- //
- NSArray *indexPaths = [NSArray arrayWithObjects:[NSIndexPath indexPathForRow:0 inSection:0], nil];
- [self.tableView beginUpdates];
- [self.tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationTop, [self playSound]];
- [self.tableView endUpdates];
- }
- }
- - (void)postTweetDidSucceed:(Status*)status
- {
- if (tab == TAB_FRIENDS) {
- [timelineDataSource.timeline insertStatus:status atIndex:0];
- }
- }
- //
- // TwitterenaApPDelegate delegate
- //
- - (void)didLeaveTab:(UINavigationController*)navigationController
- {
- navigationController.tabBarItem.badgeValue = nil;
- for (int i = 0; i < [timelineDataSource.timeline countStatuses]; ++i) {
- Status* sts = [timelineDataSource.timeline statusAtIndex:i];
- sts.unread = false;
- }
- unread = 0;
- }
- - (void) removeStatus:(Status*)status
- {
- [timelineDataSource.timeline removeStatus:status];
- [self.tableView reloadData];
- }
- - (void) updateFavorite:(Status*)status
- {
- [timelineDataSource.timeline updateFavorite:status];
- }
- - (void)scrollToFirstUnread
- {
- BOOL flag = [[NSUserDefaults standardUserDefaults] boolForKey:@"autoScrollToFirstUnread"];
- if (flag == false) return;
- if (unread) {
- if (unread < [timelineDataSource.timeline countStatuses]) {
- NSIndexPath *indexPath = [NSIndexPath indexPathForRow:unread inSection:0];
- [self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition: UITableViewScrollPositionBottom animated:true];
- }
- }
- }
- //
- // TimelineDelegate
- //
- - (void)timelineDidUpdate:(FriendsTimelineDataSource*)sender count:(int)count insertAt:(int)position
- {
- self.navigationItem.leftBarButtonItem.enabled = true;
- if (self.navigationController.tabBarController.selectedIndex == tab &&
- self.navigationController.topViewController == self) {
- [self.tableView beginUpdates];
- if (position) {
- NSMutableArray *deletion = [[[NSMutableArray alloc] init] autorelease];
- [deletion addObject:[NSIndexPath indexPathForRow:position inSection:0]];
- [self.tableView deleteRowsAtIndexPaths:deletion withRowAnimation:UITableViewRowAnimationBottom];
- }
- if (count != 0) {
- NSMutableArray *insertion = [[[NSMutableArray alloc] init] autorelease];
- int numInsert = count;
- // Avoid to create too many table cell.
- if (numInsert > 8) numInsert = 8;
- for (int i = 0; i < numInsert; ++i) {
- [insertion addObject:[NSIndexPath indexPathForRow:position + i inSection:0]];
- }
- [self.tableView insertRowsAtIndexPaths:insertion withRowAnimation:UITableViewRowAnimationTop];
- }
- [self.tableView endUpdates];
- if (position == 0 && unread == 0) {
- [self performSelector:@selector(scrollToFirstUnread) withObject:nil afterDelay:0.4];
- }
- }
- if (count) {
- unread += count;
- [self navigationController].tabBarItem.badgeValue = [NSString stringWithFormat:@"%d", unread];
- }
- }
- - (void)timelineDidFailToUpdate:(FriendsTimelineDataSource*)sender position:(int)position
- {
- self.navigationItem.leftBarButtonItem.enabled = true;
- }
- @end
Add Comment
Please, Sign In to add comment