<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -18,6 +18,7 @@
   
   Post *parentPost;
   int storyId;
+  UIImagePickerController *imagePickerController;
 }
 
 - (id)initWithStoryId:(int)aStoryId;
@@ -29,4 +30,13 @@
 - (NSString *)urlEscape:(NSString *)string;
 
 - (IBAction)tag:(id)sender;
+- (IBAction)attachImage:(id)sender;
+
+- (void)imagePickerController:(UIImagePickerController *)picker
+        didFinishPickingImage:(UIImage *)image
+                  editingInfo:(NSDictionary *)editingInfo;
+- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker;
+- (void)didShowViewController:(UIViewController *)viewController animated:(BOOL)animated;
+- (void)willShowViewController:(UIViewController *)viewController animated:(BOOL)animated;
+- (NSData *)shrinkImageByHalfAndJPEG:(UIImage *)picture;
 @end</diff>
      <filename>Classes/ComposeViewController.h</filename>
    </modified>
    <modified>
      <diff>@@ -7,7 +7,7 @@
 //
 
 #import &quot;ComposeViewController.h&quot;
-
+#import &quot;NSStringAdditions.h&quot;
 
 @implementation ComposeViewController
 
@@ -107,6 +107,102 @@
   if (buttonIndex == 1) [self sendPostConfirmed];
 }
 
+- (IBAction)attachImage:(id)sender{
+  // Set up the image picker controller and add it to the view
+  imagePickerController = [[UIImagePickerController alloc] init];
+  imagePickerController.delegate = self;
+  [imagePickerController viewWillAppear:YES];
+  //Eventually will add an action sheet here allowing you to pick whether you get the source from the camera or from the library.
+  //imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
+  imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
+  [self presentModalViewController:imagePickerController animated:YES];
+}
+
+- (void)imagePickerController:(UIImagePickerController *)picker 
+        didFinishPickingImage:(UIImage *)image
+                  editingInfo:(NSDictionary *)editingInfo
+{
+  NSLog(@&quot;User picked an image.&quot;);
+  [picker dismissModalViewControllerAnimated:YES];
+  [[picker view] setHidden:YES];
+  NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@&quot;http://shackchatty.com/images&quot;]] autorelease];
+  [request setHTTPMethod:@&quot;POST&quot;];
+  //Think I'll want to use this for images larger than 800 or 1024 pixels or something, since Base64 encoding makes the data a lot larger.
+  //NSData *imageData = [self shrinkImageByHalfAndJPEG:image];
+  NSData *imageData = UIImagePNGRepresentation(image);
+  //NSData *imageData = UIImageJPEGRepresentation(image, .85);
+  NSString *imageBase64Data = [self urlEscape:[NSString base64StringFromData:imageData length:[imageData length]]];
+  //I want to rewrite this in a function soon too, so we can call it anywhere and get a url encoded string back for username/password AND prompt them for it if it's not in the settings.
+  //Sucks ass to type up a post and have forgotten to set your U/P, have to exit and come back to enter it, blah blah.
+  NSString *usernameString = [self urlEscape:[[NSUserDefaults standardUserDefaults] stringForKey:@&quot;username_preference&quot;]];
+  NSString *passwordString = [self urlEscape:[[NSUserDefaults standardUserDefaults] stringForKey:@&quot;password_preference&quot;]];
+  NSString *postBody = [NSString stringWithFormat:@&quot;username=%@&amp;password=%@&amp;filename=iPhoneUpload.png&amp;image=%@&quot;, usernameString, passwordString, imageBase64Data];
+  //[imageData release];
+  //[imageBase64Data release];
+  [request setHTTPBody:[postBody dataUsingEncoding:NSASCIIStringEncoding]];
+  
+  //NSLog([NSString stringWithFormat:@&quot;Post Body:\r\n%@&quot;, postBody]);
+  
+  // Send the request
+  NSHTTPURLResponse *response = nil;
+  NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&amp;response error:nil];
+  
+  int statusCode = (int)[response statusCode];
+  
+  NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
+  NSLog(responseString);
+
+  // Success! Return to previous view
+  if (statusCode == 200) {
+    NSLog(@&quot;Got a good response!&quot;);
+    NSString *filename = @&quot;&quot;;
+    //Parse new filename from response.
+    //There's a comment that has it in the data, we'll use this for now.
+    //&lt;!-- filename: file_hre1vo65wybn41borox4.png --&gt;
+    NSRange filenameRangeStart = [responseString rangeOfString:@&quot;&lt;!-- filename: &quot;];
+    if (filenameRangeStart.location != NSNotFound)
+    {
+      int startLocation = filenameRangeStart.location + filenameRangeStart.length;
+      NSRange filenameRangeEnd = [responseString rangeOfString:@&quot;--&gt;&quot; options:NSCaseInsensitiveSearch range:NSMakeRange(startLocation, [responseString length] - startLocation)];
+      if (filenameRangeEnd.location != NSNotFound)
+      {      
+        filename = [responseString substringWithRange:NSMakeRange(startLocation, filenameRangeEnd.location - startLocation)];
+      }
+    }
+    if ([filename length] &gt; 0)
+    {
+      postContent.text = [[postContent text] stringByAppendingString:[NSString stringWithFormat:@&quot;http://www.shackpics.com/viewer.x?file=%@&quot;, filename]];
+    }
+  }
+  else {
+    NSLog(@&quot;Didn't get a good response.&quot;);
+  }
+}
+
+- (NSData*)shrinkImageByHalfAndJPEG:(UIImage *)picture
+{
+  UIImage *retImage = picture;
+  if ((picture.size.width &gt; 800) || (picture.size.height &gt; 800))
+  {
+    CGImageRef imageRef = [picture CGImage];
+    size_t newHeight = picture.size.height *.5;
+    size_t newWidth = picture.size.width * .5;
+    CGContextRef bitmap = CGBitmapContextCreate(NULL, newWidth, newHeight, CGImageGetBitsPerComponent(imageRef), newWidth * 4, CGImageGetColorSpace(imageRef), CGImageGetBitmapInfo(imageRef));
+    CGContextDrawImage( bitmap, CGRectMake(0,0,newWidth,newHeight), imageRef );
+    CGContextRelease( bitmap );
+    retImage = [UIImage imageWithCGImage:imageRef];
+    CGImageRelease( imageRef );
+  }
+  return UIImageJPEGRepresentation(retImage, .85);
+}
+
+- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
+{
+  NSLog(@&quot;User cancelled and didn't pick an image.&quot;);
+  [picker dismissModalViewControllerAnimated:YES];
+  [[picker view] setHidden:YES];
+}
+
 - (void)sendPostConfirmed {
   // Create the request
   NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];</diff>
      <filename>Classes/ComposeViewController.m</filename>
    </modified>
    <modified>
      <diff>@@ -30,7 +30,7 @@
 					&lt;object class=&quot;IBUILabel&quot; id=&quot;251430815&quot;&gt;
 						&lt;reference key=&quot;NSNextResponder&quot; ref=&quot;191373211&quot;/&gt;
 						&lt;int key=&quot;NSvFlags&quot;&gt;292&lt;/int&gt;
-						&lt;string key=&quot;NSFrame&quot;&gt;{{10, 20}, {218, 33}}&lt;/string&gt;
+						&lt;string key=&quot;NSFrame&quot;&gt;{{10, 20}, {172, 33}}&lt;/string&gt;
 						&lt;reference key=&quot;NSSuperview&quot; ref=&quot;191373211&quot;/&gt;
 						&lt;bool key=&quot;IBUIOpaque&quot;&gt;NO&lt;/bool&gt;
 						&lt;bool key=&quot;IBUIClipsSubviews&quot;&gt;YES&lt;/bool&gt;
@@ -231,7 +231,7 @@
 					&lt;object class=&quot;IBUIButton&quot; id=&quot;83135498&quot;&gt;
 						&lt;reference key=&quot;NSNextResponder&quot; ref=&quot;191373211&quot;/&gt;
 						&lt;int key=&quot;NSvFlags&quot;&gt;292&lt;/int&gt;
-						&lt;string key=&quot;NSFrame&quot;&gt;{{237, 6}, {77, 51}}&lt;/string&gt;
+						&lt;string key=&quot;NSFrame&quot;&gt;{{237, 7}, {77, 51}}&lt;/string&gt;
 						&lt;reference key=&quot;NSSuperview&quot; ref=&quot;191373211&quot;/&gt;
 						&lt;object class=&quot;NSColor&quot; key=&quot;IBUIBackgroundColor&quot; id=&quot;880497334&quot;&gt;
 							&lt;int key=&quot;NSColorSpace&quot;&gt;1&lt;/int&gt;
@@ -603,6 +603,35 @@
 							&lt;string key=&quot;NSResourceName&quot;&gt;ButtonStrike.png&lt;/string&gt;
 						&lt;/object&gt;
 					&lt;/object&gt;
+					&lt;object class=&quot;IBUIButton&quot; id=&quot;572136266&quot;&gt;
+						&lt;reference key=&quot;NSNextResponder&quot; ref=&quot;191373211&quot;/&gt;
+						&lt;int key=&quot;NSvFlags&quot;&gt;292&lt;/int&gt;
+						&lt;string key=&quot;NSFrame&quot;&gt;{{190, 13}, {42, 37}}&lt;/string&gt;
+						&lt;reference key=&quot;NSSuperview&quot; ref=&quot;191373211&quot;/&gt;
+						&lt;bool key=&quot;IBUIOpaque&quot;&gt;NO&lt;/bool&gt;
+						&lt;bool key=&quot;IBUIClearsContextBeforeDrawing&quot;&gt;NO&lt;/bool&gt;
+						&lt;int key=&quot;IBUIContentHorizontalAlignment&quot;&gt;0&lt;/int&gt;
+						&lt;int key=&quot;IBUIContentVerticalAlignment&quot;&gt;0&lt;/int&gt;
+						&lt;object class=&quot;NSFont&quot; key=&quot;IBUIFont&quot;&gt;
+							&lt;string key=&quot;NSName&quot;&gt;Helvetica-Bold&lt;/string&gt;
+							&lt;double key=&quot;NSSize&quot;&gt;1.500000e+01&lt;/double&gt;
+							&lt;int key=&quot;NSfFlags&quot;&gt;16&lt;/int&gt;
+						&lt;/object&gt;
+						&lt;int key=&quot;IBUIButtonType&quot;&gt;1&lt;/int&gt;
+						&lt;string key=&quot;IBUIHighlightedTitle&quot;&gt;Img&lt;/string&gt;
+						&lt;string key=&quot;IBUIDisabledTitle&quot;&gt;Img&lt;/string&gt;
+						&lt;string key=&quot;IBUISelectedTitle&quot;&gt;Img&lt;/string&gt;
+						&lt;string key=&quot;IBUINormalTitle&quot;&gt;Img&lt;/string&gt;
+						&lt;reference key=&quot;IBUIHighlightedTitleColor&quot; ref=&quot;484238296&quot;/&gt;
+						&lt;object class=&quot;NSColor&quot; key=&quot;IBUINormalTitleColor&quot;&gt;
+							&lt;int key=&quot;NSColorSpace&quot;&gt;1&lt;/int&gt;
+							&lt;bytes key=&quot;NSRGB&quot;&gt;MC4xOTYwNzg0MyAwLjMwOTgwMzkzIDAuNTIxNTY4NjYAA&lt;/bytes&gt;
+						&lt;/object&gt;
+						&lt;reference key=&quot;IBUIHighlightedImage&quot; ref=&quot;3582267&quot;/&gt;
+						&lt;reference key=&quot;IBUIDisabledImage&quot; ref=&quot;3582267&quot;/&gt;
+						&lt;reference key=&quot;IBUISelectedImage&quot; ref=&quot;3582267&quot;/&gt;
+						&lt;reference key=&quot;IBUINormalImage&quot; ref=&quot;3582267&quot;/&gt;
+					&lt;/object&gt;
 				&lt;/object&gt;
 				&lt;string key=&quot;NSFrameSize&quot;&gt;{320, 416}&lt;/string&gt;
 				&lt;reference key=&quot;NSSuperview&quot;/&gt;
@@ -792,6 +821,15 @@
 					&lt;/object&gt;
 					&lt;int key=&quot;connectionID&quot;&gt;73&lt;/int&gt;
 				&lt;/object&gt;
+				&lt;object class=&quot;IBConnectionRecord&quot;&gt;
+					&lt;object class=&quot;IBCocoaTouchEventConnection&quot; key=&quot;connection&quot;&gt;
+						&lt;string key=&quot;label&quot;&gt;attachImage:&lt;/string&gt;
+						&lt;reference key=&quot;source&quot; ref=&quot;572136266&quot;/&gt;
+						&lt;reference key=&quot;destination&quot; ref=&quot;372490531&quot;/&gt;
+						&lt;int key=&quot;IBEventType&quot;&gt;7&lt;/int&gt;
+					&lt;/object&gt;
+					&lt;int key=&quot;connectionID&quot;&gt;75&lt;/int&gt;
+				&lt;/object&gt;
 			&lt;/object&gt;
 			&lt;object class=&quot;IBMutableOrderedSet&quot; key=&quot;objectRecords&quot;&gt;
 				&lt;object class=&quot;NSArray&quot; key=&quot;orderedObjects&quot;&gt;
@@ -811,7 +849,6 @@
 							&lt;bool key=&quot;EncodedWithXMLCoder&quot;&gt;YES&lt;/bool&gt;
 							&lt;reference ref=&quot;47782975&quot;/&gt;
 							&lt;reference ref=&quot;251430815&quot;/&gt;
-							&lt;reference ref=&quot;531915532&quot;/&gt;
 							&lt;reference ref=&quot;822868281&quot;/&gt;
 							&lt;reference ref=&quot;438835989&quot;/&gt;
 							&lt;reference ref=&quot;471294282&quot;/&gt;
@@ -828,6 +865,8 @@
 							&lt;reference ref=&quot;413080198&quot;/&gt;
 							&lt;reference ref=&quot;253050734&quot;/&gt;
 							&lt;reference ref=&quot;655660427&quot;/&gt;
+							&lt;reference ref=&quot;572136266&quot;/&gt;
+							&lt;reference ref=&quot;531915532&quot;/&gt;
 							&lt;reference ref=&quot;83135498&quot;/&gt;
 						&lt;/object&gt;
 						&lt;reference key=&quot;parent&quot; ref=&quot;360949347&quot;/&gt;
@@ -943,6 +982,11 @@
 						&lt;reference key=&quot;object&quot; ref=&quot;83135498&quot;/&gt;
 						&lt;reference key=&quot;parent&quot; ref=&quot;191373211&quot;/&gt;
 					&lt;/object&gt;
+					&lt;object class=&quot;IBObjectRecord&quot;&gt;
+						&lt;int key=&quot;objectID&quot;&gt;74&lt;/int&gt;
+						&lt;reference key=&quot;object&quot; ref=&quot;572136266&quot;/&gt;
+						&lt;reference key=&quot;parent&quot; ref=&quot;191373211&quot;/&gt;
+					&lt;/object&gt;
 				&lt;/object&gt;
 			&lt;/object&gt;
 			&lt;object class=&quot;NSMutableDictionary&quot; key=&quot;flattenedProperties&quot;&gt;
@@ -973,6 +1017,7 @@
 					&lt;string&gt;58.IBPluginDependency&lt;/string&gt;
 					&lt;string&gt;61.IBPluginDependency&lt;/string&gt;
 					&lt;string&gt;7.IBPluginDependency&lt;/string&gt;
+					&lt;string&gt;74.IBPluginDependency&lt;/string&gt;
 				&lt;/object&gt;
 				&lt;object class=&quot;NSMutableArray&quot; key=&quot;dict.values&quot;&gt;
 					&lt;bool key=&quot;EncodedWithXMLCoder&quot;&gt;YES&lt;/bool&gt;
@@ -1000,6 +1045,7 @@
 					&lt;string&gt;com.apple.InterfaceBuilder.IBCocoaTouchPlugin&lt;/string&gt;
 					&lt;string&gt;com.apple.InterfaceBuilder.IBCocoaTouchPlugin&lt;/string&gt;
 					&lt;string&gt;com.apple.InterfaceBuilder.IBCocoaTouchPlugin&lt;/string&gt;
+					&lt;string&gt;com.apple.InterfaceBuilder.IBCocoaTouchPlugin&lt;/string&gt;
 				&lt;/object&gt;
 			&lt;/object&gt;
 			&lt;object class=&quot;NSMutableDictionary&quot; key=&quot;unlocalizedProperties&quot;&gt;
@@ -1022,7 +1068,7 @@
 				&lt;/object&gt;
 			&lt;/object&gt;
 			&lt;nil key=&quot;sourceID&quot;/&gt;
-			&lt;int key=&quot;maxID&quot;&gt;73&lt;/int&gt;
+			&lt;int key=&quot;maxID&quot;&gt;75&lt;/int&gt;
 		&lt;/object&gt;
 		&lt;object class=&quot;IBClassDescriber&quot; key=&quot;IBDocument.Classes&quot;&gt;
 			&lt;object class=&quot;NSMutableArray&quot; key=&quot;referencedPartialClassDescriptions&quot;&gt;
@@ -1034,6 +1080,7 @@
 						&lt;bool key=&quot;EncodedWithXMLCoder&quot;&gt;YES&lt;/bool&gt;
 						&lt;object class=&quot;NSMutableArray&quot; key=&quot;dict.sortedKeys&quot;&gt;
 							&lt;bool key=&quot;EncodedWithXMLCoder&quot;&gt;YES&lt;/bool&gt;
+							&lt;string&gt;attachImage:&lt;/string&gt;
 							&lt;string&gt;sendPost:&lt;/string&gt;
 							&lt;string&gt;tag:&lt;/string&gt;
 							&lt;string&gt;toggleKeyboard:&lt;/string&gt;
@@ -1043,6 +1090,7 @@
 							&lt;string&gt;id&lt;/string&gt;
 							&lt;string&gt;id&lt;/string&gt;
 							&lt;string&gt;id&lt;/string&gt;
+							&lt;string&gt;id&lt;/string&gt;
 						&lt;/object&gt;
 					&lt;/object&gt;
 					&lt;object class=&quot;NSMutableDictionary&quot; key=&quot;outlets&quot;&gt;</diff>
      <filename>ComposeViewController.xib</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>48828dc24f1dd581eca768738352adeeeb534820</id>
    </parent>
  </parents>
  <author>
    <name>Willie Zutz</name>
    <email>wzutz@mbp-9.local</email>
  </author>
  <url>http://github.com/Squeegy/latest-chatty/commit/dd520c1642e54f72fe1f49723c216b224a5a36c0</url>
  <id>dd520c1642e54f72fe1f49723c216b224a5a36c0</id>
  <committed-date>2008-08-19T06:12:05-07:00</committed-date>
  <authored-date>2008-08-19T06:12:05-07:00</authored-date>
  <message>Add Image uploading.  Getting response codes of 500 from the server, not sure why.  This code is broken and incomplete right now.  Have some more features I want to add to it when we get the transmission issues worked out.</message>
  <tree>427373c7f3b03561fee5e91f656c2979e0e0f0bf</tree>
  <committer>
    <name>Willie Zutz</name>
    <email>wzutz@mbp-9.local</email>
  </committer>
</commit>
