summaryrefslogtreecommitdiffstats
path: root/Classes/TopicsViewController.m
diff options
context:
space:
mode:
Diffstat (limited to 'Classes/TopicsViewController.m')
-rw-r--r--Classes/TopicsViewController.m380
1 files changed, 380 insertions, 0 deletions
diff --git a/Classes/TopicsViewController.m b/Classes/TopicsViewController.m
new file mode 100644
index 0000000..ab07416
--- /dev/null
+++ b/Classes/TopicsViewController.m
@@ -0,0 +1,380 @@
+//
+// TopicsViewController.m
+// acidcow
+//
+// Created by Matthew Handler on 4/15/11.
+// Copyright 2011 Earl Industries. All rights reserved.
+//
+
+#import "TopicsViewController.h"
+#import "XMLParser.h"
+#import "Topic.h"
+#import "TopicTableViewCell.h"
+#import "AcidCowFeedburnerParser.h"
+#import "PhotoViewController.h"
+//#import "AsyncImageView.h"
+#import "HJObjManager.h"
+#import "HJManagedImageV.h"
+
+
+@implementation TopicsViewController
+
+@synthesize topics, parser;
+
+- (void)viewDidLoad {
+ [super viewDidLoad];
+ NSLog(@"viewDidLoad");
+ self.tableView.rowHeight = 100;
+ //UIBarButtonItem *doneItem = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(returnToParserChoices)] autorelease];
+ //self.navigationItem.rightBarButtonItem = doneItem;
+
+ // Create the object manager
+ objMan = [[HJObjManager alloc] initWithLoadingBufferSize:6 memCacheSize:20];
+
+ //if you are using for full screen images, you'll need a smaller memory cache than the defaults,
+ //otherwise the cached images will get you out of memory quickly
+ //objMan = [[HJObjManager alloc] initWithLoadingBufferSize:6 memCacheSize:1];
+
+ // Create a file cache for the object manager to use
+ // A real app might do this durring startup, allowing the object manager and cache to be shared by several screens
+ NSString* cacheDirectory = [NSHomeDirectory() stringByAppendingString:@"/Library/Caches/imgcache/flickr/"] ;
+ HJMOFileCache* fileCache = [[[HJMOFileCache alloc] initWithRootPath:cacheDirectory] autorelease];
+ objMan.fileCache = fileCache;
+
+ // Have the file cache trim itself down to a size & age limit, so it doesn't grow forever
+ fileCache.fileCountLimit = 100;
+ fileCache.fileAgeLimit = 60*60*24*7; //1 week
+ [fileCache trimCacheUsingBackgroundThread];
+
+ [self startParsing];
+}
+
+- (UINavigationController *)topicsNavigationController {
+ if (topicsNavigationController == nil) {
+ topicsNavigationController = [[UINavigationController alloc] initWithRootViewController:self.picDumpViewController];
+ }
+ return topicsNavigationController;
+}
+
+- (PicDumpViewController *)picDumpViewController {
+ if (picDumpViewController == nil) {
+ picDumpViewController = [[PicDumpViewController alloc] initWithNibName:@"PicDumpViewController" bundle:nil];
+ }
+ return picDumpViewController;
+}
+
+- (PhotoViewController *)photoViewController {
+ if (photoViewController == nil) {
+ photoViewController = [[[PhotoViewController alloc] init] autorelease];
+ }
+ return photoViewController;
+}
+
+//- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+//
+// self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
+// if (self) {
+// // Initialization code.
+// }
+// return self;
+//}
+
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+
+ [super setSelected:selected animated:animated];
+
+ // Configure the view for the selected state.
+}
+
+- (void)viewWillAppear:(BOOL)animated {
+ NSIndexPath *selectedRowIndexPath = [self.tableView indexPathForSelectedRow];
+ if (selectedRowIndexPath != nil) {
+ [self.tableView deselectRowAtIndexPath:selectedRowIndexPath animated:NO];
+ }
+}
+
+- (void)startParsing {
+ NSLog(@"startParsing");
+ //self.navigationItem.rightBarButtonItem.enabled = NO;
+ // Reset the title
+ self.title = NSLocalizedString(@"Getting Recent Picdumps...", @"Loading");
+ // Allocate the array for song storage, or empty the results of previous parses
+ if (topics == nil) {
+ self.topics = [NSMutableArray array];
+ } else {
+ [topics removeAllObjects];
+ [self.tableView reloadData];
+ }
+ // Create the parser, set its delegate, and start it.
+ self.parser = [[[AcidCowFeedburnerParser alloc] init] autorelease];
+ parser.delegate = self;
+ [parser start];
+}
+
+
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+ return [topics count];
+}
+
+//- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
+//{
+// return 100;
+//}
+
+- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+
+ static NSString *kCellIdentifier = @"TopicTableViewCell";
+ TopicTableViewCell *cell = (TopicTableViewCell *)[self.tableView dequeueReusableCellWithIdentifier:kCellIdentifier];
+
+ HJManagedImageV* mi;
+ HJManagedImageV* micon;
+
+ if (cell == nil) {
+ NSArray *tmpCell = [[NSBundle mainBundle] loadNibNamed:@"TopicTableViewCell" owner:self options:nil];
+
+ for (id currentObj in tmpCell) {
+ if ([currentObj isKindOfClass:[TopicTableViewCell class]]) {
+ cell = (TopicTableViewCell *)currentObj;
+ break;
+ }
+ }
+
+ micon = [[[HJManagedImageV alloc] initWithFrame:CGRectMake(105,72,16,16)] autorelease];
+ mi = [[[HJManagedImageV alloc] initWithFrame:CGRectMake(3,3,94,94)] autorelease];
+ mi.tag = 998;
+ mi.tag = 999;
+ [cell addSubview:micon];
+ [cell addSubview:mi];
+
+ }
+ else {
+ //Get a reference to the managed image view that was already in the recycled cell, and clear it
+ micon = (HJManagedImageV*)[cell viewWithTag:998];
+ mi = (HJManagedImageV*)[cell viewWithTag:999];
+ [micon clear];
+ [mi clear];
+ }
+
+ //cell.useDarkBackground = (indexPath.row % 2 == 0);
+ cell.title = [[topics objectAtIndex:indexPath.row] title];
+ cell.picCount = [NSString stringWithFormat:@"%@", [[topics objectAtIndex:indexPath.row] picCount]];
+ //cell.iconUrl = [[topics objectAtIndex:indexPath.row] iconUrl];
+
+// CGRect frame;
+// frame.size.width=94; frame.size.height=94;
+// frame.origin.x=3; frame.origin.y=3;
+// AsyncImageView* asyncImage = [[[AsyncImageView alloc]
+// initWithFrame:frame] autorelease];
+// asyncImage.tag = 999;
+// NSURL* url = [imageDownload
+// thumbnailURLAtIndex:indexPath.row];
+ micon.url = [NSURL URLWithString:@"http://www.acidcow.com/favicon.ico"];
+ mi.url = [NSURL URLWithString:[[topics objectAtIndex:indexPath.row] iconUrl]];
+ mi.squareCropped = true;
+
+ //tell the object manager to manage the managed image view,
+ //this causes the cached image to display, or the image to be loaded, cached, and displayed
+ [objMan manage:mi];
+ [objMan manage:micon];
+
+// [asyncImage loadImageFromURL:url];
+
+// [cell.contentView addSubview:asyncImage];
+
+ return cell;
+}
+
+- (void)tableView:(UITableView *)table didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+// self.picDumpViewController.topic = [topics objectAtIndex:indexPath.row];
+ self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"back"
+ style:UIBarButtonItemStyleBordered
+ target:nil
+ action:nil];
+// [self.navigationController pushViewController:picDumpViewController animated:YES];
+//
+ photoViewController = [[[PhotoViewController alloc] init] autorelease];
+ photoViewController.topic = [topics objectAtIndex:indexPath.row];
+ [self.navigationController pushViewController:photoViewController animated:YES];
+
+}
+
+#pragma mark <iTunesRSSParserDelegate> Implementation
+
+- (void)parserDidEndParsingData:(XMLParser *)parser {
+ self.title = [NSString stringWithFormat:NSLocalizedString(@"Recent Picdumps (%d)", @"Recent"), [topics count]];
+ [self.tableView reloadData];
+ //self.navigationItem.rightBarButtonItem.enabled = YES;
+ self.parser = nil;
+}
+
+- (void)parser:(XMLParser *)parser didParseTopics:(NSArray *)parsedTopics {
+ [topics addObjectsFromArray:parsedTopics];
+ // Three scroll view properties are checked to keep the user interface smooth during parse. When new objects are delivered
+ // by the parser, the table view is reloaded to display them. If the table is reloaded while
+ // the user is scrolling, this can result in eratic behavior. dragging, tracking, and decelerating can be checked
+ // for this purpose. When the parser finishes, reloadData will be called in parserDidEndParsingData:, guaranteeing
+ // that all data will ultimately be displayed even if reloadData is not called in this method because of user interaction.
+ if (!self.tableView.dragging && !self.tableView.tracking && !self.tableView.decelerating) {
+ self.title = [NSString stringWithFormat:NSLocalizedString(@"Recent Picdumps (%d)", @"Recent"), [topics count]];
+ [self.tableView reloadData];
+ }
+}
+
+- (void)parser:(XMLParser *)parser didFailWithError:(NSError *)error {
+ // handle errors as appropriate to your application...
+}
+
+#pragma mark -
+#pragma mark View lifecycle
+
+/*
+- (void)viewDidLoad {
+ [super viewDidLoad];
+
+ // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
+ // self.navigationItem.rightBarButtonItem = self.editButtonItem;
+}
+*/
+
+/*
+- (void)viewWillAppear:(BOOL)animated {
+ [super viewWillAppear:animated];
+}
+*/
+/*
+- (void)viewDidAppear:(BOOL)animated {
+ [super viewDidAppear:animated];
+}
+*/
+/*
+- (void)viewWillDisappear:(BOOL)animated {
+ [super viewWillDisappear:animated];
+}
+*/
+/*
+- (void)viewDidDisappear:(BOOL)animated {
+ [super viewDidDisappear:animated];
+}
+*/
+/*
+// Override to allow orientations other than the default portrait orientation.
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
+ // Return YES for supported orientations.
+ return (interfaceOrientation == UIInterfaceOrientationPortrait);
+}
+*/
+
+
+#pragma mark -
+#pragma mark Table view data source
+
+//- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
+// // Return the number of sections.
+// return <#number of sections#>;
+//}
+//
+//
+//- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+// // Return the number of rows in the section.
+// return <#number of rows in section#>;
+//}
+
+
+// Customize the appearance of table view cells.
+//- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+//
+// static NSString *CellIdentifier = @"Cell";
+//
+// UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
+// if (cell == nil) {
+// cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
+// }
+//
+// // Configure the cell...
+//
+// return cell;
+//}
+
+
+/*
+// Override to support conditional editing of the table view.
+- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
+ // Return NO if you do not want the specified item to be editable.
+ return YES;
+}
+*/
+
+
+/*
+// Override to support editing the table view.
+- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
+
+ if (editingStyle == UITableViewCellEditingStyleDelete) {
+ // Delete the row from the data source.
+ [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
+ }
+ else if (editingStyle == UITableViewCellEditingStyleInsert) {
+ // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view.
+ }
+}
+*/
+
+
+/*
+// Override to support rearranging the table view.
+- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
+}
+*/
+
+
+/*
+// Override to support conditional rearranging of the table view.
+- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
+ // Return NO if you do not want the item to be re-orderable.
+ return YES;
+}
+*/
+
+
+#pragma mark -
+#pragma mark Table view delegate
+
+//- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+// // Navigation logic may go here. Create and push another view controller.
+// /*
+// <#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil];
+// // ...
+// // Pass the selected object to the new view controller.
+// [self.navigationController pushViewController:detailViewController animated:YES];
+// [detailViewController release];
+// */
+//}
+
+
+#pragma mark -
+#pragma mark Memory management
+
+- (void)didReceiveMemoryWarning {
+ // Releases the view if it doesn't have a superview.
+ [super didReceiveMemoryWarning];
+
+ // Relinquish ownership any cached data, images, etc. that aren't in use.
+}
+
+- (void)viewDidUnload {
+ // Relinquish ownership of anything that can be recreated in viewDidLoad or on demand.
+ // For example: self.myOutlet = nil;
+}
+
+- (void)dealloc {
+ [objMan release];
+ [topics release];
+ //[detailController release];
+ [parser release];
+ [super dealloc];
+}
+
+
+@end
+