Browse Source

adding download class, currently unused

Kevin Bradley 5 years ago
parent
commit
6094b99ccf
2 changed files with 120 additions and 0 deletions
  1. 44 0
      Meridian/meridianTV/UIDownloadBar.h
  2. 76 0
      Meridian/meridianTV/UIDownloadBar.m

+ 44 - 0
Meridian/meridianTV/UIDownloadBar.h

@@ -0,0 +1,44 @@
+//
+//  UIDownloadBar.h
+//  UIDownloadBar
+//
+//  Created by John on 3/20/09.
+//  Copyright 2009 Gojohnnyboi. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@class UIProgressView;
+@protocol UIDownloadBarDelegate;
+
+@interface UIDownloadBar : UIProgressView {
+    NSURLRequest* DownloadRequest;
+    NSURLConnection* DownloadConnection;
+    NSMutableData* receivedData;
+    NSString* localFilename;
+    id<UIDownloadBarDelegate> delegate;
+    long long bytesReceived;
+    long long expectedBytes;
+    
+    float percentComplete;
+}
+
+- (UIDownloadBar *)initWithURL:(NSURL *)fileURL progressBarFrame:(CGRect)frame timeout:(NSInteger)timeout delegate:(id<UIDownloadBarDelegate>)theDelegate;
+
+@property (nonatomic, readonly) NSMutableData* receivedData;
+@property (nonatomic, readonly, retain) NSURLRequest* DownloadRequest;
+@property (nonatomic, readonly, retain) NSURLConnection* DownloadConnection;
+@property (nonatomic, assign) id<UIDownloadBarDelegate> delegate;
+
+@property (nonatomic, readonly) float percentComplete;
+
+@end
+
+@protocol UIDownloadBarDelegate<NSObject>
+
+@optional
+- (void)downloadBar:(UIDownloadBar *)downloadBar didFinishWithData:(NSData *)fileData suggestedFilename:(NSString *)filename;
+- (void)downloadBar:(UIDownloadBar *)downloadBar didFailWithError:(NSError *)error;
+- (void)downloadBarUpdated:(UIDownloadBar *)downloadBar;
+
+@end

+ 76 - 0
Meridian/meridianTV/UIDownloadBar.m

@@ -0,0 +1,76 @@
+//
+//  UIDownloadBar.m
+//  UIDownloadBar
+//
+//  Created by John on 3/20/09.
+//  Copyright 2009 Gojohnnyboi. All rights reserved.
+//
+
+#import "UIDownloadBar.h"
+
+
+@implementation UIDownloadBar
+
+@synthesize DownloadRequest,
+DownloadConnection,
+receivedData,
+delegate,
+percentComplete;
+
+
+- (UIDownloadBar *)initWithURL:(NSURL *)fileURL progressBarFrame:(CGRect)frame timeout:(NSInteger)timeout delegate:(id<UIDownloadBarDelegate>)theDelegate {
+    self = [super initWithFrame:frame];
+    if(self) {
+        self.delegate = theDelegate;
+        bytesReceived = percentComplete = 0;
+        localFilename = [[[fileURL absoluteString] lastPathComponent] copy];
+        receivedData = [[NSMutableData alloc] initWithLength:0];
+        self.progress = 0.0;
+        self.backgroundColor = [UIColor clearColor];
+        DownloadRequest = [[NSURLRequest alloc] initWithURL:fileURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:timeout];
+        DownloadConnection = [[NSURLConnection alloc] initWithRequest:DownloadRequest delegate:self startImmediately:YES];
+        
+        if(DownloadConnection == nil) {
+            [self.delegate downloadBar:self didFailWithError:[NSError errorWithDomain:@"UIDownloadBar Error" code:1 userInfo:[NSDictionary dictionaryWithObjectsAndKeys:@"NSURLConnection Failed", NSLocalizedDescriptionKey, nil]]];
+        }
+    }
+    
+    return self;
+}
+
+- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
+    [self.receivedData appendData:data];
+    
+    NSInteger receivedLen = [data length];
+    bytesReceived = (bytesReceived + receivedLen);
+    
+    if(expectedBytes != NSURLResponseUnknownLength) {
+        self.progress = ((bytesReceived/(float)expectedBytes)*100)/100;
+        percentComplete = self.progress*100;
+    }
+    
+    [delegate downloadBarUpdated:self];
+}
+
+- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
+    [self.delegate downloadBar:self didFailWithError:error];
+
+}
+
+- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
+    expectedBytes = [response expectedContentLength];
+}
+
+- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
+    [self.delegate downloadBar:self didFinishWithData:self.receivedData suggestedFilename:localFilename];
+}
+
+- (void)drawRect:(CGRect)rect {
+    [super drawRect:rect];
+}
+
+- (void)dealloc {
+}
+
+
+@end