Changeset 4725
- Timestamp:
- 04/26/07 13:11:32 (1 year ago)
- Files:
-
- Footagehead/trunk/English.lproj/Browser.nib/classes.nib (modified) (1 diff)
- Footagehead/trunk/English.lproj/Browser.nib/info.nib (modified) (1 diff)
- Footagehead/trunk/English.lproj/Browser.nib/keyedobjects.nib (modified) (previous)
- Footagehead/trunk/English.lproj/Slideshow.nib/classes.nib (modified) (1 diff)
- Footagehead/trunk/English.lproj/Slideshow.nib/keyedobjects.nib (modified) (previous)
- Footagehead/trunk/FHBrowserController.m (modified) (4 diffs)
- Footagehead/trunk/FHCache.h (modified) (1 diff)
- Footagehead/trunk/FHCache.m (modified) (2 diffs)
- Footagehead/trunk/FHFile.h (modified) (2 diffs)
- Footagehead/trunk/FHFile.m (modified) (2 diffs)
- Footagehead/trunk/FHFutabaHandler.h (modified) (1 diff)
- Footagehead/trunk/FHFutabaHandler.m (modified) (2 diffs)
- Footagehead/trunk/FHHandler.m (modified) (1 diff)
- Footagehead/trunk/FHImage.h (modified) (2 diffs)
- Footagehead/trunk/FHImage.m (modified) (6 diffs)
- Footagehead/trunk/FHImageLoader.h (modified) (2 diffs)
- Footagehead/trunk/FHImageLoader.m (modified) (7 diffs)
- Footagehead/trunk/FHSlideshowController.m (modified) (2 diffs)
- Footagehead/trunk/FHSpotlightHandler.m (modified) (1 diff)
- Footagehead/trunk/FHURLHandler.m (modified) (3 diffs)
- Footagehead/trunk/FHWindowController.h (modified) (1 diff)
- Footagehead/trunk/FHWindowController.m (modified) (1 diff)
- Footagehead/trunk/Footagehead.xcodeproj/project.pbxproj (modified) (4 diffs)
- Footagehead/trunk/NSData-FHAdditions.h (deleted)
- Footagehead/trunk/NSData-FHAdditions.m (deleted)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
Footagehead/trunk/English.lproj/Browser.nib/classes.nib
r4716 r4725 62 62 }, 63 63 { 64 ACTIONS = { 65 firstFile = id; 66 lastFile = id; 67 nextImage = id; 68 nextPage = id; 69 previousImage = id; 70 previousPage = id; 71 rotateLeft = id; 72 rotateRight = id; 73 zoomMode = id; 74 }; 64 75 CLASS = FHWindowController; 65 76 LANGUAGE = ObjC; 66 OUTLETS = {"_imageView" = FHImageView; };77 OUTLETS = {"_imageView" = FHImageView; "_progressIndicator" = NSProgressIndicator; }; 67 78 SUPERCLASS = WIWindowController; 68 79 }, Footagehead/trunk/English.lproj/Browser.nib/info.nib
r4721 r4725 9 9 <key>IBOpenObjects</key> 10 10 <array> 11 <integer>82</integer> 11 12 <integer>7</integer> 12 13 <integer>65</integer> 13 14 <integer>52</integer> 14 <integer>82</integer>15 15 </array> 16 16 <key>IBSystem Version</key> Footagehead/trunk/English.lproj/Slideshow.nib/classes.nib
r4716 r4725 14 14 {CLASS = FHSlideshowWindow; LANGUAGE = ObjC; SUPERCLASS = NSWindow; }, 15 15 { 16 ACTIONS = { 17 firstFile = id; 18 lastFile = id; 19 nextImage = id; 20 nextPage = id; 21 previousImage = id; 22 previousPage = id; 23 rotateLeft = id; 24 rotateRight = id; 25 zoomMode = id; 26 }; 16 27 CLASS = FHWindowController; 17 28 LANGUAGE = ObjC; 18 OUTLETS = {"_imageView" = FHImageView; };29 OUTLETS = {"_imageView" = FHImageView; "_progressIndicator" = NSProgressIndicator; }; 19 30 SUPERCLASS = WIWindowController; 20 31 }, Footagehead/trunk/FHBrowserController.m
r4723 r4725 425 425 [[_imageLoader notificationCenter] 426 426 addObserver:self 427 selector:@selector(imageLoaderReceivedImageData:) 428 name:FHImageLoaderReceivedImageData]; 429 430 [[_imageLoader notificationCenter] 431 addObserver:self 427 432 selector:@selector(imageLoaderDidLoadImage:) 428 433 name:FHImageLoaderDidLoadImage]; … … 564 569 565 570 - (void)handlerDidFinishLoading:(FHHandler *)handler { 571 } 572 573 574 575 - (void)imageLoaderReceivedImageData:(NSNotification *)notification { 576 FHFile *file; 577 578 file = [notification object]; 579 580 if(file == [self selectedFile]) { 581 if([_progressIndicator isHidden]) { 582 [_progressIndicator setIndeterminate:!([file percentReceived] > 0.0)]; 583 [_progressIndicator setHidden:NO]; 584 } 585 586 [_progressIndicator setDoubleValue:[file percentReceived]]; 587 [_progressIndicator animate:self]; 588 } 566 589 } 567 590 … … 1073 1096 class = [FHHandler handlerForURL:url]; 1074 1097 1075 if([class handlesURLAsDirectory:url]) { 1076 [self _loadURL:url]; 1077 } else { 1098 if([url isFileURL] && ![class handlesURLAsDirectory:url]) { 1078 1099 file = [[url path] lastPathComponent]; 1079 1100 url = [WIURL fileURLWithPath:[[url path] stringByDeletingLastPathComponent]]; … … 1083 1104 1084 1105 [self _loadURL:url selectFile:file]; 1106 } else { 1107 [self _loadURL:url]; 1085 1108 } 1086 1109 } Footagehead/trunk/FHCache.h
r4706 r4725 41 41 - (NSImage *)directoryIcon; 42 42 43 - (void)setFileIcon:(NSImage *)icon forURL:(WIURL *)url;44 43 - (NSImage *)fileIconForURL:(WIURL *)url; 45 46 - (void)setLargeFileIcon:(NSImage *)icon forExtension:(NSString *)extension;47 44 - (NSImage *)largeFileIconForExtension:(NSString *)extension; 48 49 - (void)setLargeFileIcon:(NSImage *)icon forURL:(WIURL *)url;50 45 - (NSImage *)largeFileIconForURL:(WIURL *)url; 51 46 52 - (void)setThumbnail:(FHImage *)image forURL:(WIURL *)url;53 47 - (FHImage *)thumbnailForURL:(WIURL *)url; 48 - (FHImage *)thumbnailForURL:(WIURL *)url withData:(NSData *)data; 54 49 - (void)dropThumbnailsForURL:(WIURL *)url; 55 50 Footagehead/trunk/FHCache.m
r4723 r4725 79 79 #pragma mark - 80 80 81 - (void)setFileIcon:(NSImage *)icon forURL:(WIURL *)url {82 if([_fileIcons count] > 1000)83 [_fileIcons removeObjectForKey:[[_fileIcons allKeys] objectAtIndex:0]];84 85 [_fileIcons setObject:icon forKey:[url string]];86 }87 88 89 90 81 - (NSImage *)fileIconForURL:(WIURL *)url { 91 return [_fileIcons objectForKey:[url string]]; 82 NSImage *image; 83 WIURL *faviconURL; 84 85 image = [_fileIcons objectForKey:[url string]]; 86 87 if(!image) { 88 if([url isFileURL]) { 89 image = [[NSWorkspace sharedWorkspace] iconForFile:[url path]]; 90 } else { 91 faviconURL = [[url copy] autorelease]; 92 [faviconURL setPath:@"/favicon.ico"]; 93 94 image = [[[NSImage alloc] initWithContentsOfURL:[faviconURL URL]] autorelease]; 95 96 if(!image) 97 image = [NSImage imageNamed:@"URL"]; 98 } 99 100 if(image) { 101 if([_fileIcons count] > 1000) 102 [_fileIcons removeObjectForKey:[[_fileIcons allKeys] objectAtIndex:0]]; 103 104 [_fileIcons setObject:image forKey:[url string]]; 105 } 106 } 107 108 return image; 109 } 110 111 112 113 - (NSImage *)largeFileIconForExtension:(NSString *)extension { 114 NSImage *image; 115 116 image = [_largeFileIcons objectForKey:extension]; 117 118 if(!image) { 119 image = [[NSWorkspace sharedWorkspace] iconForFileType:extension]; 120 121 if(image) { 122 [image setSize:NSMakeSize(128.0, 128.0)]; 123 124 if([_largeFileIcons count] > 1000) 125 [_largeFileIcons removeObjectForKey:[[_largeFileIcons allKeys] objectAtIndex:0]]; 126 127 [_largeFileIcons setObject:image forKey:extension]; 128 } 129 } 130 131 return image; 132 } 133 134 135 136 - (NSImage *)largeFileIconForURL:(WIURL *)url { 137 NSImage *image; 138 139 image = [_largeFileIcons objectForKey:[url string]]; 140 141 if(!image) { 142 image = [[NSWorkspace sharedWorkspace] iconForFile:[url path]]; 143 144 if(image) { 145 [image setSize:NSMakeSize(128.0, 128.0)]; 146 147 if([_largeFileIcons count] > 1000) 148 [_largeFileIcons removeObjectForKey:[[_largeFileIcons allKeys] objectAtIndex:0]]; 149 150 [_largeFileIcons setObject:image forKey:[url string]]; 151 } 152 } 153 154 return image; 92 155 } 93 156 … … 96 159 #pragma mark - 97 160 98 - (void)setLargeFileIcon:(NSImage *)icon forExtension:(NSString *)extension {99 if([_largeFileIcons count] > 1000)100 [_largeFileIcons removeObjectForKey:[[_largeFileIcons allKeys] objectAtIndex:0]];101 102 [_largeFileIcons setObject:icon forKey:extension];103 }104 105 106 107 - (NSImage *)largeFileIconForExtension:(NSString *)extension {108 return [_largeFileIcons objectForKey:extension];109 }110 111 112 113 #pragma mark -114 115 - (void)setLargeFileIcon:(NSImage *)icon forURL:(WIURL *)url {116 if([_largeFileIcons count] > 1000)117 [_largeFileIcons removeObjectForKey:[[_largeFileIcons allKeys] objectAtIndex:0]];118 119 [_largeFileIcons setObject:icon forKey:[url string]];120 }121 122 123 124 - (NSImage *)largeFileIconForURL:(WIURL *)url {125 return [_largeFileIcons objectForKey:[url string]];126 }127 128 129 130 #pragma mark -131 132 - (void)setThumbnail:(FHImage *)image forURL:(WIURL *)url {133 if([_thumbnails count] > 500)134 [_thumbnails removeObjectForKey:[[_thumbnails allKeys] objectAtIndex:0]];135 136 [_thumbnails setObject:image forKey:[url string]];137 }138 139 140 141 161 - (FHImage *)thumbnailForURL:(WIURL *)url { 142 return [_thumbnails objectForKey:[url string]]; 162 return [self thumbnailForURL:url withData:NULL]; 163 } 164 165 166 167 - (FHImage *)thumbnailForURL:(WIURL *)url withData:(NSData *)data { 168 FHImage *image; 169 170 image = [_thumbnails objectForKey:[url string]]; 171 172 if(!image) { 173 if(data) 174 image = [[[FHImage alloc] initThumbnailWithData:data preferredSize:NSMakeSize(128.0, 128.0)] autorelease]; 175 else 176 image = [[[FHImage alloc] initThumbnailWithURL:url preferredSize:NSMakeSize(128.0, 128.0)] autorelease]; 177 178 if(image) { 179 if([_thumbnails count] > 500) 180 [_thumbnails removeObjectForKey:[[_thumbnails allKeys] objectAtIndex:0]]; 181 182 [_thumbnails setObject:image forKey:[url string]]; 183 } 184 } 185 186 return image; 143 187 } 144 188 Footagehead/trunk/FHFile.h
r4709 r4725 38 38 FHImage *_thumbnail; 39 39 BOOL _loaded; 40 double _percentReceived; 40 41 BOOL _directory; 41 42 NSUInteger _index; … … 52 53 - (void)setLoaded:(BOOL)loaded; 53 54 - (BOOL)isLoaded; 55 - (void)setPercentReceived:(double)percent; 56 - (double)percentReceived; 54 57 55 58 - (NSString *)name; Footagehead/trunk/FHFile.m
r4709 r4725 52 52 53 53 if(!_directory) { 54 // --- get icon for extension55 54 icon = [[FHCache cache] largeFileIconForExtension:_extension]; 56 57 if(!icon) {58 icon = [[NSWorkspace sharedWorkspace] iconForFileType:_extension];59 [icon setSize:NSMakeSize(128.0, 128.0)];60 61 [[FHCache cache] setLargeFileIcon:icon forExtension:_extension];62 }63 55 64 56 _icon = [[FHImage alloc] initImageWithImage:icon]; 65 57 } else { 66 if(![_url isFileURL]) { 67 // --- get icon for generic remote directory 58 if(![_url isFileURL]) 68 59 icon = [[FHCache cache] directoryIcon]; 69 } else { 70 // --- get icon for local directory path 60 else 71 61 icon = [[FHCache cache] largeFileIconForURL:url]; 72 73 if(!icon) {74 icon = [[NSWorkspace sharedWorkspace] iconForFile:_path];75 [icon setSize:NSMakeSize(128.0, 128.0)];76 77 [[FHCache cache] setLargeFileIcon:icon forURL:_url];78 }79 }80 62 81 63 _icon = [[FHImage alloc] initImageWithImage:icon]; … … 144 126 145 127 128 - (void)setPercentReceived:(double)percentReceived { 129 _percentReceived = percentReceived; 130 } 131 132 133 134 - (double)percentReceived { 135 return _percentReceived; 136 } 137 138 139 146 140 #pragma mark - 147 141 Footagehead/trunk/FHFutabaHandler.h
r4724 r4725 29 29 #import "FHHTMLHandler.h" 30 30 31 enum _FHFutabaType { 32 FHFutaba4chan 33 }; 34 typedef enum _FHFutabaType FHFutabaType; 35 36 37 @interface FHFutabaHandler : FHHTMLHandler { 38 FHFutabaType _type; 39 } 31 @interface FHFutabaHandler : FHHTMLHandler 40 32 41 33 @end Footagehead/trunk/FHFutabaHandler.m
r4724 r4725 34 34 @implementation FHFutabaHandler 35 35 36 - (id)initHandlerWithURL:(WIURL *)url HTML:(NSString *)html {37 NSString *host;38 39 self = [super initHandlerWithURL:url HTML:html];40 41 host = [url host];42 43 if([host hasSuffix:@"4chan.org"])44 _type = FHFutaba4chan;45 46 return self;47 }48 49 50 51 #pragma mark -52 53 36 - (NSArray *)files { 54 37 NSArray *links; … … 66 49 url = [links objectAtIndex:i]; 67 50 68 switch(_type) { 69 case FHFutaba4chan: 70 if([[url path] containsSubstring:@"src.cgi"]) 71 continue; 72 break; 73 } 51 if([[url path] containsSubstring:@"src.cgi"]) 52 continue; 74 53 75 54 file = [[FHFile alloc] initWithURL:[links objectAtIndex:i] isDirectory:NO index:index++]; Footagehead/trunk/FHHandler.m
r4723 r4725 288 288 289 289 - (NSImage *)iconForURL:(WIURL *)url { 290 NSImage *icon; 291 WIURL *faviconURL; 292 293 icon = [[FHCache cache] fileIconForURL:url]; 294 295 if(!icon) { 296 if([url isFileURL]) { 297 icon = [[NSWorkspace sharedWorkspace] iconForFile:[url path]]; 298 } else { 299 faviconURL = [[url copy] autorelease]; 300 [faviconURL setPath:@"/favicon.ico"]; 301 302 icon = [[[NSImage alloc] initWithContentsOfURL:[faviconURL URL]] autorelease]; 303 304 if(!icon) 305 icon = [NSImage imageNamed:@"URL"]; 306 } 307 308 [[FHCache cache] setFileIcon:icon forURL:url]; 309 } 310 311 return icon; 290 return [[FHCache cache] fileIconForURL:url]; 312 291 } 313 292 Footagehead/trunk/FHImage.h
r4706 r4725 31 31 CGImageRef _CGImage; 32 32 33 CGImageSourceRef _imageSource; 34 33 35 WIURL *_url; 34 36 … … 44 46 - (id)initImageWithData:(NSData *)data; 45 47 - (id)initThumbnailWithURL:(WIURL *)url preferredSize:(NSSize)size; 48 - (id)initThumbnailWithData:(NSData *)data preferredSize:(NSSize)size; 46 49 47 50 - (void)setFlipped:(BOOL)flipped; Footagehead/trunk/FHImage.m
r4714 r4725 27 27 */ 28 28 29 #import "NSData-FHAdditions.h"30 29 #import "NSImage-FHAdditions.h" 31 30 #import "FHImage.h" … … 33 32 @interface FHImage(Private) 34 33 35 - (BOOL)_initImageWithData:(NSData *)data; 34 - (BOOL)_initImage; 35 - (BOOL)_initThumbnailWithPreferredSize:(NSSize)size; 36 36 37 37 @end … … 40 40 @implementation FHImage(Private) 41 41 42 - (BOOL)_initImage WithData:(NSData *)data{42 - (BOOL)_initImage { 43 43 NSDictionary *options; 44 CGImageSourceRef imageSource;45 46 imageSource = CGImageSourceCreateWithData((CFDataRef) data, NULL);47 48 if(!imageSource)49 return NO;50 44 51 45 options = [NSDictionary dictionaryWithObjectsAndKeys: … … 54 48 NULL]; 55 49 56 _CGImage = CGImageSourceCreateImageAtIndex(imageSource, 0, (CFDictionaryRef) options); 57 58 if(!_CGImage) { 59 CFRelease(imageSource); 60 50 _CGImage = CGImageSourceCreateImageAtIndex(_imageSource, 0, (CFDictionaryRef) options); 51 52 if(!_CGImage) 61 53 return NO; 62 }63 54 64 55 _size = NSMakeSize(CGImageGetWidth(_CGImage), CGImageGetHeight(_CGImage)); 65 66 CFRelease(imageSource);67 56 68 57 return YES; 69 58 } 70 59 71 @end 72 73 74 @implementation FHImage 75 76 + (id)imageNamed:(NSString *)name { 77 NSImage *image; 78 79 image = [NSImage imageNamed:name]; 80 81 if(!image) 82 return NULL; 83 84 return [[[self alloc] initImageWithImage:image] autorelease]; 85 } 86 87 88 89 #pragma mark - 90 91 - (id)initImageWithImage:(NSImage *)image { 92 self = [super init]; 93 94 _NSImage = [image retain]; 95 _size = [_NSImage size]; 96 97 return self; 98 } 99 100 101 102 - (id)initImageWithURL:(WIURL *)url { 103 NSData *data; 104 105 self = [super init]; 106 107 data = [NSData dataWithContentsOfURL:url returningResponse:NULL]; 108 109 if(!data) { 110 [self release]; 111 112 return NULL; 113 } 114 115 if(![self _initImageWithData:data]) { 116 [self release]; 117 118 return NULL; 119 } 120 121 return self; 122 } 123 124 125 126 - (id)initImageWithData:(NSData *)data { 127 self = [super init]; 128 129 if(![self _initImageWithData:data]) { 130 [self release]; 131 132 return NULL; 133 } 134 135 return self; 136 } 137 138 139 140 - (id)initThumbnailWithURL:(WIURL *)url preferredSize:(NSSize)size { 60 61 62 - (BOOL)_initThumbnailWithPreferredSize:(NSSize)size { 141 63 NSDictionary *options; 142 CGImageSourceRef imageSource;143 64 CFNumberRef number; 144 145 self = [super init];146 147 imageSource = CGImageSourceCreateWithURL((CFURLRef) [url URL], NULL);148 149 if(!imageSource) {150 [self release];151 152 return NULL;153 }154 65 155 66 number = CFNumberCreate(NULL, kCFNumberFloatType, &size.width); … … 160 71 NULL]; 161 72 162 _CGImage = CGImageSourceCreateThumbnailAtIndex(imageSource, 0, (CFDictionaryRef) options); 163 164 if(!_CGImage) { 165 [self release]; 166 CFRelease(imageSource); 167 168 return NULL; 169 } 73 _CGImage = CGImageSourceCreateThumbnailAtIndex(_imageSource, 0, (CFDictionaryRef) options); 74 75 if(!_CGImage) 76 return NO; 170 77 171 78 _size = NSMakeSize(CGImageGetWidth(_CGImage), CGImageGetHeight(_CGImage)); 172 79 173 CFRelease(imageSource); 80 return YES; 81 } 82 83 @end 84 85 86 @implementation FHImage 87 88 + (id)imageNamed:(NSString *)name { 89 NSImage *image; 90 91 image = [NSImage imageNamed:name]; 92 93 if(!image) 94 return NULL; 95 96 return [[[self alloc] initImageWithImage:image] autorelease]; 97 } 98 99 100 101 #pragma mark - 102 103 - (id)initImageWithImage:(NSImage *)image { 104 self = [super init]; 105 106 _NSImage = [image retain]; 107 _size = [_NSImage size]; 108 109 return self; 110 } 111 112 113 114 - (id)initImageWithURL:(WIURL *)url { 115 self = [super init]; 116 117 _imageSource = CGImageSourceCreateWithURL((CFURLRef) [url URL], NULL); 118 119 if(!_imageSource) { 120 [self release]; 121 122 return NULL; 123 } 124 125 if(![self _initImage]) { 126 [self release]; 127 128 return NULL; 129 } 130 131 return self; 132 } 133 134 135 136 - (id)initImageWithData:(NSData *)data { 137 self = [super init]; 138 139 _imageSource = CGImageSourceCreateWithData((CFDataRef) data, NULL); 140 141 if(!_imageSource) { 142 [self release]; 143 144 return NULL; 145 } 146 147 if(![self _initImage]) { 148 [self release]; 149 150 return NULL; 151 } 152 153 return self; 154 } 155 156 157 158 - (id)initThumbnailWithURL:(WIURL *)url preferredSize:(NSSize)size { 159 self = [super init]; 160 161 _imageSource = CGImageSourceCreateWithURL((CFURLRef) [url URL], NULL); 162 163 if(!_imageSource) { 164 [self release]; 165 166 return NULL; 167 } 168 169 if(![self _initThumbnailWithPreferredSize:size]) { 170 [self release]; 171 172 return NULL; 173 } 174 175 return self; 176 } 177 178 179 180 - (id)initThumbnailWithData:(NSData *)data preferredSize:(NSSize)size { 181 self = [super init]; 182 183 _imageSource = CGImageSourceCreateWithData((CFDataRef) data, NULL); 184 185 if(!_imageSource) { 186 [self release]; 187 188 return NULL; 189 } 190 191 if(![self _initThumbnailWithPreferredSize:size]) { 192 [self release]; 193 194 return NULL; 195 } 174 196 175 197 return self; … … 184 206 185 207 [_NSImage release]; 186 208 209 if(_imageSource) 210 CFRelease(_imageSource); 211 187 212 [super dealloc]; 188 213 } Footagehead/trunk/FHImageLoader.h
r4717 r4725 38 38 NSUInteger _thumbnailCounter; 39 39 40 NSMutableData *_asynchronousData; 41 FHFile *_asynchronousFile; 42 long long _asynchronousLength; 43 BOOL _asynchronousDone; 44 40 45 BOOL _imageStop; 41 46 BOOL _thumbnailStop; … … 47 52 48 53 49 #define FHImageLoaderDidLoadImage @"FHImageLoaderDidLoadImage" 50 #define FHImageLoaderDidLoadThumbnail @"FHImageLoaderDidLoadThumbnail" 54 #define FHImageLoaderReceivedImageData @"FHImageLoaderReceivedImageData" 55 56 #define FHImageLoaderDidLoadImage @"FHImageLoaderDidLoadImage" 57 #define FHImageLoaderDidLoadThumbnail @"FHImageLoaderDidLoadThumbnail" 51 58 52 59 Footagehead/trunk/FHImageLoader.m
r4717 r4725 44 44 _thumbnailLock = [[NSConditionLock alloc] initWithCondition:0]; 45 45 46 _asynchronousData = [[NSMutableData alloc] init]; 47 46 48 [NSThread detachNewThreadSelector:@selector(imageThread:) toTarget:self withObject:NULL]; 47 49 [NSThread detachNewThreadSelector:@selector(thumbnailsThread:) toTarget:self withObject:NULL]; … … 62 64 [_thumbnailLock release]; 63 65 66 [_asynchronousData release]; 67 64 68 [super dealloc]; 65 69 } … … 69 73 #pragma mark - 70 74 75 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 76 _asynchronousLength = [response expectedContentLength]; 77 } 78 79 80 81 - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 82 double percent; 83 84 [_asynchronousData appendData:data]; 85 86 if(_asynchronousLength > 0) { 87 percent = (double) [_asynchronousData length] / (double) _asynchronousLength; 88 89 if(percent > [_asynchronousFile percentReceived] + 0.1 || [_asynchronousFile percentReceived] == 0.0) { 90 [_asynchronousFile setPercentReceived:percent]; 91 92 [_notificationCenter mainThreadPostNotificationName:FHImageLoaderReceivedImageData 93 object:_asynchronousFile]; 94 } 95 } else { 96 [_notificationCenter mainThreadPostNotificationName:FHImageLoaderReceivedImageData 97 object:_asynchronousFile]; 98 } 99 } 100 101 102 103 - (void)connectionDidFinishLoading:(NSURLConnection *)connection { 104 _asynchronousDone = YES; 105 } 106 107 108 109 - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { 110 _asynchronousDone = YES; 111 } 112 113 114 115 #pragma mark - 116 71 117 - (void)imageThread:(id)object { 72 NSAutoreleasePool *pool; 73 NSArray *files; 74 FHImage *image; 75 FHFile *file; 76 NSUInteger i, count, index; 77 NSUInteger counter, lastCounter = 0; 78 BOOL stop; 118 NSAutoreleasePool *pool; 119 NSArray *files; 120 NSData *data; 121 NSURLConnection *connection; 122 NSMutableURLRequest *request; 123 WIURL *url; 124 FHImage *image; 125 FHFile *file; 126 NSUInteger i, count, index; 127 NSUInteger counter, lastCounter = 0; 128 BOOL stop; 79 129 80 130 [NSThread setThreadPriority:0.5]; 131 132 pool = [[NSAutoreleasePool alloc] init]; 133 request = [[NSMutableURLRequest alloc] init]; 81 134 82 135 while(YES) { 83 pool = [[NSAutoreleasePool alloc] init]; 136 if(!pool) 137 pool = [[NSAutoreleasePool alloc] init]; 84 138 85 139 [_imageLock lockWhenCondition:1]; … … 128 182 goto next; 129 183 130 image = [[FHImage alloc] initImageWithURL:[file URL]]; 184 url = [file URL]; 185 186 if([url isFileURL]) { 187 data = [NSData dataWithContentsOfFile:[url path]]; 188 } else { 189 [request setURL:[url URL]]; 190 [request setValue:[[url URLByDeletingLastPathComponent] string] forHTTPHeaderField:@"Referer"]; 191 192 connection = [NSURLConnection connectionWithRequest:request delegate:self]; 193 194 _asynchronousDone = NO; 195 _asynchronousFile = file; 196 [_asynch
